Katakanlah saya menyiapkan tautan simbolis:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
apakah ada cara untuk melihat apa target myothertextfile.txt
menggunakan baris perintah?
Katakanlah saya menyiapkan tautan simbolis:
ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt
apakah ada cara untuk melihat apa target myothertextfile.txt
menggunakan baris perintah?
Gunakan -f
bendera untuk mencetak versi kanonik. 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
readlink -f
.brew install coreutils
,. Ini menginstal versi gnu dasar dari perintah yang diawali dengan hurufg
, yaitugreadlink -f somefile
Ubuntu 18.04.1 LTS (Bionic Beaver)
halaman readlink ada catatan yang mengatakan "Note realpath (1) adalah perintah yang disukai untuk digunakan untuk fungsionalitas kanonikisasi."readlink adalah perintah yang Anda inginkan. Anda harus melihat halaman manual untuk perintah. Karena jika Anda ingin mengikuti rantai tautan simbolik ke file aktual, maka Anda memerlukan sakelar -e atau -f:
sumber
Ini juga akan berfungsi:
tetapi
readlink
akan lebih disukai untuk digunakan dalam skrip daripada parsingls
.sumber
Jika Anda ingin menunjukkan sumber dan tujuan tautan, coba
stat -c%N files*
. MisalnyaIni tidak baik untuk parsing (gunakan
readlink
untuk itu), tetapi itu menunjukkan nama tautan dan tujuan, tanpa kekacauanls -l
-c
dapat ditulis--format
dan%N
berarti "nama file yang dikutip dengan dereferensi jika tautan simbolik".sumber
Ini
readlink
adalah hal yang baik, tetapi platform khusus GNU dan non lintas. Saya biasa menulis skrip lintas platform/bin/sh
, oleh karena itu saya akan menggunakan sesuatu seperti:atau:
tetapi ini perlu diuji pada platform yang berbeda. Saya pikir mereka akan bekerja, tetapi tidak 100% yakin untuk
ls
format output.Hasil dari
ls
juga dapat diuraikan di dalambash
tanpa tergantung pada perintah eksternal sepertiawk
,sed
atauperl
.bash_realpath
Fungsi ini , menyelesaikan tujuan akhir suatu tautan (tautan → tautan → tautan → final):sumber
Jika Anda tidak dapat menggunakan
readlink
, maka penguraian hasills -l
dapat dilakukan seperti ini.Hasil normal adalah:
Jadi kami ingin mengganti semuanya sebelum "->" dan panah disertakan. Kita bisa menggunakan
sed
ini:sumber
Pertanyaannya tidak cukup akurat untuk memberikan jawaban sederhana seperti brian-brazil:
memang akan melakukan dereferensi setiap symlink yang terlibat dalam path membangun ke target akhir di belakang
some_path
.Tetapi satu level dari symlink cascading hanyalah sebuah kasus khusus di antara yang lain dalam suatu sistem, kasus yang umum adalah level N dari symlink cascading. Lihatlah yang berikut di sistem saya:
rwhich
adalah implementasi rekursif saya sendiriwhich
yang mencetak semua symlink cascading menengah (ke stderr) ke target akhir (ke stdout).Maka jika saya ingin tahu apa itu:
target symlink / usr / bin / emacs **, jawaban yang jelas bagi saya adalah
/etc/alternatives/emacs
dikembalikan oleh:yang akhir sasaran belakang Cascading symlink / usr / bin / emacs, jawabannya akan
/usr/bin/emacs24-x
seperti dikembalikan oleh:sumber
ll
atauls -l
harus mendaftar item direktori, termasuk tautan simbolis Anda dan targetnyacd -P /root/Public/myothertextfile.txt
(dalam kasus Anda) harus mengarah ke jalur aslisumber
Jika Anda menemukan target semua tautan di dalam folder dan subfoldernya gunakan
find . -type l -ls
perintah dengan tipe tautan sebagai berikut:Jika Anda ingin target satu, maka
ls -l
harus berfungsi:sumber