Tại sao một số tên tệp / thư mục trên Windows có một dấu chấm ở phía trước chúng?


34

Ví dụ: trong My Documents, có các thư mục sau:

.ssh
.subversion

Đây có phải là một số loại quy ước đặt tên mà tôi không biết?

Câu trả lời:


94

Quy ước đặt tên này xuất phát từ các hệ điều hành giống Unix (như Linux hoặc OS X), trong đó nó có nghĩa là một tệp hoặc thư mục "ẩn". Nó hoạt động ở bất cứ đâu, nhưng nó chính sử dụng là các file cấu hình ẩn trong thư mục chính của bạn (ví dụ ~/.cache/hoặc ~/.plan- chúng thường được gọi là "chấm").

Theo một cách nào đó, Dotfiles có thể được gọi là Unix truyền thống tương đương với thư mục "AppData" trên Windows. (Nhiều chương trình Linux đang được thay đổi để tuân theo đặc tả thư mục cơ sở XDG , chuyển cấu hình của chúng sang ~/.config/và dữ liệu khác sang ~/.cache/& ~/.local/share/- điều này làm cho nó giống với một chút AppData\RoamingAppData\Local.)

Bạn có những thư mục .ssh.subversionthư mục này trên Windows vì bạn đã sử dụng một số chương trình - cụ thể là OpenSSHSubversion - đã được chuyển sang sử dụng API hệ thống Windows thay vì POSIX, nhưng chưa được điều chỉnh cho một số quy ước khác của Windows.

Đôi khi sự thích ứng này bị bỏ qua một cách có chủ ý, để làm cho cuộc sống dễ dàng hơn đối với những người sử dụng các môi trường giống như Unix như Cygwin trên các hệ thống Windows của họ. Ví dụ, Cygwin cài đặt bộ công cụ tiêu chuẩn giống như Unix ls, bỏ qua cờ "ẩn" của Windows và chỉ tôn vinh các .dotfiletên. Ngoài ra, sử dụng cùng một vị trí (ví dụ <home>/.ssh) có thể giúp đồng bộ hóa cấu hình giữa các máy tính Windows và Linux / BSD / OSX dễ dàng hơn.

Ngoài ra: Thông thường các tệp này nằm trong người dùng thư mục chính , ví dụ như trên Linux, hoặc trên Windows 7 trở lên. Rất hiếm khi chúng được đưa vào các thư mục con "Tài liệu" hoặc "Tài liệu của tôi"./home/name/.sshC:\Users\name\.ssh


Như Rob Pike viết trên Google+ , đây là một tính năng tình cờ:

Từ lâu, khi thiết kế hệ thống tệp Unix đã được thực hiện, các mục ... xuất hiện, để giúp điều hướng dễ dàng hơn. Tôi không chắc nhưng tôi tin rằng ..đã viết lại trong Phiên bản 2, khi hệ thống tập tin trở thành phân cấp (nó có cấu trúc rất khác từ rất sớm). Tuy nhiên, khi một người gõ ls, các tệp này xuất hiện, do đó, Ken hoặc Dennis đã thêm một bài kiểm tra đơn giản vào chương trình. Sau đó, nó đã ở trong trình biên dịch chương trình, nhưng mã được đề cập tương đương với mã như thế này:

if (name[0] == '.') continue;

Tuyên bố này ngắn hơn một chút so với những gì nó cần phải có, đó là

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

nhưng này, nó thật dễ dàng

Hai điều kết quả.

Đầu tiên, một tiền lệ xấu đã được thiết lập. Rất nhiều lập trình viên lười biếng khác đã giới thiệu các lỗi bằng cách đơn giản hóa tương tự. Các tập tin thực tế bắt đầu bằng dấu chấm thường được bỏ qua khi chúng cần được tính.

Thứ hai, và tệ hơn nhiều, ý tưởng về một tập tin "ẩn" hoặc "dấu chấm" đã được tạo ra. Kết quả là, nhiều lập trình viên lười biếng hơn bắt đầu thả các tập tin vào thư mục nhà của mọi người. Tôi không có nhiều thứ được cài đặt trên máy tôi đang sử dụng để nhập cái này, nhưng thư mục nhà của tôi có khoảng một trăm tệp chấm và tôi thậm chí không biết hầu hết chúng là gì hoặc liệu chúng có còn cần thiết không . Mỗi đánh giá tên tệp đi qua thư mục nhà của tôi bị làm chậm bởi bùn tích lũy này.


Cảm ơn bạn! Rất kỹ lưỡng. Trong thư mục "C: \ users \ <tên người dùng> \", tôi đã thử sử dụng lệnh "ls" trong Windows PowerShell và một lần nữa trong Cygwin Terminal. PowerShell liệt kê các tệp chấm và ẩn AppData, trong khi Cygwin Terminal thì hoàn toàn ngược lại. Hấp dẫn! Cygwin đang sử dụng quy ước Unix.
Niko Bellic

@NikoBellic: Unix / Cygwin ls-atùy chọn liệt kê tất cả các tệp.
grawity

1
@Ruslan: Ví dụ: VMS hoàn toàn không có tệp ẩn; bạn sẽ kết thúc với những thứ như LOGIN.COMhoặc DECW$MAIL.DAT trong thư mục nhà của bạn . (Tôi không chắc những hệ thống nào khác phổ biến tại thời điểm đó.) Unix vừa mới được tạo ra; nó không có bất kỳ quy ước nào cả.
grawity

2
@grawity MS-DOS 1.0 là một O / S kiểu DEC được thực hiện bởi Digital Research và được mua bởi Microsoft, người đã kinh doanh Unix trước đó. MS-DOS 2.0 và sau đó đã thêm một hệ thống tệp phân cấp và một số quy ước Unix bao gồm .."up dir"; Microsoft thực sự đã quảng cáo những "tính năng Unix tiên tiến" này.
Fred Foo

1
@grawity À đúng rồi, đó là Sản phẩm máy tính Seattle nhân bản CP / M của DRI. Lấy làm tiếc. Nhưng quan điểm của tôi là Microsoft là một cửa hàng Unix trở lại vào đầu những năm 80 và các hệ thống DEC không phải là điểm khởi hành duy nhất. (Unix ban đầu chạy trên phần cứng DEC, nhưng tôi nghĩ bị ảnh hưởng bởi CTSS và Multics nhiều hơn so với hệ điều hành của DEC.)
Fred Foo
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.