Hành vi của lệnh `du` với cờ` -L`


11

Tôi đã nhận thấy một hành vi lạ với dulệnh khi nó được sử dụng với -Ltùy chọn dòng lệnh.

Tôi đang sử dụng Slackware 14 và Coreutils 8.19.

Để tái tạo hành vi lạ, tạo hai thư mục:

mkdir foo
mkdir bar

Tạo một tệp trong một trong các thư mục:

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

Và một liên kết tượng trưng trong thư mục khác:

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

Bây giờ, nếu bạn gõ:

du -h -L bar

Bạn sẽ nhận được:

16k bar

Kể từ khi symlink bị hủy đăng ký. Nhưng nếu bạn gõ:

du -h -L *

Bạn sẽ nhận được:

16K     foo
4.0K    bar

Và các liên kết tượng trưng sẽ không bị hủy bỏ. Tui bỏ lỡ điều gì vậy?


Có vẻ như bạn dumuốn chơi thông minh ở đây, nhưng nếu bạn chạy df -a -L bar foođầu ra thì rất sai (đếm 16K trong thanh để trống foo).
guido

Câu trả lời:


18

Theo mặc định, dusẽ chỉ đếm từng tệp một lần nếu nó được liên kết với nhiều lần. Nếu bạn chạy du -L barnó sẽ đếm tập tin vì nó chỉ đạt được một lần. Tuy nhiên, nếu bạn chạy du -L *nó sẽ chỉ tính nó lần đầu tiên nhìn thấy nó. Ví dụ:

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

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

Lưu ý rằng việc hoán đổi thứ tự của các đối số sẽ thay đổi thư mục nào được báo cáo là 16K.

Bạn có thể buộc duđếm tập tin hai lần bằng cách truyền -ltham số.

Biên tập:

Liên kết tượng trưng là một loại tệp đặc biệt và cần thêm một bước để theo liên kết. dusẽ không theo các liên kết tượng trưng trừ khi -Ltùy chọn được bật.

Mặt khác, một liên kết cứng về cơ bản là một tệp trong hai (hoặc nhiều) thư mục. ducó lẽ theo dõi những tập tin mà nó đã thấy bằng số inode để tránh đếm hai lần này. -lvô hiệu hóa hành vi này.

Vì vậy, chỉ với -Lnó, nó sẽ đi theo liên kết tượng trưng, ​​nhưng nếu tệp mục tiêu có số inode thì nó đã thấy nó sẽ không được tính lại. Chỉ với -lnó, nó sẽ đếm các liên kết cứng trùng lặp, nhưng sẽ không theo các liên kết tượng trưng.

Nếu bạn sử dụng -l-Lcùng nhau, cả hai sẽ theo các liên kết tượng trưng và cũng cho phép đếm (các) tệp mục tiêu nhiều lần.


Cảm ơn bạn. Những công việc này. Tuy nhiên tôi rất muốn có một số giải thích thêm. Trên trang người đàn ông, tôi đọc mà -lkhông count sizes many times if hard linked, nhưng ở đây tôi đang làm việc với liên kết tượng trưng. Hơn nữa, -lmột mình không giải quyết được vấn đề, trong khi nếu tôi sử dụng cả hai -l-Lnó đếm kích thước đúng.
Zagorax

@Zagorax Vâng, trang người đàn ông có một chút không rõ ràng về cách thức -l-Ltương tác. Lời giải thích có một chút quá dài cho một nhận xét, vì vậy tôi đã cập nhật câu trả lời của mình.
David Baggerman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.