Linux之文本處理工具

一、定義一個對所有用戶都生效的命令別名,例如:lftps='lftp 172.168.0.1/pub’
#使用管理員賬戶root(僅管理員賬戶可以管理全局配置文件)在/etc/bashrc下定義全局配置文件。

    [root@localhost ~]#echo "lftaps=’lftp 172.16.0.1/pub’" >>/etc/bashrc
    [root@localhost ~]# . /etc/bashrc

    注意:source:在當前bash環境下讀取並執行FileName中的命令
               .:打開一個子shell來讀取並執行FileName中命令
               bash:在當前bash環境下讀取並執行FileName中的命令

二、顯示/etc/passwd文件中不以/bin/bash結尾的行`

    [root@localhost ~]# grep -v '/bin/bash' /etc/passwd

三、找出/etc/passwd文件中,包含兩位數或者三位數的行

    [root@localhost ~]# grep -E '\<[0-9]{2,3}\>' /etc/passwd

四、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用三種方式實現

    #第一種方式
    [root@localhost ~]#grep '^[sS]' /proc/meminfo 
    #第二種方式
        [root@localhost ~]#grep -E '^(s|S)' /proc/meminfo 
    #第三種方式
        [root@localhost ~]#grep -i '^s' /proc/meminfo

五、使用echo輸出一個絕對路徑,使用egrep取出路徑名,類型執行 dirname /etc/passwd的結果
#第一種方式
[root@localhost ~]#echo “/etc/sysconfig/network” | grep -Eo "./\<" /etc/sysconfig/
#第二種方式
[root@localhost ~]#echo "/etc/sysconfig/network" |sed -r 's@(^/.
/)([^/]+/?)@\1@' /etc/sysconfig/

六、找出ifconfig中的ip地址,要求結果只顯示IP地址

    #第一種方式
        [root@localhost ~]#ifconfig |grep -Eo "\<(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"  
    #第二種方式
        [root@localhost ~]#ifconfig ens33 |sed -r '2!d;s@(.*inet )(.*)(  net.*)@\2@'

七、vim定製自動縮進四個字符

 在/etc/vimrc配置文件底部增加如下字符:
     set ts=4        #設置縮進4個字符

八、編寫腳本,實現自動添加三個用戶,並計算這三個用戶的UID之和

    [root@localhost ~]# vim summation.sh
         #!/bin/bash
            useradd user1
            useradd user2
            useradd user3
        echo "$[$(id -u user1)+$(id -u user2)+$(id -u user3)]"
    [root@localhost ~]# bash summation.sh
        15045

九、find用法以及常用用法的實例演示。

Linux文件中查找文件是一件相當繁瑣的事情,因爲Linux系統中所有的文件可以以任何的後綴名進行命名,所以Linux中有許多工具用來進行查找文件,例如find命令。
find的命令是一種實時查找工具,通過遍歷指定起始路徑下的文件系統層級機構完成文件查找
工作特點:查找速度略慢,精確查找,實時查找。

find命令:

用法:
find [OPTIONS] [查找起始路徑] [查找條件] 【處理動作】

        查找起始路徑:指定具體搜索目標起始路徑;默認爲當前目錄
        查找條件:指定的查找標準,可以根據文件名,大小,類型,屬主,屬組,權限等等標準進行,默認爲找出指定路徑下的所有文件
        處理動作:對符合查找條件的文件做出的操作,例如:刪除等操作,默認爲輸出至標準輸出。

查找條件:

    根據文件名查找:
         -name "pattern":
         -inmae "pattern":不區分大小寫
         支持glob風格的通配符:*,?,【】,【^】
         示例:
        [root@localhost ~]# find . -name "*fstab*"
                     ./fstab
       #在當前目錄下查找含有“fstab”字符串的文件

根據文件的從屬關係查找:

    -user USERNAME:查找屬主指定用戶的所有文件
    -group GRPNAME:查找屬組指定組的所有文件
    -uid UID:查找屬主指定UID的所有文件
    -gid GID:查找屬組指定GID的所有文件 
    -nouser:查找沒有屬主的文件 
    -nogroup:查找沒有屬組的文件
示例:
[root@localhost ~]# find /tmp -user ydong -ls
#查找tmp目錄下屬主爲ydong的所有文件和目錄

[root@localhost ~]# find ./ -group white -ls
206703397   4 -rw-r--r--   1 ydong    white   541 2月 22 11:57 ./fstab
#查找當前文件目錄下屬組爲white的所有文件和目錄

[root@localhost ~]# find /tmp -uid 1000 -ls
#在tmp目錄下查找屬主UID號爲1000的所有文件和目錄

[root@localhost ~]# find ./ -gid 5015
#在當前路徑下查找屬組GID號爲5015的所有文件和目錄

[root@localhost ~]# find /etc -nouser -ls
137888778    0 -rw-r--r--   1 5010   5011   0 2月22 22:22 /etc/test2
137888780    0 -rw-r--r--   1 5010   5011   0 2月22 22:22 /etc/test3
#查找etc目錄下沒有屬主的所有文件和目錄

[root@localhost ~]# find /etc -nogroup -ls
137888693    0 -rw-r--r--   1 white  5014   0 2月22 22:22 /etc/test1
#查找etc目錄下沒有屬組的所有文件和目錄

根據文件的類型查找:

-type TYPE: 
            TYPE
              ↓ 
            f:普通文件
            d: 目錄文件
            l:符號鏈接文件
            b:塊設備文件
            c:字符設備文件
            p:管道文件
            s:套接字文件
示例:
   [root@localhost ~]# find /dev -type l -ls
   #查找dev目錄下所有符號鏈接文件

   [root@localhost ~]# find /dev -type b 
   /dev/dm-2
   /dev/dm-1
   #查找dev目錄下所有塊設備文件

組合測試:

 與:-a,默認組合邏輯;
 或:-o ,只要符合二者其一         
 摩根定律:
      !A -a !B=!(A -o B)  
      !A -o !B=!(A -a B) 
 示例:
    [root@localhost ~]# find /tmp/test -not -user root -a -not -name "*fstab*" -ls
    68957951  0 -rw-r--r--   1 white  blue   0 2月23 00:01 /tmp/test/test1
    68958014  0 -rw-r--r--   1 white  blue   0 2月23 00:01 /tmp/test/test2
    #查找/tmp/test下屬主不是root,而且也不包含“fstab”字符串的文件

    第二種寫法:
     [root@localhost ~]# find /tmp/test -not \( -user root -o -name "*fstab*" \)

根據文件的大小查找:

-size【+|-】#UNIT
  常用單位UNIT:k,M,G、
  範圍區間:
   #UNIT:#-1<文件<=#    如: 6k 表示(5k,6k]
  -#UNIT:0<=文件<=#-1   如:-6k 表示[0,5]
  +#UNIT: #>文件<無窮大   如:+6k 表示(6,∞]
        示例:
    [root@localhost ~]# find /var -size +10M -exec ls -lh {} \;
-rw-r--r--. 1 root root 72M 2月  22 12:09 /var/lib/rpm/Packages
-rw-r--r--. 1 root root 30M 11月 26 00:00 /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
...
#查找/var目錄下大於10M的文件

根據時間戳查找:

以“天”爲單位:
    -atime:支持【+|-】#
    -mtime:

     find   /usr   -mtime  -4   查找文件更新日時在距現在時刻4天以內的文件

     find   /usr  -mtime  +4    查找文件更新日時在距現在時刻5天以上的文件

     find   /usr   -mtime   4   查找文件更新日時在距現在時刻4天以上5天以內的文件

     -ctime           

以“分鐘”爲單位:

     -amin:
     -mmin:
     -cmin:
示例:
[root@localhost ~]# find /etc -mtime -4 -ls
137888693  0 -rw-r--r--   1 white  5014  02月22 22:22 /etc/test1
....
 [root@localhost ~]# stat /etc/test1
文件:"/etc/test1"
大小:0            塊:0          IO 塊:4096   普通空文件
設備:fd00h/64768d Inode:137888693   硬鏈接:1
權限:(0644/-rw-r--r--)  Uid:( 5014/   white)   Gid:( 5014/ UNKNOWN)
環境:unconfined_u:object_r:etc_t:s0
最近訪問:2019-02-22 22:22:30.330480989 +0800
最近更改:2019-02-22 22:22:30.330480989 +0800
最近改動:2019-02-22 23:39:33.344090312 +0800
#查找/etc目錄下4天以內修改過的文件

根據權限查找:

-perm【/|-】mode:
   mode:精確權限查找
  /mode:  任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足
                       9位權限之間存在“或”關係
  -mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足
                      9位權限之間存在“與”關係
     示例:
   [root@localhost ~]# find ./ -perm -222 -ls
   #u,g,o三類用戶都必須有寫權限才能匹配

   [root@localhost ~]# find ./ -perm /222 -ls
   #u,g,o三類用戶中只要有一位有寫權限就能匹配

處理動作:

-print: 將查找的路徑輸出至標準輸出。默認動作

-ls: 類似於對查找到的文件執行“ls -l”命令,輸出文件的詳細信息

-delete:刪除查找到的文件,,

-fls /PATH/TO/SOMEFILE: 把查找到的所有文件的長格式信息保存至指定文件中

-ok COMMAND {}  \; (固定格式)  :對查找到的每個文件執行由COMMAND表示的命令,每次都由用戶確認

-exec COMMAND {} \;    :對查找到的每個文件執行由COMMAND表示的命令
示例:
    [root@localhost ~]# find ./ -name "test1" -ok rm -rf {} \;
    < rm ... ./test1 > ? y
#匹配查找到test1文件之後進行刪除操作,並向用戶確認

[root@localhost ~]# find ./ -name "*test*" -fls ./hello.txt 
[root@localhost ~]# cat hello.txt 
206703362    0 -rw-r--r--   1 5011  5012     0   2月23 00:48 ./test2
206701816    4 -rwxr-xr-x   1 root  root     42  2月16 23:10 ./test3.sh
3401882      0 drwxr-xr-x   2 root  root     6   2月23 00:00 ./test

#把匹配查找到的含有“test”字符串的文件以長格式信息存儲在hello文本中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章