###前言:
find 命令一直都是系統管理員的常用命令之一, 其參數中 “-exec” 尤其實用。而 “xargs” 命令,針對查詢也有屬於自己的見解。本文着重講解的是圍繞 find 命令查詢為主線,使用 -exec 參數(find 命令) 或使用 xargs 命令。
將當前 “標准輸出” (數據流) 作為另一個命令的 “標准輸入” 。簡單來說,將 find 查詢出的命令做更多處理。
一、預備教程, “find” 命令。
# null 參數
find . 或 find ~
這是最基本的使用find的方法。 具體功能是列出 /root 目錄下的所有文件,這里僅僅是舉例(未必定是 /root 目錄),注:這條命令也可以配合 “|grep” 進行更多操作,如下比如我想查詢關於zabbix的信息(“ * ”為通配符表所有)
# name 參數
find -name tom 或 find -iname tom
注:這里我並沒有打目錄位置。原因是" find
**如果你需要查找的位置就在當前path(目錄),那么系統默認就是" find . " **
另:參數 -name 與 -iname 倆者有相異部分(表格如下)
name | same | different |
---|---|---|
name 參數 | 匹配用戶輸入 | 100%完全匹配用戶輸入 |
iname 參數 | 匹配用戶輸入 | 忽略大小寫區別,相較結果更多 |
# type 參數
find /root -name rabbit -type f
類型參數列表 | 表示字母 |
---|---|
普通文件 | f |
符號連接 | l |
普通目錄 | d |
字符設備 | c |
塊設備 | b |
套接字 | s |
# size 參數
find /root -type f -size 10M
注:關於 “ -size 10M ” 在大小單位上是允許 “+” “-” 操作的。即 “+10M” 大於10M, “-10M” 小於10M 。
大小字母 | 文字表示 |
---|---|
b | 塊(512字節) |
c | 字節 |
w | 字(2字節) |
k | 千字節 |
M | 兆字節 |
G | 吉字節 |
find的參數還有很多已經和本文后面內容無關,這里列出三個。文章繼續...
比如:-perm可以選擇權限,-user可是選擇用戶,-group可以選擇用戶組等 。
二、重點參數,“find” 命令
-exec command:command 為其他指令,-exec后面可再接額外的指令來處理搜尋到的結果。
代表的是「由 find 找到的內容」,如上圖所示,找到的結果會被放置到 位置中; -exec一直到 ; 是關鍵字,代表找到額外動作的開始(-exec)到結束(\),在這中間的就是找到指令內的額外動作
因為「;」在bash的環境下是有特殊意義的,因此利用反斜線來跳脫。
以上,來自鳥哥[http://linux.vbird.org/linux_basic/0220filemanager.php]的相關介紹。
# 顯示
find /root/.ssh -exec ls -l ;
刪除
find /root -size 10M -exec rm -rf ;
# 重命名
find /root -name tom -exec mv tom_rename ;
# 移動
find /root -name tom_rename -exec mv /tmp ;
##三、預備知識,”xargs”命令
xargs可以將標准輸出(數據流)轉換成命令參數作為標准輸入( 進行橫排輸出)。
更多查看:https://zh.wikipedia.org/wiki/Xargs
1、簡單 echo
注意: xargs 命令的 echo 指令可忽略(默認)。
2、定義界定符
在 “xargs” 中是有 “界定符” 的,類似 find 中 ,代表的是「由 xargs 找到的內容」。xargs 不需要 “;” 做結束符。
另:關於定義界定符(-I),有一點很多文章都沒有強調。
使用 xargs 命令時並不是一定要使用 “” 方括號的,可能是因為 find 命令的( -exec )默認是 “” (為了統一)使用其他的定義符都是可以的(甚至你都可以用英文,數學等作為定義界定符)
3、“xargs” is command not parameter(參數)
xargs 是一條命令,您可以通過 help 或者 man 查詢到關於 xargs 的詳細信息。
這條性質賦予了 xargs 更多的可能性,而不僅僅受限於 find 命令。
四、重點使用,”xargs”命令
# 顯示
find /root -name Tom | xargs -I ls -ld
# 刪除
find /root -name Tom | xargs rm -rf
# 重命名
find /root -name RABBIT | xargs -I - mv - RABBIT_NEW
# 移動
find /root -name RABBIT_NEW | xargs -I 8 mv 8 /tmp
五、后記
最后再說說關於 xargs,基礎的功能就是這篇文章所寫所說,但是熟練使用,會發現各種奇葩的運用方法。
比如說,你在(滲透測試)文本文檔中有很多URL地址需要下載。那么運用xargs,可以使用這樣下載:
cat url.txt | xargs wget -c
再比如說,你在卸載RPM的PHP包時,需要卸載所有包。那么運用xargs,可以使用這樣卸載:
rpm -qa |grep php | xargs rpm -e
此處因當前無應用需要卸除,使用 yum 重裝代替