日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下查找命令which/whereis/locate/find的对比和总结

發布時間:2023/12/15 linux 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下查找命令which/whereis/locate/find的对比和总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux下的查找命令有很多,常用的有which、whereis、locate、find。那么這4個命令之間各自有什么特點,又有什么區別?什么時候該用哪個才最合適呢?詳細不少人沒法給出一個精確的答案,包括我自己也是。所以,今天我們就來進行一個全面的總結和對比。

1. which

這條命令主要是用來查找系統PATH目錄下的可執行文件。說白了就是查找那些我們已經安裝好的可以直接執行的命令。比如:

實例:

leon@Ubuntu:~$ which ls /bin/ls leon@Ubuntu:~$ which cat /bin/cat leon@Ubuntu:~$ which gcc /usr/bin/gcc

小結:

  • 功能作用:從環境變量PATH中,定位/返回與指定名字相匹配的可執行文件所在的路徑;
  • 執行原理:在當前環境變量PATH中依次尋找能夠匹配所找命令名字的可執行文件名,不加-a選項時返回第一個匹配的可執行文件的路徑,否則依次返回滿足條件的所有可執行文件的路徑名;
  • 適用場合:一般用于查找命令/可執行文件所在的路徑。有時候可能在多個路徑下存在相同的命令,該命令可用于查找當前所執行的命令到底是哪一個位置處的命令;

2. whereis

這個命令可以用來查找二進制文件、源代碼文件、幫助命令(man)文件。與which不同的是這條命令可以是通過文件索引數據庫而非PATH來查找的,所以查找的面比which要廣。例如:

實例:

leon@Ubuntu:~$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz leon@Ubuntu:~$ whereis cat cat: /bin/cat /usr/share/man/man1/cat.1.gz leon@Ubuntu:~$ whereis gcc gcc: /usr/bin/gcc /usr/lib/gcc /usr/bin/X11/gcc /usr/share/man/man1/gcc.1.gz

小結:

  • 功能作用:定位/返回與指定名字匹配的二進制文件、源代碼文件和幫助手冊文件所在的路徑;
  • 執行原理:首先會去掉filename中的前綴空格和以.開頭的任何字符,然后再在數據庫(var/lib/slocate/slocate.db)中查找與上述處理后的filename相匹配的二進制文件、源文件和幫助手冊文件。為了確保所搜尋的路徑信息是最新的版本,使用之前可以使用updatedb命令手動更新數據庫;
  • 適用場合:二進制文件、源文件和幫助手冊文件路徑的查找;

3. locate

這個命令也是通過數據庫查找文件,但是這個命令的適用范圍就比whereis大多了。這個命令可以找到任意你指定要找的文件,并且可以只輸入部分文件名(前面兩個命令是要輸入完整文件名的)。同時locte還可以通過-r選項使用正則表達式,功能十分強大。例如:

實例:

leon@Ubuntu:~$ locate SysChangelog /home/leon/SysChangelog

小結:

  • 功能作用:同whereis指令一樣,也是從數據庫建立的索引中查找,不同的是該命令查找所有部分匹配的文件。使用之前可以使用updatedb命令手動更新數據庫;
  • 執行原理:默認情況下(當filename中不包含通配符*時),locate會給出所有與*filename*相匹配的文件的路徑;
  • 適用場合:無法執行文件類型性質的模糊查找(你只記得某個文件的部分名稱)。

4. find

find命令要比前邊幾條復雜的多,功能也強大的多。這條命令是通過直接搜索硬盤的方式查找的,所以可以保證查找的信息絕對可靠。并且支持各種查找條件。但是功能強大肯定是有代價的,那就是搜索速度慢。所以一般前邊幾種找不出來的情況下才會使用find。另外如果要實現某些特殊條件的查找,比如找出某個用戶的size最大的文件,那就只能用find了。

參數:

  • 時間查找參數:
    – atime n:將n*24小時內access過的文件列出來;
    – ctime n:將n*24小時內狀態發生改變的文件列出來;
    – mtime n:將n*24小時內被修改過的文件列出來;
    – newer file:把比file還要新的文件列出來;

  • 名稱查找參數:
    –gid n:尋找群組ID為n的文件;
    –group name:尋找群組名稱為name的文件;
    –uid n:尋找擁有者ID為n的文件;
    –user name:尋找擁有者名稱為name的文件;
    –name file:尋找文件名為file的文件(可以使用通配符);

實例:

leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ find -name changelog ./changelog leon@Ubuntu:/opt/FriendlyARM/mini2440/rootfs$ find -name fstab ./etc/fstab

小結:

  • 功能作用:從當前目錄遞歸搜索文件;
  • 執行原理:遍歷當前工作目錄及其子目錄,非常消耗硬盤資源,查找效率低;
  • 適用場合:能用which、whereis和locate的時候盡量不要用find;

5. 總結:

對比選項whichwhereislocatefind
搜索目標可執行文件二進制文件、源文件、幫助文件所有類型所有類型
查找路徑PATH所含目錄索引數據庫所含目錄索引數據庫所含目錄當前目錄/指定目錄
搜索原理完全匹配去除.之后的完全匹配部分匹配即可遍歷尋找
查找速度非常快比較快比較快比較慢

總結

以上是生活随笔為你收集整理的linux下查找命令which/whereis/locate/find的对比和总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。