GNU/Linux >> Linux の 問題 >  >> Linux

コマンドラインからシンボリックリンクのターゲットを見つける

解決策 1:

-f を使用 正規化されたバージョンを出力するためのフラグ。例:

readlink -f /root/Public/myothertextfile.txt

man readlink から :

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

解決策 2:

readlink は、必要なコマンドです。コマンドのマニュアル ページを参照してください。実際のファイルへの一連のシンボリック リンクをたどりたい場合は、-e または -f スイッチが必要です:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

解決策 3:

これも機能します:

ls -l /root/Public/myothertextfile.txt

しかし readlink ls を解析するよりも、スクリプトでの使用に適しています。 .

解決策 4:

リンク元とリンク先を表示したい場合は stat -c%N files* を試してください .例

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

解析には適していません (readlink を使用) そのため)、しかし、ls -l の乱雑さなしに、リンク名とリンク先が表示されます

-c --format と書くことができます と %N 「シンボリックリンクの場合、逆参照付きの引用されたファイル名」を意味します。

解決策 5:

readlink 良いことですが、GNU固有であり、クロスプラットフォームではありません。 /bin/sh のクロスプラットフォーム スクリプトを書いていました 、したがって、次のようなものを使用します:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

または:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

ただし、これらは異なるプラットフォームでテストする必要があります。それらは機能すると思いますが、ls については 100% 確実ではありません 出力形式。

ls の結果 bash 内で解析することもできます awk のような外部コマンドに依存せずに 、 sed または perl .

この bash_realpath 関数、リンクの最終的な宛先を解決します (リンク→リンク→リンク→最終):

bash_realpath() {
  # print the resolved path
  # @params
  # 1: the path to resolve
  # @return
  # >&1: the resolved link path

  local path="${1}"
  while [[ -L ${path} && "$(ls -l "${path}")" =~ -\>\ (.*) ]]
  do
    path="${BASH_REMATCH[1]}"
  done
  echo "${path}"
}

Linux
  1. コマンドラインからWordPressのバージョンを見つける

  2. コマンドライン経由でLinuxのプロセス数を見つける

  3. コマンドラインからhttpdが実行されているかどうかを確認する方法は?

  1. Linuxでファイルをすばやく検索するための5つのコマンドラインツール

  2. コマンドラインからアクセス許可と所有者を変更する方法

  3. Linuxコマンドが何をするかを知る方法

  1. Linux –コマンドラインからインテルアーキテクチャーファミリーを見つける方法は?

  2. サーバーが仮想か物理かを確認するためのターミナルコマンド?

  3. Linux のコマンドラインからテーブルを切り捨てる