Konwencja nazewnictwa plików uniksowych [zamknięte]


61

Zastanawiałem się, jaka jest konwencja nazewnictwa plików w Uniksie? Nie jestem tego pewien, ale myślę, że może istnieje uniwersalna konwencja nazewnictwa, której należy przestrzegać?

Na przykład chcę nazwać plik powiedz: za backuppomocą part 2irandom

Czy powinienem to zrobić w ten sposób:

backup_part2_random

LUB

backup-part2-random

LUB

backup.part2.random

Mam nadzieję, że pytanie jest jasne. Zasadniczo chcę wybrać format zgodny z filozofią uniksową.


4
Jako ogólny komentarz do „konwencji” ... Właśnie przeczytałem wszystkie dotychczasowe odpowiedzi i uderzyło mnie, jak dziwne jest to, że jest prawie nieprzyzwoite stosowanie tylko jednego przypadku w systemie, w którym (tak myślę) jedną z jego mocnych stron jest umiejętność znacznego wykorzystania obu przypadków ... Czy oryginalny projekt (z rozróżnieniem wielkich i małych liter) był ponad projektowy ... ... po prostu się zastanawiał
Peter.O

moja opinia: nie ma konwencji. nazwy plików to tylko ciągi znaków. wybierz swój ulubiony styl.
glenn jackman

1
Dzieje się tak, ponieważ nikt nie chce pamiętać wielkich liter poleceń, więc wszystkie używają tego samego.
LtWorf,

Odpowiedzi:


57

.służy do oddzielenia rozszerzenia typu pliku, np foo.txt.

-lub _służy do oddzielania logicznych słów, np. my-big-file.txtlub czasami my_big_file.txt. -jest lepszy, ponieważ nie trzeba naciskać klawisza Shift (przynajmniej ze standardową klawiaturą PC w języku angielskim), inni wolą, _ponieważ bardziej przypomina spację.

Więc jeśli rozumiem twój przykład backup-part2-randomlub backup_part2_randombyłby najbliższy normalnej konwencji uniksowej.


CamelCase zwykle nie jest używany w systemach Linux / Unix. Spójrz na nazwy plików w /bini /usr/bin. CamelCase jest wyjątkiem, a nie regułą w systemach Unix i Linux.

( NetworkManagerjest to jedyny przykład, w którym myślę o tym, że używa CamelCase i został napisany przez programistę Mac. Wielu narzekało na ten wybór nazwy. W Ubuntu zmienili nazwę skryptu na network-manager.)

Na przykład /usr/binw moim systemie:

$ 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

i nawet wtedy żaden plik zaczynający się od kapitału nie używa CamelCase:

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

Znak .może być również używany do obracania rzeczy, a nie tylko do określania rozszerzenia. Na przykład my.log my.log.1 my.log.2.gz.
Depado,

Więc łącznik / minus / myślnik jest bardziej powszechny niż podkreślenie.
Hugo,

@Hugo Tak. Powyższe pokazuje minus (409) vs podkreślenie (178).
Mikel

Dzięki. Czy masz jakieś odniesienia do tych konwencji?
Proletariat

3
+1 za referencje. (@Proletariat The lswyjściowy /usr/bin jest . Odniesienie To jest pytanie o konwencje. )
Wildcard

35

O wiele ważniejsze jest to, aby konkretna konwencja była spójna. Wybierz styl i trzymaj się go.


19

Moje podejście do konwencji nazw plików w systemach Unix / Linux:

  • Systemy plików Unix / Linux z natury nie obsługują pojęcia rozszerzenia. Koncepcja rozszerzenia pliku istnieje jako coś całkowicie wspierany przez narzędzia takie jak cp, lslub powłoki używasz. Uważam, że tak też jest w NTFS, ale mogę się mylić.

  • Pliki wykonywalne, w tym skrypty powłoki, zwykle nigdy nie mają żadnego rodzaju rozszerzenia. Skrypty będą miały linię hashbanga (tj. #!/bin/bash), Która identyfikuje program, który powinien ją interpretować.

  • Każdy plik wykonywalny o długości dwóch liter jest bardzo ważny. Więc nie nazywaj swoich plików wykonywalnych dwuliterowymi nazwami plików. Każdy plik w /etckończącym się w tabto również bardzo ważne, takie jak fstab, mtab, inittab.
  • Czasami .djest dołączany do nazw katalogów, szczególnie w /etc, ale nie jest to powszechne (AKTUALIZACJA: https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux )
  • rcjest szeroko stosowany w skryptach konfiguracyjnych lub plikach, poprzedzających (np. rc.local) lub sufiksach ( .vimrc)
  • Społeczność Unix / Linux nigdy nie miała limitu trzech znaków na rozszerzenia i marszczy brwi, skracając dobrze znane rozszerzenia, aby pasowały. Na przykład nie używaj .htmna końcu plików HTML w systemach Unix / Linux, użyj .html.
  • W zestawie plików nazwa pliku jest czasem pisana wielkimi literami lub wielkimi literami, więc pojawia się na początku listy katalogów. Klasyczny przykład znajduje się Makefilew pakietach źródłowych. Zrób to tylko dla takich rzeczy README.
  • ~służy do identyfikacji pliku kopii zapasowej lub katalogu, jak w important_stuff~, lub /etc~. Wiele muszle poszerzy lone ~do $HOME.
  • Pliki bibliotek prawie zawsze zaczynają się od lib. Wyjątkiem jest zlibi prawdopodobnie kilka innych.
  • Skrypty wywoływane przez inetd czasami są oznaczone wiodącym znakiem in., takim jak in.tftpd.
  • Końcowe z vmlinuzoznacza zip, ale nigdy nie widziałem żadnego innego pliku o takiej nazwie.

2
Często widzę skrypty powłoki z .sh„rozszerzeniem”. Osobiście uważam to za nieco irytujące, ale muszę przyznać, że mogę nie być świadomy jakiegoś dobrego powodu, aby korzystać z .sh.
Dan Molding

4
Przychodzi mi na myśl, że warto podkreślić fakt, że jest to skrypt tekstowy, a nie binarny.
LawrenceC

1
@ DanMoulding, osobiście, używam .shna skryptach, które (1) nie są przeznaczone do uruchamiania interaktywnego, ale tylko z innych skryptów / programów lub (2) są przeznaczone raczej do pozyskiwania niż wykonywania. W przypadku tych pierwszych muszą być one wykonalne; dla tego ostatniego zostawiam bit wykonywalny wyłączony i używam linii shebang tylko do dokumentacji, dla jakiej powłoki są napisane funkcje.
Wildcard

3
@Wildcard Mam (6 lat temu) ten sam nawyk. To rozszerzenie ma sens w przypadku pozyskiwania bitów skryptu. Na przykład ze skryptu wykonywalnego napisanego dla zsh (tj #!/bin/zsh. U góry) wiesz, że możesz bezpiecznie pobrać inny plik z rozszerzeniem .zsh i upewnij się, że zawiera on legalny kod zsh. Jeśli Twój skrypt wykonywalny jest ściśle zgodny z Bourne Shell (tj #!/bin/sh. U góry), będziesz wiedział, że pozyskanie pliku .zsh będzie problematyczne.
Dan Molding

4
Uważam, że używanie „.sh”, „.py”, „.pl” itd. Jest wygodne, a niektóre edytory tekstu (np. Geany) używają ich do pierwszego odgadnięcia właściwego schematu podświetlania składni.
bgvaughan

7

W Uniksie nazwa pliku jest po prostu łańcuchem, w przeciwieństwie do DOS, gdzie nazwa pliku składa się z nazwy i rozszerzenia. Każda z nazw plików jest więc całkowicie akceptowalna.

Jednak wiele programów nadal używa sufiksów plików zaczynających się od kropki, aby rozróżniać różne typy plików, tzn. Serwer Apache Web używa sufiksów, aby ustawić poprawny typ MIME w nagłówkach odpowiedzi.


5
Podczas gdy Gelraen jest w 100% poprawny: Unix / Linux jako taki nie dba o rozszerzenia plików, nowoczesne smaki Linuksa dbają o to, o ile niektóre rozszerzenia powłoki zapewniają specjalną identyfikację (kolory lub inne) niektórych typów plików, a menedżery plików zapewniają automatyczne skojarzenia z programami. Ale równie ważne jest, aby użytkownik wiedział, który plik jest jakiego typu. W tym celu wygodnie jest trzymać się standardowego schematu nie tylko spójnego dla siebie, ale z innymi. Pod tym względem rzeczy nie powinny się zbytnio różnić od MS Windows (lub MIME).
asoundmove

To powiedziawszy, czasami kilka różnych stylów rozszerzeń może pasować do tego samego celu. Zatem .tar.gz jest równoważne z .tgz, .tar.bz2 = .tbz, .ps.gz jest często skracany jako .ps (myląco) i jestem pewien, że jest ich o wiele więcej.
asoundmove

@asoundmove .ps.gz oznacza, że ​​jest to skompresowany plik .ps. Tak jak .tar.gz oznacza skompresowany plik .tar.
jonescb

1
@jonescb, tak, oczywiście. Chodzi mi o to, że jest to mylące, ponieważ kiedy widzę .ps, spodziewam się nieskompresowanego pliku (który powinienem być w stanie skatować lub mniej), ale często pliki .ps są skompresowane i powinny być w rzeczywistości .ps.gz dla przejrzystości ( ponieważ do przeglądania kodu źródłowego wymagają Zcat lub Zless). Niektóre osoby postanowiły po prostu sufiksować skompresowane pliki PostScript za pomocą .ps, ponieważ niektóre popularne przeglądarki PS nie mają nic przeciwko temu, czy są one skompresowane, czy nie.
asoundmove

6

Dwie myśli:

  1. W Naming Variables, Functions, and Filessekcji Standardów kodowania GNU znajdziesz:

    Proszę używać podkreślników do oddzielania słów w nazwie, aby komendy słowne Emacsa mogły być w nich przydatne. Trzymaj się małych liter;

    Chociaż IMO mówi „Powinieneś używać, _ponieważ emacs” wydaje się nieco przestarzały, jest to jednak zawarte w ich „standardowym” dokumencie.

  2. Przypuśćmy na chwilę, że wszyscy się zgadzamy, że jądro Linuksa jest kompletnym * projektem linux i że stosowane tam konwencje są czymś, co można by uznać za „standardową” konwencję.

    grep-ing źródło dla jądra linuxa znajdziesz następujące:

    • 44,6% czasu używane jest tylko myślnik
    • 54,1% czasu tylko podkreśla
    • 1,2% czasu plik używa obu.

Co ciekawe, źródło git waży 85% dla kresek, 3,8% dla podkreślników i 11,1% dla obu.

Wybór jest jasny, debata zakończona. ;)

Osobista opinia: używam myślników ze względów estetycznych i zmiany biegów. Jeśli pracujesz w zespole, głosuj. Ale aby powtórzyć to, co zostało powiedziane, bądź konsekwentny .

* lub „be_all i end_all”, jeśli chcesz


4

Znaki, których nie powinieneś używać w nazwach plików:

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

Ograniczniki znaków, których należy używać, aby ułatwić czytanie nazw:

_ -. :

(W niektórych przypadkach „:” ma jednak specjalne znaczenie)


5
Oczywiście nie można nawet używać „/” w nazwach plików. Wszystko inne jest możliwe. A jeśli chcesz utrudnić dostęp, nawet przydatny ;-)
Jürgen A. Erhard

Lista jest w rzeczywistości znacznie dłuższa, włączając znaki kontrolne i znaki spoza ASCII. Tak, możesz mieć backspace jako część nazwy pliku * nix.
l0b0

1
Co więcej, większość systemów * nix nie zezwala tylko na dwa konkretne znaki w nazwach plików: /separator ścieżki i terminator łańcucha \ 0 (ASCII zero).
CVn

4

Aby dodać do tego, co powiedzieli inni, powiem tylko, że chociaż litery akcentowane i wiele znaków specjalnych jest legalnych w nazwach plików, mogą powodować problemy w jednym z następujących scenariuszy:

  • Współdzielisz swój system plików z innymi komputerami, szczególnie z różnymi systemami operacyjnymi;
  • Udostępniasz pliki innym osobom (i chociaż e-maile zwykle są całkiem dobre w przypadku konwersji, czasem po prostu nie działają);
  • Używasz skryptów powłoki do automatyzacji niektórych zadań (spacje są szczególnie problematyczne, chociaż istnieje wiele sposobów radzenia sobie z nimi);
  • Korzystasz z udziału plików z innego komputera.

...


3

Trzymaj się alfanumerycznych nazw plików. Unikaj spacji lub zamień spacje na podkreślniki (_). Ogranicz znaki interpunkcyjne w nazwach plików do kropek (.), Znaków podkreślenia (_) i łączników (-). Ogólnie nazwy plików są pisane małymi literami, ale używam CamelCase, gdy mam wiele słów w nazwie pliku.

Używaj rozszerzeń wskazujących typ pliku. Programy nie potrzebują rozszerzeń, ponieważ bit wykonania służy do wskazywania programów, a powłoki wiedzą, jak uruchamiać programy różnych typów. Jest to powszechne, ale nie wymagane (.sh) dla skryptów powłoki i (.pl) dla skryptów perla. Rozszerzenia plików wykonywalnych Windows .bat, .com, .scr i .exe wskazują pliki wykonywalne Windows w systemie Unix.

Wybierz standard i trzymaj się go. Ale to niczego nie zepsuje, jeśli tego unikniesz.

Pliki ukryte (lub kropkowe) mają nazwy zaczynające się od kropki. Te zwykle nie pojawiają się na listach katalogów. Użyj „ls -a”, aby dołączyć pliki kropek do listy.


5
CamelCase to anty-wzór na Uniksie. OP pytał o konwencje.
Mikel

2
To nie jest „złe” kontra „dobre”. To „tak się zwykle robi”. To konwencja, o którą prosił PO. Powód? Może to być spowodowane tym, że ludzie uniksowi nie lubią naciskać klawisza Shift, może to być spowodowane tym, że stare systemy miały tylko WIELKIE LITERY lub z innego powodu. Nie jestem pewny.
Mikel

@Mikel Programuję również Javę, w której CamelCase jest konwencją. Czasami sprzeczne są wzorce i konwencje.
BillThor

.scr to także rozszerzenie wykonywalne systemu Windows.
LawrenceC,

1
@ultrasawblade Dzięki, pokazuje, jak często piszę skrypty do systemu Windows. Próbowałem pominąć rzadsze rozszerzenia wykonywalne, takie jak cmd, pif, vb *, wsh i inne.
BillThor,

2

Jedną konwencją jest użycie „_” do zamiany spacji jako separatorów między słowami. Inne znaki mogą być używane do zamiany spacji, ale istnieją nieco silniejsze konwencjonalne zastosowania dla „-” i „.” w ścieżkach, więc zwykle „_” jest preferowane.

Spacje są dozwolone w nazwach ścieżek, ale umownie się ich unika, ponieważ wymagają cytowania nazwy ścieżki („pasek foo”) lub ucieczki od spacji (foo \ bar). Prawidłowo napisany skrypt powłoki będzie cytował zmienne, które mogą zawierać spacje, szczególnie ścieżki, ale ich brak jest powszechnym niedopatrzeniem i wymaga dodatkowego wpisywania przy wykonywaniu jednorazowego polecenia wpisanego w wierszu poleceń.

Użycie „-” do oddzielenia klastrów liczb, takich jak znaczniki czasu lub numery seryjne, jest konwencją powszechnie stosowaną poza kontekstem systemów plików. Za pomocą "." aby oddzielić „rozszerzenia plików” wskazujące, że typ pliku jest bardzo powszechny, a niektóre ważne narzędzia od niego zależą. Na przykład system zarządzania pakietami w Red Hat Enterprise Linux i jego pochodnych RPM oczekuje, że pliki pakietów zakończą się na „.rpm”. Tradycyjny plik tar jest plikiem tar („.tar”), który został spakowany gzip („.gz”), a więc kończy się na „.tar.gz”.

Zestawiając je razem, często kończy się na nazwach plików, które wyglądają jak „home_backup_2017-07-01.tar.gz”


2

użyj -lub _do nazewnictwa plików
_funkcji
.dla rozszerzeń

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

0

Zgadzam się z Davidem Oneillem, że powinieneś z czymś pójść.

Ale dobrze, jeśli pliki można sortować w tym samym katalogu, więc nie numer 0 ..10, ale numer 00 ..10.

Używając dat w nazwach, korzystaj ze standardowego formatu daty, takiego jak ISO8601 .

I nie bój się używać wielu znaków do oddzielania logicznych części w nazwie. Jeśli użyjesz _ (to było 3 _), możesz później uprościć wyrażenia regularne nazw plików.

Twój przykład może więc wyglądać mniej więcej tak:

backup_2011-06-19T114012___part002___random

Łatwy do odczytania i łatwy do przeanalizowania za pomocą skryptów.


0

Słowa w nazwie pliku można rozdzielić za pomocą _lub -zgodnie z konwencją uniksową.

Jeśli używasz -, łatwiej jest pisać, nie musisz naciskać SHIFT. Ale ponieważ -zajmuje tak mało miejsca, trudno jest odczytać separacje słów w porównaniu do _. Używanie _do oddzielania słów sprawia, że ​​wygląda znacznie czystiej, ponieważ _zajmuje więcej miejsca.

W skryptach powłoki i innych programach komputerowych _używane są zmienne wielosłówowe, takie jak MY_ENVIRONMENT_FILE. Dokonywanie używać nazwy plików _, a także sprawia, że jest konsekwentny: MY_ENVIRONMENT_FILE=~/my_environment_file.

W tworzeniu stron internetowych -preferowane jest nazywanie plików. Jednym z powodów jest prawdopodobnie to, że podkreślenie w linkach internetowych może ukryć podkreślenia i może utrudnić, jeśli wpisujesz link ręcznie.

W większości edytorów, a także na stronach internetowych, this_long_wordmożna w pełni wybrać podwójnym kliknięciem, ale nie this-long-word.


Hmmm, dlaczego czytasz swoje nazwy plików czcionką o zmiennej szerokości? Otwórz swój terminal i -i _zająć właśnie dokładnie tego samego miejsca! :)
Wildcard

Haha, masz rację. Używam SourceCodePro + Powerline + Awesome Regular łataną czcionką. Nawet w przypadku czcionek o stałej szerokości _wygląda na czystszy, nawet jeśli zajmuje tyle samo miejsca co -. Powinienem był użyć słowa „najwyraźniej”. Odnośnie _i -przy użyciu czcionek monospace, różnicę można najlepiej wyjaśnić za pomocą tego analogicznego obrazu: evsc.net/v8/wp/wp-content/uploads/2010/09//
GMaster

-1

Jest zdecydowanie standard dla Linuksa. Jeśli spojrzysz na nazwy plików w dowolnym systemie Linux, są one pisane małymi literami z myślnikami: / usr / bin / ssh-keygen. Jest to określone w jednym z dokumentów Linux Standards Base, którego nie mogę teraz znaleźć. Jest to również określone przez GNU, który mówi, aby używać znaków podkreślenia dla nazw zmiennych i myślników dla nazw plików.


-2

Aby dodać do tego, co wszyscy inni powiedzieli:

1 - Mimo że Linux nie dba o rozszerzenia, Windows tak, więc upewnij się, że każdy plik, który kiedykolwiek planujesz dać każdemu, ma odpowiednie rozszerzenie.

Wydaje się, że czapki z 2 wielbłądami są najłatwiejszymi w użyciu skryptami, bez specjalnych znaków, które mogłyby się martwić o sekwencje specjalne.


5
-1. CamelCase NIE jest używany w systemie Linux.
Mikel
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.