1. 程式人生 > >Linux怎麼快速查詢檔案,怎麼查詢一個命令檔案所在路徑、以及根據檔案內容進行查詢?

Linux怎麼快速查詢檔案,怎麼查詢一個命令檔案所在路徑、以及根據檔案內容進行查詢?

引言:上期回顧(想要學習的童鞋可以點選看看)

上一章節講訴了使用find命令查詢檔案的幾種方式,如果伺服器使用久了,或者是說部署了很多服務,在這種情況下使用find搜尋檔案會出現特別慢,同時也會消耗很多資源。所以針對這個問題,今天我們來學習另外一個能快速查詢一個檔案的命令,以及這個命令原理是什麼,還會教大家如何在linux中查詢我們輸入命令所在檔案路徑。

一、locate 命令 : locate 檔名

    這個locate命令搜尋檔案是比較快的,具體是為什麼呢?首先我們來講一下這個locate查詢檔案的原理。

    之所以這個locate命令查詢很快,它不像find一樣在我們的搜尋範圍進行查詢也不是在我們的硬碟上進行操作,而是在它所存放的資料庫中進行查詢。那資料庫是什麼呢?就類似一個記錄操作日誌的一個檔案庫,我們建立一個檔案時,就會儲存到我們的資料庫中,所以我們在搜尋檔案時只是會檢索資料庫,從而提高效率

    我們只用locate搜尋一下tomcat(圖1),速度幾乎達到秒搜。這個locate資料庫是定期被存放的,如果說我們剛剛建立的一個檔案能被搜尋到嗎?我們來試試。如(圖2),一個剛剛新建的資料夾today,再使用locate進行查詢時,第一次是查詢不到結果的。剛剛新建的一個檔案還沒儲存到資料庫中去,所以我們更新一下資料庫就可以查詢到,更新資料庫的命令是updatedb

    在這裡我們還需要注意一點,locate的資料庫並不是針對全部的目錄的。好比如說我們在臨時目錄/tmp下建立一個資料夾,試試我們能不能搜尋到(圖3),我們在/tmp目錄下建立一個資料夾,更新資料庫以後進行搜尋,可是結果並沒有搜尋到。所以大家記住locate到資料庫並不是針對所有目錄下的檔案哦。

    針對檔名有大小寫可使用-i的選項來忽略大小寫查詢,這裡就不再做演示了。

    

二、which 命令 : which 需要查詢命令

    大家知道我們所輸入的命令一般是存放在那個目錄下嗎? 不知道? 沒關係我告訴你哈哈哈哈~~~

      /bin、/usr/bin : 這個目錄下存放的命令是針對普通的使用者都可以使用命令。

      /sbin、/usr/sbin:這個目錄下存放的針對root使用者才能使用的命令。

    那我們怎麼知道這個命令所存放的位置呢? 這個時候就可以使用which命令來進行查詢。如(圖1),使用來which來查詢來rm、useradd命令所在檔案位置。我們很清楚就能看出rm是所有使用者可以使用的,其中還有一行"rm=rm -i",這個意思就是給rm取了一個別名的意思,具體的我們後期會有所介紹。像我們useradd命令就只是針對root使用者使用,因為這個命令是存放在/usr/sbin目錄下的。

    當然這些命令所存放的目錄也可以使用find進行查詢,但是效率會比較慢。

    

三、whereis 命令 :whereis 需要查詢命令

    這個命令幹什麼用的呢?這個也是查詢命令所在位置,但是和which有一點是不同的。whereis不僅僅可以查找出一個命令所在檔案,還可以查詢到該命令的幫助文件所在檔案位置。(其實在linux系統中,命令都會有相對應的幫助檔案提供給大家檢視,這個內容下個章節會有所介紹),這裡大家有所瞭解就可以了。

   

四、grep 命令 : grep 搜尋內容 檔名

    上面我們所學的命令都是進行搜尋檔案的,那這個grep是針對檔案內容進行搜尋的。比如我檢視一個配置檔案,可能這個配置檔案有幾百行甚至上千行,每一次檢視都需要翻頁或者是查詢關鍵字。如果使用grep命令,就可以快速的看到你所需要瀏覽的內容。

    我們先用more瀏覽一下/etc/inittab這個檔案,在使用grep來查詢每一行中包含set關鍵字的所在行。結果顯示有2行,這個就是grep命令的效果。

    grep命令還有兩個知識點需要大家掌握的:

             第一:怎麼去掉多餘的行?什麼意思呢?比如說我們檢視一個配置檔案,其中包含了很多註釋資訊(在配置檔案中一般#代表的是註釋),但是我們又不想看註釋資訊,很多配置檔案的註釋資訊都是英文,對於我來說看不看都是一回事哈哈哈,乾脆不要看了。 我們可以使用-v的選項來進行篩選

             注意:如果我們不想看到註釋資訊,可是有些註釋是寫在後面的,所以我們只需要去掉行首是#的就可以了,語法如下:

             "grep -v ^# /etc/inittab",^:這個代表著只去掉每一行以#開始的行。

             第二:同樣的如果存在大小寫的問題找不到你需要的行,可以使用-i的選項忽略大小寫進行查詢。