linux中文件查找的常用命令

来源:https://www.cnblogs.com/fengciaimei/archive/2020/05/03/12824419.html
-Advertisement-
Play Games

文件查找 小編在學這堂課的前一天夜裡打嗝打了半宿,第二天上課的時候迷迷糊糊,所以,導致文件查找這章我放了好久的鴿子。 這裡是回看視頻摘出來的筆記。如有理解有偏差,請留言。 本篇只有3個命令,重點是find,時間有限的朋友可以只看find命令。這太過重要了。 whereis命令 在一些特定的目錄搜索, ...


文件查找

小編在學這堂課的前一天夜裡打嗝打了半宿,第二天上課的時候迷迷糊糊,所以,導致文件查找這章我放了好久的鴿子。

這裡是回看視頻摘出來的筆記。如有理解有偏差,請留言。

本篇只有3個命令,重點是find,時間有限的朋友可以只看find命令。這太過重要了。

 

whereis命令
        在一些特定的目錄搜索,搜索二進位文件、幫助文件、源文件等

        選項:
                        不加任何選項就會列出所有文件。
            -b            只搜索二進位文件
            -m            只搜索幫助文件
            -s            只搜索源文件
            -l            列出whereis搜索的路徑,也就是whereis會在這些路徑下搜索內容
            -u            不是上述三類文件的其它類型文件。
       



locate命令
        用來快速搜索文件的工具,是根據索引資料庫搜索的。數據路位置/var/lib/mlocate/mlocate.db
        
        1、新系統可能沒有這個資料庫,updatedb命令可以手工更新資料庫
        2、updatedb這個命令會消耗大量的IO    需要在系統不繁忙的時候更新
        3、updatedb命令會根據/etc/updatedb.conf的設定取搜索硬碟內的文件名,並保存在/var/lib/mlocate目錄下的資料庫內。
        
        locate命令            主要用來搜索靜態文件
            -i        不區分大小寫搜索
            -r        使用基本正則表達式
            -b        只搜索文件名,而不搜索全路徑。預設是搜索全路徑
            -c        計數
            -n #    只顯示前幾個搜索結果
            -S        顯示locate資料庫信息
        
            備註:
                locate不能指定文件搜索路徑,要想指定搜索路徑需要手工使用正則表達式指定,祥看示例
                locate不是實時搜索,而且是模糊搜索
                locate預設會搜索文件的全路徑,不僅僅是文件名,意思是如果目錄包含某個關鍵詞,目錄下的所有文件都會被搜索到
                locate只會搜索當前用戶能訪問到的目錄,意思是如果某個用戶對某個目錄沒有訪問許可權,該目錄就不會被搜索
            示例說明:指定搜索路徑{
                [root@CentOS7 scripts]#locate -r "^/data/scripts/.*\.sh"
                /data/scripts/FOOT.sh
                /data/scripts/adddescrption.sh
                /data/scripts/arg.sh
                /data/scripts/arg2.sh
                /data/scripts/argsnum.sh
                /data/scripts/backup_etc.sh
                /data/scripts/bim.sh
                /data/scripts/checkdisk.sh
                /data/scripts/checkint.sh
                /data/scripts/createuser.sh
                /data/scripts/df_warning.sh}

find命令
        實時查找,精確查找,查找條件豐富,只搜索具有許可權的目錄
        
        find [OPTIONS]  [查找路徑]    [查找條件]    [處理動作]
            預設是遞歸搜索,預設是搜索當前目錄
        

選項:
            -maxdepth #         最大搜索深度,指定搜索目錄下搜索到第幾級
            -mindepth #        最小搜索深度,
            
            -depth或-d        一般是先搜索文件夾,再去搜索文件夾內的文件。如果加上該選項-d,就會先搜索文件,在搜索目錄

 

查找條件:
            根據文件名搜索
                -name 文件名      根據文件名搜索,精確匹配而不是模糊搜索。支持通配符
                        如果想要模糊搜索,可以使用   "*文件名*"   建議在使用通配符的時候要加上雙引號,要不會產生各種莫名奇妙的問題
                -iname 文件名      不區分大小寫搜索
                -inum INODE         根據INODE節點號搜索,可以用來搜索硬鏈接
            
                -samefile 文 件名     搜索相同節點編號的文件,需要註意的是,需要搜索同一分區內的相同節點編號
                -links    #          根據鏈接數為#這個條件進行搜索
                -regex "PATTERN"      以PATTERN匹配整個文件路徑,而非文件名稱
            
            根據屬性信息搜索
                -user    用戶名         根據所有者搜索
                -group    組名          根據所屬組搜索
                -nouser    用戶名     搜索沒有所有者的文件
                -nogroup 組名        搜索沒有所屬組的文件
                -uid   UID               根據UID查找
                -gid   GID               根據GID查找
            
            根據文件類型搜索
                -type  TYPE            根據文件類型搜索
                    TYPE:
                        d            查找文件類型為目錄的所有文件
                        f            查找文件類型為普通文件的所有文件
                        p            查找文件類型為管道文件的所有文件
                        s            查找文件類型為套接字的所有文件
                        c            查找文件類型為字元設備的所有文件
                        b            查找文件類型為塊設備的所有文件
                        l            查找文件類型為軟連接的所有文件
                        
                        
            搜索空文件或目錄
                -empty                搜索空文件或者文件夾
            
            
            組合條件
                -a    與            預設就是按照並且條件搜索多個條件
                -o    或
                -not|!  非
                        
                因為與的優先順序高於或的優先順序,可以使用()擴起或的選項以提高或的優先順序,()需要轉義寫成\( \)
            
                德*摩根定律:
                    (非A)或(非B)=非(A且B)
                    (非A)且(非B)=非(A或B)
                
            排除特定目錄搜索
                -path 排除文件夾路徑 -a -prune -o -name 文件名    指定不搜那些文件夾
                  例:

        find / \( -path "/sys" -o -path "/proc"\) -a -prune -o -name "*.conf"
                
                  # 搜索除/proc和/sys目錄以外的所有路徑下的以.conf結尾的文件
                    find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -name "*.conf"
            
            根據文件大小搜索
                -size [+|-] #UNIT
                        常用單位k M G c(byte)  註意大小寫
                    6k    表示 (5k,6k],包括6K不包括5K
                    -6k     表示 [0k,6-1k],包括0k也包括5k,兩個之間
                    +6k     表示(6K,oo),不包含6k
                    
                    
                    -size 1024k和-size 1M的區別
                        -size 1024k        會搜索到1023k到1024k之間的文件
                        -size 1M        會搜索到0到1M之間的文件
            
            根據時間戳查找
                -atime [+|-]#
                    +10    表示11天以前的文件
                    -1    表示最近一天內的文件
                    10    表示10天到11天內,
                -mtime [+|-]#
                -ctime [+|-]#
                
                -mmin  [+|-]#    表示按分鐘搜索
                -amin  [+|-]#
                -cmin  [+|-]#
            
            根據許可權搜索
                -perm [/|-] MODE    
                    MODE:精確許可權匹配
                    /MODE    任何一類(u g o)對象的任何一位許可權(r w x)中,只要能匹配一位許可權就能搜索到,是或的關係
                    -MODE    表示任何一類(u g o)對象的許可權中r w x三者都完滿條件才匹配,是並且的關係
                    
                    如果MODE中三類對象中有一位是0,表示對應該類對象無論有沒有許可權無所謂
                備註,在centos7後,+的寫法開始淘汰,使用/代替了
        
                find -perm 755          會精確搜索許可權是755的文件
                find -perm /222      只要任何一類用戶有寫許可權就會匹配。或者說,至少有一類用戶有寫許可權就會匹配
                find -perm /111      只要任何一類用戶有寫許可權的就會匹配。或者說,至少有一類用戶有執行許可權就會匹配
                find -perm /666      只要任何一類用戶有讀或者有寫許可權就會匹配。
                find -perm /001      其他用戶有執行許可權的文件才會匹配
                find -perm /002      其他用戶有寫許可權的文件才會匹配
                find -perm -222      只有當文件的所有者、所屬組、其他人三類用戶都有寫許可權才會匹配
                find -perm -002      只要其它人具有寫許可權就會匹配,和find -perm /002的作用相同
                find -perm -022      所屬組和其他人都具有寫許可權就會匹配
                find -perm 002       只匹配 --- --- -w-許可權的文件
       

處理動作
            -print            預設,會把搜索結果列印屏幕,預設是以空格作為分割符。可以使用pring0選項改成使用nul作為分隔符
            -ls                把搜索的文件的詳細屬性顯示出來
            -fls /PATH/TO/FILE        查找到的每個文件長格式顯示保存至指定文件,相當於 -ls > /PATH/TO/FILE
            -delete            把搜索到的文件刪除,太危險,慎用
            
            -ok COMMAND {} \;    對查找到的每個文件交由COMMAND指定的命令執行,但是在執行前會互動式提問
            -exec COMMAND {} \;    對超找到的每個文件交由COMMAND指定的命令執行,不會交互提問直接執行
                    {} 指的是find搜索的的文件,可以想成一個變數,此變數引用find搜索到的文件
                    \;    交由COMMAND執行 必須要有\;結束
                    
                find /data -exe rm {} \        刪除搜索到的文件
                find /var -size +10M -mtime +10 -ok mv {} /data \    把在VAR下搜索到的大於10M時間超過10天之前的文件移動到data目錄下
                find /data -name "*.txt" -exec cp {} {}.bak \;        批量加尾碼。註意雙{}的使用
            
            小技巧:利用find 和 mv 組合批量加尾碼名:
          

                [root@CentOS7 tmp]# ll
                total 0
                -rw-r--r-- 1 root root 0 May  3 05:40 a
                -rw-r--r-- 1 root root 0 May  3 05:40 b
                -rw-rw-rw- 1 root root 0 May  3 05:40 c
                -rw-r--r-- 1 root root 0 May  3 05:40 d
                -rw-r--r-- 1 root root 0 May  3 05:40 e
                -r-------- 1 root root 0 May  3 05:40 f
                -rw-r--r-- 1 root root 0 May  3 05:40 g
                [root@CentOS7 tmp]# find . -type f -exec mv {} {}.haha \;        #小技巧利用find和mv組合批量加尾碼名
                [root@CentOS7 tmp]# ll
                total 0
                -rw-r--r-- 1 root root 0 May  3 05:40 a.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 b.haha
                -rw-rw-rw- 1 root root 0 May  3 05:40 c.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 d.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 e.haha
                -r-------- 1 root root 0 May  3 05:40 f.haha
                -rw-r--r-- 1 root root 0 May  3 05:40 g.haha
                [root@CentOS7 tmp]# 

 

 


  練習:
        1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;
            find /var -user root -a -group mail -ls
        
        2、查找/usr目錄下不屬於root,bin或hadoop的所有文件或目錄;用兩種方法;
            find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
            find /user -not -user root -a -not -user bin -a -not -user hadoop -ls
        
        3、查找/etc目錄下最近一周內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄;
            find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
            find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
        
        4、查找當前系統上沒有屬主或屬組,且最近一周內曾被訪問過的文件或目錄;
            find \( -nouser -o -nogroup \) -a -atime -7 -ls
        
        5、查找/etc目錄下大於1M且類型為普通文件的所有文件;
            find /etc/ -size +1M -a -type f -ls
        
        6、查找/etc目錄下所有用戶都沒有寫許可權的文件;
            find /etc -not -perm /222 -type f -ls
        
        7、查找/etc目錄至少有一類用戶沒有執行許可權的文件;
            find /etc -not -perm -111 -type f -ls
        
        8、查找/etc/init.d/目錄下,所有用戶都有執行許可權,且其它用戶有寫許可權的所有文件;
            find /etc/init.d -perm -113 -type f -ls    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題05. 替換空格 題目 請實現一個函數,把字元串 s 中 ...
  • 1 簡介 是一個非常強大和流行的高性能Web伺服器。本文講解 如何整合 並將 重定向到 。 相關文章如下: (1) "Springboot整合https原來這麼簡單" (2) "HTTPS之密鑰知識與密鑰工具Keytool和Keystore Explorer" (3) "Springboot以Tom ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題04. 二維數組中的查找 題目 在一個 n m 的二維數 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題03. 數組中重覆的數字 題目 找出數組中重覆的數字。 ...
  • Session 1. 概念:伺服器端會話技術,在一次會話的多次請求間共用數據,將數據保存在伺服器端對象中。HttpSession 2. 快速入門 1. 獲取HttpSession對象 2. HttpSession對象: object getAttribute(String name) void se ...
  • 前幾天,世界著名的科技期刊/圖書出版公司施普林格(Springer)宣佈: 免費向公眾開放 400 多本正版的電子書!! Springer 即施普林格出版社,於1842 年在德國柏林創立,20 世紀60年代建立了其國際性科技出版公司的地位。 目前,施普林格是 全球第一大科技圖書出版公司和第二大科技期 ...
  • 打造更好用的 EF 自動審計 Intro 上次基於 EF Core 實現了一個自動審計的功能,詳細可以參考 ,雖然說多數情況下可以適用,但是因為要顯式繼承於一個 或 ,所以對代碼的侵入性比較強,對於已經無法修改的代碼或者已經繼承於某一個類了,就無法再繼承 了,就沒有辦法實現自動審計了,在 1.7.0 ...
  • 大家在平時開發中大多都會遵循介面編程,這樣就可以方便實現依賴註入也方便實現多態等各種小技巧,但這種是以犧牲性能為代價換取代碼的靈活性,萬物皆有陰陽,看你的應用場景進行取捨。 一:背景 1. 緣由 在項目的性能改造中,發現很多方法簽名的返回值都是採用IEnumerable介面,比如下麵這段代碼: 2. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...