Linux基础二
一、通配符
//文件名通配 globbing
* //匹配任意长度的任意字符
? //匹配任意单个字符
[] //匹配指定范围内的任意单个字符
\ //转义字符
[abc],[a-m],[0-9]
[[:space:]] //表示空白字符
[[:punct:]] //表示标点符号
[[:lower:]] //表示小写字母
[[:upper:]] //表示大写字母
[[:alpha:]] //表示大小写字母
[[:digit:]] //表示数字
[[:alnum:]] //表示数字和大小写字母
使用man 7 glob命令可以获得以上字符集合的帮助信息!!!
[^] //匹配指定范围之外的任意单个字符
二、文件压缩、解压缩
1. 注释
.gz .bz2 .xz .zip .tar.gz
Linux系统中没有扩展名的概念,只有文件名后缀(说明,注释一个文件的性质,但与文件类型无关)
2. zip/unzip
zip/unzip
zip (选项) (参数)
-r:递归处理,将指定目录下的所有文件和子目录一并处理
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
-q:不显示指令执行过程
-v:显示指令执行过程
-g: 向压缩包中追加指定文件
unzip (选项) (参数)
-q:执行时不显示任何信息
-d:指定文件解压缩后所要存放的目录
-x:指定不要处理.zip压缩文件中的哪些文件
-n:解压缩时不要覆盖原有的文件
-l: 不解压显示压缩包内的文件列表
特点:
1、能压缩文件;2、也能压缩目录
3. gzip/gunzip
gzip/gunzip
gzip (选项) (参数)
-d: 解压缩,相当于gunzip
-r: 递归压缩目录中每个文件
-v:显示指令执行过程
gunzip (选项) (参数)
-r:递归处理,将指定目录下的所有文件及子目录一并处理
-v:显示指令执行过程
-c:把解压后的文件输出到标准输出设备,而不改变原文件
zcat:不解压缩的前提下查看文本文件内容
特点:
1、能对文件和目录操作
2、对目录操作时,仅对目录中的每个文件实现压缩,而并非压缩目录本身
4. bzip2/bunzip2
bzip2/bunzip2
bzip2 (选项) (参数)
-d:执行解压缩,相当于bunzip2
-k: 保留原文件
-v:压缩或解压缩文件时,显示详细的信息
bunzip2 (选项) (参数)
-k:在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数
-v:解压缩文件时,显示详细的信息
bzcat:不解压缩的前提下查看文本文件内容
特点:
1、保存原文件不被压缩后删除
2、同等压缩比例时,压缩率更高,文件更小。
3、只能针对文件操作!!!
5. xz/unxz
xz/unxz
xz (选项) (参数)
-k: keep, 保留原文件
-d:解压缩,相当于unxz
unxz (选项) (参数)
-k: keep, 保留原文件
-d:解压缩,相当于unxz
xzcat: 不解压缩的前提下查看文本文件内容
特点:
1、只能针对文件操作!!!
三、归档、展开归档
1. tar
tar
tar (选项) (参数)
-c: 创建归档(创建压缩文件)
-x: 展开归档(解压)
-v: 显示过程
-f: 指定归档文件
-tvf: 不显式展开的前提下查看归档
-r: 往归档文件中追加
-C: 解压到指定目录,其目录必须事先存在
-z: 调用gzip压缩归档或解压展开
-j: 调用bzip2压缩归档或解压展开
-J: 调用xz压缩归档或解压展开
-zcf :创建一个gz格式的文件压缩包
-jcf :创建一个bz2格式的文件压缩包
-Jcf :创建一个xz格式的文件压缩包
-zxf :解压一个gz格式的文件压缩包
-jxf :解压一个bz2格式的文件压缩包
-Jxf :解压一个xz格式的文件压缩包
2. 创建归档示例
创建归档
tar -jcf /PATH/TO/SOMEFILE.tar.bz2 FILE...
展开归档
tar -zxf /PATH/TO/SOMEFILE.tar.gz
展开至指定目录
tar -Jxf /PATH/TO/SOMEFILE.tar.xz -C /PATH/TO/DIR
查看归档文件中的文件列表
tar -tvf /PATH/TO/SOMEFILE.tar
四、文本去重与排序
1. sort
sort常用选项
sort (选项) (参数) (文件名)
-n:依照数值的大小排序
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符
-c:检查文件是否已经按照顺序排序
2. uniq
cut常用选项
cut (选项) (参数) (文件名)
-d:指定字段的分隔符,默认的字段分隔符为“TAB”
-f:显示指定字段的内容(要显示的列)
-b:仅显示行中指定直接范围的内容
3. column ——表格化输出,方便查看
column常用选项
-t :易以表格的形式输出
-s :将什么作为分隔的标准
五、文本处理三剑客
1. awk
-
awk介绍
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具 -
awk命令格式和选项
F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
v var=value 赋值一个用户定义变量,将外部变量传递给awk
f scripfile 从脚本文件中读取awk命令
- awk脚本基本结构
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
示例
awk -F分隔符 '{print $需要打印的列}' 文件名(-F可以不指定分隔符,默认的分隔符是空格,不管有多少个空格,只算一个空格)
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
- awk的工作原理
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。
解释
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
- awk内置变量(预定义变量)
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
[N] ARGC 命令行参数的数目。
[G] ARGIND 命令行中当前文件的位置(从0开始算)。
[N] ARGV 包含命令行参数的数组。
[G] CONVFMT 数字转换格式(默认值为%.6g)。
[P] ENVIRON 环境变量关联数组。
[N] ERRNO 最后一个系统错误的描述。
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
[A] FILENAME 当前输入文件的名。
[P] FNR 同NR,但相对于当前文件。
[A] FS 字段分隔符(默认是任何空格)。
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。
[N] RSTART 由match函数所匹配的字符串的第一个位置。
[N] RLENGTH 由match函数所匹配的字符串的长度。
[N] SUBSEP 数组下标分隔符(默认值是34)。
示例:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 966M 0 966M 0% /dev
tmpfs 983M 0 983M 0% /dev/shm
tmpfs 983M 8.7M 974M 1% /run
tmpfs 983M 0 983M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 50G 2.0G 49G 4% /
/dev/mapper/rhel-home 67G 511M 67G 1% /home
/dev/nvme0n1p1 1014M 156M 859M 16% /boot
tmpfs 197M 0 197M 0% /run/user/0
/dev/sr0 7.4G 7.4G 0 100% /mnt
[root@localhost ~]# df -h | awk 'NR==2{print $2}'
966M
//NR==number;NR参数代表的是第几行
[root@localhost ~]# df -h | awk 'NR==4{print NF}'
6
[root@localhost ~]# df -h | awk 'NR==5{print $NF}'
/sys/fs/cgroup
//NF代表是最后一列,是一个数字
[root@localhost ~]# df -h | awk 'NR==4{print $(NF-3)}'
8.7M
- awk运算与判断
运算符 描述
+ - 加,减
* / & 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ -- 增加或减少,作为前缀或后缀
例:
awk 'BEGIN{a="b";print a++,++a;}'
0 2
2. sed
-
sed介绍
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用 -
命令格式
sed [options] 'command' file
-
选项
sed —— 处理行的内容
命令
s 替换指定字符 (替换)
c\ 把选定的行改为新的文本 (修改)
a\ 在当前行下面插入文本 (追加)
d 删除,删除选择的行
g 表示行内全面替换
-r 使用拓展正则表达式
拓展
sed -i 's/字符串/替换的字符串/g' 文件名
sed '数字1s(c/a)/字符串/替换的字符串/g' 文件名
sed '数字s(c/a)/子符串/替换的字符串/数字' 文件名
(前一个数字代表第几行,后面一个数字代表第几个字符串)
- 示例
[root@localhost ~]# cat test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed '1s/root/toor/g' test
toor:x:0:0:toor:/toor:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed '1s/root/toor/1' test
toor:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed '1s/root/toor/3' test
root:x:0:0:root:/toor:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed -i 's/root/toor/g' test
[root@localhost ~]# cat test
toor:x:0:0:toor:/toor:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed '1awangqiang' test
toor:x:0:0:toor:/toor:/bin/bash
wangqiang
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# sed '1a\ wangqiang' test
toor:x:0:0:toor:/toor:/bin/bash
wangqiang
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
3. grep
-
grep介绍
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来 -
grep命令格式
grep command file_name
或者
grep file_name3、grep常用选项
- grep常用选项
-v //反转查找
-E //将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-l //列出文件内容符合指定的范本样式的文件名称
-L //列出文件内容不符合指定的范本样式的文件名称
f<范本文件> //指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
- 示例
[root@localhost ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1083/sshd
tcp6 0 0 :::22 :::* LISTEN 1083/sshd
udp 0 0 0.0.0.0:68 0.0.0.0:* 1588/dhclient
[root@localhost ~]# netstat -tunlp | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1083/sshd
tcp6 0 0 :::22 :::* LISTEN 1083/sshd