第十课预习笔记

8.10 shell特殊符_cut命令

* 匹配任意字符;

?匹配任意单个字符;

# 注释字符;

\ 脱意字符;

| 管道字符。

cut命令:用来显示行中的指定部分,删除文件中指定字段。

选项:

  • -b:仅显示行中指定直接范围的内容;
  • -c:仅显示行中指定范围的字符;
  • -d:指定字段的分隔符,默认的字段分隔符为“TAB”;
  • -f:显示指定字段的内容;
  • -n:与“-b”选项连用,不分割多字节字符;
  • --complement:补足被选择的字节、字符或字段;
  • --out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
  • --help:显示指令的帮助信息;
  • --version:显示指令的版本信息。

用cut命令对 /etc/passwd 的前两行进行截取操作(操作不会影响源文件)。

[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -d ":" -f 1    #用“:”进行分割,截取第一段;
root
bin
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -d ":" -f 1,2    #用“:”进行分割,截取第一段和第二段;
root:x
bin:x
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -d ":" -f 1-3     #用“:”进行分割,截取一到三段;
root:x:0
bin:x:1
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -c 1-3    #截取从第一个到第三个字符;
roo
bin
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -c -5    #截取从第一个到第五个字符;
root:
bin:x
[root@liang-00 ~]# cat /etc/passwd |head -n2 |cut -c 5-    #截取从第五个到最后一个符;
:x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
[root@liang-00 ~]#

cut命令默认的分隔符为“Tab”

8.11 sort_wc_uniq命令

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

参数:

  • -b:忽略每行前面开始出的空格字符;
  • -c:检查文件是否已经按照顺序排序;
  • -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
  • -f:排序时,将小写字母视为大写字母;
  • -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
  • -m:将几个排序号的文件进行合并;
  • -M:将前面3个字母依照月份的缩写进行排序;
  • -n:依照数值的大小排序;
  • -o<输出文件>:将排序后的结果存入制定的文件;
  • -r:以相反的顺序来排序;
  • -t<分隔字符>:指定排序时所用的栏位分隔字符;
  • +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

用 sort 对 /etc/passwd 进行排序。

[root@liang-00 ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
liang:x:1000:1000::/home/liang:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

可以看到:sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列(其实并不一定,还跟一些环境变量有关),并将结果输出到标准输出。关于ASCII码可以看一下百度百科里对ASCII码的介绍https://baike.baidu.com/item/ASCII

如果文本里有数字、特殊符号的呢?

[root@liang-00 ~]# head /etc/passwd >1.txt    #取/etc/passwd的前十行
[root@liang-00 ~]# vim 1.txt    #添加一些数字和特殊符号 
[root@liang-00 ~]# sort 1.txt    #进行sort排序 ------>  结果为:特殊符号排在最前边,数字紧跟其后,最后字母。  
<
>
)
[
]
{
}
&
%
1111111
2122222
22222222
4444444
adm:x:3:4:adm:/var/adm:/sbin/nologin
*asda
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
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
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
[root@liang-00 ~]#

sort -n 依照数值的大小排序。

第十课预习笔记_第1张图片

sort -r  以相反的顺序来排序。

第十课预习笔记_第2张图片

wc命令 用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

参数:

  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 只显示行数。
  • -w或--words 只显示字数。

直接使用 wc 命令不加任何参数。

[root@liang-00 ~]# wc anaconda-ks.cfg 
 129  258 4930 anaconda-ks.cfg    #129为行数,258为字数,4930为字符数

-l 选项统计行数。

[root@liang-00 ~]# wc -l anaconda-ks.cfg 
129 anaconda-ks.cfg
[root@liang-00 ~]# 

-m 选项统计字符数

[root@liang-00 ~]# wc -m 2.txt 
16 2.txt
[root@liang-00 ~]# cat -A 2.txt    #统计为16个字符数,包括三个$换行符,一个空格。
1111$
2222$
33 33$
[root@liang-00 ~]# 

-w 统计单词数。

[root@liang-00 ~]# wc -w 2.txt 
4 2.txt
[root@liang-00 ~]# cat 2.txt 
1111
2222
33 33
[root@liang-00 ~]# 

uniq命令 用于检查及删除文本文件中重复出现的行列。一般与sort一起使用。

参数:

  • -c或——count:在每列旁边显示该行重复出现的次数;
  • -d或--repeated:仅显示重复出现的行列;
  • -f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
  • -s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
  • -u或——unique:仅显示出一次的行列;
  • -w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。

uniq通常与sort一起使用,先排序在去重。

[root@liang-00 ~]# uniq 2.txt    #在没有排序的情况下不没有去重。
1
2222
1
33 33
abc
ccc
bbb
ffffff
[root@liang-00 ~]# sort 2.txt |uniq    #先排序,在去重。
1
2222
33 33
abc
bbb
ccc
ffffff

-c 在每列旁边显示该行重复出现的次数。

[root@liang-00 ~]# sort 2.txt |uniq -c
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff

8.12 tee_tr_split命令

tee命令 用于读取标准输入的数据,并将其内容输出成文件,并且打印到屏幕上。

参数:

  • -a:向文件中重定向时使用追加模式;
  • -i:忽略中断(interrupt)信号。

将文件排序去重后,输出成文件。

[root@liang-00 ~]# sort 2.txt |uniq -c |tee a.txt    #将2.txt排序去重后,输出到a.txt且打印出来。
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
[root@liang-00 ~]# 

“>”后直接跟文件,表示清空该文件内容。

[root@liang-00 ~]# echo "aaaaaaaaaaaaa" > 1.txt    #在1.txt内写入内容
[root@liang-00 ~]# cat 1.txt 
aaaaaaaaaaaaa
[root@liang-00 ~]# > 1.txt    #清空1.txt里面的内容 
[root@liang-00 ~]# cat 1.txt 
[root@liang-00 ~]# 

-a选项,追加到输出文件内。

[root@liang-00 ~]# sort 2.txt |uniq -c |tee -a a.txt
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
[root@liang-00 ~]# cat a.txt 
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
      2 1
      1 2222
      1 33 33
      1 abc
      1 bbb
      1 ccc
      1 ffffff
[root@liang-00 ~]# 

tr命令 可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符。

参数:

  • -c或--complerment:取代所有不属于第一字符集的字符;
  • -d或--delete:删除所有属于第一字符集的字符;
  • -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
  • -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。

将小写字符串改为大写。

[root@liang-00 ~]# echo "lianglinux" |tr '[l]' '[L]'    #将字符串中的“l”改为“L”。
LiangLinux
[root@liang-00 ~]# echo "lianglinux" |tr '[a-z]' '[A-Z]'    #将所有小写改为大写。
LIANGLINUX
[root@liang-00 ~]# echo "lianglinux" |tr '[a-zA-Z]' '1'    #将所有字母改为数字“1”。
1111111111
[root@liang-00 ~]# 

split命令 用于将一个文件分割成数个。该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。

参数:

  • -b:值为每一输出档案的大小,单位为 byte。
  • -C:每一输出档中,单行的最大 byte 数。
  • -d:使用数字作为后缀。
  • -l:值为每一输出档的列数大小。

对一个大小为248K的文件b.txt进行切割

[root@liang-00 test]# du -sh b.txt     
248K    b.txt
[root@liang-00 test]# split -b 1000 b.txt    #切割成大小为1000b(默认为b)的文件,文件名以x开头。
[root@liang-00 test]# ls
b.txt  xak  xav  xbg  xbr  xcc  xcn  xcy  xdj  xdu  xef  xeq  xfb  xfm  xfx  xgi  xgt  xhe  xhp  xia  xil  xiw  xjh
xaa    xal  xaw  xbh  xbs  xcd  xco  xcz  xdk  xdv  xeg  xer  xfc  xfn  xfy  xgj  xgu  xhf  xhq  xib  xim  xix  xji
xab    xam  xax  xbi  xbt  xce  xcp  xda  xdl  xdw  xeh  xes  xfd  xfo  xfz  xgk  xgv  xhg  xhr  xic  xin  xiy  xjj
xac    xan  xay  xbj  xbu  xcf  xcq  xdb  xdm  xdx  xei  xet  xfe  xfp  xga  xgl  xgw  xhh  xhs  xid  xio  xiz  xjk
xad    xao  xaz  xbk  xbv  xcg  xcr  xdc  xdn  xdy  xej  xeu  xff  xfq  xgb  xgm  xgx  xhi  xht  xie  xip  xja  xjl
xae    xap  xba  xbl  xbw  xch  xcs  xdd  xdo  xdz  xek  xev  xfg  xfr  xgc  xgn  xgy  xhj  xhu  xif  xiq  xjb  xjm
xaf    xaq  xbb  xbm  xbx  xci  xct  xde  xdp  xea  xel  xew  xfh  xfs  xgd  xgo  xgz  xhk  xhv  xig  xir  xjc  xjn
xag    xar  xbc  xbn  xby  xcj  xcu  xdf  xdq  xeb  xem  xex  xfi  xft  xge  xgp  xha  xhl  xhw  xih  xis  xjd  xjo
xah    xas  xbd  xbo  xbz  xck  xcv  xdg  xdr  xec  xen  xey  xfj  xfu  xgf  xgq  xhb  xhm  xhx  xii  xit  xje  xjp
xai    xat  xbe  xbp  xca  xcl  xcw  xdh  xds  xed  xeo  xez  xfk  xfv  xgg  xgr  xhc  xhn  xhy  xij  xiu  xjf  xjq
xaj    xau  xbf  xbq  xcb  xcm  xcx  xdi  xdt  xee  xep  xfa  xfl  xfw  xgh  xgs  xhd  xho  xhz  xik  xiv  xjg  xjr
[root@liang-00 test]# 

将切割后的文件自定义名字开头。

[root@liang-00 test]# split -b 100K b.txt a.    #以a.开头。
[root@liang-00 test]# ls
a.aa  a.ab  a.ac  b.txt

-l 指定行数多少。

[root@liang-00 test]# split -l 1000 b.txt    #每1000行切割成一个文件
[root@liang-00 test]# ls
b.txt  xaa  xab  xac  xad  xae  xaf  xag
[root@liang-00 test]# wc -l *    
  6365 b.txt
  1000 xaa
  1000 xab
  1000 xac
  1000 xad
  1000 xae
  1000 xaf
   365 xag
 12730 total
[root@liang-00 test]#

8.13 shell特殊符号

$ 变量前缀,!$ 组合,正则里面表示行尾。

; 多条命令写到一行,用分号分割。

[root@liang-00 test]# ls b.txt ; du -sh xaa; wc -l xac    #执行多条命令用分号分割开
b.txt
40K    xaa
1000 xac
[root@liang-00 test]# 

~ 用户家目录,正则表达式里面表示匹配符。

& 放到命令后面,会把命令丢到后台。

> 输出重定向;>> 追加重定向;2>错误输出重定向;2>>错误输出追加重定向;&>不管错误还是正确都输出。

[] 指定字符中的一个,[1-9],[a-zA-Z],[abc]。

||和&&,用在命令之间。

 

|| 符号

用于两条命令之间,如果第一条命令执行成功就不执行第二条命令,如果第一条命令执行不成功就执行第二条命令。

[root@liang-00 test]# wc -l b.txt || ls xaa    #第一条命令执行成功了,没有执行第二条。
6365 b.txt
[root@liang-00 test]# cat  b1.txt || wc -l  xaa    #第一条没有执行成功,继续执行第二条。
cat: b1.txt: No such file or directory
1000 xaa
[root@liang-00 test]# 

&& 符号 

用于两条命令之间,如果第一条命令执行成功才去执行第二条命令,如果第一条命令执行不成功就不执行第二条命令。

[root@liang-00 test]# cat  b1.txt && wc -l  xaa    #第一条命令执行没成功,就不在执行第二条命令。
cat: b1.txt: No such file or directory
[root@liang-00 test]# ls  b.txt && wc -l  xaa    #第一条命令执行成功了,再执行第二条命令。
b.txt
1000 xaa
[root@liang-00 test]# 

|| 与 &&符号实际应用举例。

在系统中想要创建一个目录,但是不知道它存在不存在,如果存在了,就不去创建它,如果不存在再去创建它。

第十课预习笔记_第3张图片

Linux 系统添加操作记录审计

       有时候我们需要对线上用户操作记录进行历史记录待出现问题追究责任人,,但Linux系统自带的history命令用户有自行删除权限,那怎么设置可以让用户的操作记录实时记录,并保证普通用户无权删除呢?本文教你一招。

[root@liang-00 ~]# mkdir -p /usr/local/domob/records/ 
[root@liang-00 ~]# chmod 777 /usr/local/domob/records/
[root@liang-00 ~]# chmod +t /usr/local/domob/records/
[root@liang-00 ~]# vim /etc/profile
[root@liang-00 ~]#

第十课预习笔记_第4张图片

效果。

[root@liang-00 ~]# su - liang                            #切换到普通用户liang下。
Last login: Sun Nov  4 22:33:35 CST 2018 on pts/0
[liang@liang-00 ~]$ 
[liang@liang-00 ~]$ cd                                    #执行一些列操作
[liang@liang-00 ~]$ ls
[liang@liang-00 ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   28G  2.1G   26G   8% /
devtmpfs                 480M     0  480M   0% /dev
tmpfs                    492M     0  492M   0% /dev/shm
tmpfs                    492M  7.5M  485M   2% /run
tmpfs                    492M     0  492M   0% /sys/fs/cgroup
/dev/sda1                197M  108M   90M  55% /boot
tmpfs                     99M     0   99M   0% /run/user/0
[liang@liang-00 ~]$ logout
[root@liang-00 ~]# cd /usr/local/domob/records/liang/
[root@liang-00 liang]# ls
bash_history                                                        #查看 /usr/local/domob/records/liang/ 下记录的 bash_history 
[root@liang-00 liang]# cat bash_history 
2018-11-07 00:09:46 ##### root pts/0 (192.168.37.1) #### su -
2018-11-07 00:09:48 ##### root pts/0 (192.168.37.1) #### su -
2018-11-07 00:09:49 ##### root pts/0 (192.168.37.1) #### cd
2018-11-07 00:09:50 ##### root pts/0 (192.168.37.1) #### ls
2018-11-07 00:10:01 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:02 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:02 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:02 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:03 ##### root pts/0 (192.168.37.1) #### df -h
2018-11-07 00:10:04 ##### root pts/0 (192.168.37.1) #### df -h

 

撰写本博客所用到的参考文献:

http://man.linuxde.net
http://www.runoob.com/
http://www.68idc.cn/help/server/linux/2014042190951.html
http://ask.apelearn.com/question/5437

转载于:https://my.oschina.net/u/3993922/blog/2872731

你可能感兴趣的:(第十课预习笔记)