Konvensi penamaan file Unix [ditutup]

61

Saya bertanya-tanya apa konvensi penamaan untuk file di Unix? Saya tidak yakin tentang ini, tetapi saya pikir mungkin ada konvensi penamaan universal yang harus diikuti?

Misalnya, saya ingin memberi nama file katakan: backupdengan part 2danrandom

Haruskah saya melakukannya seperti ini:

backup_part2_random

ATAU

backup-part2-random

ATAU

backup.part2.random

Saya harap pertanyaannya jelas. Pada dasarnya, saya ingin memilih format yang sesuai dengan filosofi Unix.

slm
sumber
4
Sebagai komentar umum tentang "konvensi" ... Saya baru saja membaca semua jawaban sejauh ini, dan saya terkejut betapa anehnya bahwa hampir ada obsesi untuk menggunakan hanya satu case dalam sistem di mana (saya pikir) salah satu kelebihannya adalah kemampuan untuk menggunakan kedua case dengan bermakna ... Apakah desain asli (case-sensitive) desain over) ... hanya merenung
Peter.O
Pendapat saya: tidak ada konvensi. nama file hanyalah string. Pilih gaya favorit Anda.
glenn jackman
1
Itu karena tidak ada yang mau mengingat kapitalisasi perintah, jadi mereka semua menggunakan yang sama.
LtWorf

Jawaban:

58

.digunakan untuk memisahkan ekstensi tipe file, mis foo.txt.

-atau _digunakan untuk memisahkan kata-kata logis, misalnya my-big-file.txtatau kadang-kadang my_big_file.txt. -lebih baik karena Anda tidak perlu menekan tombol Shift (setidaknya dengan keyboard PC Inggris-Inggris standar AS), yang lain lebih suka _karena lebih mirip ruang.

Jadi jika saya mengerti contoh Anda, backup-part2-randomatau backup_part2_randomakan paling dekat dengan konvensi Unix yang normal.


CamelCase biasanya tidak digunakan pada sistem Linux / Unix. Lihat nama file di /bindan /usr/bin. CamelCase adalah pengecualian daripada aturan pada sistem Unix dan Linux.

( NetworkManageradalah satu-satunya contoh yang dapat saya pikirkan tentang penggunaan CamelCase, dan ini ditulis oleh pengembang Mac. Banyak yang mengeluh tentang pilihan nama ini. Di Ubuntu, mereka sebenarnya mengganti nama skrip menjadi network-manager.)

Misalnya, aktif /usr/bindi sistem saya:

$ 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

dan bahkan kemudian, tidak ada file yang dimulai dengan modal menggunakan CamelCase:

$ ls -d [A-Z]*
GET  HEAD  POST  X11  Xvnc  Xvnc4
Mikel
sumber
The .Char juga dapat digunakan untuk memutar hal, tidak hanya untuk menentukan perpanjangan. Sebagai contoh my.log my.log.1 my.log.2.gz.
Depado
Jadi tanda hubung / minus / tanda hubung lebih umum daripada garis bawah.
Hugo
@ Hugo Ya. Di atas menunjukkan minus (409) vs garis bawah (178).
Mikel
Terima kasih. Apakah Anda punya referensi untuk kebaktian ini?
Proletariat
3
+1 untuk referensi. (@Proletariat, lsoutput dari /usr/bin adalah referensi. Ini adalah pertanyaan tentang konvensi. )
Wildcard
35

Jauh lebih penting bahwa konvensi tertentu konsisten. Pilih sebuah gaya, dan tetap menggunakannya.

David Oneill
sumber
19

Pandangan saya tentang konvensi nama file Unix / Linux:

  • Filesystem Unix / Linux tidak secara inheren mendukung gagasan ekstensi. Konsep ekstensi file benar-benar ada sebagai sesuatu yang didukung oleh utilitas seperti cp, ls, atau shell yang Anda gunakan. Saya percaya ini adalah cara di NTFS juga, tapi saya bisa salah.

  • Dapat dieksekusi, termasuk skrip shell, biasanya tidak pernah memiliki jenis ekstensi. Skrip akan memiliki garis hashbang (yaitu #!/bin/bash) yang mengidentifikasi program apa yang harus menafsirkannya.

  • Setiap executable yang panjangnya dua huruf adalah super penting. Jadi jangan beri nama file dua huruf executable Anda. Setiap file di /etcberakhir di tabjuga super penting, seperti fstab, mtab, inittab.
  • Terkadang .dditambahkan ke nama direktori, khususnya di /etc, tetapi ini tidak tersebar luas (PEMBARUAN: https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux )
  • rcsecara luas digunakan untuk skrip konfigurasi atau file, baik prepending (misalnya, rc.local) atau suffixing ( .vimrc)
  • Komunitas Unix / Linux tidak pernah memiliki batasan tiga karakter pada ekstensi dan mengerutkan kening setelah memperpendek ekstensi yang sudah dikenal agar sesuai. Misalnya, jangan gunakan .htmdi akhir file HTML di Unix / Linux, gunakan .html.
  • Dalam satu set file, nama file kadang-kadang ditulis dengan huruf besar, atau dalam huruf besar semua, sehingga muncul di bagian atas daftar direktori. Contoh klasiknya adalah Makefiledalam paket sumber. Hanya lakukan ini untuk hal-hal seperti README.
  • ~digunakan untuk mengidentifikasi file cadangan atau direktori, seperti dalam important_stuff~, atau /etc~. Banyak kerang akan memperluas satu ~ke $HOME.
  • File perpustakaan hampir selalu dimulai dengan lib. Pengecualian adalah zlibdan mungkin beberapa lainnya.
  • Script yang dipanggil oleh inetd kadang-kadang ditandai dengan yang memimpin in., seperti in.tftpd.
  • Akhiran z vmlinuzberarti zip, tetapi saya belum pernah melihat file lain yang dinamai seperti ini.
LawrenceC
sumber
2
Saya sering melihat skrip shell dengan .sh"ekstensi" di atasnya. Saya pribadi merasa agak menjengkelkan, tetapi saya harus mengakui bahwa saya mungkin tidak tahu beberapa alasan yang baik untuk menggunakan .sh.
Dan Moulding
4
Suatu hal yang terlintas dalam pikiran bahwa itu berguna untuk menekankan fakta bahwa itu adalah naskah berbasis teks dan bukan biner.
LawrenceC
1
@DanMoulding, secara pribadi, saya gunakan .shpada skrip yang (1) tidak dimaksudkan untuk dijalankan secara interaktif, tetapi hanya dari skrip / program lain, atau (2) dirancang untuk sumber daripada eksekusi. Untuk yang pertama mereka harus dieksekusi; untuk yang terakhir saya meninggalkan bit executable dan menggunakan baris shebang hanya untuk dokumentasi dari apa fungsi shell ditulis untuk.
Wildcard
3
@Wildcard saya sejak (6 tahun yang lalu) masuk ke kebiasaan yang sama ini. Ekstensi sebenarnya sangat masuk akal untuk mendapatkan bit skrip. Misalnya, dari skrip yang dapat dieksekusi yang ditulis untuk zsh (yaitu #!/bin/zshdi bagian atas) Anda tahu bahwa Anda dapat dengan aman mendapatkan file lain dengan ekstensi .zsh dan pastikan bahwa itu berisi kode zsh yang legal. Jika skrip yang dapat dieksekusi Anda benar-benar mematuhi Bourne Shell (yaitu #!/bin/shdi bagian atas), maka Anda akan tahu bahwa sumber file .zsh akan bermasalah.
Dan Moulding
4
Saya merasa menggunakan ".sh", ".py", ".pl", dll. Nyaman, dan beberapa editor teks (mis., Geany) menggunakannya untuk membuat tebakan pertama pada skema penyorotan sintaksis yang tepat.
bgvaughan
7

Dalam nama file unix hanya string, tidak seperti DOS, di mana nama file terdiri dari nama dan ekstensi. Jadi setiap nama file yang diberikan benar-benar dapat diterima.

Tetapi banyak program masih menggunakan akhiran file dimulai dengan titik untuk membedakan berbagai jenis file, yaitu Apache Web Server menggunakan akhiran untuk mengatur tipe MIME yang benar dalam header jawaban.

gelraen
sumber
5
Walaupun gelraen 100% benar: Unix / Linux tidak peduli dengan ekstensi file, rasa Linux modern sangat peduli sejauh beberapa ekstensi shell memberikan identifikasi khusus (warna atau lainnya) dari jenis file tertentu dan manajer file menyediakan asosiasi otomatis dengan program. Tetapi sama pentingnya bagi pengguna manusia untuk mengetahui file mana yang jenis apa. Untuk itu, nyaman untuk tetap pada skema standar tidak hanya konsisten untuk diri sendiri tetapi dengan orang lain. Dalam hal ini, hal-hal tidak boleh terlalu berbeda dari MS Windows (atau MIME).
asoundmove
Yang mengatakan kadang-kadang beberapa gaya ekstensi yang berbeda dapat cocok dengan tujuan yang sama. Jadi .tar.gz setara dengan .tgz, .tar.bz2 = .tbz, .ps.gz sering disingkat menjadi .ps (membingungkan) dan saya yakin masih banyak lagi.
asoundmove
@asoundmove .ps.gz berarti file .ps terkompresi. Sama seperti .tar.gz berarti file .tar terkompresi.
jonescb
1
@jonescb, ya tentu saja. Maksud saya tentang hal itu membingungkan adalah bahwa ketika saya melihat .ps Saya mengharapkan file yang tidak dikompresi (yang saya harus dapat cat atau kurang), tetapi sering .ps file dikompresi dan sebenarnya harus .ps.gz untuk kejelasan ( karena mereka membutuhkan zcat atau zless untuk melihat kode sumber). Beberapa orang memutuskan untuk hanya suffix file PostScript terkompresi dengan .ps pula karena beberapa pemirsa ps umum sebenarnya tidak keberatan apakah mereka dikompres atau tidak.
asoundmove
6

Dua pemikiran:

  1. Di Naming Variables, Functions, and Filesbagian Standar Pengkodean GNU Anda akan menemukan:

    Silakan gunakan garis bawah untuk memisahkan kata dalam nama, sehingga perintah kata Emacs dapat berguna di dalamnya. Tetap menggunakan huruf kecil;

    Sementara IMO mengatakan "Anda harus menggunakan _karena emacs" tampaknya sedikit tanggal, itu tetap dalam dokumen 'standar' mereka.

  2. Mari kita anggap sejenak bahwa kita semua sepakat bahwa kernel linux adalah proyek all-and-end-all linux, dan konvensi yang digunakan di sana adalah apa yang dapat dianggap sebagai konvensi 'standar'.

    grep-sumber untuk kernel linux Anda akan menemukan yang berikut:

    • 44,6% dari waktu yang digunakan hanya tanda hubung
    • 54,1% dari waktu hanya menggarisbawahi
    • 1.2% dari waktu file menggunakan keduanya.

Menariknya, sumber untuk git berbobot 85% untuk garis putus-putus, 3,8% untuk garis bawah, dan 11,1% untuk keduanya.

Pilihannya jelas, debat. ;)

Pendapat pribadi: Saya menggunakan tanda hubung untuk alasan estetika dan perubahan utama. Jika Anda bekerja dalam tim, pilihlah. Tetapi untuk mengulangi apa yang dikatakan, konsistenlah .

* atau "be_all dan end_all" jika Anda suka

Roy Truelove
sumber
4

Karakter yang tidak boleh Anda gunakan dalam nama file:

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

Pembatas karakter yang harus Anda gunakan untuk membuat nama lebih mudah dibaca:

_ -. :

(Dalam beberapa kasus ":" memiliki makna khusus)

Istvan
sumber
5
Tentu saja, Anda bahkan tidak bisa menggunakan "/" dalam nama file. Segalanya mungkin. Dan jika Anda ingin membuatnya sulit diakses, bahkan bermanfaat ;-)
Jürgen A. Erhard
Daftar ini sebenarnya jauh lebih lama, termasuk karakter kontrol dan non-ASCII. Ya, Anda dapat memiliki backspace sebagai bagian dari nama file * nix.
l0b0
1
Lebih penting lagi, kebanyakan sistem * nix hanya melarang dua karakter spesifik dalam nama file: /pemisah path, dan terminator string \ 0 (ASCII nol).
CVn
4

Untuk menambah apa yang dikatakan orang lain, saya hanya akan mengatakan bahwa sementara huruf beraksen dan banyak karakter khusus legal dalam nama file, mereka dapat menyebabkan masalah dalam salah satu skenario berikut:

  • Anda membagikan sistem file Anda dengan komputer lain, terutama dengan sistem operasi yang berbeda;
  • Anda berbagi file dengan orang lain (dan meskipun email cenderung cukup bagus dengan konversi, terkadang itu tidak berfungsi);
  • Anda menggunakan skrip shell untuk mengotomatisasi beberapa tugas (ruang sangat bermasalah, meskipun ada banyak cara untuk menghadapinya);
  • Anda menggunakan berbagi file dari komputer lain.

...

pindahkan
sumber
3

Menempel nama file alfanumerik. Hindari spasi atau ganti spasi dengan garis bawah (_). Batasi tanda baca pada nama file hingga titik (.), Garis bawah (_), dan tanda hubung (-). Secara umum nama file adalah huruf kecil, tetapi saya menggunakan CamelCase ketika saya memiliki beberapa kata dalam nama file.

Gunakan ekstensi yang menunjukkan jenis file. Program tidak memerlukan ekstensi karena bit eksekusi digunakan untuk menunjukkan program, dan shell mengetahui cara menjalankan berbagai jenis program. Ini umum tetapi tidak diperlukan untuk (.sh) untuk skrip shell, dan (.pl) untuk skrip perl. Ekstensi executable Windows .bat, .com, .scr, dan .exe menunjukkan executable Windows di Unix.

Pilih standar dan patuhi itu. Tapi itu tidak akan merusak jika Anda menghindarinya.

File tersembunyi (atau titik) memiliki nama yang dimulai dengan titik. Ini biasanya tidak muncul dalam daftar direktori. Gunakan 'ls -a' untuk memasukkan file dot dalam daftar.

BillThor
sumber
5
CamelCase adalah pola anti pada Unix. OP bertanya tentang konvensi.
Mikel
2
Itu tidak "buruk" versus "baik". Ini "ini adalah bagaimana biasanya dilakukan". Itu adalah konvensi yang diminta OP. Alasannya? Bisa jadi karena orang Unix tidak suka menekan Shift, bisa jadi karena sistem lama hanya memiliki UPPERCASE, atau karena alasan lain. Saya tidak yakin.
Mikel
@Mikel Saya juga memprogram Java di mana CamelCase adalah sebuah konvensi. Terkadang pola dan konvensi bertentangan.
BillThor
.scr juga merupakan ekstensi yang dapat dieksekusi Windows.
LawrenceC
1
@ultrasawblade Terima kasih, menunjukkan seberapa sering saya skrip Windows. Saya mencoba untuk melewatkan ekstensi yang dapat dieksekusi yang lebih langka seperti cmd, pif, vb *, wsh, dan yang lainnya.
BillThor
2

Satu konvensi adalah menggunakan "_" untuk mengganti spasi sebagai pemisah antara kata-kata. Karakter lain dapat digunakan untuk mengganti spasi, tetapi ada kegunaan konvensional yang sedikit lebih kuat untuk "-" dan "." di pathnames, jadi "_" biasanya lebih disukai.

Spasi legal dalam nama path, tetapi secara konvensional dihindari, karena mereka membutuhkan mengutip nama path ("foo bar") atau melarikan diri dari spasi (foo \ bar). Skrip shell yang ditulis dengan benar akan mengutip variabel yang mungkin menyertakan spasi, terutama pathnames, tetapi gagal melakukannya adalah kekhilafan umum, dan itu banyak mengetik tambahan ketika melakukan perintah satu kali yang dimasukkan pada baris perintah.

Menggunakan "-" untuk memisahkan kelompok angka, seperti pada cap waktu atau nomor seri, adalah konvensi yang biasa digunakan di luar konteks sistem file. Menggunakan "." untuk memisahkan "ekstensi file" yang menunjukkan jenis file sangat umum, dan beberapa alat penting bergantung padanya. Sebagai contoh, sistem manajemen paket di Red Hat Enterprise Linux dan turunannya, RPM, mengharapkan file paket diakhiri dengan ".rpm". Tarball tradisional adalah file tar (".tar") yang telah di-gzip (".gz"), dan diakhiri dengan ".tar.gz".

Jadi menyatukan ini, Anda sering berakhir dengan nama file yang terlihat seperti, "home_backup_2017-07-01.tar.gz"

bgvaughan
sumber
2

gunakan -atau _untuk memberi nama file
_untuk fungsi
.untuk ekstensi

cat << EOF > foo-bar.sh  
foo_bar() {  
echo baz  
}  
EOF  
Akhil J
sumber
0

Saya setuju dengan David Oneill bahwa Anda harus pergi dengan sesuatu.

Tapi itu bagus jika file-file tersebut dapat diurutkan dalam dir yang sama, jadi jangan nomor 0 ..10 tetapi nomor 00 ..10.

Saat menggunakan tanggal dalam nama, buka dengan format tanggal standar seperti ISO8601 .

Dan jangan takut untuk menggunakan banyak karakter untuk memisahkan bagian logis dalam nama. Jika Anda menggunakan _ (itu 3 _), maka Anda dapat menyederhanakan regexps pada nama file nanti.

Jadi contoh Anda bisa jadi seperti ini:

backup_2011-06-19T114012___part002___random

Mudah dibaca dan mudah diurai dengan skrip.

Johan
sumber
0

Kata-kata dalam nama file dapat dipisahkan dengan _atau -sesuai dengan konvensi Unix.

Jika Anda menggunakan -, lebih mudah untuk mengetik, menyelamatkan Anda dari menekan SHIFT. Tetapi karena -memakan sedikit ruang, agak sulit untuk membaca pemisahan kata dibandingkan dengan _. Menggunakan _kata-kata yang terpisah membuatnya terlihat jauh lebih bersih karena _membutuhkan lebih banyak ruang.

Dalam skrip shell dan pemrograman komputer lainnya, _digunakan untuk variabel multi kata, seperti MY_ENVIRONMENT_FILE. Membuat nama file menggunakan _serta terus konsisten: MY_ENVIRONMENT_FILE=~/my_environment_file.

Dalam pengembangan web, -lebih disukai untuk penamaan file. Salah satu alasannya mungkin karena garis bawah pada tautan web dapat menyembunyikan garis bawah dan mungkin menyulitkan jika Anda mengetik tautan web dengan tangan.

Di sebagian besar editor dan juga halaman web, this_long_worddapat sepenuhnya dipilih dengan klik dua kali tetapi tidak this-long-word.

GMaster
sumber
Hmmm, mengapa Anda membaca nama file Anda dalam font lebar variabel? Buka terminal Anda -dan _ambil ruang yang persis sama! :)
Wildcard
Haha, kamu benar. Saya menggunakan font SourceCodePro + Powerline + Awesome Regulared patched. Bahkan dengan font monospace, _terlihat lebih bersih meskipun membutuhkan ruang yang sama dengan -. Seharusnya saya menggunakan kata "rupanya". Mengenai _dan -ketika menggunakan font monospace, perbedaannya dapat dijelaskan dengan gambar analog ini: evsc.net/v8/wp/wp-content/uploads/2010/09/…
GMaster
-1

Pasti ada standar untuk Linux. Jika Anda melihat nama file di sistem Linux apa pun, huruf kecil dengan tanda hubung: / usr / bin / ssh-keygen. Ini ditentukan dalam salah satu dokumen Basis Standar Linux yang tidak dapat saya temukan saat ini. Ini juga ditentukan oleh GNU yang mengatakan untuk menggunakan garis bawah untuk nama variabel dan tanda hubung untuk nama file.

Bill Chatfield
sumber
-2

Untuk menambah apa yang dikatakan orang lain:

1-Meskipun Linux tidak terlalu peduli dengan ekstensi, Windows juga, jadi pastikan file apa pun yang Anda rencanakan untuk diberikan kepada siapa pun memiliki ekstensi yang sesuai.

2-Camel caps tampaknya paling mudah untuk menggunakan skrip, tidak ada karakter khusus yang perlu dikhawatirkan tentang urutan pelarian.

Yitzchak
sumber
5
-1. CamelCase TIDAK digunakan di Linux.
Mikel