解決 Linux 中的 “Bash: Command Not Found” 報(bào)錯(cuò)

當(dāng)你在 Linux 中使用命令時(shí),你希望得到終端輸出的結(jié)果。但有時(shí)候,你會(huì)遇到終端顯示“命令未找到command not found”這一報(bào)錯(cuò)。

對(duì)于這個(gè)問題,并沒有直截了當(dāng)且單一的解決方案。你必須自己做一些故障排除來(lái)解決這個(gè)報(bào)錯(cuò)。
老實(shí)說(shuō),要解決它并不難。該報(bào)錯(cuò)信息已經(jīng)給出了一些提示:“命令未找到”,這說(shuō)明你的 shell(或者 Linux 系統(tǒng))找不到你輸入的那條命令。
shell(或 Linux 系統(tǒng))找不到命令,有三個(gè)可能的原因:
- 你將命令的名稱拼錯(cuò)了
- 該命令還沒有安裝
- 該命令是一個(gè)可執(zhí)行腳本,但其位置未知
接下來(lái),我們會(huì)詳細(xì)介紹“命令未找到”這一報(bào)錯(cuò)的每一個(gè)原因。
解決“命令未找到”報(bào)錯(cuò)
方法 1:再次檢查命令名稱有沒有寫錯(cuò)
每個(gè)人都會(huì)犯錯(cuò)誤,尤其是在打字的時(shí)候。你輸入的命令可能存在錯(cuò)別字(也就是你寫錯(cuò)啦)。
你應(yīng)該特別注意:
- 是否拼對(duì)了正確的命令名稱
- 是否在命令與其選項(xiàng)之間加上了空格
- 是否在拼寫中混淆了 1(數(shù)字 1)、I(大寫的 i)和 l(小寫的 L)
- 是否正確使用了大寫字母或者小寫字母
看看下面的示例,因?yàn)槲覍戝e(cuò)了 ??ls?? 命令,所以會(huì)導(dǎo)致“command not found”報(bào)錯(cuò)。

所以,請(qǐng)?jiān)俅巫屑?xì)確認(rèn)你輸入得對(duì)不對(duì)。
方法 2:確保命令已安裝在你的系統(tǒng)上
這是“命令未找到”錯(cuò)誤的另一個(gè)常見原因。如果命令尚未安裝,則無(wú)法運(yùn)行該命令。
雖然在默認(rèn)情況下,你的 Linux 發(fā)行版自帶安裝了大量命令,但是不會(huì)在系統(tǒng)中預(yù)裝 所有的 命令行工具。如果你嘗試運(yùn)行的命令不是一個(gè)流行的常用命令,那么你需要先安裝它。
你可以使用發(fā)行版的軟件包管理器來(lái)安裝命令。

You may have to install the missing command
有時(shí)候,某一常用命令可能也不再能使用了,甚至你也不能夠安裝這個(gè)命令了。這種情況下,你需要找到一個(gè)替代的命令,來(lái)得到結(jié)果。
以現(xiàn)已棄用的 ??ifconfig?? 命令為例。網(wǎng)絡(luò)上的舊教程依舊會(huì)讓你使用 ??ifconfig?? 命令,來(lái) ??獲取本機(jī)的 IP 地址?? 和網(wǎng)絡(luò)接口信息,但是,在較新的 Linux 版本中,你已經(jīng)無(wú)法使用 ??ifconfig?? 了。??ifconfig?? 命令已被 ??ip?? 命令所取代。

Some popular commands get discontinued over the time
有時(shí)候,你的系統(tǒng)可能甚至找不到一些非常常見的命令。當(dāng)你在 Docker 容器中運(yùn)行 Linux 發(fā)行版時(shí),就通常如此。Docker 容器為了縮小操作系統(tǒng)鏡像的大小,容器中通常不包含那些常見的 Linux 命令。
這就是為什么使用 Docker 的用戶會(huì)碰到 ??ping 命令未找到?? 等報(bào)錯(cuò)的原因。

Docker containers often have only a few commands installed
因此,這種情況下的解決方案是安裝缺失的命令,或者是找到一個(gè)與缺失命令有同等功能的工具。
方法 3:確保命令是真實(shí)的,而不是一個(gè)別名
我希望你知道 Linux 中的別名概念。你可以配置你自己的較短的命令來(lái)代替一個(gè)較長(zhǎng)命令的輸入。
一些發(fā)行版,如 Ubuntu,會(huì)自動(dòng)提供 ??ll??(??ls -l?? 的別名)、??la??(??ls -a?? 的別名)等命令。

想象一下,你習(xí)慣于在你的個(gè)人系統(tǒng)上輸入 ??ll?? 和 ??la??,而你登錄到另一個(gè) Linux 系統(tǒng),發(fā)現(xiàn) ??ll?? 命令并不存在。你甚至不能安裝 ??ll?? 命令,因?yàn)樗皇且粋€(gè)真正的命令。
所以,如果你找不到一個(gè)命令,甚至不能安裝,你應(yīng)該嘗試在互聯(lián)網(wǎng)上搜索該命令是否存在。如果不存在,可能是其他系統(tǒng)上的一個(gè)別名。
方法 4:檢查命令是否是一個(gè)路徑正確的可執(zhí)行腳本
這是 Linux 新手在 ??運(yùn)行 shell 腳本?? 時(shí)常犯的錯(cuò)誤。
即使你在同一目錄下,僅用可執(zhí)行腳本的名稱,來(lái)運(yùn)行可執(zhí)行腳本,也會(huì)顯示錯(cuò)誤。
因?yàn)槟阈枰@式指定 shell 解釋器或可執(zhí)行腳本的路徑!

如果你在其他目錄下,在未提供文件正確路徑的情況下,運(yùn)行 shell 腳本,則會(huì)有“找不到文件no such file or directory”的報(bào)錯(cuò)。

把可執(zhí)行文件的路徑加到 PATH 變量中
有時(shí)候,你下載了一個(gè)軟件的壓縮文件(tar 格式),解壓這個(gè) tar 文件,然后找到一個(gè)可執(zhí)行文件和其他程序文件。你需要運(yùn)行可執(zhí)行文件,來(lái)運(yùn)行那個(gè)軟件。
但是,你需要在可執(zhí)行文件的同一目錄下或指定可執(zhí)行文件的整個(gè)路徑,才能運(yùn)行那個(gè)可執(zhí)行文件。這很令人煩擾。
你可以使用 ?
?PATH?? 變量來(lái)解決這個(gè)問題。??PATH?? 變量包含了有各種 Linux 命令的二進(jìn)制(可執(zhí)行)文件的目錄集合。當(dāng)你運(yùn)行一個(gè)命令時(shí),你的 Linux 系統(tǒng)會(huì)檢查 ??PATH?? 變量中的上述目錄,以查找該命令的可執(zhí)行文件。你可以使用 ?
?which?? 命令,來(lái)檢查某一命令的二進(jìn)制文件的位置:
如果你想從系統(tǒng)上的任何地方都能運(yùn)行可執(zhí)行文件或腳本,你需要將可執(zhí)行文件的位置添加到 ?
?PATH?? 變量中。
然后,?
?PATH?? 變量需要添加到 shell 的 rc 文件中,如此對(duì) ??PATH?? 變量的更改就是永久性的。這里的要點(diǎn)是:你的 Linux 系統(tǒng)必須了解可執(zhí)行腳本的位置。要么在運(yùn)行時(shí)給出可執(zhí)行文件的整個(gè)路徑,要么將其位置添加到 ?
?PATH?? 變量中。
以上的內(nèi)容有幫到你嗎?
我懂得,當(dāng)你是 Linux 新手時(shí),很多事情可能會(huì)讓你不知所措。但是,當(dāng)你了解問題的根本原因時(shí),你的知識(shí)會(huì)逐漸增加。
對(duì)于“未找到命令”報(bào)錯(cuò)來(lái)說(shuō),沒有簡(jiǎn)單的解決方案。我提供給你了一些提示和要點(diǎn),我希望這對(duì)你的故障排除有幫助。




























