如何在 PATH 中添加更多目錄
好的,首先,我是 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
。