一、查看文本内容

①cat

cat [OPTION]... [FILE]...
-E:显示行结束符$
-A:显示所有控制符(^I tab键、^Mwindows中的回车键)
-n:对显示出的每一行进行编号
-b:非空行编号
-s:压缩连续的空行成一行

②nl

显示行号,相当于cat -b

③tac

逆向显示文本内容

④rev

将同一行的内容逆向显示

二、查看非文本文件内容

①hexdump

Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看(不只限于二进制文件)。
指令所在路径:/usr/bin/hexdump
-n length:格式化输出文件的前length个字节 -C:输出规范的十六进制和ASCII码
-b:单字节八进制显示 -c:单字节字符显示
-d:双字节十进制显示 -o:双字节八进制显示
-x:双字节十六进制显示 -s:从偏移量开始输出

②od

od命令用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
-a:此参数的效果和同时指定“-ta”参数相同; -A:<字码基数>:选择以何种基数计算字码;
-b:此参数的效果和同时指定“-toC”参数相同; -c:此参数的效果和同时指定“-tC”参数相同
-d:此参数的效果和同时指定“-tu2”参数相同; -f:此参数的效果和同时指定“-tfF”参数相同;
-h:此参数的效果和同时指定“-tx2”参数相同; -i:此参数的效果和同时指定“-td2”参数相同;
-j<字符数目>或—skip-bytes=<字符数目>:略过设置的字符数目; -l:此参数的效果和同时指定“-td4”参数相同;
-N<字符数目>或—read-bytes=<字符数目>:到设置的字符树目为止;-o:此参数的效果和同时指定“-to2”参数相同;
-t<输出格式>或—format=<输出格式>:设置输出格式; -v 或—output-duplicates:输出时不省略重复的数据;
-w<每列字符数>或—width=<每列字符数>:设置每列的最大字符数; -x:此参数的效果和同时指定“-h”参数相同;
-s<字符串字符数>或—strings=<字符串字符数>:只显示符合指定的字符数目的字符串;

③xxd

xxd命令可以为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式。这也有助于对任意文件的编码和解码
-b 用二进制显示一个bit,而不是十六进制
-r 以十六进制作为输入,二进制作为输出
-s [+][-]seek 从字节开始。+ -分别表示相对于文件的开头和结尾
-seek offset 从offset数值开始显示

三、分页查看文件内容

①more

可以实现分页查看文件,可以配合管道实现输出信息的分页:more [OPTIONS...] FILE...
-d: 显示翻页及退出提示(回车—按行查看;空格—按页查看)

②less

也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器
/文本 向下搜索 文本
/?文本 向上搜索
n/N 跳到下一个 或 上一个匹配

四、显示文本前后行内容和按列抽取文本

①head

以显示文件或标准输入的前面行:head [OPTION]... [FILE]...
-c # 指定获取前#字节
-n # 指定获取前#行(同-#)

  1. [root@CentOS ~]$ echo iwantmoney |head -c4
  2. iwan
  3. [root@CentOS ~]$ head -n3 /etc/passwd
  4. root:x:0:0:root:/root:/bin/bash
  5. bin:x:1:1:bin:/bin:/sbin/nologin
  6. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  7. [root@CentOS ~]$ head -3 /etc/passwd
  8. root:x:0:0:root:/root:/bin/bash
  9. bin:x:1:1:bin:/bin:/sbin/nologin
  10. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  11. #生成10位的随机口令
  12. [root@CentOS ~]$ cat /dev/urandom |tr -dc '[:alnum:]' |head -c10
  13. xgfjW2QOxd
  14. [root@CentOS ~]$ cat /dev/urandom |tr -dc '[:alnum:]'|head -c10 |tee passwd.txt |passwd --stdin zhuyuany >/dev/null

②tail

tail 查看文件或标准输入的倒数行:tail [OPTION]... [FILE]...
-c # 指定获取后#字节 -n # 指定获取后#行(同-#)
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 —follow=descriptor,当文件删除再新建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于—follow=name —retry,当文件删除再新建同名文件,将可以继续跟踪文件

  1. #只查看最新发生的日志
  2. [root@CentOS ~]$ tail -fn0 /var/log/messages
  3. [root@CentOS ~]$ tail -0f /var/log/messages
  4. #获取ip地址
  5. [root@CentOS ~]$ ip a |head -9 |tail -1
  6. inet 192.168.50.146/24 brd 192.168.50.255 scope global noprefixroute dynamic ens33
  7. [root@CentOS ~]$ ifconfig |head -2 |tail -1 |tr -s ' ' |cut -d ' ' -f3
  8. 192.168.50.146

③cut

cut 命令可以提取文本文件或STDIN数据的指定列:cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab -c 按字符切割
-f FILEDS: #: 第#个字段,例如:3
#,#[,#]:离散的多个字段,例如:1,3,6
#-#:连续的多个字段, 例如:1-6
混合使用:1-3,7
—output-delimiter=STRING指定输出分隔符

#获取分区利用率
[root@CentOS ~]$ df |tr -s ' ' |cut -d' ' -f5 |tr -dc '[0-9\n]'
[root@CentOS ~]$ df |tr -s ' ' '%' |cut -d'%' -f5 |tr -d '[:alpha:]'
[root@CentOS ~]$ df |tr -s ' ' '%' |cut -c44-46 |tr -d '[:alpha:]'

[root@CentOS ~]$ cut -d: -f1,3,7 --output-delimiter=*** /etc/passwd
root***0***/bin/bash
bin***1***/sbin/nologin

五、分析文本工具

①wc

wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数。可以对文件或STDIN中的数据统计
-l 只计数行数 -c 只计数字节总数
-w 只计数单词总数 -m 只计数字符总数
-L 显示文件中最长行的长度

[root@CentOS ~]$ df |tail -n$(echo `df |wc -l`-1 |bc)
devtmpfs                   480812       0    480812   0% /dev
tmpfs                      497888       0    497888   0% /dev/shm
tmpfs                      497888   14480    483408   3% /run
tmpfs                      497888       0    497888   0% /sys/fs/cgroup
/dev/mapper/centos-root 104806400 5243736  99562664   6% /
/dev/sda1                 1038336  174224    864112  17% /boot
/dev/mapper/centos-data  52403200  215108  52188092   1% /data
tmpfs                       99580       0     99580   0% /run/user/0
tmpfs                       99580      16     99564   1% /run/user/42

②sort

sort [options] file(s) 把整理过的文本显示在STDOUT,不改变原始文件
-r 执行反方向(由上至下)整理 -u 选项(独特,unique),合并重复项,即去重
-R 随机排序 -t c 选项使用c做为字段界定符
-n 执行按数字大小整理 -k # 选项按照使用c字符分隔的 # 列来整理能够使用多次
-f 选项忽略(fold)字符串中的字符大小写

#统计日志访问量
[root@centos8 data]#cut -d" " -f1 /var/log/nginx/access_log |sort -u|wc -l

#查看分区利用率最高值
[root@centos8 ~]#df| tr -s ' ' '%'|cut -d% -f5|sort -nr|head -1

#面试题:有两个文件,a.txt与b.txt ,合并两个文件,并输出时确保每个数字也唯一


③uniq

uniq [OPTION]... [FILE]... 从输入中删除前后相接的重复的行
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行

sort userlist.txt | uniq -c

#统计日志访问量最多的请求
[root@centos8 data]#cut -d" " -f1 access_log |sort |uniq -c|sort -nr |head -3
   4870 172.20.116.228
   3429 172.20.116.208
   2834 172.20.0.222 
[root@centos8 data]#lastb -f btmp-34 | tr -s ' ' |cut -d ' ' -f3|sort |uniq -c |sort -nr | head -3
  86294 58.218.92.37
  43148 58.218.92.26
  18036 112.85.42.201
#并发连接最多的远程主机IP
[root@centos8 ~]#ss -nt|tail -n+2 |tr -s ' ' : |cut -d: -f6|sort|uniq -c|sort -nr |head -n2
      7 10.0.0.1
      2 10.0.0.7
#取两个文件的相同和不同的行
[root@centos8 data]#cat test1.txt test2.txt | sort |uniq -d    取文件的共同行
1
b
c
[root@centos8 data]#cat test1.txt test2.txt | sort |uniq -u    取文件的不同行
2
a
e
f

④diff、patch

  • diff 命令比较两个文件之间的区别,diff 命令的输出可被保存在一种叫做“补丁”的文件中

-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

  • patch 复制在其它文件中进行的改变(要谨慎使用)

-b 选项来自动备份改变了的文件

[root@centos8 ~]#diff -u f1.txt f2.txt > f.patch
[root@centos8 ~]#rm -f f2.txt 
[root@centos8 ~]#patch -b f1.txt f.patch

diff -u foo.conf foo2.conf > foo.patch 
patch -b foo.conf foo.patch

六、合并多个文件paste
paste [OPTION]... [FILE]... paste 合并多个文件同行号的列到一行
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示

[root@centos8 ~]#paste -d":" alpha.log seq.log 
a:1
b:2

[root@centos8 ~]#paste -s seq.log
1 2 3 4 5
[root@centos8 ~]#paste -s alpha.log 
a b c d e f g h
[root@centos8 ~]#paste -s alpha.log seq.log
a b c d e f g h
1 2 3 4 5