基本格式linux
find < path > < expression > < cmd > ''' path: 所要搜索的目錄及其全部子目錄。默認爲當前目錄。 expression: 所要搜索的文件的特徵。 cmd: 對搜索結果進行特定的處理。 若是什麼參數也不加,find默認搜索當前目錄及其子目錄,而且不過濾任何結果(也就是返回全部文件),將它們全都顯示在屏幕上。 '''
find命令經常使用選項及實例shell
find /dir -name filename # 在/dir目錄及其子目錄下面查找名字爲filename的文件 find . -name "*.c" # 在當前目錄及其子目錄(用「.」表示)中查找任何擴展名爲「c」的文件
find . -perm 755 –print # 在當前目錄下查找文件權限位爲755的文件,即文件屬主能夠讀、寫、執行,其餘用戶能夠讀、執行的文件
find /apps -path "/apps/bin" -prune -o –print # 在/apps目錄下查找文件,但不但願在/apps/bin目錄下查找 find /usr/sam -path "/usr/sam/dir1" -prune -o –print # 在/usr/sam目錄下查找不在dir1子目錄以內的全部文件
find / -name "CON.FILE" -depth –print # 它將首先匹配全部的文件而後再進入子目錄中查找
find ~ -user sam –print # 在$HOME目錄中查找文件屬主爲sam的文件
find /apps -group gem –print # 在/apps目錄下查找屬於gem用戶組的文件
find / -mtime -5 –print # 在系統根目錄下查找更改時間在5日之內的文件 find /var/adm -mtime +3 –print # 在/var/adm目錄下查找更改時間在3日之前的文件
find / –nogroup -print
find /home -nouser –print
find /etc -type d –print # 在/etc目錄下查找全部的目錄 find . ! -type d –print # 在當前目錄下查找除目錄之外的全部類型的文件 find /etc -type l –print # 在/etc目錄下查找全部的符號連接文件
find . -size +1000000c –print # 在當前目錄下查找文件長度大於1 M字節的文件 find /home/apache -size 100c –print # 在/home/apache目錄下查找文件長度剛好爲100字節的文件 find . -size +10 –print # 在當前目錄下查找長度超過10塊的文件(一塊等於512字節)
find . -name 「*.XC」 -mount –print # 從當前目錄開始查找位於本文件系統中文件名以XC結尾的文件(不進入其餘文件系統)
$ 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 {} \;
find . -name "*.conf" -mtime +5 -ok rm { } \; # 在當前目錄中查找全部文件名以.LOG結尾、更改時間在5日以上的文件,並刪除它們,只不過在刪除以前先給出提示
# 查找當前路徑下的全部普通文件,並把它們列出來。 find . -type f -exec ls -l {} \; # 刪除logs目錄下更新時間爲5日以上的文件。 find logs -type f -mtime +5 -exec rm {} \; # 刪除當前路徑下以。log結尾的五日以上的文件,刪除以前要確認。 find . -name "*.log" -mtime +5 -ok rm {} \; # 查找$HOME目錄下suid位被設置,文件屬性爲755的文件打印出來。 find ~ -type f -perm 4755 -print #說明: find在有點系統中會一次性獲得將匹配到的文件都傳給exec,可是有的系統對exec的命令長度作限制,就會報:」參數列太長「,這就須要使用xargs。xargs是部分取傳來的文件。 # xargs測試文件分類 find / -type f -print |xargs file # 將core文件信息查詢結果報存到core。log日誌 find . -name "core*" -print|xargs echo " ">/tmp/core.log 7. find / -type f -print | xargs chmod o -w 8. find . -name * -print |xargs grep "DBO"
基本格式數據庫
grep [選項] pattern [文件名]
命令中的選項爲:express
''' -? 同時顯示匹配行上下的?行,如: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爲所要匹配的字符串,可以使用下列模式apache
基本格式安全
xargs定位參數位置 | xargs控制參數位置 | 如何定位控制xargs參數位置
背景:
管道 + xargs 用於把上游輸出轉換爲下游參數輸入。
例如 ls *.bak | xargs rm -fapp
問題:ide
xargs默認把輸入做爲參數放到命令的最後,可是不少命令須要本身定位參數的位置,好比拷貝命令 cp {上游結果} destFolderpost
解決方法:測試
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 可能就會誤判了~
選項解釋
echo "//"|xargs echo echo "//"|xargs -0 echo # /
cat test#!/bin/shecho "hello world/n" xargs -a test echo#!/bin/sh echo hello world/n
cat txt # /bin tao shou kun cat txt|xargs -E 'shou' echo # /bin tao
root@localhost:~/test#cat txt|xargs -p echoecho /bin tao shou kun ff ?...y # /bin tao shou kun ff
cat txt|xargs -n1 echo ''' /bin tao shou kun ''' cat txt|xargs echo # /bin tao shou ku
cat txt|xargs -t echoecho /bin tao shou kun #/bin tao shou kun
ls | xargs -t -i mv {} {}.bak
echo ""|xargs -t -r mv
cat test |xargs -i -x -s 14 echo "{}" ''' exp1 exp5 file xargs: argument line too long linux-2 '''
cat txt |xargs -i -p echo {}echo /bin tao shou kun ?...y cat txt |xargs -i -p -d " " echo {}echo /bin ?...y ''' echo tao ?.../bin y echo shou ?...tao ''' # 再如: cat test |xargs -i -p -d " " echo {}echo exp1 ''' exp5 file linux-2 ngis_post tao test txt xen-3 ?...y ''' cat test |xargs -i -p echo {}echo exp1 ?...y ''' echo exp5 ?...exp1 y echo file ?...exp5 ''' y
1. locate命令
locate 命令實際上是 「find -name」 的另外一種寫法,可是要比後者快得多,緣由在於它不搜索具體目錄,而是搜索一個數據庫(/var/lib/locatedb),這個數據庫中含有本地全部文件信息。Linux 系統自動建立這個數據庫,而且天天自動更新一次,因此使用 locate 命令查不到最新變更過的文件。爲了不這種狀況,能夠在使用 locate 以前,先使用 updatedb 命令,手動更新數據庫。
locate命令的使用實例:
# 搜索etc目錄下全部以sh開頭的文件。 $ locate /etc/sh # 搜索用戶主目錄下,全部以m開頭的文件,而且忽略大小寫。 $ locate -i ~/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
參考文章:https://blog.csdn.net/wzzfeitian/article/details/40985549