Komponen pertama di sini berarti sebuah elemen dari path.Contoh :
/home/user/.ssh => <component1>/<component2>/<component3>
1- Misalkan kita memiliki struktur direktori seperti ini :
lols
├── lol
├── lol1 -> lol
└── lol2 -> lol1
Dan juga direktori yang tidak ada di sini adalah lols/lol3Jadi Anda dapat membandingkan output dari setiap perintah :
readlink -f lols/lol1 : /lols/lol
readlink -e lols/lol1 : /lols/lol
Keluaran di sini akan sama karena semua komponen jalur ada.
readlink -f lols/lol8 : lols/lol8
readlink -e lols/lol8 : <empty outpyt>
Output di sini berbeda karena dengan -f itu akan menunjukkan hasilnya karena ada satu komponen yang ada setidaknya di jalur yang lols dan dengan -e hasilnya akan kosong karena semua jalur komponen harus ada .
Dan yang terakhir adalah dengan memiliki banyak direktori yang tidak ada :
readlink -f lols/lol8/lol10 : <empty output>
readlink -e lols/lol8/lol10 : <empty output>
Di sini keluarannya akan kosong karena seperti yang dijelaskan di halaman peta :-f :semua kecuali komponen terakhir harus ada => Tidak dihormati-o :semua komponen harus ada => Tidak dihormati
2- Mengapa tidak menggunakan hanya ls -l :
Misalkan kita membuat file bernama file1 dan membuat asymlink ke file ini bernama link1 dan dari link1 membuat symlink lain link2 :
touch file1 : file1
ln -s file1 link1 : link1 -> file1
ln -s link1 link2 : link2 -> link1
Kemudian dengan ls -l link2
hasilnya adalah :link2 -> link1Dan jika kita menggunakan readlink link2
hasilnya adalah :link1; sama seperti ls -lTapi jika kita menggunakan readlink -f|-e link2
hasilnya adalah :file1; sehingga akan mengarah ke sumber berkas.
Jadi kapan harus menggunakan tautan baca bukannya ls ?Bila ada symlinks bersarang (Recursive Read).Ketika file/direktori berada di lokasi yang berbeda.
Jadi lebih baik menggunakan readlink bukannya ls untuk menghindari kesalahan.
Ini berarti untuk tautan yang mengikuti rute melalui lebih dari satu lompatan hingga target akhir mereka. Misalnya:
touch test_file
ln -s test_file test_link
ln -s non_existing_target dead_link
ln -s test_link link1
ln -s dead_link link2
Di atas, link1
akhirnya ditautkan ke file, melalui test_link
, jadi -f
dan -e
akan memberikan hasil yang sama. link2
menunjuk ke tautan mati, dan Anda melihat bahwa:
> readlink -e link2
> readlink -f link2
/home/thanasis/temp/non_existing_target
dead_link
adalah "komponen terakhir" dalam ekspresi "semua kecuali komponen terakhir harus ada". -f
menyelesaikan ke target yang tidak ada, sedangkan -e
tidak memberikan hasil.
Perhatikan bahwa man readlink
merekomendasikan itu
realpath
adalah perintah pilihan yang digunakan untuk fungsionalitas kanonikalisasi
Untuk contoh ini, realpath -m
, (--missing
) akan memberikan output yang sama ke readlink -f
. Secara umum realpath -e
adalah cara untuk menguji apakah tautan dapat diselesaikan ke file target terakhir yang ada, yang mengembalikan kesalahan yang diharapkan di sini:
> realpath -e link2
realpath: link2: No such file or directory
Sedangkan ls -l
mengembalikan semua hasil dan mungkin memiliki keluaran warna merah untuk semua tautan mati. Juga opsi -L
ada, untuk mereferensikan tautan dan menunjukkan targetnya, ini untuk dibaca manusia, jangan pernah menggunakan ls
untuk memutuskan apa pun tentang tautan di dalam skrip.