GNU/Linux >> Belajar Linux >  >> Linux

readlink -f dan -e opsi deskripsi tidak jelas

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.


Linux
  1. Batasi Cari Keluaran Dan Hindari Sinyal 13?

  2. Redirect Dan Output Pipa?

  3. Iptables Dan Proxy Transparan?

  1. Linux – Headphone Tidak Berfungsi Linux Mint 18?

  2. Mengapa Rm -rf Dan Bukan Rmdir -rf?

  3. 7 Contoh Operator Linux Grep OR, Grep AND, Grep NOT

  1. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  2. Apa Yang Dimaksud Dengan Menghubungkan Stdout Dan Stdin?

  3. Cara mengarahkan output ke file dan stdout