シンボリックリンクで実行されたコマンドを見つける方法は? [閉鎖]

シンボリックリンクで実行されたコマンドを見つける方法は? [閉鎖]

私のシステムのどこか(問題はどこにあるのかわからないこと)に優先順位のあるシンボリックリンクがありますが、リンクが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代わりに使ってみてください)lsls

このシンボリックリンク(私のシステムのどこかで)をどのように削除できますか?

まずそれを見つける必要があります。使用検索(1)適切に(おそらく一緒に-lname

答え3

のすべてのディレクトリで壊れたシンボリックリンクを見つけるには、PATH次のようにしますbash

IFS=: read -ra dirs <<<"$PATH"
find -L "${dirs[@]}" -type l -maxdepth 1

削除する-deleteにはに追加してください。find

関連情報