Tại sao tên tệp bắt đầu bằng dấu chấm ẩn? Tôi có thể ẩn các tập tin mà không sử dụng dấu chấm làm ký tự đầu tiên của chúng không?


15

Ban đầu tôi nghĩ đó là một sự trùng hợp ngẫu nhiên, nhưng bây giờ tôi thấy thậm chí còn có một thẻ cho nó: tất cả các tên tệp ẩn bắt đầu bằng một dấu chấm. Đây có phải là một quy ước? Tại sao nó được chọn? Nó có thể được thay đổi? Hay nói cách khác (như một câu hỏi liên quan @evilsoup gợi ý rằng ngụ ý câu trả lời cho một nhóm người khác): tôi có thể ẩn các tệp mà không đổi tên chúng (sử dụng .làm ký tự đầu tiên của tên của họ) không?


Hoặc "tại sao tất cả các tên tệp ẩn bắt đầu bằng dấu chấm?", Nếu bạn thích.
JMCF125

2
Vâng, đó là một quy ước, về lý do tại sao nó được chọn, ai cũng biết, hãy hỏi những người tiên phong UNIX, đó là một quy ước .
terdon

4
Đọc bài viết Wikipedia có liên quan về các tệp bị ẩnplus.google.com/101960720994009339267/posts/R58WgWwN9jp cho các khía cạnh lịch sử. Nó không thể thay đổi.
jofel

Tôi nghĩ Linux hoàn toàn có thể tùy chỉnh ...
JMCF125

1
@ JMCF125 thực sự nhận xét đó xuất hiện như một sự mỉa mai hơn tôi dự định, xin lỗi về điều đó. Bạn có thực sự hỏi: 'tôi có thể ẩn các tập tin mà không đổi tên chúng không?' - nếu đó là trường hợp, bạn nên chỉnh sửa nó thành câu hỏi của bạn.
evilsoup

Câu trả lời:


26

Theo Wikipedia ,

Khái niệm tên tập tin đi trước a. nên được ẩn là kết quả của một lỗi phần mềm trong những ngày đầu của Unix. Khi các mục đặc biệt ...thư mục được thêm vào hệ thống tập tin, người ta đã quyết định rằng lệnh ls không nên hiển thị chúng. Tuy nhiên, chương trình đã bị viết nhầm để loại trừ bất kỳ tệp nào có tên bắt đầu bằng một .ký tự, thay vì tên chính xác .hoặc ...

... Vì vậy, nó bắt đầu như một lỗi, và sau đó nó được coi là một tính năng (đối với bản ghi, .là một liên kết đến thư mục hiện tại và ..là một liên kết đến thư mục phía trên nó, nhưng tôi chắc chắn bạn đã biết rằng ). Vì phương pháp ẩn tập tin này thực sự đủ tốt trong hầu hết thời gian, tôi cho rằng không ai từng bận tâm đến việc thực hiện ẩn tập tin kiểu Windows.

Ngoài ra còn có một thực tế là việc thực hiện các hành vi khác nhau sẽ tạo ra sự phân mảnh thậm chí còn lớn hơn đối với thế giới * nix, đó là điều cuối cùng mà bất cứ ai cũng muốn.

Có một phương pháp khác để ẩn các tệp không liên quan đến việc đổi tên chúng, nhưng nó chỉ hoạt động đối với các trình quản lý tệp GUI (và nó không phổ biến trong số đó - các Linux chính sử dụng nó, nhưng tôi không nghĩ Finder của OSX, và các trình quản lý tệp Linux thích hợp hơn ít có khả năng hỗ trợ hành vi này): bạn có thể tạo một tệp được gọi .hiddenvà đặt tên tệp bạn muốn ẩn bên trong nó, mỗi tên một dòng. lsvà vỏ quả cầu sẽ không tôn trọng điều này, nhưng nó vẫn có thể hữu ích cho bạn.


Việc che giấu đó không hoạt động trên Unity. Nhưng khi bạn trực tiếp giải quyết tất cả các câu hỏi, tôi sẽ đánh dấu đây là câu trả lời được chấp nhận (mặc dù tôi đã nâng cao cả hai câu trả lời).
JMCF125

3
Trang Wikipedia không còn chứa thông tin về điều này. Tuy nhiên, Rob Pike đã làm việc trên UNIX tại Bell Labs và đã viết một bài ngắn về chủ đề này: plus.google.com/u/0/+RobPikeTheHuman/posts/R58WgWwN9jp
Alexander

14

Các tệp bắt đầu bằng dấu chấm được bỏ qua theo mặc định bởi lệnh "ls", có ít nhiều tác dụng tương tự của các tệp "ẩn" nhưng không giống nhau (các lệnh khác có thể chọn thực hiện tương tự hoặc không). Các tệp bắt đầu bằng dấu chấm không bị "ẩn" vì "ẩn" không phải là một trong các thuộc tính của chúng. Không giống như trong DOS / Windows, "hidden" không phải là một thuộc tính trong Unix. Có nhiều thuộc tính trong Unix ("man chattr" sẽ cho bạn biết tất cả chúng) nhưng ẩn không phải là một trong số chúng.

Lý do tại sao các tập tin dấu chấm bị bỏ qua bởi "ls" thực sự khá buồn cười / ngượng ngùng. Đó không phải là một quyết định thiết kế mà là kết quả của một lỗi phần mềm trong những ngày đầu của Unix . Khi đặc biệt. và .. các mục trong thư mục đã được thêm vào hệ thống tập tin, người ta đã quyết định rằng lệnh ls không nên hiển thị chúng vì chúng đang cản trở chúng. Tuy nhiên, chương trình được viết vội vàng để loại trừ bất kỳ tệp nào có tên bắt đầu bằng a. ký tự, thay vì tên chính xác "." hoặc là "..". Và nó đã tạo ra một tiền lệ đã được theo dõi kể từ đó trong Unix. Thật thú vị, khi những người Unix chuyển sang tạo Kế hoạch 9, họ đã không đặt các tệp chấm vào đó .


Tôi đã thử man chattr, mặc dù tôi nghĩ có lẽ tôi cần một số gói hoặc chương trình cụ thể để làm cho các tệp ẩn khác có thể.
JMCF125

0

Cho dù bạn có thể ẩn tệp hay không và tùy thuộc vào điều kiện nào, tùy thuộc vào hệ thống tệp bạn đang sử dụng và trình điều khiển của nó. Các hệ thống tệp Unix truyền thống không có thuộc tính "ẩn" cho các tệp.

Trình điều khiển hệ thống tệp có thể ẩn bất kỳ tệp nào nó muốn, bằng cách bỏ qua tên của chúng khi nó cung cấp kết quả cho các cuộc gọi hệ thống được sử dụng để nhận danh sách thư mục. Như sergut được mô tả trong câu trả lời của mình, các tệp bắt đầu bằng dấu chấm không thực sự bị ẩn.

(Đây cũng là cách rootkit có thể ẩn các tệp của họ: họ móc vào các cuộc gọi hệ thống tạo ra danh sách thư mục và lọc ra các tệp mà họ muốn ẩn.)

Ví dụ, trong các hệ thống tệp cụm ACFS của Oracle, thư mục <filesystem mountpoint>/.ACFS/thực sự bị ẩn: nó hoàn toàn không được liệt kê, thậm chí không có ls -a. Nhưng nếu bạn biết nó ở đó, bạn có thể truy cập nó tốt.

Nếu bạn đang sử dụng tính năng chụp nhanh của hệ thống tệp ACFS, bạn có thể truy cập mọi ảnh chụp nhanh hệ thống tệp hiện có của hệ thống tệp đó thông qua .ACFSthư mục đó . Nếu nó không bị ẩn, một chương trình sao lưu có thể sẽ sao lưu cả nội dung hiện tại của hệ thống tập tin và nội dung của bất kỳ ảnh chụp nhanh hiện có nào, điều này có thể không mong muốn; thông thường bạn sẽ muốn sao lưu trạng thái hiện tại hoặc trạng thái của một ảnh chụp nhanh cụ thể.

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.