cd .. root klasöründe


44

Neden cd ..root klasörüne yazılır, bir hata ile uyarılmaz veya başarısız olmaz?

Beklemek isterim:

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

Bunun yerine, bıraktım /. Tabii ki, bu o zamandan beri ..var /ve basitçe /, aynı .. Sadece neden böyle olduğunu merak ediyorum.


6
Cevap yok, ancak işte bu, iyi bir ilişkili okuma, G + 'daki Rob Pike, nokta dosyalarının kaynağını tartışıyor.
bsd

Yanıtlar:


53

Açık Grup'a göre (POSIX standardından sorumlu):

Her dizinde, ilk dizinde nokta-nokta ismi ile temsil edilen tam bir üst dizin bulunur. [...] Nokta-nokta adının kök dizine göre ne ifade ettiği, uygulama tarafından tanımlanmıştır. Sürüm 7'de kök dizinin kendisine atıfta bulunur; POSIX.1-2008'de belirtilen davranış budur. Bazı ağ sistemlerinde, /../hostname/ , başka bir ana bilgisayarın kök dizinine atıfta bulunmak için kullanılır ve POSIX.1 bu davranışa izin verir.

(Kaynak)


29

Bir hata almazsınız, çünkü /dizin bile aslında geçerli bir dizin girdisine sahiptir.. , ancak diğer dizinlerden farklı olarak dizinin kendisine işaret eder ve böylece aynı şekilde davranır .:

$ 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 /..
$

İlk sütun size söyleyeceği .gibi .., ve /hepsinde aynı inode numarası vardır ve bu nedenle aynı dosya sistemi girdileridir.

Öyleyse, cd ..içinde olsan bile, içinde /kal /.


13
Soru , dizin girişinin neden.. orada olduğunu soruyor .
Nick Matteo,

3
Aklıma gelen tek sebep, /geçerli bir giriş de dahil olmak üzere diğer herhangi bir klasör gibi davranmak istemeniz ... Aksi takdirde /, sistemdeki tüm diğer klasörlerle karşılaştırıldığında farklı davranmanız gerekir .
Dohn Joe

15

O orada kaldı, çünkü çekirdek ve C kütüphanelerinde özel durum işleme kodu yaratmayı gerektirecekti. Şu anda her zaman bir 'olacağını' varsayabilirsiniz. ve '..' gittiğiniz herhangi bir dizinde.

Şu anda gereken tek özel durum kodu, kök dizinleri her zaman kök dizinleri olmadığından, kodun bağlama noktasının bulunduğu dizini işaret etmek için '..' inode değerini geçersiz kıldığı dosya sistemi montaj kodundadır.


Ne de olsa, ağaç yapılarında 'veli-yönlendirmenin' herhangi bir özel durumdan bağımsız olması imkansız, değil mi? Kök, tanım gereği özel olmalıdır ve başka yerlerde özel durumlara veya karışıklığa yol açacak maskeleme girişimi.
musiphil

@ musiphil Unix'te buradaki özel durumlar mountkomuta ve ilgili özel dosyasına karıştırılır /etc/fstab.
luser droog

1

Neyin içinde olduğunu .ve gerçekten ne olduğunu kontrol etmenin başka bir yolu :../

$ readlink -f ..
/home

$ readlink -f /.
/

$ readlink -f /..
/

Gördüğünüz gibi .ve ..işaret etti /.


1

'..' başka bir neden de / içinde olmasaydı, başka bir özel durum yaratacaktı: kök dizinde diğer tüm dizinlerden daha az bir sabit bağlantı olacaktı (tüm dizin düğümlerinde n + 2 bağlantısı var, burada n içindeki doğrudan alt dizinlerin sayısı). Bu, dizin taramalarının optimizasyonu için kullanılan çeşitli programları bozar.


0

Orada olması güzel, çünkü aksi halde ../../../../bir klasörden kökü almak için spam gönderemezdim . ..Kökte izin vermediyse, çalışma dizinindeki klasör sayısını sayarak sıkışıp kaldım.


10
Neyin var cd /?
Bach

@Bach Bazen, klavye ezme daha eğlencelidir. Ayrıca, birçok durumda, köke gitmeye çalışmazsınız, bu durumda kullanmak ../daha iyidir. Ayrıca PHP ile birçok işlem yapıyorum, burada /birkaç nedenden dolayı yapamam .
Skylar Ittner

2
Kapak tarafı belki yanlışlıkla çok fazla ../s girin ve hatasız niyetinde olmadığınız bir dosyayı çalıştırın (veya kaldırın).
jamesdlin

4
Gerekenden ../daha fazla tekrarlamak ve istenildiği şekilde çalışmasını istemek, dosya sistemi görünüşte izin verse bile bana (uyuyan) bir mantık hatası gibi görünüyor.
musiphil

@ musiphil komutları arasında boşluk yazarak - mantıksal bir hatadır ( tail -f | grep arasındaki tüm boşlukların bir zorunluluk olduğunu varsayalım ). Çoğu unix milleti bundan acı çekiyor. '../ ..' yazarak Windows halk sorunu gibi görünüyor (varsayılan olarak, cmd X: \ Windows ile başlar ve en başından spam .. yapmanız gerekir). Daha büyük bir sorun olduğunda neden küçük bir sorunu iyileştirmek için? (boşluklar)
kagali-san
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.