1. 程式人生 > >Linux下各種查詢命令(find, grep, which, whereis, locate)

Linux下各種查詢命令(find, grep, which, whereis, locate)

find命令

find < path > < expression > < cmd >

  • path: 所要搜尋的目錄及其所有子目錄。預設為當前目錄。
  • expression: 所要搜尋的檔案的特徵。
  • cmd: 對搜尋結果進行特定的處理。

如果什麼引數也不加,find預設搜尋當前目錄及其子目錄,並且不過濾任何結果(也就是返回所有檔案),將它們全都顯示在螢幕上。

find命令常用選項及例項

  • -name 按照檔名查詢檔案。
    find /dir -name filename  在/dir目錄及其子目錄下面查詢名字為filename的檔案
    find . -name "*.c"
    在當前目錄及其子目錄(用“.”表示)中查詢任何副檔名為“c”的檔案
  • -perm 按照檔案許可權來查詢檔案。
    find . -perm 755 –print 在當前目錄下查詢檔案許可權位為755的檔案,即檔案屬主可以讀、寫、執行,其他使用者可以讀、執行的檔案
    
  • -prune 使用這一選項可以使find命令不在當前指定的目錄中查詢,如果同時使用-depth選項,那麼-prune將被find命令忽略。
    find /apps -path "/apps/bin" -prune -o –print 在/apps目錄下查詢檔案,但不希望在/apps/bin目錄下查詢
    find /usr/sam -path "/usr/sam/dir1"
    -prune -o –print 在/usr/sam目錄下查詢不在dir1子目錄之內的所有檔案
  • -depth:在查詢檔案時,首先查詢當前目錄中的檔案,然後再在其子目錄中查詢。
    find / -name "CON.FILE" -depth –print 它將首先匹配所有的檔案然後再進入子目錄中查詢
    
  • -user 按照檔案屬主來查詢檔案。
    find ~ -user sam –print 在$HOME目錄中查詢檔案屬主為sam的檔案
    
  • -group 按照檔案所屬的組來查詢檔案。
    find /apps -group gem –print 在/apps目錄下查詢屬於gem使用者組的檔案
    
  • -mtime -n +n 按照檔案的更改時間來查詢檔案, -n表示檔案更改時間距現在n天以內,+n表示檔案更改時間距現在n天以前。
    find / -mtime -5
    –print 在系統根目錄下查詢更改時間在5日以內的檔案 find /var/adm -mtime +3 –print 在/var/adm目錄下查詢更改時間在3日以前的檔案
  • -nogroup 查詢無有效所屬組的檔案,即該檔案所屬的組在/etc/groups中不存在。
    find / –nogroup -print
    
  • -nouser 查詢無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。
    find /home -nouser –print
    
  • -newer file1 ! file2 查詢更改時間比檔案file1新但比檔案file2舊的檔案。
  • -type 查詢某一型別的檔案,
    諸如:
    b - 塊裝置檔案。
    d - 目錄。
    c - 字元裝置檔案。
    p - 管道檔案。
    l - 符號連結檔案。
    f - 普通檔案。
    find /etc -type d –print 在/etc目錄下查詢所有的目錄
    find . ! -type d –print 在當前目錄下查詢除目錄以外的所有型別的檔案
    find /etc -type l –print 在/etc目錄下查詢所有的符號連結檔案
    
  • -size n[c] 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。
    find . -size +1000000c –print 在當前目錄下查詢檔案長度大於1 M位元組的檔案
    find /home/apache -size 100c –print 在/home/apache目錄下查詢檔案長度恰好為100位元組的檔案
    find . -size +10 –print 在當前目錄下查詢長度超過10塊的檔案(一塊等於512位元組)
    
  • -mount:在查詢檔案時不跨越檔案系統mount點。
    find . -name “*.XC” -mount –print 從當前目錄開始查詢位於本檔案系統中檔名以XC結尾的檔案(不進入其他檔案系統)
  • -follow:如果find命令遇到符號連結檔案,就跟蹤至連結所指向的檔案
  • -exec,find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為’command’ {} \;,注意{}和\;之間的空格
$ find ./ -size 0 -exec rm {} \; 刪除檔案大小為零的檔案
$ rm -i `find ./ -size 0`  
$ find ./ -size 0 | xargs rm -f &

為了用ls -l命令列出所匹配到的檔案,可以把ls -l命令放在find命令的-exec選項中:
$ find . -type f -exec ls -l {} \;
在/logs目錄中查詢更改時間在5日以前的檔案並刪除它們:
find /logs -type f -mtime +5 -exec rm {} \;
  • -ok,和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。
    find . -name "*.conf"  -mtime +5 -ok rm {  } \; 在當前目錄中查詢所有檔名以.LOG結尾、更改時間在5日以上的檔案,並刪除它們,只不過在刪除之前先給出提示
    

說明: 如果你要尋找一個檔案的話,那麼使用 find 會是一個不錯的主意。不過,由於 find 在尋找資料的時候相當的耗硬碟,所以沒事情不要使用 find 啦!有更棒的指令可以取代呦,那就是 whereis 與 locate 咯~

一些常用命令

1. find . -type f -exec ls -l {} \;
查詢當前路徑下的所有普通檔案,並把它們列出來。
2. find logs -type f -mtime +5 -exec rm {} \;
刪除logs目錄下更新時間為5日以上的檔案。
3.find . -name "*.log" -mtime +5 -ok rm {} \;
刪除當前路徑下以。log結尾的五日以上的檔案,刪除之前要確認。
4. find ~ -type f -perm 4755 -print
查詢$HOME目錄下suid位被設定,檔案屬性為755的檔案打印出來。
說明: find在有點系統中會一次性得到將匹配到的檔案都傳給exec,但是有的系統對exec的命令長度做限制,就會報:”引數列太長“,這就需要使用xargs。xargs是部分取傳來的檔案。
5. find / -type f -print |xargs file
xargs測試檔案分類
6. find . -name "core*" -print|xargs echo " ">/tmp/core.log
將core檔案資訊查詢結果報存到core。log日誌。
7. find / -type f -print | xargs chmod o -w
8. find . -name * -print |xargs grep "DBO"

grep命令

grep [選項] pattern [檔名]

命令中的選項為:

  • -? 同時顯示匹配行上下的?行,如:grep -2 pattern filename 同時顯示匹配行的上下2行。
  • -b,—byte-offset 列印匹配行前面列印該行所在的塊號碼。
  • -c,—count 只打印匹配的行數,不顯示匹配的內容。
  • -f File,—file=File 從檔案中提取模板。空檔案中包含0個模板,所以什麼都不匹配。
  • -h,—no-filename 當搜尋多個檔案時,不顯示匹配檔名字首。
  • -i,—ignore-case 忽略大小寫差別。
  • -q,—quiet 取消顯示,只返回退出狀態。0則表示找到了匹配的行。
  • -l,—files-with-matches 列印匹配模板的檔案清單。
  • -L,—files-without-match 列印不匹配模板的檔案清單。
  • -n,—line-number 在匹配的行前面列印行號。
  • -s,—silent 不顯示關於不存在或者無法讀取檔案的錯誤資訊。
  • -v,—revert-match 反檢索,只顯示不匹配的行。
  • -w,—word-regexp 如果被\<和>引用,就把表示式做為一個單詞搜尋。
  • -V,—version 顯示軟體版本資訊。
ls -l | grep '^a' 通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。
grep 'test' d* 顯示所有以d開頭的檔案中包含test的行。
grep 'test' aa bb cc 顯示在aa,bb,cc檔案中匹配test的行。
grep '[a-z]' aa 顯示所有包含每個字串至少有5個連續小寫字元的字串的行。
grep 'w(es)t.*' aa 如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外一個es(),找到就顯示該行。如果用egrep或grep -E,就不用""號進行轉義,直接寫成'w(es)t.*'就可以了。
grep -i pattern files :不區分大小寫地搜尋。預設情況區分大小寫
grep -l pattern files :只列出匹配的檔名,
grep -L pattern files :列出不匹配的檔名,
grep -w pattern files :只匹配整個單詞,而不是字串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。

pattern為所要匹配的字串,可使用下列模式

. 匹配任意一個字元
* 匹配0 個或多個*前的字元
^ 匹配行開頭
$ 匹配行結尾
[] 匹配[ ]中的任意一個字元,[]中可用 - 表示範圍,
例如[a-z]表示字母a 至z 中的任意一個
\ 轉意字元

xargs命令

【xargs定位引數位置 | xargs控制引數位置 | 如何定位控制xargs引數位置】

背景
管道 + xargs用於把上游輸出轉換為下游引數輸入。
例如 ls *.bak | xargs rm -f

問題

xargs預設把輸入作為引數放到命令的最後,但是很多命令需要自己定位引數的位置,比如拷貝命令cp {上游結果} destFolder

解決方法

xargs 使用大寫字母i 定義引數指示符 -I <指示符>,然後用這個引數指示符定位引數插入的位置, 例如:

ls *.bak | xargs -I % cp % /tmp/test

註釋:這裡使用%作為指示符,第一個%可以理解為宣告,第二個%可以理解為呼叫。你也可以用其他字元,比如 ls *.bak | xargs -I {} cp {} /tmp/test

簡介

之所以能用到xargs這個命令,關鍵是由於很多命令不支援|管道來傳遞引數,而日常工作中有有這個必要,所以就有了xargs命令,例如:

find /sbin -perm +700 | ls -l       這個命令是錯誤的
find /sbin -perm +700 | xargs ls -l   這樣才是正確的

xargs 可以讀入 stdin 的資料,並且以空白字元或斷行字元作為分辨,將 stdin 的資料分隔成為 arguments 。 因為是以空白字元作為分隔,所以,如果有一些檔名或者是其他意義的名詞內含有空白字元的時候, xargs 可能就會誤判了~

選項解釋

  • -0 當sdtin含有特殊字元時候,將其當成一般字元,像/ ‘ 空格等
    [email protected]:~/test#echo "//"|xargs  echo
    [email protected]:~/test#echo "//"|xargs -0 echo
    /
    
  • -a file 從檔案中讀入作為sdtin
    [email protected]:~/test#cat test#!/bin/shecho "hello world/n"
    [email protected]:~/test#xargs -a test echo#!/bin/sh echo hello world/n
    [email protected]:~/test#
  • -e flag ,注意有的時候可能會是-E,flag必須是一個以空格分隔的標誌,當xargs分析到含有flag這個標誌的時候就停止。
    [email protected]:~/test#cat txt
    /bin tao shou kun
    [email protected]:~/test#cat txt|xargs -E 'shou' echo
    /bin tao
    
  • -p 當每次執行一個argument的時候詢問一次使用者。
    [email protected]:~/test#cat txt|xargs -p echoecho /bin tao shou kun ff ?...y
    /bin tao shou kun ff
    
  • -n num 後面加次數,表示命令在執行的時候一次用的argument的個數,預設是用所有的
    [email protected]:~/test#cat txt|xargs -n1 echo
    /bin
    tao
    shou
    kun
    [email protected]:~/test3#cat txt|xargs  echo
    /bin tao shou ku
    
  • -t 表示先列印命令,然後再執行。
    [email protected]:~/test#cat txt|xargs -t echoecho /bin tao shou kun
    /bin tao shou kun
    
  • -i 或者是-I,這得看linux支援了,將xargs的每項名稱,一般是一行一行賦值給{},可以用{}代替。
    $ ls | xargs -t -i mv {} {}.bak
    
  • -r no-run-if-empty 當xargs的輸入為空的時候則停止xargs,不用再去執行了。
    [email protected]:~/test#echo ""|xargs -t -r  mv
    [email protected]:~/test#
  • -s num 命令列的最大字元數,指的是xargs後面那個命令的最大命令列字元數
    [email protected]:~/test#cat test |xargs -i -x  -s 14 echo "{}"
    exp1
    exp5
    file
    xargs: argument line too long
    linux-2
    [email protected]:~/test#
  • -L num Use at most max-lines nonblank input lines per command line.-s是含有空格的。
  • -l 同-L
  • -d delim 分隔符,預設的xargs分隔符是回車argument的分隔符是空格,這裡修改的是xargs的分隔符
    roo[email protected]:~/test#cat txt |xargs -i -p echo {}echo /bin tao shou kun ?...y
    [email protected]:~/test#cat txt |xargs -i -p -d " " echo {}echo /bin ?...y
    echo tao ?.../bin
    y
    echo shou ?...tao
    再如:
    [email protected]:~/test#cat test |xargs -i -p -d " " echo {}echo exp1
    exp5
    file
    linux-2
    ngis_post
    tao
    test
    txt
    xen-3
    ?...y
    [email protected]:~/test#cat test |xargs -i -p echo {}echo exp1 ?...y
    echo exp5 ?...exp1
    y
    echo file ?...exp5
    y
    
  • -x exit的意思,主要是配合-s使用。
  • -P 修改最大的程序數,預設是1,為0時候為as many as it can

其他查詢命令

1. locate命令

locate命令其實是“find -name”的另一種寫法,但是要比後者快得多,原因在於它不搜尋具體目錄,而是搜尋一個數據庫(/var/lib/locatedb),這個資料庫中含有本地所有檔案資訊。Linux系統自動建立這個資料庫,並且每天自動更新一次,所以使用locate命令查不到最新變動過的檔案。為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新資料庫。

locate命令的使用例項:

$ locate /etc/sh
搜尋etc目錄下所有以sh開頭的檔案。
$ locate -i ~/m
搜尋使用者主目錄下,所有以m開頭的檔案,並且忽略大小寫。

2. whereis命令

whereis命令只能用於程式名的搜尋,而且只搜尋二進位制檔案(引數-b)、man說明檔案(引數-m)和原始碼檔案(引數-s)。如果省略引數,則返回所有資訊。

whereis命令的使用例項:

$ whereis grep
grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz

3. which命令

which命令的作用是,在PATH變數指定的路徑中,搜尋某個系統命令的位置,並且返回第一個搜尋結果。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。

which命令的使用例項:

$ which grep
/bin/grep

相關推薦

Linux各種查詢命令find, grep, which, whereis, locate

find命令 find < path > < expression > < cmd > path: 所要搜尋的目錄及其所有子目錄。預設為當前目錄。expression: 所要搜尋的檔案的特徵。cmd: 對搜尋結果進行特定的處理。 如果什麼引數也不加,find預設搜尋當

Linux的基本命令意思理解,便於記憶

      以下為本人對一些記憶Linux基本命令與其作用的小技巧。 我們都知道Linux下的命令不少,有一些命令就知道它那樣但是卻不知道這些命令為何就用那幾個字母組成。下面就對這些命令做一個命令原來

【轉載】linux安裝wget命令sftp實現法

 如何安裝wget命令。 方法一:通過yum 命令列為:yum install wget 完成。此操作很簡單,但是我安裝的linux是centos的最小版本,執行上述命令時會出現無法連線到源網站(大概是這個意思)的問題。 方法二:通過rpm 據說rpm是linux的通用安裝法,小白表示不懂

Linux查詢命令

which指令:(重要) 我們經常在linux要查詢某個⽂檔案,但不知道放在哪⾥裡了,可以 使⽤用下⾯面的⼀一些命令來搜尋: Which 檢視可執⾏行⽂檔案的位置。 whereis 檢視⽂檔案的位置。 locate

linuxls -l命令即ll命令檢視檔案的顯示結果分析

在linux下使用“ls -l”或者“ls -al”或者“ll”命令檢視檔案及目錄詳情時,shell中會顯示出好幾列的資訊。平時也沒怎麼注意過,今天忽然心血來潮想了解一下,於是整理了這篇部落格,以供參考: 首先給出一張典型的顯示結果: 下面對其中的每一列

LinuxDockerfile搭建lnmp目前只有n和p

docker# 一:環境準備centos7.4以及搭建好的Docker [root@node01 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)[root@node01 ~]# docker -vDocker version

Linux管理員許可權獲取su和sudo的區別

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux安裝Docker CE 以CentOS 7為例

 系統要求:centos 7 64位,centos-extras儲存庫必須啟用。 解除安裝舊版Docker 查詢當前的Docker版本 $ docker -v            如果存在已安

linux磁碟操作相關命令dh du fdisk mkfs.ext3

感謝朋友支援本部落格,歡迎共同探討交流,由於能力和時間有限,錯誤之處在所難免,歡迎指正! 如有轉載,請保留源作者部落格資訊。 如需交流,歡迎大家部落格留言。 f

Ubuntu代替dos2unix命令 轉自兩個檔案

$ dpkg -L tofrodos /. /usr /usr/bin /usr/bin/fromdos /usr/share /usr/share/man /usr/share/man/man1 /usr/share/man/man1/fromdos.1.gz /usr/share/doc /usr/sha

linux建立軟連結可認為是快捷方式

1. 使用方式:ln [option] source_file dist_file                     -f 建立時,將同檔案名刪除.                     -i 刪除前進行詢問.                     ln -s abc cde 建立abc 的軟連線

linux的getch模擬無回顯讀取字元

我們知道getchar()函式可以讀取一個字元,但是必須在按下回車鍵之後字元才會從緩衝區送給程式。如何在linux終端裡實現無回顯讀取字元呢?下面的程式碼給出了一個簡單有效的實現。 #include<stdio.h> #include<unistd.h&g

Linux查詢 grep & find

grep用法: grep 遞迴搜尋檔案 語法:grep -r -n “XXXX” ./ 說明:-r 表示遞迴,-n 表示標出要搜尋的內容所在的行數,“XXXX” 表示當前要搜尋的內容,./ 表示在當前檔案下 grep排除搜尋目錄 使用 gre

Linux----linux命令使用find,grep,管道|,man,runleve,tar,gzip

1、     find    在指定一個路徑,按條件搜尋某一個檔案如:   find   /home/stu   -name   main.c       在/home/stu目錄中搜索名為main.c的檔案2、    grep   起資訊過濾作用,過濾在一個檔案中匹配某個字

linux各種解壓命令

好用 ast 網絡 所有 備份 pm2 文件壓縮 註意 詳細 .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(註:tar是打包,不是壓縮!)———————————————.gz解壓1:gunzip Fi

Linux Centos6.x 常用查詢命令整理

Linux Centos 命令 查詢 Linux Centos6.x 下常用查詢命令整理 ---- 1.系統基本信息 ---- 查看 系統版本 cat /etc/redhat-release [root@test ~]# cat /etc/redhat-release CentOS rele

Linux的五個查詢命令find,locate,whereis,which,type 及其區別【轉】

1. find find是最常見和最強大的查詢命令,你可以用它找到任何你想找的檔案。 find的使用格式如下:   $ find <指定目錄> <指定條件> <指定動作>   - <指定目錄>: 所要搜尋的目錄及其所

linux系統中查詢命令grep命令詳解

grep(global search regular expression(RE) and print out the line,全面搜尋正則表示式並把行打印出來)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。 選項 -a 不要忽略二進位制資料。 -A<顯示列數>

linux三個時間與find命令

一: (1)mtime: 當檔案的“內容資料”更改時,就會更新這個時間。內容資料指的是檔案的內容,而不是檔案的屬性或許可權。 (2)ctime 當該檔案的狀態改變時,就會更新這個時間,舉例來說,像是許可權與屬性被更改了,都會更新這個時間。 (3)atime 當“該檔案的內容

linux網路shell命令總結

網路和監控命令類似於這些: hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool 用於檢視 linux 伺服器 ip 地址,管理伺服器網路配置,通過 telnet