Saya telah memperhatikan perilaku aneh dengan du
perintah ketika digunakan dengan -L
opsi baris perintah.
Saya menggunakan Slackware 14 dan Coreutils 8.19.
Untuk mereproduksi perilaku aneh, buat dua folder:
mkdir foo
mkdir bar
Buat file di dalam salah satu folder:
perl -e 'print "A"x10000' > foo/text
Dan symlink di folder lain:
ln -s ../foo/text bar/text
Sekarang, jika Anda mengetik:
du -h -L bar
Anda akan mendapatkan:
16k bar
Karena symlink itu dereferenced. Tetapi jika Anda mengetik:
du -h -L *
Anda akan mendapatkan:
16K foo
4.0K bar
Dan symlink tidak akan dereferensi. Apakah saya melewatkan sesuatu?
symlink
disk-usage
coreutils
Zagorax
sumber
sumber
du
ingin bermain pintar di sini, tetapi jika Anda menjalankandf -a -L bar foo
output sangat salah (menghitung 16K di bar meninggalkan foo kosong).Jawaban:
Secara default,
du
hanya akan menghitung setiap file sekali jika dikaitkan dengan beberapa kali. Jika Anda menjalankannyadu -L bar
akan menghitung file karena hanya mencapainya sekali. Namun, jika Anda menjalankannyadu -L *
hanya akan menghitungnya saat pertama kali melihatnya. Sebagai contoh:Perhatikan bahwa bertukar urutan argumen mengubah folder mana yang dilaporkan sebagai 16K.
Anda dapat memaksa
du
untuk menghitung file dua kali dengan melewati-l
parameter.Edit:
Tautan simbolik adalah jenis file khusus, dan diperlukan langkah ekstra untuk mengikuti tautan tersebut.
du
tidak akan mengikuti tautan simbolik kecuali-L
opsi diaktifkan.Tautan keras di sisi lain, pada dasarnya adalah satu file yang ada di dua (atau lebih) folder.
du
mungkin melacak file mana yang telah dilihatnya dengan nomor inode untuk menghindari penghitungan dua kali ini.-l
menonaktifkan perilaku ini.Jadi, hanya dengan
-L
itu, ia akan mengikuti tautan simbolik, tetapi jika file target memiliki nomor inode, ia sudah melihatnya tidak akan dihitung ulang. Hanya dengan-l
itu akan menghitung duplikat tautan keras, tetapi tidak akan mengikuti tautan simbolis.Jika Anda menggunakan
-l
dan-L
bersama - sama, keduanya akan mengikuti tautan simbolik, dan juga memungkinkan penghitungan file target lebih dari satu kali.sumber
-l
tidakcount sizes many times if hard linked
, tetapi di sini saya bekerja dengan symlink. Selain itu,-l
sendirian tidak menyelesaikan masalah, sementara jika saya menggunakan keduanya-l
dan-L
itu menghitung ukuran dengan benar.-l
dan-L
berinteraksi. Penjelasannya agak terlalu panjang untuk dikomentari, jadi saya sudah memperbarui jawaban saya.