find [options] [查找路徑] [查找條件] [處理動作]
目前創(chuàng)新互聯(lián)建站已為上千余家的企業(yè)提供了網(wǎng)站建設、域名、虛擬主機、網(wǎng)站改版維護、企業(yè)網(wǎng)站設計、興隆臺網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
查找路徑:默認為當前目錄
查找條件:默認為查找指定路徑下的所有文件
處理動作:默認為顯示
查找條件:
-name "文件名稱" 支持使用globbing正則表達式
-iname "文件名稱" 查找時不區(qū)分字符大小寫
-user UserName 根據(jù)屬主查找
-group GroupName 根據(jù)屬組查找
-uid UID 根據(jù)uid查找
-gid GID 根據(jù)gid查找
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
組合條件:
-a 與,同時滿足
-o 或,滿足其一
-not, ! 非,取反
-type: 根據(jù)文件類型查找
f: 普通文件
d: 目錄
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 命名管道
s: 套接字
-size: 根據(jù)文件大小查找(常用單位:k, M, G)
-#M 查找所有文件大小小于#M的文件
+#M 查找所有文件大小大于#M的文件
#M 查找所有文件大小等于#M的文件
根據(jù)時間戳查找:
以天為單位(time):
-atime
-mtime
-ctime
+# 查找(#+1)天之外被訪問過的文件
-# 查找#天之內被訪問過的文件
查找短于(#+1)> x >=#天的時間段被訪問過
以分鐘為單位(min):
-amin
-mmin
-cmin
+# 查找(#+1)分之外被訪問過的文件
-# 查找#天之分被訪問過的文件
查找短于(#+1)> x >=#分的時間段被訪問過
根據(jù)權限查找:
-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、查找當前系統(tǒng)上沒有屬主或屬組,且最近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/目錄下,所有用戶都有執(zhí)行權限且其它用戶有寫權限的文件;
# find /etc/init.d/ -perm -113
處理動作:
-print 默認打印在標準輸出上
-ls 以長格式輸出各文件信息
-exec COMMAND {} \; 對查找到的文件執(zhí)行指定的命令
-ok COMMAND {} \;交互式的-exec;
| xargs COMMAND
find補充材料(摘自互聯(lián)網(wǎng)):
find與xargs
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執(zhí)行。但有些系統(tǒng)對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之后,就會出現(xiàn) 溢出錯誤。
錯誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。
在有些系統(tǒng)中,使用-exec選項會為處理每一個匹配到的文件而發(fā)起一個相應的進程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行;這樣在有些情況下就會出現(xiàn)進程過多,系統(tǒng)性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會根據(jù)該命令的選項及系統(tǒng)內核中相應的可調參數(shù)來確定。
文件的特殊權限:
可執(zhí)行文件:suid
任何用戶執(zhí)行此可執(zhí)行文件時,不再以用戶自己的身份當作進程的屬主,而是以文件的屬主當作進程的屬主
suid表現(xiàn)為文件屬主執(zhí)行權限位上的s或S,有執(zhí)行權限的為s而沒有執(zhí)行權限的為S
如何設定suid權限:
chmod u+s FILE
目錄文件:sgid
具有sgid的目錄,用戶在此目錄下創(chuàng)建文件時,新建文件的屬組不再是用戶所屬的基本組,而是目錄的屬組
sgid表現(xiàn)為文件屬組執(zhí)行權限位上的s或S,有執(zhí)行權限的為s而沒有執(zhí)行權限的為S
如何設定sgid權限:
chmod g+s FILE ...
粘滯位:sticky
對于公共可寫的目錄,用戶可創(chuàng)建文件,可以刪除自己的文件,但無法刪除別的用戶的文件
sticky表示為文件其它用戶執(zhí)行權限位上的t或T,,有執(zhí)行權限的為t而沒有執(zhí)行權限的為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用戶對其有寫權限,且在目錄創(chuàng)建的文件的屬組都為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任務計劃:
一次性任務執(zhí)行:at
周期性任務執(zhí)行:crontab
一次性任務執(zhí)行:
at:
交互式:讓用戶在at>提示符輸入多個要執(zhí)行命令;
at TIME
at>
Ctrl+d:提交任務;
批處理:將任務的各命令寫入文件由at進行調用;
at -f /path/to/at_job_file TIME
at作業(yè)有隊列:使用單個字母表示
查看作業(yè):at -l = atq
刪除一個尚未執(zhí)行的作業(yè):
at -d job_num
atrm job_num
任務計劃的執(zhí)行結果會通過郵件的方式發(fā)送給任務提交者;
mail命令:
交互模式接收郵件;
交互模式發(fā)送郵件:
-s "Subject"
< /path/to/somefile
周期性任務計劃:cron
crond: 守護進程
服務進程: 阻塞,輪詢
系統(tǒng)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、-: 連續(xù)的時間相鄰點取值;
4、,: 離散的時間點取值;
5、/#:表示在指定時間范圍內每隔#一次;
注意:通過輸出重定向而拒收郵件:
將執(zhí)行結果重定向到/dev/null
&> /dev/null
將郵件發(fā)給空用戶
MAILTO=""
用戶cron:
使用crontab命令來實現(xiàn)
-l: 查看自己的cron任務列表;
-e: 通過EDITOR變量中定義的編輯器打開用戶自己的cron配置文件;
編輯單獨的任務都使用-e選項,無論是刪除、修改還是新建;
-r: 移除crontab文件
如果是管理員:
-u UserName:為別的用戶配置crontab作業(yè);
# 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分鐘執(zhí)行一個“echo "how are you?";
2、每周2、4、6備份/etc/目錄至/backup目錄中,備份的文件名以當etc_開頭并跟上當日的日期作為文件名;
3、每天6、9、12、15、18查看一下當前系統(tǒng)掛載的所有文件系統(tǒng),并將查看的結果追加至/tmp/mounts.txt文件中;
4、每天每兩小時取當前系統(tǒng)內存空間余量,將其保存至/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
如何實現(xiàn)秒級別的任務:
* * * * * 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編程之循環(huán)控制:
for varName in LIST; do
循環(huán)體
done
while CONDITION; do
循環(huán)體
done
until CONDITION; do
循環(huán)體
done
循環(huán)控制:
continue: 提前結束本次循環(huán)而開始評估下一輪;
break [n]: 跳出當前循環(huá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
當前文章:8、周期性任務、find、break和continue學習筆記
地址分享:http://jinyejixie.com/article12/poedgc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、企業(yè)建站、自適應網(wǎng)站、微信公眾號、網(wǎng)站策劃、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)