さて、まず私はLinuxに初めて触れ、Linux Mintを使っています。
私(特に私のホームディレクトリ)にさらにディレクトリを追加するには、PATH
同様のBashコマンドが必要であることを学びましたPATH=$PATH:~
。そうですか?
$PATH
問題はなぜそれをそこに入れなければならないのですか。システムパスを意味します。そうですか?ただ入力すると機能しますかPATH=~
?私は、私のホームディレクトリを既存のディレクトリに追加したいという意味ですPATH
。
答え1
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
これらの変更は実行されるシェルにのみ適用されることに注意してください。再起動後も変更を保持したりシェルの他のインスタンスに表示したりするには、その$PATH
変更がデフォルト値の一部になるように構成ファイルに追加する必要があります。
通常、ユーザーはこれらのファイルを使用して次のことを行います~/.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...
$PATH
だからあなたは「ああ、これを実行するには私のアイテムに追加する必要がある」と思います。ただし、次のように現在のディレクトリから実行可能ファイルを実行できます。
$ ./helloexec.bash
hello bash
Unix型オペレーティングシステムでは、スクリプトと実行可能ファイルの両方$PATH
。
リスクが追加されました$PATH
あなたの例では、あなたはこれを~
あなたの$PATH
。$PATH
これは一般的に良いアプローチではありません。代わりに、Linux / Unixで実行可能ファイルを保存する場所を慎重に検討し、目立つ場所(たとえば$PATH
。
ほとんどの人は通常、システムディレクトリを追加してから1つを追加して$HOME/bin
その$PATH
ままにします。より多くの内容を入力すると、$PATH
コマンドが期待どおりに機能しない、または悪い場合など、意図しない結果が発生し、システムが破損する可能性が高くなります。
たとえば、Webサイトからいくつかのスクリプトをダウンロードしたが、Webブラウザがファイルを$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
。
答え2
PATH は、システムの現在の PATH 値を含む環境変数です。相対または絶対位置なしで実行可能ファイル名を入力すると、実行可能ファイルが検索されているすべてのディレクトリが検索されます。
たとえば、現在のディレクトリで何かを実行したい場合、「.」は現在のディレクトリで何かを見つける必要があることを示すため、./somethingが機能します。シェルは実行可能ファイルを見つける必要があることを知っています。比較的現在のディレクトリに。詳しくはaskubuntuをご覧ください。。 ./somedirectory/something も使用できます。重要なのは、入力ディレクトリ構造がルート(/)から始まらないことです。
一つ絶対位置次のようになります。/home/flerb/something
ルートディレクトリから始まります。
$を使用してコマンドを入力すると、$ PATHはコマンドラインから展開され、その内容に置き換えられます。たとえば、次のようecho $PATH
な内容が表示されることがあります。
$echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
env
(コマンドラインで環境変数の現在の状態を確認できます)
Bashリファレンスマニュアルに記載されているチルダ実際、ほとんどの場合、HOME環境変数に置き換えられます。私が知らないチルダの奇妙な点を知りたい場合は、リファレンスマニュアルを参照してください。チルダの使用方法は次のとおりです。
$ echo ~
/home/flerb
$ echo $HOME
/home/flerb
したがって、パスが上記の場合は、次のように入力します。
(余談で、拡張機能を引用する理由)
PATH="$PATH":"$HOME"
または
PATH="$PATH":~
シェルはこれを次のように拡張します。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/flerb
HOME は PATH の末尾に追加され、PATH 全体をホームディレクトリにのみ置き換えないと、いくつかの問題が発生する可能性があります。
横に
'。'は現在存在するディレクトリへのリンクです。完全性のために、RalfFriedlが指摘したように、これらのリンクが含まれています。ファイルシステムで意味を持つシェル組み込みコマンドです。見たら。そして.. ls -alの出力でそれが何であるか疑問に思います:、Linuxでは(.)と(..)は何ですか?とハードリンクとUnixファイルシステムノード
端側
答え3
に追加する場合、目的のPATH
結果は、前の値にPATH
追加されたディレクトリを追加したものです。
PATH
したがって、既存のディレクトリ(値)に新しいディレクトリが追加されます$PATH
。
PATH=$PATH:~
これはPATH
現在のディレクトリを1つに置き換えるだけです。これは、もはや/bin
実行可能ファイルが見つからないことを意味します/usr/bin
。一般的には、これはしたくありません。
PATH=~