cat命令 -- 在终端设备上显示文件内容
cat命令来自英文词组concatenate files and print的缩写,其功能是在终端设备上显示文件内容。在Linux系统中有很多用于查看文件内容的命令,例如more、tail、head等,每个命令都有各自的特点。cat命令适合查看内容较少的纯文本文件。 对于内容较多的文件,使用cat命令查看后会在屏幕上快速滚屏,用户往往看不清所显示的具体内容,只好按Ctrl+C组合键中断命令执行,所以对于大文件,干脆用more命令显示吧。
语法格式:cat 参数 文件名
常用参数:
参数 | 描述 |
---|---|
-A | 等价于-vET参数组合 |
-t | 等价于-vT参数组合 |
-b | 显示行数(空行不编号) |
-T | 将TAB字符显示为^I符号 |
-e | 等价于-vE参数组合 |
-v | 使用^和M-引用,LFD和TAB除外 |
-E | 每行结束处显示$符号 |
--help | 显示帮助信息 |
-n | 显示行数(空行也编号) |
--version | 显示版本信息 |
-s | 显示行数(多个空行算一个编号) |
参考示例
查看指定文件的内容:
root@linuxcool \~\]# cat anaconda-ks.cfg #version=RHEL8 ignoredisk --only-use=sda autopart --type=lvm #Partition clearing information ..................省略部分输出信息..................
查看指定文件的内容并显示行号:
root@linuxcool \~\]# cat -n anaconda-ks.cfg 1 #version=RHEL8 2 ignoredisk --only-use=sda 3 autopart --type=lvm 4 # Partition clearing information 5 clearpart --none --initlabel 6 # Use graphical install .........省略部分输出信息.........
搭配空设备文件和输出重定向操作符,清空指定文件的内容:
root@linuxcool \~\]# cat /dev/null \> anaconda-ks.cfg \[root@linuxcool \~\]# cat anaconda-ks.cfg \[root@linuxcool \~\]#
持续写入文件内容,直到碰到EOF终止符后结束并保存:
root@linuxcool \~\]# cat \> anaconda-ks.cfg \<\< EOF Hello,World \> Linux!\~ EOF \[root@linuxcool \~\]# cat anaconda-ks.cfg Hello,World Linux!\~
搭配输出重定向操作符,将光盘设备制作成镜像文件:
root@linuxcool \~\]# cat /dev/cdrom \> rhel.iso \[root@linuxcool \~\]# ls rhel.iso -lh -rw-r--r--. 1 root root 6.7G May 2 00:43 rhel.iso \[root@linuxcool \~\]# file rhel.iso rhel.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 23128, 19888 sectors
rm命令 -- 删除文件或目录
rm命令来自英文单词remove的缩写,中文译为"消除",其功能是删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。
rm也是一个很危险的命令,使用的时候要特别当心,尤其对于新手更要格外注意。例如,执行rm -rf /*命令会清空系统中所有的文件,甚至无法恢复回来。所以我们在执行之前一定要再次确认在在哪个目录中、到底要删除什么文件,考虑好后再敲击Enter键,要时刻保持清醒的头脑。
语法格式:rm 参数 文件名
常用参数:
参数 | 描述 |
---|---|
-d | 仅删除无子文件的空目录 |
-v | 显示执行过程详细信息 |
-f | 强制删除文件而不询问 |
--help | 显示帮助信息 |
-i | 删除文件前询问用户是否确认 |
--version | 显示版本信息 |
-r | 递归删除目录及其内全部子文件 |
参考示例
删除文件时默认会进行二次确认,敲击y进行确认:
root@linuxcool \~\]# rm File.cfg rm: remove regular file 'File.cfg'? y
强制删除文件而无须二次确认:
root@linuxcool \~\]# rm -f File.cfg
删除指定目录及其内的全部子文件,一并强制删除:
root@linuxcool \~\]# rm -rf Dir
强制删除当前工作目录内所有以.txt为后缀的文件:
root@linuxcool \~\]# rm -f \*.txt
强制清空服务器系统内的所有文件(慎用!!!):
root@linuxcool \~\]# rm -rf /\*
echo命令 -- 输出字符串或提取后的变量值
echo命令的功能是在终端设备上输出指定字符串或变量提取后的值,能够给用户一些简单的提醒信息,亦可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息进行二次处理,还可以同输出重定向符一起操作,将信息直接写入文件。如需提取变量值,需在变量名称前加入$符号,变量名称一般均为大写形式。
语法格式:echo 参数 字符串或$变量名
常用参数:
参数 | 描述 |
---|---|
-e | "\a" 发出警告音 |
-e | "\r" 光标移至行首但不换行 |
-e | "\b" 删除前面的一个字符 |
-E | 禁止反斜杠转义 |
-e | "\c" 结尾不加换行符 |
-n | 不输出结尾的换行符 |
-e | "\f" 换行后光标仍停留在原来的位置 |
--version | 显示版本信息 |
-e | "\n" 换行后光标移至行首 |
--help | 显示帮助信息 |
参考示例
输出指定字符串到终端设备界面(默认为电脑屏幕):
root@linuxcool \~\]# echo LinuxCool LinuxCool
输出某个变量值:
root@linuxcool \~\]# echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
搭配转义符一起使用,输出纯字符串内容:
root@linuxcool \~\]# echo $PATH $PATH
搭配输出重定向符一起使用,将字符串内容直接写入文件中:
root@linuxcool \~\]# echo "Hello World" \> Doc.txt
搭配反引号执行命令,并将执行结果输出:
root@linuxcool \~\]# echo `uptime` 16:16:12 up 52 min, 1 user, load average: 0.01, 0.02, 0.05
输出带有换行符的内容:
root@linuxcool \~\]# echo -e "First\\nSecond\\nThird" First Second Third
指定删除字符串中某些字符,随后将内容输出:
root@linuxcool \~\]# echo -e "123\\b456" 12456
grep命令 -- 强大的文本搜索工具
grep命令来自英文词组global search regular expression and print out the line的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。
与之容易混淆的是egrep命令和fgrep命令。如果把grep命令当作标准搜索命令,那么egrep则是扩展搜索命令,等价于grep -E命令,支持扩展的正则表达式。而fgrep则是快速搜索命令,等价于grep -F命令,不支持正则表达式,直接按照字符串内容进行匹配。
语法格式:grep 参数 文件名
常用参数:
-b显示匹配行距文件头部的偏移量 -o显示匹配词距文件头部的偏移量-c只显示匹配的行数-q静默执行模式-E支持扩展正则表达式-r递归搜索模式-F匹配固定字符串的内容-s不显示没有匹配文本的错误信息-h搜索多文件时不显示文件名-v显示不包含匹配文本的所有行-i忽略关键词大小写-w精准匹配整词-l只显示符合匹配条件的文件名 -x精准匹配整行-n显示所有匹配行及其行号
参考示例
搜索指定文件中包含某个关键词的内容行:
root@linuxcool \~\]# grep root /etc/passwd root❌0:0:root:/root:/bin/bash operator❌11:0:operator:/root:/sbin/nologin
搜索指定文件中以某个关键词开头的内容行:
root@linuxcool \~\]# grep \^root /etc/passwd root❌0:0:root:/root:/bin/bash
搜索多个文件中包含某个关键词的内容行:
root@linuxcool \~\]# grep linuxprobe /etc/passwd /etc/shadow /etc/passwd:linuxprobe❌1000:1000:linuxprobe:/home/linuxprobe:/bin/bash /etc/shadow:linuxprobe: 69Av/41hCM17T2PrT$hoggWJ3J/j6IqEOSp62elhdOYPLhQ1qDho7hANcm5fQkPCQdib8KCWGdvxbRvDmqyOarKpWGxd8NAmp3j2Ln00::0:99999:7:::
搜索多个文件中包含某个关键词的内容,不显示文件名称:
root@linuxcool \~\]# grep -h linuxprobe /etc/passwd /etc/shadow linuxprobe❌1000:1000:linuxprobe:/home/linuxprobe:/bin/bash linuxprobe: 69Av/41hCM17T2PrT$hoggWJ3J/j6IqEOSp62elhdOYPLhQ1qDho7hANcm5fQkPCQdib8KCWGdvxbRvDmqyOarKpWGxd8NAmp3j2Ln00::0:99999:7:::
显示指定文件中包含某个关键词的行数量:
root@linuxcool \~\]# grep -c root /etc/passwd /etc/shadow /etc/passwd:2 /etc/shadow:1
搜索指定文件中包含某个关键词位置的行号及内容行:
root@linuxcool \~\]# grep -n network anaconda-ks.cfg 17:network --bootproto=static --device=ens160 --ip=192.168.10.10 --netmask=255.255.255.0 --onboot=off --ipv6=auto --activate 18:network --hostname=[www.baidu.com](https://link.juejin.cn?target=www.baidu.com "www.baidu.com")
搜索指定文件中不包含某个关键词的内容行:
root@linuxcool \~\]# grep -v nologin /etc/passwd root❌0:0:root:/root:/bin/bash sync❌5:0:sync:/sbin:/bin/sync shutdown❌6:0:shutdown:/sbin:/sbin/shutdown halt❌7:0:halt:/sbin:/sbin/halt linuxprobe❌1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
搜索当前工作目录中包含某个关键词内容的文件,未找到则提示:
root@linuxcool \~\]# grep -l root \* anaconda-ks.cfg grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory initial-setup-ks.cfg grep: Music: Is a directory grep: Pictures: Is a directory grep: Public: Is a directory grep: Templates: Is a directory grep: Videos: Is a directory
搜索当前工作目录中包含某个关键词内容的文件,未找到也不提示:
root@linuxcool \~\]# grep -sl root \* anaconda-ks.cfg initial-setup-ks.cfg
不仅搜索指定目录,还搜索其内子目录内是否有关键词文件:
root@linuxcool \~\]# grep -srl root /etc /etc/fstab /etc/X11/xinit/Xclients /etc/X11/xinit/xinitrc /etc/libreport/events.d/collect_dnf.conf /etc/libreport/events.d/bugzilla_anaconda_event.conf /etc/libreport/forbidden_words.conf ..................省略部分输出信息..................
搜索指定文件中精准匹配到某个关键词的内容行:
root@linuxcool \~\]# grep -x cd anaconda-ks.cfg \[root@linuxcool \~\]# grep -x cdrom anaconda-ks.cfg cdrom
判断指定文件中是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含):
root@linuxcool \~\]# grep -q linuxprobe anaconda-ks.cfg \[root@linuxcool \~\]# echo ? 0 \[root@linuxcool \~\]# grep -q linuxcool anaconda-ks.cfg \[root@linuxcool \~\]# echo ? 1
搜索指定文件中空行的数量:
root@linuxcool \~\]# grep -c \^$ anaconda-ks.cfg 6
tail命令 -- 查看文件尾部内容
tail命令的功能是查看文件尾部内容,例如默认会在终端界面上显示指定文件的末尾10行,如果指定了多个文件,则会在显示的每个文件内容前面加上文件名来加以区分。高阶玩法的-f参数的作用是持续显示文件的尾部最新内容,类似于机场候机厅的大屏幕,总会把最新的消息展示给用户,对阅读日志文件尤为适合,再也不需要手动刷新了。
语法格式:tail 参数 文件名
常用参数:
-c设置显示文件尾部的字符数 --pid当指定PID进程结束时,自动退出命令-f持续显示文件尾部最新内容--retry当文件无权限访问时,依然尝试打开-n设置显示文件尾部的行数--version显示版本信息--help显示帮助信息
参考示例
默认显示指定文件尾部的后10行内容:
root@linuxcool \~\]# tail File.cfg %addon com_redhat_subscription_manager %end %addon ADDON_placeholder --disable --reserve-mb=auto %end %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end
指定显示指定文件尾部的后5行内容:
root@linuxcool \~\]# tail -n 5 File.cfg %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end
指定显示指定文件尾部的后30个字节:
root@linuxcool \~\]# tail -c 30 File.cfg t --nochanges --notempty %end
持续刷新显示指定文件尾部的后10行内容:
root@linuxcool \~\]# tail -f File.cfg
rmdir命令 -- 删除空目录文件
rmdir命令来自英文词组remove directory的缩写,其功能是删除空目录文件。rmdir命令仅能删除空内容的目录文件,如需删除非空目录时,需要使用带有-R参数的rm命令进行操作。而rmdir命令的递归删除操作(-p参数使用)并不意味着能删除目录中已有的文件,而是要求每个子目录都必须是空的。
语法格式:rmdir 参数 目录名
常用参数:
-p递归处理所有子文件 --help显示帮助信息-v显示执行过程详细信息--version显示版本信息
参考示例
删除指定的空目录:
root@linuxcool \~\]# rmdir Dir
删除指定的空目录及其内部的子空目录:
root@linuxcool \~\]# rmdir -p Dir
删除指定的空目录并显示删除的过程:
root@linuxcool \~\]# rmdir -v Dir rmdir: removing directory, 'Dir'
sed命令 -- 批量编辑文本文件
sed命令来自英文词组stream editor的缩写,其功能是利用语法/脚本对文本文件进行批量的编辑操作。sed命令最初由贝尔实验室开发,后被众多Linux系统集成,能够通过正则表达式对文件进行批量编辑,让重复性的工作不再浪费时间。
语法格式:sed 参数 文件名
常用参数:
-e使用指定脚本处理输入的文本文件 -n仅显示脚本处理后的结果-f使用指定脚本文件处理输入的文本文件-r支持扩展正则表达式-h显示帮助信息-V显示版本信息-i直接修改文件内容,而不输出到终端
参考示例
查找指定文件中带有某个关键词的行:
root@linuxcool \~\]# cat -n File.cfg \| sed -n '/root/p' 20 rootpw --iscrypted 6c2VGkv/8C3IEwtRt$iPEjNXml6v5KEmcM9okIT.Op9/LEpFejqR. kmQWAVX7fla3roq.3MMVKDahnv0l/pONz2WMNecy17WJ8Ib0iO1 40 pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
将指定文件中某个关键词替换成大写形式:
root@linuxcool \~\]# sed 's/root/ROOT/g' File.cfg ..................省略输出信息..................
读取指定文件,删除所有带有某个关键词的行:
root@linuxcool \~\]# sed '/root/d' File.cfg ..................省略输出信息..................
读取指定文件,在第4行后插入一行新内容:
root@linuxcool \~\]# sed -e 4a\\NewLine File.cfg #version=RHEL8 ignoredisk --only-use=sda autopart --type=lvm # Partition clearing information NewLine ..................省略部分输出信息..................
读取指定文件,在第4行后插入多行新内容:
root@linuxcool \~\]# cat File.cfg \| sed -e '4a NewLine1 \\ \> NewLine2 \\ \> NewLine3 ' #version=RHEL8 ignoredisk --only-use=sda autopart --type=lvm # Partition clearing information NewLine1 NewLine2 NewLine3 clearpart --none --initlabel # Use graphical install graphical ..................省略部分输出信息..................
读取指定文件,删除第2~5行的内容:
ruby1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt ..................省略部分输出信息..................
读取指定文件,替换第2~5行的内容:
root@linuxcool \~\]# sed '2,5c NewSentence' File.cfg #version=RHEL8 NewSentence # Use graphical install graphical repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream # Use CDROM installation media cdrom ..................省略部分输出信息..................
读取指定文件的第3~7行:
root@linuxcool \~\]# sed -n '3,7p' File.cfg autopart --type=lvm # Partition clearing information clearpart --none --initlabel # Use graphical install graphical
vi命令 -- 文本编辑器
vi命令的功能是用于编辑文本内容,是Linux系统字符界面下最常用的文本编辑工具,能够编辑任何的ASCII格式文件,对内容进行创建、查找、替换、修改、删除、复制、粘贴等操作。编写文件时,无需担心目标文件是否存在,若不存在则会自动在内存中创建,随保存操作输出到硬盘中。
语法格式:vi [参数] 文件
常用参数:
-s静默模式-- -cmd<命令>加载任何vimrc文件之前执行指定命令-R只读模式-vVi模式-eEx模式-y简易模式-c<命令>加载第一个文件之后执行指定命令-s<脚本输入文件>从指定脚本输入文件阅读普通模式命令-w<脚本输出文件>追加所有类型的命令写入脚本输出文件-W<脚本输出文件> 写入所有类型的命令到指定脚本输出文件+<行数>从指定行开始-- -noplugin不要加载插件脚本-p<数量>打开指定数量的标签页(带文件名)-r<文件名>恢复崩溃的会话-L等同于-r-r列出交换文件并退出-u熟用指定vimrc,而不是.vimrc-T<终端>设置使用指定终端-o<数量>打开指定数量的窗口-n不使用交换文件,只用内存-Z受限模式-m不允许修改(写入)-b二进制模式-M在文本中不允许修改
参考实例
创建某个文件,并进行编写操作:
root@linuxcool \~\]# vi anaconda-ks.cfg
打开某个已存在的文件,从第6行开始编写:
root@linuxcool \~\]# vi +6 anaconda-ks.cfg
打开某个已存在的文件,以只读模式进入:
root@linuxcool \~\]# vi +R anaconda-ks.cfg