私のシステムのどこか(問題はどこにあるのかわからないこと)に優先順位のあるシンボリックリンクがありますが、リンクがbash
壊れて動作しません。
だけでなく:
- 現在のディレクトリ:
mysymlink
- パスのどこか(パッケージによってインストールされます):
mysymlink
現在のディレクトリで実行すると、ファイルシステムのどこかにあるmysymlink
(壊れた)シンボリックリンクが呼び出されます。mysymlink
現在のディレクトリでシンボリックリンクを使用できるようにシンボリックリンクを検索し、削除します。
どうやって見つけることができますか?
(編集)具体例:
コマンド -v testcafe
/usr/local/bin/testcafe
ls -l /usr/local/bin/testcafe
ls:/usr/local/bin/testcafeにアクセスできません:そのファイルまたはディレクトリがありません
(ノート:宛先パスを削除しました。間違いによる)
このシンボリックリンク(私のシステムのどこかで)をどのように削除できますか?
答え1
command -v UTILITY
コマンドを実行すると、シェルが何を実行しようとしているかが表示されますUTILITY
。
報道された後
/usr/local/bin/testcafe
しかし、その後
ls: cannot access /usr/local/bin/testcafe: No such file or directory
これを試みると、ユーティリティの報告された場所がシェルによってキャッシュされ、削除されたとls -l
考えられます。testcafe
シェルのキャッシュをフラッシュするには、次を使用しますhash -r
(このコマンドは何も印刷しません).これによりキャッシュがフラッシュされ、シェルは次回の実行時にフルパスルックアップを実行しますtestcafe
。
答え2
たぶんあなたは試す必要があります(だと仮定ls
)いいえエイリアスその場合は、次のように変更してください/bin/ls
。)
ls -l $(which mysymlink)
which mysymlink
コマンドのフルパスが提供されるためmysymlink
(拡張子の使用など)。$PATH
変える)
このコマンドを試してください外部含むmysymlink
。
ちなみにを.
使っ$PATH
て確認できますecho $PATH
。そして、現在のディレクトリをディレクトリ内に配置すると、セキュリティ上の$PATH
リスクが発生する可能性があります。
ls:アクセスできません
/usr/local/bin/testcafe
:そのファイルまたはディレクトリはありません
ls -dl /usr/ /usr/local/ /usr/local/bin/
その後、そのディレクトリの中に存在しないディレクトリを確認してください。 (たぶん忘れたかもしれません。)山いくつかのファイルシステムがあるか、誤ってルートとしてそのディレクトリのいくつかを削除しました。)
もちろん一つも作ってみてくださいls -l /usr/local/bin/testcafe
(エイリアシングや再定義をしているようですので/bin/ls
代わりに使ってみてください)ls
ls
このシンボリックリンク(私のシステムのどこかで)をどのように削除できますか?
まずそれを見つける必要があります。使用検索(1)適切に(おそらく一緒に-lname
)
答え3
のすべてのディレクトリで壊れたシンボリックリンクを見つけるには、PATH
次のようにしますbash
。
IFS=: read -ra dirs <<<"$PATH"
find -L "${dirs[@]}" -type l -maxdepth 1
削除する-delete
にはに追加してください。find