您好,登錄后才能下訂單哦!
find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認為當前目錄
查找條件:默認為查找指定路徑下的所有文件
處理動作:默認為顯示
查找條件:
-name "文件名稱" 支持使用globbing正則表達式
-iname "文件名稱" 查找時不區分字符大小寫
-user UserName 根據屬主查找
-group GroupName 根據屬組查找
-uid UID 根據uid查找
-gid GID 根據gid查找
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
組合條件:
-a 與,同時滿足
-o 或,滿足其一
-not, ! 非,取反
-type: 根據文件類型查找
f: 普通文件
d: 目錄
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 命名管道
s: 套接字
-size: 根據文件大小查找(常用單位:k, M, G)
-#M 查找所有文件大小小于#M的文件
+#M 查找所有文件大小大于#M的文件
#M 查找所有文件大小等于#M的文件
根據時間戳查找:
以天為單位(time):
-atime
-mtime
-ctime
+# 查找(#+1)天之外被訪問過的文件
-# 查找#天之內被訪問過的文件
查找短于(#+1)> x >=#天的時間段被訪問過
以分鐘為單位(min):
-amin
-mmin
-cmin
+# 查找(#+1)分之外被訪問過的文件
-# 查找#天之分被訪問過的文件
查找短于(#+1)> x >=#分的時間段被訪問過
根據權限查找:
-perm [+|-]MODE
MODE 精確匹配
+MODE 任何一類用戶的任何一位權限匹配;常用于查找某類用戶的某特定權限是否存在;
-MODE 每類用戶的指定要檢查的權限位都匹配;
文件權限:644
-perm 600 否,因為不匹配644
-perm +222 是,因為任何一位有2權限
-perm +002 否,因為任何一位的權限都不匹配
-perm -444 是,因為每位的4權限都匹配
練習:
1、查找/var/目錄屬主為root且屬組為mail的所有文件;
# find /var/ -user root -a -group mail
2、查找/usr目錄下不屬于root、bin或hadoop的所用文件;
# find /usr/ -not -user root -a -not -user bin -a -not -user hadoop
# find /usr/ -not \( -user root -o -user bin -o -user hadoop \)
3、查找/etc/目錄下最近一周內其內容修改過的,且不屬于root或hadoop的文件;
# find /etc/ -mtime -7 -a -not -user root -a -not -user hadoop
# find /etc/ -mtime -7 -a -not \( -user root -o -user hadoop \)
4、查找當前系統上沒有屬主或屬組,且最近1個月內曾被訪問過的文件;
# find / \( -nouser -o -nogroup \) -a -atime -30
5、查找/etc/目錄下大于1M且類型為普通文件的所有文件;
# find /etc/ -size +1M -a -type f
6、查找/etc/目錄所有用戶都沒有寫權限的文件;
# find /etc/ -not -perm +222
所有都沒有:相反:任何一個有
所有都有:相反:至少有一個沒有
7、查找/etc/目錄下至少有一類用戶沒有寫權限;
# find /etc/ -not -perm -222
8、查找/etc/init.d/目錄下,所有用戶都有執行權限且其它用戶有寫權限的文件;
# find /etc/init.d/ -perm -113
處理動作:
-print 默認打印在標準輸出上
-ls 以長格式輸出各文件信息
-exec COMMAND {} \; 對查找到的文件執行指定的命令
-ok COMMAND {} \; 交互式的-exec;
| xargs COMMAND
find補充材料(摘自互聯網):
find與xargs
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之后,就會出現 溢出錯誤。
錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續下去。
在有些系統中,使用-exec選項會為處理每一個匹配到的文件而發起一個相應的進程,并非將匹配到的文件全部作為參數一次執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參數來確定。
文件的特殊權限:
可執行文件:suid
任何用戶執行此可執行文件時,不再以用戶自己的身份當作進程的屬主,而是以文件的屬主當作進程的屬主
suid表現為文件屬主執行權限位上的s或S,有執行權限的為s而沒有執行權限的為S
如何設定suid權限:
chmod u+s FILE
目錄文件:sgid
具有sgid的目錄,用戶在此目錄下創建文件時,新建文件的屬組不再是用戶所屬的基本組,而是目錄的屬組
sgid表現為文件屬組執行權限位上的s或S,有執行權限的為s而沒有執行權限的為S
如何設定sgid權限:
chmod g+s FILE ...
粘滯位:sticky
對于公共可寫的目錄,用戶可創建文件,可以刪除自己的文件,但無法刪除別的用戶的文件
sticky表示為文件其它用戶執行權限位上的t或T,,有執行權限的為t而沒有執行權限的為T
如何設定sticky權限:
chmod o+t FILE ...
練習:
1、復制cat命令至/tmp目錄,普通用戶使用/tmp/cat命令能查看root用戶有權限查看的所有文件
cp `which cat` /tmp/
cp /etc/shadow /tmp/
chmod u+s cat
2、新建/tmp/test目錄:
要求openstack和docker用戶對其有寫權限,且在目錄創建的文件的屬組都為cloud組
要求每個用戶不能刪除別人的文件,但可以編輯
mkdir /tmp/test
groupadd cloud
useradd -G cloud openstack
useradd -G cloud docker
chmod g+w /tmp/test/
chown :cloud /tmp/test
chmod g+s test/
Linux任務計劃:
一次性任務執行:at
周期性任務執行:crontab
一次性任務執行:
at:
交互式:讓用戶在at>提示符輸入多個要執行命令;
at TIME
at>
Ctrl+d:提交任務;
批處理:將任務的各命令寫入文件由at進行調用;
at -f /path/to/at_job_file TIME
at作業有隊列:使用單個字母表示
查看作業:at -l = atq
刪除一個尚未執行的作業:
at -d job_num
atrm job_num
任務計劃的執行結果會通過郵件的方式發送給任務提交者;
mail命令:
交互模式接收郵件;
交互模式發送郵件:
-s "Subject"
< /path/to/somefile
周期性任務計劃:cron
crond: 守護進程
服務進程: 阻塞,輪詢
系統cron:
文件:/etc/crontab
用戶cron:
/var/spool/cron/UserName
/etc/crontab文件:每行定義一個獨立的任務;
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
時間表示法:
1、每個時間位都應該使用其可用的有效取值范圍內的值;
2、某時間位上的*表示對應位的所有有效取值;
3、-: 連續的時間相鄰點取值;
4、,: 離散的時間點取值;
5、/#:表示在指定時間范圍內每隔#一次;
注意:通過輸出重定向而拒收郵件:
將執行結果重定向到/dev/null
&> /dev/null
將郵件發給空用戶
MAILTO=""
用戶cron:
使用crontab命令來實現
-l: 查看自己的cron任務列表;
-e: 通過EDITOR變量中定義的編輯器打開用戶自己的cron配置文件;
編輯單獨的任務都使用-e選項,無論是刪除、修改還是新建;
-r: 移除crontab文件
如果是管理員:
-u UserName:為別的用戶配置crontab作業;
# crontab -e -u docker
提醒:如果在crontab的用戶命令中使用%,得轉義為\%
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
在使用單引號后,%也可以不用轉義
5 3 * * * /bin/touch ~/testfile_`date +'%Y-%m-%d'`.txt
練習:
1、每3分鐘執行一個“echo "how are you?";
2、每周2、4、6備份/etc/目錄至/backup目錄中,備份的文件名以當etc_開頭并跟上當日的日期作為文件名;
3、每天6、9、12、15、18查看一下當前系統掛載的所有文件系統,并將查看的結果追加至/tmp/mounts.txt文件中;
4、每天每兩小時取當前系統內存空間余量,將其保存至/stats/memory.txt文件中;
crontab文件的格式:
空白行會被忽略
# 開頭的行是注釋;
1、*/3 * * * * /bin/echo "how are you?"
2、3 2 * * 2,4,6 /bin/tar -Jcf /backup/etc_`date '+%F'`.tar.xz /etc/*
3、17 6,9,12,15,18 * * * /bin/mount >> /tmp/mounts.txt
4、34 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /stats/memory.txt
如何實現秒級別的任務:
* * * * * for i in {0..4}; do /bin/echo "how are you?"; sleep 10; done
facl: 文件訪問控制列表
facl: 附加原有權限模型之上另一層權限控制機制,保存至文件擴展屬性信息中;
getfacl FILE 獲取文件的權限信息
setfacl {-x|-m} 權限 FILE 設置文件的權限
-m: 設定權限
-m u:UserName:Perms
-m g:GroupName:Perms
-m m::Perms
-x: 取消權限
-x u:UserName
-x g:GroupName
-x m:
-R: 遞歸
bash編程之循環控制:
for varName in LIST; do
循環體
done
while CONDITION; do
循環體
done
until CONDITION; do
循環體
done
循環控制:
continue: 提前結束本次循環而開始評估下一輪;
break [n]: 跳出當前循環
練習:提示用戶輸入用戶名,顯示用戶的ID號;直到用戶輸入quit退出;
#!/bin/bash
#
if [ $UID -ne 0 ]; then
echo "`basename $0` must be running as root"
exit 1
fi
while true; do
read -p "Enter a user name: " userName
if [ "$userName" == 'quit' ]; then
break
fi
id -u $userName
done
練習:寫一個腳本
1、提示用戶輸入一個目錄路徑;
2、顯示目錄下至少包含一個大寫字母的文件名;
#!/bin/bash
#
while true; do
read -p "Enter a directory: " dirName
[ "$dirName" == 'quit' ] && exit 3
[ -d "$dirName" ] && break || echo "Wrong directory..."
done
for fileName in $dirName/*; do
if [[ "$fileName" =~ .*[[:upper:]]{1,}.* ]]; then
echo "$fileName"
fi
done
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。