Có phải thực tế xấu cho tên thư mục có chứa dấu chấm (.)? Làm thế nào về tên tập tin với nhiều dấu chấm?


28

Đôi khi nó có ý nghĩa thực tế đối với một tên thư mục có chứa dấu chấm (.). Ví dụ: bạn đang lưu trữ dữ liệu cho một thử nghiệm được thực hiện ở L = 0,5. Vì vậy, thư mục có thể được đặt tên:

experiment_L0.5

Một vấn đề tương tự có thể phát sinh cho tên tập tin. Ví dụ:

file_L0.5.txt

Làm việc trong Ubuntu, đây có phải là thực tế xấu? Nếu chia sẻ các thư mục này với người dùng Windows thì sao?

Cảm ơn!


5
Nếu dấu chấm là ký tự đầu tiên, thư mục sẽ bị ẩn. Ngoài ra, tôi không nghĩ nó quan trọng.
dùng3121023

Câu trả lời:


37

Theo như tôi biết thì không có vấn đề gì với việc đặt tên các thư mục và tập tin với một hoặc nhiều dấu chấm.

Ubuntu thường không sử dụng dấu chấm và ba ký tự (như .txt) để xác định loại tệp. Vì vậy, điều này không có ý nghĩa đặc biệt trong bối cảnh Ubuntu. Điều này rất hữu ích khi chia sẻ tệp với Windows. Ubuntu sử dụng Magic Number trong một vài byte đầu tiên của tệp để xác định loại tệp. Tuy nhiên, Nautilus. bỏ qua các số ma thuật nếu phần mở rộng dấu chấm và ba ký tự có sẵn để xác định loại tệp. Cài đặt này có thể được thay đổi. Xem Buộc nautilus để bỏ qua các tiện ích mở rộng

Trong Ubuntu, bắt đầu một tên tệp hoặc thư mục bằng dấu chấm, chẳng hạn như .experiment_L0.5, làm cho tệp hoặc thư mục bị ẩn. Bạn có thể chuyển đổi hiển thị các tập tin ẩn bằng cách nhấn Ctrl+ Htrong Nautilus. Trong Windows, tên tệp bắt đầu bằng a. không bị ẩn. Vì vậy, nếu bạn chuyển một tập tin ẩn có tên .experiment_L0.5vào hệ thống Windows, nó sẽ hiển thị rõ ràng.

Trong Ubuntu, tên tệp có thể kết thúc bằng dấu chấm vì nó không có ý nghĩa đặc biệt được đặt ở cuối. Tuy nhiên, trong Windows, một dấu chấm phân tách tên tệp và phần mở rộng và tên tệp kết thúc bằng dấu chấm nhưng không được phép mở rộng. Khi tôi cố gắng tạo một tệp như vậy trong Windows, tôi đã nhận được một tệp chỉ có tên, không có dấu chấm, không có phần mở rộng.

Tham khảo: Wiki trên tên tập tin

Hi vọng điêu nay co ich.


4
Chính xác. Nếu bạn chia sẻ tệp với windows, bạn phải tránh :char char, bất hợp pháp trong tên tệp windows, điều này sẽ tạo ra vấn đề ( và nó cũng vậy ). Xem thêm tại đây .
Rmano

Cảm ơn @Rmano. Tôi đã thêm một liên kết đến wiki trong câu trả lời của tôi.
dùng68186

1
Nói về khả năng tương thích, tôi nghĩ rằng một dấu chấm (như fname.) cũng không được phép trong Windows.
Rmano

Cảm ơn một lần nữa @Rmano. Tôi đã chạy một vài thử nghiệm nhanh và thất bại trong việc tạo một tệp có tên test.trong Windows. Tôi sẽ cập nhật câu trả lời của tôi.
dùng68186

1
Để thêm vào nhận xét của Rmano - đây có thể là một vấn đề trên Ubuntu nếu bạn có ổ đĩa Windows được gắn qua VirtualBox. Cố gắng mkdir một tên có dấu chấm bị lỗi với 'Lỗi giao thức'.
bvanlew

11

Câu trả lời ngắn

  • Windows không cho phép các ký tự sau: <>:"/\|?*( nguồn )
  • Nhiều ký tự không được khuyến khích là: dấu cách và dấu chấm .( nguồn )
    • Các công cụ dòng lệnh khó sử dụng hơn khi bạn có khoảng trắng trong tên (khó hơn, không phải là không thể)
    • Dấu chấm được sử dụng trong RegEx (ví dụ: khi bạn muốn sử dụng grep). Một dấu chấm hàng đầu làm cho một tệp bị ẩn theo quy ước trong Linux. Trong Windows, các dấu chấm được sử dụng trong phần mở rộng tệp, được sử dụng để phát hiện loại tệp.
  • Windows cũng sẽ không cho phép tên tập tin CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, và LPT9. ( nguồn )
  • Các ký tự duy nhất không được phép trong các hệ thống tệp Unix mà tôi biết là /và null (byte null, \0).
  • Xem thêm: Giới hạn hệ thống tệp (Tôi không biết Windows nào bạn muốn tương thích).

Câu trả lời dài

Nền tảng kỹ thuật: Hệ thống tập tin

Ubuntu sử dụng ext4hệ thống tập tin. Một hệ thống tệp theo dõi nơi các tệp được lưu trữ trên bộ lưu trữ bên dưới (đĩa hoặc SSD hoặc bất cứ thứ gì), các quyền ở dạng chủ sở hữu / nhóm / người khác có thể đọc / ghi / thực thi, dấu thời gian, tên.

Hệ thống tập tin cấu trúc lưu trữ có sẵn. Khối đầu tiên được gọi là "siêu khối". Khối này được sử dụng để gắn kết một hệ thống tập tin. Theo tôi biết, mọi hệ thống tập tin hiện đại đều phân chia không gian theo khối. Tôi nghĩ (và tôi không chắc lắm về điều đó) rằng hầu hết các hệ thống tệp cũng có kích thước khối cố định, mặc dù kích thước khối có thể được cấu hình khi hệ thống tệp được tạo. ext4 (và cả ext2 và ext3) sử dụng cái gọi là "inodes" cho các tập tin và thư mục. Các nút đó chứa các con trỏ tới các khối khác (cũng có thể là các nút hoặc là "khối dữ liệu"). Và nút "đầu tiên" của tệp chứa tất cả thông tin tôi đã đề cập ở trên.

Một thông tin khác là "loại" của tệp. "Loại" có thể là:

  • tập tin thường xuyên
  • danh mục
  • tập tin thiết bị (khối hoặc thiết bị ký tự)
  • ...

Trong thực tế, bạn cũng có thể mở các thư mục với một trình soạn thảo:

vim /home

Vì thư mục không chứa đường dẫn đầy đủ, nhưng chỉ có tên của nội dung tôi không thấy lý do tại sao các tệp không thể chứa a /. Tôi đoán nó có thể là thuận tiện. (Có ai biết tại sao /không được phép không?)

Tuy nhiên, mọi thứ là khác nhau cho các hệ thống tập tin khác. FAT16 và FAT32 đã sử dụng cái gọi là "bảng phân bổ tệp". Điều này có nghĩa là có một bảng chứa tất cả các tệp được lưu trữ trên tệp của bạn, tại đó "cụm" chúng bắt đầu và tại cụm đó chúng kết thúc dưới dạng một danh sách liên kết đơn.

Điều quan trọng tôi muốn nói với bạn là các ký tự không được phép cũng có thể phụ thuộc vào hệ thống tệp.

Nền tảng kỹ thuật: Các loại tệp

  • Windows sử dụng phần mở rộng tệp để phát hiện các loại tệp
  • Linux sử dụng "Magic Byte" để phát hiện các loại tệp. Magic Byte là một phần của nội dung của tệp và do đó hoàn toàn độc lập với tên. Các byte này là một phần của đặc tả của loại tệp (xem đặc tả png làm ví dụ). Nó cũng sử dụng các phần mở rộng tên tệp cho các tệp có cùng byte ma thuật như .txthoặc .html(cả hai đều là tệp văn bản).

Liên quan


Dự đoán của bạn về cách lưu trữ tên tệp của FAT không hoàn toàn chính xác: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - "FAT" thực tế lưu trữ danh sách các cụm , trong khi các thư mục lưu trữ danh sách tên tệp với con trỏ đến cụm đầu tiên của một tập tin, tương tự như cách bạn mô tả ext4. :) Ngoài ra, .txt.htmlcác tệp thực sự có "giá trị ma thuật" khác nhau - hãy thử đổi tên tệp html thành test.txtvà chạy file test.txt. Nó không liên quan nhiều đến câu hỏi ban đầu, nhưng vẫn vậy :)
Serge

1
Cảm ơn, tôi đã xóa phần sai về FAT. về các giá trị ma thuật và file: filekhông chỉ sử dụng các giá trị ma thuật để xác định loại tệp. Mỗi tệp HTML hợp lệ là một tệp văn bản (theo nghĩa là nó chứa các ký tự có thể đọc được), nhưng không phải mọi tệp văn bản hợp lệ đều là tệp HTML hợp lệ (theo nghĩa là nó xác nhận hợp lệ với trình xác thực W3C). Vì vậy, khá nhiều loại tệp (html, xml, csv, js, php, c, h, cpp, ...) trong thực tế là các tệp văn bản. Chỉ các tệp nhị phân có byte ma thuật nằm trên các vị trí được xác định rõ. Tất cả các tệp tôi đặt tên ở trên có thể có khoảng trắng tùy ý trước nội dung.
Martin Thoma

5

Để hoàn thiện hơn, các tên chỉ bao gồm một dấu chấm .hoặc hai dấu chấm ..là đặc biệt:

  • . đề cập đến thư mục hiện tại
  • .. đề cập đến thư mục cha

Các mục nhập đó được thêm tự động và luôn tồn tại, vì vậy bạn không thể có một tệp có tên .hoặc ...


Điểm tốt. Điều này áp dụng cho cả Windows và Ubuntu.
dùng68186

1

Điều này không quan trọng, không phải trong linux cũng như trong windows.

Đó là một thực tế phổ biến để có thư mục có tên là "chương trình" - để lưu cấu hình và nội dung cho chương trình (xem trong thư mục / etc)


0

Đặt tên tệp rất linh hoạt trong các hệ thống tệp Unix, Linux. Tên tệp duy nhất bạn không thể có là ký tự null hoặc tên chứa /tên trong đó. Nhưng nó chắc chắn sẽ là một thực tiễn tốt để tránh sử dụng các ký tự bị cấm / dành riêng trong các hệ thống khác theo quan điểm về tính di động của tên; giống như bạn không nên sử dụng bất kỳ " * : < > ? \ / |ký tự nào (bị giới hạn bởi NTFS) trong tên tệp của mình nếu bạn muốn truy cập tệp trong hệ thống Windows.

về việc sử dụng một .(dấu chấm) trong tên tệp , tôi nghĩ rằng nó sẽ ổn vì dường như nó không phải là một ký tự "dành riêng" trong bất kỳ hệ thống nào (ngoại trừ OpenVMS, MS-DOS và Windows sử dụng nó trong Tên tệp / thư mục được cho phép nhưng lần xuất hiện cuối cùng sẽ được hiểu là dấu tách phần mở rộng trong VMS, MS-DOS và Windows) như được đề cập trong liên kết Wikipedia sau:

Trong các hệ thống khác, thường được coi là một phần của tên tệp và có thể cho phép nhiều hơn một khoảng thời gian. Trong Unix, giai đoạn hàng đầu có nghĩa là tệp hoặc thư mục thường bị ẩn.

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.