Apa itu dot dot (..)? Mengapa perilakunya berbeda dengan symlink?

14

Saya mencoba memahami sifat ..(titik ganda). Tampaknya mengarah ke target yang berbeda tergantung pada bagaimana Anda mengaksesnya.

Contoh:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

Sekarang, /outer/middle/inner/..mengarah ke /outer/middle/, tetapi jika saya mengaksesnya melalui tautan simbolik, /outer/inner/..mengarah ke /outer/. Tampaknya ada dua yang berbeda di ..sini.

Apa ..sebenarnya? tautan simbolis? tautan keras? Atau itu dihasilkan secara dinamis tergantung pada jalur ketika direktori diakses? Atau mungkin pemahaman saya tentang tautan simbolik salah.

Edit:

Pengamatan terkait lainnya

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

Sekarang jika saya mencoba mengakses file /outer/inner/fitu berfungsi. Tetapi seharusnya tidak karena /outer/inner/../filetidak menunjuk ke file. file tersebut di /outer/middle/inner/... Ini sepertinya bertentangan dengan perilaku di atas !?

pengguna98456
sumber
Perhatikan bahwa tautan simbolis bukan jalan pintas; mereka lebih seperti petunjuk.
wizzwizz4

Jawaban:

34

..adalah tautan keras ke direktori induk yang dibuat sebagai bagian dari entri direktori.

Jika Anda menerbitkan ls -aildi masing-masing direktori ini, Anda akan melihat bahwa entri berikut semuanya memiliki jumlah inodebidang yang sama (bidang pertama) dan hard link (bidang ketiga):

  • ..saat mengeksekusi ls -aildiinner
  • .saat mengeksekusi ls -aildimiddle
  • middlesaat mengeksekusi ls -aildiouter

Sekarang, / luar / tengah / dalam / .. mengarah ke / luar / tengah /, tetapi jika saya mengaksesnya melalui tautan simbolis, / luar / dalam / .. mengarah ke / luar /. Sepertinya ada dua yang berbeda .. di sini.

Ada satu ..entri di inner. Jika direktori kerja Anda saat ini adalah outer, Anda akan melihat hasil yang sama (daftar direktori middle) dari

  • ls -al inner/..
  • ls -al middle/inner/..

Satu-satunya situasi di mana "mengakses" ..melalui link simbolik harus memberikan perilaku yang berbeda adalah jika Anda cdke dalam innermenggunakan symbolic link, sehingga Anda logis direktori kerja ( pwd -L) berbeda dari Anda fisik direktori kerja ( pwd -P). Dalam hal ini, cd ..akan membawa Anda kembali ke outer bukan karena ada ..entri yang berbeda , tetapi karena shell Anda melacak direktori kerja logis Anda dan membuat Anda keluar satu tingkat, daripada mereferensikan ..entri yang sebenarnya masuk inner.

Ini adalah kenyamanan yang disediakan oleh, misalnya bashsebagai bagian dari cdperintah bawaan. Anda dapat mengesampingkan ini dengan memintanya untuk mengubah ke ..entri aktual dengan

cd -P ..

di mana -Pmenginstruksikan cd(seperti dengan di pwdatas) untuk menggunakan jalur fisik.

pengguna4556274
sumber
Aha, kebingungan berasal dari penggunaan cduntuk memeriksa. Jadi, koreksi saya jika saya salah, ..selalu ..arahkan ke orangtua fisik, Jika symlink menggunakannya akan diarahkan ke orangtua (fisik) yang sebenarnya. Kebingungan hanya terjadi cdpada direktori.
user98456
Ini juga menjelaskan perilaku detik. Terima kasih banyak.
user98456
3
@Theophrastus, ls -laimenunjukkan kepada Anda bahwa itu /..adalah direktori root itu sendiri, lagi (alias /. atau /). Kecuali jika sistem file rusak, seharusnya tidak ada kasus lain di mana . == ..; bahkan ketika fs dipasang di suatu tempat ia mendapat benar ..dari induk (sementara) (jadi ada beberapa keajaiban yang terjadi di sana, ..bukan hanya entri statis yang sederhana dalam tabel sistem file).
AnoE