簡體   English   中英

在linux中運行sh文件時,為什么必須運行./name.sh?

[英]When running a sh file in linux, why do I have to run ./name.sh?

我有一個名為x.sh的文件,我想執行它。 如果我跑:

x.sh

然后我得到:

x.sh: command not found

如果我跑:

./x.sh

然后它運行正常。 為什么我必須首先輸入./?

因為當前目錄通常不包含在默認PATH中,出於安全原因:通過不查看當前目錄,可以避免因種植具有合法實用程序名稱的惡意程序而導致的各種惡意。 例如,假設有人設法在您的目錄中ls一個名為ls的腳本,該腳本執行rm *

如果您希望在路徑中包含當前目錄,並且您使用bash作為默認shell,則可以通過~/.bashrc文件添加路徑。

export PATH=$PATH:.

基於上述解釋,通過查看減少了流氓程序帶來的風險. 最后,所以眾所周知的合法程序將在之前找到。 檢查。

可以通過/etc/profile修改系統范圍的設置,但這可能不是一個好主意。

因為默認情況下當前目錄不在PATH環境變量中,所以只在PATH指定的目錄內搜索沒有路徑限定的可執行文件。 您可以通過添加更改此行為. PATH結束,但這不常見,你只會習慣這種UNIX主義。

這背后的想法是,如果首先在當前目錄中搜索可執行文件,惡意用戶可以在其主目錄中放入名為例如lsgrep或其他常用命令的可執行文件,欺騙管理員使用它,可能與超級用戶權力。 另一方面,如果你把這個問題感覺不大. PATH的末尾,因為在那種情況下首先搜索系統目錄。

但是 :我們的惡意用戶仍然可以創建他的危險腳本,命名為常用命令的常見錯別字,例如sl for ls (protip:將它綁定到Steam機車 ,你不會被欺騙:D )。

所以你會發現,如果你輸入一個沒有路徑限定條件的可執行文件名稱,那么保持安全仍然會更好,你確定你正在從系統目錄中運行一些東西(因此可以說是安全的)。

因為當前目錄不在PATH中(與Windows中的cmd不同)。 它是一種安全功能,因此不會意外運行當前目錄中的惡意腳本。

雖然不建議,但為了滿足好奇心,你可以添加. 到PATH然后你會看到x.sh會起作用。

如果您沒有顯式指定目錄,那么shell將搜索$PATH列出的目錄以查找指定的可執行文件。 如果您的$PATH不包括. 然后不搜索當前目錄。

$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

這是故意的。 如果搜索了當前目錄,那么您鍵入的命令可能會根據您所在的目錄而發生更改。這將允許惡意用戶將名為lscp的二進制文件放入您經常訪問的目錄中,並誘使您運行其他程序。

$ cat /tmp/ls
rm -rf ~/*
$ cd /tmp
$ ls
*kaboom*

我強烈建議你不要添加. 你的$PATH 你會很快習慣打字./ ,這沒什么大不了的。

您只能通過輸入x.sh來執行文件,因為當前的工作目錄不在$ PATH中。 要查看當前的工作目錄,請鍵入

$ pwd

要查看$ PATH,請鍵入

$ echo $PATH

要將當前目錄添加到此會話的$ PATH,請鍵入

$ PATH=$PATH:.

要永久添加它,請在主目錄中編輯.profile文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM