文件查看命令使用示例
cat file1 #从第一个字节开始正向查看文件的内容
tac file1 #从最后一行开始反向查看一个文件的内容
more file1 #查看一个长文件的内容
less file1 #类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作
head -2 file1 #查看一个文件的前两行
tail -2 file1 #查看一个文件的最后两行
tail -f /var/log/messages #实时查看被添加到一个文件中的内容
grep命令
grep命令是非常重要的命令,可以对文本进行查找和搜索 ,grep是Global Regular Expression Print(全局正则表达式搜索)的缩写。
ps -ef | grep svn 查找指定进程
ps -ef | grep svn -c 查找指定进程个数
常用参数如下:
-a #不要忽略二进制数据
-A #除了显示符合范本样式的那一行之外,并显示该行之后的内容
-b #在显示符合范本样式的那一行之外,并显示该行之前的内容
-B #除了显示符合样式的那一行之外,并显示该行之前的内容
-c #计算符合范本样式的列数
-C #除了显示符合范本样式的那一列之外,并显示该列之前后的内容
-d #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
-e #指定字符串作为查找文件内容的范本样式
-E #将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-f #指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
-F #将范本样式视为固定字符串的列表
-G #将范本样式视为普通的表示法来使用
-h #在显示符合范本样式的那一列之前,不标示该列所属的文件名称
-H #在显示符合范本样式的那一列之前,标示该列的文件名称
-i #忽略字符大小写的差别
-l #列出文件内容符合指定的范本样式的文件名称
-L #列出文件内容不符合指定的范本样式的文件名称
-n #在显示符合范本样式的那一列之前,标示出该列的编号
-q #不显示任何信息
-R/-r #此参数的效果和指定“-d recurse”参数相同
-s #不显示错误信息
-v #反转查找
-V #显示版本信息
-w #只显示全字符合的列
-x #只显示全列符合的列
-y #此参数效果跟“-i”相同
-o #只输出文件中匹配到的部分
正则表达式
^ #匹配以XX开头的行
$ #匹配以XX结尾的行
常用示例:
# 在多个文件中查找:
grep "file" file_1 file_2 file_3
# 输出除之外的所有行 -v 选项:
grep -v "file" file_name
# 标记匹配颜色 --color=auto 选项:
grep "file" file_name --color=auto
# 使用正则表达式 -E 选项:
grep -E "[1-9]+"
egrep "[1-9]+"
# 只输出文件中匹配到的部分 -o 选项:
echo this is a test line. | grep -o -E "[a-z]+\."
line.
echo this is a test line. | egrep -o "[a-z]+\."
line.
# 统计文件或者文本中包含匹配字符串的行数-c 选项:
grep -c "text" file_name
2
# 输出包含匹配字符串的行数 -n 选项:
grep "text" -n file_name
或
cat file_name | grep "text" -n
# 多个文件
grep "text" -n file_1 file_2
# 搜索多个文件并查找匹配文本在哪些文件中:
grep -l "text" file1 file2 file3...
# grep递归搜索文件,在多级目录中对文本进行递归搜索:
grep "text" . -r -n
# 忽略匹配样式中的字符大小写:
echo "hello world" | grep -i "HELLO"
hello
# 选项 -e 指定多个匹配样式:
echo this is a text line | grep -e "is" -e "line" -o
is
line
# 也可以使用 **-f** 选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。
cat patfile
aaa
bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o
# 在grep搜索结果中包括或者排除指定文件:只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}
# 在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
# 在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
which命令
which,whereis,locate命令
这三个命令都用于搜索文件路径,使用示例
locate *.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
whereis halt 显示一个二进制文件、源码或man的位置
which halt 显示一个二进制文件或可执行文件的完整路径
which命令用于用户查找命令所有路径,这里显示的时绝对路径。同时which命令也可以看到某个系统命令是否存在。
语法格式
which [options] [--] programname [...]
选项说明
-a #打印每个匹配文件名的所有匹配路径名
-V #打印版本信息
退出状态说明
0 #找到了所有文件名,所有文件都是可执行的
1 #找不到一个或多个文件名,或者文件名不可执行
2 #指定的选项无效
应用举例
# 搜索ls
[root@localhost sysconfig]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@centos7 ~]# which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/alias
/usr/bin/which
[root@centos7 ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@centos7 ~]# which pwd
/usr/bin/pwd
[root@centos7 ~]# which rz
/usr/bin/rz
[root@centos7 ~]# which ifconfig
/usr/sbin/ifconfig
whereis命令
whereis命令相对于which命令,whereis命令搜索的范围更大,它可以查找二进制程序、代码相关文件路径。
和find命令命令比,whereis查找非常快,因为Linux将系统里所有文件记录在一个数据库文件中,whereis是直接从数据库文件中查找。而find命令是遍历硬盘来查找,所以whereis会比find快。
语法格式
whereis [ OPTIONS ] file name...
选项说明
-b #只查找二进制文件
-B<目录> #只在指定的目录下查找二进制文件
-f #不显示文件名前的路径名称
-m #只查找说明文件
-M<目录> #只在指定的目录下查找说明文件
-s #只查找原始代码文件
-S<目录> #只在指定的目录下查找原始代码文件
-u #查找不包含指定类型的文件
应用举例
#将相关的所有文件都查找出来
[root@centos7 ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
[root@centos7 ~]# whereis top
top: /usr/bin/top /usr/share/man/man1/top.1.gz
#只将二进制文件查找出来
[root@centos7 ~]# whereis -b ifconfig
ifconfig: /usr/sbin/ifconfig
[root@centos7 ~]# whereis -b top
top: /usr/bin/top
locate命令
locate命令的搜索不特定于命令或者软件包,而是能够找到任何类型的文件。如果没有该命令的话,需要通过apt-get install locate或者yum install locate命令安装。
file命令
file命令用于获取文件属性,查看指定文件的类型。
这里再回顾一下linux的文件类型:
普通文件 #属性信息表示为 -
目录文件 #属性信息表示为 d
链接文件 #属性信息表示为 l
套接字文件 #属性信息表示为 s
字符设备文件 #属性信息表示为 b
块设备文件 #属性信息表示为 c
管道文件 #属性信息表示为 p
命令格式
file [选项] [文件名或目录名]
选项说明
-b:#列出结果,但不显示文件名称
-c:#详细显示指令执行过程
-L:#显示链接文件的源文件类型
-m<魔法数字文件>:#指定魔法数字文件
-v:#打印出版本信息
-z:#查看压缩文件的内容
应用示例
[root@localhost sysconfig]# file sshd
sshd: ASCII text
#查看文件类型
[root@centos7 testdir]# file cp
cp: symbolic link to `/usr/bin/cp`
[root@centos7 testdir]# file dir
dir: directory
[root@centos7 testdir]# file test2.txt
test2.txt: empty
[root@centos7 testdir]# file test2.txt~
test2.txt~: empty
#直接显示结果,不显示文件名
[root@centos7 testdir]# file -b dir
directory
#解读压缩文件的内容
[root@centos7 ~]# file -z httpd-2.4.46.tar.gz
httpd-2.4.46.tar.gz: POSIX tar archive (GNU) (gzip compressed data, was "httpd-2.4.46.tar", from Unix, last modified: Sat Aug 1 10:12:01 2020, max compression)
nl命令
nl命令用于显示行号
nl [-bnw] 文件
选项与参数:
-b: 指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在荧幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。
more命令
more命令用于分页显示文件内容
more file1 查看一个长文件的内容,支持一页一页翻动
快捷健
morm命令运行的时候,支持以下几个按键操作:
空白键 (space):代表向下翻一页;
Enter:代表向下翻『一行』;
/字串:代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f:立刻显示出档名以及目前显示的行数;
q:代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
H 键 #显示帮助信息
| #输入一个模式,可以在当前文本内容查找一个相匹配的模式
命令格式
more [选项] [文件名]
more [option] [file ...]
选项说明
-<数字> #指定每页显示的行数
-c #不进行滚屏操作
-s #将多个空行压缩成一行显示
-u #去除下划线
+<数字> #从指定的行开始显示
应用举例
#查看文件mingongge的内容,在显示之前先清屏并且显示当前页数的百分比
more -dc mingongge
#显示文件mingongge的内容,每100行显示一次,显示之前清屏
more -c -100 mingongge
#从第十行开始显示mingongge.txt文件内容
more +10 mingongge.txt
#从包含字符串 "mingonggee" 行开始显示mingongge.txt文件内容
more +/"mingonggee" mingonggee.txt
#用ls打印当前目录列表,配合more分页显示
ls | more
less命令
less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作
less运行时可以输入的命令有:
空白键:#向下翻动一页;
[pagedown]:#向下翻动一页;
[pageup]:#向上翻动一页;
/字串:#向下搜寻『字串』的功能;
?字串:#向上搜寻『字串』的功能;
n:#重复前一个搜寻 (与 / 或 ? 有关!)
N:#反向的重复前一个搜寻 (与 / 或 ? 有关!)
q:#离开 less 这个程序;
命令格式
less [选项] [文件名]
less [option] [file ...]
选项说明
e #文件内容显示完成后,自动退出
f #强制显示文件
g #不加亮显示
l #忽略大小写
N #行首显示行号
s #合并多个空行只显示一行
S #不换行显示内容
x<数字> #将TAB字符显示为指定个数的空格字符
应用举例
#分页显示mingongge.log文件内容
less /var/log/mingongge.log
#显示文件mingongge的内容,并在每行行首加上行号
less -N mingongge.txt
#下/上一页:
<Space> (down), b (up)
#less 命令转到文件的末尾/开始:
G (end), g (start)
#向前查找字符串(按 n N 跳转到下一个/上一个)
/mingongge
#向后查找字符串(按 n N 跳转到下一个/上一个)
?mingongge
#退出 less 命令
q
head命令
head命令用于查看文件的前面几行,默认只显示文件的头10行内容。
命令格式
head [选项] [文件名]
head [OPTION] [FILE]
比如:
head [-n number]
head -2 file1 查看一个文件的前两行
选项说明
-n<数字> #按指定行数显示(从文件开头位置计算)
-c<字符数> #按指定的字符数显示(从文件的第一个字符开始计算)
-v #显示文件名信息
-q #不显示文件名信息
--help #打印帮助信息后退出
--version #打印版本信息后退出
应用举例
#显示文件mingongge.txt前150行内容(如果没有其它参数,可以不需要-n)
head -150 mingongge.txt
#显示文件mingongge1.txt 和mingongge2.txt的前100行内容
head -100 mingongge1.txt mingongge2.txt
[root@centos7 testdir]# head -100 mingongge1.txt mingongge2.txt
==> mingongge1.txt <==
11111111111111111111
22222222222222222222222
33333333333333333333333333
444444444444444444444444
....
==> mingongge2.txt <==
head1
head2
head3
head4
....
#注意:默认情况,一次显示多个文件的话,默认是显示文件名信息的,可以不加-v参数。
[root@centos7 testdir]# head -q -n 3 mingongge1.txt mingongge2.txt
11111111111111111111
22222222222222222222222
33333333333333333333333333
head1
head2
head3
tail命令
tail命令和上面的head命令对应,用于查看文件的后面几行,默认是显示指定文件的末尾10行。
tail 命令还可以查看文件实时写入的数据,例如,我们常用它来查看应用运行的日志文件,可以动态实时显示应用运行所产生的日志,便于排错或查看应用运行是否正常。
命令格式
tail [选项] [链接文件名]
tail [OPTION] [LINKNAME]
比如:
tail [-n number]
tail -2 file1 查看一个文件的最后两行
tail -f /var/log/messages 实时查看被添加到一个文件中的内容
选项说明
-f #显示文件最新追加的内容,实时动态展示一个文件的写入数据
-n<N> #输出文件的尾部N(N位数字)行内容。
--pid=<进程号> #与“-f”选项配合,如果指定进程号的进程终止后,自动退出
-v #显示文件名信息
-q #不显示文件名信息
--help #打印帮助信息
--version #打印版本信息
应用举例
#显示文件mingongge从第200行至文件末尾的内容
tail -n +200 mingongge
#显示文件mingongge的最后100个字符
[root@centos7 ~]# tail -c 100 mingongge
#显示mingongge.log最后的250行
[root@centos7 ~]# tail -250 mingongge.log
#实时展示mingongge.log文件的写入数据
[root@centos7 ~]# tail -f mingongge.log
#带文件名与不带文件名举例
[root@centos7 ~]# tail -v -n 10 /etc/passwd /etc/shadow
==> /etc/passwd <==
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:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
==> /etc/shadow <==
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:18494::::::
dbus:!!:18494::::::
polkitd:!!:18494::::::
sshd:!!:18494::::::
postfix:!!:18494::::::
chrony:!!:18494::::::
[root@centos7 ~]# tail -q -n 10 /etc/passwd /etc/shadow
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:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
operator:*:17834:0:99999:7:::
games:*:17834:0:99999:7:::
ftp:*:17834:0:99999:7:::
nobody:*:17834:0:99999:7:::
systemd-network:!!:18494::::::
dbus:!!:18494::::::
polkitd:!!:18494::::::
sshd:!!:18494::::::
postfix:!!:18494::::::
chrony:!!:18494::::::
cut命令
cut将文件中行中内容按指定分隔符分割并输出。cut命令还可以用于删除文件中指定行或段,然后打印输出更改后的内容。还可能用以拼接文件内容到一个新的文件中,功能和cat类似。
命令格式
cut [选项] [链接文件名]
cut [OPTION] [LINKNAME]
选项说明
-b #只显示行中指定(字节数)的内容
-c #只显示行中指定(字符数)的内容
-d #指定字段的分隔符,默认为“TAB”
-f #打印指定字段(列)的内容
-n #与“-b”选项连用,不分割多字节字符
-s #不打印不包含定界符的行的内容
--help #打印帮助信息
--version #打印版本信息
应用举例
#打印指定字节数的内容
[root@centos7 testdir]# cat mingongge1.txt
1111 11 111111 1 111 1 1 11
22222222222 222 2222 22 2 2 2
33333333333 333333 3333 333 33
444444444444 444 444444444
[root@centos7 testdir]# cut -b 3 mingongge1.txt
1
2
3
4
#截取指定字段内容
[root@centos7 testdir]# cat cuttest.txt
1 2 3 4 5 6 8
9 8 7 6 5 4 3
2 1 9 8 7 6 5
#以空格为分隔,打印每一行的第一列
[root@centos7 testdir]# cut -f1 -d" " cuttest.txt
1
9
2
#以空格为分隔,打印每一行的第一列和第三列
[root@centos7 testdir]# cut -f1,3 -d" " cuttest.txt
1 3
9 7
2 9
#以空格为分隔,打印每一行的第三列到结尾
[root@centos7 testdir]# cut -f3- -d" " cuttest.txt
3 4 5 6 8
7 6 5 4 3
9 8 7 6 5
#截取每一行第2-5个字符
[root@centos7 testdir]# cut -c 2-5 cuttest.txt
2 3
8 7
1 9
#截取每一行第一个到第五个字符
[root@centos7 testdir]# cut -c -5 cuttest.txt
1 2 3
9 8 7
2 1 9
#截取每一行第五个到最后一个字符
[root@centos7 testdir]# cut -c 5- cuttest.txt
3 4 5 6 8
7 6 5 4 3
9 8 7 6 5
md5sum命令
md5sum 用于计算和校验文件的MD5值。md5sum 常常被用来验证网络文件传输的完整性,防止文件被人篡改。在日常工作当中,我们可以用来监控系统中的重要文件是否被篡改。
还可以使用使用 md5sum 生成文件或用户的密码。
语法格式
md5sum [选项] [文件]
选项说明
-b #使用二进制模式对文件进行读取
-t #把输入的文件看作是文本文件
-c #从指定文件中读取MD5校验值,并进行校验
--status #校验成功时不输出任何信息
-w #当校验不正确时输出警告信息
应用举例
生成密码或随机数值
[root@centos7 ~]# date | md5sum
1b1f0ba711e7d4931c23fbbd2b328e40 -
检查一个文件的 md5 值
[root@centos7 testdir]# md5sum mingongge1.txt
c5cab5a45a72380ce456a4370bf40348 mingongge1.txt
检查一个文件是否被更改
#提取文件原md5值
[root@centos7 testdir]# md5sum mingongge1.txt >./mingongge.txt.md5
[root@centos7 testdir]# cat mingongge.txt.md5
c5cab5a45a72380ce456a4370bf40348 mingongge1.txt
#写入内容
[root@centos7 testdir]# cat >> mingongge1.txt << EOF
> 1
> 2
> 3
> 4
> EOF
[root@centos7 testdir]# md5sum mingongge1.txt -c mingongge.txt.md5
mingongge1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
sort命令
sort命令用于对文件的文本内容排序。系统默认情况下,排序规则如下:
1)以数字开头的行,将排在以字母开头的行前面
2)以小写字母开头的行,将排在以大写字母开头的行前面
3)按字母表的顺序排列以字母开头的行
语法格式
sort [选项] [文件]
sort [OPTION] [FILE]
选项说明
-b #排除开头的空白
-d #只考虑空白、字母、数字
-f #将小写字母视为大写字母考虑
-g #根据数字排序
-i #排除不可打印字符
-M #按非月份的顺序排序
-h #根据存储容量排序
-n #根据数字排序。
-R #随机排序
-r #倒序
--sort=WORD #根据指定的WORD排序
-V #按文本中(版本)数字的自然排序
-o #将排序结果写入一个文件
--help #显示帮助信息并退出
--version #显示版本信息并退出
应用举例
[root@centos7 testdir]# cat cuttest.txt
1 2 3 4 5 6 8
9 8 7 6 5 4 3
2 1 9 8 7 6 5
[root@centos7 testdir]# sort cuttest.txt
1 2 3 4 5 6 8
2 1 9 8 7 6 5
9 8 7 6 5 4 3
#将结果输出到文件
[root@centos7 testdir]# sort -o sort.cut.txt cuttest.txt
[root@centos7 testdir]# cat sort.cut.txt
1 2 3 4 5 6 8
2 1 9 8 7 6 5
9 8 7 6 5 4 3
#倒序排列
[root@centos7 testdir]# sort -r cuttest.txt
9 8 7 6 5 4 3
2 1 9 8 7 6 5
1 2 3 4 5 6 8
uniq命令
uniq命令用于去除文件中重复行,一般与sort命令结合使用。
语法格式
uniq [选项] [标准输入 [输出]]
uniq [OPTION] [INPUT [OUTPUT]]
输入文件 #指定要去除的重复行文件。如果不指定该项,则从标准读入
输出文件 #指定要去除重复行后的内容要写入的输出文件。如果不指定此项,则将内容显示到标准输出设备(显示终端)。
选项说明
-c #在每列旁边显示该行重复出现的次数
-d #只显示重复出现的行与列
-f #忽略比较指定的字段
-s #忽略比较指定的字符
-i #不区分大小写的比较
-u #只显示出现过一次的行与列
-w #指定要比较的字符
-z #用0字节(NULL)代替换行符
--help #显示帮助信息并退出
--version #显示版本信息并退出
应用举例
#删除重复行
[root@centos7 ~]# cat test.txt
This is a test line
This is a test line
This is a test line
This is also a test line
This is also a test line
This is also also a test line
[root@centos7 ~]# uniq test.txt
This is a test line
This is also a test line
This is also also a test line
[root@centos7 ~]# sort test.txt | uniq
This is also also a test line
This is also a test line
This is a test line
#只显示单一行
[root@centos7 ~]# uniq -u test.txt
This is also also a test line
[root@centos7 ~]# sort test.txt |uniq -u
This is also also a test line
#统计各行在文件中出现的次数
[root@centos7 ~]# sort test.txt |uniq -c
1 This is also also a test line
2 This is also a test line
3 This is a test line
#在文件中找出重复的行
[root@centos7 ~]# sort test.txt |uniq -d
This is also a test line
This is a test line
wc命令
wc命令可以认为是word count的缩写,用来统计文件中的行数、单词数或字节数,然后将结果输出在终端上。我们可以使用 wc 命令来计算文件的Byte数、字数或是列数。
语法格式
wc [选项] [文件]
wc [OPTION] [FILE]
选项说明
-c #统计字节数
-l #统计行数
-m #统计字符数
-w #统计字数
-L #显示最长行的长度
-help #显示帮助信息
--version #显示版本信息
应用举例
1)查看文件的字节数、字数、行数
[root@centos7 ~]# wc test.txt
6 34 140 test.txt
[root@centos7 ~]# wc mingongge.file
0 0 0 mingongge.file
[root@centos7 ~]# wc -L test.txt
29 test.txt
[root@centos7 ~]# wc -m test.txt
140 test.txt
[root@centos7 ~]# wc -l test.txt
6 test.txt
[root@centos7 ~]# wc -c test.txt
140 test.txt
统计当前目录下的所有文件行数及总计行数
[root@centos7 ~]# wc -l *
48 anaconda-ks.cfg
wc: goinception: Is a directory
0 goinception
45222 goInception-linux-amd64-v1.2.3.tar.gz
wc: httpd-2.4.46: Is a directory
0 httpd-2.4.46
36246 httpd-2.4.46.tar.gz
0 mingongge.file
wc: testdir: Is a directory
0 testdir
6 test.txt
81522 total
配合命令输出结果来统计
[root@centos7 ~]# ls -l |wc -l
9
[root@centos7 ~]# ls -l
total 21888
-rw-------. 1 root root 1320 Aug 20 10:39 anaconda-ks.cfg
drwxr-xr-x 3 root root 39 Aug 30 03:48 goinception
-rw-r--r-- 1 root root 13034487 Aug 30 03:42 goInception-linux-amd64-v1.2.3.tar.gz
drwxr-sr-x 11 root 40 4096 Dec 24 22:35 httpd-2.4.46
-rw-r--r-- 1 root root 9363314 Aug 5 07:32 httpd-2.4.46.tar.gz
-rw-r--r-- 1 root root 0 Jan 2 08:43 mingongge.file
drwxr-xr-x 3 root root 210 Jan 16 10:19 testdir
-rw-r--r-- 1 root root 140 Jan 16 10:30 test.txt
diff命令
diff 命令用于查找、分析两个文件中不同的行,并打印输出在屏幕上。
如果是对指定的目录进行比较,就是比较该指定目录下的同名文件,不会对该目录的子目录下的文件进行比较操作。
语法格式
diff [选项] [文件]
diff [OPTION] [FILE]
选项说明
-<行数> #指定要显示的行数,必须与-c或-u参数一并使用
-a #逐行比较文件
-b #不对空格进行比较
-B #不对空行进行比较
-c #显示全部内容,并标出不同之处
-C<行数> #与执行“-c-<行数>”指令相同
-d #以小的单位来做比较
-H #加速比较大文件
-n #将比较结果以RCS的格式显示
-q #只需显示有无差异,不需要显示其它信息
-r #对子目录的文件进行比较
-s #如果两个文件没有差异,也给出相关的信息
-S #比较两个目录时,从指定的文件开始执行比较动作
-u #以合并的方式来显示文件内容的不同
-v #显示版本信息
-w #忽略所有空格字符
-y #以并列的方式显示两个文件的差异之处
--help #显示帮助
应用举例
1)比较两个文件的不同之处
[root@centos7 testdir]# diff mingongge1.txt mingongge2.txt
1,8c1,4
< 1111 11 111111 1 111 1 1 11
< 22222222222 222 2222 22 2 2 2
< 33333333333 333333 3333 333 33
< 444444444444 444 444444444
< 1
< 2
< 3
< 4
---
> head1
> head2
> head3
> head4
#a表示添加,c表示更改,d表示删除
#以<开头的行是第一个文件中的行
#以>开头的行是第二个文件中的行
[root@centos7 testdir]# diff -c mingongge1.txt mingongge2.txt
*** mingongge1.txt 2021-01-16 09:55:49.489792550 -0500
--- mingongge2.txt 2021-01-16 03:36:24.645284332 -0500
***************
*** 1,8 ****
! 1111 11 111111 1 111 1 1 11
! 22222222222 222 2222 22 2 2 2
! 33333333333 333333 3333 333 33
! 444444444444 444 444444444
! 1
! 2
! 3
! 4
--- 1,4 ----
! head1
! head2
! head3
! head4
2)diff 比对字符含义
! #表示此行是一个或多个需要更改的行的一部分
+ #表示第二个文件中需要添加到第一个文件中的一行
- #表示第一个文件中需要删除的一行
[root@centos7 testdir]# diff -c cuttest.txt cest.txt
*** cuttest.txt 2021-01-16 12:12:15.844549487 -0500
--- cest.txt 2021-01-16 12:15:08.775042428 -0500
***************
*** 1,6 ****
--- 1,7 ----
aaaaabbbbbbbb
cccccccccccccccccccc
ddddddddddd
+ 1111111111111111111111111111111111111111
fffffffffffffffffff
ggggggggggggggggg
wwwwwwwwwwwwwwww
#合并的方式来进行比较
[root@centos7 testdir]# diff -u cuttest.txt cest.txt
--- cuttest.txt 2021-01-16 12:12:15.844549487 -0500
+++ cest.txt 2021-01-16 12:15:08.775042428 -0500
@@ -1,6 +1,7 @@
aaaaabbbbbbbb
cccccccccccccccccccc
ddddddddddd
+1111111111111111111111111111111111111111
fffffffffffffffffff
ggggggggggggggggg
wwwwwwwwwwwwwwww
paste命令
paste 命令用于并排显示多个文件的相应行,将多个文件按列合并。
语法格式
paste [选项] [文件]
paste [OPTION] [FILE]
选项说明
-d #指定分隔符来取代默认分隔符(TAB分隔符)
-s #串列进行而非平行处理
--help #显示帮助信息
--version #显示版本信息
应用举例
1)并排显示两个文件的内容
[root@centos7 testdir]# paste mingongge1.txt mingongge2.txt
1111 11 111111 1 111 1 1 11 head1
22222222222 222 2222 22 2 2 2 head2
33333333333 333333 3333 333 33 head3
444444444444 444 444444444 head4
1
2
3
4
2)paste 合并两个文件,或者添加行
[root@centos7 testdir]# cat mingongge1.txt
1111 11 111111 1 111 1 1 11
22222222222 222 2222 22 2 2 2
33333333333 333333 3333 333 33
444444444444 444 444444444
1
2
3
4
[root@centos7 testdir]# cat mingongge2.txt
head1
head2
head3
head4
[root@centos7 testdir]# paste -d '\n' mingongge1.txt mingongge2.txt
1111 11 111111 1 111 1 1 11
head1
22222222222 222 2222 22 2 2 2
head2
33333333333 333333 3333 333 33
head3
444444444444 444 444444444
head4
1
2
3
4
[root@centos7 testdir]# paste -d '\r' mingongge1.txt mingongge2.txt
head111 111111 1 111 1 1 11
head2222222 222 2222 22 2 2 2
head3333333 333333 3333 333 33
head44444444 444 444444444
1
2
3
4
3)paste 命令其他用法
[root@centos7 testdir]# paste mingongge1.txt
1111 11 111111 1 111 1 1 11
22222222222 222 2222 22 2 2 2
33333333333 333333 3333 333 33
444444444444 444 444444444
1
2
3
4
#连接文件中的所有行
[root@centos7 testdir]# paste -s mingongge1.txt
1111 11 111111 1 111 1 1 11 22222222222 222 2222 22 2 2 2 33333333333 333333 3333 333 33 444444444444 444 444444444 1 2 3 4
#使用指定分隔符连接所有行
[root@centos7 testdir]# paste -d, -s mingongge1.txt
1111 11 111111 1 111 1 1 11,22222222222 222 2222 22 2 2 2,33333333333 333333 3333 333 33,444444444444 444 444444444,1,2,3,4
[root@centos7 testdir]# paste -d[] -s mingongge1.txt
1111 11 111111 1 111 1 1 11[22222222222 222 2222 22 2 2 2]33333333333 333333 3333 333 33[444444444444 444 444444444]1[2]3[4
[root@centos7 testdir]# paste -d/ -s mingongge1.txt
1111 11 111111 1 111 1 1 11/22222222222 222 2222 22 2 2 2/33333333333 333333 3333 333 33/444444444444 444 444444444/1/2/3/4
#查看 paste 命令版本
[root@centos7 testdir]# paste --version
paste (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by David M. Ihnat and David MacKenzie.
lsof命令
lsof 命令用于显示 Linux 系统当前已打开的所有文件列表。查看进程或系统打开的文件会给调试带来极大的帮助。下面简单地介绍 lsof 常使用的功能。
lsof (list open files)命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP),还可以用于找回/恢复被删除的文件。lsof 命令需要访问核心内存和各种文件,所以需要具备 root 超级管理员权限的用户才能执行此命令。
语法格式
lsof [Options]
选项说明
-a #显示打开文件的进程
-c<进程名> #显示指定进程所打开的文件
-g #显示GID号进程详情
-d<文件号> #显示占用该文件号的进程
+d<目录> #显示目录下被打开的文件
+D<目录> #递归列出目录下被打开的文件
-n<目录> #显示使用NFS的文件
-l #在输出显示用户ID而不是用户名
-i<条件> #输出符合条件的进程
-p<进程号> #输出指定进程号所打开的文件
-u #显示指定UID号进程详情
-h #显示帮助信息
-t #仅获取进程ID
-U #获取UNIX套接口地址
-F #格式化输出结果
-v #显示版本信息
应用举例
1)显示所有连接
[root@CentOS7-1 ~]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 629 chrony 5u IPv4 16952 0t0 UDP localhost:323
chronyd 629 chrony 6u IPv6 16953 0t0 UDP localhost:323
sshd 866 root 3u IPv4 19638 0t0 TCP *:ssh (LISTEN)
sshd 866 root 4u IPv6 19647 0t0 TCP *:ssh (LISTEN)
master 976 root 13u IPv4 20415 0t0 TCP localhost:smtp (LISTEN)
master 976 root 14u IPv6 20416 0t0 TCP localhost:smtp (LISTEN)
netdata 18325 netdata 4u IPv4 114083 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 5u IPv6 114084 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 36u IPv6 114297 0t0 UDP localhost:8125
netdata 18325 netdata 37u IPv4 114298 0t0 UDP localhost:8125
netdata 18325 netdata 38u IPv6 114302 0t0 TCP localhost:8125 (LISTEN)
netdata 18325 netdata 39u IPv4 114303 0t0 TCP localhost:8125 (LISTEN)
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
2)只显示IPV6的连接信息
[root@CentOS7-1 ~]# lsof -i 6
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 629 chrony 6u IPv6 16953 0t0 UDP localhost:323
sshd 866 root 4u IPv6 19647 0t0 TCP *:ssh (LISTEN)
master 976 root 14u IPv6 20416 0t0 TCP localhost:smtp (LISTEN)
netdata 18325 netdata 5u IPv6 114084 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 36u IPv6 114297 0t0 UDP localhost:8125
netdata 18325 netdata 38u IPv6 114302 0t0 TCP localhost:8125 (LISTEN)
3)只显示IPV4的连接信息
[root@CentOS7-1 ~]# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 629 chrony 5u IPv4 16952 0t0 UDP localhost:323
sshd 866 root 3u IPv4 19638 0t0 TCP *:ssh (LISTEN)
master 976 root 13u IPv4 20415 0t0 TCP localhost:smtp (LISTEN)
netdata 18325 netdata 4u IPv4 114083 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 37u IPv4 114298 0t0 UDP localhost:8125
netdata 18325 netdata 39u IPv4 114303 0t0 TCP localhost:8125 (LISTEN)
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
4)仅显示TCP连接
[root@CentOS7-1 ~]# lsof -i tcp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 866 root 3u IPv4 19638 0t0 TCP *:ssh (LISTEN)
sshd 866 root 4u IPv6 19647 0t0 TCP *:ssh (LISTEN)
master 976 root 13u IPv4 20415 0t0 TCP localhost:smtp (LISTEN)
master 976 root 14u IPv6 20416 0t0 TCP localhost:smtp (LISTEN)
netdata 18325 netdata 4u IPv4 114083 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 5u IPv6 114084 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 38u IPv6 114302 0t0 TCP localhost:8125 (LISTEN)
netdata 18325 netdata 39u IPv4 114303 0t0 TCP localhost:8125 (LISTEN)
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
5)仅显示UDP连接
[root@CentOS7-1 ~]# lsof -i udp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
chronyd 629 chrony 5u IPv4 16952 0t0 UDP localhost:323
chronyd 629 chrony 6u IPv6 16953 0t0 UDP localhost:323
netdata 18325 netdata 36u IPv6 114297 0t0 UDP localhost:8125
netdata 18325 netdata 37u IPv4 114298 0t0 UDP localhost:8125
6)显示指定端口的连接信息
[root@CentOS7-1 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 866 root 3u IPv4 19638 0t0 TCP *:ssh (LISTEN)
sshd 866 root 4u IPv6 19647 0t0 TCP *:ssh (LISTEN)
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
[root@CentOS7-1 ~]# lsof -i :80
[root@CentOS7-1 ~]# lsof -i :62148
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
7)列由某个用户打开的进程或文件
[root@CentOS7-1 ~]# lsof -u root | head -5
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 262 64 /
systemd 1 root rtd DIR 253,0 262 64 /
systemd 1 root txt REG 253,0 1628608 16959493 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20064 1679454 /usr/lib64/libuuid.so.1.3.0
#列出除了root以外用户打开的文件
[root@CentOS7-1 ~]# lsof -u ^root | head
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
polkitd 618 polkitd cwd DIR 253,0 262 64 /
polkitd 618 polkitd rtd DIR 253,0 262 64 /
polkitd 618 polkitd txt REG 253,0 120432 17108633 /usr/lib/polkit-1/polkitd
polkitd 618 polkitd mem REG 253,0 61560 18290 /usr/lib64/libnss_files-2.17.so
polkitd 618 polkitd mem REG 253,0 68192 40949 /usr/lib64/libbz2.so.1.0.6
polkitd 618 polkitd mem REG 253,0 99952 324334 /usr/lib64/libelf-0.176.so
polkitd 618 polkitd mem REG 253,0 19896 46144 /usr/lib64/libattr.so.1.1.0
polkitd 618 polkitd mem REG 253,0 20064 1679454 /usr/lib64/libuuid.so.1.3.0
polkitd 618 polkitd mem REG 253,0 265576 20649 /usr/lib64/libblkid.so.1.1.0
8)显示指定的连接信息
#显示指定到指定主机的连接
[root@CentOS7-1 ~]# lsof -i@192.168.1.100
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
#显示指定到指定主机端口的连接
[root@CentOS7-1 ~]# lsof -i@192.168.1.100:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
9)显示某些状态的端口信息
#找出处于监听状态的端口
[root@CentOS7-1 ~]# lsof -i -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 866 root 3u IPv4 19638 0t0 TCP *:ssh (LISTEN)
sshd 866 root 4u IPv6 19647 0t0 TCP *:ssh (LISTEN)
master 976 root 13u IPv4 20415 0t0 TCP localhost:smtp (LISTEN)
master 976 root 14u IPv6 20416 0t0 TCP localhost:smtp (LISTEN)
netdata 18325 netdata 4u IPv4 114083 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 5u IPv6 114084 0t0 TCP *:dnp-sec (LISTEN)
netdata 18325 netdata 38u IPv6 114302 0t0 TCP localhost:8125 (LISTEN)
netdata 18325 netdata 39u IPv4 114303 0t0 TCP localhost:8125 (LISTEN)
##找出处于已连接状态的端口
[root@CentOS7-1 ~]# lsof -i -sTCP:ESTABLISHED
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 18968 root 3u IPv4 118704 0t0 TCP CentOS7-1:ssh->192.168.1.93:62148 (ESTABLISHED)
10)终止用户行为
[root@CentOS7-1 ~]# lsof -u mingongge
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 20369 mingongge cwd DIR 253,0 82 462615 /home/mingongge
bash 20369 mingongge rtd DIR 253,0 262 64 /
bash 20369 mingongge txt REG 253,0 964536 50333070 /usr/bin/bash
bash 20369 mingongge mem REG 253,0 106172832 50333042 /usr/lib/locale/locale-archive
bash 20369 mingongge mem REG 253,0 61560 18290 /usr/lib64/libnss_files-2.17.so
bash 20369 mingongge mem REG 253,0 2156240 18266 /usr/lib64/libc-2.17.so
bash 20369 mingongge mem REG 253,0 19248 18273 /usr/lib64/libdl-2.17.so
bash 20369 mingongge mem REG 253,0 174576 20696 /usr/lib64/libtinfo.so.5.9
bash 20369 mingongge mem REG 253,0 163312 1679434 /usr/lib64/ld-2.17.so
bash 20369 mingongge mem REG 253,0 26970 16806930 /usr/lib64/gconv/gconv-modules.cache
bash 20369 mingongge 0u CHR 136,1 0t0 4 /dev/pts/1
bash 20369 mingongge 1u CHR 136,1 0t0 4 /dev/pts/1
bash 20369 mingongge 2u CHR 136,1 0t0 4 /dev/pts/1
bash 20369 mingongge 255u CHR 136,1 0t0 4 /dev/pts/1
vim 20391 mingongge cwd DIR 253,0 82 462615 /home/mingongge
vim 20391 mingongge rtd DIR 253,0 262 64 /
vim 20391 mingongge txt REG 253,0 2337192 51061591 /usr/bin/vim
vim 20391 mingongge mem REG 253,0 61560 18290 /usr/lib64/libnss_files-2.17.so
vim 20391 mingongge mem REG 253,0 106172832 50333042 /usr/lib/locale/locale-archive
vim 20391 mingongge mem REG 253,0 11392 8814 /usr/lib64/libfreebl3.so
vim 20391 mingongge mem REG 253,0 14424 1679441 /usr/lib64/libutil-2.17.so
vim 20391 mingongge mem REG 253,0 40600 18271 /usr/lib64/libcrypt-2.17.so
vim 20391 mingongge mem REG 253,0 115816 18278 /usr/lib64/libnsl-2.17.so
vim 20391 mingongge mem REG 253,0 109976 18302 /usr/lib64/libresolv-2.17.so
vim 20391 mingongge mem REG 253,0 19896 46144 /usr/lib64/libattr.so.1.1.0
vim 20391 mingongge mem REG 253,0 402384 20698 /usr/lib64/libpcre.so.1.2.0
vim 20391 mingongge mem REG 253,0 2156240 18266 /usr/lib64/libc-2.17.so
vim 20391 mingongge mem REG 253,0 142144 18300 /usr/lib64/libpthread-2.17.so
vim 20391 mingongge mem REG 253,0 1647328 282389 /usr/lib64/perl5/CORE/libperl.so
vim 20391 mingongge mem REG 253,0 19248 18273 /usr/lib64/libdl-2.17.so
vim 20391 mingongge mem REG 253,0 27752 669 /usr/lib64/libgpm.so.2.1.0
vim 20391 mingongge mem REG 253,0 37064 18281 /usr/lib64/libacl.so.1.1.0
vim 20391 mingongge mem REG 253,0 174576 20696 /usr/lib64/libtinfo.so.5.9
vim 20391 mingongge mem REG 253,0 155744 1679449 /usr/lib64/libselinux.so.1
vim 20391 mingongge mem REG 253,0 1136944 18275 /usr/lib64/libm-2.17.so
vim 20391 mingongge mem REG 253,0 163312 1679434 /usr/lib64/ld-2.17.so
vim 20391 mingongge 0u CHR 136,1 0t0 4 /dev/pts/1
vim 20391 mingongge 1u CHR 136,1 0t0 4 /dev/pts/1
vim 20391 mingongge 2u CHR 136,1 0t0 4 /dev/pts/1
vim 20391 mingongge 3u REG 253,0 12288 462619 /home/mingongge/.test.sh.swp
然后我们使用下面的命令来终止这个用户的这些操作行为
[root@CentOS7-1 ~]# kill -9 `lsof -t -u mingongge`
[root@CentOS7-1 ~]# lsof -u mingongge
#你会发现这个用户的所有操作都被终止了
tee命令
tee 命令用于从标准输入读取,然后写入文件或标准输出和文件。一般用于需要同时查看数据内容并输出到文件时使用。
语法格式
tee [OPTION]... [FILE]...
选项说明
-a #追加到文件中而不是覆盖
-i #忽略中断信号(Ctrl+c中断操作无效)
-p #诊断写入非管道的错误
--output-error[=MODE] #设置写错误时的行为
--help #显示帮助信息并退出
--version #显示版本信息并退出
MODE参数
'warn' #当写入到任何输出报错时诊断
'warn-nopipe' #当写入到任何输出(而不是管道)报错时诊断
'exit' #当写入到任何输出报错时退出
'exit-nopipe' #当写入到任何输出(而不是管道)报错时退出
应用举例
列出当前目录中所有文件扩展名为.tar.gz的文件,每行一个文件, 然后将内容传输给 wc 对行进行计数并输出数字。通过管道传输到 tee 后再将输出写入终端,并将相同的信息写入文件 tee.txt。
1)如果 tee.txt 已经存在,它将被覆盖,如果不存在,将被创建。
[root@centos7 ~]# ls -l *.tar.gz
-rw-r--r-- 1 root root 13034487 Aug 30 2020 goInception-linux-amd64-v1.2.3.tar.gz
-rw-r--r-- 1 root root 9363314 Aug 5 2020 httpd-2.4.46.tar.gz
-rw-r--r-- 1 root root 31674465 Mar 10 09:42 mysql_backup.tar.gz
-rw-r--r-- 1 root root 398872 Mar 28 00:11 netcat-0.7.1.tar.gz
[root@centos7 ~]# ls -l *.tar.gz | wc -l
4
[root@centos7 ~]# ls -l *.tar.gz | wc -l | tee tee.txt
4
[root@centos7 ~]# cat tee.txt
4
2)tee.txt 已经存在,它将被覆盖
[root@centos7 ~]# cat tee.txt
4
[root@centos7 ~]# ls -1 *.txt | wc -l
3
[root@centos7 ~]# ls -l *.txt | wc -l |tee tee.txt
3
[root@centos7 ~]# cat tee.txt
3
3)追加内容
[root@centos7 ~]# cat tee.txt
3
[root@centos7 ~]# ls -1 *.tar.gz | wc -l
4
[root@centos7 ~]# ls -1 *.tar.gz | wc -l | tee -a tee.txt
4
[root@centos7 ~]# cat tee.txt
3
4
网友评论