Adakah yang bisa menjelaskan kepada saya opsi readlink
berikut ini? perintah dalam bahasa sederhana:
-f, --canonicalize
canonicalize by following every symlink in every component of
the given name recursively; all but the last component must
exist
-e, --canonicalize-existing
canonicalize by following every symlink in every component of
the given name recursively, all components must exist
-m, --canonicalize-missing
canonicalize by following every symlink in every component of
the given name recursively, without requirements on components
existence
Jawaban yang Diterima:
Saya rasa itu cukup jelas, jadi saya tidak begitu tahu bagian mana yang terdengar ambigu bagi Anda…
Mari kita lihat dengan sebuah contoh:
–kanonikalisasi
$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp
$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir
$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt
Apapun pilihannya, readlink
akan:
– menerjemahkan jalur relatif ke jalur absolut
– menerjemahkan nama symlink ke jalur sebenarnya
Dan seperti yang Anda lihat di atas, dengan -f
, readlink
tidak peduli jika bagian terakhir dari jalur ini (di sini nonexistentfile.txt
) ada atau tidak.
Jika bagian lain dari jalur ini tidak ada, readlink
tidak akan menghasilkan apa-apa dan akan memiliki kode pengembalian yang berbeda dari 0 (yang berarti terjadi kesalahan). Lihat:
$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1
–mengkanonikalisasi-yang sudah ada
Jika Anda mencoba hal yang sama dengan -e
:
$ readlink -e ./subdir/link
/tmp/realdir
$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1
Dengan -e
, jika salah satu komponen jalur tidak ada, readlink
tidak akan menghasilkan apa-apa dan akan memiliki kode pengembalian yang berbeda dari 0.
–kanonikalisasi-hilang
-m
pilihan adalah kebalikan dari -e
. Tidak ada tes yang akan dilakukan untuk memeriksa apakah ada komponen jalur:
$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile
$ ln -s /nonexistent /tmp/subdir/brokenlink
$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar