在linux下搜索一個文件

在windows下有一個搜索工具,可以讓我們很快的找到一個文件,這是很有用的。然而在linux下搜索功能更加強大。

  1. ‘which’ 用來查找可執行文件的絕對路徑。

在前面已經用到該命令,需要注意的一點是,which只能用來查找PATH環境變量中出現的路徑下的可執行文件。這個命令用的也是蠻多的,有時候我們不知道某個命令的絕對路徑,which 一下很容易就知道了。

  1. ‘whereis’ 通過預先生成的一個文件列表庫去查找跟給出的文件名相關的文件。

語法: whereis [-bmsu]  [文件名稱]

‘-b’ : 只找binary 文件

‘-m’ : 只找在說明文件manual路徑下的文件

‘-s’ : 只找source來源文件

‘-u’ : 沒有說明檔的文件

說明:whereis 阿銘幾乎很少用到,如果您感興趣請深入研究。

  1. ‘locate’ 類似於’whereis’, 也是通過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪裏。

後邊直接跟文件名。如果您的linux沒有這個命令,請安裝軟件包 ‘mlocate’, 這個軟件包在您的系統安裝盤裏,後綴名是RPM,隨後介紹的find命令會告訴您如何查找這個包。如果您裝的CentOS您可以使用這個命令來安裝 yum install -y  mlocate 前提是您的CentOS能連網。至於yum這個命令如何使用,到後續章節您自然會明白。如果您剛裝上這個命令,初次使用會報錯。

[root@localhost ~] # locate passwd
locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory

這是因爲系統還沒有生成那個文件列表庫。您可以使用 updatedb 命令立即生成(更新)這個庫。如果您的服務器上正跑着重要的業務,那麼您最好不要去運行這個命令,因爲一旦運行,服務器的壓力會變大。這個數據庫默認情況下每週更新一次。所以您用locate命令去搜索一個文件,正好是在兩次更新時間段內,那您肯定是得不到結果的。您可以到/etc/updated.conf 去配置這個數據庫生成(更新)的規則。’locate’所搜索到的文件列表,不管是目錄名還是文件名,只要包含我們要搜索的關鍵詞,都會列出來,所以’locate’不適合精準搜索,這個命令阿銘使用的也並不多,您只要明白有這麼一個工具即可,用到時再去深究其用法吧。

  1. ‘find’ 這個搜索工具是阿銘用的最多的一個,所以請您務必要熟悉它。

語法 : find  [路徑] [參數] 下面介紹幾個阿銘經常用的參數

‘-atime +n/-n’ : 訪問或執行時間大於/小於n天的文件

‘-ctime +n/-n’ : 寫入、更改inode屬性(例如更改所有者、權限或者鏈接)時間大於/小於n天的文件

‘-mtime +n/-n’ : 寫入時間大於/小於n天的文件

[root@localhost ~]# find /tmp/ -mtime -1
/tmp/
/tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -atime +10
[root@localhost ~]# find /tmp/ -atime +1
/tmp/yum.log
/tmp/.bash_history

看到這裏,您對這三個time是不是有些暈了,那阿銘就先給您介紹一下這三個time屬性。

文件的 Access time也就是 ‘atime’ 是在讀取文件或者執行文件時更改的。文件的 Modified time也就是 ‘mtime’ 是在寫入文件時隨文件內容的更改而更改的。文件的 Create time也就是 ‘ctime’ 是在寫入文件、更改所有者、權限或鏈接設置時隨inode的內容更改而更改的。 因此,更改文件的內容即會更改mtime和ctime,但是文件的ctime可能會在 mtime 未發生任何變化時更改,例如,更改了文件的權限,但是文件內容沒有變化。 如何獲得一個文件的atime mtime 以及ctime ?

‘stat’ 命令可用來列出文件的 atime、ctime 和 mtime。

[root@localhost ~]# stat test/test2
  File: 'test/test2'
  Size: 0               Blocks: 0          IO Block: 4096   普通空文件
Device: 803h/2051d      Inode: 261657      Links: 1
Access: (0744/-rwxr--r--)  Uid: (  500/   user1)   Gid: (  500/testgroup)
Access: 2013-05-10 09:00:36.092000531 +0800
Modify: 2013-05-10 09:00:36.092000531 +0800
Change: 2013-05-10 09:30:58.788996594 +0800

atime不一定在訪問文件之後被修改,因爲:使用ext3文件系統的時候,如果在mount的時候使用了noatime參數那麼就不會更新atime的信息。總之, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟着要改了。

阿銘繼續’find’常用選項:

‘-name filename’ 直接查找該文件名的文件,這個選項使用很多。

[root@localhost ~]# find . -name test2
./test/test2
./test2

‘-type filetype’ 通過文件類型查找。文件類型在前面部分已經簡單介紹過,相信您已經大體上了解了。filetype 包含了 f, b, c, d, l, s 等。

[root@localhost ~]# find /tmp/ -type d
/tmp/
/tmp/.ICE-unix
/tmp/test
[root@localhost ~]# find /tmp/ -type f
/tmp/yum.log
/tmp/.bash_history
/tmp/ip.txt
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章