Linux命令大全:从入门到精通(二)
1. vi/vim文本编辑器
vi/vim 这个工具是在 Linux 中的一个文本编辑器,它的使用频率是非常高的。
1.1 模式介绍
vim 编辑器有以下三种模式:

1.2 模式概念
1)命令模式:这种模式也称之为阅读模式,可以控制光标,可以对文本进行查看,但是不能删除文本内容、不能复制粘贴内容等。
2)输入模式:这种模式也叫编辑模式,可以对文件进行复制粘贴、删除。
3)末行模式:它是用于保存、退出、设置编辑环境、查找等。
1.3 常用快捷键
1.3.1 光标移动快捷键
- w,光标按单个单词来向后移动
- b,光标按单个单词来向前移动
- ^,将光标移动到行首位置
- $,将光标移动到行尾位置
- G,将光标移动到文件的最后一行,它的前面还可以加一个数字,表示移动到指定的行
- gg,将光标移动到文件的第一行,它的前面还可以加一个数字,表示移动到指定的行
1.3.2 复制、粘贴、删除
- yy,复制光标所在行
- p,将复制到缓冲区中的数据粘贴到光标所在行的下一行位置
- P,将复制到缓冲区中的数据粘贴到光标所在行的上一行位置
- Nyy,表示复制从光标所在行向下计算N行来进行复制,即复制N行,这个N必须是一个数字
- u,撤销当前操作
- dd,删除光标所在行
- Ndd,删除从光标所在位置向下计算N行,即删除N行,这个N必须是一个数字
- d^,删除从光标位置到行首
- d$,删除从光标位置到行尾
1.3.3 编辑模式快捷键
- a,将在光标之后插入数据
- A,将数据插入到光标所在行的末尾
- o,在光标所在行的下一行插入数据 (✨记住)
- O,在光标所在行的上一行插入数据
- i,在光标所在位置之后插前数据
- I,在光标所在行的行首第一个非空字符前插入数据
- s,删除光标所在字符并进入插入模式
- S,删除当前行并进入插入模式
- r,替换当前光标所在位置的字符 (✨记住)
1.3.4 末行模式快捷键
- : , 将命令模式切换为末行模式
- esc,返回命令模式
(1)查找替换
- /关键字,用于在文件是查找指定关键字的内容
- :s/old/new,将文件中的old替换为new,只替换一次(当前行中找)
- :s/old/new/g,将文件中的old替换为new,替换全部(当前行中找)
- :%s/old/new/g,将整个文件中的old替换为new
- :n1,n2 s/old/new/g,将行号为 n1 和 n2 中的old 替换为 new
(2)保存退出
- * :wq,保存并退出
- * :w,保存不退出
- * :q,退出不保存
- * :q!,强制退出
- * :w /dir/file,将当前文件保存到 dir 目录下的 file 文件中
- * ZZ,保存并退出
(3)其他操作
- :set nu,显示行号
- :set nonu,关闭行号
- :g/word/d,在文件中查找word所在行并删除
- :r /dir/file,在当前文件中读入 dir 目录下的 file 文件
- :noh,取消高亮显示
注意:在使用 vim 编辑器时,如果还没有保存就异常退出,则再次使用 vim 打开这个文件时会出现如下的错误:

如何解决?
- 首先我们在这个界面中按 q 键来退出。
- 然后执行 ls -a 来查看
[root@localhost ~]# ls -a
. .bash_logout .cshrc shell_experiment testfile.txt xx
.. .bash_profile d1 .ssh .test.swp
anaconda-ks.cfg .bashrc .lesshst .tcshrc test.txt
.bash_history .config passwd testdir .viminfo
可以发现:其中多了一个 .text.swp 隐藏文件,我们只需要把这个文件删除即可,就可以使用test文件了。
[root@localhost ~]# rm -f .test.swp
2. 文件内容显示相关命令
2.1 浏览普通文件
2.1.1 cat
作用:查看文件的内容,适合查看数据量较小的文件。
语法:cat -参数 文件名
参数:
- -n:显示行号
- -b:文件中所有非空行增加行号,编号从 1 开始
示例1:
[root@master ~]# vi a.txt
[root@master ~]# cat a.txt
ni hao
da jia wang shang hao
[root@master ~]# cat -n a.txt
1 ni hao
2
3 da jia wang shang hao
[root@master ~]# cat -b a.txt
1 ni hao
2 da jia wang shang hao
示例2:将显示的结果重定向到另一个文件中
[root@master ~]# cat a.txt > b.txt
[root@master ~]# cat b.txt
ni hao
da jia wang shang hao
示例3:将多个文件的内容合并到一个文件中。
[root@master ~]# echo "hello" > t1.txt
[root@master ~]# echo "world" > t2.txt
[root@master ~]# echo "linux" > t3.txt
[root@master ~]# cat t1.txt t2.txt t3.txt
hello
world
linux
[root@master ~]# cat t1.txt t2.txt t3.txt > t4.txt
[root@master ~]# cat t4.txt
hello
world
linux
2.1.2 tac(了解)
作用:将文件的内容倒叙。
语法:tac 参数 文件名称
示例:
[root@master ~]# cat t4.txt
hello
world
linux
[root@master ~]# tac t4.txt
linux
world
hello
[root@master ~]# cat a.txt
ni hao
da jia wang shang hao
[root@master ~]# tac a.txt
da jia wang shang hao
ni hao
注意:tac 命令只会把文件内容的行号倒叙,不会将每行的内容倒叙。
2.1.3 more
作用:可以显示大文件的翻页查看,适合内容较多的文件。
语法:more 文件名称
示例:
[root@master ~]# more /etc/passwd
注意:按回车可以一行一行查看,按空格可以一页一页的查看,按 q 键退出查看。
2.1.4 less
作用:它的功能与 more 相同,都是查看大内容的文件。
语法:less 文件名称
示例:
[root@master ~]# less /etc/passwd
注意:less 支持使用上下方向键来进行浏览,按 q 退出查看。
2.1.5 head
作用:查看文件前 n 行的内容。
语法:head 参数 文件名称
示例:
[root@master ~]# head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
说明:
1. head 命令默认是显示文件的前10行。
2. 如果希望查看文件的指定行数,可以带参数 `head -数字 文件名称`
[root@master ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.1.6 tail
作用:查看文件的最后n行的内容,默认为 10 行。
语法:tail -数字 文件名称
示例:
[root@master ~]# tail /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/sbin/nologin
sssd:x:997:994:User for sssd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:996:993:chrony system user:/var/lib/chrony:/sbin/nologin
systemd-oom:x:991:991:systemd Userspace OOM Killer:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@master ~]# tail -3 /etc/passwd
chrony:x:996:993:chrony system user:/var/lib/chrony:/sbin/nologin
systemd-oom:x:991:991:systemd Userspace OOM Killer:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
除了可以查看文件的最后内容以外,我们还可以监视文件的变化。为了演示这个效果,我们需要打开两个终端。
在第一个窗口中输入:
[root@master ~]# touch a.txt
[root@master ~]# echo 1 > a.txt
[root@master ~]# echo 2 > a.txt
[root@master ~]# echo "3" > a.txt
[root@master ~]# echo "4" >> a.txt
[root@master ~]# echo 5 >> a.txt
在第二个窗口中输入:
[root@master ~]# tail -f a.txt
1
tail: a.txt: file truncated
3
4
5
2.2 查看文件信息
2.2.1 file
作用:查看文件类型。
语法:file 参数 文件名称
类型:
- ASCII file:ASCII 文本字符文件
- empty:空文件
- block special:块设备文件
- character special:字符设备文件
- directory:目录
示例:
[root@master ~]# touch test.txt
[root@master ~]# mkdir test
[root@master ~]# ls
a.txt test test.txt
[root@master ~]# file test.txt
test.txt: empty
[root@master ~]# file test
test: directory
[root@master ~]# vi c.txt
[root@master ~]# cat c.txt
hello
[root@master ~]# file c.txt
c.txt: ASCII text
2.2.2 stat
作用:显示文件属性信息,即元数据信息。
语法:stat 文件名称
示例:
[root@master ~]# stat c.txt
File: c.txt
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 135162416 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2024-11-03 19:49:22.665236488 +0800
Modify: 2024-11-03 19:49:15.184268183 +0800
Change: 2024-11-03 19:49:15.184268183 +0800
Birth: 2024-11-03 19:49:15.184268183 +0800
注意:这个命令可以查看文件大小,块信息,Inode,以及硬链接和软链接信息。
2.3 grep
作用:在文件中搜索指定内容。
语法:grep 参数 查找条件 文件名称
参数:
- -c:仅显示找到的行数
- -i:忽略大小写
- -n:显示行号
- -v:反向选择,即只显示没有关键字的行
- -A 数字:搜索时显示匹配到的那一行以及下多少行
- -B 数字:搜索时显示匹配到的那一行以及上多少行
- -C 数字:搜索时显示匹配到的那一行以及上下多少行
示例:
# 在文件/etc/passwd搜索含有关键字 root 的行数
[root@master ~]# grep -c 'root' /etc/passwd
2
# 在文件/etc/passwd搜索含有关键字 root 的行,以及行号
[root@master ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
# 忽略关键字大小写
[root@master ~]# grep 'Root' /etc/passwd
[root@master ~]# grep -i 'Root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# 搜索不包含 root 关键字的所有行的信息
[root@master ~]# grep -v 'root' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....
# 搜索时显示匹配到的那一行以及下3行
[root@master ~]# grep -A3 'halt' /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
# 搜索时显示匹配到的那一行以及上3行
[root@master ~]# grep -B3 'halt' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
# 搜索时显示匹配到的那一行以及上下3行
[root@master ~]# grep -C3 'halt' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[root@master ~]# grep -A3 -B3 'halt' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
示例2:使用特殊符号来进行匹配:
[root@master ~]# cat /etc/passwd > passwd
# 在 passwd 查找以 a 开头的所有行
[root@master ~]# grep ^a passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
# 在 passwd 文件中查找包含 a 的所有行
[root@master ~]# grep a passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/sbin/nologin
chrony:x:996:993:chrony system user:/var/lib/chrony:/sbin/nologin
systemd-oom:x:991:991:systemd Userspace OOM Killer:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
[root@master ~]# echo hello123 >> passwd
[root@master ~]# tail -3 passwd
systemd-oom:x:991:991:systemd Userspace OOM Killer:/:/usr/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
hello123
# 在passwd文件中查找以数字结尾的所有行
[root@master ~]# grep "[0-9]$" passwd
hello123
# 在passwd文件中搜索所有空行
[root@master ~]# grep ^$ passwd
2.4 cut
作用:用于按列提取文本内容。
语法:cut -d 分隔符 -f 列数 文件名称
示例1:在 passwd 文件中保存用户数据信息时,每一项值都是采用冒号(:)分隔的,我们可以从文件获取用户名。
[root@master ~]# head -2 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
这个文件中一共有7个字段,它们分别表示如下:
- 第一个字段表示用户名
- 第二个字段表示该用户对应的密码占位符
- 第三个字段表示该用户的ID
- 第四个字段表示该用户的组ID
- 第五个字段表示用户的其他信息
- 第六个字段表示用户的家目录
- 第七个字段表示用户可执行的脚本
我们的需求是获取用户名,即第一个字段。
[root@master ~]# cut -d ":" -f 1 passwd
root
bin
daemon
adm
# 也可以写成如下形式
[root@master ~]# cut -d: -f1 passwd
root
bin
daemon
adm
示例2:提取内核版本号
[root@master ~]# uname -a
Linux master 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Oct 3 11:12:36 EDT 2023 x86_64 x86_64 x86_64 GNU/Linux
# 和管道符接合使用,获取内核版本号
[root@master ~]# uname -a | cut -d" " -f3
5.14.0-362.8.1.el9_3.x86_64
示例3:提取IP地址
[root@master ~]# ip a | grep "inet 192" | cut -d" " -f6
192.168.72.70/24
示例4:提取mac地址
[root@master ~]# ip a | grep link/ether | cut -d" " -f6
00:0c:29:8b:3d:9e
2.5 sort
作用:用于对文本内容进行排序显示。
语法:sort 参数 文件名称
参数:
- -f:忽略大小写
- -b:忽略缩进与空格
- -n:以数值型排序
- -r:反向排序
- -u:去除重复行
- -t:指定分隔符
- -k:设置字段范围
示例:
# 准备数据
[root@master ~]# vi fruit.txt
[root@master ~]# cat fruit.txt
banana
pear
apple
pear
orange
pear
# 对文件内容进行排序
[root@master ~]# sort fruit.txt
apple
banana
orange
pear
pear
pear
# 去重复
[root@master ~]# sort -u fruit.txt
apple
banana
orange
pear
# 准备数据
[root@master ~]# vi number.txt
[root@master ~]# cat number.txt
45
12
3
98
82
67
24
56
9
# 数字排序,默认是以自然顺序来进行排序的。
[root@master ~]# sort number.txt
12
24
3
45
56
67
82
9
98
# 实现数值排序,使用 -n 参数来按照数值的从小到大排序
[root@master ~]# sort -n number.txt
3
9
12
24
45
56
67
82
98
# 实现数值排序,使用 -n 参数来按照数值的从大到小排序
[root@master ~]# sort -nr number.txt
98
82
67
56
45
24
12
9
3
2.6 uniq
作用:用于去除文本中重复的行。
语法:uniq 参数 文件名称
示例:
# 准备数据
[root@master ~]# vi uniq.txt
[root@master ~]# cat uniq.txt
welcome to center
welcome to center
welcome to center
red hat certified system administrator
free linux lessions
# 去掉文件中重复行后再显示
[root@master ~]# uniq uniq.txt
welcome to center
red hat certified system administrator
free linux lessions
2.7 tr
作用:从标准输入中读取数据,经过替换或者删除后,将结果输出到标准输出中显示。
语法:tr 参数 被替换内容 新内容
参数:
- -c:反选设定字符,符合“被替换内容”的部分不做处理,不符合的剩余部分才进行转换。
- -d:删除指令字符
- -s:缩减连续重复的字符成指定的单个字符。
示例1:将小写字母全部转换为大写字母。
[root@master ~]# cat fruit.txt
banana
pear
apple
pear
orange
pear
# 将小写字母转换为大写字母
[root@master ~]# cat fruit.txt | tr a-z A-Z
BANANA
PEAR
APPLE
PEAR
ORANGE
PEAR
示例2:提取IP地址。
# 方式一
[root@master ~]# ip a | grep "inet 192" | cut -d" " -f6
192.168.72.70/24
# 方式二
[root@master ~]# ip a | grep ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.72.70/24 brd 192.168.72.255 scope global noprefixroute ens160
[root@master ~]# ip a | grep ens160 | cut -d/ -f1
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.72.70
[root@master ~]# ip a | grep ens160 | cut -d/ -f1 | tr -s ' '
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.72.70
[root@master ~]# ip a | grep ens160 | cut -d/ -f1 | tr -s ' ' | cut -d" " -f3
<BROADCAST,MULTICAST,UP,LOWER_UP>
192.168.72.70
2.8 wc
作用:统计指定文本文件的行数、字数或者字节数。
语法:wc 参数 文件名称
参数:
- -l:只显示行数
- -w:只显示单词数
- -c:只显示字节数
示例:
# 默认会显示行数、单词数、字节数
[root@master ~]# wc passwd
29 44 1070 passwd
# 只显示行数
[root@master ~]# wc -l passwd
29 passwd
# 只显示单词数
[root@master ~]# wc -w passwd
44 passwd
# 只显示字节数
[root@master ~]# wc -c passwd
1070 passwd
2.9 cp
作用:复制文件或目录(copy)
语法:cp 参数 源文件 目标文件
参数:
- -a:在复制文件时保留文件的属性,如,链接、属性
- -d:拷贝时保留链接
- -f:在覆盖已经存在的目标文件时不提示
- -i:交互式的复制
- -p:除复制源文件的内容外,还将其修改的时间和访问时间也复制到新的文件中,即复制文件的元数据信息
- -r:如果是复制目录则会将其子目录和子文件一同复制
示例:
[root@master ~]# rm -rf *
[root@master ~]# touch t1.txt
[root@master ~]# cp t1.txt t2.txt
[root@master ~]# ls
t1.txt t2.txt
[root@master ~]# mkdir d1
[root@master ~]# touch d1/a1.txt
[root@master ~]# mkdir d2
[root@master ~]# cp d1 d2
cp: -r not specified; omitting directory 'd1'
[root@master ~]# cp -r d1 d2
[root@master ~]# tree d2
[root@master ~]# ls d2
d1
[root@master ~]# cp t1.txt t2.txt
cp: overwrite 't2.txt'? yes
[root@master ~]# cp -nf t1.txt t2.txt
2.10 mv
作用:用于移动或才剪切文件或目录。(move)
语法:move 参数 源文件名称 目标文件名称
示例:
[root@master ~]# ls
d1 d2 t1.txt t2.txt
[root@master ~]# mkdir d3
[root@master ~]# ls d3
# 将 t1.txt 文件移动到 d3 目录下
[root@master ~]# mv t1.txt d3
[root@master ~]# ls
d1 d2 d3 t2.txt
[root@master ~]# ls d3
t1.txt
# 移动文件并重命名文件
[root@master ~]# mv t2.txt d3/t2.avi
[root@master ~]# ls
d1 d2 d3
[root@master ~]# ls d3
t1.txt t2.avi
# 重命令文件
[root@master ~]# mv d2 d22
[root@master ~]# ls
d1 d22 d3
# 将d1目录移动到d3目录下
[root@master ~]# mv d1 d3
[root@master ~]# ls
d22 d3
[root@master ~]# ls d3
d1 t1.txt t2.avi
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)