2018-08-16笔记

shell特殊符号

\ 脱义字符

不让命令生效,取消掉命令的原义

[root@linux7-128 ~]#a=1
[root@linux7-128 ~]#b=2
[root@linux7-128 ~]#c=$a$b
[root@linux7-128 ~]#echo $c
12
[root@linux7-128 ~]#c=\$a\$b
[root@linux7-128 ~]#echo $c
$a$b

| 管道符

cut分割

[root@linux7-128 ~]#cat /etc/passwd |head -3
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@linux7-128 ~]#cat /etc/passwd |head -3 |cut -d ":" -f 1
root
bin
daemon
[root@linux7-128 ~]#cat /etc/passwd |head -3 |cut -d ":" -f 2
x
x
x
[root@linux7-128 ~]#cat /etc/passwd |head -3 |cut -d ":" -f 1,2
root:x
bin:x
daemon:x
[root@linux7-128 ~]#cat /etc/passwd |head -3 |cut -c 4
t
:
m

sort排序

[root@linux7-128 ~]#sort /etc/passwd
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
colord:x:994:991:User for colord:/var/lib/colord:/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
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
geoclue:x:993:990:User for geoclue:/var/lib/geoclue:/sbin/nologin
gnome-initial-setup:x:990:985::/run/gnome-initial-setup/:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
huhu1:x:1001:1001::/home/huhu1:/bin/bash
huhu2:x:1005:1006::/home/huhu2:/bin/bash

使用sort可以对文件进行排序,

[root@linux7-128 ~]#sort 1.txt 
<
>
[
{
}
%
213434
22331111
32334rerww
Aasds
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
C112
daemon:x:2:2:daemon:/sbin:/sbin/nologin
*fdn
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/nologi
qwqwqwqq:wq
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync

sort使用ASCII码排序

sort -n按数字排序,符号和字母默认为0

[root@linux7-128 ~]#sort -n 1.txt 
<
>
[
{
}
%
Aasds
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
C112
daemon:x:2:2:daemon:/sbin:/sbin/nologin
*fdn
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/nologi
qwqwqwqq:wq
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
32334rerww
213434
22331111

sort -r反序,可以和-n一起使用

[root@linux7-128 ~]#sort -rn 1.txt 
22331111
213434
32334rerww
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
root:x:0:0:root:/root:/bin/bash
qwqwqwqq:wq
operator:x:11:0:operator:/root:/sbin/nologi
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
*fdn
daemon:x:2:2:daemon:/sbin:/sbin/nologin
C112
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
Aasds
%
}
{
[
>
<

LC_ALL=C 排序不正常时设置

wc

  • wc -l 统计行数
[root@linux7-128 ~]#wc -l 1.txt 
23 1.txt

wc -m统计字符数 ,包括换行符

[root@linux7-128 ~]#vim 2.txt 

123
abc
~                                                                                                                        
~                                                                                                                        
~    
:wq
[root@linux7-128 ~]#wc -m 2.txt 
8 2.txt
[root@linux7-128 ~]#cat -A 2.txt 
123$
abc$
[root@linux7-128 ~]#cat 2.txt 
123
abc

wc -L统计字符数,不包括换行符

wc -w统计词,以空格和空白字符为区分

[root@linux7-128 ~]#vim 2.txt 

123
abc 111.111

~                                                                                                                        
~                                                                                                                        
~                                                                                                                                                                                                                                              
:wq    
[root@linux7-128 ~]#wc -w 2.txt 
3 2.txt
[root@linux7-128 ~]#cat 2.txt 
123
abc 111.111

uniq 去重

需要先排序,再去重,否则两个相同的字符不会去重

[root@linux7-128 ~]#cat 2.txt 
123
abc 111.111
123
1
2
1
2
[root@linux7-128 ~]#uniq 2.txt 
123
abc 111.111
123
1
2
1
2
[root@linux7-128 ~]#sort 2.txt |uniq
1
123
2
abc 111.111

uniq -c 统计重复次数

[root@linux7-128 ~]#sort 2.txt |uniq -c
      2 1
      2 123
      2 2
      1 abc 111.111

tee

和输出重定向>类似,重定向的同时还在屏幕显示
使用>重定向不会显示

[root@linux7-128 ~]#sort 2.txt |uniq -c > 1.txt 
[root@linux7-128 ~]#cat 1.txt 
      2 1
      2 123
      2 2
      1 abc 111.111

使用tee就可以把重定向的结果显示在屏幕上

[root@linux7-128 ~]#sort 2.txt |uniq -c |tee 1.txt 
      2 1
      2 123
      2 2
      1 abc 111.111
[root@linux7-128 ~]#cat 1.txt 
      2 1
      2 123
      2 2
      1 abc 111.111

tee -a追加重定向

[root@linux7-128 ~]#sort 2.txt |uniq -c |tee -a 1.txt 
      2 1
      2 123
      2 2
      1 abc 111.111
[root@linux7-128 ~]#cat 1.txt 
      2 1
      2 123
      2 2
      1 abc 111.111
      2 1
      2 123
      2 2
      1 abc 111.111

tr 替换字符

[root@linux7-128 ~]#echo "oraclelinux" |tr 'o' 'O'
Oraclelinux
[root@linux7-128 ~]#echo "oraclelinux" |tr '[a-z]' '[A-Z]'
ORACLELINUX
[root@linux7-128 ~]#echo "oraclelinux" |tr '[a-z]' '1'
11111111111

split 切割

split -b 100M bigfile 将大文件切割为100M

split -l 1000 bigfile 将大文件切割为1000行

split -b 100 bigfile 默认为将大文件切割为100字节

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

指定单位

[root@linux7-128 test]#rm -f x*
[root@linux7-128 test]#ls
1.txt
[root@linux7-128 test]#split -b 10K 1.txt 
[root@linux7-128 test]#ls
1.txt  xaa  xab  xac

指定大小的同时指定名字前缀

[root@linux7-128 test]#rm -f x*
[root@linux7-128 test]#ls
1.txt
[root@linux7-128 test]#split -b 10K 1.txt abc
[root@linux7-128 test]#ls
1.txt  abcaa  abcab  abcac

指定行数

[root@linux7-128 test]#wc -l 1.txt 
670 1.txt
[root@linux7-128 test]#split -l 100 1.txt
[root@linux7-128 test]#ls
1.txt  xaa  xab  xac  xad  xae  xaf  xag
[root@linux7-128 test]#wc -l *
  670 1.txt
  100 xaa
  100 xab
  100 xac
  100 xad
  100 xae
  100 xaf
   70 xag
 1340 总用量

特殊符号

  • || 或者
[root@linux7-128 ~]#ls -l 1a.txt; ls 2.txt
ls: 无法访问1a.txt: 没有那个文件或目录
2.txt
[root@linux7-128 ~]#ls -l 1a.txt || ls 2.txt
ls: 无法访问1a.txt: 没有那个文件或目录
2.txt
[root@linux7-128 ~]#ls -l 1.txt || ls 2.txt
-rw-r--r-- 1 root root 104 531 22:42 1.txt

当第一条命令执行不成功时,使用||还会继续执行下一条命令,如果第一条命令正确,则不会执行第二条

  • &&

只有前面的命令正确,才会执行后面的命令,如果前面的命令不正确,后面的命令不会执行

[root@linux7-128 ~]#ls 1a.txt && ls 2.txt
ls: 无法访问1a.txt: 没有那个文件或目录
[root@linux7-128 ~]#ls 1.txt && ls 2.txt
1.txt
2.txt
  • 示例

判断一个目录是否存在,没有则创建

[root@linux7-128 ~]#[ -d linux ] || mkdir linux
[root@linux7-128 ~]#ls
1.txt  anaconda-ks.cfg  Downloads   manpages-zh-1.5.1         Pictures   test      Videos
2.txt  Desktop          folder.ini  manpages-zh-1.5.1.tar.gz  Public     text.txt
3.txt  Documents        linux       Music                     Templates  ustc

判断一个目录是否存在,有则不创建

[root@linux7-128 ~]#[ -d linux ] &&  mkdir linux
mkdir: 无法创建目录"linux": 文件已存在

拓展

Linux 系统添加操作记录审计

  1. mkdir -p /usr/local/domob/records/

    chmod 777 /usr/local/domob/records/

    chmod +t /usr/local/domob/records/

  2. vi /etc/profile 在最后添加下面的代码

if [ ! -d /usr/local/domob/records/${LOGNAME} ]

then

mkdir -p /usr/local/domob/records/${LOGNAME}

chmod 300 /usr/local/domob/records/${LOGNAME}

fi

export HISTORY_FILE=”/usr/local/domob/records/${LOGNAME}/bash_history”

export PROMPT_COMMAND=’{ date “+%Y-%m-%d %T ##### (who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### (history 1 | { read x cmd; echo “ cmd"; })"; } >> HISTORY_FILE’

http://blog.lishiming.net/?p=484

更改主机名:hostnamectl set-hostnmae 新主机名

PROMPT_COMMAND环境变量

https://www.uppig.com/prompt_command-environment-variables.html
http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html

source exec 区别

http://blog.51cto.com/alsww/1113112

Linux特殊符号大全

http://ask.apelearn.com/question/7720

sort并未按ASCII排序

https://blog.csdn.net/zenghui08/article/details/7938975

猜你喜欢

转载自blog.csdn.net/u013946328/article/details/80561388