-L işareti ile `du` komutunun davranışı


11

Komut satırı seçeneği duile kullanıldığında komutla garip bir davranış fark ettim -L.

Slackware 14 ve Coreutils 8.19 kullanıyorum.

Garip davranışı yeniden oluşturmak için iki klasör oluşturun:

mkdir foo
mkdir bar

Klasörlerden birinin içinde bir dosya oluşturun:

perl -e 'print "A"x10000' > foo/text

Ve diğer klasördeki bir sembolik bağlantı:

ln -s ../foo/text bar/text

Şimdi, şunu yazarsanız:

du -h -L bar

Alacaksınız:

16k bar

Simge bağlantısı kaldırıldığından beri. Ancak şunu yazarsanız:

du -h -L *

Alacaksınız:

16K     foo
4.0K    bar

Ve sembolik bağlantısı kaldırılamaz. Bir şey mi kaçırıyorum?


duburada zekice oynamak istiyor gibi görünüyor , ama eğer çalıştırırsanız df -a -L bar fooçıkış çok yanlış (bardaki 16K'yı saymak foo boş bırakarak).
guido

Yanıtlar:


18

Varsayılan olarak, duher dosya birden çok kez bağlıysa yalnızca bir kez sayılır. Eğer çalıştırırsanız du -L barsadece bir kez ulaştığı için dosyayı sayar. Ancak, çalıştırırsanız du -L *sadece ilk gördüğünde sayar. Örneğin:

$ du -L foo bar
16K     foo
4.0K    bar

$ du -L bar foo
16K     bar
4.0K    foo

Bağımsız değişkenlerin sırasını değiştirmenin hangi klasörün 16K olarak bildirildiğine dikkat edin.

Parametreyi duileterek dosyayı iki kez saymaya zorlayabilirsiniz -l.

Düzenle:

Sembolik bağlantılar özel bir dosya türüdür ve bağlantıyı takip etmek için fazladan bir adım gereklidir. seçenek etkinleştirilmedikçe dusembolik bağlantıları -Lizlemez.

Diğer yandan, sabit bağlantı temelde iki (veya daha fazla) klasörde bulunan bir dosyadır. dubunların iki kez sayılmasını önlemek için muhtemelen inode numarasına göre gördüğü dosyaları izler. -lbu davranışı devre dışı bırakır.

Yani, sadece -L, sembolik bağlantıyı takip edecek, ancak hedef dosyada bir inode numarası varsa, daha önce görmediği görülecektir. Sadece -lyinelenen sabit bağlantıları sayar, ancak sembolik bağlantıları takip etmez.

Birlikte -lve -Lbirlikte kullanırsanız , hem sembolik bağlantıları izler hem de hedef dosya (lar) ı birden fazla saymaya izin verir.


Teşekkür ederim. Bu çalışıyor. Ancak bazı ekstra açıklamalar yapmak isterim. Adam sayfada, okudum -lyapar count sizes many times if hard linked, ama burada sembolik bağla çalışıyorum. Üstelik, -lher ikisini de kullanırsam -lve -Lboyutu düzgün bir şekilde sayarken , tek başına sorunu çözmez .
Zagorax

@Zagorax Evet, man sayfası nasıl -lve -Letkileşim konusunda biraz net değil . Açıklama bir yorum için biraz uzun sürdü, bu yüzden cevabımı güncelledim.
David Baggerman
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.