GNU/Linux >> Belajar Linux >  >> Linux

Cari tahu target tautan simbolik melalui baris perintah

Solusi 1:

Gunakan -f tandai untuk mencetak versi yang dikanonikalisasi. Misalnya:

readlink -f /root/Public/myothertextfile.txt

Dari man readlink :

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

Solusi 2:

readlink adalah perintah yang Anda inginkan. Anda harus melihat halaman manual untuk perintah tersebut. Karena jika Anda ingin mengikuti rantai tautan simbolis ke file sebenarnya, maka Anda memerlukan sakelar -e atau -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

Solusi 3:

Ini juga akan berfungsi:

ls -l /root/Public/myothertextfile.txt

tapi readlink akan lebih disukai untuk digunakan dalam skrip daripada mem-parsing ls .

Solusi 4:

Jika Anda ingin menampilkan sumber dan tujuan tautan, coba stat -c%N files* . Mis.

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

Itu tidak baik untuk parsing (gunakan readlink untuk itu), tetapi itu menunjukkan nama tautan dan tujuan, tanpa kekacauan ls -l

-c dapat ditulis --format dan %N berarti “nama file yang dikutip dengan dereferensi jika tautan simbolis”.

Solusi 5:

readlink adalah hal yang baik, tetapi platform khusus GNU dan non lintas. Saya biasa menulis skrip lintas platform untuk /bin/sh , oleh karena itu saya akan menggunakan sesuatu seperti:

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

atau:

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

tetapi ini perlu diuji pada platform yang berbeda. Saya pikir mereka akan bekerja, tetapi tidak 100% yakin untuk ls format keluaran.

Hasil dari ls juga dapat diuraikan dalam bash tanpa bergantung pada perintah eksternal seperti awk , sed atau perl .

bash_realpath ini fungsi, menyelesaikan tujuan akhir dari sebuah link (link→link→link→final):

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. Perintah Terminal Untuk Mengetahui Apakah Server Itu Virtual Atau Fisik?

  2. Menemukan jumlah proses di Linux melalui baris perintah

  3. Bagaimana cara mengetahui apakah httpd sedang berjalan atau tidak melalui baris perintah?

  1. 5 Alat Baris Perintah untuk Menemukan File dengan Cepat di Linux

  2. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  3. Linux – Bagaimana Cara Mengetahui Keluarga Arsitektur Intel Dari Baris Perintah?

  1. Cara Mengubah Izin dan Pemilik melalui Command Line

  2. Temukan versi WordPress dari baris perintah

  3. potong tabel melalui baris perintah di Linux