which 命令
which 命令的作用是侦啸,在 PATH 變量指定的路徑中搜索可執(zhí)行文件的所在位置痘括。它一般用來確認系統中是否安裝了指定的軟件密任。
命令格式
which 可執(zhí)行文件名稱
常用范例
例一:確認是否安裝了 gcc构捡,可以使用如下命令:
which gcc
例二:查看 cd 命令的位置路徑果漾,可以使用如下命令:
which cd
從上面的顯示信息可以看到在當前實驗樓使用的系統中 cd 是一個 shell 內建命令。
但是在某些環(huán)境中虹曙,我們可以看到 cd 并不是一個內建函數而是一個 shell 函數迫横。
再來在我本地 linux 系統上執(zhí)行 which cd 命令,顯示的結果如下:
顯示在 PATH 變量指定的路徑下沒有 cd 命令酝碳。為什么顯示沒有呢矾踱?這是因為 cd 是 shell 內建命令,而 which 默認是找 PATH 內所指定的目錄疏哗,內建命令不在其指定的目錄中呛讲,所以當然找不到。
那么就有個問題返奉,為什么有的環(huán)境中 cd 是一個 shell 函數贝搁,而有的又是內建命令呢?這跟所使用的 bash 有關芽偏。
顯示在 PATH 變量指定的路徑下沒有 cd 命令雷逆。為什么顯示沒有呢?這是因為 cd 是 shell 內建命令哮针,而 which 默認是找 PATH 內所指定的目錄,內建命令不在其指定的目錄中,所以當然找不到十厢。
那么就有個問題等太,為什么有的環(huán)境中 cd 是一個 shell 函數,而有的又是內建命令呢蛮放?這跟所使用的 bash 有關缩抡。
echo $SHELL 命令可以查看當前使用的 shell。
補充知識
到底什么是命令包颁?
命令可以是下面四種形式之一:
是一個可執(zhí)行程序瞻想,就像我們所看到的位于目錄/usr/bin中的文件一樣。屬于這一類的程序娩嚼,可以編譯成二進制文件蘑险,諸如用 C 和 C++ 語言寫成的程序,也可以是由腳本語言寫成的程序岳悟,比如說 shell佃迄,perl,python贵少,ruby呵俏,等等。
是一個內建于 shell 自身的命令滔灶。bash 支持若干命令普碎,內部叫做 shell 內部命令 (builtins)。例如录平,上面我本地環(huán)境中的 cd 命令麻车,就是一個 shell 內部命令。
是一個 shell 函數萄涯。這些是小規(guī)模的 shell 腳本绪氛,它們混合到環(huán)境變量中。 比如上面講到的 cd 命令涝影,在某些環(huán)境中就是一個 shell 函數枣察。
是一個命令別名。我們可以定義自己的命令燃逻,建立在其它命令之上序目。
whereis 命令
whereis 命令主要用于定位可執(zhí)行文件、源代碼文件和幫助文件在文件系統中的位置伯襟。whereis 命令還具有搜索源代碼猿涨、指定備用搜索路徑和搜索不尋常項的功能。
whereis 命令查找速度非衬饭郑快叛赚,這是因為它根本不是在磁盤中漫無目的亂找澡绩,而是在一個數據庫中(/var/lib/mlocate/mlocate.db)查詢。這個數據庫是 Linux 系統自動創(chuàng)建的俺附,包含有本地所有文件的信息肥卡,并且每天通過自動執(zhí)行 updatedb 命令更新一次。也正是因為這個數據庫要每天才更新一次事镣,就會使得 whereis 命令的搜索結果有時候會不準確步鉴,比如剛添加的文件可能搜不到。
命令格式
whereis [選項] 文件
常用參數
常用范例
例一:搜索 gcc 可執(zhí)行文件的路徑璃哟,可以使用如下命令:
whereis -b gcc
例二:搜索 gcc 幫助文件的路徑氛琢,可以使用如下命令:
whereis -m gcc
例三:搜索 gcc 源代碼的路徑,可以使用如下命令:
whereis -s gcc
locate 命令
locate 命令跟 whereis 命令類似随闪,且它們使用的是相同的數據庫阳似。但 whereis 命令只能搜索可執(zhí)行文件、聯機幫助文件和源代碼文件蕴掏,如果要獲得更全面的搜索結果障般,可以使用 locate 命令。
locate 命令使用了十分復雜的匹配語法盛杰,可以使用特殊字元(如’*’和’?’)來指定需要查找的樣本挽荡。
命令格式
locate [選項][搜索字符串]
常用參數
常用范例
首先需要安裝并更新數據庫:
sudo apt-get install locate
sudo updatedb
例一:搜索 etc 目錄下所有以 sh 開頭的文件,可以使用如下命令:
locate /etc/sh
例二:搜索 etc 目錄下文件名包含 lou 的文件即供,可以使用如下命令:
locate /etc/*lou*