
realpath
私はこのコマンドとそれがもう使われておらず、readlink -f
今推奨される方法についてたくさん読んでいます。また、readlinkにこれらの機能が不足してrealpathが導入されたところもあり、一度導入されるとrealpathはもはや必要なくなり、ほとんどのオペレーティングシステムベンダーはこれをサポートしません。
readlink -f
私が質問した理由は、私も「非常に似ている」コマンドで推薦する人をたくさん見ましたrealpath
。実際の違いは何ですか?
答え1
周辺にはいくつかのコマンドがありますrealpath
。
このrealpath
ユーティリティはラッパーです。realpath
ライブラリ機能は何度も再作成されました。移流。
Debianは一度realpath
パック(分離~からdwww
~から愚かな)は2001年以来、パッケージングと文書化を除いて変更されておらず、現在段階的に廃止されています。現在、より多くの標準的な選択肢(GNUreadlink
とまもなくGNU)があるので、このユーティリティはもう使用されていませんが、realpath
当時はGNUユーティリティはreadlink
まったく存在しませんでした。この実装はrealpath
一部をサポートします。options
シンボリックリンクがヌル終了出力を確認または生成するのを防ぎます。
忙しい箱自分のものを含むrealpath
コマンド(オプションなし)
GNUコアツール紹介したrealpath
コマンド入力バージョン 8.152012年1月。これはBusyBoxやDebianと互換性のある代替手段であり、realpath
GNUと同じオプションがたくさんあります。readlink
。
realpath
readlink -f
GNUと同じ効果がありますreadlink
。これら2つのコマンド(またはrealpath
のさまざまなコマンドreadlink -f
)の違いは、サポートする追加オプションです。
GNU はrealpath
廃止されました。逆の問題があります。 GNUはあまりにも新しく、どこでも利用できません。 DebianはGNU 省略realpath
それからcoreutils
荷物を包んで自分で捕まえてくださいrealpath
。なぜなのかわかりません。 GNUはrealpath
すぐに代用できる必要があるからです。しかし、Debian jessieとUbuntu 16.04以降はrealpath
GNUが使用されています。
現在、Linuxシステムでシンボリックリンクを含めることができるパスを正規化するための最良のオプションはですreadlink -f
。
BSDシステムではreadlink
GNUとは機能が異なるコマンドですreadlink
。特に、BSDにはreadlink
パスを正規化するオプションはなく、渡されたシンボリックリンクのみを通過します。
readlink
ところで、同じ問題 - それも同じです。何度も発明(Unixにシンボリックリンクを追加するときにこのユーティリティが追加されていないのは残念です。)現在、多くの互換性のないフラグを持つ複数の実装(特にBSD対GNU)で安定しています。
答え2
長すぎます。 readlink -f
0
既存のディレクトリに存在しないrealpath
ファイルを返します1
。ただし、存在しないファイルのreadlink -e
ように動作realpath
し、返します(参照)。1
編集者ノート最後に)。
readlink -f
$ readlink -f non-existent-file
/home/user/non-existent-file
$ echo $?
0
readlink -e
$ readlink -e non-existent-file
$ echo $?
1
realpath
$ realpath non-existent-file
non-existent-file: No such file or directory
$ echo $?
1
readlink -f
ディレクトリが存在しません
readlink -f
パスのどの部分がないかによって動作が異なります。
$ readlink -f /tmp/non-existent-dir/foo
$ echo $?
1
realpath
ディレクトリが存在しません
$ realpath /tmp/non-existent-dir/foo
$ echo $?
1
有効性
readlink
ほとんどのLinuxディストリビューションにインストールされます。一方、realpath
次のようにインストールすることがますます一般化されています。realpath
参加しましたGNU Coreutils(以前は別個のパッケージでした)。
要するに
通話を交換したい場合はrealpath ...
を使用してくださいreadlink -e ...
。
しかし、その展開がますます普及しているので、インストールrealpath
を期待するのは無理ではありません。realpath
MMV readlink
実装は非常に多様です。
MMV realpath
デフォルトのLinuxインストールの可用性率readlink
。
試験用readlink(GNU coreutils) 8.21そして物理パスバージョン1.19Ubuntu 16で。
編集者ノート
編集する:@AnthonyGeogheganは次のように書きました。これは以下を指します。Debian バージョン
realpath
。これGNUバージョンrealpath
同じように振る舞うreadlink -f
")編集する:@FilBot3さんが「これはうまくいきませんMacOSアルパイン」
答え3
readlink -f
readlink -e
他の回答で述べたように、または(配布パネルに応じて)の機能はの機能と同じである可能性がありますrealpath
。ただし、realpath
このユーティリティは同じではありませんreadlink
。たとえば、readlink
シンボリックリンクファイルの内容(その中のリテラルテキスト)を読み取ったり検索したりできます。
> ln -s "I am cold" slfile
> readlink slfile
I am cold
これはrealpath
できません。
結局のところ、シンボリックリンクファイルは、ディレクトリ/ファイル階層内を移動するための「レシピ」と解釈されるテキストファイルです。しかし、それでもテキストファイルです。たとえば、その内容(readlink
返されるもの)は操作可能でなければなりませんsed -i '...' slfile
。実際には、オプションはシンボリックリンクを--follow-symlinks
強制的にsed -i
従うようにすることです。現在の設定(OpenSuSe 15.3のデフォルト、GNU sed 4.4、GNU bashバージョン4.4.23(1))でこの機能が機能しないため、「should」と書いてください。sed -i
そのオプションがない場合は、--follow-symlinks
まだファイルをシンボリックリンクしたいと思います。道。