Linux基本操作

目录结构

Linux 的一切资源都挂载在 / 节点下。
/bin: Binary 的缩写。存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行。
/boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev: Device 的缩写。该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc: Etcetera 的缩写。这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib: Library 的缩写。这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/lib64: 64 位相关的库会放在这。
/media: linux 系统会自动识别一些设备,例如 U 盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/opt: optional 的缩写。这是给主机额外安装软件所摆放的目录。
/proc: Processes 的缩写。/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里
/root: 该目录为系统管理员,也称作超级权限者的用户主目录。
/run: 运行目录
/sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
/srv: 该目录存放一些服务启动之后需要提取的数据。
/sys: 虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息
/tmp: temporary 的缩写这个目录是用来存放一些临时文件的。
/usr: unix system resources 缩写。用于存储系统软件资源。
/var: 用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等

Vim 编辑器

基本上 vim 共分为三种模式,分别是普通模式,编辑模式和命令模式。

普通模式

刚刚启动 vi/vim,便进入了一般模式(默认模式)。此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符。在此模式可以复制黏贴,删除等操作。若想要编辑文本,进入一般模式,按下 i,切换到编辑模式。

按键 说明
x 向后删除一个字符,相当于 del
X 向前删除一个字符,相当于 backspace
nx n 为数字,连续向后删除 n 个字符
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p 将已复制的数据在光标下一行贴上
P 将已复制的数据在光标上一行贴上
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例:向下删除 10 行:10cj
u 复原前一个动作
Ctrl+r 重做上一个动作
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n< space> n 表示数字,光标会向右移动这一行的 n 个字符
0 或 Home 移动到这一行的最前面字符处
$ 或 End 移动到这一行的最后面字符处
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行
nG n 为数字。移动到这个档案的第 n 行
gg 移动到这个档案的第一行
n< Enter> n 为数字。光标向下移动 n 行
/n n 为要搜索的内容。向光标之下寻找一个名称为 n 的字符串
?n 向光标之上寻找一个字符串名称为 n 的字符串
n 重复前一个搜寻的动作
N 与 n 相反,反向进行前一个搜寻动作
h 或 ← 光标向左移动一个字符
j 或 ↓ 光标向下移动一个字符
k 或 ↑ 光标向上移动一个字符
l 或 → 光标向右移动一个字符
Ctrl+ f 屏幕向下移动一页,相当于 Page Down 按键
Ctrl + b] 屏幕向上移动一页,相当于 Page Up 按键
Ctrl+ d 屏幕向下移动半页
Ctrl + u 屏幕向上移动半页

编辑模式

在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式。在编辑模式当中,左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮。

按键 说明
i, I i 为从目前光标所在处输入, I 在目前所在行的第一个非空格符处开始输入
a, A a 为从目前光标所在的下一个字符处开始输入, A 为从光标所在行的最后一个字符处开始输入
o, O o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行
r, R r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下 ESC 为止

命令模式

在一般模式之中,只要按下 :或 / 就可以进入命令模式。

按键 说明
:w 保存
:w! 若文件属性为只读时,强制写入该档案。不过,能不能写入, 还跟你对该档案的档案权限有关
:q 退出
:q! 强制退出
:wq 保存并退出
ZZ 效果等同于保存并退出
ZQ 效果等同于 :q!
:w [filename] 将编辑的数据储存成另一个文件
:r [filename] 在编辑的数据中,读入另一个文件的数据。将 filename 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例::! ls /home 即可在 vi 当中察看 /home 底下以 ls 输出的档案信息
:set nu 显示行号
:set nonu 取消行号
: s/old/new 替换当前匹配到的第一个 old 为 new
: s/old/new/g 替换当前匹配到所有的 old 为 new
:%s/old/new 替换文档中每一行匹配到的第一个 old 为 new
:%s/old/new/g 替换文档中匹配到所有的 old 为 new

常用命令

文件常用命令

pwd 命令

pwd 命令来自于英文词组”print working directory“的缩写,其功能是用于显示当前工作目录的路径,即显示所在位置的绝对路径。

1
2
# 查看当前工作目录路径
pwd

ls 命令

ls 命令来自于英文单词 list 的缩写,其功能是列举出指定目录下的文件名称及其属性。默认不加参数的情况下,ls 命令会列出当前工作目录中的文件信息。

参数 说明
-a 显示所有文件及目录 (包括以“.”开头的隐藏文件)
-l 使用长格式列出文件及目录的详细信息
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-A 同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录)
-S 根据文件大小排序
-R 递归列出所有子目录
-d 查看目录的信息,而不是里面子文件的信息
-i 输出文件的 inode 节点信息
-m 水平列出文件,以逗号间隔
-X 按文件扩展名排序
–color 输出信息中带有着色效果

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 输出当前目录中的文件(默认不含隐藏文件)
ls

# 输出当前目录中的文件(含隐藏文件)
ls -a

# 输出文件的长格式,包含属性详情信息
ls -l

# 输出指定目录中的文件列表
ls /etc

# 输出文件名称及inode属性块号码
ls -i

# 搭配通配符一起使用,输出指定目录中所有以sd开头的文件名称
ls /dev/sd*

# 依据文件大小进行排序,输出指定目录中文件属性详情信息
ls -Sl /etc

mkdir 命令

来自于英文词组“make directories”的缩写,其功能是用来创建目录文件。

参数 说明
-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-z 设置安全上下文
-v 显示目录的创建过程

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 在当前工作目录中,建立一个目录文件
mkdir dir1

# 在当前工作目录中,创建一个目录文件并设置700权限,不让除所有主以外任何人读、写、执行它
mkdir -m 700 dir2

# 在当前工作目录中,一次性创建多个目录文件
mkdir dir3 dir4 dir5

# 在系统根目录中,一次性创建多个有嵌套关系的目录文件
mkdir -p /dir1/dir2/dir3/dir4/dir5

rmdir 命令

  • 来自于英文词组“remove directory”的缩写,其功能是用于删除空目录文件。
  • rmdir 命令仅能够删除空内容的目录文件,如需删除非空目录时,则需要使用带有-R 参数的 rm 命令进行操作。而 rmdir 命令的-p 递归删除操作亦不意味着能删除目录中已有的文件,而是要求每个子目录都必须是空的。
参数 说明
-p 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
-v 显示命令的详细执行过程

参考实例

1
2
3
4
5
6
7
8
# 删除指定的空目录
rmdir Documents

# 删除指定的空目录,及其内的子空目录
rmdir -p Documents

# 删除指定的空目录,并显示删除的过程
rmdir -v Documents

touch 命令

touch 命令可以创建一个新文件

1
2
3
4
# 创建一个新文件
touch text
# 在指定目录下创建一个新文件
touch /home/text

cp 命令

来自于英文单词 copy 的缩写,用于将一个或多个文件或目录复制到指定位置。

参数 说明
-f 若目标文件已存在,则会直接覆盖原文件
-i 若目标文件已存在,则会询问是否覆盖
-p 保留源文件或目录的所有属性
-r 递归复制文件和目录
-d 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l 对源文件建立硬连接,而非复制文件
-s 对源文件建立符号连接,而非复制文件
-b 覆盖已存在的文件目标前将目标文件备份
-v 详细显示 cp 命令执行的操作过程
-a 等价于“pdr”选项

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在当前工作目录中,将某个文件复制一份,并定义新文件名称
cp anaconda-ks.cfg kickstart.cfg

# 在当前工作目录中,将某个目录复制一份,并定义新目录名称
cp -r Documents Doc

复制某个文件时,保留其原始权限及用户归属信息
cp -a kickstart.cfg ks.cfg

# 将某个文件复制到/etc目录中,并覆盖已有文件,不进行询问
cp -f ks.cfg /etc

# 将多个文件一同复制到/etc目录中,如已有目标文件名称则默认询问是否覆盖
cp anaconda-ks.cfg ks.cfg /etc

rm 命令

来自于英文单词 remove 的缩写,其功能是用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。

参数 说明
-f 强制删除(不二次询问)
-i 删除前会询问用户是否操作
-r/R 递归删除
-v 显示指令的详细执行过程

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 删除某个文件,默认会进行二次确认,敲击y进行确认
rm anaconda-ks.cfg

# 删除某个文件,强制操作不需要二次确认:
rm -f initial-setup-ks.cfg

# 删除某个目录及其内的子文件或子目录,一并都强制删除
rm -rf Documents

# 强制删除当前工作目录内的所有以.txt为后缀的文件
rm -f *.txt

# 强制清空服务器系统内的所有文件
rm -rf /*

mv 命令

来自于英文单词 move 的缩写,用于对文件进行剪切和重命名

参数 说明
-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-n: 不要覆盖任何已存在的文件或目录
-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 在当前工作目录中,对某个文件进行剪切后粘贴(重命名)操作
mv anaconda-ks.cfg ks.cfg

# 将某个文件移动到/etc目录中,保留文件原始名称
mv ks.cfg /etc

# 将某个目录移动到/etc目录中,并定义新的目录名称
mv Documents /etc/docs

# 将/home目录中所有的文件都移动到当前工作目录中,遇到已存在文件则直接覆盖
mv -f /home/* .

cat 命令

来自于英文单词 concatenate 的缩写,其功能是用于查看文件内容。cat 命令适合查看内容较少的、纯文本的文件。

参数 说明
-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号

参考实例

1
2
3
4
5
# 查看某个文件的内容
cat anaconda-ks.cfg

# 查看某个文件的内容,并显示行号
cat -n anaconda-ks.cfg

more 命令

用于分页显示文本文件内容。如果文本文件中的内容较多较长,使用 cat 命令读取后则很难看清,这时使用 more 命令进行分页查看就更加合适,可以把文本内容一页一页的显示在终端界面上,用户每按一次回车即向下一行,每按一次空格即向下一页,直至看完为止。

参数 说明
-num 指定每屏显示的行数
-l more 在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l 选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-p 先清除屏幕再显示文本文件的剩余内容
-c 与-p 相似,不滚屏,先显示内容再清除旧内容
-s 多个空行压缩成一行显示
-u 禁止下划线
+/pattern 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 分页显示指定的文本文件内容
more anaconda-ks.cfg

# 先进行清屏操作,随后以每次10行内容的格式显示指定的文本文件内容
more -c -10 anaconda-ks.cfg

# 分页显示指定的文本文件内容,遇到连续两行以上空白行的情况,则以一行空白行显示
more -s anaconda-ks.cfg

# 从第10行开始,分页显示指定的文本文件内容
more +10 anaconda-ks.cfg

less 命令

less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

参数 说明
-b 设置缓冲区的大小
-e 当文件显示结束后自动退出
-f 强制打开文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示阅读进度百分比
-N 显示每行的行号
-o 将输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 在单行显示较长的内容,而不换行显示
-x 将 TAB 字符显示为指定个数的空格字符

参考实例

1
2
3
4
5
6
7
8
# 分页查看指定的文件内容
less anaconda-ks.cfg

# 分页查看指定的文件内容及行号
less -N anaconda-ks.cfg

# 分页显示指定命令的输出结果
history | less

echo 命令

  • 输出字符串或提取后的变量值

  • echo 是用于在终端设备上输出指定字符串或变量提取后值的命令。能够给用户一些简单的提醒信息,也可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息再来进行二次处理,又或者同输出重定向符一起操作,将信息直接写入到文件中。

  • 如需提取变量值,需在变量名称前加入$符号做提取,变量名称一般均为大写形式。

参数 说明
-n 不输出结尾的换行符
-e “\a” 发出警告音
-e “\b” 删除前面的一个字符
-e “\c” 结尾不加换行符
-e “\f” 换行,光标扔停留在原来的坐标位置
-e “\n” 换行,光标移至行首
-e “\r” 光标移至行首,但不换行
-E 禁止反斜杠转移,与-e 参数功能相反

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 输出指定字符串到终端设备界面
echo LinuxCool

# 输出某个变量值内容
echo $PATH

# 搭配转义符一起使用,输出纯字符串内容
echo \$PATH

# 搭配输出重定向符一起使用,将字符串内容直接写入文件中 >是替换 >> 向尾部追加内容
echo "Hello World" > Document

# 搭配反引号执行命令,并将执行结果输出
echo `uptime`

# 输出带有换行符的内容
echo -e "First\nSecond\nThird"

# 指定删除字符串中某些字符,随后将内容输出。结果:12456
echo -e "123\b456"

head 命令

显示文件开头的内容,默认为前 10 行。

参数 说明
-n <数字> 定义显示行数
-c <数字> 指定显示头部内容的字符数
-v 总是显示文件名的头信息
-q 不显示文件名的头信息

参考实例

1
2
3
4
5
# 指定显示文件的前5行内容
head -n 5 anaconda-ks.cfg

# 指定显示文件的前20个字符
head -c 20 anaconda-ks.cfg

tail 命令

用于查看文件尾部内容,默认为后 10 行。如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分。

参数 说明
-c 输出文件尾部的 N(N 为整数)个字节内容
-f 持续显示文件最新追加的内容
-n 输出文件的尾部 N(N 位数字)行内容
–retry 即是在 tail 命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。
–pid=<进程号> 与“-f”选项连用,当指定的进程号的进程终止后,自动退出 tail 命令

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 指定显示某个文件尾部的后5行内容
tail -n 5 initial-setup-ks.cfg

# 指定显示某个文件尾部的后15个字节
tail -c 15 initial-setup-ks.cfg

# 持续刷新显示某个文件尾部的后10行内容
tail -f /var/log/messages

# 显示文件 notes.log 的内容,从第 20 行至文件末尾
tail -n +20 notes.log

ln 命令

  • 来自于英文单词 link 的缩写,中文译为“链接”,其功能是用于为某个文件在另外一个位置建立同步的链接。

  • Linux 系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic link)。

  • 软连接相当于 Windows 系统中的快捷方式文件,原始文件被移动或删除后,软连接文件也将无法使用,而硬链接则是通过将文件的 inode 属性块进行了复制 ,因此把原始文件移动或删除后,硬链接文件依然可以使用。

参数 说明
-b 为每个已存在的目标文件创建备份文件
-d 此选项允许“root”用户建立目录的硬链接
-f 强制创建链接,即使目标文件已经存在
-n 把指向目录的符号链接视为一个普通文件
-i 交互模式,若目标文件已经存在,则提示用户确认进行覆盖
-s 对源文件建立符号链接,而非硬链接
-v 详细信息模式,输出指令的详细执行过程

参考实例

1
2
3
4
5
6
7
8
9
# 为指定的源文件创建快捷方式(默认为硬链接形式)
ln anaconda-ks.cfg ana.cfg

# 为指定的源文件创建快捷方式(设定为软连接形式)
ln -s initial-setup-ks.cfg ini.cfg

# 在指定的源文件创建快捷方式,并输出制作的过程信息
ln -v anaconda-ks.cfg ana.cfg

history 命令

显示与管理历史命令记录。Linux 系统默认会记录用户所执行过的所有命令,可以使用 history 命令查阅它们,也可以对其记录进行修改和删除操作。

参数 说明
-a 写入命令记录
-c 清空命令记录
-d 删除指定序号的命令记录
-n 读取命令记录
-r 读取命令记录到缓冲区
-s 将指定的命令添加到缓冲区
-w 将缓冲区信息写入到历史文件

时间日期常用命令

date 命令

用来显示或设定系统的日期与时间。

参数 说明
-d 通过字符串显示时间格式,字符串不能是’now’
-s 根据字符串设置系统时间
-u 显示目前的格林威治时间
-r 显示文件的上次修改时间

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 以默认格式输出系统当前的日期与时间信息
date

# 按照“年-月-日”的指定格式输出系统当前的日期信息
date "+%Y-%m-%d"

# 按照“小时:分钟:秒”的指定格式输出系统当前的时间信息
date "%H:%M:%S"

# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"

# 输出 2 秒后的时间
date -d "2 second" +"%Y-%m-%d %H:%M.%S"

# 时间格式转换
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"

# 按自己的格式输出
date '+usr_time: $1:%M %P -hey'

cal 命令

cal 命令的名字来自英语单词“Calendar”。改命令用来显示当前日历,或者指定日期的公历(公历是现在国际通用的历法,又称格列历,通称阳历。)如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份 。

参数 说明
-l 单月分输出日历
-3 显示最近三个月的日历
-s 将星期天作为月的第一天
-m 将星期一作为月的第一天
-j 显示在当年中的第几天(儒略日)
-y 显示当年的日历

参考实例

1
2
3
4
5
6
7
8
# 显示当前月份的日历
cal

# 显示近期三个月的日历(当前月,上一个月和下一个月)
cal -3

# 显示指定年月的日历,如显示2020年2月的日历
cal 2 2020

用户管理常用命令

useradd 命令

  • 创建并设置用户信息。

  • useradd 命令来自于英文词组“User add”的全拼,其功能是用于创建并设置用户信息。使用 useradd 命令可以自动的完成创建用户的信息、基本组、家目录等工作,并在创建的过程中对用户初始信息进行定制。

  • 已创建的用户则需使用 chmod 命令修改账户信息,passwd 命令修改密码信息。

参数 说明
-D 改变新建用户的预设值
-c 添加备注文字
-d 新用户每次登陆时所使用的家目录
-e 用户终止日期,日期的格式为 YYYY-MM-DD
-f 用户过期几日后永久停权。当值为 0 时用户立即被停权,而值为-1 时则关闭此功能,预设值为-1
-g 指定用户对应的用户组
-G 定义此用户为多个不同组的成员
-m 用户目录不存在时则自动创建
-M 不建立用户家目录,优先于/etc/login.defs 文件设定
-n 取消建立以用户名称为名的群组
-r 建立系统帐号
-u 指定用户 id

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建指定的用户信息
useradd user1

# 创建指定的用户信息,但不创建家目录,亦不让登录系统
useradd -M -s /sbin/nologin user2

# 创建指定的用户信息,并自定义UID值
useradd -u 6688 user3

# 创建指定的用户信息,并追加指定组为该账户的扩展组
useradd -G root user4

# 创建指定的用户信息,并指定过期时间
useradd -e "2023/01/01" user5

# 为新添加的用户指定home目录
useradd -d /home/myd user6

passwd 命令

passwd 命令来自于英文单词 password 的缩写。同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。

参数 说明
-d 删除已有密码
-l 锁定用户的密码值,不允许修改
-u 解锁用户的密码值,允许修改
-e 下次登陆强制修改密码
-k 用户在期满后能仍能使用
-S 查询密码状态

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 修改当前登录用户的密码值
passwd

# 修改指定用户的密码值
passwd linuxprobe

# 锁定指定用户的密码值,不允许其进行修改
passwd -l linuxprobe

# 解锁指定用户的密码值,允许其进行修改
passwd -u linuxprobe

# 强制指定的用户在下次登陆时必须重置其密码
passwd -e linuxprobe

# 删除指定用户的密码值
passwd -d linuxprobe

# 查看指定用户的密码状态
passwd -S linuxprobe

su 命令

su 命令来自于英文单词“switch user”的缩写。管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。

参数 说明
单个减号(-) 完全身份变更
-c 执行完指定的指令后,即恢复原来的身份
-f 适用于 csh 与 tsch,使 shell 不用去读取启动文件
-l 改变身份时,也同时变更工作目录
-m 变更身份时,不要变更环境变量
-s 指定要执行的 shell

参考实例

1
2
3
4
5
# 变更至指定用户身份
su user1

# 完全变更至指定用户身份
su - user1

id 命令

UID 是指用户身份的唯一识别号码,相当于人类社会的身份证号码,而 GID 则指用户组的唯一识别号码,用户仅有一个基本组,但可以有多个扩展组。

参数 说明
-g 显示用户所属群组的 ID
-G 显示用户扩展群组的 ID
-n 显示用户所属群组或扩展群组的名称
-r 显示实际 ID
-u 显示用户 ID

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 显示当前用户的身份信息
id

# 显示当前用户的所属群组GID
id -g

# 显示当前用户的身份码UID
id -u

# 查询当前用户的身份信息
id linuxprobe

# 查看创建了哪些用户
cat /etc/passwd

sudo 命令

  • 授权普通用户执行管理员命令。

  • sudo 命令来自于英文词组“super user do”的缩写,中文译为“超级用户才能干的事”。使用 sudo 服务可以授权某个指定的用户去执行某些指定的命令,在满足工作需求的前提下尽可能少的放权,保证服务器的安全。

  • 配置 sudo 服务可以直接编辑配置文件/etc/sudoers,亦可以执行 visudo 命令进行设置,一切妥当后普通用户便能够使用 sudo 命令进行操作了。

参数 说明
-v 本次需要验证当前用户的密码
-k 下次强制验证当前用户的密码
-b 将要执行的指令放在后台执行
-p 更改需要密码验证时的提示语
-s 指定默认调用的 SHELL 解释器

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看当前用户有哪些被sudo服务授权的命令
sudo -l

# 修改sudoers文件将需要sudo服务的用户加入文件
vim /etc/sudoers

# 使用某个被sudo服务允许的用户身份来执行管理员的重启命令
sudo -u linuxprobe "reboot"

# 使用当前用户身份,基于sudo命令来执行管理员的重启命令
sudo reboot

# 以root权限执行上一条命令
$ sudo !!

who 命令

用于显示当前登录用户信息,包含登录的用户名、终端、日期时间、进程等信息,帮助运维人员了解当前系统的登入用户情况。

参数 说明
-a 全面信息
-b 系统最近启动时间
-d 死掉的进程
-l 系统登录进程
-H 带有列标题打印用户名,终端和时间
-t 系统上次锁定时间
-u 已登录用户列表

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 查看当前登录用户信息
who

# 查看当前登录用户信息,并加上标题
who -H

# 查看当前全部的登录全部用户信息
who -H -a

# 查看系统的最近启动时间
who -b

usermod 命令

usermod 命令来自于英文词组“user modify”的缩写,其功能是用于修改用户账号中的各项参数

参数 说明
-c<备注> 修改用户账号的备注文字
-d<登入目录> 修改用户登入时的家目录
-e<有效期限> 修改账号的有效期限
-f<缓冲天数> 修改在密码过期后多少天即关闭该账号
-g<群组> 修改用户所属的群组
-G<群组> 修改用户所属的附加群组
-l<账号名称> 修改用户账号名称
-L 锁定用户密码,使密码无效
-s 修改用户登入后所使用的 shell
-u 修改用户 ID
-U 解除密码锁定

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
修改指定用户的家目录路径
usermod -d /home user1

修改指定用户的UID号码
usermod -u 6688 user1

修改指定用户的名称为user2
usermod -l user2 user1

锁定指定用户的账户,临时不允许登录系统
usermod -L user1

解锁指定用户的账户,再次允许登录系统
usermod -U user1

userdel 命令

userdel 命令来自于英文词组“user delete”的缩写。Linux 系统中一切都是文件,用户信息被保存到了/etc/passwd、/etc/shadow 以及/etc/group 文件中,因此使用 userdel 命令实际就是帮助我们删除了指定用户在上述三个文件中的对应信息。

参数 说明
-f 强制删除用户账号
-r 删除用户主目录及其中的任何文件

参考实例

1
2
3
4
5
# 删除指定的用户账户信息
userdel linuxcool

# 删除指定的用户账户信息及家目录
userdel -r linuxcool

当我们想删除某个用户的时候,出现 user xxx is currently used by process xxx,可能的原因是你创建用户 user1 之后,使用 su 命令切换到 user1 用户下,之后又想删除 user1 用户,使用 su root 切换到 root 用户下,使用 userdel user1。出现上述情况的根本原因在于切换回 root 用户之后,user1 还被某个进程占用解决方案:ctrl+d(退出当前用户)

第一次使用 ctrl+d 退出 root 用户,回到 user1 用户;第二次使用 ctrl+d 退出 user1 用户,此时会返回到 root 用户(再按 ctrl+d 退出登陆连接),此时使用 userdel user1 正常删除。

用户组管理常用命令

groupadd 命令

groupadd 命令来自于英文词组“group add”。每个用户在创建时都有一个与其同名的基本组,后期可以使用 groupadd 命令创建出新的用户组信息,让多个用户加入到指定的扩展组中。

参数 说明
-g 指定新建工作组的 id
-r 创建系统工作组
-K 覆盖配置文件“/ect/login.defs”
-o 允许添加组 ID 号不唯一的工作组

参考实例

1
2
3
4
5
6
7
8
# 创建一个新的用户组
groupadd user1

# 创建一个新的用户组,并指定GID号码
groupadd -g 6688 user1

# 创建一个新的用户组,设定为系统工作组
groupadd -r user1

groupmod 命令

更改群组识别码或名称

参数 说明
-g 设置欲使用的群组识别码
-o 重复使用群组识别码
-n 设置欲使用的群组名称

参考实例

1
2
# 更改user1用户组为root
groupmod -n root user1

groupdel 命令

  • 删除用户组。

  • groupdel 命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group 和/ect/gshadow。

  • userdel 修改系统账户文件,删除与 GROUP 相关的所有项目。给出的组名必须存在。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组

1
2
3
4
5
# 使用groupdel命令删除user1工作组
groupdel user1

# 查看user1组是否删除成功
more /etc/group|grep user1

文件基本属性

每个文件的属性由左边第一部分的 10 个字符来确定。
在这里插入图片描述

第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。

第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限。

第 7-9 位确定其他用户拥有该文件的权限。

第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限。

第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限。

第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。

在这里插入图片描述

文件权限常用命令

chmod 命令

  • 改变文件或目录权限。

  • chmod 命令来自于英文词组”change mode“的缩写。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。

  • 设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入-R 参数进行递归操作,意味着不仅对于目录本身,也对目录内的子文件/目录都进行新权限的设定。

  • Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。

在这里插入图片描述

语法: chmod [ {ugoa} {+-=} {rwx} ] 文件或目录

语法: chmod [ mode=421 ] 文件或目录

  • u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

  • +表示增加权限、- 表示取消权限、= 表示唯一设定权限。

  • r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

参数 说明
-c 若该文件权限确实已经更改,才显示其更改动作
-f 若该文件权限无法被更改也不显示错误讯息
-v 显示权限变更的详细资料
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
  • chmod 命令可以使用八进制数来指定权限。

  • 文件或目录的权限位是由 9 个权限位来控制,每三位为一组,它们分别是文件所有者(User)的读、写、执行,用户组(Group)的读、写、执行以及其它用户(Other)的读、写、执行。

  • 文件权限被放在一个比特掩码中,掩码中指定的比特位设为 1,用来说明一个类具有相应的优先级。

# 权限 rwx 二进制
7 读 + 写 + 执行 r w x 111
6 读 + 写 r w - 110
5 读 + 执行 r - x 101
4 只读 r - - 100
3 写 + 执行 - w x 011
2 只写 - w - 010
1 只执行 - - x 001
0 - - - 000

例:765 解释:

  • 所有者的权限用数字表达:属主的那三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。

  • 用户组的权限用数字表达:属组的那个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。

  • 其它用户的权限数字表达:其它用户权限位的数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 设定某个文件的权限为775
chmod 775 anaconda-ks.cfg

# 设定某个文件让任何人都可以读取
chmod a+r anaconda-ks.cfg

# 设定某个目录及其内子文件任何人都可以读取和读取
chmod -R a+r Documents

# 设定某个二进制命令文件上新增SUID特殊权限位
chmod u+s /sbin/reboot

# 将文件 file1.txt 设为所有人皆可读取
chmod ugo+r file1.txt

# 将文件 file1.txt 设为所有人皆可读取
chmod a+r file1.txt

# 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt

# 为 ex1.py 文件拥有者增加可执行权限
chmod u+x ex1.py

# 将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *

# 此外chmod也可以用数字来表示权限如
chmod 777 file

chown 命令

  • 改变文件或目录的用户和用户组信息。
  • chown 命令来自于英文词组”Change owner“的缩写。管理员可以改变一切文件的所属信息,而普通用户只能改变自己文件的所属信息。

语法格式: chown [参数] 所属主:所属组 文件

参数 说明
-R 对目前目录下的所有文件与目录进行相同的变更
-c 显示所属信息变更信息
-f 若该文件拥有者无法被更改也不要显示错误
-h 只对于链接文件进行变更,而非真正指向的文件
-v 显示拥有者变更的详细资料

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 改变指定文件的所属主与所属组
chown root:root /etc/fstab

# 改变指定文件的所属主与所属组,并显示过程
chown -c linuxprobe:linuxprobe /etc/fstab

# 改变指定目录及其内所有子文件的所属主与所属组
chown -R root:root /etc

# 把 /var/run/httpd.pid 的所有者设置 root
chown root /var/run/httpd.pid

# 将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup
chown runoob:runoobgroup file1.txt

# 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup
chown -R runoob:runoobgroup *

# 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者
chown :512 /home/runoob

chgrp 命令

chgrp 是英语单词“change group”的缩写,命令的作用和其中文释义一样,为用于变更文件或目录的所属群组。

参数 说明
-c 效果类似”-v”参数,但仅回报更改的部分
-f 不显示错误信息
-h 对符号连接的文件作修改,而不更动其他任何相关文件
-R 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程
–reference 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同

参考实例

1
2
3
4
5
6
7
8
# 改变文件的群组属性
chgrp -v linuxcool file

# 根据指定文件改变文件的群组属性
chgrp --reference=file_1 file_2

# 将/usr/linuxcool及其子目录下的所有文件的用户组改为cool
chgrp -R cool /usr/linuxcool

搜索文件常用命令

  • 根据路径和条件搜索指定文件。

  • find 命令可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能。

  • find 命令通常进行的是从根目录(/)开始的全盘搜索,有别于 whereis、which、locate……等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用 find 命令的模糊搜索,会相对消耗较多的系统资源。

参数 说明
-name 匹配名称
-perm 匹配权限(mode 为完全匹配,-mode 为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)
-atime -n +n 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)
-ctime -n +n 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件 f1 新但比 f2 旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB 为查找超过 50KB 的文件,而-50KB 为查找小于 50KB 的文件)
-prune 忽略某个目录
-exec …… {}; 后面可跟用于进一步处理搜索结果的命令

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 全盘搜索系统中所有以.conf结尾的文件
find / -name *.conf

# 在/home目录中搜索所有属于指定用户的文件
find /home -user linuxprobe

# 列出当前工作目录中的所有文件、目录以及子文件信息
find .

# 在/var/log目录下搜索所有指定后缀的文件,后缀不需要大小写
find /var/log -iname "*.log"

# 在/var/log目录下搜索所有后缀不是.log的文件
find /var/log ! -name "*.log"

# 搜索当前工作目录中的所有近7天被修改过的文件
find . -mtime +7

# 全盘搜索系统中所有类型为目录,且权限为1777的目录文件
find / -type d -perm 1777

# 全盘搜索系统中所有类型为普通文件,且可以执行的文件信息
find / -type f -perm /a=x

# 全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件
find / -name "*.mp4" -exec rm -rf {} \;

# 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来
find . -name "*.c"

# 将当前目录及其子目录中的所有文件列出
find . -type f

# 将当前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime 20

# 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们
find /var/log -type f -mtime +7 -ok rm {} \;

# 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find . -type f -perm 644 -exec ls -l {} \;

# 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls -l {} \;

which 命令

  • 查找命令文件。
  • which 命令能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find 与 locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么就使用 which 命令。
参数 说明
-n 指定文件名长度(不含路径)
-p 指定文件名长度(含路径)
-w 指定输出时栏位的宽度
-V 显示版本信息

参考实例

1
2
3
4
5
# 查找某个指定命令文件所在位置
which reboot

# 查找多个指定命令文件所在位置
which shutdown poweroff

updatedb 命令

  • 创建或更新数据库文件。

  • updatedb 命令用来创建或更新 slocate/locate 命令所必需的数据库文件。

  • updatedb 命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入 slocate/locate 数据库文件中。

  • slocate 本身具有一个数据库,里面存放了系统中文件与目录的相关信息。

  • 使用 updatedb 命令可以创建或更新 locate 所使用的数据库。如果数据库已经存在,它的数据是重复使用,以避免重读并没有改变的目录。updatedb 通常每天由 cron 运行来更新默认的数据库。

参数 说明
-o 忽略默认的数据库文件,使用指定的 slocate 数据库文件
-U 更新指定目录的 slocate 数据库
-v 显示执行的详细过程

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 检测一个未存在的文件file.txt
locate file.txt

# 使用 -U 参数可以指定要更新 slocate 数据库的目录
updatedb -U /root/file/

# 创建或更新mlocate数据库
updatedb

# 创建mlocate数据库,只扫描/etc目录,写入数据库到db_file文件
updatedb -o db_file -U /etc

locate 命令

  • 快速查找文件或目录。

  • locate 命令与 find 命令进行全局搜索不同,locate 命令是基于了数据文件(/var/lib/locatedb)进行的定点查找,由于缩小了搜索范围,因此快速快很多。

  • Linux 系统需定期执行下 updatedb 命令对数据库文件进行更新,然后再使用 locate 命令进行查找,这样才会更加准确。

参数 说明
-c 只输出找到的数量
-d 指定数据库所在的目录
-i 忽略大小写

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
updatedb

# 搜索带有指定关键词的文件
locate network

# 在指定的目录下,搜索带有指定关键词的文件
locate /etc/network

# 查找 passwd 文件
locate passwd

# 搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh

# 忽略大小写搜索当前用户目录下所有以 r 开头的文件
locate -i ~/r

grep 命令

  • 用于查找文件里符合条件的字符串。

  • grep 来自于英文词组“global search regular expression and print out the line”的缩写,意思是用于全面搜索的正则表达式,并将结果输出。

  • 通常会将 grep 命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。

  • 与之容易混淆的是 egrep 命令和 fgrep 命令。如果把 grep 命令当作是标准搜索命令,那么 egrep 则是扩展搜索命令,等价于“grep -E”命令,支持扩展的正则表达式。而 fgrep 则是快速搜索命令,等价于“grep -F”命令,不支持正则表达式,直接按照字符串内容进行匹配。

  • 管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。

参数 说明
-i 忽略大小写
-c 只输出匹配行的数量
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
-h 查询多文件时不显示文件名
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索
-q 禁止输出任何结果,已退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o 与-b 结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-F 匹配固定字符串的内容
-E 支持扩展的正则表达式

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 搜索某个文件中,包含某个关键词的内容
grep root /etc/passwd

# 搜索某个文件中,以某个关键词开头的内容
grep ^root /etc/passwd

# 搜索多个文件中,包含某个关键词的内容
grep linuxprobe /etc/passwd /etc/shadow

# 搜索多个文件中,包含某个关键词的内容,不显示文件名称
grep -h linuxprobe /etc/passwd /etc/shadow

# 输出在某个文件中,包含某个关键词行的数量
grep -c root /etc/passwd /etc/shadow

# 搜索某个文件中,包含某个关键词位置的行号及内容
grep -n network anaconda-ks.cfg

# 搜索某个文件中,不包含某个关键词的内容
grep -v nologin /etc/passwd

# 搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示
grep -l root *

# 搜索当前工作目录中,包含某个关键词内容的文件,未找到不提示
grep -sl root *

# 递归搜索,不仅搜索指定目录,还搜索其内子目录内是否有关键词文件
grep -srl root /etc

# 搜索某个文件中,精准匹配到某个关键词的内容(搜索词应与整行内容完全一样才会显示,有别于一般搜索)
grep -x cd anaconda-ks.cfg
grep -x cdrom anaconda-ks.cfg

# 判断某个文件中,是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),方便在Shell脚本中判断和调用
grep -q linuxprobe anaconda-ks.cfg
echo $?

grep -q linuxcool anaconda-ks.cfg
echo $?

# 搜索某个文件中,空行的数量
grep -c ^$ anaconda-ks.cfg

解压缩常用命令

gzip 命令

  • 压缩和解压文件。

  • gzip 命令来自于英文单词 gunzip 的缩写。gzip 是一款使用广泛的压缩工具,文件经过压缩后一般会以.gz 后缀结尾,与 tar 命令合用后即为.tar.gz 后缀。

  • gzip 命令对文本文件的压缩比率通常能达到 60%~70%,压缩后可以很好的提升存储空间的使用率,还能够在网络传输文件时减少等待时间

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 将指定的文件进行压缩,压缩包默认会以“原文件名.gz”保存到当前工作目录下,原文件会被自动删除
gzip anaconda-ks.cfg

# 解压指定的压缩包文件,并显示解压过程。解压后的文件会保存在当前工作目录下,压缩包会被自动删除
gzip -dv anaconda-ks.cfg.gz

# 将指定的文件进行压缩,但是不删除原文件
[root@linuxcool ~]# gzip -k initial-setup-ks.cfg

# 显示指定文件的压缩信息
gzip -l initial-setup-ks.cfg.gz

gunzip 命令

  • 解压提取文件内容。
  • gunzip 命令来自于英文词组”Gnu unzip“的缩写。gunzip 通常被用来解压那些被基于 gzip 格式压缩过的文件,也就是那些.gz 结尾的压缩包。

参考实例

1
2
3
4
5
6
7
gunzip Filename.gz

# 解压指定的压缩包文件,并输出解压过程
gunzip -v Filename.gz

# 测试指定的压缩包文件内容是否损坏,能够正常解压
gunzip -t Filename.gz

zip 命令

  • 压缩文件。
  • 通过 zip 命令可以将文件打包成.zip 格式的压缩包,里面会附含文件的名称、路径、创建时间、上次修改时间等等信息,与 tar 命令相似。

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 将指定目录及其内全部文件都打包成zip格式压缩包文件
zip -r backup1.zip /etc

# 将当前工作目录内所有以.cfg为后缀的文件打包
zip -r backup2.zip *.cfg

# 更新压缩包文件中某个文件
zip -dv backup2.zip anaconda-ks.cfg

# 将/home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
zip -q -r html.zip /home/html

# 如果在我们在 /home/html 目录下,可以执行以下命令
zip -q -r html.zip *

# 从压缩文件 cp.zip 中删除文件 a.c
zip -dv cp.zip a.c

unzip 命令

  • 解压缩 zip 格式文件。
  • unzip 命令用于解压缩 zip 格式文件,虽然 Linux 系统中更多的使用 tar 命令进行对压缩包的管理工作,但有时也会收到同 Windows 系统常用的.zip 和.rar 格式的压缩包文件。

参考实例

1
2
3
4
5
6
7
8
# 将压缩包文件解压到当前工作目录中
unzip latest.zip

# 将压缩包文件解压到指定的目录中
unzip latest.zip -d /home

# 测试压缩包文件是否完整,文件有无损坏
unzip -t latest.zip

tar 命令

  • 压缩和解压缩文件。
  • tar 命令能够制作出 Linux 系统中常见的.tar、.tar.gz、.tar.bz2 等格式的压缩包文件。对于 RHEL7、CentOS7 版本以后的系统,解压时可以不加压缩格式参数(如 z 或 j),系统能自动进行分析并解压。
参数 说明
-c 产生.tar 打包文件
-v 显示详细信息
-z 通过 gzip 指令压缩/解压缩文件,文件名最好为*.tar.gz
-C <目录> 仅压缩指定目录里的内容或解压缩到指定目录
-x 解包.tar 文件
-f 指定压缩后的文件名文件

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 使用gzip压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.gz
tar czvf backup1.tar.gz /etc

# 使用bzip2压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.bz2
tar cjvf backup2.tar.bz2 /etc

# 将当前工作目录内所有以.cfg为后缀的文件打包,不进行压缩
tar cvf backup3.tar *.cfg

# 将当前工作目录内的所有以.cfg为后缀的文件打包,不进行压缩,并删除原始文件
tar cvf backup4.tar *.cfg --remove-files

# 解压某个压缩包到当前工作目录
tar xvf backup4.tar

# 解压某个压缩包到/etc目录
tar xvf backup4.tar -C /etc

# 查看某个压缩包内文件信息(无需解压)
tar tvf backup4.tar

磁盘和分区常用命令

tree 命令

以树状图形式列出目录内容。

参考实例

1
2
3
4
5
6
7
8
9
10
11
显示当前工作目录下的文件层级情况
tree

以文件和目录的更改时间进行排序
tree -t

以带有相对路径的形式,显示当前工作目录下的文件层级情况
tree -f

只显示目录的层级关系情况
tree -d

du 命令

  • 查看文件或目录的大小。
  • du 命令来自于英文词组“Disk Usage”的缩写。不要将 df 和 du 命令混淆,df 是用于查看磁盘或分区使用情况的命令,而 du 命令则是用于按照指定容量单位来查看文件或目录在磁盘中的占用情况
参数 说明
-a 显示目录中所有文件大小
-k 以 KB 为单位显示文件大小
-m 以 MB 为单位显示文件大小
-g 以 GB 为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-exclude=<目录或文件> 略过指定的目录或文件
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略

参考实例

1
2
3
4
5
6
7
8
# 以易读的容量格式显示指定目录内各个文件的大小信息
du -h /etc

# 以易读的容量格式显示指定目录内总文件的大小信息
du -sh /etc

# 显示指定文件的大小信息(默认单位为K)
du anaconda-ks.cfg

df 命令

  • 显示系统上磁盘空间的使用量情况。
  • df 命令来自于英文词组”Disk Free“的缩写。df 命令显示的磁盘使用量情况含可用、已有及使用率等信息,默认单位为 Kb,建议使用-h 参数进行单位换算。

参考实例

1
2
3
4
5
6
7
8
# 带有容量单位的显示系统全部磁盘使用量情况
df -h

# 带有容量单位的显示指定磁盘分区使用量情况
df -h /boot

# 显示系统中所有文件系统格式为xfs的磁盘分区使用量情况
df -t xfs

free 命令

显示系统内存使用量情况,包含物理和交换内存的总量、使用量和空闲量情况。

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 以默认的容量单位显示内存使用量信息
free

# 以MB位单位显示内存使用量信息
free -m

# 以易读的单位显示内存使用量信息
free -h

# 以易读的单位显示内存使用量信息,每个10秒刷新一次
free -hs 10

lsblk 命令

查看系统的磁盘使用情况。来自于英文词组”list block“的缩写。

参考实例

1
2
3
4
5
6
7
8
9
10
11
# 显示系统中所有磁盘设备的使用情况信息
lsblk -a

# 显示系统中磁盘设备的归属及权限信息
lsblk -m

# 显示系统中所有SCSI类型的磁盘设备信息
lsblk -S

# 以列表格式显示磁盘设备信息,并且不显示标题
sblk -nl

进程管理常用命令