linux基礎學習第十天(文件查找與壓縮)

2016-08-12

授課內容:

shell的流程控制

文件查找和壓縮

shell的流程控制:

過程式編程語言:

順序執行

選擇執行

循環執行(未講)

順序執行:

if語句:

單分支

if 判斷條件; then

條件為真的分支代碼

fi

雙分支

if 判斷條件; then

條件為真的分支代碼

else

條件為假的分支代碼

fi

多分支

if CONDITION1; then

if-true

elifCONDITION2; then

if-ture

elifCONDITION3; then

if-ture

else

all-false

fi

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

注意,當then與if一行時,需要用;隔開,另起一行,則不需要添加;

例子:

[root@Centos7 shells]# cat createuser.sh 
#!/bin/bash
#Version:1.0
#Create time:2016-08-12 11:09:20
#Description:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息
read -p "please input a username: " USERNAME
#`id $USERNAM` &> /dev/null
if id $USERNAME &> /dev/null ; then
echo "the user exist" 
exit 100
else
useradd $USERNAME &> /dev/null 
echo "the user add sucessfully and its info is:`id $USERNAME`"
exit 99
fi
unset USERNAME

選擇執行:

        case語句

        case 變量引用 in

        PART1)

        COMMAND

        ;;

        PART2)

        COMMAND

        ;;

        *) #其他情況

        COMMAND

        ;;

        esac

        

case支持glob風格的通配符:

        *: 任意長度任意字符

        ?: 任意單個字符

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

        a|b: a或b

        

例子:

[root@Centos7 shells]# cat yesorno.sh 
#!/bin/bash
#Version:1.0
#Create time:2016-08-12 11:24:09
#Description:寫一個腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息
read -p "please input yes or no: " STRING
case $STRING in 
'yes'|'y'|'Y'|'YES')
echo "your answer is yes"
exit 100
;;
'no'|'n'|'N'|'no'|'n0')
echo "your answer is no"
exit 99
;;
*)
echo "your answer is other"
exit 98
esac
unset STRING

文件查找

    兩者的區別:locate是非實時查找(依賴于事先構建的數據庫索引),find是實時的遍歷查找

locate:

         locate [OPTION]… PATTERN…

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

         /var/lib/mlocate/mlocate.db

         ?依賴于事先構建的索引;

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

         ?索引構建過程需要遍歷整個根文件系統,極消耗資源;

         ?工作特點:

         查找速度快;

         模糊查找;

         非實時查找

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

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

find:實時的遍歷查找

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

        

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

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

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

                 查找條件:

                 1、文件名和inode號

                 -name “filename”  支持使用glob *, ?, [], [^]

                 -iname “filename” 忽略文件名大小寫

                 -inum 按照inode號來查找

                 -samefile “filenam” 相同inode號的文件

                 -links n :查找鏈接數為n的文件

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

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

                 -user “username”

                 -group “groupname”

                 -uid “uid”

                 -gid “gid”

                 -nouser:查找沒有屬主的文件,指的是用戶已刪除,但其文件還沒有刪除

                 -nogroup:

                 3、根據文件類型查找:

                 -type

                 f:普通文件

                 d:目錄文件 

                 b:

                 c:

                 p:

                 s:

                 l:

                 4、根據文件大小來查找:【理解數值的范圍】

                 -size [+|-]#size

                 常用單位:k, M, G

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

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

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

                 5、按照文件的時間戳查找:【理解數值的范圍】

                 以“天”為單位;

                 -atime[+|-]#,

                 #: [#,#+1)

                 +#: [#+1,∞]

                 -#: [0,#)

                 -mtime

                 -ctime

                 以“分鐘”為單位:

                 -amin

                 -mmin

                 -cmin

                 6、根據權限查找:

                 -perm [/|-]mode 

                 -perm 664:精確查找文件權限為664的文件

                 -perm /664:任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,【即屬主6,屬組6,其他4,只要滿足任意一個即可】

                 -perm -664:每一類對象都必須同時擁有指定權限,與關系,0 表示不關注,【即屬主擁有6,屬組擁有6,其他擁有4,必須滿足三個】

                 動作處理:

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

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

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

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

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

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

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

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

                  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)

文件壓縮:

         目的:壓縮后的文件大小會減少,減少磁盤空間支出

         大致原理:如文本love,會標記為一個單詞記號,這樣就可以大大縮減了文件大小,所以壓縮對純文本會特別明顯

壓縮格式:

         .Z .gz .bz2 .xz

         以上的壓縮工具只對單個文件進行壓縮,不能對整個目錄進行壓縮

壓縮工具:

             1、compress(其壓縮文件后綴是.Z,默認壓縮后刪除原文件)

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

             -d:解壓縮,相當于uncompress

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

             uncompress:解壓縮

             由于此壓縮工具壓縮效果不理想,已被淘汰

             2、gzip(其壓縮文件后綴是.gz,默認壓縮后刪除原文件)

             gzip [OPTION]… FILE …

             -d:解壓,相當于gunzip

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

             gunzip:解壓縮

             zcat file..:再不解壓原文件的情況下臨時查看壓縮文件的內容

             3、bzip2(其壓縮文件后綴是.bz2,默認壓縮后刪除原文件)

             bzip2 [OPTION]… FILE …

             -d:解壓,相當于bunzip2

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

             -k:保留原文件

             bunzip2:解壓縮

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

             4、xz(其壓縮文件后綴是.xz,默認壓縮后刪除原文件)

             -d:解壓,相當于unxz

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

             -k:保留原文件

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

歸檔(打包)工具tar

             tar [options] [新的打包文件名] [需要打包的文件…]

             -c:創建歸檔文件

             -f “filename”:打包的文件名前必須要加-f參數

             -z:以gzip方式壓縮歸檔文件

             -x:展開歸檔文件

             -t:不解歸檔的情況下查看歸檔的文件列表

            

             -zcf: 歸檔并調用gzip壓縮

             -zxf: 調用gzip解壓縮并展開歸檔,-z選項可省略

            

             -jcf: 歸檔并調用bzip2壓縮

             -jxf:調用bzip2解壓縮并展開歸檔,-j選項可省略

            

             -Jcf: 歸檔并調用xz壓縮

             -Jxf:調用xz解壓縮并展開歸檔,-J選項可省略

課后作業

一、

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

[root@Centos7 shells]# find /var -user root -group mail -ls
201327962    4 drwxrwxr-x   2 root     mail         4096 Aug 12 12:47 /var/spool/mail
206290473    0 -rw-rw----   1 root     mail            0 Jul 21 11:36 /var/spool/mail/hill

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

[root@Centos7 shells]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls
203220108    0 drwxr-xr-x   2 unbound  unbound        21 Jul 21 11:25 /var/lib/unbound
203220104    4 -rw-r--r--   1 unbound  unbound       758 Jul 21 11:25 /var/lib/unbound/root.key
68434676    0 drwx------   2 tss      tss             6 Nov 21  2015 /var/lib/tpm
952626    0 drwxr-xr-x   3 colord   colord         50 Jul 21 11:39 /var/lib/colord
68460309    0 drwxr-xr-x   2 colord   colord          6 Nov 20  2015 /var/lib/colord/icc
942229    4 -rw-r--r--   1 colord   colord       4096 Jul 21 11:39 /var/lib/colord/mapping.db
942230    8 -rw-r--r--   1 colord   colord       7168 Jul 21 11:39 /var/lib/colord/storage.db
991128    0 drwxr-xr-x   2 geoclue  geoclue         6 Nov 20  2015 /var/lib/geoclue
1008615    0 drwx------   2 rpc      rpc             6 Nov 20  2015 /var/lib/rpcbind
68499359    0 drwxr-xr-x   2 chrony   chrony          6 Nov 24  2015 /var/lib/chrony
1009006    0 drwx------   2 setroubleshoot setroubleshoot       69 Jul 21 11:40 /var/lib/setroubleshoot
942213    8 -rw-------   1 setroubleshoot setroubleshoot     6192 Aug  9 15:56 /var/lib/setroubleshoot/setroubleshoot_database.xml
942216    0 -rw-------   1 setroubleshoot setroubleshoot        0 Jul 21 11:40 /var/lib/setroubleshoot/email_alert_recipients
135338699    0 drwx------   4 rpcuser  rpcuser        28 Jul 21 11:26 /var/lib/nfs/statd
203627550    0 drwx------   2 rpcuser  rpcuser         6 Nov 20  2015 /var/lib/nfs/statd/sm
1051683    0 drwx------   2 rpcuser  rpcuser         6 Nov 20  2015 /var/lib/nfs/statd/sm.bak
1051684    0 -rw-r--r--   1 rpcuser  rpcuser         0 Nov 20  2015 /var/lib/nfs/state
203764897    0 drwxr-x--x   7 qemu     qemu           69 Jul 21 11:39 /var/lib/libvirt/qemu
2290015    0 drwxr-xr-x   2 qemu     qemu            6 Jul 21 11:39 /var/lib/libvirt/qemu/save
70292549    0 drwxr-xr-x   2 qemu     qemu            6 Jul 21 11:39 /var/lib/libvirt/qemu/snapshot
136778577    0 drwxr-xr-x   2 qemu     qemu            6 Jul 21 11:39 /var/lib/libvirt/qemu/dump
206290506    0 drwxr-xr-x   3 qemu     qemu           19 Jul 21 11:39 /var/lib/libvirt/qemu/channel
2301664    0 drwxr-xr-x   2 qemu     qemu            6 Jul 21 11:39 /var/lib/libvirt/qemu/channel/target
70292550    0 drwxr-xr-x   2 qemu     qemu            6 Jul 21 11:39 /var/lib/libvirt/qemu/nvram
68582074    0 drwx------   2 pulse    pulse           6 Nov 21  2015 /var/lib/pulse
205938566    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/lib/postfix
135286592    0 drwxr-xr-x   2 chrony   chrony          6 Nov 24  2015 /var/log/chrony
68478491    0 drwxrwxr-x   2 abrt     abrt            6 Dec  1  2015 /var/cache/abrt-di
135464204    0 drwxr-x---   3 qemu     qemu           25 Jul 21 11:39 /var/cache/libvirt/qemu
203424845    0 -rw-rw----   1 rpc      mail            0 Jul 21 11:25 /var/spool/mail/rpc
206354276    0 -rw-rw----   1 mandriva mail            0 Jul 28 15:46 /var/spool/mail/mandriva
206354278    0 -rw-rw----   1 fedora   mail            0 Jul 28 15:48 /var/spool/mail/fedora
206354310    0 -rw-rw----   1 gentoo   mail            0 Jul 30 14:20 /var/spool/mail/gentoo
206354320    0 -rw-rw----   1 harry    mail            0 Jul 30 14:21 /var/spool/mail/harry
206354325    0 -rw-rw----   1 sarah    mail            0 Jul 30 14:22 /var/spool/mail/sarah
205661267    0 -rw-rw----   1 user2    mail            0 Aug  1 17:41 /var/spool/mail/user2
205661307    0 -rw-rw----   1 user3    mail            0 Aug  1 17:41 /var/spool/mail/user3
205668959    0 -rw-rw----   1 user111  mail            0 Aug  2 19:43 /var/spool/mail/user111
205668942    0 -rw-rw----   1 openstack mail            0 Aug  3 09:27 /var/spool/mail/openstack
205668971    0 -rw-rw----   1 alice    mail            0 Aug  3 13:52 /var/spool/mail/alice
205668973    0 -rw-rw----   1 tom      mail            0 Aug  3 13:53 /var/spool/mail/tom
205668981    0 -rw-rw----   1 user1    mail            0 Aug  3 14:50 /var/spool/mail/user1
205668974    0 -rw-rw----   1 bash     mail            0 Aug  7 08:59 /var/spool/mail/bash
206386952    0 -rw-rw----   1 nihaoma  mail            0 Aug 12 11:20 /var/spool/mail/nihaoma
135065135    0 drwx------   2 abrt     abrt            6 Dec  1  2015 /var/spool/abrt-upload
69970443    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/active
136261128    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/bounce
205938567    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/corrupt
2013438    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/defer
69970444    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/deferred
136261129    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/flush
205938568    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/hold
2013439    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/incoming
69970445    0 drwx-wx---   2 postfix  postdrop        6 Jun 10  2014 /var/spool/postfix/maildrop
205938569    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/private
2013440    0 drwx--x---   2 postfix  postdrop        6 Jun 10  2014 /var/spool/postfix/public
69970446    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/saved
136261131    0 drwx------   2 postfix  root            6 Jun 10  2014 /var/spool/postfix/trace
2013448    0 drwx------   3 daemon   daemon         29 Jul 21 11:31 /var/spool/at
70013921    0 drwx------   2 daemon   daemon          6 Nov 20  2015 /var/spool/at/spool
2013450    0 -rw-------   1 daemon   daemon          0 Jul 21 11:31 /var/spool/at/.SEQ
821666    0 drwxr-xr-x   2 abrt     abrt            6 Jul 21 11:37 /var/tmp/abrt
2304665    4 -rw-rw----   1 3000     hill          595 Aug  2 14:50 /var/tmp/fstab

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

[root@Centos7 shells]# find /var/ -mtime -7 -not \( -user root -o -user postfix \) -ls
942213    8 -rw-------   1 setroubleshoot setroubleshoot     6192 Aug  9 15:56 /var/lib/setroubleshoot/setroubleshoot_database.xml
69210322    0 drwxrwx--T   6 gdm      gdm            79 Aug 12 08:30 /var/lib/gdm
205653757    4 -rw-r--r--   1 gdm      gdm            43 Aug 12 08:30 /var/lib/gdm/.pulse/d84e4562ec594069be53afee569c711e-default-sink
205653758    4 -rw-r--r--   1 gdm      gdm            42 Aug 12 08:30 /var/lib/gdm/.pulse/d84e4562ec594069be53afee569c711e-default-source
69338350    8 -rw-------   1 gdm      gdm          6514 Aug 12 08:30 /var/lib/gdm/.ICEauthority
69338355    0 drwxr-xr-x   2 gdm      gdm            17 Aug 12 08:30 /var/lib/gdm/.config/dconf
70297035    4 -rw-r--r--   1 gdm      gdm           451 Aug 12 08:30 /var/lib/gdm/.config/dconf/user
205653754    0 drwx------   2 gdm      gdm            52 Aug 12 08:30 /var/lib/gdm/.config/ibus/bus
205653736    4 -rw-r--r--   1 gdm      gdm           168 Aug 12 08:30 /var/lib/gdm/.config/ibus/bus/d84e4562ec594069be53afee569c711e-unix-0
69338356    0 drwx------   2 gdm      gdm            48 Aug 12 08:30 /var/lib/gdm/.local/share/telepathy/mission-control
70297036    4 -rw-------   1 gdm      gdm            38 Aug 12 08:30 /var/lib/gdm/.local/share/telepathy/mission-control/accounts-goa.cfg
203877581    4 drwxr-xr-x   2 lp       sys          4096 Aug  8 09:37 /var/log/cups
205668974    0 -rw-rw----   1 bash     mail            0 Aug  7 08:59 /var/spool/mail/bash
206386952    0 -rw-rw----   1 nihaoma  mail            0 Aug 12 11:20 /var/spool/mail/nihaoma

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

[root@Centos7 shells]# find / -nouser -o -nogroup -atime -7
find: ‘/proc/11789/task/11789/fd/6’: No such file or directory
find: ‘/proc/11789/task/11789/fdinfo/6’: No such file or directory
find: ‘/proc/11789/fd/6’: No such file or directory
find: ‘/proc/11789/fdinfo/6’: No such file or directory
/var/tmp/fstab

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

[root@Centos7 shells]# find /etc/ -size +1M -type f -ls
136448114 3772 -rw-r--r--   1 root     root      3858924 Nov 21  2015 /etc/selinux/targeted/policy/policy.29
206290485 6852 -r--r--r--   1 root     root      7014922 Jul 21 11:37 /etc/udev/hwdb.bin
135580237 1336 -rw-r--r--   1 root     root      1367395 Mar  6  2015 /etc/brltty/zh-tw.ctb

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

[root@Centos7 shells]# find /etc/ -not -perm /222 -ls
67378566  196 -r--r--r--   1 root     root       198453 Jul 21 11:23 /etc/pki/ca-trust/extracted/java/cacerts
134606432  352 -r--r--r--   1 root     root       359773 Jul 21 11:23 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
201787858  264 -r--r--r--   1 root     root       266702 Jul 21 11:23 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
201787859  216 -r--r--r--   1 root     root       217510 Jul 21 11:23 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
201787860  208 -r--r--r--   1 root     root       211626 Jul 21 11:23 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
631373    4 -r--------   1 root     root           45 Jul 21 11:24 /etc/openldap/certs/password
68464198    4 -r--r--r--   1 root     root          531 Sep  6  2015 /etc/lvm/profile/cache-mq.profile
68464199    4 -r--r--r--   1 root     root          338 Sep  6  2015 /etc/lvm/profile/cache-smq.profile
68464200    4 -r--r--r--   1 root     root         2249 Nov 21  2015 /etc/lvm/profile/command_profile_template.profile
68464201    4 -r--r--r--   1 root     root          828 Nov 21  2015 /etc/lvm/profile/metadata_profile_template.profile
68464202    4 -r--r--r--   1 root     root           76 Sep  6  2015 /etc/lvm/profile/thin-generic.profile
68464203    4 -r--r--r--   1 root     root           80 Sep  6  2015 /etc/lvm/profile/thin-performance.profile
203877169    4 -r--r--r--   1 root     root          460 Nov 20  2015 /etc/dbus-1/system.d/cups.conf
136828869    4 ----------   1 root     root         1183 Aug 12 12:47 /etc/gshadow
134996892    4 ----------   1 root     root         1197 Aug 12 12:47 /etc/gshadow-
136828764    4 ----------   1 root     root         2087 Aug 12 12:47 /etc/shadow
68500289    4 -r--r--r--   1 root     root           63 Nov 20  2015 /etc/ld.so.conf.d/kernel-3.10.0-327.el7.x86_64.conf
134997273    4 ----------   1 root     root         2119 Aug 12 12:47 /etc/shadow-
206290485 6852 -r--r--r--   1 root     root      7014922 Jul 21 11:37 /etc/udev/hwdb.bin
134997540    4 -r--r--r--   1 root     root           33 Jul 21 11:25 /etc/machine-id
68582624    4 -r--r--r--   1 root     root          146 Nov 20  2015 /etc/pam.d/cups
136634061    8 -r--r-----   1 root     root         4188 Jul  7  2015 /etc/sudoers

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

[root@Centos7 test]# find /etc -not -perm -111  -ls | wc -l
1891

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

[root@Centos7 shells]# find /etc/init.d -perm -111 -a -perm -002 -ls
134514558    0 lrwxrwxrwx   1 root     root           11 Jul 21 11:23 /etc/init.d -> rc.d/init.d

二、博客:

德·摩根定律

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

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

三、預習

原創文章,作者:麥德良,如若轉載,請注明出處:http://www.www58058.com/34861

(0)
麥德良麥德良
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相關推薦

欧美性久久久久