Linux學習命令匯總八——文件查找命令find選項及使用技巧
find與grep的不同點:
find為文件搜索命令——用來在指定目錄下查找文件,而grep 為文本搜索命令——根據用戶指定的文本模式對目標文件進行逐步搜索,顯示能夠被匹配的行 ;
find選項支持文件通配符,而grep選線支持正則表達式 ;
find查找為精確查找,精確匹配但搜索速度稍慢。
grep命令選項及正則表達式類型,詳細請參考前文“Linux學習命令匯總三——Linux用戶組管理,文件權限管理,文本搜索命令grep及正則表達式”
bash特性之文件通配符,詳細請參考前文“Linux學習命令匯總四——Bash中變量.文件通配符.管道與重定向.算術運算及循環或判斷語句
find path -option [ -print ] [ -exec -ok command ] {} \;
path:查找路徑,默認為當前目錄
option:查找條件,默認為當前目錄中的所有文件
[print] 或 [exec] :查找動作,默認為顯示
find命令相關選項
find path -option [ -print ] [ -exec -ok command ] {} \;
[option]:
-name “文件名稱”:支持文件通配符 例: # find / -name httpd.conf 查找/ 目錄中名稱為httpd.conf 的文件
-iname “文件名稱”:查找時不區分文件名稱大小寫
-user UserName :根據屬主查找 # find /ftp -user hadoop 查找/ftp目錄中用戶為hadoop的文件
-group GroupName :根據屬組查找
-uid UID :根據屬主id號查找
-gid GID :根據屬組gid號查找
-nouser :查找無屬主的文件 # find /ftp -nouser
-nogroup :查找無屬組的文件
-type { f | d | l | p | s | b | c } :根據類型查找 例: # find /etc -type d 查找/etc/目錄下類型為目錄的文件並顯示
-size [+|-] n[K|M|G] :根據文件大小查找 例:# find /var -size +2M
-atime [+|-] n:根據時間查找 [超過|少於] n天的被訪問(access)的文件
-mtime [+|-] n:根據時間查找 [超過|少於] n天的被修改(modify)的文件
-ctime [+|-] n:根據時間查找 [超過|少於] n天的被改變(change)的文件
-amin -mmin -cmin : 使用方式與 -atime -mtime -ctime 相似
-perm [+|-] mode :
-perm 755 :表示嚴格匹配,也就是你的文件權限位轉換成對應的十進制數字與mode一模一樣,那麽匹配成功 。
-perm - [mode] :表示mode中轉換成二進制是1的二級制位在文件權限位裏面必須匹配 。例: #find /var -perm -355 , 查找的權限355 轉換成二進制位011 101 101 ,判斷文件權限轉換成二級制為1的二進制位是否與權限中為1的二進制位相同 ,是0的位不管,滿足則匹配,不滿足則不匹配;如文件權限為111 101 111 ,011 111 101 等文件均可被匹配 ,而001 101 101 則不會被匹配 ,因為文件權限中第二個二進制位與查找的mode 第二位二進制為1的位不同。
find -perm +mode : 與 -mode的區別是+mode只需其中的任意一個1的二進制位部分被匹配,+mode也不管0位。例: #find /var -perm +355 , 查找的權限355 轉換成二進制位011 101 101 ,如文件權限001 001 001 的文件可被匹配 ,而100 010 010 不會被匹配 ,因為無任何一個二進制位被匹配
處理動作:
-print :打印在標準輸出上
-exec COMMAND {} \; 對查找到的文件執行指定的命令
-ok COMMAND {} \; 交互式的-exec
例: #find /tmp -perm -003 -exec ls -ld {} \;
組合條件:
-a :與,代表條件需同時滿足,可省略
-o :或,代表條件滿足一個即可
-not 或 ! : 非,取反
例:# find /usr/ -not -user root -a -not -user bin -a -not -user hadoop 查找目錄/usr/ 中屬主不是root或bin或hadoop的文件
例:#
find /var/ -user root -group mail 查找/var目錄中屬主不是root且屬組不是mail的文件
安全上下文
進程訪問文件時的權限匹配機制:進程的屬主,是否與文件的屬主相同:如果相同,進程則以文件的屬主屬性運行;否則,進程的屬主所屬的組,是否其中之一與文件的屬組相同;如果相同,進程則以文件的屬組的權限運行;否則,進程則以文件的其他用戶的權限來訪問文件。
進程屬主——進程的發起者
進程的屬組——通常為進程的屬主的基本組
文件權限:-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
suid——可執行文件,任何用戶執行此可執行程序時,不在以用戶自己的身份當作進程的屬主,而是以文件的屬主當作進程的屬主
sgid——具有sgid的目錄,用戶在此目錄下創建文件時,新建文件的屬組不在是用戶的所屬的基本組,而是目錄的屬組
sticky——粘滯位,對於公共可寫的目錄,用戶可創建文件,可以刪除自己的文件,但無法刪除其他用戶的文件
修改權限:
# chmod u+s file 設置文件suid權限
# chmod u-s file 取消文件suid權限
# chmod g+s directory 設置目錄sgid權限
# chmod g-s directory 取消目錄sgid權限
# chmod o+t directory 設置粘滯位權限
# chmod o-t directory 取消粘滯位權限
練習1:復制cat 命令至/tmp 目錄,普通用戶使用/tmp/cat命令能查看root用戶有權限查看的所有文件
[root@study ~]# cp /bin/cat /tmp/ [root@study ~]# chmod u+s /tmp/cat [root@study ~]# /tmp/cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m [root@study ~]# /tmp/cat /etc/redhat-release CentOS release 6.6 (Final)
練習2、新建/tmp/test目錄,要求 openstack 和docker 用戶對其有寫權限,且在目錄創建的文件的屬組都為cloud組;要求每一個用戶不能刪除別人的文件,但可以編輯
[root@study ~]# mkdir /tmp/test [root@study ~]# groupadd cloud [root@study ~]# useradd openstack -g cloud [root@study ~]# useradd docker -g cloud [root@study ~]# chown :cloud /tmp/test [root@study ~]# chmod o+t /tmp/test [root@study ~]# chmod g+s /tmp/test/ [root@study ~]# ls -ld /tmp/test drwxr-sr-t. 2 root cloud 4096 Mar 14 10:22 /tmp/test
本章知識點匯總
#find path -option [ -print ] [ -exec -ok command ] {} \;
[option]:
-name “文件名稱”:支持文件通配符,查找匹配文件名的文件
-iname “文件名稱”:查找時不區分文件名稱大小寫
-user UserName :根據屬主查找
-group GroupName :根據屬組查找
-uid UID :根據屬主id號查找
-gid GID :根據屬組gid號查找
-nouser :查找無屬主的文件 # find /ftp -nouser
-nogroup :查找無屬組的文件
-type { f | d | l | p | s | b | c } :根據類型查找 例: # find /etc -type d 查找/etc/目錄下類型為目錄的文件並顯示
-size [+|-] n[K|M|G] :根據文件大小查找 例:# find /var -size +2M
-atime [+|-] n:根據時間查找 [超過|少於] n天的被訪問(access)的文件
-mtime [+|-] n:根據時間查找 [超過|少於] n天的被修改(modify)的文件
-ctime [+|-] n:根據時間查找 [超過|少於] n天的被改變(change)的文件
-amin -mmin -cmin : 使用方式與 -atime -mtime -ctime 相似
-perm [+|-] mode :
# chmod u+s file 設置文件suid權限
# chmod u-s file 取消文件suid權限
# chmod g+s directory 設置目錄sgid權限
# chmod g-s directory 取消目錄sgid權限
# chmod o+t directory 設置粘滯位權限
# chmod o-t directory 取消粘滯位權限
Linux學習命令匯總八——文件查找命令find選項及使用技巧