Lý do đằng sau ls -a
việc hiển thị .
và ..
không liên quan gì đến tiện ích và mọi thứ phải làm với các hệ thống tệp Unix (và Linux).
Tất cả mọi thứ là một tập tin.
Thư mục thực sự là các tập tin có chứa danh sách các tập tin. "Bên trong" bất kỳ thư mục đã cho nào, bởi vì đó là phối cảnh của người dùng, nếu không chính xác là phối cảnh của hệ thống tệp, có hai tệp đặc biệt.
- Đầu tiên, được gọi
.
, là một tham chiếu đến thư mục làm việc hiện tại. Điều này được mọi người sử dụng gần như mỗi ngày, khi họ làm những việc như chạy một lệnh trong thư mục hiện tại thông qua ./scriptname
.
- Thứ hai, được gọi
..
là một tham chiếu đến thư mục mẹ CWD. Giống như .
, ..
được sử dụng hàng ngày bởi tất cả những người mong muốn thay đổi thư mục sang thư mục mẹ thông qua cd ..
.
Cuộc gọi hệ thống getdents()
, là công việc ở phía hệ thống ls
, chỉ đơn giản là liệt kê tất cả các tệp trong một thư mục. (hãy nhớ: tất cả mọi thứ là một tập tin. thiết bị, thư mục, ổ cắm, vv để tất cả chúng hiển thị)
Từ khía cạnh tiện ích của mọi thứ, tác giả của ls
lệnh đã cung cấp một số tùy chọn và kết hợp các tùy chọn, cho phép chúng tôi lọc ra một số phần hoặc loại thông tin nhất định, ví dụ @Gilles đã nhận xét ở trên ls -A
sẽ hiển thị tất cả dotfile, với các ngoại lệ của .
và ..
. Tất cả các tùy chọn này có thể được coi là tùy chọn xử lý hậu kỳ. Chúng ảnh hưởng đến những gì được hiển thị bởi ls
, không phải những gì được tìm thấy bởi ls
.
Thực sự không có lý do để liệt kê một cách rõ ràng .
và ..
theo mặc định, vì tất cả chúng ta đều biết chúng ở đó, chúng dùng để làm gì và khi nào sử dụng chúng.
Nó chắc chắn có thể hữu ích để có thể có một số tùy chọn để xem chúng, khi bạn đang khắc phục sự cố quyền lạ.
Kiểm tra trang chủ chogetdents()
. Nó giải thích thêm một chút về cách thức hoạt động của nó và bao gồm mã nguồn cho một chương trình mẫu mà bạn có thể biên dịch gcc -Wall
, liệt kê tất cả các tệp trong một thư mục.
-
1. Ít nhất, trang chủ Ubuntu getdents()
dường như có mã mẫu.