亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2118 | 回復(fù): 0
打印 上一主題 下一主題

在linux中搜索文件 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-01-12 22:40 |只看該作者 |倒序?yàn)g覽
搜索文件
搜索文件用處很大。因?yàn)槲覀兂3P枰滥硞(gè)文件放在哪里。在Linux中,也有相當(dāng)優(yōu)秀的搜索系統(tǒng)。通常find不很常用。因?yàn)樗俣嚷,耗費(fèi)硬盤空間。通常我們都是先使用whereis或者是locate來檢查,如果真的找不到了,才以find來搜索。為什么呢?因?yàn)閣hereis與locate是利用數(shù)據(jù)庫來搜索數(shù)據(jù),所以相當(dāng)快,而且并沒有實(shí)際搜索硬盤,比較省時(shí)。
which(尋找“執(zhí)行文件”)
[root@linux ~]# which [-a] command
參數(shù):
-a : 將所有可找到的命令均列出,而不僅僅列出第一個(gè)找到的命令名稱
范例:
[root@linux ~]# which passwd
/usr/bin/passwd
[root@linux ~]# which traceroute -a
/usr/sbin/traceroute
/bin/traceroute

這個(gè)命令是根據(jù)“PATH”環(huán)境變量所規(guī)范的路徑,去搜索“執(zhí)行文件”的文件名。所以,重點(diǎn)是找出“執(zhí)行文件”。which后面接的是“完整文件名”。若加上 -a參數(shù),則可以列出所有可以找到的同名執(zhí)行文件,而非僅顯示第一個(gè)。
whereis(尋找特定文件)
[root@linux ~]# whereis [-bmsu] 文件或目錄名
參數(shù):
-b  : 只找二進(jìn)制文件
-m  : 只找在幫助文件manual路徑下的文件
-s  : 只找來源文件
-u  : 沒有幫助文件的文件。
范例:
[root@linux ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD
/usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
# 任何與passwd有關(guān)的文件名都會(huì)被列出來。
[root@linux ~]# whereis -b passwd
passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD
[root@linux ~]# whereis -m passwd
passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

稍候會(huì)提到find搜索命令,find是很強(qiáng)大的搜索命令,但很費(fèi)時(shí)間(因?yàn)閒ind是直接搜索硬盤,如果硬盤比較老舊的話,需要等很久)。這個(gè)時(shí)候,whereis就相當(dāng)好用了。另外,whereis可以加入?yún)?shù)來找相關(guān)的數(shù)據(jù)。例如,如果要找可執(zhí)行文件(binary),那么加上 -b就可以。如上面的范例針對(duì)passwd程序來說明。如果不加任何參數(shù),那么就將所有的數(shù)據(jù)列出來。
whereis到底是使用什么呢?為何搜索速度會(huì)比find快這么多?其實(shí)也沒有什么。這是因?yàn)長inux系統(tǒng)會(huì)將系統(tǒng)內(nèi)的所有文件都記錄在一個(gè)數(shù)據(jù)庫文件里,當(dāng)使用whereis或者locate時(shí),都會(huì)以此數(shù)據(jù)庫文件的內(nèi)容為準(zhǔn),因此,有時(shí)你還會(huì)發(fā)現(xiàn),使用這兩個(gè)執(zhí)行文件時(shí),會(huì)找到已刪除的文件。而且也找不到剛剛建立的最新文件。這就是因?yàn)檫@兩個(gè)命令是通過數(shù)據(jù)庫中的結(jié)果去搜索文件。
另外,基本上,Linux每天會(huì)針對(duì)Linux主機(jī)上所有文件的位置,進(jìn)行搜索數(shù)據(jù)庫的更新,更新的程序就是updatedb,可以在FC4系統(tǒng)的 /etc/cron.daily/slocate.cron文件找到相關(guān)的機(jī)制。當(dāng)然,也可以直接使用 /usr/bin/updatedb來更新數(shù)據(jù)庫文件。
locate
[root@linux ~]# locate filename
[root@linux ~]# locate passwd
/lib/security/pam_passwdqc.so
/lib/security/pam_unix_passwd.so
/usr/lib/kde3/kded_kpasswdserver.so
/usr/lib/kde3/kded_kpasswdserver.la
.......中間省略.......

locate的使用更簡單,直接在后面輸入“文件的部分名稱”后,就能夠得到結(jié)果。舉例來說,輸入locate passwd,那么,在完整文件名(包含路徑名稱)中,只要有passwd在其中,就會(huì)顯示出來。如果忘記某個(gè)文件的完整文件名時(shí),這也是個(gè)很方便好用的命令。
但是,它有使用的限制。為什么呢?你會(huì)發(fā)現(xiàn),使用locate來尋找數(shù)據(jù)的時(shí)候特別快,這是因?yàn)閘ocate尋找的數(shù)據(jù)是由“已建立的數(shù)據(jù)庫 /var/ lib/slocate/”里面的數(shù)據(jù)所搜索到的,所以不用直接在去硬盤中存取數(shù)據(jù),當(dāng)然很快。那么,有什么限制呢?就是因?yàn)樗墙?jīng)由數(shù)據(jù)庫來搜索的,而數(shù)據(jù)庫的建立默認(rèn)每天執(zhí)行一次(每個(gè)版本都不同,F(xiàn)C4是每天更新數(shù)據(jù)庫一次)。所以,如果新建立起文件,卻還在數(shù)據(jù)庫更新之前搜索該文件,locate會(huì)告訴你“找不到”。因?yàn)楸仨氁聰?shù)據(jù)庫。
那么,到底要建立哪些數(shù)據(jù)庫呢?是否全部都要建立?似乎不需要,這個(gè)時(shí)候,你可以自己選擇需要建立文件數(shù)據(jù)庫的目錄?梢栽 /etc/updatedb.conf文件內(nèi)設(shè)置。建議使用默認(rèn)值,不過,在 /etc/updatedb.conf里,請(qǐng)把“DAILY_UPDATE=no”改成“DAILY_UPDATE=yes”。至于修改的方法,等到我們第三篇介紹vi后,就會(huì)知道。當(dāng)然,也可以手動(dòng)執(zhí)行updatedb。
find
[root@linux ~]# find [PATH] [option] [action]
參數(shù):
1. 與時(shí)間有關(guān)的參數(shù):
-atime n    : n為數(shù)字,意義為在n天之前的“一天之內(nèi)”存。╝ccess)過的文件。
-ctime n    : n為數(shù)字,意義為在n天之前的“一天之內(nèi)”修改(change)過狀態(tài)的文件。
-mtime n    : n為數(shù)字,意義為在n天之前的“一天之內(nèi)”修改(modification)過的文件。
-newer file : file為一個(gè)存在的文件,意思是說,只要文件比file還要新,
就會(huì)被列出來。
2. 與用戶或用戶組名稱有關(guān)的參數(shù):
-uid n      : n為數(shù)字,這個(gè)數(shù)字是用戶的賬號(hào)ID,即UID,這個(gè)UID是記錄在
/etc/passwd里與賬號(hào)名稱對(duì)應(yīng)的數(shù)字。這方面會(huì)在第四篇介紹。
-gid n      : n為數(shù)字,這個(gè)數(shù)字是用戶組名稱的ID,即GID,這個(gè)GID記錄在
/etc/group,相關(guān)的介紹會(huì)在第四篇說明。
-user name  : name為用戶賬號(hào)名稱。例如dmtsai
-group name : name為用戶組名稱,例如users。
-nouser     : 尋找文件的擁有者不存在 /etc/passwd的人。
-nogroup    : 尋找文件的擁有用戶組不存在于 /etc/group的文件。
自行安裝軟件時(shí),很可能該軟件的屬性中并沒有文件擁有者,
這是可能的。在這個(gè)時(shí)候,就可以使用 -nouser與 -nogroup搜索。
3. 與文件權(quán)限及名稱有關(guān)的參數(shù):
-name filename : 搜索文件名為filename的文件。
-size [+-]SIZE : 搜索比SIZE還要大(+)或小(-)的文件。這個(gè)SIZE的規(guī)格有:
c: 表示byte,k: 表示1024bytes。所以,要找比50KB
還要大的文件,就是“-size +50k”
-type TYPE     : 搜索文件的類型為TYPE,類型主要有:一般正規(guī)文件 (f),
設(shè)備文件 (b, c), 目錄 (d), 連接文件 (l), 套接字(s),
及FIFO (p) 等屬性。
-perm mode     : 搜索文件屬性“剛好等于”mode的文件,這個(gè)mode為類似chmod
的屬性值,舉例來說,-rwsr-xr-x的屬性為4755。
-perm -mode    : 搜索文件屬性“必須要全部囊括mode的屬性”的文件,舉例來說,
要搜索 -rwxr--r--,即0744的文件,使用 -perm -0744,
當(dāng)一個(gè)文件的屬性為 -rwxr-xr-x,即4755時(shí),也會(huì)列出來,
因?yàn)?-rwxr-xr-x 的屬性已經(jīng)囊括了 -rwxr--r-- 的屬性了。
-perm +mode    : 搜索文件屬性“包含任一 mode的屬性”的文件,舉例來說,我們搜索
-rwxr-xr-x,即 -perm +755時(shí),但一個(gè)文件屬性為 -rw-------
也會(huì)被列出來,因?yàn)樗?-rw.... 的屬性存在。
4. 額外可進(jìn)行的動(dòng)作:
-exec command  : command為其他命令,-exec后面可再接額外的命令來處理搜索到
的結(jié)果。
-print         : 將結(jié)果打印到屏幕上,這個(gè)動(dòng)作是默認(rèn)動(dòng)作。
范例:
范例一:將過去系統(tǒng)上24小時(shí)內(nèi)更改過內(nèi)容(mtime)的文件列出
[root@linux ~]# find / -mtime 0
# 0是重點(diǎn)。0表示當(dāng)前時(shí)間,所以,從現(xiàn)在開始到24小時(shí)前,
# 修改過內(nèi)容的文件都會(huì)列出來。如果是三天前的24小時(shí)內(nèi)呢?
# find / -mtime 3,意思是說今天之前的3*24 ~ 4*24小時(shí)之間
# 修改過的文件都列出。同時(shí) -atime與 -ctime的用法相同。
范例二:尋找 /etc下面的文件,如果文件日期比 /etc/passwd新就列出。
[root@linux ~]# find /etc -newer /etc/passwd
# -newer 用在分辨兩個(gè)文件之間的新舊關(guān)系。
范例三:搜索 /home下面屬于dmtsai的文件
[root@linux ~]# find /home -user dmtsai
# 這也很有用。當(dāng)我們要找出任何一個(gè)用戶在系統(tǒng)中的所有文件時(shí),
# 就可以利用這個(gè)命令將屬于某個(gè)用戶的所有文件都找出來。
范例四:搜索系統(tǒng)中不屬于任何人的文件。
[root@linux ~]# find / -nouser
# 通過這個(gè)命令,可以輕松找出不太正常的文件。
# 如果找到不屬于系統(tǒng)任何人的文件時(shí),不要太緊張,
# 有時(shí)候是正常的。尤其是你曾經(jīng)以源碼自行編譯軟件時(shí)。
范例五:找出文件名為passwd的文件。
[root@linux ~]# find / -name passwd
# 利用 -name可以搜索文件名。
范例6:搜索文件屬性為 f(普通文件)的文件。
[root@linux ~]# find /home -type f
# -type的屬性也很有幫助。尤其是要找出那些怪異的文件,
# 例如套接字與FIFO文件,可以用find /var -type p或 -type s來找。
范例7:搜索文件中含有SGID/SUID/SBIT的屬性。
[root@linux ~]# find / -perm +7000
# 7000就是 ---s--s--t,只要含有s或t的就列出,
# 所以當(dāng)然要使用 +7000,使用 -7000表示要含有 ---s--s--t的所有3個(gè)權(quán)限,
# 因此,就是 +7000。
范例八:將上個(gè)范例找到的文件使用ls -l列出來。
[root@linux ~]# find / -perm +7000 -exec ls -l {} \;
# 注意,-exec后面的ls -l就是額外的命令,
# {} 表示“由find找到的內(nèi)容”。所以,-exec ls -l {}
# 就是將前面找到的文件以ls -l列出詳細(xì)信息。至于 \; 則是表示
# -exec的命令到此為止。意思是說,整個(gè)命令其實(shí)只有在
# -exec(里面就是執(zhí)行命令)\;
# 也就是說,-exec最后一定要以 \; 結(jié)束才行。
范例九:找出系統(tǒng)中大于1MB的文件。
[root@linux ~]# find / -size +1000k
# 雖然在man page提到可以使用M與G分別表示MB與GB,
# 不過,筆者卻試不出來這個(gè)功能。所以,當(dāng)前應(yīng)該是僅支持到c與k。

如果要尋找一個(gè)文件,使用find是不錯(cuò)的主意。它可以根據(jù)不同的參數(shù)提供搜索功能。例如,要尋找文件名為httpd.conf的文件,它應(yīng)該是在 /etc中,就可以使用“find /etc -name httpd.conf”。如果記得有一個(gè)文件的文件名包含了httpd,但不知道全名,可以用通配符 * ,如“find /etc -name '*httpd*'”,就可將文件名含有httpd的文件都列出來。不過,由于find在尋找數(shù)據(jù)時(shí)相當(dāng)消耗硬盤。所以一般不要使用find。有更好的命令可以取代它,那就是whereis與locate。
不管怎么說,find在找尋特殊的文件屬性以及特殊的文件權(quán)限(SUID/SGID等等)時(shí),是相當(dāng)有用的工具程序之一。這很重要。


本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/108299/showart_2147089.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP