完全なシンボリックリンクパスを確認する方法


128

すべてのパスが使用されているls -la symlinkNamestat symlinkName、表示されていない場合(例../../../one/two/file.txt

フルパスを表示するLinuxコマンドとは何ですか?


4
ここでは注意が必要です。lsまたはstatが絶対パスを表示しない場合-リンクに絶対パスがありません!これは特にです。デバイスが別のコンテキストでマウントされている場合に重要です(たとえば、CDまたはUSBスティックに何かがあるか、壊れたHDDを回復しようとした場合)。前述のすべてのソリューション(realpath、readlink、...)は、マウントされたコンテキストでの絶対パスのみを示します。
flolo

回答:


225

realpathすべてのLinuxフレーバーで使用できるわけではありませんが、使用できるreadlinkはずです。

readlink -f symlinkName

上記でうまくいくはずです。

または、上記のいずれもインストールしていない場合、python 2.6(またはそれ以降)をインストールしていれば、次のことができます。

python -c 'import os.path; print(os.path.realpath("symlinkName"))'

16
OSXを使用している場合は、-fフラグを省略すれば機能します。iereadlink symlinkName
Josh Davenport

6
OSXで-fフラグを省略した場合、相対パスしか表示されません
timoxley

2
この質問はLinuxに関するものでした。
Ian Stapleton Cordasco

27

realpath <path to the symlink file> トリックを行う必要があります。


man realpathこれは「GNU coreutils」の一部であることを下部に示しています。これは常にUbuntuに付属しているので、@ IanStapletonCordascoが「realpathすべてのLinuxフレーバーで使用できるわけではない」と言っても、少なくともすべてで使用できるはずです。 UbuntuとUbuntuの派生フレーバーだと思います。
ガブリエルステープルズ

10

UNIXフレーバー-> ll symLinkName

OSX-> readlink symLinkName

違いは、1つ目の方法ではシンボリックリンクパスが点滅して表示され、2つ目の方法ではコンソールにエコー出力されるだけです。


質問は、相対パス(../../file.txt)ではなく、完全/絶対パスを具体的に要求することでした。これらの答えはどちらも相対パスを示します。
wisbucky

3

情報を表示するもう1つの方法は、詳細情報を表示するstatコマンドです。stat ~/.sshマシンのディスプレイでコマンド

File: ‘/home/sumon/.ssh’ -> ‘/home/sumon/ssh-keys/.ssh.personal’
  Size: 34          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 25297409    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)
Access: 2017-09-26 16:41:18.985423932 +0600
Modify: 2017-09-25 15:48:07.880104043 +0600
Change: 2017-09-25 15:48:07.880104043 +0600
 Birth: -

これが誰かを助けることを願っています。


1

呼び出しとawk一緒に使用して、完全なシンボリックリンクパスを持つ出力と同等のものを取得できます。例えば:systemreadlinkls

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'

たとえば表示されます

thin_repair ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_restore ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_rmap ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_trim ->/home/user/workspace/boot/usr/bin/pdata_tools
touch ->/home/user/workspace/boot/usr/bin/busybox
true ->/home/user/workspace/boot/usr/bin/busybox

lsはreadlinkなしでそれを行うことができます。使用するだけls -l。これもまったく機能せず、ディレクトリ(リンク以外)のすべてに対して実行しようとします。lsが色を使用するように構成されている場合、awkは完全に機能しなくなります。使用するだけfind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown、2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.