Linux

如何在 PATH 中添加更多目錄

  • August 12, 2018

好的,首先,我是 Linux 新手,我正在使用 Linux Mint。

我了解到,當我想向我的PATH(特別是我的主目錄)添加更多目錄時,我需要一個看起來像的 Bash 命令PATH=$PATH:~,對嗎?

問題是我為什麼需要放在$PATH那裡?它代表系統路徑,對嗎?如果我只輸入它會起作用PATH=~嗎?我的意思是我只想將我的主目錄添加到現有PATH目錄中。

在 Unix 中,某些環境變數是特殊的,例如$PATH它們是項目列表,而不僅僅是單個項目。對於這些類型的列表,冒號 ( :) 分隔列表中的項目。

如果您$PATH僅列印它,您可以看到它:

$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin

如果要向其中添加其他項目,則必須包括以前的列表和新項目。當你說PATH=$PATH:<new item>.

$ PATH=$PATH:/path/to/some/dir
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin:/path/to/some/dir

請記住,這些更改僅在您執行它們的 shell 中是本地的。如果您希望您的更改$PATH在重新啟動之間保持不變,或者顯示在您的 shell 的其他實例中,您需要將它們添加到配置文件中,以便將它們設置為您的預設設置的一部分。

通常對於使用者來說,這就是您對這些文件所做的操作~/.bashrc& ~/.bash_profile

export PATH=$PATH:$HOME/bin:$HOME/somedir

添加這樣的行將修改您的$PATH.

替代$PATH使用

如果您只是希望能夠執行不在您的腳本和執行檔,$PATH可以通過使用此方法輕鬆解決,而不是添加到$PATH.

這是一個場景,假設我們有一個這樣的執行檔:

$ ls -l helloexec.bash
-rwxr-xr-x 1 user1 user1 31 Aug 12 07:45 helloexec.bash

但它不在,$PATH所以我們不能執行它:

$ helloexec.bash
bash: helloexec.bash: command not found...

所以你在想,哦,我必須將它添加到 my$PATH才能執行它。但是,您可以執行目前目錄中的任何執行檔,如下所示:

$ ./helloexec.bash
hello bash

在 Unix 類型的作業系統中,您必須將這種與腳本和執行檔互動的方法內化,而不是堅持它們都在$PATH.

添加的危險$PATH

在您的範例中,您表明您想添加~到您的$PATH. 多年來,我已經看到許多使用者這樣做,或者想要這樣做,他們認為將這個目錄直接放在他們的$PATH.

這通常不是處理事情的好方法。相反,您應該仔細考慮要在 Linux/Unix 中儲存執行檔的位置,並且只添加對於具有如此顯著位置至關重要的目錄,例如在$PATH.

大多數人通常會添加系統目錄,然後添加一個$HOME/bin$PATH保留它。將更多的東西放在上面$PATH可能會導致意想不到的後果,例如命令無法按預期工作,甚至更糟,造成系統更容易受到攻擊的情況。

例如,假設您從網站下載了一些腳本,但沒有意識到您的網路瀏覽器已更改為將文件保存為$HOME. 這個下載的文件現在處於可以被攻擊者呼叫的位置。

或者,如果您的訂單處於其他目錄之前$PATH的狀態~,例如:

$ printenv PATH
/home/vagrant:/sbin:/bin:/usr/sbin:/usr/bin

我們不小心下載了一個執行檔,例如:

$ cat ps
#!/bin/bash

/bin/ps -eaf | grep -v "spyware"

現在,當有人執行時ps,他們使用的是這個版本,而不是預期的/bin/ps

引用自:https://unix.stackexchange.com/questions/462065