linux下的文件查找命令對比(locate,find,grep,sed)

    在linux下,文件系統占據著非常重要的位置,而我們對于文件系統的操作也顯得尤為重要。

如果我們想熟悉的操作文件系統,其中,我們需要對文本的查找,截取等命令需要熟悉的掌握。

這里就不得不說幾個關于文本操作的幾個命令的作用詳細介紹和對比。比如: locate,find ,grep ,sed等。

這里,grep ,sed 都屬于文本的查找,過濾的文本搜索工具。locate,find屬于查找文件的的工具,可以查找我們想找卻又

不知道具體路徑的文件;或者只知道文件的部分信息,這樣我們可以使用locate和find進行搜索文件。

1.locate  

locate 屬于非實時查找(根據索引查找),其特點為,查找速度快,非精準查找,模糊查找。

首先,locate對于文件的搜索是根據數據庫來搜索文件的,在數據庫中搜索文件比使用find進行搜索的速度要快。

這個是比較簡單的搜索工具,僅需要 locate + keyword ,使用locate命命令后面跟上需要搜索的關鍵詞即可。

但是,有一點需要注意的就是因為locate是在數據庫中進行搜索的,而我們都知道數據庫更新需要一定條件,它

并不是隨時更新的。所以我們使用locate進行搜索是很多時候需要先手動更新一下數據庫。手動更新數據庫的方法就是使

updatedb命令更新數據庫,數據庫由于信息量比較大,所以更新時一般會比較慢 。所以為了不影響我們的工作,我們可以

在updatedb 后面跟上一個 &符號,這樣會在后臺自動的更新數據庫,我們也可以在終端上做別的工作。

例如,我們不知道 issue的位置,我們需要查一下:

locate.png

2.find 

find 屬于實時查找(遍歷所有的文件進行條件匹配),其特點為:精準查找,但速度比較慢

find的用法結構為:find [option]…[查找路徑][查找條件][處理動作]

[查找路徑]:默認為當前目錄

[查找條件]:默認為指定路徑下的所有文件

[處理動作]:默認為顯示在屏幕上

查找條件:

-name "文件名稱":支持使用glob通配符

* ? [] [^]

-iname "文件名稱":查找時忽略字符的大小寫

-user USERNAME :根據文件的屬主進行查找

-group GRPNAME :根據文件的屬組進行查找

-uid UID

-gid GID

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

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

-inum n :按inode號進行查詢

組合條件查找:

與 : -a ,同時滿足

或 : -o ,滿足一個條件即可

非 : !,-not ,條件取反

德·摩根定律:

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

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

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

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

根據文件類型進行查找:

-type TYPE :根據文件類型查找

f :普通文件 d :目錄文件 l :符號鏈接 b :塊設備

c :字符設備 s :套接字文件 p :命令管道

根據文件大小查詢:

-size[+|-]#UNIT :常用單位 :k,M,G

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

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

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

案例:1.找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件  (為了顯示摩根定律的作用,我使用 head -4 只取了前4行)

findtest1.png

 2。排除目錄

  findtest2.png

3.sed流編譯器

    說流編譯器可能有點過于概念化,通俗的講它的編譯功能主要體現在 sed -i 這個參數上,通過修改原文本,它的作用和grep都是進行文本內容的操作,不是查找文件。這里偶然間看到一個關于sed的功能圖,很詳細。供參考!

sed快速學習.png

4.grep 

grep 是一個文本過濾器,過濾文本內容。按照模式的內容進行逐行匹配并打印下來。grep和sed都支持正則表達式。在對文本的搜索,過濾中,這兩個文本處理工具是離不開正則表達式的。

    grep [OPTIONS] PATTERN [FILE…]

    [option] :

    –color=auto: 對匹配到的文本著色顯示; ? 

    -v: 顯示不能夠被pattern匹配到的行; ? 

    -i: 忽略字符大小寫 ? 

    -n:顯示匹配的行號 ? 

    -c: 統計匹配的行數 ? 

    -o: 僅顯示匹配到的字符串; ? 

    -q: 靜默模式,不輸出任何信息 ? 

    -A #:after, 后#行 ? 

    -B #: before, 前#行 ? 

    -C #:context, 前后各#行 ? 

    -e:實現多個選項間的邏輯or關系
grep
–e ‘cat ’
-e ‘dog’ file

    –
w:整行匹配整個單詞
?
    

    –
E:使用ERE

這個還是對練習練習,我在上一篇博客中有關于sed和grep與正則表達式的使用,具體的案例。

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

(1)
zhongzhong
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • Vim 末行模式 & crontab & scripts 練習

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;   ~]# cp /etc/rc.d/rc.sysinit /tmp     %s@^[[:space:]]\+\*@#&@g     (使用元字符 有幾…

    Linux干貨 2016-10-31
  • Bash學習基礎知識一“命令”

    Bash 學習基礎知識 目錄 一、Shell是個啥? 二、BASH的命令     2.1 命令的語法格式     2.2 什么是命令     2.4 命令的類型     …

    Linux干貨 2015-04-03
  • 第五周著重練習擴展正則元字符及find命令

    1、顯示當前系統上root、fedora或user1用戶的默認shell; grep -E "^(root|hadoop|user1)\>" /etc/passwd |cut -d":" -f1,7 2、找出/etc/rc.d/init.d/functi…

    Linux干貨 2016-12-13
  • 隨筆—git的基本命令

    git是一個非常優秀的版本控制系統,可以對各類大小的項目進行源代碼管理,  #git的常用功能如下: 1、從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。 2、在本地倉庫上根據不同的開發目的,創建分支,修改代碼。 3、在本機上向自己創建的分支上提交代碼。 4、在本機上合并分支。 5、將本地倉庫代碼和分支推送到服務器上的遠程倉庫 在官網…

    Linux干貨 2016-07-04
  • 基于mysql的數據庫分析系統(rsyslog)

    rsyslog:日志收集和存儲系統 1.事件在電腦中的日志記錄格式為:     日期時間 主機 進程[pid]:事件內容 2.rsyslog的特性:     多線程;     UDP,TCP,SSL/TLS,RELP; &nbsp…

    Linux干貨 2016-10-23
  • Shell腳本編程 流程控制—選擇

    流程控制可根據不同的情況做不同的處理,而且可重復執行指定的程序區域,在shell bash中流程控制可分為兩大類: "選擇"和"循環" 1.選擇:if、case、select 2.循環:for、while、until、select 命令結束狀態返回值: 在shell中命令執行狀態返回值分兩種,成功和失敗,0表示成功,非…

    Linux干貨 2016-08-24

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-19 10:08

    對文件查找部分文字太多,能簡練盡量簡練點,多些操作和聯系,find命令是比較常用的工具,需多加練習,熟練掌握。

欧美性久久久久