cd .. di folder root

44

Mengapa cd .., diketik di folder root, tidak memperingatkan atau gagal dengan kesalahan?

Saya harapkan:

/$ cd ..
-bash: cd: ..: No such file or directory

Sebaliknya, saya ditinggal di /. Tentu saja, ini karena ..memang ada /, dan hanya /, seperti .. Saya hanya ingin tahu mengapa seperti itu.

Bach
sumber
6
Tidak ada jawaban, tapi di sini ada bacaan terkait yang baik, Rob Pike on G + yang membahas asal usul dotfile.
bsd

Jawaban:

53

Menurut Grup Terbuka (bertanggung jawab untuk standar POSIX):

Setiap direktori memiliki tepat satu direktori induk yang diwakili oleh nama dot-dot di direktori pertama. [...] Apa nama file dot-dot merujuk relatif ke direktori root ditentukan implementasi. Dalam Versi 7 ini merujuk ke direktori root itu sendiri; ini adalah perilaku yang disebutkan dalam POSIX.1-2008. Dalam beberapa sistem jaringan, konstruksi /../hostname/ digunakan untuk merujuk ke direktori root dari host lain, dan POSIX.1 mengizinkan perilaku ini.

(Sumber)

Twinkles
sumber
29

Anda tidak mendapatkan kesalahan karena bahkan /direktori sebenarnya memiliki entri direktori yang valid .., tetapi tidak seperti direktori lain, direktori itu menunjuk ke direktori itu sendiri dan dengan demikian berperilaku identik dengan .:

$ ls -lid / /. /..
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /.
128 drwxr-xr-x 22 root root 4096 Apr 15 11:26 /..
$

Sebagai kolom pertama memberitahu Anda, ., .., dan /semua memiliki sama inode-nomor dan dengan demikian entri filesystem yang sama.

Jadi, bahkan jika Anda cd ..berada di dalam diri /Anda, tetaplah tinggal /.

Andreas Wiese
sumber
13
Pertanyaannya bertanya mengapa para ..entri direktori yang ada.
Nick Matteo
3
Satu-satunya alasan yang muncul di pikiran saya, adalah bahwa Anda ingin memperlakukan /sama seperti folder lain, termasuk entri yang valid untuk ... Kalau tidak, Anda harus memperlakukan /berbeda dibandingkan dengan semua folder lain dalam sistem.
Dohn Joe
15

Itu ada di sana karena menghapusnya memerlukan pembuatan kode penanganan kasus khusus di kernel dan C library. Saat ini Anda dapat mengasumsikan bahwa akan selalu ada '.' dan '..' di direktori yang Anda kunjungi.

Satu-satunya kode kasus khusus yang diperlukan saat ini adalah dalam kode pemasangan sistem file, di mana kode menimpa nilai inode dari '..' untuk menunjuk ke direktori yang berisi titik mount, karena direktori root tidak selalu direktori root.

pengguna65905
sumber
Lagipula, 'rujukan orangtua' dalam struktur pohon tidak mungkin bebas dari penanganan kasus khusus, bukan? Akar harus khusus menurut definisi, dan setiap upaya untuk menutupi yang akan mengarah pada kasus khusus atau kebingungan di tempat lain.
musiphil
@musiphil Dalam unix, case khusus di sini dikocok untuk mountperintah dan file khusus yang terkait /etc/fstab.
luser droog
1

Cara lain untuk memeriksa apa .dan ..di /benar-benar:

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

Seperti yang Anda lihat, .dan ..ditunjukkan /.

cuonglm
sumber
1

Alasan lain '..' ada di / adalah bahwa jika tidak ada maka akan membuat kasus khusus lain: direktori root akan memiliki satu hard link lebih sedikit dari semua direktori lain (semua node direktori memiliki n + 2 tautan, di mana n adalah jumlah subdirektori langsung di dalam). Ini akan memecah berbagai program yang mengandalkan untuk mengoptimalkan pemindaian direktori.

cov
sumber
0

Sangat menyenangkan karena ada di sana, karena kalau tidak, saya tidak akan dapat ../../../../mengirim spam ke root dari folder. Jika itu tidak memungkinkan ..di root maka saya akan terjebak menghitung jumlah folder di direktori kerja.

Skylar Ittner
sumber
10
Ada apa dengan ini cd /?
Bach
@Bach Terkadang, keyboard mashing lebih menyenangkan. Selain itu, dalam banyak keadaan Anda tidak mencoba masuk ke root, dalam hal ini menggunakan ../lebih baik. Saya juga melakukan banyak operasi file di PHP, di mana saya tidak dapat melakukannya /karena beberapa alasan.
Skylar Ittner
2
Sisi sebaliknya adalah mungkin Anda secara tidak sengaja memasukkan terlalu banyak ../dan mengoperasikan (atau menghapus) file yang tidak Anda inginkan tanpa kesalahan.
jamesdlin
4
Mengulangi ../lebih dari yang dibutuhkan dan berharap itu berfungsi sebagaimana dimaksud tampak seperti kesalahan logika (tidak aktif) bagi saya, bahkan jika filesystem tampaknya memungkinkannya.
musiphil
@musiphil mengetik spasi di antara perintah - adalah kesalahan logika (asumsi bahwa semua spasi antara tail -f | grep adalah suatu keharusan). Kebanyakan orang unix menderita karenanya. Mengetik '../ ..' terlihat seperti masalah Windows-folk (secara default, cmd dimulai pada X: \ Windows dan Anda harus melakukan spam .. sejak awal). Mengapa menyembuhkan masalah kecil ketika ada yang lebih besar? (spasi)
kagali-san