linux下locate工作原理

來源:互聯網
上載者:User

locate是在linux下實現快速尋找檔案的工具.相應的windows下有everything功能也很強大.現在要實現locate的GUI前端,就必須對locate作一番瞭解. 整個locate工作其實是由四部分組成的:

  • /usr/bin/updatedb
  • /usr/bin/locate or mlocate
  • /etc/updatedb.conf
  • /var/lib/mlocate/mlocate.db

updatedb主要用來更新資料庫,這個工作是通過crontab自動完成的. 
mlocate/locate是作來完成查詢功能的程式;
updatedb.conf是配置要查詢哪些目錄, 哪些檔案;
mlocate.db則是存放檔案資訊的檔案;

對於mlocate.db,這是有一定格式的資料庫檔案. 也就是說資料庫檔案是由頭和資料群組成. 檔案開始的8byte是magic number, 其值是\0mlocate, 接下來的4byte是設定檔的大小,以大端模式存放. 然後1byte是檔案格式版本,目前為0. 再1byte是可見度標記(0或1), 接下來是2byte的填充位元組和以SMNUL結尾的根目錄名資料庫檔案.

所以對於mlocate.db的讀取需要遵循這一格式. header接下是配置塊. 其作用是當設定檔更新後,確保到期資料庫不會被使用. 配置塊的大小是在檔案頭以bytes為單位存放. 配置塊是一系列的以變數名排序的變數分配區. 每個變數分配是由變數名和順序的列表,它們都已SMNUL為結束符. 變數列表是由兩個NUL字元結束的. 排序的規則是基於strcmp()結果的. 

當前定義的變數有:
prume_bind_mounts: 單節點, PRUNE_BIND_MOUNTS的值;
prunefs: PRUNEFS的值,每個節點轉換為大寫;
prunepaths: PRUNEPATHS的值;

檔案接下來的內容一直到檔案末尾描述了目錄和內容. 每個目錄有一個頭: 8byte目錄時間(以秒為單位),4byte目錄時間(以ns為單位).如果未知,則設為0, 其值小於1000000000. 4byte填儲值, SMUNL目錄終止符. 

目錄內容,是一系列的檔案節點,按如下順序排列:
目錄時間是st_ctime和st_mtime的最大值. updatedb使用原始的資料如查目錄時間在資料庫中,並且和檔案系統匹配正確.  目錄時間為0,則會導致重新掃描目錄. 這是必要的.

每個檔案節點由單個位元組開始,標記它們的類型:

  • 非目錄檔案, 檔案名稱以SMNUL終止;
  • 子目錄,檔案名稱以SMNUL終止;
  • 標記目前的目錄的結尾;

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.