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]… [查找路徑] [查找條件] [處理動作]

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

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

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

    查找條件

    根據文件名和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: 管道文件

    組合條件:

        與: -a

        或: -o

        非: -not, !

        德·摩根定律:

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

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

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

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

    例: find -not -perm -111 -a -not -type f 等于 find -not \( -perm -111 -o -type f\)

       find -not -name "wang" -o -not -size 10M 等于 find -not \( -name "name" -a -size 10M \)

[root@www ~]# find /sh.log/ -name *.sh
/sh.log/cheskdisk.sh
/sh.log/createuser.sh
/sh.log/sumid.sh
....
搜索sh.log目錄下名字里有.sh的文件
[root@www ~]# find /wang/ -iname *.sh
/wang/jiaoben2.sh
/wang/jiaoben1.sh
/wang/laowang.Sh
/wang/wang.sH
不分大小寫的搜索sh.log目錄下名字里有.sh的文件
[root@www ~]# find / -user wang -ls -a -group wang -ls
   131    0 drwx------   2 wang     wang           79 Aug 11 15:05 /home/wang
   131    0 drwx------   2 wang     wang           79 Aug 11 15:05 /home/wang
   132    4 -rw-r--r--   1 wang     wang           18 Nov 20  2015 /home/wang/.bash_logout
   132    4 -rw-r--r--   1 wang     wang           18 Nov 20  2015 /home/wang/.bash_logout
   133    4 -rw-r--r--   1 wang     wang          193 Nov 20  2015 /home/wang/.bash_profile
   133    4 -rw-r--r--   1 wang     wang          193 Nov 20  2015 /home/wang/.bash_profile
   134    4 -rw-r--r--   1 wang     wang          231 Nov 20  2015 /home/wang/.bashrc
   134    4 -rw-r--r--   1 wang     wang          231 Nov 20  2015 /home/wang/.bashrc
   135    4 -rw-------   1 wang     wang          413 Aug 12 06:02 /home/wang/.bash_history
   135    4 -rw-------   1 wang     wang          413 Aug 12 06:02 /home/wang/.bash_history
搜索/下用戶和組都屬wang的文件
   [root@www ~]# find /wang/ -not \( -user wang  -o -name jiaoben* \) -ls
   882    0 drwxr-xr-x   2 root     root           97 Aug 13 01:38 /wang/
696024    4 -rwxrwxrwx   1 root     root           16 Aug 11 11:21 /wang/file2
696000    0 -r---w---x   1 root     root            0 Aug 11 23:36 /wang/file1
697357    0 -rw-r--r--   1 root     root            0 Aug 13 01:38 /wang/laowang.Sh
697360    0 -rw-r--r--   1 root     root            0 Aug 13 01:38 /wang/wang.sH
搜索/wang目錄下不是屬主是wang,名字里不包含jiaoben的文件
  
[root@www ~]# find /etc/ -path '/etc/sane.d' -a -prune -o -name *.conf -print 
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf
/etc/yum/pluginconf.d/langpacks.conf
/etc/yum/protected.d/systemd.conf
/etc/yum/version-groups.conf
/etc/yum/yum-cron-hourly.conf
/etc/yum/yum-cron.conf
/etc/lvm/lvm.conf
/etc/lvm/lvmlocal.conf
/etc/dracut.conf
/etc/depmod.d/dist.conf
/etc/libuser.conf
/etc/audit/auditd.conf
...
搜索/etc/下排除/etc/sane.d目錄的名字中含有.conf的文件

    根據文件大小來查找:

        -size [+|-]#UNIT

            常用單位: k, M, G

            #UNIT: (#-1, #],

                例:6k表示6k-5k

            -#UNIT: [0,#-1], 

                例:-6k表示0k-5k

            +#UNIT: (#,∞), 

                例:+6k表示6k以上

    根據時間戳:

        以“天”為單位;

            -atime [+|-]#, 

                #: [#,#+1)

                    例:10表示10天-11天

                +#: [#+1,∞]

                    例:+10表示11天以上

                -#: [0,#)

                    例:-10表示0天-10天

            -mtime

            -ctime

        以“分鐘”為單位:

            -amin

            -mmin

            -cmin

    根據權限查找:

        -perm [/|-]MODE

        MODE: 精確權限匹配

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

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

            0 表示不關注

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

        只要當任意人有寫權限時, find -perm +222就會匹配(/centos7,+centos6)或者的關系。

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

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

    處理動作

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

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

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

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

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

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

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

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

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

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

        find | xargs COMMAND

find 實例

    find -name “*.conf” -exec cp {} {}.org \;

備份配置文件,添加.orig這個擴展名

    find /tmp -ctime +3 -user joe -ok rm {} \;

提示刪除存在時間超過3天以上的joe的臨時文件

    find ~ -perm -002 -exec chmod o-w {} \;

在你的主目錄中尋找可被其它用戶寫入的文件

    find /data –type f -perm 644 -name *.sh –exec chmod 755 {} \;

    find /home –type d -ls

[root@www wang]# ll
total 12
-r---w---x. 1 root root   0 Aug 11 23:36 file1
-rwxrwxrwx. 1 root root  16 Aug 11 11:21 file2
-rwxr-xr-x. 1 root root 337 Aug 13 00:54 jiaoben1.sh
-rw-r--r--. 1 root root 345 Aug 13 01:14 jiaoben2.sh
-rw-r--r--. 1 root root   0 Aug 13 01:38 laowang.Sh
-rw-r--r--. 1 root root   0 Aug 13 01:38 wang.sH
[root@www wang]# find /wang/ -perm 644 -exec chmod 755 {} \;
[root@www wang]# ll
total 12
-r---w---x. 1 root root   0 Aug 11 23:36 file1
-rwxrwxrwx. 1 root root  16 Aug 11 11:21 file2
-rwxr-xr-x. 1 root root 337 Aug 13 00:54 jiaoben1.sh
-rwxr-xr-x. 1 root root 345 Aug 13 01:14 jiaoben2.sh
-rwxr-xr-x. 1 root root   0 Aug 13 01:38 laowang.Sh
-rwxr-xr-x. 1 root root   0 Aug 13 01:38 wang.sH

三、Gnome 搜索工具

    位置->搜索文件……

    圖形化搜索工具,可搜索

        命令

        內容

        用戶/組群

        大小

        修改時間

四、壓縮、解壓縮及歸檔工具

    file-roller

    compress/uncompress: .Z

    gzip/gunzip: .gz

    bzip2/bunzip2: .bz2

    xz/unxz: .xz

    zip/unzip

    tar

    cpio

    compress/uncompress

        壓縮后綴.z

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

            -d: 解壓縮,相當于

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

            -v: 顯示詳情

        uncompress 解壓縮

        zcat file.Z >file 解壓縮

[root@www compression]# ll
total 10128
-rw-r--r--. 1 root root 10369933 Aug 13 03:49 testfile
[root@www compression]# compress -c testfile > testfile.Z
[root@www compression]# ll
total 11688
-rw-r--r--. 1 root root 10369933 Aug 13 03:49 testfile
-rw-r--r--. 1 root root  1595043 Aug 13 03:59 testfile.Z

    gzip/gunzip

        壓縮后綴.gz

        gzip [OPTION]… FILE …

            -d: 解壓縮,相當于gunzip

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

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

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

[root@www compression]# gzip -c testfile > testfile.gz
[root@www compression]# ll
total 11960
-rw-r--r--. 1 root root 10369933 Aug 13 03:49 testfile
-rw-r--r--. 1 root root   276566 Aug 13 04:03 testfile.gz
-rw-r--r--. 1 root root  1595043 Aug 13 03:59 testfile.Z

    bzip2/bunzip2/bzcat

        壓縮后綴.bz2

        bzip2 [OPTION]… FILE …

            -k: keep, 保留原文件

            -d:解壓縮

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

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

[root@www compression]# bzip2 -k testfile
[root@www compression]# ll
total 12196
-rw-r--r--. 1 root root 10369933 Aug 13 03:49 testfile
-rw-r--r--. 1 root root   238536 Aug 13 03:49 testfile.bz2
-rw-r--r--. 1 root root   276566 Aug 13 04:03 testfile.gz
-rw-r--r--. 1 root root  1595043 Aug 13 03:59 testfile.Z

    xz/unxz/xzcat

        壓縮后綴.xz

        xz [OPTION]… FILE …

            -k: keep, 保留原文件;

            -d:解壓縮

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

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

[root@www compression]# xz -k testfile
[root@www compression]# ll
total 12308
-rw-r--r--. 1 root root 10369933 Aug 13 03:49 testfile
-rw-r--r--. 1 root root   238536 Aug 13 03:49 testfile.bz2
-rw-r--r--. 1 root root   276566 Aug 13 04:03 testfile.gz
-rw-r--r--. 1 root root   110664 Aug 13 03:49 testfile.xz
-rw-r--r--. 1 root root  1595043 Aug 13 03:59 testfile.Z

    zip/unzip

    壓縮目錄

        zip –r 壓縮生成文件路徑  要壓縮目錄的路徑

     解壓目錄

        unzip sysconfig.zip 默認解壓到當前目錄下

    壓縮文件

        zip 要壓縮的文件 壓縮文件名

        unzip -p message > message

五、tar歸檔

    tar [OPTION]…

    創建歸檔

        tar -c -f /PATH/TO/SOMEFILE.tar FIL文件查找

        tar cf /PATH/TO/SOMEFILE.tar FILE…

    查看歸檔文件中的文件列表

        tar -t -f /PATH/TO/SOMEFILE.tar

    展開歸檔

        tar -x -f /PATH/TO/SOMEFILE.tar

        tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/

    結合壓縮工具實現:歸檔并壓縮

        -j: bzip2, -z: gzip, -J: xz

六、cpio

    復制 從或到文件

    cpio命令是通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以“ .cpio”或者“ .tar”結尾的文件。

    cpio [選項] > 文件名或者設備名

    cpio [選項] < 文件名或者設備名

    選項

        -o 將文件拷貝打包成文件或者將文件輸出到設備上

        -i 解包,將打包文件解壓或將設備上的備份還原到系統

        -t 預覽,查看文件內容或者輸出到設備上的文件內容

        -v 顯示打包過程中的文件名稱。

        -d 解包生成目錄,在cpio還原時,自動的建立目錄

        -c 一種較新的存儲方式

[root@www ~]# find /etc -print |cpio -o &> /wang/etc.cpio
[root@www ~]# ll -h /wang/etc.cpio 
-rw-r--r--. 1 root root 19M Aug 13 04:50 /wang/etc.cpio

    內容預覽

        cpio –tv < etc.cpio

    要解包文件

        cpio –iv <etc.cpio

        cpio –idv < etc.cpio

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

(0)
DYWDYW
上一篇 2016-08-18 10:10
下一篇 2016-08-18 13:48

相關推薦

  • Homework Week-2 Linux文件管理

    1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理工具:cp, mv, rm         cp命令:copy  源文件  目標文件                單源復制:cp [O…

    Linux干貨 2016-08-22
  • linux發行版說明和哲學思想,以及常用命令說明

    Linux發行版主要流行的版本有3種:debian,slackware,red 其說明和特點如下圖。 Linux哲學思想: 1、一切皆文件;所有的一切都變成了文件!不光是軟件方面的比如傳統文件、目錄、字符設備、還包括硬件或者接口。如鼠標/mouse、打印機/lp、還有接口比如/usb. 2、單一目的的小程序;一個程序只負責干一件事,而且要把這個任務做好。 3…

    Linux干貨 2016-10-30
  • 馬哥教育網絡班20期+第6周課程練習

    請詳細總結vim編輯器的使用并完成以下練習題 vim三種模式: 用法:vim [option…] FILE 編輯模式:     字符跳轉:         h:向左移動一個字符     &…

    系統運維 2016-07-22
  • N26-博客作業-week15

    1、總結sed和awk的詳細用法 sed: 語法結構 sed [OPTION]…’script’ [input-file]…[action] -r:支持擴展正則表達式 -n:不輸出模式空間中的內容至屏幕 -e script1 -e script2 -e script3:指定多腳本運行 -f /path/to/script_file:從指定的文件中讀取…

    Linux干貨 2017-07-14
  • rsyslog+mysql+loganalyzer 搭建日志服務器及監控

    rsyslog 日志:歷史事件; 歷史事件:時間、地點、事件; syslog: klogd:kernel yslogd:system(application) 事件記錄格式:日期時間 主機 進程[pid]:事件內容; C/S架構;通tcp或udp協議的服務完成日志記錄的傳送; rsyslog: rsyslog的特性: – 多線程; –…

    Linux干貨 2017-01-10
  • N26-博客作業-week9

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i nologin_num=0,login_num=0 for i in $(cut -d: -f7 /etc/passwd); do if …

    Linux干貨 2017-04-01

評論列表(1條)

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

    find命令是筆試中??嫉闹R點,需要多加練習,熟練掌握。

欧美性久久久久