Pertanyaan Cari tahu target simbol simbolis melalui baris perintah


Katakan bahwa saya menyiapkan tautan simbolis:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

apakah ada cara untuk melihat apa targetnya myothertextfile.txt menggunakan baris perintah?


105
2017-10-19 18:36






Jawaban:


Menggunakan -f bendera untuk mencetak versi kanonikal. Sebagai contoh:

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

142
2017-10-19 18:42



Seperti yang disarankan di pertanyaan lain, Anda mungkin ingin menggunakannya readlink -f. - Denilson Sá Maia
Untuk mendapatkan ini bekerja di Mac OS X, brew install coreutils. Ini menginstal versi perintah gnu dasar yang diawali dengan huruf g, i.e. greadlink -f somefile - Mike D
dengan -f switch, perintah tidak mengembalikan apa pun dalam kasus saya .. - sotn
Menggunakan -f memberi saya informasi yang saya inginkan, yaitu menyelesaikan beberapa symlink dan menampilkan target akhir. - isapir


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

18
2017-10-19 19:03



Tidak ada yang salah dengan jawaban pertama, tetapi yang satu ini lebih lengkap dan bermanfaat. - Mike S


Ini juga akan berfungsi:

ls -l /root/Public/myothertextfile.txt

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


4
2017-10-19 19:02





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

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

Tidak bagus untuk menguraikan (gunakan readlink untuk itu), tetapi menunjukkan nama tautan dan tujuan, tanpa kekacauan ls -l

-c bisa ditulis --format dan %N berarti "mengutip nama file dengan dereferensi jika tautan simbolis".


4
2017-09-29 17:44





Itu readlink adalah hal yang baik, tetapi platform GNU-specific dan non cross. Saya biasa menulis skrip lintas platform untuk /bin/sh, 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 yakin 100% ls format output.


2
2018-04-17 21:35





Jika Anda tidak bisa menggunakannya readlink, lalu menguraikan hasilnya ls -l bisa dilakukan seperti ini.

Hasil normal adalah:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

Jadi kami ingin mengganti semuanya sebelum "->" dan tanda panah disertakan. Kita bisa menggunakannya sed untuk ini:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll atau ls -l harus mencantumkan item direktori, termasuk tautan simbolis Anda dan targetnya

cd -P /root/Public/myothertextfile.txt (dalam kasus Anda) harus menunjuk ke jalan asli


0
2018-05-02 13:48