1. 程式人生 > >7.3 文件查找

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 文件查找