it-swarm-vi.com

Quy ước đặt tên tệp Unix

Tôi đã tự hỏi quy ước đặt tên cho các tệp trong Unix là gì? Tôi không chắc chắn về điều này, nhưng tôi nghĩ có lẽ có một quy ước đặt tên phổ quát mà người ta nên tuân theo?

Ví dụ: tôi muốn đặt tên cho một tệp là: backup với part 2random

Tôi có nên làm như thế này không:

backup_part2_random

OR

backup-part2-random

OR

backup.part2.random

Tôi hy vọng câu hỏi là rõ ràng. Về cơ bản, tôi muốn chọn một định dạng phù hợp với triết lý Unix.

67
user4740

. Được sử dụng để phân tách tiện ích mở rộng filetype, ví dụ: foo.txt.

- Hoặc _ Được sử dụng để phân tách các từ logic, ví dụ: my-big-file.txt Hoặc đôi khi my_big_file.txt. - Tốt hơn vì bạn không phải nhấn phím Shift (ít nhất là với bàn phím PC tiếng Anh tiêu chuẩn), những người khác thích _ Vì nó trông giống một khoảng trắng.

Vì vậy, nếu tôi hiểu ví dụ của bạn, backup-part2-random Hoặc backup_part2_random Sẽ gần nhất với quy ước Unix thông thường.


CamelCase thường không được sử dụng trên các hệ thống Linux/Unix. Hãy xem tên tệp trong /bin/usr/bin. CamelCase là ngoại lệ thay vì quy tắc trên các hệ thống Unix và Linux.

(NetworkManager là ví dụ duy nhất tôi có thể nghĩ về việc sử dụng CamelCase và nó được viết bởi một nhà phát triển Mac. Nhiều người đã phàn nàn về lựa chọn tên này. Trên Ubuntu, họ thực sự đã đổi tên tập lệnh thành network-manager.).)

Ví dụ: trên /usr/bin Trên hệ thống của tôi:

$ ls -d [A-Z]* | wc -w    # files starting with a capital
6
$ ls -d *_* | wc -w       # files containing an underscore
178
$ ls -d *-* | wc -w       # files containing a minus/dash
409

và thậm chí sau đó, không có tệp nào bắt đầu bằng vốn sử dụng CamelCase:

$ ls -d [A-Z]*
GET  HEAD  POST  X11  Xvnc  Xvnc4
61
Mikel

Xa quan trọng hơn là một quy ước cụ thể đang được nhất quán. Chọn một phong cách, và gắn bó với nó.

38
David Oneill

Tôi chấp nhận các quy ước tên tệp Unix/Linux:

  • Các hệ thống tập tin Unix/Linux vốn không hỗ trợ khái niệm về một phần mở rộng. Khái niệm về một phần mở rộng tập tin hoàn toàn tồn tại dưới dạng một cái gì đó được hỗ trợ bởi các tiện ích như cp, ls hoặc Shell bạn đang sử dụng. Tôi tin rằng nó cũng theo cách này trên NTFS, nhưng tôi có thể sai.

  • Các tập tin thực thi, bao gồm các tập lệnh Shell, thường không bao giờ có bất kỳ loại tiện ích mở rộng nào. Các tập lệnh sẽ có một dòng hashbang (tức là #!/bin/bash) xác định chương trình nào sẽ diễn giải nó.

  • Bất kỳ thực thi nào dài hai chữ cái là siêu quan trọng. Vì vậy, đừng đặt tên tập tin thực thi hai chữ cái của bạn. Bất kỳ tệp nào trong /etc kết thúc bằng tab cũng cực kỳ quan trọng, chẳng hạn như fstab, mtab, inittab.
  • Đôi khi .d được thêm vào tên thư mục, đặc biệt là trong /etc, nhưng điều này không phổ biến (CẬP NHẬT: https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux )
  • rc được sử dụng rộng rãi cho các tập lệnh hoặc tệp cấu hình, hoặc là trả trước (ví dụ: rc.local) hoặc hậu tố (.vimrc)
  • Cộng đồng Unix/Linux chưa bao giờ có giới hạn ba ký tự đối với các tiện ích mở rộng và cau mày khi rút ngắn các tiện ích mở rộng cũng phải phù hợp. Ví dụ: không sử dụng .htm ở cuối tệp HTML trên Unix/Linux, hãy sử dụng .html.
  • Trong một tập hợp các tệp, tên tệp đôi khi được viết hoa hoặc trong tất cả các chữ hoa, vì vậy nó xuất hiện ở đầu danh sách thư mục. Ví dụ cổ điển là Makefile trong các gói nguồn. Chỉ làm điều này cho những thứ như README.
  • ~ được sử dụng để xác định tệp sao lưu hoặc thư mục, như trong important_stuff~, hoặc là /etc~. Nhiều vỏ sẽ mở rộng một mình ~ đến $HOME.
  • Các tệp thư viện hầu như luôn bắt đầu bằng lib. Ngoại lệ là zlib và có thể là một vài người khác.
  • Các tập lệnh được gọi bởi inetd đôi khi được gắn thẻ hàng đầu in., nhu la in.tftpd.
  • Chữ z kết thúc trong vmlinuz có nghĩa là được nén, nhưng tôi chưa bao giờ thấy bất kỳ tệp nào khác có tên theo cách này.
19
LawrenceC

Trong tên tệp unix chỉ là một chuỗi, không giống như DOS, nơi tên tệp được tạo từ tên và phần mở rộng. Vì vậy, bất kỳ tên tập tin đã cho là hoàn toàn chấp nhận được.

Nhưng nhiều chương trình vẫn sử dụng hậu tố tệp bắt đầu bằng dấu chấm để phân biệt các loại tệp khác nhau, tức là Máy chủ Web Apache sử dụng hậu tố để đặt loại MIME chính xác trong tiêu đề câu trả lời.

7
gelraen

Hai suy nghĩ:

  1. Bên trong Naming Variables, Functions, and Files phần của Tiêu chuẩn mã hóa GN bạn sẽ tìm thấy:

    Vui lòng sử dụng dấu gạch dưới để phân tách các từ trong một tên, để các lệnh Emacs Word có thể hữu ích trong chúng. Dính vào chữ thường;

    Trong khi IMO nói "Bạn nên sử dụng _ bởi vì emacs "có vẻ hơi lạc hậu, tuy nhiên nó vẫn nằm trong tài liệu 'tiêu chuẩn' của họ.

  2. Chúng ta hãy giả sử rằng tất cả chúng ta đều đồng ý rằng hạt nhân linux là tất cả và cuối cùng * của các dự án linux và các quy ước được sử dụng có những quy ước có thể được coi là 'tiêu chuẩn'.

    grep- ing nguồn cho kernel linux bạn sẽ tìm thấy những điều sau đây:

    • 44,6% thời gian chỉ sử dụng dấu gạch ngang
    • 54,1% của thời gian chỉ gạch dưới
    • 1,2% thời gian một tệp sử dụng cả hai.

Thật thú vị, nguồn cho git có trọng lượng tại 85% cho dấu gạch ngang, 3,8% cho dấu gạch dưới và 11,1% cho cả hai.

Sự lựa chọn là rõ ràng, tranh luận về. ;)

Ý kiến ​​cá nhân: Tôi sử dụng dấu gạch ngang vì lý do thẩm mỹ và thay đổi. Nếu bạn đang làm việc trong một nhóm, hãy bỏ phiếu. Nhưng để nhắc lại những gì đã nói, hãy nhất quán.

* hoặc "be_all và end_all" nếu bạn thích

6
Roy Truelove

Các ký tự bạn không nên sử dụng trong tên tệp:

| ; ! @ # $ () <>/\ "'` ~ {} [] = + & ^

Các ký tự phân cách bạn nên sử dụng để làm cho tên dễ đọc hơn:

_ -. :

(Trong một số trường hợp ":" có ý nghĩa đặc biệt)

4
Istvan

Để thêm vào những gì người khác đã nói, tôi chỉ nói rằng trong khi các chữ cái có dấu và nhiều ký tự đặc biệt là hợp pháp trong tên tệp, chúng có thể gây ra sự cố trong bất kỳ tình huống nào sau đây:

  • Bạn chia sẻ hệ thống tập tin của mình với các máy tính khác, đặc biệt là với các hệ điều hành khác nhau;
  • Bạn chia sẻ tệp với người khác (và mặc dù email có xu hướng khá tốt với chuyển đổi, đôi khi nó không hoạt động);
  • Bạn sử dụng tập lệnh Shell để tự động hóa một số tác vụ (không gian đặc biệt có vấn đề, mặc dù có nhiều cách để xử lý chúng);
  • Bạn sử dụng một chia sẻ tập tin từ một máy tính khác.

...

4
asoundmove

Dán tên tệp chữ và số. Tránh không gian hoặc thay thế không gian bằng dấu gạch dưới (_). Giới hạn dấu câu trong tên tệp thành dấu chấm (.), Dấu gạch dưới (_) và dấu gạch nối (-). Nói chung tên tệp là chữ thường, nhưng tôi sử dụng CamelCase khi tôi có nhiều từ trong tên tệp.

Sử dụng các phần mở rộng chỉ ra loại tệp. Các chương trình không cần các phần mở rộng vì bit thực thi được sử dụng để chỉ ra các chương trình và các shell biết cách chạy các chương trình thuộc nhiều loại khác nhau. Nó là phổ biến nhưng không bắt buộc (.sh) cho các tập lệnh Shell và (.pl) cho các tập lệnh Perl. Các phần mở rộng thực thi của Windows .bat, .com, .scr và .exe cho biết các tệp thực thi của Windows trên Unix.

Chọn một tiêu chuẩn và dính vào nó. Nhưng nó sẽ không phá vỡ mọi thứ nếu bạn tránh nó.

Các tệp ẩn (hoặc dấu chấm) có tên bắt đầu bằng dấu chấm. Chúng thường không hiển thị trong danh sách thư mục. Sử dụng 'ls -a' để đưa các tệp chấm vào danh sách.

3
BillThor

sử dụng - hoặc là _ để đặt tên tệp
[.__.] _ cho các chức năng
[.__.] . cho tiện ích mở rộng

cat << EOF > foo-bar.sh  
foo_bar() {  
echo baz  
}  
EOF  
2
Akhil Jalagam

Một quy ước là sử dụng "_" để thay thế khoảng trắng làm dấu phân cách giữa các từ. Các ký tự khác có thể được sử dụng để thay thế khoảng trắng, nhưng có những cách sử dụng thông thường mạnh hơn một chút cho "-" và "." trong tên đường dẫn, vì vậy "_" thường được ưu tiên.

Dấu cách là hợp pháp trong tên đường dẫn, nhưng thường được tránh, vì chúng yêu cầu trích dẫn tên đường dẫn ("thanh foo") hoặc thoát khỏi khoảng trắng (foo\bar). Một tập lệnh Shell được viết đúng sẽ trích dẫn các biến có thể bao gồm khoảng trắng, đặc biệt là tên đường dẫn, nhưng không làm như vậy là một sự giám sát phổ biến và sẽ có rất nhiều thao tác gõ khi thực hiện lệnh một lần được nhập vào dòng lệnh.

Sử dụng "-" để phân tách các cụm số, như trong dấu thời gian hoặc số sê-ri, là một quy ước thường được sử dụng bên ngoài ngữ cảnh của các hệ thống tệp. Sử dụng "." để phân tách "phần mở rộng tệp" cho biết loại tệp rất phổ biến và một số công cụ quan trọng phụ thuộc vào nó. Chẳng hạn, hệ thống quản lý gói trên Red Hat Enterprise Linux và các dẫn xuất của nó, RPM, hy vọng các tệp gói sẽ kết thúc bằng ".rpm". Tarball truyền thống là một tệp tar (".tar") đã được nén (".gz"), và do đó kết thúc bằng ".tar.gz".

Vì vậy, đặt những thứ này lại với nhau, bạn thường kết thúc với tên tệp trông giống như, "home_backup_2017-07-01.tar.gz"

2
bgvaughan

Tôi đồng ý với David Oneill rằng bạn chỉ nên đi với một cái gì đó.

Nhưng thật tuyệt nếu các tệp có thể sắp xếp trong cùng một thư mục, vì vậy không đánh số 0 .. 10 nhưng số 00 .. 10.

Khi sử dụng ngày trong tên, hãy đi với định dạng ngày chuẩn như ISO8601 .

Và đừng ngại sử dụng nhiều ký tự để phân tách các phần logic trong tên. Nếu bạn sử dụng _ (đó là 3 _), thì bạn có thể đơn giản hóa các biểu thức chính trên tên tệp sau này.

Vì vậy, ví dụ của bạn có thể là một cái gì đó như thế này:

backup_2011-06-19T114012___part002___random

Dễ đọc và dễ phân tích cú pháp.

0
Johan

Các từ trong tên tệp có thể được phân tách bằng _ hoặc là - theo quy ước Unix.

Nếu bạn dùng -, việc nhập dễ dàng hơn, giúp bạn tiết kiệm khi nhấn SHIFT. Nhưng kể từ khi - chiếm quá ít không gian, thật khó để đọc các phân tách Word so với _. Sử dụng _ để tách các từ làm cho nó trông gọn gàng hơn kể từ _ chiếm nhiều không gian hơn.

Trong kịch bản Shell và lập trình máy tính khác, _ được sử dụng cho nhiều biến Word, như MY_ENVIRONMENT_FILE. Tạo tên tệp sử dụng _ cũng giữ cho nó nhất quán: MY_ENVIRONMENT_FILE=~/my_environment_file.

Trong phát triển web, - được ưa thích để đặt tên tệp. Một lý do có lẽ là vì phần gạch chân trong các liên kết web có thể ẩn dấu gạch dưới và có thể gây khó khăn nếu bạn gõ liên kết web bằng tay.

Trong hầu hết các biên tập viên cũng như các trang web, this_long_Word có thể được chọn hoàn toàn bằng một cú nhấp chuột nhưng không phải this-long-Word.

0
GMaster