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   
posted @ 2020-10-10 16:20  阮小言  阅读(183)  评论(0编辑  收藏  举报