私はpip(Pythonパッケージマネージャ)のインストールを「遊んで」いたずらしていました。とにかく、私のシステムでは、/bin/pip
それがハードリンク/usr/bin/pip
(またはその逆に、ハードリンクがどのファイルが元のものかわからないと聞いたため)だったことがわかりました。
$ realpath /bin/pip /usr/bin/pip
/usr/bin/pip
/usr/bin/pip
結果はrealpath
私を混乱させた。どのファイルがソースであるかわからない場合、forの代わりにそのファイルがrealpath
表示されるのはなぜですか?/usr/bin/pip
/bin/pip
/bin/pip
私はその1つが次の理由でハードリンクである可能性があることを知っています。
$ stat -c "%n is a %F pointing to inode %i, which has %h hard link(s)" /bin/pip /usr/bin/pip
/bin/pip is a regular file pointing to inode 152837, which has 1 hard link(s)
/usr/bin/pip is a regular file pointing to inode 152837, which has 1 hard link(s)
もし私のコンピュータがCentOS 7を実行していて、realpathコマンドはGNU coreutils 8.22から来ました。
- - - - 編集する - - - -
実際、/ binは通常のディレクトリ/usr/binへのシンボリックリンクです。
$ ls -ld /bin /usr/bin
lrwxrwxrwx. 1 root root 7 May 15 12:49 /bin -> usr/bin
dr-xr-xr-x. 2 root root 53248 Jul 13 18:44 /usr/bin
答え1
私はこれをテストしましたが、私にはそのようなことはありません。私は(提案されているように)realpath
問題が解決したので、これはどこかのシンボリックリンクのためだと思います。
努力する:
ls -li /bin/pip /usr/bin/pip
両方のディレクトリエントリが同じinode /ファイルを参照しているか(直接的または間接的に)再確認する必要があります。
今試してください:
ls -ld /bin /usr/bin
これにより、両方のディレクトリ(d
最初の列)が表示されます。そのうちの1つ(ほぼ確実に)がその列に表示/usr/bin
される場合l
、これはシンボリックリンクであり、これは現在見ている動作を説明します(realpath
前述のシンボリックリンクの解決)。
最後の説明:どちらか一方が他方へ/bin
の/usr/bin
シンボリックリンクである場合、realpath
シンボリックリンクはターゲットに移動し、そのターゲットを実際のパスとして使用します。
GNU realpath
(他のすべてではない)にはこの--no-symlinks
オプションがあります。これにより、もともと期待していた結果が得られます。