Tại sao `.` được hiển thị bởi` ls`?


7

Sau khi đọc câu hỏi Khi bạn gõ vào Ls -a, thì tầm quan trọng của việc. và ... , Tôi có một cái tương tự.

Tại sao phải hiển thị .? Ý tôi là, có thư mục cd .nào không hoạt động không? Làm thế nào là hữu ích cho người dùng để xem dòng này mỗi lần?


Không. Lệnh đó luôn hoạt động. Cũng thật thú vị khi lưu ý rằng cd .. cũng sẽ luôn hoạt động - ngay cả khi bạn đang sử dụng nó từ /
Dason

3
@Dason Về mặt kỹ thuật cd .có thể thất bại, ví dụ: nếu bạn không có quyền thay đổi thư mục ngay bây giờ (điều này có thể xảy ra nếu quá trình thay đổi sang người dùng khác sau khi thay đổi thư mục làm việc hoặc nếu quyền trên thư mục thay đổi sau khi quy trình thay đổi danh mục).
Gilles 'SO- ngừng trở nên xấu xa'

4
Ngoài ra nếu thư mục đã bị xóa khỏi đĩa; ví dụ: gây mkdir /tmp/foobar; cd /tmp/foobar; rmdir /tmp/foobar; cd .ra lỗi:...: No such file or directory
Arcege

Câu trả lời:


16

Lý do đằng sau ls -aviệc hiển thị ...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 lslệ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 -Asẽ hiển thị tất cả dotfile, với các ngoại lệ của .... 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 ...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.


9

lskhông thường hiển thị .... Theo mặc định, lsẩn tất cả các tệp có tên bắt đầu bằng .(tệp chấm) . ls -ahiển thị chúng bởi vì bạn yêu cầu hiển thị tất cả mọi thứ. Một số phiên bản lscó tùy chọn hơi khác nhau ls -A, để hiển thị tất cả các tệp chấm nhưng không .hoặc ...

Hiển thị .có thể hữu ích nếu bạn liệt kê nhiều hơn tên; ví dụ ls -labáo cáo các quyền và quyền sở hữu của thư mục hiện tại và cha mẹ của nó cùng với các tệp trong thư mục.

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.