溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)中怎么使用mlocate查找文件

發(fā)布時(shí)間:2022-01-27 09:41:50 來源:億速云 閱讀:363 作者:kk 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Linux系統(tǒng)中怎么使用mlocate查找文件,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Linux系統(tǒng)中一切皆為文件,一個(gè)系統(tǒng)可能存在數(shù)十萬個(gè)文件。那么如何快速的查找文件?如果你需要查找一個(gè)特定的配置文件可以使用使用 mlocate進(jìn)行查找文件,下面一起來看一下mlocate的具體使用方法。

如果你使用過一些類 Unix 機(jī)器,那么你肯定用過 find 命令。毫無疑問,它是非常復(fù)雜和功能強(qiáng)大的。以下是一個(gè)只搜索目錄中的符號鏈接,而忽略文件的例子:

 # find . -lname "*"

你可以用 find 命令做幾乎無盡的事情,這是不容否認(rèn)的。find 命令好用的時(shí)候是很好且簡潔的,但是它也可以很復(fù)雜。這不一定是因?yàn)?find 命令本身的原因,而是它與 xargs 結(jié)合,你可以傳遞各種選項(xiàng)來調(diào)整你的輸出,并刪除你找到的那些文件。

位置、位置,讓人沮喪

然而,通常情況下簡單是最好的選擇,特別是當(dāng)一個(gè)脾氣暴躁的老板搭著你的肩膀,閑聊著時(shí)間的重要性時(shí)。你還在模糊地猜測這個(gè)你從來沒有見過的文件的路徑,而你的老板卻肯定它在擁擠的 /var 分區(qū)的某處。

進(jìn)一步看下 mlocate。你也許注意過它的一個(gè)近親:slocate,它安全地(注意前綴字母 s 代表安全)記錄了相關(guān)的文件權(quán)限,以防止非特權(quán)用戶看到特權(quán)文件。此外,還有它們所起源的一個(gè)更老的,原始 locate 命令。

mlocate 與其家族的其他成員(至少包括 slocate)的不同之處在于,在掃描文件系統(tǒng)時(shí),mlocate 不需要持續(xù)重新掃描所有的文件系統(tǒng)。相反,它將其發(fā)現(xiàn)的文件(注意前面的 m 代表合并)與現(xiàn)有的文件列表合并在一起,使其可以借助系統(tǒng)緩存從而性能更高、更輕量級。

在本系列文章中,我們將更仔細(xì)地了解 mlocate (由于其流行,所以也簡稱其為 locate),并研究如何快速輕松地將其調(diào)整到你心中所想的方式。

小巧和 緊湊

除非你經(jīng)常重復(fù)使用復(fù)雜的命令,否則就會像我一樣,最終會忘記它們而需要在用的時(shí)候?qū)ふ宜鼈儭?code>locate 命令的優(yōu)點(diǎn)是可以快速查詢整個(gè)文件系統(tǒng),而不用擔(dān)心你處于頂層目錄、根目錄和所在路徑,只需要簡單地使用 locate 命令。

以前你可能已經(jīng)發(fā)現(xiàn) find 命令非常不聽話,讓你經(jīng)常抓耳撓腮。你知道,丟失了一個(gè)分號或一個(gè)沒有正確轉(zhuǎn)義的特殊的字符就會這樣?,F(xiàn)在讓我們離開這個(gè)復(fù)雜的 find 命令,放松一下,看一下這個(gè)聰明的小命令。

你可能需要首先通過運(yùn)行以下命令來檢查它是否在你的系統(tǒng)上:

對于 Red Hat 家族:

 # yum install mlocate

對于 Debian 家族:

 # apt-get install mlocate

發(fā)行版之間不應(yīng)該有任何區(qū)別,但版本之間幾乎肯定有細(xì)微差別。小心。

接下來,我們將介紹 locate 命令的一個(gè)關(guān)鍵組件,名為 updatedb。正如你可能猜到的那樣,這是更新 locate 命令的數(shù)據(jù)庫的命令。這名字非常符合直覺。

這個(gè)數(shù)據(jù)庫是我之前提到的 locate 命令的文件列表。該列表被保存在一個(gè)相對簡單而高效的數(shù)據(jù)庫中。updatedb 通過 cron 任務(wù)定期運(yùn)行,通常在一天中的安靜時(shí)間運(yùn)行。在下面的清單 1 中,我們可以看到文件 /etc/cron.daily/mlocate.cron 的內(nèi)部(該文件的路徑及其內(nèi)容可能因發(fā)行版不同)。

 #!/bin/sh nodevs=$(
 renice +19 -p $$ >/dev/null 2>&1 ionice -c2 -n7 -p $$ >/dev/null 2>&1 /usr/bin/updatedb -f "$nodevs"

清單 1: 每天如何觸發(fā) “updatedb” 命令。

如你所見,mlocate.cron 腳本使用了優(yōu)秀的 nice 命令來盡可能少地影響系統(tǒng)性能。我還沒有明確指出這個(gè)命令每天都在設(shè)定的時(shí)間運(yùn)行(但如果我沒有記錯(cuò)的話,原始的 locate 命令與你在午夜時(shí)的計(jì)算機(jī)減速有關(guān))。這是因?yàn)椋谝恍?“cron” 版本上,延遲現(xiàn)在被引入到隔夜開始時(shí)間。

這可能是因?yàn)樗^的 “河馬之驚群Thundering Herd of Hippos”問題。想象許多計(jì)算機(jī)(或饑餓的動(dòng)物)同時(shí)醒來從單一或有限的來源要求資源(或食物)。當(dāng)所有的“河馬”都使用 NTP 設(shè)置它們的手表時(shí),這可能會發(fā)生(好吧,這個(gè)寓言扯多了,但請忍受一下)。想象一下,正好每五分鐘(就像一個(gè) “cron 任務(wù)”),它們都要求獲得食物或其他東西。

如果你不相信我,請看下配置文件 – 清單 2 中名為 anacron 的 cron 版本,這是文件 /etc/anacrontab 的內(nèi)容。

 # /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: 運(yùn)行 “cron” 任務(wù)時(shí)延遲是怎樣被帶入的。

從清單 2 可以看到 RANDOM_DELAY 和 “delay in minutes” 列。如果你不熟悉 cron 這個(gè)方面,那么你可以在這找到更多的東西:

 # man anacrontab

否則,如果你愿意,你可以自己延遲一下。有個(gè)很棒的網(wǎng)頁(現(xiàn)在已有十多年的歷史)以非常合理的方式討論了這個(gè)問題。本網(wǎng)站討論如何使用 sleep 來引入一個(gè)隨機(jī)性,如清單 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:在觸發(fā)事件之前引入隨機(jī)延遲的 shell 腳本,以避免河馬之驚群。

在提到這些(可能令人驚訝的)延遲時(shí),是指 /etc/crontab 或 root 用戶自己的 crontab 文件。如果你想改變 locate 命令運(yùn)行的時(shí)間,特別是由于磁盤訪問速度減慢時(shí),那么它不是太棘手。實(shí)現(xiàn)它可能會有更優(yōu)雅的方式,但是你也可以把文件 /etc/cron.daily/mlocate.cron 移到別的地方(我使用 /usr/local/etc 目錄),使用 root 用戶添加一條記錄到 root 用戶的 crontab,粘貼以下內(nèi)容:

 # crontab -e 33 3 * * * /usr/local/etc/mlocate.cron

使用 anacron,而不是通過 /var/log/cron 以及它的舊的、輪轉(zhuǎn)的版本,你可以快速地告訴它上次 cron.daily 任務(wù)被觸發(fā)的時(shí)間:

 # ls -hal /var/spool/anacron

什么是Linux系統(tǒng)

Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

上述就是小編為大家分享的Linux系統(tǒng)中怎么使用mlocate查找文件了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI