1. 程式人生 > >Linux學習命令匯總八——文件查找命令find選項及使用技巧

Linux學習命令匯總八——文件查找命令find選項及使用技巧

find命令 suid sgid 粘滯位 find命令選項

本章Blog相關Linux知識點


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選項及使用技巧