Loading... ### 1. cat > cat命令用于查看纯文本文件(内容较少的),英文全称为:“concatenate”,语法格式为:“cat [参数] 文件名称”. > Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的 > 如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数: ```bash # cat -n initial-setup-ks.cfg 1 #version=RHEL8 2 # X Window System configuration information 3 xconfig --startxonboot 4 # License agreement 5 eula --agreed 6 # Use graphical install 7 graphical 8 # Network information 9 network --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --no-activate 10 network --bootproto=dhcp --hostname=localhost.localdomain 11 repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream 12 ignoredisk --only-use=sda 13 # Use CDROM installation media 14 cdrom 15 # Run the Setup Agent on first boot 16 firstboot --enable 17 # System services ………………省略部分输出信息……………… ``` ### 2. more > more命令用于查看纯文本文件(内容较多的),语法格式为:“more [参数] 文件名称”. > 如果需要阅读长篇小说或者非常长的配置文件,那么“cat”可就真的不适合了.因为一旦使用cat命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了.因此对于长篇的文本内容,推荐使用more命令来查看,more命令会在最下面使用百分比的形式来提示您已经阅读了多少内容,还可以使用空格键或回车键向下翻页: ```bash # more initial-setup-ks.cfg #version=RHEL8 # X Window System configuration information xconfig --startxonboot # License agreement eula --agreed # Use graphical install graphical # Network information network --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --no-activate network --bootproto=dhcp --hostname=localhost.localdomain repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream ignoredisk --only-use=sda # Use CDROM installation media cdrom # Run the Setup Agent on first boot firstboot --enable # System services services --disabled="chronyd" # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 --More--(41% ``` ### 3. head(前N行) > head命令用于查看纯文本文件的前N行,语法格式为:“head [参数] 文件名称”. ```bash # head -n 10 initial-setup-ks.cfg #version=RHEL8 # X Window System configuration information xconfig --startxonboot # License agreement eula --agreed # Use graphical install graphical # Network information network --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --no-activate network --bootproto=dhcp --hostname=localhost.localdomain ``` ### 4. tail(后N行,日志) > tail命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为:“tail [参数] 文件名称”. > 可能还会遇到另外一种情况,比如需要查看文本内容的最后10行,这时就需要用到tail命令了.tail命令的操作方法与head命令非常相似,只需要执行“tail -n 20 文件名”命令就可以达到这样的效果: ```bash # tail -n 10 initial-setup-ks.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 ``` > tail命令最强悍的功能是能够持续刷新一个文件的内容,当想要实时查看最新日志文件时,这特别有用,此时的命令格式为“tail -f 文件名”: ```bash # tail -f /var/log/messages Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: sd_journal_get_cursor() failed: Cannot assign requested address [v8.37.0-9.el8] Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: journal reloaded... [v8.37.0-9.el8 try http://www.rsyslog.com/e/0 ] Sep 15 00:14:01 localhost systemd[1]: Started update of the root trust anchor for DNSSEC validation in unbound. Sep 15 00:14:01 localhost sssd[kcm][2764]: Shutting down Sep 15 00:14:06 localhost systemd[1]: Starting SSSD Kerberos Cache Manager... Sep 15 00:14:06 localhost systemd[1]: Started SSSD Kerberos Cache Manager. Sep 15 00:14:06 localhost sssd[kcm][3989]: Starting up Sep 15 00:14:26 localhost NetworkManager[1203]: <info> [1600100066.4675] audit: op="sleep-control" arg="off" pid=3990 uid=0 result="fail" reason="Already awake" Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: last_user_time (2361102) is greater than comparison timestamp (2361091). This most likely represents a buggy client sending inaccurate timestamps in messages such as _NET_ACTIVE_WINDOW. Trying to work around... Sep 15 00:19:04 localhost org.gnome.Shell.desktop[2600]: Window manager warning: W14 (root@local) appears to be one of the offending windows with a timestamp of 2361102. Working around... ``` ### 5. tr(重点) > tr命令用于替换文本内容中的字符,英文全称为:“translate”,语法格式为:“tr [原始字符] [目标字符]”. > 在很多时候,我们想要快速地替换文本中的一些词汇,又或者把整个文本内容都进行替换,如果进行手工替换,难免工作量太大,尤其是需要处理大批量的内容时,进行手工替换更是不现实.这时,就可以先使用cat命令读取待处理的文本,然后通过管道符把这些文本内容传递给tr命令进行替换操作即可.例如,把某个文本内容中的英文全部替换为大写: ```bash # cat anaconda-ks.cfg | tr [a-z] [A-Z] #VERSION=RHEL8 IGNOREDISK --ONLY-USE=SDA AUTOPART --TYPE=LVM # PARTITION CLEARING INFORMATION CLEARPART --ALL --INITLABEL --DRIVES=SDA # USE GRAPHICAL INSTALL GRAPHICAL REPO --NAME="APPSTREAM" --BASEURL=FILE:///RUN/INSTALL/REPO/APPSTREAM # USE CDROM INSTALLATION MEDIA CDROM # KEYBOARD LAYOUTS KEYBOARD --VCKEYMAP=US --XLAYOUTS='US' # SYSTEM LANGUAGE LANG EN_US.UTF-8 # NETWORK INFORMATION NETWORK --BOOTPROTO=DHCP --DEVICE=ENS160 --ONBOOT=OFF --IPV6=AUTO --NO-ACTIVATE NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN # ROOT PASSWORD ROOTPW --ISCRYPTED $6$TTBUW5DKOPYQQ.VI$RMK9FCGHOJOQ2QAPRURTQM.QOK2NN3YFN/I4F/FALVGGGND9XOIYFBRXDN16WWIZIASJ0/CR06U66IPEOGLPJ. # X WINDOW SYSTEM CONFIGURATION INFORMATION XCONFIG --STARTXONBOOT # RUN THE SETUP AGENT ON FIRST BOOT FIRSTBOOT --ENABLE # SYSTEM SERVICES SERVICES --DISABLED="CHRONYD" # SYSTEM TIMEZONE TIMEZONE ASIA/SHANGHAI --ISUTC --NONTP ………………省略部分输出信息……………… ``` ### 6. wc > wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为:“word counts”,语法格式为:“wc [参数] 文件名称”. | 参数 | 作用 | | ------ | -------------- | | -l | 只显示行数 | | -w | 只显示单词数 | | -c | 只显示字节数 | > 在Linux系统中,/etc/passwd是用于保存系统账户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询: ```bash # wc -l /etc/passwd 45 /etc/passwd ``` ### 7. stat > stat命令用于查看文件的具体存储细节和时间等信息,英文全称为:“status”,语法格式为:“stat 文件名称”. > > 在Linux系统中文件包含三种时间状态,分别是Access Time(最后一次内容被访问的时间,简称Atime),Modify Time(最后一次内容被修改的时间,简称Mtime)以及Change Time(文件属性最后一次被修改的时间,简称Ctime). > 查看文件上面的三种时间状态信息: ```bash # stat anaconda-ks.cfg File: anaconda-ks.cfg Size: 1407 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 35321091 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2020-07-21 05:16:52.347279499 +0800 Modify: 2020-07-21 05:09:16.421009316 +0800 Change: 2020-07-21 05:09:16.421009316 +0800 Birth: - ``` ### 8. grep(按行提取文本内容) > grep命令用于按行提取文本内容,语法格式为:“grep [参数] 文件名称”. > grep命令是用途最广泛的文本搜索匹配工具,虽然有很多参数,但是大多数基本上都用不到.在这里只讲两个最最常用的参数:-n参数用来显示搜索到信息的行号;-v参数用于反选信息(即没有包含关键词的所有信息行).这两个参数几乎能完成您日后80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用man grep命令查询也来得及.grep命令的参数及其作用如表2-15所示. | 参数 | 作用 | | ------ | ---------------------------------------------- | | -b | 将可执行文件(binary)当作文本文件(text)来搜索 | | -c | 仅显示找到的行数 | | -i | 忽略大小写 | | -n | 显示行号 | | -v | 反向选择——仅列出没有“关键词”的行. | > 在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息: ```bash # grep /sbin/nologin /etc/passwd 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 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 ………………省略部分输出过程信息……………… ``` ### 9. cut(按列提取文本内容) > cut命令用于按列提取文本内容,语法格式为:“cut [参数] 文件名称”. > 系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下: ```bash # head -n 2 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ``` > 一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可.但是如果按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号. > > 接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容: ```bash # cut -d : -f 1 /etc/passwd root bin daemon adm lp sync shutdown halt mail operator games ftp nobody dbus ………………省略部分输出信息……………… ``` ### 10. diff > diff命令用于比较多个文件之间内容的差异,英文全称为:“different”,语法格式为:“diff [参数] 文件名称A 文件名称B”. > 在使用diff命令时,不仅可以使用--brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器.例如,先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容,然后进行比较: ```bash # cat diff_A.txt Welcome to linuxprobe.com Red Hat certified Free Linux Lessons Professional guidance Linux Course # cat diff_B.txt Welcome tooo linuxprobe.com Red Hat certified Free Linux LeSSonS ////////.....//////// Professional guidance Linux Course ``` > 接下来使用diff --brief命令显示比较后的结果,判断文件是否相同: > > ```bash > # diff --brief diff_A.txt diff_B.txt > Files diff_A.txt and diff_B.txt differ > ``` > 最后使用带有-c参数的diff命令来描述文件内容具体的不同: > > ```bash > # diff -c diff_A.txt diff_B.txt > *** diff_A.txt 2020-08-30 18:07:45.230864626 +0800 > --- diff_B.txt 2020-08-30 18:08:52.203860389 +0800 > *************** > *** 1,5 **** > ! Welcome to linuxprobe.com > Red Hat certified > ! Free Linux Lessons > Professional guidance > Linux Course > --- 1,7 ---- > ! Welcome tooo linuxprobe.com > ! > Red Hat certified > ! Free Linux LeSSonS > ! ////////.....//////// > Professional guidance > Linux Course > ``` ### 11. uniq(连续行去重) > uniq命令用于去除文本中连续的重复行,英文全称为:“unique”,语法格式为:“uniq [参数] 文件名称”. > uniq命令全称是“unique”,中文释义是“独特的,唯一的”.该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行,去除了重复的,保留的都是唯一的,也就是独特的,唯一的了. > 我们对两个文本内容进行操作,区别一目了然: ```bash # cat uniq.txt Welcome to lo8ol.com Welcome to lo8ol.com Welcome to lo8ol.com Welcome to lo8ol.com Red Hat certified Free Linux Lessons Professional guidance Linux Course # uniq uniq.txt Welcome to lo8ol.com Red Hat certified Free Linux Lessons Professional guidance Linux Course ``` ### 12. sort(排序) > sort命令用于对文本内容进行再排序,语法格式为:“sort [参数] 文件名称”. > 有时文本里的内容顺序不正确,手动一行行的修改实在太麻烦了,那么使用sort命令就再合适不过了,它能够对文本内容进行再次排序.这个命令千万不能只讲理论,一定要上实战,一看就懂.sort命令的参数及其作用如表所示. | 参数 | 作用 | | ------ | ---------------- | | -f | 忽略大小写 | | -b | 忽略缩进与空格 | | -n | 以数值型排序 | | -r | 反向排序 | | -u | 去除重复行 | | -t | 指定间隔符 | | -k | 设置字段范围 | > 首先,sort命令执行后默认会按照字母顺序进行排序,非常方便: > > ````bash > # cat fruit.txt > banana > pear > apple > orange > raspaberry > # sort fruit.txt > apple > banana > orange > pear > raspaberry > ```` > 此外,与uniq命令不同,sort命令不论内容之间是否夹杂有其它内容,只要有两个一摸一样的内容行,立马就可以使用-u参数进行去重操作: > > ```bash > # cat sort.txt > Welcome to lo8ol.com > Red Hat certified > Welcome to lo8ol.com > Free Linux Lessons > Linux Course > # sort -u sort.txt > Free Linux Lessons > Red Hat certified > Welcome to lo8ol.com > ``` > 想对数字进行排序?也是一点问题都没有的,而且完全不用担心出现1小于20这种问题(有些命令只比较第一位): > > ```bash > # cat number.txt > 45 > 12 > 3 > 98 > 82 > 67 > 24 > 56 > 9 > # sort -n number.txt > 3 > 9 > 12 > 24 > 45 > 56 > 67 > 82 > 98 > ``` > 最后,我们挑战一个“高难度”的小实验.下面的内容是节选自/etc/passwd文件中前五个字段的内容,并进行混乱排序后的样子: > > ```bash > # cat user.txt > tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon > polkitd:x:998:996:User for polkitd > geoclue:x:997:995:User for geoclue > rtkit:x:172:172:RealtimeKit > pulse:x:171:171:PulseAudio System Daemon > qemu:x:107:107:qemu user > usbmuxd:x:113:113:usbmuxd user > unbound:x:996:991:Unbound DNS resolver > rpc:x:32:32:Rpcbind Daemon > gluster:x:995:990:GlusterFS daemons > ``` > 不难看出上面其实是五个字段,各个字段之间是用了冒号进行间隔,如果想以第三个字段中的数字作为排序依据,那么就可以用-t参数指定间隔符,-k参数指定第几列,-n参数进行数字排序来搞定: > > ```bash > # sort -t : -k 3 -n user.txt > rpc:x:32:32:Rpcbind Daemon > tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon > qemu:x:107:107:qemu user > usbmuxd:x:113:113:usbmuxd user > pulse:x:171:171:PulseAudio System Daemon > rtkit:x:172:172:RealtimeKit > gluster:x:995:990:GlusterFS daemons > unbound:x:996:991:Unbound DNS resolver > geoclue:x:997:995:User for geoclue > polkitd:x:998:996:User for polkitd > ``` 最后修改:2022 年 04 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏