7.3 文件查找
7.3
測試:
整數測試
-le -lt
字符測試
== != > < -n -z(字符測試,開始說-s,錯了)
文件測試
-e -f
if [ $# -gt 1 ];then
組合測試條件
-a 與關系
-o 或關系
! 非關系
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]
q,Q,quit,Quit
#!/bin/bash
#
if [ $1 == ‘q‘ -o $1 == ‘quit‘ -o $1 == ‘Q‘ -o $1 == ‘Quit‘ ];then
echo "Quiting..."
exit 0
else
echo "Unkown Argument"
exit 1
fi
寫一個腳本:
計算100以內所有奇數和以及所有偶數的和:分別顯示之:
#!/bin/bash
#
declare -i EVENSUM=0
declare -i ODDSUM=0
for I in (1..100);do
if [ $[$I%/2] -eq 0 ];then
let EVENSUM+=$I
else
let ODDSUM+=$I
fi
done
echo "Odd sum is:$ODDSUM,Even sum is:$EVENSUM."
let I=$[$I+1]
SUM=$[$SUM+$I]
let SUM+=$I
let I+=1 相當於I++
-=
let I-=1 相當於 let I--
++I --I
*=
/=
%=
grep egrep fgrep:文本查找
文件查找
locate:(用的不多)
非實時,模糊匹配,查找是根據全系統文件數據庫進行的
# updatedb,手動生成文件數據庫
速度快
find:
實時
精確
支持眾多查找標準
遍歷指定目錄中的所有文件完成查找,速度慢
find 查找路徑 查找標準 查找到以後的處理動作
查找路徑,默認為當前目錄
查找標準:默認為指定路徑下的所有文件
處理動作:默認為顯示
匹配標準:
-name ‘FILENAME‘,對文件名做精確匹配
文件名通配
*:任意長度的任意字符
?:
[] find /etc -name ‘passwd‘
-iname ‘FILENAME‘ :文件名匹配時不區分大小寫
-regex PATTERN 基於正則表達式進行文件名匹配
-user USERNAME:根據屬主查找
-group GROUPNAME:根據屬組查找
-uid UID:根據UID查找
-gid GID:根據GID查找
若是用戶被刪除了,根據屬主查找是找不到的,需要根據UID查找,
原來屬於此用戶的文件屬主直接是ID號
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
-type
f:普通文件
d:
c:
b:
l:
p:
s:
find /etc -type d
-size [+|-] +大於 -小於 不加[+|-]等於或小於
#k
#M
#G
find /etc -size 10k -ls(顯示文件大小)
組合條件:(默認-a)
-a 與條件
-o 或條件
-not
時間戳:
-mtime
-ctime
-atime
[+|-]# 多少天
-mmin
-cmin
-amin
[+|-]# 多少分鐘
根據權限查找
-perm
mode 精確匹配
-mode 每一位都必須匹配,文件權限能完全包含此mode時才能顯示
+mode(廢棄)
/mode 有一個匹配,任意一位匹配即滿足條件
find ./ -perm 644
find ./ -perm -001 查找其他用戶有執行權限的
動作:
-print:顯示
-ls:類似ls -l的形式顯示每一個文件的詳細信息
-ok COMMAND {} \; {}文件名稱占位符 每一次操作都需要用戶確認
-exec COMMAND {} \; 不需要用戶確認
find ./ -perm -006 -exec chmod 0-w {} \;
find ./ -type d -ok +x {} \;
find /tmp -nouser -a -type d ls
find /tmp -not -type -d
find ./ -perm -020 -exec mv {} {}.new \;
find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;
/tmp目錄,不是目錄,並且還不能是套接字類型的文件
find /tmp -not -type d -a -not -type s -a -type f
/tmp/test目錄下,屬主不是user1,也不是user2的文件
find ./ -not -user user2 -a -not -user user2
find ./ -not \( -user user1 -a -user user2 \)
find ./ -not \(-user user1 -a -type d\)
練習:
1 查找/var目錄下屬主為root並且屬組為mail的所有文件
find /var -user root -group mail
2 查找/usr目錄下不屬於root,bin,或student的文件
find /usr -not -user \(root | bin | student\) 錯誤
find /usr -not -user root -a -not -user bin -a -not user studnet 對
find /usr -not \(-user root -o -user bin -o -user student\)對
3 查找/etc目錄下最近一周內內容修改過且不屬於root及student
用戶的文件
find /etc -mtime 7 -a -not -user root -a -not -user student
find /etc -mtime -7 -a -not \( -user root -o -user student \)
4 查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,
並且將其屬主屬組均修改為root
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chpwn root:root {} \;
5 查找/etc目錄下大於1M的文件,並將其文件名寫入
/tmp/etc.largefiles文件中
find /etc -size +1M >> /tmp/etc.largefiles
6 查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息
find /etc -not -perm /222 -ls
7.3 文件查找