文件的查找

文件的查找

使用locate命令

默認從根開始搜索

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

locate 文件名

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

   /var/lib/mlocate/mlocate.db
依賴于事先構建的索引
索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)。注意工作中不能輕易使用updatedb

locate 選項

-i 執行區分大小寫的搜索
-n N 只列舉前N個匹配的項目

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示例

? find -name snow.png
? 搜索名為snow.png的文件
? find -iname snow.png
? 不分大小寫地搜索名為snow.png、 Snow.png、
SNOW.PNG等等的文件
? find / -name “*.txt”
? find /var –name “*log*”
? find -user joe -group joe
? 搜索被用戶joe 以及組群joe所擁有的文件

? find -user joe -not -group joe
? find -user joe -o -user jane
? find -not \( -user joe -o -user jane \)
? find / -user joe -o -uid 500

? 找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
find /tmp -not \( -user root -o -name 'f*' \) –ls
? 排除目錄
? 示例:查找/etc/下,除/etc/sane.d目錄的其它所有.conf后綴
的文件
find /etc -path ‘/etc/sane.d’ -a -prune
-o -name “*.conf” -print

根據文件大小來查找:

-size [+|-]#UNIT
常用單位: k, M, G
#UNIT: (#-1, #]
如: 6k 表示(5k,6k]
-#UNIT: [0,#-1]
如: -6k 表示[0,5k]
+#UNIT: (#,∞)
如: +6k 表示(6k,∞)

根據時間戳:

以“天”為單位;
-atime [+|-]#, 訪問時間改變
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
-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

find示例

? find -name “*.conf” -exec cp {} {}.org \;
? 備份配置文件,添加.org這個擴展名
? 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

練習:

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

find /var -user root -group mail

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

find /var -not -user root -not -user lp -not -user gdm

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

? 4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪
問過的文件
? 5、查找/etc目錄下大于1M且類型為普通文件的所有文件
? 6、查找/etc目錄下所有用戶都沒有寫權限的文件
? 7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
? 8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它
用戶有寫權限的文件

Gnome 搜索工具

? 位置->搜索文件……
? 圖形化搜索工具,可搜索
? 命令
? 內容
? 用戶/組群
? 大小
? 修改時間

壓縮、解壓縮及歸檔工具

? file-roller
? compress/uncompress: .Z
        ? compress [-dfvcVr] [-b maxbits] [file ...]
        -d: 解壓縮,相當于
        -c: 結果輸出至標準輸出,不刪除原文件
        -v: 顯示詳情
? uncompress 解壓縮
? zcat file.Z >file
? gzip/gunzip: .gz
        ? gzip [OPTION]... FILE ...
        -d: 解壓縮,相當于gunzip
        -c: 將壓縮或解壓縮的結果輸出至標準輸出
        -#: 1-9,指定壓縮比,值越大壓縮比越大
        ? zcat:不顯式解壓縮的前提下查看文本文件內容
        ? 實例:
        gzip -c messages >messages.gz
        gzip -c -d messages.gz > messages
        zcat messages.gz > messages
? bzip2/bunzip2: .bz2
        ? bzip2 [OPTION]... FILE ...
        -k: keep, 保留原文件
        -d:解壓縮
        -#: 1-9,壓縮比,默認為6
        ? bzcat:不顯式解壓縮的前提下查看文本文件內容
? xz/unxz: .xz
        ? xz [OPTION]... FILE ...
        -k: keep, 保留原文件
        -d:解壓縮
        -#: 1-9,壓縮比,默認為6
        ? xzcat: 不顯式解壓縮的前提下查看文本文件內容
? zip/unzip
        p/unzip
        ? 打包壓縮
        zip –r sysconfig sysconfig/
        ? 解包解壓縮
        unzip sysconfig.zip
        cat /var/log/messages | zip message -
        unzip -p message > message
? tar
        ? tar [OPTION]...
        (1) 創建歸檔
        tar -c -f /PATH/TO/SOMEFILE.tar FILE...
        tar cf /PATH/TO/SOMEFILE.tar FILE...
        (2) 查看歸檔文件中的文件列表
        tar -t -f /PATH/TO/SOMEFILE.tar
        (3) 展開歸檔
        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 一種較新的存儲方式

示例

? 將etc目錄備份:
find ./etc -print |cpio -ov >etc.cpio
? 內容預覽
cpio –tv < etc.cpio
? 要解包文件
cpio –iv <etc.cpio
cpio –idv < etc.cpio

作業:

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

[root@ Mr zhou  ~]# find /var -user root -a -group mail

文件的查找

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

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

文件的查找

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

[root@ Mr zhou  ~]# find /var -mtime -7 -not \( -user root -o  -name postfix \) -ls

文件的查找

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

[root@ Mr zhou  ~]# find -atime -7 -a \( - nouser -o - nogroup \)

文件的查找

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

[root@ Mr zhou  ~]# find /etc -size +1M -a -type f -l

文件的查找

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

[root@ Mr zhou  ~]# find /etc -not -perm -222

文件的查找

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

[root@ Mr zhou  ~]# find /etc/ -perm /111 -ls |head -4

文件的查找

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

[root@ Mr zhou  ~]# find /etc/init.d -perm -113 -ls

文件的查找

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

(0)
1515218807015152188070
上一篇 2016-08-18
下一篇 2016-08-18

相關推薦

  • 虛擬化介紹、以及kvm

    什么是虛擬化? 在計算機領域中虛擬化,和我們平時說的虛擬化并沒有什么兩樣,說白了就是一個虛擬出來的東西罷了,并不是真實存在的。 虛擬化的歷史 虛擬化早在20實際60年代末,由IBM開發被命名為vmm(Virtual Machine Monitor)虛擬機監視器的軟件,我們知道那時候工藝技術并不發達,電腦也不像現在這樣屬于每家每戶的標配,IBM為了解決電腦使用…

    2017-03-08
  • 馬哥教育網絡班21期-第八周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:是將廣播域劃分為多個小的沖突域,但廣播域沒有變。工作在OSI模型的數據鏈路層,端口很少;基于軟件;可以處理上層事務。集線器:對接收到的信號進行再生整形放大,擴大網絡傳輸距離;屬于純硬件網絡底層設備,工作在OSI模型的物理層,不具有交換機的”智能記憶”和”學習”的能力;也不具…

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

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) POST:加電自檢,主板檢測系統硬件。 BOOT sequence:依次查找引導設備(裝有引導程序) MBR:找到引導設備的主引導扇區引導記錄(446k bootloader 64k DPT 2k 結束標志) GRUB: 引導程序的一種,提供一個菜單,允許用戶選擇要啟動系統或不同的內…

    Linux干貨 2016-08-15
  • 文本處理練習題

    文本處理練習:   1.找出本機ip地址   [root@localhost ~]# ifconfig |head -2 |tail -1 |tr -s ' ' ':' |cut -d: -f3   10.1.252.221   2.查看本機分區最大的利用率   [root@l…

    Linux干貨 2016-08-08
  • 如何解決生產機上php代碼連接mysql報錯的故障

    大家好: 今天分享一則當生產機上的網站php代碼不能連接Mysql服務器時怎么辦? 當LNMP的網站建立好后,我們需要測試網站中的php代碼。但發現如下報錯怎么辦? 解決方法如下:  mysql> show databases; +——————–+ | Dat…

    Linux干貨 2016-12-18
  • 第五周

      第五周 1 顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;      grep "^[[:space:]]\+" /boot/grub/grub.conf 2 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至…

    Linux干貨 2017-01-02

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 13:16

    文章整體層次分明,思路清晰,對命令的常見用法總結的和詳細,find命令在工作中是用的比較多的,也是以后筆試必考的知識點,所以下來后多加練習,達到熟練掌握。

欧美性久久久久