在 Linux 上尋找你正在尋找的東西
在 Linux 系統上找到你要找的文件或命令並不難, 有很多種方法可以尋找。
find
最顯然的無疑是 find
命令,並且 find
變得比過去幾年更容易使用了。它過去需要一個搜索的起始位置,但是現在,如果你想將搜索限制在當下目錄中,你還可以使用僅包含文件名或正則表達式的 find
命令。
$ find e*
empty
examples.desktop
這樣,它就像 ls
命令一樣工作,並沒有做太多的搜索。
對於更專業的搜索,find
命令需要一個起點和一些搜索條件(除非你只是希望它提供該起點目錄的遞歸列表)。命令 find -type f
從當前目錄開始將遞歸列出所有常規文件,而 find ~nemo -type f -empty
將在 nemo 的主目錄中找到空文件。
$ find ~nemo -type f -empty
/home/nemo/empty
locate
locate
命令的名稱表明它與 find
命令基本相同,但它的工作原理完全不同。find
命令可以根據各種條件 —— 名稱、大小、所有者、許可權、狀態(如空文件)等等選擇文件並作為搜索選擇深度,locate
命令通過名為 /var/lib/mlocate/mlocate.db
的文件查找你要查找的內容。該數據文件會定期更新,因此你剛創建的文件的位置它可能無法找到。如果這讓你感到困擾,你可以運行 updatedb
命令立即獲得更新。
$ sudo updatedb
mlocate
mlocate
命令的工作類似於 locate
命令,它使用與 locate
相同的 mlocate.db
文件。
which
which
命令的工作方式與 find
命令和 locate
命令有很大的區別。它使用你的搜索路徑($PATH
)並檢查其上的每個目錄中具有你要查找的文件名的可執行文件。一旦找到一個,它會停止搜索並顯示該可執行文件的完整路徑。
which
命令的主要優點是它回答了「如果我輸入此命令,將運行什麼可執行文件?」的問題。它會忽略不可執行文件,並且不會列出系統上帶有該名稱的所有可執行文件 —— 列出的就是它找到的第一個。如果你想查找具有某個名稱的所有可執行文件,則可以像這樣運行 find
命令,但是要比非常高效 which
命令用更長的時間。
$ find / -name locate -perm -a=x 2>/dev/null
/usr/bin/locate
/etc/alternatives/locate
在這個 find
命令中,我們在尋找名為 「locate」 的所有可執行文件(任何人都可以運行的文件)。我們也選擇了不要查看所有「拒絕訪問」的消息,否則這些消息會混亂我們的屏幕。
whereis
whereis
命令與 which
命令非常類似,但它提供了更多信息。它不僅僅是尋找可執行文件,它還尋找手冊頁(man page)和源文件。像 which
命令一樣,它使用搜索路徑($PATH
) 來驅動搜索。
$ whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
whatis
whatis
命令有其獨特的使命。它不是實際查找文件,而是在手冊頁中查找有關所詢問命令的信息,並從手冊頁的頂部提供該命令的簡要說明。
$ whatis locate
locate (1) - find files by name
如果你詢問你剛剛設置的腳本,它不會知道你指的是什麼,並會告訴你。
$ whatis cleanup
cleanup: nothing appropriate.
apropos
當你知道你想要做什麼,但不知道應該使用什麼命令來執行此操作時,apropos
命令很有用。例如,如果你想知道如何查找文件,那麼 apropos find
和 apropos locate
會提供很多建議。
$ apropos find
File::IconTheme (3pm) - find icon directories
File::MimeInfo::Applications (3pm) - Find programs to open a file by mimetype
File::UserDirs (3pm) - find extra media and documents directories
find (1) - search for files in a directory hierarchy
findfs (8) - find a filesystem by label or UUID
findmnt (8) - find a filesystem
gst-typefind-1.0 (1) - print Media type of file
ippfind (1) - find internet printing protocol printers
locate (1) - find files by name
mlocate (1) - find files by name
pidof (8) - find the process ID of a running program.
sane-find-scanner (1) - find SCSI and USB scanners and their device files
systemd-delta (1) - Find overridden configuration files
xdg-user-dir (1) - Find an XDG user dir
$
$ apropos locate
blkid (8) - locate/print block device attributes
deallocvt (1) - deallocate unused virtual consoles
fallocate (1) - preallocate or deallocate space to a file
IO::Tty (3pm) - Low-level allocate a pseudo-Tty, import constants.
locate (1) - find files by name
mlocate (1) - find files by name
mlocate.db (5) - a mlocate database
mshowfat (1) - shows FAT clusters allocated to file
ntfsfallocate (8) - preallocate space to a file on an NTFS volume
systemd-sysusers (8) - Allocate system users and groups
systemd-sysusers.service (8) - Allocate system users and groups
updatedb (8) - update a database for mlocate
updatedb.mlocate (8) - update a database for mlocate
whereis (1) - locate the binary, source, and manual page files for a...
which (1) - locate a command
總結
Linux 上可用於查找和識別文件的命令有很多種,但它們都非常有用。
via: https://www.networkworld.com/article/3268768/linux/finding-what-you-re-looking-for-on-linux.html
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive