it-swarm.it

Convenzione di denominazione dei file Unix

Mi chiedevo qual è la convenzione di denominazione per i file in Unix? Non ne sono sicuro, ma penso che ci sia forse una convenzione di denominazione universale da seguire?

Ad esempio, voglio nominare un file dire: backup con part 2 e random

Dovrei farlo in questo modo:

backup_part2_random

OR

backup-part2-random

OR

backup.part2.random

Spero che la domanda sia chiara. Fondamentalmente, voglio scegliere un formato conforme alla filosofia Unix.

67
user4740

. viene utilizzato per separare un'estensione del tipo di file, ad es. foo.txt.

- o _ viene utilizzato per separare le parole logiche, ad es. my-big-file.txt o talvolta my_big_file.txt. - è meglio perché non è necessario premere il tasto Maiusc (almeno con una tastiera standard per PC inglese americano), altri preferiscono _ perché sembra più uno spazio.

Quindi, se capisco il tuo esempio, backup-part2-random o backup_part2_random sarebbe il più vicino alla normale convenzione Unix.


CamelCase normalmente non viene utilizzato su sistemi Linux/Unix. Dai un'occhiata ai nomi dei file in /bin e /usr/bin. CamelCase è l'eccezione piuttosto che la regola sui sistemi Unix e Linux.

(NetworkManager è l'unico esempio che mi viene in mente che utilizza CamelCase ed è stato scritto da uno sviluppatore Mac. Molti si sono lamentati di questa scelta di nome. Su Ubuntu, in realtà hanno rinominato lo script in network-manager.)

Ad esempio, su /usr/bin sul mio sistema:

$ 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

e anche allora, nessuno dei file che iniziano con una maiuscola utilizza CamelCase:

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

Lontano più importante che una determinata convenzione sia coerente. Scegli uno stile e mantienilo.

38
David Oneill

La mia opinione sulle convenzioni sui nomi dei file Unix/Linux:

  • I filesystem Unix/Linux non supportano intrinsecamente la nozione di estensione. Il concetto di estensione di un file esiste completamente come qualcosa di supportato da utility come cp, ls o Shell che stai utilizzando. Credo che sia così anche su NTFS, ma potrei sbagliarmi.

  • Gli eseguibili, inclusi gli script Shell, di solito non hanno mai alcun tipo di estensione. Gli script avranno una riga hashbang (ovvero #!/bin/bash) Che identifica quale programma dovrebbe interpretarlo.

  • Qualsiasi eseguibile lungo due lettere è estremamente importante. Quindi non nominare i nomi dei file di due lettere degli eseguibili. Qualsiasi file in /etc Che termina in tab è anche molto importante, come fstab, mtab, inittab.
  • A volte .d Viene aggiunto ai nomi delle directory, in particolare in /etc, Ma questo non è molto diffuso (AGGIORNAMENTO: https://serverfault.com/questions/240181/what-does -la-suffisso-d-media-in-linux )
  • rc è ampiamente utilizzato per script di configurazione o file, sia anteponendo (ad esempio, rc.local) o suffisso (.vimrc)
  • La comunità Unix/Linux non ha mai avuto un limite di tre caratteri per le estensioni e aggrotta le sopracciglia all'accorciamento delle estensioni ben note per adattarsi. Ad esempio, non utilizzare .htm Alla fine dei file HTML su Unix/Linux, utilizzare .html.
  • In un set di file, a volte un nome file è in maiuscolo o in maiuscolo, quindi appare all'inizio di un elenco di directory. L'esempio classico è Makefile nei pacchetti sorgente. Fallo solo per cose come README.
  • ~ Viene utilizzato per identificare un file di backup o una directory, come in important_stuff~ O /etc~. Molte shell espanderanno da ~ A $HOME.
  • I file di libreria quasi sempre iniziano con lib. L'eccezione è zlib e probabilmente alcune altre.
  • Gli script chiamati da inetd a volte sono taggati con un in. Iniziale, come in.tftpd.
  • La z finale in vmlinuz significa zippato, ma non ho mai visto nessun altro file chiamato in questo modo.
19
LawrenceC

In unix il nome del file è solo una stringa, a differenza del DOS, in cui il nome del file era composto da nome ed estensione. Quindi uno qualsiasi dei nomi di file è completamente accettabile.

Tuttavia, molti programmi utilizzano ancora suffissi di file che iniziano con il punto per distinguere diversi tipi di file, ad esempio Apache Web Server utilizza suffissi per impostare il tipo MIME corretto nelle intestazioni delle risposte.

7
gelraen

Due pensieri:

  1. Nel Naming Variables, Functions, and Files sezione GNU Coding Standards troverai:

    Si prega di utilizzare i trattini bassi per separare le parole in un nome, in modo che i comandi di Emacs Word possano essere utili al loro interno. Stick per minuscole;

    Mentre l'IMO dice "Dovresti usare _ poiché emacs "sembra un po 'datato, ma è comunque nel loro documento" standard ".

  2. Supponiamo per un momento che siamo tutti d'accordo sul fatto che il kernel Linux sia il "tutto e per tutto" * dei progetti Linux e che le convenzioni utilizzate lì siano ciò che potrebbe essere considerato una convenzione "standard".

    grep-ing sorgente per il kernel linux troverai quanto segue:

    • 44,6% del tempo utilizzato solo trattino
    • Il 54,1% delle volte sottolinea solo
    • 1,2% delle volte in cui un file utilizza entrambi.

È interessante notare che source for git pesa a 85% per trattini, 3,8% per i trattini bassi e 11,1% per entrambi.

La scelta è chiara, si discute. ;)

Opinione personale: utilizzo i trattini per motivi estetici e di spostamento dei tasti. Se lavori in una squadra, vota. Ma per ribadire quanto detto, sii coerente.

* o "be_all and end_all" se vuoi

6
Roy Truelove

Personaggi che non dovresti usare nei nomi dei file:

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

Delimitatori di caratteri che dovresti usare per facilitare la lettura dei nomi:

_ -. :

(In alcuni casi ":" ha un significato speciale però)

4
Istvan

Per aggiungere ciò che altri hanno detto, direi solo che mentre le lettere accentate e molti caratteri speciali sono legali nei nomi dei file, possono causare problemi in uno dei seguenti scenari:

  • Condividi il tuo filesystem con altri computer, in particolare con diversi sistemi operativi;
  • Condividi i file con altri (e sebbene l'e-mail tenda a essere abbastanza buona con le conversioni, a volte semplicemente non funziona);
  • Gli script Shell vengono utilizzati per automatizzare alcune attività (gli spazi sono particolarmente problematici, sebbene ci siano molti modi per gestirli);
  • Si utilizza una condivisione file da un altro computer.

...

4
asoundmove

Attenersi ai nomi di file alfanumerici. Evita gli spazi o sostituisci gli spazi con caratteri di sottolineatura (_). Limitare la punteggiatura nei nomi dei file a punti (.), Trattini bassi (_) e trattini (-). Generalmente i nomi dei file sono in minuscolo, ma uso CamelCase quando ho più parole nel nome del file.

Usa estensioni che indicano il tipo di file. I programmi non hanno bisogno di estensioni poiché il bit di esecuzione viene utilizzato per indicare i programmi e le shell sanno come eseguire programmi di vario tipo. È comune ma non è richiesto (.sh) per gli script Shell e (.pl) per gli script Perl. Le estensioni eseguibili di Windows .bat, .com, .scr e .exe indicano eseguibili di Windows su Unix.

Scegli uno standard e attenersi ad esso. Ma non si romperà le cose se lo eviti.

I file nascosti (o punti) hanno nomi che iniziano con un punto. Normalmente questi non vengono visualizzati negli elenchi di directory. Usa 'ls -a' per includere i file punto nell'elenco.

3
BillThor

uso - o _ per denominare i file
_ per le funzioni
. per le estensioni

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

Una convenzione è quella di utilizzare "_" per sostituire gli spazi come separatori tra le parole. Altri caratteri potrebbero essere usati per sostituire gli spazi, ma ci sono usi convenzionali leggermente più forti per "-" e "." nei nomi dei percorsi, quindi di solito è preferito "_".

Gli spazi sono legali nei nomi dei percorsi, ma sono convenzionalmente evitati, perché richiedono la citazione del nome del percorso ("foo bar") o la fuga degli spazi (foo\bar). Uno script Shell correttamente scritto citerà le variabili che possono includere spazi, in particolare i nomi dei percorsi, ma non farlo è una svista comune, ed è un sacco di extra digitando quando si esegue un comando unico immesso nella riga di comando.

L'uso di "-" per separare gruppi di numeri, come nei timestamp o nei numeri di serie, è una convenzione comunemente usata al di fuori del contesto dei filesystem. Utilizzando "." separare le "estensioni di file" che indicano che il tipo di file è molto comune e alcuni strumenti importanti dipendono da esso. Ad esempio, il sistema di gestione dei pacchetti su Red Hat Enterprise Linux e i suoi derivati, RPM, prevede che i file dei pacchetti finiscano con ".rpm". Il tarball tradizionale è un file tar (".tar") che è stato compresso con gzip (".gz") e quindi termina con ".tar.gz".

Quindi, unendoli insieme, si finisce spesso con nomi di file che sembrano "home_backup_2017-07-01.tar.gz"

2
bgvaughan

Sono d'accordo con David Oneill che dovresti semplicemente andare con qualcosa.

Ma è bello se i file sono ordinabili nella stessa directory, quindi non numerare 0 .. 10 ma numero 00 .. 10.

Quando si utilizzano le date nei nomi, utilizzare un formato data standard come ISO8601 .

E non abbiate paura di usare più caratteri per separare le parti logiche nel nome. Se usi _ (che era 3 _), puoi semplificare le regexps sui nomi dei file in seguito.

Quindi il tuo esempio potrebbe essere qualcosa del genere:

backup_2011-06-19T114012___part002___random

Facile da leggere e da analizzare con gli script.

0
Johan

Le parole in un nome file possono essere separate con _ o - secondo la convenzione Unix.

Se usi -, è più facile da digitare, ti salva dalla pressione di MAIUSC. Ma dal momento che - occupa così poco spazio, è un po 'difficile leggere le separazioni di Word rispetto a _. Utilizzando _ separare le parole lo rende molto più pulito poiché _ occupa più spazio.

In Shell scripting e altri programmi per computer, _ sono utilizzati per più variabili Word, come MY_ENVIRONMENT_FILE. Come utilizzare i nomi di file _ inoltre lo mantiene coerente: MY_ENVIRONMENT_FILE=~/my_environment_file.

Nello sviluppo web, - è preferito per la denominazione dei file. Uno dei motivi è probabilmente perché la sottolineatura nei collegamenti Web può nascondere i caratteri di sottolineatura e potrebbe rendere difficile se si sta digitando il collegamento Web a mano.

Nella maggior parte degli editor e delle pagine Web, this_long_Word può essere completamente selezionato con un doppio clic ma non this-long-Word.

0
GMaster