1. 程式人生 > >Linux基礎知識-第六天

Linux基礎知識-第六天

linux基礎知識


一、文件查找:

在文件系統上查找符合條件的文件;


文件查找:locate, find

非實時查找(數據庫查找):locate

實時查找:find


locate:

依賴於事先構建的索引;索引的構建是在系統較為空閑時自動進行(周期性任務);手動更新數據庫(updatedb);索引構建過程需要遍歷整個根文件系統,極消耗資源;


工作特點:

查找速度快;

模糊查找;

非實時查找;

語法:

locate KEYWORD


find:

實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找;


工作特點:

查找速度略慢;

精確查找;

實時查找;


語法:

find [OPTION]... [查找路徑] [查找條件] [處理動作]

查找路徑:指定具體目標路徑;默認為當前目錄;

查找條件:指定的查找標準,可以文件名、大小、類型、權限等標準進行;默認為找出指定路徑下的所有文件;

處理動作:對符合條件的文件做什麽操作;默認輸出至屏幕;


查找條件:

根據文件名查找:

-name "文件名稱":支持使用glob *, ?, [], [^]

-iname "文件名稱":不區分字母大小寫

-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱;


根據屬主、屬組查找:

-user USERNAME:查找屬主為指定用戶的文件;

group GRPNAME: 查找屬組為指定組的文件;

-uid UserID:查找屬主為指定的UID號的文件;

-gid GroupID:查找屬組為指定的GID號的文件;

-nouser:查找沒有屬主的文件;

-nogroup:查找沒有屬組的文件;


根據文件類型查找:

-type TYPE:

f: 普通文件

d: 目錄文件

l: 符號鏈接文件

s:套接字文件

b: 塊設備文件

c: 字符設備文件

p: 管道文件


組合條件:

與:-a

或:-o

非:-not, !


!A -a !B = !(A -o B)

!A -o !B = !(A -a B)


案例:

找出/tmp目錄下,屬主不是root,且文件名不是fstab的文件;

find /tmp \( -not -user root -a -not -name ‘fstab‘ \) -ls

find /tmp -not \( -user root -o -name ‘fstab‘ \) -ls


根據文件大小來查找:

-size [+|-]#UNIT

常用單位:k, M, G

#UNIT: (#-1, #]

-#UNIT:[0,#-1]

+#UNIT:(#,oo)


根據時間戳:

以“天”為單位;

-atime [+|-]#,

#: [#,#+1)

+#: [#+1,oo]

-#: [0,#)


-mtime

-ctime


以“分鐘”為單位:

-amin

-mmin

-cmin


根據權限查找:

-perm [+|-]MODE

MODE: 精確權限匹配

+MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可;

-MODE:每一類對象都必須同時擁有為其指定的權限標準;


處理動作:

-print:默認的處理動作,顯示至屏幕;

-ls:類似於對查找到的文件執行“ls -l”命令;

-delete:刪除查找到的文件;

-fls /path/to/somefile:查找到的所有文件的長格式信息保存至指定文件中;

-ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;對於每個文件執行命令之前,都會交互式要求用戶確認;

-exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令; {}: 用於引用查找到的文件名稱自身;


註意:find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令;

有些命令不能接受過多參數,此時命令執行可能會失敗;另一種方式可規避此問題:find | xargs COMMAND


練習:

1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄;

# find /var -user root -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、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件或目錄;

# find / -nouser -a -nogroup -a -atime -7


5、查找/etc目錄下大於1M且類型為普通文件的所有文件;

# find /etc -size +1M -type f


6、查找/etc目錄下所有用戶都沒有寫權限的文件;

# find /etc -not -perm /222


7、查找/etc目錄下至少有一類用戶沒有執行權限的文件;

# find /etc -not -perm -111


8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件;

# find /etc/init.d -perm -113


文件後綴總結:

常用的後綴名稱:

*.php ------是能用php語言解釋器進行解釋,能用瀏覽器打開的文件;


*.so -------這類是庫文件;


*.doc *.obt --------這是OpenOffice 能打開的文件;


.bz2 ------bzip2的壓縮文件


.gz ------gzip的壓縮文件


.tar ------tar打包文件(是包文件不是壓縮文件)


.tbz------tar打包並用bzip壓縮文件


.tgz-----tar打包並用gzip壓縮的文件


.au -----audio文件


.gif -----gif圖象文件


.html/.htm-----HTML文件


.jpg-----JPEG圖象文件


.pdf------電子文檔(PDF格式的)


.png-----PNG圖象文件


.ps------postscinpt文件(打印格式文件)


.txt------純文本文件


.wav-----audio文件


.xpm-----圖象文件


.conf-------配置文件


.lock-------LOCK文件(用來判斷一個文件或設備是否被使用)


.rpm------REDHATPackage.Manager文件(套件包或軟件包)


.c -------C源程序代碼文件


.cpp------C++源程序代碼文件


.h -------C或C++程序的頭文件


.o------程序目標文件


.pl------perl腳本文件


.so-----類庫文件



Linux基礎知識-第六天