藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 系統管理


    

藍森林 http://www.lslnet.com 2006年8月18日 15:18


如何提高檢索的速度

我在 283392個文件中,用grep進行查找的時候用了31分鐘。
用什麼方法可以大副提高查找速度,或者用其他工具

如何提高檢索的速度

查找什麼?文件名?文件內容?
你說的太籠統了

如何提高檢索的速度

-->
文件中的關鍵字,按內容查

如何提高檢索的速度

我認為 grep 的效率已經很高了
如果說速度慢,也許 FS 是個瓶頸,換成 ReiserFS 應該能有大幅度提高,ReiserFS 小文件存儲效率極高

如何提高檢索的速度

是啊,這個問題不好辦,下周用reiserFS和ext3中的journal模式試試看

如何提高檢索的速度

Linux中文件查找技術大全

每一種操作系統都是由成千上萬個不同種類的文件所組成的。其中有系統本身自帶的
文件,用戶自己的文件,還有共享文件等等。

在Linux中需要我們使用專用的「查找」命令來尋找在硬盤上的文件。
Linux下的文件表達格式非常複雜,不像WINDOWS,DOS下都是統一的AAAAAAA.BBB格式
那麼方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者後綴就非常容易
查找到。Linux中查找文件的命令通常為「find」命令,「find」命令能幫助我們在使用,
管理Linux的日常事務中方便的查找出我們需要的文件。對於Linux新手來說,「find」
命令也是瞭解和學習Linux文件特點的方法。因為Linux發行版本繁多,版本升級很快,
在Linux書籍上往往寫明某個配置文件的所在位置,往往Linux新手按圖索驥還是不能
找到。比如說REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬
盤位置和文件目錄就有了很大的改變,如果不學會使用「find」命令,那麼在成千上萬
的Linux文件中要找到其中的一個配置文件是相當困難的,筆者在沒有精通「find」命
令之前就吃過這樣的苦頭。好,下面就詳細為大家介紹強大的「find」命令的全部使用
方法和用途。

通過文件名查找法:

這個方法說起來就和在WINDOWS下查找文件一樣容易理解了。如果你把這個文件放在
單個的文件夾裡面,只要使用常見的「ls"命令就能方便的查找出來,那麼使用「find」
命令來查找它就不能給你留下深刻的印象,畢竟「find」命令的強大功能不止這個。如
果知道了某個文件的文件名,而不知道這個文件放到哪個文件夾,甚至是層層套嵌的
文件夾裡。舉例說明,假設你忘記了httpd.conf這個文件在系統的哪個目錄下,甚至
在系統的某個地方也不知道,則這是可以使用如下命令:

find / -name httpd.conf  

這個命令語法看起來很容易就明白了,就是直接在find後面寫上 -name,表明要求
系統按照文件名查找,最後寫上httpd.conf這個目標文件名即可。稍等一會系統會
在計算機屏幕上顯示出查找結果列表:

etc/httpd/conf/httpd.conf  

這就是httpd.conf這個文件在Linux系統中的完整路徑。查找成功。

如果輸入以上查找命令後系統並沒有顯示出結果,那麼不要以為系統沒有執行
find/ -name httpd.conf命令,而可能是你的系統中沒有安裝Apache服務器,這時
只要你安裝了Apache Web服務器,然後再使用find / -name httpd.conf就能找到這
個配置文件了。

無錯誤查找技巧:

在Linux系統中「find」命令是大多數系統用戶都可以使用的命令,並不是ROOT系統管理
員的專利。但是普通用戶使用「find」命令時也有可能遇到這樣的問題,那就是Linux系
統中系統管理員ROOT可以把某些文件目錄設置成禁止訪問模式。這樣普通用戶就沒有
權限用「find」命令來查詢這些目錄或者文件。當普通用戶使用「find」命令來查詢這些
文件目錄是,往往會出現"Permissiondenied."(禁止訪問)字樣。系統將無法查詢到
你想要的文件。為了避免這樣的錯誤,我們可是使用轉移錯誤提示的方法嘗試著查找
文件,輸入
find / -name access_log 2>;/dev/null  

這個方法是把查找錯誤提示轉移到特定的目錄中去。系統執行這個命令後,遇到錯誤
的信息就直接輸送到stderrstream 2 中,access_log 2就是表明系統將把錯誤信息輸
送到stderrstream 2中,/dev/null是一個特殊的文件,表明空的或者錯誤的信息,這
樣查詢到的錯誤信息將被轉移了,不會再顯示了。

在Linux系統查找文件也會遇到這樣一個實際問題。如果我們在整個硬盤,這個系統中
查找某個文件就要花費相當長的一段時間,特別是大型Linux系統和容量較大的硬盤,
文件放在套嵌很深的目錄中的時候。如果我們知道了這個文件存放在某個大的目錄中,
那麼只要在這個目錄中往下找就能節省很多時間了。使用find /etc -name httpd.conf
就可以解決這個問題。上面的命令就是表示在etc目錄中查詢httpd.conf這個文件。
這裡再說明一下「/ 」這個函數符號的含義,如果輸入 「find/ 」就是表示要求Linux系
統在整個ROOT目錄下查找文件,也就是在整個硬盤上查找文件,而「find/etc」就是只
在 etc目錄下查找文件。因為「find/etc」表示只在etc目錄下查找文件,所以查找的
速度就相應要快很多了。

根據部分文件名查找方法:

這個方法和在WINDOWS中查找已知的文件名方法是一樣的。不過在Linux中根據部分文
件名查找文件的方法要比在WINDOWS中的同類查找方法要強大得多。例如我們知道某個
文件包含有srm這3個字母,那麼要找到系統中所有包含有這3個字母的文件是可以實現
的,輸入:


find /etc -name '*srm*'  

這個命令表明了Linux系統將在/etc整個目錄中查找所有的包含有srm這3個字母的文件,
比如 absrmyz, tibc.srm等等符合條件的文件都能顯示出來。如果你還知道這個文件
是由srm 這3個字母打頭的,那麼我們還可以省略最前面的星號,命令如下:

find/etc -name 'srm*'  

這是只有像srmyz 這樣的文件才被查找出來,像absrmyz或者 absrm這樣的文件都不符
合要求,不被顯示,這樣查找文件的效率和可靠性就大大增強了。

根據文件的特徵查詢方法:

如果只知道某個文件的大小,修改日期等特徵也可以使用「find」命令查找出來,這和
WINDOWS系統中的"搜索"功能是基本相同的。在微軟的"搜索"中WINDOWS中的"搜索助理"
使得搜索文件和文件夾、打印機、用戶以及網絡中的其他計算機更加容易。它甚至使在
Internet 上搜索更加容易。"搜索助理"還包括一個索引服務,該服務維護了計算機中
所有文件的索引,使得搜索速度更快。使用"搜索助理"時,用戶可以指定多個搜索標準。
例如,用戶可以按名稱、類型及大小搜索文件和文件夾。用戶甚至可以搜索包含特定文
本的文件。如果用戶正使用 Active Directory,這時還可以搜索帶有特定名稱或位置的
打印機。

例如我們知道一個Linux文件大小為1,500 bytes,那麼我們可是使用如下命令來查詢
find / -size 1500c,字符 c 表明這個要查找的文件的大小是以bytes為單位。如果
我們連這個文件的具體大小都不知道,那麼在Linux中還可以進行模糊查找方式來解決。
例如我們輸入find/ -size +10000000c 這個命令,則標明我們指定系統在根目錄中查找
出大於10000000字節的文件並顯示出來。命令中的「+」是表示要求系統只列出大於指定
大小的文件,而使用「-」則表示要求系統列出小於指定大小的文件。下面的列表就是在
Linux使用不同「 find"命令後系統所要作出的查找動作,從中我們很容易看出在Linux
中使用「find"命令的方式是很多的,「 find"命令查找文件只要靈活應用,絲毫不必在
WINDOWS中查找能力差。


find / -amin -10 # 查找在系統中最後10分鐘訪問的文件
  find / -atime -2 # 查找在系統中最後48小時訪問的文件
  find / -empty # 查找在系統中為空的文件或者文件夾
  find / -group cat # 查找在系統中屬於 groupcat的文件
  find / -mmin -5 # 查找在系統中最後5分鐘裡修改過的文件
  find / -mtime -1 #查找在系統中最後24小時裡修改過的文件
  find / -nouser #查找在系統中屬於作廢用戶的文件
  find / -user fred #查找在系統中屬於FRED這個用戶的文件

下面的列表就是對find命令所可以指定文件的特徵進行查找的部分條件。在這裡並沒有
列舉所有的查找條件,參考有關Linux有關書籍可以知道所有find命令的查找函數。
  -amin n
  查找系統中最後N分鐘訪問的文件
  -atime n
  查找系統中最後n*24小時訪問的文件
  -cmin n
  查找系統中最後N分鐘被改變狀態的文件
  -ctime n
  查找系統中最後n*24小時被改變狀態的文件
  -empty
  查找系統中空白的文件,或空白的文件目錄,或目錄中沒有子目錄的文件夾
  -false
  查找系統中總是錯誤的文件
  -fstype type
  查找系統中存在於指定文件系統的文件,例如:ext2 .
  -gid n
  查找系統中文件數字組 ID 為 n的文件
  -group gname
  查找系統中文件屬於gnam文件組,並且指定組和ID的文件

Find命令的控制選項說明:

  Find命令也提供給用戶一些特有的選項來控制查找操作。下表就是我們總結出的
最基本,最常用的find命令的控制選項及其用法。
  選項
  用途描述
  -daystart
  .測試系統從今天開始24小時以內的文件,用法類似-amin
  -depth
  使用深度級別的查找過程方式,在某層指定目錄中優先查找文件內容
  -follow
  遵循通配符鏈接方式查找; 另外,也可忽略通配符鏈接方式查詢
  -help
  顯示命令摘要
  -maxdepth levels
  在某個層次的目錄中按照遞減方法查找
  -mount
  不在文件系統目錄中查找, 用法類似 -xdev.
  -noleaf
  禁止在非UNUX文件系統,MS-DOS系統,CD-ROM文件系統中進行最優化查找
  -version
  打印版本數字

使用-follow選項後,find命令則遵循通配符鏈接方式進行查找,除非你指定這個選項,
否則一般情況下find命令將忽略通配符鏈接方式進行文件查找。

-maxdepth選項的作用就是限制find命令在目錄中按照遞減方式查找文件的時候搜索文

件超過某個級別或者搜索過多的目錄,這樣導致查找速度變慢,查找花費的時間過多。
例如,我們要在當前(.)目錄技巧子目錄中查找一個名叫fred的文件,我們可以使用如
下命令

find . -maxdepth 2 -name fred  

假如這個fred文件在./sub1/fred目錄中,那麼這個命令就會直接定位這個文件,查找
很容易成功。假如,這個文件在./sub1/sub2/fred目錄中,那麼這個命令就無法查找
到。因為前面已經給find命令在目錄中最大的查詢目錄級別為2,只能查找2層目錄下的
文件。這樣做的目的就是為了讓find命令更加精確的定位文件,如果你已經知道了某個
文件大概所在的文件目錄級數,那麼加入-maxdepth n 就很快的能在指定目錄中查找
成功。

使用混合查找方式查找文件

find命令可以使用混合查找的方法,例如我們想在/tmp目錄中查找大於100000000字
節並且在48小時內修改的某個文件,我們可以使用-and 來把兩個查找選項鏈接起來
組合成一個混合的查找方式。

find /tmp -size +10000000c -and -mtime +2  

學習過計算機語言的朋友都知道,在計算機語言裡,使用and ,or 分別表示「與」和「或」
的關係。在Linux系統的查找命令中一樣通用。

還有這樣的例子,

find / -user fred -or -user george  

我們可以解釋為在/tmp目錄中查找屬於fred或者george這兩個用戶的文件。

在find命令中還可以使用「非」的關係來查找文件,如果我們要在/tmp目錄中查找所有
不屬於panda的文件,使用一個簡單的

find /tmp ! -user panda  

命令就可以解決了。很簡單。

查找並顯示文件的方法

查找到某個文件是我們的目的,我們更想知道查找到的文件的詳細信息和屬性,如果
我們採取現查找文件,在使用LS命令來查看文件信息是相當繁瑣的,現在我們也可以
把這兩個命令結合起來使用。

find / -name "httpd.conf" -ls  

系統查找到httpd.conf文件後立即在屏幕上顯示httpd.conf文件信息。

12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

下面的表格就是一些常用的查找文件並顯示文件信息的參數和使用方法

選項
  用途描述
  -exec command;
  查找並執行命令
  -fprint file
  打印文件完整文件名
  -fprint0 file
  打印文件完整文件名包括空的文件
  -fprintf file format
  打印文件格式
  -ok command;
  給用戶命令執行操作,根據用戶的Y 確認輸入執行
  -printf format
  打印文件格式
  -ls
  打印同種文件格式的文件.

如何提高檢索的速度

學習......................

如何提高檢索的速度

如果是數量巨大的小文件,不知道能不能盡量的把數據結構話,然後用數據庫來存儲。
無論如何提高全文搜索的速度都不如優化數據組織和存儲方式來的效果更好一些。

如何提高檢索的速度

-->
數據量巨大,都是小文件,本來用數據庫做的全文檢索,但是全文檢索速度也很慢,而且檢索文件很大



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com