$PATHが定義されている場所を確認する

$PATHが定義されている場所を確認する

最近Arch-Linuxシステムをインストールしました。

echo $PATH

これは、私がどこかに設定したと記憶している 内のディレクトリ (他のディレクトリも含む) を指します/home/user/dir。 私もこれを root ユーザーとして持っているため、 には存在できず~/.bashrc、 にも存在しません/root/.bashrc。 内部も調べました/etc/profileが、/etc/bash.bashrcそこにも見つかりませんでした。

どこに設定されているか確認する方法はありますか?

答え1

のすべてのファイルでディレクトリを検索してみてください/etc:

sudo grep -r "/home/user/dir" /etc

スイッチ-rgrep/home/user/dirコンテンツ/etcおよびそのサブディレクトリ内のすべてのファイル。

からgrep(1) - Linux マニュアルページ:

-dアクション、--ディレクトリ=アクション

入力ファイルがディレクトリの場合、ACTIONを使用して処理します。デフォルトでは、ACTIONは読む、つまりディレクトリは通常のファイルと同じように読み込まれます。ACTIONがスキップディレクトリは黙ってスキップされます。ACTIONが再帰するgrepは各ディレクトリの下にあるすべてのファイルを再帰的に読み取ります。これは、-rオプション。

それが失敗した場合は、検索範囲を次のように拡張します。全てファイル:

sudo grep -r "/home/user/dir" /

または、変数を変更するすべてのファイルを検索することもできますPATH

sudo grep -r "PATH=" /

答え2

通常、ユーザー ディレクトリをルートとしてグローバル パスに配置するのはお勧めできません ;)/etc/environmentファイルを確認しましたか?

答え3

@Dennis が素晴らしいアイデアを教えてくれました。自分の内部を検索して/etcそれを見つけましたが、彼のコマンドはファイル名のみを検索するものなので、別のコマンドを使用しました (私の理解する限り)。

私が成功したのは

find / -type f -exec grep -i /home/user/dir '{}' \; -print

答え4

PATH内で何かが定義されている場所を深く探している場合は、次の代替案を試すことができます。銀の探求者高速検索用。

デフォルトでは、一致した内容は行番号とともに出力されるので、 と組み合わせるとファイル名のみの出力が得られます。ファイル名を分離し、重複を避けたい場合にegrepは、一致した内容を含む行番号も出力されます。もちろん、一致した内容の完全な出力が不要な場合は、パイプされたコマンドを省略できます。cutuniq

ag -s '/home/user/dir' | egrep '^\d+' | cut -d ':' -f 1 | uniq

関連情報