ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

ファイル/シンボリックリンクのフルパスを表示する

ソリューション技術部 山口(@kinunori)です。

ファイルのフルパスを取得する際に皆さんどうしてますか?

色々やり方はあると思いますが、効率が良くないのは以下の方法かと思います。

  • pwdコマンドでカレントディレクトリを叩いた後、ファイル名をコピペする
  • find もしくは locateコマンドで取得する(locateはupdatedbが必要)

同僚から効率の良いやり方を聞かれたので、ここにも残しておきます。 対象は Linux(ディストリビューションは問わない) です。 OS Xでもreadlinkコマンドはありますが、-fオプションはありません。

readlinkコマンド

私が良く使うのはreadlinkコマンドです。 実ファイルもしくはハードリンクの場合はフルパスを、シンボリックリンクの場合はリンク元のフルパスを返してくれます。

ファイルのフルパスを取得する

readlink -f <フルパスを取得したいファイル名>

例:

$ pwd
/home/ec2-user
$ ls
amazon-ssm-agent.rpm  tmp
$ readlink -f amazon-ssm-agent.rpm
/home/ec2-user/amazon-ssm-agent.rpm
$ ln amazon-ssm-agent.rpm amazon-ssm-agent.rpm.lnk
$ ls -li
total 11492
 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm
 436736 -rw-rw-r-- 2 ec2-user ec2-user 5881471 Mar 29 03:33 amazon-ssm-agent.rpm.lnk
1966084 drwxrwxr-x 2 ec2-user ec2-user    4096 Apr 28 09:59 tmp
$ readlink -f amazon-ssm-agent.rpm.lnk
/home/ec2-user/amazon-ssm-agent.rpm.lnk

注意点: ファイルが存在しない場合に実行すると、存在しないファイルのフルパスを返してしまうので注意が必要です

$ ls
amazon-ssm-agent.rpm  amazon-ssm-agent.rpm.lnk  tmp
$ readlink -f amazon-ssm-agent.rpm.test
/home/ec2-user/amazon-ssm-agent.rpm.test
$ ls
amazon-ssm-agent.rpm  amazon-ssm-agent.rpm.lnk  tmp

シンボリックリンクリンク元を取得する

フルパス取得の場合と同じです。

readlink -f <フルパスを取得したいファイル名>

例:

$ ln -s amazon-ssm-agent.rpm /home/ec2-user/amazon-ssm-agent.rpm.slink
$ ls
amazon-ssm-agent.rpm  amazon-ssm-agent.rpm.slink  tmp
$ readlink -f amazon-ssm-agent.rpm.slink
/home/ec2-user/amazon-ssm-agent.rpm

用途

私の場合は、シェルスクリプトでファイルのパスを取得し、変数に格納する際など使ってます。 手順書を作る時なども便利かも知れないですね。

知らなかった方は是非使ってみてください。