鸟哥的Linux私房菜基础篇笔记--8

338.tee命令。(管道命令)

(1)last  |  tee   last.list  

     last 显示的登录信息覆盖到last.list 中,并且输出到屏幕上。

(2)last  |  tee  -a   last.list

     last 显示的登录信息追加到last.list 中,并且输出到屏幕上。

(3)last  |   tee   -a   last.list   |  cut  -d ‘  ’  -f  1

     last 显示的登录信息追加到last.list 中,并且输出到后面的cut 命令处进行处理。

 

339.删除和替换输出内容中的数据。

(1)last  |  tr  [a-z]  [A-Z]  

     last 输出的登录信息小写字母全部转换成大写字母。

(2)last   |  tr  -d  ‘:’ 

     last 输出的登录信息中的  :  删除。

3cat  /root/passwd.windows  |  tr  -d  ‘\r’ >  /root/passwd.linux   

     windows DOS格式文件中的断行符删除,windows文件和linux文件最大的不同就是windows文件中的断行符多了一个^M \r 代表的就是这个^M

 

339.col命令(管道命令)

(1)col  -x  tab键转换成对等的空格键。

     在使用  cat  -A  打开一个文件的时候,会看到很多^I的符号,那个就是tab键。

     cat  /etc/man.config  | col -x  |  cat   -A  |more

     这个命令即使加了cat  -A  也不会出现^I 了。

 

340.join命令

(1)join  -t  ‘:’  /etc/passwd  /etc/shadow  

      /etc/passwd  /etc/shadow 中以:为分割的第一个字符相同的行连成一行。

     默认是以一个字符为判断的。

(2)join   -t  ‘:’  -1 4  /ec/passwd   -2 3  /etc/group

     /etc/passwd 中的以:为分割的第四个数据和/etc/group 中的以:为分割的第三个数据相同的行连在一起。

(3)需要注意的是,在使用join的时候,你所需要处理的文件应该要事先经过排序sort

341.paste  命令

(1)paste  /etc/passwd  /etc/shadow

     /etc/passwd  和  /ec/shadow 的数据行和行对应在一起。

(2)paste  -d “:”  /etc/passwd  /etc/shadow

     用:将两个文件的数据分隔开,默认是使用tab分割的。

(3)cat   /etc/group | paste  /etc/passwd  /etc/shadow  -

     - 代表的是前面输出的数据

 

342.split 命令。

(1)split -b  300k  /etc/termcap  temcap

     /etc/termcap 分成300K一个的文件,

     最后面的是生成文件的文件名前缀。

(2)ls -l  /  |  split  -l  10  -  lsroot

     将根下的目录信息 ,分成10行一个的文件 ,注意- 的添加。

343.find perm 的用法。

(1)find  /  -perm -0644  

     -110100100   有的地方用1代表,没有的用0代表

     找到每个1必须匹配的文件

     意思就是匹配至少是这么多个权限。

(2)find  /  -perm  +0644

     找到其中的一个1被匹配就可以。

     意思就是最多匹配是这么多个权限。

(3)find  /  -perm  0644

     找到其中的权限正好是这个的。

350.grep 命令。

(1)grep  -A  3  -B   3  ‘root’   /etc/passwd

     /etc/passwd 查找 root 字符串 ,并将目标行上面3行和下面3行打印出来。

(2)grep  -n  ‘[^[:lower:]oo]’  regular.express.txt

     在文件中找到不是小写字母开头,  后面接了oo的行。

(3)grep  -n  ‘ooo*’  regular.express.txt

     找到至少有两个o的行。

     o*代表的是o出现了0次到多次的意思

(4)grep  -n  ‘o\{2\}’  regular.express.txt

     找到o出现了2次的行。

     因为{}是特殊字符,所以用\ 转义。

 

(5)grep  -n  ‘go\{2,5\}’  regular.express.txt

     找到g后面出现了2次到5o 的行。

(6)grep  -n  ‘go\{2,\}’  regular.express.txt

     找到g后面出现了2次以上o的行。

(7)ls -l  /etc/  |  grep  ‘^l’

     找到/etc/下的链接文件。

(8)grep  -n  ‘[!<]’  regular_express.txt

     想要找到 ! < 的行。

     或者

     grep  -n   ‘!’  regular_express.txt

     grep  -n   ‘<’  regular_express.txt

     

     grep  -n   ‘!<’  regular_express.txt 是找不出来的。

     grep   ‘[abce]’  regular_express.txt

     找出有abce任一一个字母的行。

358.sed命令。

(1)nl  /etc/passwd  |  sed  ‘3,$d’   行号显示,用sed 3到最后都删除。

(2)sed  [n1,[n2]function]  文件

     function 有下面的参数

     a: 新增

 c: 替换行

 d:删除行

 i : 插入行,目前的前一行

 p: 打印

 s: 替换字符

(3)sed  -i   修改源文件,默认只是打印到屏幕上。

(4)nl  /etc/passwd (为了显示行号) |  sed  ‘2a Drink  tea  or  ........\

     > drink  beer ?’

 这个范例的重点是我们新增的不只一行,可以新增好几行,但是每一行之间都必须要以反斜杠\” 来进行新行的增加。

(5)nl  /etc/passwd  |  sed  -n   ‘5-7p’    -n  和  -p 通常一起用。

(6)sed  -n   ‘s/$/\!/g’   regular_express.txt

     sed  代表的是每一行最后一个字符,也就是换行符,用cat 是看不到的,用set显示的效果就是在每一行的后面加上一个!

(7)sed  -i  ‘s/\.$/\!/g’  regular_express.txt

     将以 . 为结尾的行中最后面的  .  替换成  !

(8)sed 的一些使用区别。表现-n p  的连用效果。

 

 

 

(9)sed  -r  ‘s/([a-Z]*)(^[a-Z0-9]*)([a-Z]*)/\3\2\1/g’  test.txt

     test.txt 中内容   zhige  test

     换成         test    zhige

(10)sed   ‘1i 1 \n 2’  test.txt

     

(11)sed    ‘1r  b.txt’   test.txt

      test.txt 文件中的第一行下面读入文件b.txt的内容。

(12)sed  -n  ‘/bash$/!p’ /etc/passwd

      取出结尾不是bash 的行。

     !表示取反。

(13)sed   ‘1h;2H;1,2d;$G’   test.txt

     1行和2行的内容删除,并将1行和2行的内容复制到文本的末尾。

     

(14)sed  -e ‘4d’  -e  ‘6c  no  six  line’  >  passwd.new

      当有多个动作的时候,用-e 分割动作

361.egrep  命令。

1egrep  -v   ‘^$|^#’  regular_express.txt  

     两个条件同时满足,egrep 使用的是扩展正则。

     相当于

     grep  -v  ‘^$’  regular_express.txt  |  grep  -v  ‘^#’ 

(2)扩展正则的一些表示方法。

     +  一个以上的前一个字符

     egrep   -n  ‘go+d’  regular_express.txt  (-n 显示源文件行号)

      一个或者是0个前一个字符

     egrep   -n  ‘go?d’  regular_express.txt  

     |  表示或者,两个条件中有一个满足就可以。

     egrep   -n  ‘gd|good|dog’  regular_express.txt

     ()  表示部分或者的情况,规定肯定的部分。

     egrep   -n  ‘g(la|oo)d’  regular_express.txt

     ()+ 表示前面括号中的内容,出现了一次以上

     echo  “AxyzxyzxyzxyzC  ”  egrep   -n  ‘A(xyz)+C’  

 

         

362.printf 命令。

(1)printf 命令的用处在于将输出的结果做的更加好看一点。

(2)printf  打印格式   实际内容

(3)printf  ‘%s\t  %s\t  %s\t  %s\t  %s\t  \n ’  $(cat  printf.txt)

     printf  ‘%s\t  %s\t  %s\t  %s\t  %s\t  \n ’  zhige zhige zhige zhige zhige

     \t 是增加一个tab键的作用,%s代表匹配字符。\n 代表另起一行。

     这就是$(cat  printf.txt )的作用。意思就是在后面加上几个字符串,好让printf 能够根据这些字符串排版。

     

(4)printf  ‘%10s  %5i  %5i  %5i  %8.2f  \n’ $(cat  printf.txt |  grep  -v  Name )

     %10s 代表的是10个字符

     %5i   代表的是 5个整数

     %8.2f   代表的是小数,那个8代表的是整数的部分位数,2代表的是小数的部分位数

     

(5)printf  ‘\x45’  列出十六进制数值 45所代表的字符。

 

364.awk命令。

(1)last  -n  5 last 查看登录信息,-n  5 显示前五行) | awk  ‘{print  $1  “\t”  $3 }’ 

     取出第一列和第三列,中间的 \t  就是tab键的意思,\t必须用双引号引起来

(2)awk  ‘{print  $0}’  /etc/passwd  

     $0 是一整行的意思,这个命令默认就是输出全部的内容。

(3)NF  每一行($0)拥有的字段总数,默认以空格分开之后的数量,不是字符数。

     NR  目前awk 所处理的是第几行的数据

     FS   目前的分割字符,默认是空格键

4)记得非变量的文字部分,包括printf 提到的格式中,都需要使用双引号来定义出来,

 

因为单引号已经是awk的固定用法了。

   #printf  ‘%s\t  %s\t  “zhige ”  %s\t \n’  zhige  zhige  zhige  

zhige   zhige   zhige  zhige  第三个zhige 后面没有tab

 

   #last  -n   5  |  awk  ‘{print  $1 “\t  lines:”  NR   “\t  columes: ” NF}’

注意””中的是\t和 非变量的字符。

 

5cat  /etc/passwd  |  awk  ‘{FS=”:”}  $3 < 10  {print  $1 “\t” $3}’

     

  会发现第一行没有正确显示出来。这个是因为我们在读入第一行的时候,那些变量$1,$2 默认还是以空格键为分割的,所以虽然我们定义了FS=”:” 了,但是却仅能在第二行后才能开始生效,我们可以预先设置awk的变量啊,利用BEGIN这个关键字。

  cat  /etc/passwd  |  awk   ‘BEGIN{FS=”:”} $3 < 10 {print  $1  “\t”  $3} ’

(6)cat pay.txt|  awk ‘NR==1{printf  “%10s  %10s  %10s  %10s  %10s\n”,$1,$2,$3,$4,”Total”} NR>=2 {total = $1 + $2 + $3;printf  “%10s  %10d  %10d  %10d  %10.2f\n”, $1, $2, $3, $4,  total}’

 

需要注意的是:在awk$1 $2 之间必须有“,”,在{}之中,有两个命令的时候,必须用  ; 分割开。其中,total = $2 + $3 + $4 是在定义变量。

 

(7)所有的awk 的动作,即在{}内的动作,如果有需要多个命令辅助时,可利用分号“;”间隔,或者直接以【Enter】按键来隔开每个命令。

     逻辑运算当中,如果是“等于”的情况,则务必使用两个等号“==

     格式化输出时(printf),务必加上\n,才能进行分行。

     bashshell的变量不同,在awk 中,变量可以直接使用,不需要加上$符号。

(8)awk  ‘NR==1{print }’ /etc/passwd

     awk  ‘{if(NR==1)print}’ /etc/passwd

     判断条件的位置一定要是在{}之中。

(9)awk  -F”[:  ]” ’{print  $1}’  /etc/passwd  将:和 空格作为分隔符。在外边能够同时定义两个。

   

(10)awk  ‘{print FNR}’  /etc/passwd  /etc/shadow

      分别显示两个文件的行号,都从1开始

      awk  ‘{print NR}’   /etc/passwd   /etc/shadow

      累计两个文件的行号,从上一个文件的结束开始

(11)awk  -v  i=$USER  ‘{print i}’   如果定义的变量的值是环境变量,那么只能在’’外面定义,不可以在{}里面定义。

      相当于

      awk  ‘print ENVIRON[“USER”]’

      awk  -v 定义变量

      ENVIRON[“”] 引用环境变量

      awk  ‘{print FILENAME}’   /etc/passwd

      打印出文件名,有多少行打印出多少行。

 

(12)输出用/bin/bash作为解释器的用户的个数。

      awk  -F”[:]”  ‘BEGIN{i=0} $7==”/bin/bash”{i++}END{print i}’ /etc/passwd

(13)awk  -F:  ‘BEGIN{print  “USER\tUID\tHOME”} {print  $1”\t”$3”\t”$6 } END{print “总行数是” NR}’

      END之后的命令在执行完最后一行之后,再执行。

(14)awk 上用正则表达式(默认打印出来)

      awk   ‘/^(127|192)/’    /etc/hosts

      相当于

      awk   ‘/^127/||/^192/’  /etc/hosts

      /etc/hosts文件中找到以127或者192开头的行。

(15)匹配查找

     awk -F:  ‘$7~/bash/{print $1 $7}’  /etc/passwd

(16)逻辑比较

     awk  -F:  ‘$3>=0&&$3<5 {print $1”   ”$3}’  /etc/passwd

(17)awk  -F:‘BEGIN{i=o} {i=i+NF} END{print i}’  /etc/passwd

      相当于

      awk  -F:   ‘{i=i+NF}END{print i}’  /etc/passwd 当没有变量没有被定义的时候,默认会取0

      统计/etc/passwd 文件中的总列数。

 

18free  |  awk  ‘$1~”-”{if($4<=500000)print $4}’

      自己执行看看吧,注意语法就行了。

(19)awk if 条件判断语句,必须用在{}里边。

      if(条件){指令}

      if(条件){指令}else{指令}

      if(条件){指令}elif{指令}else{指令}

       

      awk  -F: ‘{if($3<500){i++}else{j++}}END{print i “   ”j }’   /etc/passwd

      if 的条件判断语句,加上else

(20)awkwhile条件

      while(条件){指令}

      do{指令}while(条件)

      awk -F”[:/]”  ‘i=1{while(i<=NF){if($i~/root/){j++};i++}END{print j}’  /etc/passwd

       

 

(21)awkfor用法。

      awk   -F: ‘{for(i=1;i<=5;i++){print $1}}’  /etc/passwd  

      每一行的第一列都被打印5遍。

(22)awk查看web的访问日志,分别统计每个客户端IP访问的次数。

      awk  ‘{ip[$1]++} END{for ( i  in  ip){print i , ip[i]}}’   /var/log/httpd/access.log

(23)ls  -l   test.txt  |  sed  ‘s/^.//’ | awk   ‘BEGIN{FS=’’} {print $1$2$3}’ 

      会取出test.txt 文件的权限。

      在这个命令中,awk的默认分隔符为空格,FS=’’,将分隔符变成空,也就一个字符就是以列。

 

 

366.diff 文件比较工具、

(1)diff就是用在比较两个文件之间的区别的,并且是以行为单位来比较的!一般是用在ASCII纯文本文件的比较上,由于是以行为比较的单位,因此diff通常是用在同一文件(或软件)的新旧版本区别上。

(2)diff   [-bBi]  from-file   to-file

     to-file 是作为修改后的文件的

     -b  : 忽略一行当中仅有多个空白的区别(例如:about me 和  about    me

     -B  : 忽略空白行的区别

     -i  :  忽略大小写的不同

(3)diff   passwd.old   passwd.new

     显示的信息解释

     4d3    左边的第四行被删除了,基准是文件的第三行,基准的意思就是说目前两个文件的内容还相等到哪里

     6c5    左边的第六行被替换成了第五行。

(4)diff   /etc/rc3.d  /etc/rc5.d  

     比较两个目录的不同

(5)diff  -Naur  passwd.old   passwd.new  >  passwd.patch  

     制作补丁文件,将新文件中的改动放到passwd.patch

368.patch 更新文件用到diff的生成的文件

(1)patch  -p0   <  passwd.patch    在新旧文件的目录中,-p0的意思就是文件在同一

                                   个目录中,不用删减目录层数的意思。如果是记录

                                    目录之间的差别的话,就必须要指定这个值,个人

                                    理解就是,目录中有目录中有目录,所以要指定恢

                                    复那个层级的目录

     将刚才制作出来的patch  file 用来更新旧版数据。

(2)patch  -R  -p0   <  passwd.patch  

     回复旧文件的内容。

367.cmp  文件比较命令。

(1)cmp   passwd.old   passwd.new

     这个cmp 也可以用来比较二进制文件。

 

     

 

370.grep  -l  

1grep  ‘\*’  $(find  /etc/   -type  f )

     /etc/下的文件中带有*的行的内容,会显示文件名和匹配文件内容

     grep  -l  ‘\*’  $(find  /etc/   -type  f )

     只显示有匹配的文件名

(2)find   /  -type  f  |  xargs  -n  10  grep  ‘\*’

     find 找到结果,交由xargs grep 处理 ,-n 10 每十个处理一次。

     find   /  -type  f  |  xargs  -n  10  grep   -l  ‘\*’

     find 找到结果,交由xargs grep 处理,只会显示文件名。

 

378.date命令的特殊用法。

(1)date  --date=’1 days ago’  +%s

(2)date  --date=’20170101’   +%s

(3)date  --date=’2017-01-01’  +%s

(4)date  --date=’2017/01/01’  +%s

380.test 命令。

(1)和用在脚本中的if [] 中的判断条件类似。

(2)test   -e   /dmtsai  

     查看/dmtsai 是否存在,根据返回值$?得知/dmtsai 是不是空的

(3)test   -s    test.txt   

     查看文件test.txt 是不是空文件。

(4)test  file1   -nt   file2  

     查看file1  是否比file2

(5)test   file1   -ot   file2  

     查看file1  是否比file2

     也是用$?判断的。

(5)test  -e   /dmtsai   -a    -e   test.txt  

     两个条件同时成立。

     test  -e   /dmtsai   -o    -e   test.txt

     两个条件成立一个即可

     test  ! -x  test.txt   

     判断test.txt 是不是不具有x权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值