條件選擇if 條件判斷case 文件查找 find locate 以及壓縮和解壓縮工具

1 shell腳本編程之 條件選擇if 條件判斷case  2 文件查找 find locate 以及壓縮和解壓縮工具

過程式編程語言: 

順序執行 

選擇執行 

循環執行

條件選擇之 if語句

選擇執行: ? 

注意:if語句可嵌套 ? 

 單分支 if 判斷條件:then 條件為真的分支代碼 fi 結束? 

 雙分支 if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi 結束

多分支 

if CONDITION1; then 

    if-true 

elif CONDITION2; then 

    if-ture 

elif CONDITION3; then 

    if-ture 

    … 

else 

    all-false 

fi ? 

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

例如

 根據命令的退出狀態來執行命令 

 if ping -c1 -W2 station1 &> /dev/null; then 

     echo 'Station1 is UP'  

 elif grep "station1" ~/maintenance.txt &> /dev/null then 

     echo 'Station1 is undergoing maintenance‘ 

 else 

     echo 'Station1 is unexpectedly DOWN!' 

     exit 1 

 fi

條件判斷:case語句 

case 變量引用 in 

PAT1) 

    分支1 

    ;; 

PAT2) 

    分支2 

    ;; 

… *) 

    默認分支 

    ;; 

esac

case支持glob風格的通配符: 

  *: 任意長度任意字符 

  ?: 任意單個字符 

  []:指定范圍內的任意單個字符 

  a|b: a或b

  文件查找之 locate 和 find

  文件查找:locate, find 

    locate:非實時查找(數據庫查找若想精確查找可更新數據庫 不過更新過程中很占用系統資源) 

    find:實時查找(屬于精確查找 不過查找速度較慢)

Locate

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

   文件索引數據庫的路徑:/var/lib/mlocate/mlocate.db ? 

   依賴于事先構建的索引; 

   索引的構建是在系統較為空閑時自動進行(周期性任務);管理 員手動更新數據庫(updatedb); ? 索引構建過程需要遍歷整個根文件系統,極消耗資源; ? 

   工作特點: 

   查找速度快; 

   模糊查找; 

   非實時查找 搜索的是文件的全路徑,不僅僅是文件名 可能只搜索用戶具備讀取和執行權限的目錄

locate命令 

locate KEYWORD ? 

有用的選項  

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

   -n  X 只列舉前X個匹配項目 ?

   locate  foo  搜索名稱或路徑中帶有“foo”的文件 ?

   locate  -r  ‘\.foo$’  使用Regex來搜索以“.foo”結尾的文件

Find

實時查找工具,通過遍歷指定路徑完成文件查找; ? 

工作特點: 

查找速度略慢 

精確查找 

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

語法: ?

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

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

查找條件:指定的查找標準,可以文件名、大小、類型、 權限等標準進行;默認為找出指定路徑下的所有文件 處理動作:對符合條件的文件做操作,默認輸出至屏幕

查找條件

1 文件名和inode查找

2屬主屬組查找

3文件類型查找

4文件件大小查找

5時間戳查找

6權限查找

根據文件名和inode查找: 

   -name "文件名稱":支持使用glob *, ?, [], [^] 

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

   -inum n  按inode號查找 

   -samefile name  相同inode號的文件 

   -links n   鏈接數為n的文件 -regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不僅僅是文件名稱

根據屬主、屬組查找: 

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

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

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

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

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

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

根據文件類型查找: 

   -type TYPE: 

   f: 普通文件 

   d: 目錄文件 

   l: 符號鏈接文件 

   s:套接字文件 

   b: 塊設備文件 

   c: 字符設備文件 

   p: 管道文件

根據文件大小來查找: 

-size [+|-]#UNIT 

  常用單位:k, M, G           

   #UNIT: (#-1, #],如:6   5-6 

   -#UNIT:[0,#-1], 如:-6  0-5

   +#UNIT:(#,∞),   如:+6  6-∞

根據時間戳: 

 以“天”為單位; 

   -atime [+|-]#,  

   #: [#,#+1)       如:6   6-7

   +#: [#+1,∞]      如:+6  6-∞

   -#: [0,#)        如:-6  0-6

   -mtime 

   -ctime 

以“分鐘”為單位: 

   -amin 

   -mmin 

   -cmin

根據權限查找: 

-perm [/|-]MODE 

   MODE: 精確權限匹配 

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

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

   find -perm 755 會匹配權限模式恰好是755的文件  

   只要當任意人有寫權限時,find -perm +222就會匹配 

   只有當每個人都有寫權限時,find -perm -222才會匹配  

   只有當其它人(other)有寫權限時,find -perm -002才 會匹配

處理動作

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

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

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

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

   -ok COMMAND {} \; 對查找到的每個文件執行由 COMMAND指定的命令; 對于每個文件執行命令之前,都會交互式要求用戶確認

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

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

   find傳遞查找到的文件至后面指定的命令時,查找到所有符合 條件的文件一次性傳遞給后面的命令 ? 有些命令不能接受過多參數,此時命令執行可能會失敗,下 面方式可規避此問題 find | xargs COMMAND 

組合條件: 

   與:-a 

   或:-o 

   非:-not, !

德·摩根定律: 非(P 且 Q) = (非 P) 或 (非 Q) 非(P 或 Q) = (非 P) 且 (非 Q)

!A -a !B = !(A -o B) !A -o !B = !(A -a B)

加括號取反

壓縮、解壓縮工具

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

   -d: 解壓縮,相當于 

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

   -v: 顯示詳情 ?

   uncompress 解壓縮 ?zcat file.Z >file

2 gzip [OPTION]… FILE … 

   -d: 解壓縮,相當于gunzip 

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

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

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

   實例: gzip -c messages  >messages.gz gzip -c -d messages.gz > messages zcat messages.gz > messages

3 bzip2 [OPTION]… FILE … 

   -k: keep, 保留原文件 

   -d:解壓縮 

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

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

4 xz [OPTION]… FILE … 

   -k: keep, 保留原文件; 

   -d:解壓縮 

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

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

5 打包壓縮 

   zip –r sysconfig sysconfig/ ? 

  解包解壓縮 

   unzip sysconfig.zip 

   cat /var/log/messages | zip message  

   unzip -p message > message

練習

1、查找/var目錄下屬主為root,且屬組為mail的所有文件

 find /var  -user root  -group  mail -ls

電腦演示

[root@localhost /]# find /var  -user root  -group  mail -ls

1443089    4 drwxrwxr-x   2 root     mail         4096 Aug 13 10:34 /var/spool/mail

1444185    4 -rw——-   1 root     mail         2688 Aug 13 09:38 /var/spool/mail/root

[root@localhost /]# 

2、查找/var目錄下不屬于root、lp、gdm的所有文件

 find /var -not \( -user root  -o -user lp -o -user gdm \) -ls

電腦演示

root@localhost /]# find /var  -user root  -group  mail -ls

1443089    4 drwxrwxr-x   2 root     mail         4096 Aug 13 10:34 /var/spool/mail

1444185    4 -rw——-   1 root     mail         2688 Aug 13 09:38 /var/spool/mail/root

[root@localhost /]# find /var -not \( -user root  -o -user lp -o -user gdm \) -ls

1443544    4 drwx–x—   2 postfix  postdrop     4096 Aug 12 13:57 /var/spool/postfix/public

1444012    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/public/showq

1444007    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/public/flush

1444000    0 prw–w–w-   1 postfix  postfix         0 Aug 13 11:34 /var/spool/postfix/public/qmgr

1443999    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/public/cleanup

1443998    0 prw–w–w-   1 postfix  postfix         0 Aug 13 11:38 /var/spool/postfix/public/pickup

1443543    4 drwx——   2 postfix  root         4096 Aug 12 13:57 /var/spool/postfix/private

1444014    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/private/retry

1444018    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/private/lmtp

1444017    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/private/virtual

1444016    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/private/local

1444019    0 srw-rw-rw-   1 postfix  postfix         0 Aug 12 13:57 /var/spool/postfix/private/anvil

3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件

 

 find /var  -mtime -7 -not \( -user root -o -user postfix \) -ls

電腦演示

[root@localhost /]# find /var  -mtime -7 -not \( -user root -o -user postfix \) -ls

1444198    0 -rw-rw—-   1 dadi     mail            0 Aug 13 10:18 /var/spool/mail/dadi

1444120    0 -rw-rw—-   1 tiantian mail            0 Aug 13 10:17 /var/spool/mail/tiantian

1444075    0 -rw-rw—-   1 tian     mail            0 Aug 12 14:53 /var/spool/mail/tian

1444174    0 -rw-rw—-   1 hh       mail            0 Aug 13 10:34 /var/spool/mail/hh

1443974    4 -rw-r–r–   1 rpcuser  rpcuser         5 Aug 12 13:56 /var/run/rpc.statd.pid

1443210    4 dr-x–x–x   2 lp       sys          4096 Aug 12 13:56 /var/run/cups/certs

1444136    4 drwx–x–x   2 gdm      gdm          4096 Aug 12 13:57 /var/run/gdm/auth-for-gdm-Z9Ky4G

1444186    4 -rw——-   1 gdm      gdm            66 Aug 12 13:57 /var/run/gdm/auth-for-gdm-Z9Ky4G/database

[root@localhost /]# 

4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件

 

 find / \( -atime -7  -nouser  -o -nogroup \) -ls

電腦演示

[root@localhost /]# find / \( -atime -7  -nouser  -o -nogroup \) -ls

find: `/proc/5584/task/5584/fd/5': No such file or directory

find: `/proc/5584/task/5584/fd/5': No such file or directory

find: `/proc/5584/task/5584/fdinfo/5': No such file or directory

find: `/proc/5584/task/5584/fdinfo/5': No such file or directory

find: `/proc/5584/fd/5': No such file or directory

find: `/proc/5584/fd/5': No such file or directory

find: `/proc/5584/fdinfo/5': No such file or directory

find: `/proc/5584/fdinfo/5': No such file or directory

[root@localhost /]# 

5、查找/etc目錄下大于1M且類型為普通文件的所有文件

 

 find /etc -size  +1M -type f

電腦演示

[root@localhost /]# find /etc -size  +1M -type f

/etc/selinux/targeted/modules/active/policy.kern

/etc/selinux/targeted/policy/policy.24

/etc/gconf/gconf.xml.defaults/%gconf-tree.xml

[root@localhost /]# 

6、查找/etc目錄下所有用戶都沒有寫權限的文件

 

 find /etc/  -not    -perm  /222 -ls

 find /etc/  -not    -perm  +222 -ls

電腦演示

[root@localhost /]# find /etc/  -not    -perm  /222 -ls

787420    4 -r–r–r–   1 root     root          460 May 11 13:00 /etc/dbus-1/system.d/cups.conf

788058    4 -r–r–r–   1 root     root          324 May 11 01:32 /etc/ld.so.conf.d/kernel-2.6.32-642.el6.x86_64.conf

786821    4 -r——–   1 root     root           45 Jul 19 20:17 /etc/openldap/certs/password

786733  192 -r–r–r–   1 root     root       194984 Jul 19 20:17 /etc/pki/ca-trust/extracted/java/cacerts

786729  340 -r–r–r–   1 root     root       346654 Jul 19 20:17 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt

786730  256 -r–r–r–   1 root     root       262042 Jul 19 20:17 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

786731  204 -r–r–r–   1 root     root       208874 Jul 19 20:17 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem

786732  208 -r–r–r–   1 root     root       208976 Jul 19 20:17 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

788589    4 -r–r–r–   1 root     root          338 Feb 22 07:18 /etc/lvm/profile/cache-smq.profile

788591    4 -r–r–r–   1 root     root          828 May 11 18:18 /etc/lvm/profile/metadata_profile_template.profile

788593    4 -r–r–r–   1 root     root           80 Feb 22 07:18 /etc/lvm/profile/thin-performance.profile

788590    4 -r–r–r–   1 root     root         2391 May 11 18:18 /etc/lvm/profile/

7、查找/etc目錄下至少有一類用戶沒有執行權限的文件

 

 find /etc/ -not  -perm -111 -ls 

文件太多 不予顯示

8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

 

 find /etc/init.d/  -perm -111 -a -perm /002  

 find /etc/init.d/  -perm -113 

電腦演示

[root@localhost /]# find /etc/init.d/  -perm -111 -a   -perm /002  

/etc/init.d/

/etc/init.d/f1

[root@localhost /]# find /etc/init.d/  -perm -113 

/etc/init.d/

/etc/init.d/f1

[root@localhost /]# 

原創文章,作者:a1215276209,如若轉載,請注明出處:http://www.www58058.com/34768

(0)
a1215276209a1215276209
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • Linux用戶操作、文件操作、文件篩選

    Linux用戶操作、文件操作、文件篩選 編輯/etc/group文件,添加組hadoop。手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。 vim /etc/group hadoop:x:1001: vim /etc/passwd hadoop:x…

    Linux干貨 2016-11-17
  • Linux用戶組管理

    馬哥網絡教育21期+第三周練習 用戶及用戶組 用戶配置文件     用戶:UID,/etc/passwd     組:GID,/etc/group 密碼配置文件     用戶:/etc/shadow    &n…

    Linux干貨 2016-09-02
  • MAN 手冊各章節功能及快捷鍵鍵位介紹

      man命令在linux下屬于一種幫助命令,man手冊提供了比較齊全的幫助格式,它大致分為8個章節 一.各個章節如下 1 – commands 1-普通的命令 (用戶命令,  可由任何人啟動的) 2 – system calls 2-系統調用,如open,write之類的(通過這個,至少可以很方便的查到調用這個函…

    Linux干貨 2016-10-17
  • 馬哥教育網絡班21期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 # who | cut -d' ' -f1 | uniiq 2、取出最后登錄到當前系統的用戶的相關信息。 # id $(who | …

    Linux干貨 2016-07-12
  • 文本處理工具應用練習

    練習:  1 、找出ifconfig 命令結果中本機的IPv4 地址 思路:我們使用ifconfig命令可知,ip地址是在第二行,所以我們先篩選出第二行,       第二行中的分隔符看起來很混亂,都是不規則的,有一個空格或多個空格的,沒有標準       所以我們最好是建立一個標準分隔,…

    Linux干貨 2016-08-08
  • LVM

    LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地…

    Linux干貨 2016-12-17
欧美性久久久久