Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

bash shell腳本編程入門篇(二)

read命令的使用

作用:

    使用read來把輸入值分配給一個或多個shell變量:

        -p指定要顯示的提示

        -t TIMEOUT

read從標準輸入中讀取值,給每個單詞分配一個變量,所有剩余單詞都被分配給最后一個變量

EX.read -p “Enter a filename:“ FILE

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

條件選擇之if的使用

if的作用:選擇執行(注意:if語句可嵌套)

單分支

    if 判斷條件;then

        條件為真的分支代碼

    fi

EX.單分支案例

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

雙分支

    if 判斷條件; then

        條件為真的分支代碼

    else

        條件為假的分支代碼

    fi

EX.雙分支并嵌套if語句的例子

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

多分支

    if 判斷條件1; then

        if-true

    elif 判斷條件2; then

        if-ture

    elif 判斷條件3; then

        if-ture

    …

    else

        all-false

    fi

EX.多分支案例

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

總結:if的使用,是逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句

條件選擇之case的使用

case語句語法格式:

case 表達式 in 

    模式1)

        條件1

     ;;

    模式2)

        條件2

     ;;

    模式n)

        條件n

     ;;

    *)

        剩余條件

    ;;

 esac

case中各模式可以使用glob匹配模式:

    a|b:a或者b

    *:匹配任意長度的任意字符

    ?:匹配任意單個字符

    [ ]:范圍匹配

EX.case的使用案例

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

文件查找的使用

文件查找作用:在文件系統上查找符合條件的文件;

文件查找相關命令:locate, find

    非實時查找(數據庫查找):locate

    實時查找:find

locate命令的使用


1.locate命令特點:

(1)查詢系統上預建的文件索引數據庫

    /var/lib/mlocate/mlocate.db

(2)依賴于事先構建的索引

(3)索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)

(4)索引構建過程需要遍歷整個根文件系統,極消耗系統IO資源

(5)工作特點:

    查找速度快

    模糊查找

    非實時查找

    搜索的是文件的全路徑,不僅僅是文件名

    可能只搜索用戶具備讀取和執行權限的目錄

2.locate相關命令:

locate KEYWORD

(1)選項:

    -i 執行區分大小寫的搜索

    -n N只列舉前N個匹配項目

    -r 支持使用正則表達式

(2)模糊搜索

    locate "png" ;搜索含有jpg字眼的文件

(3)支持正則表達式

    locate -r '\.png$' 使用regex來搜索以.jpg結尾的文件

EX.使用locate搜索以.png結尾的文件,不區分png的大小寫,且只顯示前10行搜索出來的內容。

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.由于locate搜索的內容依賴于/var/lib/mlocate/mlocate.db里面的內容,所以如果數據塊里面沒有這個內容的話就搜索不到這個內容了。甚至有時候有些數據塊里面有的內容也搜不出來。

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

小總結:在生產環境中,如果使用locate命令搜索不到的想要內容,也不要用updatedb命令更新數據庫,因為可能要更新的數據有很多,這樣的話會造成系統會產生大量的IO,會造成系統嚴重卡頓。

find命令的使用

1.find命令的特點:

(1)實時查找工具,通過遍歷指定路徑完成文件查找;(普通用戶需要注意權限問題)

(2)查找速度略慢

(3)精確查找

(4)可能只搜索用戶具備讀取和執行權限的目錄

2.find命令的語法:

find [OPTION]… [查找路徑] [查找條件] [處理動作]

    查找路徑:指定具體目標路徑;默認為當前目錄

    查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件

    處理動作:對符合條件的文件做操作,默認輸出至屏幕

3.find命令的查找條件

(1)根據文件名和inode查找:

    -name "文件名稱":支持使用glob

    *, ?, [], [^]

    -iname"文件名稱":不區分字母大小寫

    -inumn 按inode號查找

    -samefilename 相同inode號的文件

    -links n 鏈接數為n的文件

    -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱

EX.直接匹配目錄下面的以s開頭,以.sh結尾的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.匹配目錄下面以s開頭,以d.sh結尾的文件,并且忽略大小寫

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.匹配/testdir/shells下面以s開頭,以.sh結尾的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(2)根據屬主、屬組查找:

    -user USERNAME:查找屬主為指定用戶(UID)的文件

    -group GRPNAME: 查找屬組為指定組(GID)的文件

    -uidUserID:查找屬主為指定的UID號的文件

    -gidGroupID:查找屬組為指定的GID號的文件

    -nouser:查找沒有屬主的文件

    -nogroup:查找沒有屬組的文件

EX.查找/testdir/shells/下面屬主為w,屬組為wan的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(3)根據文件類型查找:

     -type TYPE:

        f: 普通文件

        d: 目錄文件     

        l: 符號鏈接文件

        s:套接字文件

        b: 塊設備文件

        c: 字符設備文件

        p: 管道文件

EX.查找/testdir/shells/下面的目錄文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(4)組合條件: 

    與:-a    (默認情況下面已經是-a,例如 -user A -group A跟-user A -a -group A是一個意思)

    或:-o

    非:-not, !

EX.查找屬組為w或者屬組為w的文件,注意,用-o的時候,前后都需要加一個-ls.否則,只顯示后者(即-group w的-ls的結果)

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(5)德·摩根定律:

    ( 非 P ) 或 ( 非 Q ) = 非 ( P 且 Q )

    ( 非 P ) 且 ( 非 Q ) = 非 ( P 或 Q )

EX.查找屬主和屬組都不是root的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(6)根據文件大小來查找:

    -size [+|-]#UNIT

    常用單位:k, M, G

    #UNIT: (#-1, #]

    如:6k 表示(5k,6k]

    -#UNIT:[0,#-1]

    如:-6k 表示[0,5k]

    +#UNIT:(#,∞)

    如:+6k 表示(6k,∞)

EX.查找/testdir/shells/目錄下文件大于1k的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.查找/testdir/shells/目錄下文件大于1k的文件,并且排除bierendesh這個目錄

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(7)根據時間戳:

    以“天”為單位;

    -atime[+|-]#  訪問時間

         #: [#,#+1)    無符號:表示短于(#+1)>x>=#天的時間段被訪問過

        +#: [#+1,∞]   表示(#+1)天之外被訪問過

        -#: [0,#)      表示#天內被訪問過的

    -mtime        修改時間

    -ctime        改變時間

    以“分鐘”為單位:

    -amin

    -mmin

    -cmin

EX.找出~/bin目錄下面兩天內修改過的文件并且按照提示刪除

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.找出~/bin目錄下面兩天內修改過的文件并且直接刪除

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

(8)根據權限查找:

    -perm [/|-]MODE

    MODE: 精確權限匹配

    /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰

    -MODE:每一類對象都必須同時擁有指定權限,與關系

    0 表示不關注

EX.精確查找權限為644的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.查找u,g,o組都至少有讀和執行權限的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.查找u,g,o其中一個有讀寫權限的文件和目錄

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

4.find命令的處理動作:

-print:默認的處理動作,顯示至屏幕;

-ls:類似于對查找到的文件執行“ls -l”命令

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

-flsfile:查找到的所有文件的長格式信息保存至指定文件中

-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;

    對于每個文件執行命令之前,都會交互式要求用戶確認

-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令

    {}: 用于引用查找到的文件名稱自身

find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令

有些命令不能接受過多參數,此時命令執行可能會失敗,下面方式可規避此問題

    find | xargsCOMMAND

EX.處理動作示例

(1)刪除符合u=讀,或g=任意,或o=任意的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.把搜索出來的結果存檔到一個指定的文件

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.搜索指定文件并且對符合條件的文件執行指定命令,-ok是會詢問,換成-exec則直接執行

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

小總結:find命令相當強大,但是各種參數也是很多的,需要查找時間的關系,還有權限/和-符號代表的意義。以及不要搞混亂德·摩根定律。

壓縮、解壓縮工具

compress/uncompress 命令的使用

compress [-dfvcVr] [-b maxbits] [file …]

    -d: 解壓縮,相當于 uncompress

    -c: 結果輸出至標準輸出,不刪除原文件

    -v: 顯示詳情

uncompress解壓縮

zcat file.Z>file 能查看壓縮文檔并且重定向到指定文件,相當于~解壓縮..到~

EX.compress示例

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

gzip/gunzip 命令的使用

gzip[OPTION]… FILE …

    -d: 解壓縮,相當于gunzip

    -c: 將壓縮或解壓縮的結果輸出至標準輸出

    -#:1-9,指定壓縮比,值越大壓縮比越大

zcat:不顯式解壓縮的前提下查看文本文件內容

EX.示例

gzip -c messages >messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.通過重定向解壓了并保持原文件的案例

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

bzip2/bunzip2/bzcat 命令的使用

bzip2 [OPTION]… FILE …

    -k: keep, 保留原文件

    -d:解壓縮

    -#:1-9,壓縮比,默認為6

bzcat:不顯式解壓縮的前提下查看文本文件內容

EX.用bzip2壓縮文件并且保留原文件的示例

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

xz/unxz/xzcat 命令的使用

xz[OPTION]… FILE …

    -k: keep, 保留原文件

    -d:解壓縮

    -#:1-9,壓縮比,默認為6

xzcat: 不顯式解壓縮的前提下查看文本文件內容

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

zip/unzip 命令的使用

打包壓縮目錄

zip –r 指定壓縮文件 壓縮目錄

解包解壓縮

unzip sysconfig.zip

這個命令最大的亮點是可以壓縮目錄,其他命令暫時都不支持壓縮目錄。

示例:

cat /var/log/messages | zip message –

unzip -p message > message

EX.壓縮目錄,需要注意輸入命令時候的壓縮文件和目錄位置

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

EX.解壓目錄到指定路徑

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

Linux之bash shell腳本編程入門篇(二)以及文件查找和壓縮的使用

原創文章,作者:~微風~,如若轉載,請注明出處:http://www.www58058.com/36690

(0)
~微風~~微風~
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • rpm軟件包管理

    一:二進制應用程序組成部分 二進制文件(which command)、庫文件(ldd `which command`)、配置文件(.conf)、幫助文件(.README)等 二:rpm包文件的組成 rpm文件、rpm元數據(如名稱、依賴性關系等)、安裝或卸載時運行的腳本 三:rpm包數據庫: 1.組成部分(通過 ls /var/lib/rpm 來查…

    2017-08-13
  • awk與systemd

    GNU awkGNU awk 文本處理三工具:grep,sed,awk    grep,egrep,fgrep:文本過濾工具    sed:行(流)編輯器    awk:報告生成器,格式化文本輸出 awk awk: Aho, Weinberger, Kerni…

    Linux干貨 2016-09-22
  • 文件查找與壓縮-1

       1、 locate命令(非實時查找即數據庫查找) 1)、查詢系統上預建的文件索引數據庫/var/lib/mlocate/mlocate.db      依賴于事先構建的索引;索引的構建是在系統較為空閑時自動進行( 周期性任務) 或者管理員手動更新數據庫即是執行#updatedb命令;引構建過程…

    Linux干貨 2016-08-15
  • corosync+pacemaker對mariadb實現高可用

    corosync+pacemaker對mariadb實現高可用 利用nfs共享存儲,導出一個目錄作為mariadb的數據目錄,然后利用corosync+pacemaker對mariadb進行高可用 1、實驗環境 2、實驗前的分析 利用nfs導出目錄作為mariadb的共享目錄,要確保各個mariadb節點對該目錄具有寫權限,也就是要確保nfs服務器上有一個U…

    Linux干貨 2016-11-24
  • select循環解析

    前言:   select命令用于創建菜單,在select循環執行時會根據list數組給出選擇菜單,用戶選擇后的結果保存在變量中,然后給出菜單,等待用戶選擇。select是個死循環,如果用戶用戶想跳出選擇循環,需要在循環體中根據條件增加break語句。 格式: select variable in list do 循環體命令 done 示例: 在這個…

    Linux干貨 2016-08-24
  • Linux 內存管理

    1.Linux 進程在內存數據結構      可以看到一個可執行程序在存儲(沒有調入內存)時分為代碼段,數據段,未初始化數據段三部分:      1) 代碼段:存放CPU執行的機器指令。通常代碼區是共享的,即其它執行程序可調用它。假如機器中有數個進程運行相同的一個程序,那么它們就…

    Linux干貨 2015-04-13

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 14:31

    文章對當天總結的內容很進行了完整的總結和梳理,態度端正,作業完成的也很不錯,再接再厲。

欧美性久久久久