Unix dosya adlandırma kuralı [kapalı]


61

Unix'teki dosyalar için adlandırma kuralının ne olduğunu merak ediyordum. Bundan emin değilim, ama belki de uyması gereken evrensel bir adlandırma kuralı olduğunu düşünüyorum.

Örneğin, bir dosyanın adını söylemek istiyorum: backupile part 2verandom

Böyle yapmalı mıyım?

backup_part2_random

VEYA

backup-part2-random

VEYA

backup.part2.random

Umarım soru açıktır. Temel olarak, Unix felsefesine uyan bir format seçmek istiyorum.


4
Genel bir yorum olarak "konvansiyonlar" dır ... Şimdiye kadarki tüm cevapları okudum, ve sanırım (sanırım) bir sistemde sadece bir davayı kullanırken neredeyse bir saplantı olması ne kadar garip geldi. Güçlü yanlarından biri, her iki vakayı da anlamlı bir şekilde kullanma yeteneğidir ... Özgün tasarım (büyük-küçük harfe duyarlı) aşırı tasarımdı ... sadece musing
Peter.O

benim fikrim: kongre yok. dosya adları sadece karakter dizileridir. favori tarzını seç.
glenn jackman

1
Çünkü hiç kimse komutların büyük harflerini hatırlamak istemez, bu yüzden hepsi aynı şeyi kullanır.
LtWorf

Yanıtlar:


57

.bir fileto uzantısını ayırmak için kullanılır, örn foo.txt.

-ya da _mantıksal kelime, örneğin ayırmak için kullanılır my-big-file.txtveya bazen my_big_file.txt. -Shift tuşuna basmanız gerekmediğinden (en azından standart bir ABD İngilizcesi PC klavyesiyle), diğerleri _daha fazla boşluk gibi göründüğü için daha iyidir .

Öyleyse, örneğinizi anlarsam backup-part2-randomveya backup_part2_randomnormal Unix konvansiyonuna en yakın olsaydım .


CamelCase normal olarak Linux / Unix sistemlerinde kullanılmaz. Dosya isimlerinin göz at /binve /usr/bin. CamelCase, Unix ve Linux sistemlerindeki kurallardan ziyade istisnadır.

( NetworkManagerBunun CamelCase'i kullandığını düşünebildiğim tek örnek ve Mac geliştiricisi tarafından yazılmış. Birçoğu bu isim seçiminden şikayetçi oldu. Ubuntu'da aslında senaryoyu yeniden adlandırdılar network-manager.)

Örneğin, /usr/binsistemimde:

$ 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

ve o zaman bile, büyük harfle başlayan dosyaların hiçbiri CamelCase'i kullanmaz:

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

.Char ayrıca bir uzantısı belirtmek için değil, şeyleri döndürmek için kullanılabilir. Örneğin my.log my.log.1 my.log.2.gz.
Depado

Bu nedenle kısa çizgi / eksi / tire, alt çizgiden daha yaygındır.
Hugo

@Hugo Evet. Yukarıdakiler eksi (409) vs alt çizgi (178) göstermektedir.
Mikel

Teşekkürler. Bu sözleşmelere referansınız var mı?
Proletarya,

3
Referanslar için +1. (@Proletariat, lsçıkış /usr/bin ise . Referans Bu yaklaşık bir sorudur sözleşmeler. )
Joker

35

Belirli bir konvansiyonun tutarlı olması çok daha önemli. Bir stil seç ve ona bağlı kal.


19

Unix / Linux dosya adı sözleşmelerine katılmam:

  • Unix / Linux dosya sistemleri kendiliğinden bir uzantı kavramını desteklemez. Bir şey gibi kamu hizmetleri tarafından desteklenen bir dosya uzantısının kavramı tamamen mevcut cp, lsya kullandığınız kabuk. NTFS'de de böyle olduğuna inanıyorum ama yanılıyor olabilirim.

  • Kabuk komut dosyaları da dahil olmak üzere, yürütülebilir dosyalar genellikle herhangi bir uzantı türüne sahip olmaz. Scriptler #!/bin/bashhangi programın onu yorumlaması gerektiğini tanımlayan hashbang satırına (yani ) sahip olacaktır.

  • İki harf uzunluğunda olan herhangi bir yürütülebilir dosya çok önemlidir. Bu yüzden yürütülebilir dosyalarınızı iki harfli dosya adlarıyla yazmayın. Herhangi bir dosya /etcile biten tabaynı zamanda gibi süper önemlidir fstab, mtab, inittab.
  • Bazen .d, özellikle dizin dizinlerine eklenir /etc, ancak bu yaygın değildir (UPDATE: https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux )
  • rcYapılandırma komut dosyalarında veya dosyalarında, hazır (örneğin rc.local) veya son ek ( .vimrc) için yaygın olarak kullanılır
  • Unix / Linux topluluğu, uzantılara ilişkin üç karakterlik bir limite sahip olmamıştır ve uygun uzantıların iyi bilinmesi kısaltıldıktan sonra fırlatılmıştır. Örneğin, .htmUnix / Linux'ta HTML dosyalarının sonunda kullanmayın .html.
  • Bir dosya kümesinde, bir dosya adı bazen büyük harfle yazılır veya tüm büyük harflerle, bir dizin listesinin başında görünür. Klasik örnek Makefilekaynak paketlerindedir. Bunu sadece bunun gibi şeyler için yap README.
  • ~Bir yedekleme dosyasını veya dizini important_stuff~, veya içinde olduğu gibi tanımlamak için kullanılır /etc~. Birçok kabukları yalnız genişleyecektir ~için $HOME.
  • Kütüphane dosyaları neredeyse her zaman ile başlar lib. İstisna zlibve muhtemelen birkaç diğerleri.
  • İnetd tarafından denir komut dosyaları bazen öncülüğünde etiketlenir in.gibi in.tftpd.
  • Biten z, vmlinuzsıkıştırılmış demektir, ancak bu şekilde adlandırılmış başka bir dosya görmedim.

2
.shOnları üzerinde "uzantısı" olan kabuk komutları sık sık görüyorum . Ben şahsen bunu biraz sinir bozucu buluyorum, ancak kullanmak için bazı iyi sebeplerden habersiz olduğumu itiraf etmeliyim .sh.
Dan Mould

4
Bir şey, bunun bir metin tabanlı komut dosyası olduğunu ve ikili değil olduğunu vurgulamanın faydalı olduğunu akla getiriyor.
LawrenceC

1
@DanMoulding, şahsen, .sh(1) etkileşimli olarak çalıştırılma amaçlı olmayan komut dosyalarında kullanıyorum , ancak yalnızca diğer komut dosyalarından / programlardan veya (2) yürütme yerine kaynak yapmak için tasarlandı. İlki için çalıştırılabilir olmaları gerekir; ikincisi için çalıştırılabilir biti bıraktım ve shebang satırını yalnızca işlevlerin hangi kabuk için yazıldığını belgelemek için kullanıyorum.
Wildcard

3
@Wildcard'dan beri (6 yıl önce) aynı alışkanlığa girdim. Eklenti aslında script bitleri için çok mantıklı geliyor. Örneğin, zsh için yazılan yürütülebilir bir komut dosyasından (yani #!/bin/zshen üstte), .zsh uzantılı başka bir dosyayı güvenle kaynaklayabileceğinizi ve yasal zsh kodu içerdiğinden emin olun. Yürütülebilir komut dosyanız kesinlikle Bourne Shell ile uyumluysa (örneğin #!/bin/shen üstte), bu .zsh dosyasını almanın sorunlu olacağını bilirsiniz.
Dan

4
".Sh", ".py", ".pl", vb. Yöntemlerini kullanmanın uygun olduğunu ve bazı metin editörlerinin (örneğin, Geany) uygun sözdizimi vurgulama şemasında ilk tahminde bulunmak için bunları kullandığını biliyorum.
bgvaughan

7

Unix'te, dosya adı, dosya adının ve uzantının oluşturulduğu DOS'un aksine sadece bir dizedir. Yani verilen dosya adlarından herhangi biri tamamen kabul edilebilir.

Ancak birçok program farklı dosya türlerini ayırt etmek için nokta ile başlayan dosya soneklerini kullanmaktadır, yani Apache Web Sunucusu cevap başlıklarında doğru MIME türünü ayarlamak için sonekleri kullanmaktadır.


5
Gelraen% 100 doğru olsa da: Unix / Linux dosya uzantılarına aldırış etmiyor, ancak modern Linux dosyalarının özellikleri bazı kabuk uzantılarının belirli dosya tiplerinin özel tanımlamasını (renkler ya da başka bir şekilde) sağlaması ve dosya yöneticilerinin otomatik ilişkilendirmeler sağlaması nedeniyle programları ile. Fakat insan kullanıcısı için hangi dosyanın hangi tip olduğunu bilmesi önemlidir. Bu amaçla, yalnızca kendiniz için değil başkalarıyla tutarlı bir standart şemaya bağlı kalmanız uygundur. Bu bakımdan, işler MS Windows (veya MIME) 'den aşırı farklı olmamalıdır.
asoundmove

Bu bazen birkaç farklı uzatma stilinin aynı amaç ile eşleşebileceğini söyledi. Bu nedenle .tar.gz, .tgz, .tar.bz2 = .tbz'ye eşittir, .ps.gz, genellikle .ps (kafa karıştırıcı) olarak kısaltılır ve daha pek çok şeyin olduğundan eminim.
asoundmove

@ asoundmove .ps.gz, sıkıştırılmış bir .ps dosyası olduğu anlamına gelir. Tıpkı .tar.gz gibi sıkıştırılmış .tar dosyası anlamına gelir.
jonescb

1
jonescb, tabii ki evet. Kafamın karıştığıyla ilgili olarak, .ps gördüğümde sıkıştırılmamış bir dosya beklemem gerekiyor (ki bunu daha az ya da daha az yapmalıyım), ancak genellikle .ps dosyalarının sıkıştırılmış olması ve aslında netlik için .ps.gz olması gerektiği ( kaynak kodu görüntüleme için zcat veya zless gerektirdikleri için). Bazı insanlar zaten sadece sıkıştırılmış PostScript dosyalarına .ps eklemeye karar verdiler, çünkü bazı genel ps görüntüleyicileri aslında sıkıştırılmış olup olmadıklarına aldırış etmiyorlar.
asoundmove

6

İki düşünce:

  1. In Naming Variables, Functions, and Filesbölümünde GNU Kodlama Standartları şunları bulacaksınız:

    Lütfen bir isimdeki sözcükleri ayırmak için alt çizgi kullanın, böylece Emacs sözcük komutları kendi içinde yararlı olabilir. Küçük harfe sopa;

    IMO " _Emacs kullanmanız gerekir" derken biraz tarihli görünmekle birlikte, yine de 'standartlar' belgesinde yer almaktadır.

  2. Diyelim ki bir an için hepimiz linux çekirdeğinin linux projelerinin tümü ve nihayetinde * olduğu ve orada kullanılan sözleşmelerin “standart” sözleşme olarak kabul edilebilecek şeyler olduğu konusunda hemfikir olduğumuzu varsayalım.

    greplinux çekirdeği için -ing kaynağı aşağıdakileri bulacaksınız:

    • Zamanın % 44.6'sı sadece kısa çizgi kullanılır
    • Zamanın % 54.1'i sadece altını çiziyor
    • Bir dosyanın her ikisini de kullandığı zamanın % 1.2'si .

İlginç bir şekilde, Git kaynak ağırlığında % 85 çizgilerin, % 3.8 alt çizgi ve % 11.1 hem de.

Seçim açık, tartışılacak. ;)

Kişisel görüş: Estetik ve vardiya anahtar nedenlerden dolayı çizgi kullanın. Eğer bir takım üzerinde çalışıyorsanız, oy kullanın. Ancak söylenenleri yinelemek için tutarlı olun .

* veya "be_all ve end_all"


4

Dosya adlarında kullanmamanız gereken karakterler:

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

İsimlerin okunmasını kolaylaştırmak için kullanmanız gereken karakter sınırlayıcıları:

_ -. :

(Bazı durumlarda ":" olsa özel bir anlamı vardır)


5
Tabii ki, can not bile Dosya adlarında "/" kullanın. Her şey mümkün. Ve erişimi zorlaştırmak istiyorsanız, hatta yararlı olsa da ;-)
Jürgen A. Erhard

Liste, kontrol ve ASCII olmayan karakterler de dahil olmak üzere aslında çok daha uzun. Evet, * nix dosya adının bir parçası olarak bir geri alma hakkınız olabilir.
lbb0

1
Dahası, çoğu * nix sistemi sadece dosya isimlerindeki iki özel karaktere izin vermez: /yol ayırıcı ve \ 0 (ASCII zero) string terminator.
CVn

4

Başkalarının söylediklerini eklemek için, sadece aksanlı harfler ve birçok özel karakterin dosya adlarında yasal olmasına rağmen, aşağıdaki senaryoların herhangi birinde sorunlara yol açabileceğini söyleyebilirim:

  • Dosya sisteminizi diğer bilgisayarlarla, özellikle de farklı işletim sistemleriyle paylaşırsınız;
  • Dosyaları başkalarıyla paylaşıyorsunuz (ve e-posta dönüşümlerde oldukça iyi olma eğilimindeyse de bazen işe yaramıyor);
  • Bazı görevleri otomatikleştirmek için kabuk komut dosyaları kullanırsınız (boşluklar özellikle sorunludur, ancak bunlarla başa çıkmak için birçok yol vardır);
  • Başka bir bilgisayardan dosya paylaşımı kullanıyorsunuz.

...


3

Alfanümerik dosya adlarına yapış. Boşluklardan kaçının veya alt çizgi içeren boşlukları değiştirin (_). Dosya adlarında noktalama işaretlerini nokta (.), Alt çizgi (_) ve kısa çizgi (-) ile sınırlayın. Genellikle dosya isimleri küçük harftir, fakat dosya isminde birden fazla kelime olduğunda CamelCase kullanıyorum.

Dosya türünü gösteren uzantıları kullanın. Programları göstermek için yürütme biti kullanıldığından ve kabukları çeşitli türdeki programların nasıl çalıştırılacağını bildiğinden programların uzantılara ihtiyacı yoktur. Yaygındır ancak kabuk komut dosyaları için (.sh) ve perl komut dosyaları için (.pl) gerekli değildir. Windows çalıştırılabilir uzantıları .bat, .com, .scr ve .exe, Unix'te Windows çalıştırılabilirlerini gösterir.

Bir standart seçin ve ona sadık kalın. Ama kaçınırsan işleri bozmaz.

Gizli (veya nokta) dosyaların noktadan başlayarak adları vardır. Bunlar normalde dizin listelerinde görünmez. Nokta dosyalarını listeye dahil etmek için 'ls -a' kullanın.


5
CamelCase, Unix'teki bir anti paterndir. OP, sözleşmeler hakkında soru soruyordu.
Mikel

2
"Kötü" ve "iyi" değil. "Genellikle böyle yapılır". OP'nin istediği bir kongre . Sebep? Unix insanların Shift tuşuna basmayı sevmemesinden, eski sistemler sadece UPPERCASE'e sahip olduğundan veya başka bir nedenden dolayı olabilir. Emin değilim.
Mikel

@Mikel Ayrıca CamelCase'in bir kongre olduğu Java'yı da programlarım. Bazen modeller ve sözleşmeler çatışır.
BillThor

.scr ayrıca bir Windows çalıştırılabilir uzantısıdır.
LawrenceC

1
@ultrasawblade Teşekkürler, ne sıklıkta Windows komut dosyası yazdığımı gösterir. Cmd, pif, vb *, wsh ve diğerleri gibi daha nadir çalıştırılabilir uzantıları atlamaya çalıştım.
BillThor

2

Bir kural, kelimeler arasındaki boşlukları değiştirmek için boşlukları değiştirmek için "_" kullanmaktır. Boşlukları değiştirmek için başka karakterler de kullanılabilir, ancak "-" ve "için biraz daha güçlü geleneksel kullanımlar vardır. yollarda, "_" genellikle tercih edilir.

Pathn isimlerinde boşluklar yasaldır, fakat geleneksel yollardan kaçınılmaktadır, çünkü bunlar yol adından ("foo bar") alıntı yapmak veya boşluktan kaçmak (foo \ bar) gerektirir. Düzgün yazılmış bir kabuk betiği, boşlukları, özellikle yol adlarını içerebilecek değişkenleri belirtir, ancak bunu başaramamak ortak bir gözetimdir ve komut satırına girilen bir defalık bir komut verirken çok fazladan yazarak olur.

Sayı kümelerini veya seri numaralarında olduğu gibi, sayı kümelerini ayırmak için "-" kullanmak, dosya sistemleri bağlamı dışında sıkça kullanılan bir kuraldır. "." Kullanarak dosya türünün çok yaygın olduğunu belirten "dosya uzantılarını" ayırmak ve bazı önemli araçlar buna bağlıdır. Örneğin, Red Hat Enterprise Linux üzerindeki paket yönetim sistemi ve türevleri RPM, paket dosyalarının ".rpm" ile bitmesini bekliyor. Geleneksel tarball, gziplenmiş (".gz") bir tar dosyasıdır (".tar") ve böylece ".tar.gz" ile biter.

Bu yüzden, bunları bir araya koyarak, genellikle, "home_backup_2017-07-01.tar.gz" gibi görünen dosya isimleri ile karşılaşırsınız.


2

kullanmak -veya _dosyaları adlandırmak için
_fonksiyonlar için
.uzantıları için

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

0

David Oneill ile aynı fikirdeyim.

Ancak, dosyalar aynı dizinde sıralanabilirse, 0: 10 saymaz, 00: 10 sayılmaz.

İsimlerdeki tarihleri ​​kullanırken, ISO8601 gibi standart bir tarih formatıyla gidin .

Ve addaki mantıksal parçaları ayırmak için birden fazla karakter kullanmaktan korkmayın. Eğer kullanırsanız _ o zaman daha sonra dosya adları üzerinde İfadelerinin kolaylaştırabilirsiniz (yani _ 3 idi).

Böylece, örneğiniz şöyle bir şey olabilir:

backup_2011-06-19T114012___part002___random

Komut dosyaları ile okunması kolay ve ayrıştırılması kolaydır.


0

Dosya adındaki kelimeler, Unix kurallarına göre _veya ile -ayrılabilir.

Eğer kullanırsanız -, bu, yazmak daha kolay olur SHIFT tuşuna basarak kurtarır. Ancak -çok az yer kapladığından, sözcük ayrımlarını okumakla karşılaştırıldığında biraz zor _. Kullanılması _kelimeleri ayırmak için çünkü daha temiz görünmesini sağlar _daha fazla yer kaplar.

Kabuk komut dosyalarında ve diğer bilgisayar programlarında, _gibi çok kelimeli değişkenler için kullanılır MY_ENVIRONMENT_FILE. Dosya adları kullanmak yapma _yanı tutarlı tutar: MY_ENVIRONMENT_FILE=~/my_environment_file.

Web geliştirmede -dosya isimlendirmede tercih edilir. Bunun bir nedeni, muhtemelen web bağlantılarındaki alt çizginin alt çizgileri gizleyebilmesi ve web bağlantısını elle yazarken zorlaştırabilmesidir.

Çoğu editörde ve web sayfalarında, this_long_wordçift ​​tıklamayla tam olarak seçilebilir, ancak seçilemez this-long-word.


Hmmm, neden dosya isminizi değişken genişlikte bir fontta okuyorsunuz? Senin terminali aç ve -ve _sadece tam olarak aynı yer kaplar! :)
Joker

Haha, haklısın. SourceCodePro + Powerline + Awesome Düzenli yamalı yazı tipini kullanıyorum. Tek boşluklu yazı tipleriyle _bile, aynı alanı kullanmasına rağmen daha temiz görünüyor -. "Görünüşe göre" kelimesini kullanmalıydım. İlgili _ve -tek aralıklı yazı tipleri kullanıldığında, fark iyisi bu analojik resimle açıklanabilir: evsc.net/v8/wp/wp-content/uploads/2010/09/...
Gmaster

-1

Linux için kesinlikle bir standart var. Herhangi bir Linux sistemindeki dosya adlarına bakarsanız, küçük çizgilerle gösterilir: / usr / bin / ssh-keygen. Bu, şu anda bulamadığım Linux Standartları Tabanı dokümanlarından birinde belirtilmiştir. Ayrıca değişken isimleri için alt çizgi kullandığını söyleyen GNU tarafından da belirtilmiştir ve dosya isimleri için kısa çizgiler kullanılmalıdır.


-2

Diğerlerinin söylediklerini eklemek için:

1-Linux, uzantıları çok fazla önemsemese de, Windows, bu nedenle, herhangi birine vermeyi planladığınız herhangi bir dosyanın uygun uzantıya sahip olduğundan emin olun.

2-Deve başlıkları, kaçış dizileri hakkında endişelenecek özel karakterleri olmayan senaryoları kullanmak için en kolay gibi görünmektedir.


5
-1. CamelCase Linux'ta kullanılmaz.
Mikel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.