Kích thước của các thư mục không xứng đáng với nỗ lực của chúng tôi

Đây là một bài viết hoàn toàn vô dụng, không cần thiết trong ứng dụng thực tế nhưng lại khá buồn cười về các thư mục trong hệ thống *nix. Hôm nay là thứ sáu.

Trong các cuộc phỏng vấn, những câu hỏi nhàm chán thường nảy sinh về inode, mọi thứ đều là tập tin mà ít người có thể trả lời một cách tỉnh táo. Nhưng nếu tìm hiểu sâu hơn một chút, bạn có thể tìm thấy những điều thú vị.

Để hiểu bài viết xin có vài điểm:

  • mọi thứ đều là một tập tin. thư mục cũng là một tập tin
  • inode lưu trữ siêu dữ liệu từ tệp, nhưng tên tệp không được lưu ở đó
  • tên tập tin được lưu trữ trong dữ liệu thư mục
  • Kích thước của thư mục, giống như kích thước được hiển thị trong ls và theo mặc định là 4Kb, tùy thuộc vào số lượng tệp trong thư mục và độ dài tên của chúng
  • Rõ ràng, càng nhiều file thì kích thước thư mục càng lớn

Bây giờ đây là phần thú vị: chúng tôi tạo một thư mục có một triệu tệp, kiểm tra kích thước của thư mục, sau đó xóa tất cả các tệp và xem kích thước của thư mục.

$ mkdir niceDir && cd niceDir
# в зависимости от скорости носителя, следующая команда может занять 2-10 минут
$ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug 2 13:37 .
$ find . -type f -delete
$ ls -l
total 0
$ ls -lhd .
drwxr-xr-x 2 user user 8.1M Aug  2 13:37 .

Như bạn có thể thấy, kích thước thư mục không thay đổi, mặc dù có vẻ như vậy :)

Bạn chỉ có thể sửa kích thước của một thư mục (không xóa nó) bằng cách sử dụng fsck (và tùy chọn -D) ở trạng thái chưa được đếm.

Nhưng khi tôi đi tìm lý do tại sao lại như vậy thì hóa ra cách đây 10 năm hành vi đó đã có rồi. thảo luận bằng lkml. Và theo các nhà phát triển, việc sửa lỗi đơn giản là không đáng nỗ lực.

Nguồn: www.habr.com

Thêm một lời nhận xét