使用 mlocate 查詢檔案
| 2017-11-14 12:15 收藏: 2
在這一系列的文章中,我們將來看下 mlocate
,來看看如何快速、輕鬆地滿足你的需求。
對於一個系統管理員來說,草中尋針一樣的查詢檔案的事情並不少見。在一臺擁擠的機器上,檔案系統中可能存在數十萬個檔案。當你需要確定一個特定的配置檔案是最新的,但是你不記得它在哪裡時怎麼辦?
如果你使用過一些類 Unix 機器,那麼你肯定用過 find
命令。毫無疑問,它是非常複雜和功能強大的。以下是一個只搜尋目錄中的符號連結,而忽略檔案的例子:
# find . -lname "*"
你可以用 find
命令做幾乎無盡的事情,這是不容否認的。find
命令好用的時候是很好且簡潔的,但是它也可以很複雜。這不一定是因為 find
命令本身的原因,而是它與 xargs
結合,你可以傳遞各種選項來調整你的輸出,並刪除你找到的那些檔案。
位置、位置,讓人沮喪
然而,通常情況下簡單是最好的選擇,特別是當一個脾氣暴躁的老闆搭著你的肩膀,閒聊著時間的重要性時。你還在模糊地猜測這個你從來沒有見過的檔案的路徑,而你的老闆卻肯定它在擁擠的 /var 分割槽的某處。
進一步看下 mlocate
。你也許注意過它的一個近親:slocate
,它安全地(注意字首字母 s 代表安全)記錄了相關的檔案許可權,以防止非特權使用者看到特權檔案。此外,還有它們所起源的一個更老的,原始 locate
命令。
mlocate
與其家族的其他成員(至少包括 slocate
)的不同之處在於,在掃描檔案系統時,mlocate
不需要持續重新掃描所有的檔案系統。相反,它將其發現的檔案(注意前面的 m 代表合併)與現有的檔案列表合併在一起,使其可以藉助系統快取從而效能更高、更輕量級。
在本系列文章中,我們將更仔細地瞭解 mlocate
(由於其流行,所以也簡稱其為 locate
),並研究如何快速輕鬆地將其調整到你心中所想的方式。
小巧和 緊湊
除非你經常重複使用複雜的命令,否則就會像我一樣,最終會忘記它們而需要在用的時候尋找它們。locate
命令的優點是可以快速查詢整個檔案系統,而不用擔心你處於頂層目錄、根目錄和所在路徑,只需要簡單地使用 locate
命令。
以前你可能已經發現 find
命令非常不聽話,讓你經常抓耳撓腮。你知道,丟失了一個分號或一個沒有正確轉義的特殊的字元就會這樣。現在讓我們離開這個複雜的 find
命令,放鬆一下,看一下這個聰明的小命令。
你可能需要首先透過執行以下命令來檢查它是否在你的系統上:
對於 Red Hat 家族:
# yum install mlocate
對於 Debian 家族:
# apt-get install mlocate
發行版之間不應該有任何區別,但版本之間幾乎肯定有細微差別。小心。
接下來,我們將介紹 locate
命令的一個關鍵元件,名為 updatedb
。正如你可能猜到的那樣,這是更新 locate
命令的資料庫的命令。這名字非常符合直覺。
這個資料庫是我之前提到的 locate
命令的檔案列表。該列表被儲存在一個相對簡單而高效的資料庫中。updatedb
透過 cron 任務定期執行,通常在一天中的安靜時間執行。在下面的清單 1 中,我們可以看到檔案 /etc/cron.daily/mlocate.cron
的內部(該檔案的路徑及其內容可能因發行版不同)。
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"
清單 1: 每天如何觸發 “updatedb” 命令。
如你所見,mlocate.cron
指令碼使用了優秀的 nice
命令來儘可能少地影響系統效能。我還沒有明確指出這個命令每天都在設定的時間執行(但如果我沒有記錯的話,原始的 locate
命令與你在午夜時的計算機減速有關)。這是因為,在一些 “cron” 版本上,延遲現在被引入到隔夜開始時間。
這可能是因為所謂的 “河馬之驚群”問題。想象許多計算機(或飢餓的動物)同時醒來從單一或有限的來源要求資源(或食物)。當所有的“河馬”都使用 NTP 設定它們的手錶時,這可能會發生(好吧,這個寓言扯多了,但請忍受一下)。想象一下,正好每五分鐘(就像一個 “cron 任務”),它們都要求獲得食物或其他東西。
如果你不相信我,請看下配置檔案 - 清單 2 中名為 anacron
的 cron 版本,這是檔案 /etc/anacrontab
的內容。
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
清單 2: 執行 “cron” 任務時延遲是怎樣被帶入的。
從清單 2 可以看到 RANDOM_DELAY
和 “delay in minutes” 列。如果你不熟悉 cron 這個方面,那麼你可以在這找到更多的東西:
# man anacrontab
否則,如果你願意,你可以自己延遲一下。有個很棒的網頁(現在已有十多年的歷史)以非常合理的方式討論了這個問題。本網站討論如何使用 sleep
來引入一個隨機性,如清單 3 所示。
#!/bin/sh
# Grab a random value between 0-240.
value=$RANDOM
while [ $value -gt 240 ] ; do
value=$RANDOM
done
# Sleep for that time.
sleep $value
# Syncronize.
/usr/bin/rsync -aqzC --delete --delete-after masterhost::master /some/dir/
清單 3:在觸發事件之前引入隨機延遲的 shell 指令碼,以避免河馬之驚群。
在提到這些(可能令人驚訝的)延遲時,是指 /etc/crontab
或 root 使用者自己的 crontab 檔案。如果你想改變 locate
命令執行的時間,特別是由於磁碟訪問速度減慢時,那麼它不是太棘手。實現它可能會有更優雅的方式,但是你也可以把檔案 /etc/cron.daily/mlocate.cron
移到別的地方(我使用 /usr/local/etc
目錄),使用 root 使用者新增一條記錄到 root 使用者的 crontab,貼上以下內容:
# crontab -e
33 3 * * * /usr/local/etc/mlocate.cron
使用 anacron,而不是透過 /var/log/cron
以及它的舊的、輪轉的版本,你可以快速地告訴它上次 cron.daily 任務被觸發的時間:
# ls -hal /var/spool/anacron
下一次,我們會看更多的使用 locate
、updatedb
和其他工具來查詢檔案的方法。
via: https://www.linux.com/blog/learn/intro-to-linux/2017/11/finding-files-mlocate
作者:CHRIS BINNIE 譯者:geekpi 校對:wxy
相關文章
- 檔案查詢
- 檔案批次查詢複製匯出,按檔名批次查詢檔案,按檔案內容批次查詢檔案
- 檔案查詢命令
- find 查詢檔案
- 查詢大檔案
- 在檔案上使用 SQL 查詢的示例SQL
- 使用 lsof 查詢開啟的檔案(轉)
- Linux 檔案查詢Linux
- linux 查詢檔案Linux
- Unix 檔案查詢命令
- TCL檔案查詢拆分
- 查詢Oracle資料檔案的使用情況Oracle
- 使用 lsof 查詢開啟的檔案 (ibm)IBM
- linux下使用find xargs grep查詢檔案及檔案內容Linux
- 查詢檔案位置路徑
- Linux查詢大檔案Linux
- MySQL 清空慢查詢檔案MySql
- 如何使用find和xargs查詢和處理檔案
- Unix 下使用 Find 命令查詢需要清理的檔案
- 使用Oracle的外部表查詢警告日誌檔案Oracle
- linux下的find檔案查詢命令與grep檔案內容查詢命令Linux
- java-遞迴(檔案查詢)Java遞迴
- linux 查詢檔案命令 findLinux
- 關於index檔案呼叫查詢Index
- 檔案上傳速度查詢方法
- 通過SQL查詢UDUMP檔案SQL
- 查詢jar中的pom檔案JAR
- 檔案內容查詢命令(轉)
- MacOS使用搜尋功能查詢隱藏檔案的方法Mac
- JAVA 中使用 SQL 語句查詢 EXCEL 檔案資料JavaSQLExcel
- 如何使用Rust查詢目錄中的所有 txt 檔案?Rust
- 查詢使用者轉儲檔案的名字及位置
- 命令列技巧:使用 find 和 xargs 查詢和處理檔案命令列
- 使用ContentResolver查詢SD卡中特定的檔案SD卡
- python檔案查詢之find命令Python
- Linux檔案查詢工具的探索Linux
- mybatis xml 檔案中like模糊查詢MyBatisXML
- Fresh for Mac檔案查詢管理軟體Mac