cat
用于查看较少内容的纯文本文件
想要显示行号可以使用-n参数:
[root@linuxprobe ~]# 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 --activate
10 network --bootproto=dhcp --hostname=linuxprobe.com
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
18 services --disabled="chronyd"
19 # Keyboard layouts
20 keyboard --vckeymap=us --xlayouts='us'
21 # System language
22 lang en_US.UTF-8
以下信息省略……
more
用于查看内容较多的纯文本文件
使用cat命令一旦内容多起来就很难有一个好的阅读体验,会将所有信息全部打印在终端上面。而more只会打印一页的内容,可以通过空格或者回车进行翻页操作。并且末尾会提示阅读进度百分比。
[root@linuxprobe ~]# 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 --activate
network --bootproto=dhcp --hostname=linuxprobe.com
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%)
head
用于查看前面N行的纯文本文件
如果只需要查看文件的前面几行,完全用不到cat和more,使用head就好了。
例如,查看文本的前10行:
[root@linuxprobe ~]# 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 --activate
network --bootproto=dhcp --hostname=linuxprobe.com
[root@linuxprobe ~]#
tail
用于查看纯文本文件的后N行数据,或者持续刷新日志
既然有能够查看前N行的命令,自然也少不了查看后N行的命令。
查看后10行:
[root@linuxprobe ~]# 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
[root@linuxprobe ~]#
持续监视日志:
[root@linuxprobe ~]# tail -f 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
如果文本有内容新增,终端也会实时打印出来,想要推出同时按下ctrl+c
tr
用于替换文本中的某个字符
如果想要批量替换某些字符,可以先用cat读取文本,然后利用管道符把这些文本传递给tr命令来进行替换。
例如,将cat读取到的文本替换成大写:
[root@linuxprobe ~]# cat initial-setup-ks.cfg | tr a-z A-Z
#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 --ACTIVATE
NETWORK --BOOTPROTO=DHCP --HOSTNAME=LINUXPROBE.COM
REPO --NAME="APPSTREAM" --BASEURL=FILE:///RUN/INSTALL/REPO/APPSTREAM
以下信息省略……
wc
用于统计文本文件的行数,字数或字节数
-
-l:只显示行数
-
-w:只显示单词数
-
-c:只显示字节数
统计文本行数:
[root@linuxprobe ~]# wc -l initial-setup-ks.cfg
49 initial-setup-ks.cfg
统计文本单词数:
[root@linuxprobe ~]# wc -w initial-setup-ks.cfg
135 initial-setup-ks.cfg
统计字节数:
[root@linuxprobe ~]# wc -c initial-setup-ks.cfg
1540 initial-setup-ks.cfg
stat
用于查看文件的具体存储细节和时间等信息
linux有三种时间状态:
-
Access Time:简称Atime,最后一次访问时间
-
Modify Time:简称Mtime,内容最后一次修改时间
-
Change Time:简称Ctime,文件属性最后一次修改时间
可以使用stat来查看这三种时间状态:
[root@linuxprobe ~]# stat initial-setup-ks.cfg
File: initial-setup-ks.cfg
Size: 1540 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35317774 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2023-09-20 11:26:57.156484115 +0800
Modify: 2023-08-03 23:02:00.440395705 +0800
Change: 2023-08-03 23:02:00.440395705 +0800
Birth: -
grep
用于提取文本内容
grep是用途最广泛的文本搜索匹配工具。他有很多参数,但是 -n -v这两个就占用日常使用的80%。下面是一些常用参数:
-
-b:将可执行文件(binary)当作文本文件来搜索
-
-c:仅显示找到的行号
-
-i:忽略大小写
-
-n:显示行号
-
-v:反向选择——仅列出没有”关键字”的行。
linux中/etc/passwd中保存着所有用户信息,而一旦用户的登录终端被改为了/sbin/nologin,则不再允许登录系统,因此可以使用grep来查找出不允许登录系统的用户:
[root@linuxprobe ~]# 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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
——————以下信息省略——————
cut
用于提取列的信息
前面有head来获取前N行的数据,也有tail来获取后N行的数据。想要获取行信息比较容易,如果想要获取列信息,首先要给定一个参数来确认以什么字符来分割列。
我们先看/etc/passwd下面的行内容:
[root@linuxprobe ~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
可以观察到,这份文件的列是用冒号(:)来分隔列的,因此我们可以以冒号分隔来提取第一列内容:
[root@linuxprobe ~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
operator
games
ftp
nobody
dbus
systemd-coredump
——————以下信息省略——————
diff
用于比较多个文件之间的差异
它能够比较两个文件之间是否存在差异,并且可以给出具体差异在哪里。
我们先创建一个文件,并且vi编辑一下:
[root@linuxprobe ~]# touch diff_A.txt
[root@linuxprobe ~]# vi diff_A.txt
在vi编辑器中我们按下 i 进入编辑模式,然后输入一些内容:
然后我们按下etc退出编辑模式,然后按下shift+:,输入wq(保存并且退出)。
我们拷贝一份文件修改一下名称:
[root@linuxprobe ~]# cp diff_A.txt diff_B.txt
我们先查看这两份文件:
[root@linuxprobe ~]# cat diff_A.txt
hello world
hello linux
hello java
hello vue
[root@linuxprobe ~]# cat diff_B.txt
hello world
hello linux
hello java
hello vue
然后使用diff –brief来判断两份文件是否有差异:
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
[root@linuxprobe ~]#
没有打印任何信息,表面两个文件之间没有差异。
我们用vi修改一下diff_B.txt的内容:
再次使用diff –brief查看差异:
[root@linuxprobe ~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ
可以看到终端上面已经输出了一些信息,并且表明differ有差异。
接下来我们使用diff -c来输出具体差异:
[root@linuxprobe ~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2023-09-21 09:54:17.098454795 +0800
--- diff_B.txt 2023-09-21 10:00:31.151432360 +0800
***************
*** 1,4 ****
! hello world
! hello linux
! hello java
hello vue
--- 1,3 ----
! hello worl
! hello java-ee
hello vue
[root@linuxprobe ~]#
有感叹号的行就是有差异的数据,代表该行与对方有差异。
uniq
用于去除文本中连续的重复行
必须要是连续的重复行才会被去除掉,如果中间夹着其他行,也是不能去除的。
我们创建一个文本文件来进行试验,如何创建如何编辑diff命令已经演示过了,我们直接看编辑完成的文本内容:
[root@linuxprobe ~]# cat test.txt
hello world
hello world
hello world
hello linux
hello java
我们使用uniq来去除连续重复行:
[root@linuxprobe ~]# uniq test.txt
hello world
hello linux
hello java
sort
对文本内容再排序
这个命令需要实践才能真正掌握,排序有很多限制有很多规则。
sort参数以及作用如下:
参数 | 作用 |
---|---|
-f | 忽略大小写 |
-b | 忽略缩进与空行 |
-n | 以数值型排列 |
-r | 反向排序 |
-u | 去除重复行 |
-t | 指定字符间隔 |
-k | 设置字段范围 |
我们随便找一个文件来进行实验。
默认的排序规则是按照字母排序:
[root@linuxprobe ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:994:989::/var/lib/chrony:/sbin/nologin
clevis:x:983:982:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
cockpit-ws:x:982:980:User for cockpit-ws:/:/sbin/nologin
colord:x:980:978:User for colord:/var/lib/colord:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
dnsmasq:x:984:984:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
——————以下信息省略——————
来个高难度,/etc/passwd 的文件第三列是个数字,如果我们想用这个数字来进行排序,怎么才能做到:
[root@linuxprobe ~]# sort -t : -k 3 -n /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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
——————以下信息省略——————
这里的参数,-t设置间隔符,-k代表第几列,-n代表数字排序。