学习linux 11

shell

十. shell特殊符_cut命令

特殊符号

1.*任意个任意字符
2.?任意一个字符
3.#注释字符
4.\脱义字符
5.|管道符

cut命令是用来截取一个字段

cut选项
-d分割字符 分割字符需要用单引号括起来
-c 指定后面是第几个字符
-f 显示指定字段的内容

cut的用法

[root@qklinux-01 ~]# cat /etc/passwd |head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qklinux-01 ~]# cat /etc/passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

[root@qklinux-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1 //表示截取第一段
root
bin
[root@qklinux-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2 //表示截取前两段
root:x
bin:x
[root@qklinux-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3  //表示截取前三段
root:x:0
bin:x:1

十一 sort_wc_uniq命令

sort排序,-n以数字排序
-r反向排序
-t 分隔符 –kn1/-kn1,n2

例:追加/etc/passwd到1.txt

[root@qklinux-01 ~]# head /etc/passwd >> 1.txt
编辑1.txt文件并写入特殊符号

[root@qklinux-01 ~]# vim 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
1212aaaaaa
88888888dhajskkd
*sjakjsk
1212312
1231
>
<
{
]

用sort排序

[root@qklinux-01 ~]# sort 1.txt
<
>
]
{
1212312
1212aaaaaa
1231
1.txt
2.txt
88888888dhajskkd
adm:x:3:4:adm:/var/adm:/sbin/nologin
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
*sjakjsk
sync:x:5:0:sync:/sbin:/bin/sync

sort –n以数字排序 字母和特殊符号会认为是0

[root@qklinux-01 ~]# sort -n 1.txt
<
>
]
{
adm:x:3:4:adm:/var/adm:/sbin/nologin
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
*sjakjsk
sync:x:5:0:sync:/sbin:/bin/sync
1.txt
2.txt
1212aaaaaa
1231
1212312
88888888dhajskkd

sort –r会反着排序 最大的数字在前面

[root@qklinux-01 ~]# sort -nr 1.txt
88888888dhajskkd
1212312
1231
1212aaaaaa
2.txt
1.txt
sync:x:5:0:sync:/sbin:/bin/sync
*sjakjsk
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
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
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
{
]
>
<

wc命令
wc –l统计行数

[root@qklinux-01 ~]# wc -l 1.txt
21 1.txt

wc –m统计字数

[root@qklinux-01 ~]# wc -m 1.txt
455 1.txt

wc –w统计词

[root@qklinux-01 ~]# wc -w 1.txt
21 1.txt

uniq命令去重
编辑2.txt文件

[root@qklinux-01 ~]# vi 2.txt
[root@qklinux-01 ~]# cat 2.txt
123
abc 111,222
123
abd
1
2
1

先排序 再去重

[root@qklinux-01 ~]# sort 2.txt |uniq
1
123
2
abc 111,222
abd
[root@qklinux-01 ~]# sort 2.txt |uniq -c
      2 1
      2 123
      1 2
      1 abc 111,222
      1 abd

十二 tee_tr_split命令
tee命令 和>类似,重定向的同时还在屏幕显示

[root@qklinux-01 ~]# sort 2.txt |uniq -c |tee a.txt
      2 1
      2 123
      1 2
      1 abc 111,222
      1 abd
[root@qklinux-01 ~]# cat a.txt
      2 1
      2 123
      1 2
      1 abc 111,222
      1 abd

tee –a也可以追加内容

[root@qklinux-01 ~]# sort 2.txt |uniq -c |tee -a a.txt
      2 1
      2 123
      1 2
      1 abc 111,222
      1 abd
[root@qklinux-01 ~]# cat a.txt
      2 1
      2 123
      1 2
      1 abc 111,222
      1 abd
      2 1
      2 123
      1 2
      1 abc 111,222
      1 abd

tr命令 用来替换字符 tr ‘a’ ‘b’ 大小写替换tr ‘[a-z]’ [A-Z]’

[root@qklinux-01 ~]# echo "qkailinux" |tr '[al]' '[AL]'
qkAiLinux
[root@qklinux-01 ~]# echo "qkailinux" |tr 'a' 'A'

qkAilinux
[root@qklinux-01 ~]# echo "qkailinux" |tr '[a-z]' '[A-Z]'
QKAILINUX

split切割, 用于切割文档, -b大小(默认单位字节)

追加重定向文件

[root@qklinux-01 ~]# find /etc/ -type f -name "*conf" -exec cat {} >> a.txt \;
[root@qklinux-01 ~]# du -sh a.txt
240K	a.txt
[root@qklinux-01 ~]# ls
111          4.txt
123          aa.txt
1_heard.ttx  anaconda-ks.cfg.1
1_sorft.txt  a.txt
1.txt        a.xtt
1.txt~       bb.txt
1.xtt        qkai2
234          yum.log
2.txt        zsh-5.0.2-31.el7.x86_64.rpm
3.txt        新建文本文档.txt
[root@qklinux-01 ~]# mv a.txt test/
mv: 无法将"a.txt" 移动至"test/": 不是目录
[root@qklinux-01 ~]# mkdir test
[root@qklinux-01 ~]# mv a.txt test/

切割文件1000k 不加单位默认的是字节

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

指定大小

[root@qklinux-01 test]# split -b 100k a.txt
[root@qklinux-01 test]# ls
a.txt  xaa  xab  xac
[root@qklinux-01 test]# du -sh *
240K	a.txt
100K	xaa
100K	xab
40K	xac

指定以abc开头的名字

[root@qklinux-01 test]# split -b 100k a.txt  abc
[root@qklinux-01 test]# ls
abcaa  abcab  abcac  a.txt

指定切割每1000行一个 split指定行数

[root@qklinux-01 test]# split -l 1000 a.txt
[root@qklinux-01 test]# wc -l *
  2500 abcaa
  2577 abcab
  1101 abcac
  6178 a.txt
  1000 xaa
  1000 xab
  1000 xac
  1000 xad
  1000 xae
  1000 xaf
   178 xag
 18534 总用量

shell特殊符号
特殊符号 $
变 量 前 缀 , ! 变量前缀,! 组合 正则里面表示行位
;多条命令写到一行,用分号分割

比如:

[root@qklinux-01 ~]# ls 1.txt ; wc -l 2.txt
1.txt
7 2.txt

~用户的家目录,后面正则表达时表示匹配符
&把命令放到后台去

[root@qklinux-01 ~]# sleep 30&
[1] 8188
root@qklinux-01 ~]# jobs
[1]+  运行中               sleep 30 &

一个大于号表示正确重定向 会把之前内容覆盖

两个大于号追加重定向
2> 错误重定向
2>>错误追加重定向
&>正确错误不区分全部输入到一个文件里

中括号[]指定字符中的一个,[0-9] [abc]

符号||和&&,用于命令之间
||用在shell中表示或者 如果命令用|| 第一条命令执行成功就不会执行第二条 ,如果第一条命令是错误的,执行失败就会执行第二条

  [root@qklinux-01 ~]# ls a.txt || wc -l 2.txt
    ls: 无法访问a.txt: 没有那个文件或目录
    7 2.txt
    [root@qklinux-01 ~]# ls 1.txt || wc -l 2.txt
    1.	txt

&&命令表示前面命令执行成功才会执行后面命令 如果前面命令执行不成功,后面命令就不会执行

[root@qklinux-01 ~]# ls 1.txt && wc -l 2.txt
1.txt
7 2.txt
[root@qklinux-01 ~]# ls 1a.txt && wc -l 2.txt
ls: 无法访问1a.txt: 没有那个文件或目录

扩展知识

简易审计系统
1. 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'

二. 关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environment-variables.html
source exec 区别
http://alsww.blog.51cto.com/2001924/1113112
sort并未按ASCII排序
http://blog.csdn.net/zenghui08/article/details/7938975

你可能感兴趣的:(学习linux 11)