Convenção de nomenclatura de arquivos Unix [fechada]

61

Eu queria saber qual é a convenção de nomenclatura para arquivos no Unix? Não tenho certeza sobre isso, mas acho que talvez haja uma convenção universal de nomenclatura a ser seguida?

Por exemplo, quero nomear um arquivo como: backup with part 2 e random

Devo fazer assim:

backup_part2_random

OR

backup-part2-random

OR

backup.part2.random

Espero que a pergunta esteja clara. Basicamente, eu quero escolher um formato que esteja de acordo com a filosofia Unix.

    
por slm 13.02.2011 / 13:32

14 respostas

53

. é usado para separar uma extensão de tipo de arquivo, por exemplo foo.txt .

- ou _ é usado para separar palavras lógicas, por ex. my-big-file.txt ou às vezes my_big_file.txt . - é melhor porque você não precisa pressionar a tecla Shift (pelo menos com um teclado padrão do US English), outros preferem _ porque parece mais um espaço.

Então, se eu entendi seu exemplo, backup-part2-random ou backup_part2_random estaria mais próximo da convenção normal do Unix.

O CamelCase normalmente não é usado em sistemas Linux / Unix. Dê uma olhada nos nomes dos arquivos em /bin e /usr/bin . O CamelCase é a exceção e não a regra nos sistemas Unix e Linux.

( NetworkManager é o único exemplo em que posso pensar que usa CamelCase, e foi escrito por um desenvolvedor de Mac. Muitos reclamaram sobre essa escolha de nome. No Ubuntu, eles realmente renomearam o script para network-manager .)

Por exemplo, em /usr/bin no meu 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, mesmo assim, nenhum dos arquivos que começam com uma maiúscula usa o CamelCase:

$ ls -d [A-Z]*
GET  HEAD  POST  X11  Xvnc  Xvnc4
    
por 13.02.2011 / 22:49
35

Longe é mais importante que uma convenção específica esteja sendo consistente. Escolha um estilo e fique com ele.

    
por 13.02.2011 / 15:41
16

Minha opinião sobre as convenções de nomes de arquivos do Unix / Linux:

  • Sistemas de arquivos Unix / Linux não suportam inerentemente a noção de uma extensão. O conceito de uma extensão de arquivo existe completamente como algo suportado por utilitários como cp , ls ou o shell que você está usando. Eu acredito que é assim também no NTFS, mas posso estar errado.

  • Os executáveis, incluindo scripts de shell, geralmente nunca possuem nenhum tipo de extensão. Os scripts terão uma linha de hashbang (por exemplo, #!/bin/bash ) que identifica qual programa deve interpretá-la.

  • Qualquer executável com duas letras é super importante. Portanto, não nomeie seus nomes de arquivos de duas letras executáveis. Qualquer arquivo em /etc terminado em tab também é super importante, como fstab , mtab , inittab .
  • Às vezes .d é anexado aos nomes de diretório, especialmente em /etc , mas isso não é generalizado (UPDATE: link )
  • rc é amplamente usado para scripts ou arquivos de configuração, seja prepending (por exemplo, rc.local ) ou sufixo ( .vimrc )
  • A comunidade Unix / Linux nunca teve um limite de três caracteres em extensões e desaprova a redução de extensões bem conhecidas. Por exemplo, não use .htm no final dos arquivos HTML no Unix / Linux, use .html .
  • Em um conjunto de arquivos, um nome de arquivo é, às vezes, capitalizado ou em maiúsculas, portanto, aparece na cabeça de uma listagem de diretórios. O exemplo clássico é Makefile em pacotes de origem. Faça isso apenas para coisas como README .
  • ~ é usado para identificar um arquivo de backup ou um diretório, como em important_stuff~ ou /etc~ . Muitos shells expandem um ~ para $HOME .
  • Arquivos de biblioteca quase sempre começam com lib . A exceção é zlib e provavelmente alguns outros.
  • Os scripts que são chamados pelo inetd às vezes são marcados com um% principalin., como in.tftpd .
  • O z final em vmlinuz significa zipado, mas nunca vi nenhum outro arquivo com esse nome.
por 14.02.2011 / 16:44
8

No nome do arquivo unix é apenas uma string, ao contrário do DOS, onde o nome do arquivo foi composto de nome e extensão. Portanto, qualquer um dos nomes de arquivos é completamente aceitável.

Mas muitos programas ainda usam sufixos de arquivo começando com ponto para distinguir diferentes tipos de arquivo, ou seja, o Apache Web Server usa sufixos para definir o tipo MIME correto nos cabeçalhos de resposta.

    
por 13.02.2011 / 15:12
6

Caracteres que você não deve usar em nomes de arquivos:

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

Delimitadores de caracteres que você deve usar para tornar os nomes mais fáceis de ler:

_ - . :

(em alguns casos ":" tem um significado especial)

    
por 13.02.2011 / 15:06
5

Para adicionar ao que os outros disseram, eu diria que, embora letras acentuadas e muitos caracteres especiais sejam legais em nomes de arquivos, eles podem causar problemas em qualquer um dos seguintes cenários:

  • Você compartilha seu sistema de arquivos com outros computadores, principalmente com sistemas operacionais diferentes;
  • Você compartilha arquivos com outras pessoas (e, embora o e-mail tenda a ser muito bom com conversões, às vezes isso simplesmente não funciona);
  • Você usa scripts de shell para automatizar algumas tarefas (os espaços são particularmente problemáticos, embora haja muitas maneiras de lidar com eles)
  • Você usa um compartilhamento de arquivos de outro computador.

...

    
por 13.02.2011 / 22:35
4

Prenda-se a nomes de arquivos alfanuméricos. Evite espaços ou substitua espaços por sublinhados (_). Limite a pontuação em nomes de arquivos a pontos (.), Sublinhados (_) e hifens (-). Geralmente os nomes dos arquivos são minúsculos, mas eu uso o CamelCase quando tenho várias palavras no nome do arquivo.

Use extensões que indicam o tipo de arquivo. Os programas não precisam de extensões, pois o bit de execução é usado para indicar programas, e os shells sabem como executar programas de vários tipos. É comum, mas não obrigatório, (.sh) para scripts de shell e (.pl) para scripts perl. As extensões executáveis do Windows, .bat, .com, .scr e .exe indicam os executáveis do Windows no Unix.

Escolha um padrão e cumpra-o. Mas não vai quebrar as coisas se você evitá-lo.

Os arquivos ocultos (ou ponto) têm nomes que começam com um ponto. Estes normalmente não aparecem nas listagens de diretórios. Use 'ls -a' para incluir os arquivos de pontos na lista.

    
por 13.02.2011 / 17:09
4

Dois pensamentos:

  1. Na seção Naming Variables, Functions, and Files dos Padrões de codificação GNU , você encontrará:

    Please use underscores to separate words in a name, so that the Emacs word commands can be useful within them. Stick to lower case;

    Enquanto o IMO dizendo "Você deveria usar _ porque o emacs" parece um pouco datado, ele está, no entanto, em seu documento de 'padrões'.

  2. Vamos supor por um momento que todos nós concordamos que o kernel do linux é o tipo “tudo-e-acaba-e-tudo” de projetos linux, e que as convenções usadas ali são o que poderia ser considerado uma convenção 'padrão'.

    grep -ing fonte para o kernel linux , você encontrará o seguinte:

    • 44.6% do tempo em que apenas traço é usado
    • 54.1% do tempo apenas sublinhado
    • 1,2% do tempo que um arquivo usa os dois.

Curiosamente, a fonte para o git pesa 85% para traços, 3.8 % para underscores e 11,1% para ambos.

A escolha é clara, o debate acabou. ;)

Opinião pessoal: eu uso traços por razões estéticas e por chaves. Se você estiver trabalhando em equipe, faça uma votação. Mas, para reiterar o que foi dito, seja consistente .

* ou "be_all e end_all" se você gostar

    
por 08.08.2016 / 16:41
1

Uma convenção é usar "_" para substituir espaços como separadores entre palavras. Outros caracteres podem ser usados para substituir espaços, mas há usos convencionais ligeiramente mais strongs para "-" e "." em nomes de caminho, então "_" geralmente é o preferido.

Espaços são legais em nomes de caminhos, mas são convencionalmente evitados, porque eles exigem a colocação de um nome de caminho ("foo bar") ou a fuga dos espaços (foo \ bar). Um script de shell escrito corretamente irá citar variáveis que podem incluir espaços, particularmente nomes de caminho, mas não fazer isso é uma supervisão comum, e é muito mais digitação ao fazer um comando único inserido na linha de comando.

Usar "-" para separar clusters de números, como em registros de data e hora ou números de série, é uma convenção comumente usada fora do contexto dos sistemas de arquivos. Usando "." separar "extensões de arquivo" que indicam que o tipo de arquivo é muito comum, e algumas ferramentas importantes dependem dele. Por exemplo, o sistema de gerenciamento de pacotes no Red Hat Enterprise Linux e seus derivados, o RPM, espera que os arquivos do pacote terminem com ".rpm". O tarball tradicional é um arquivo tar (".tar") que foi compactado com gzip (".gz") e termina em ".tar.gz".

Então, colocando-os juntos, muitas vezes você acaba com nomes de arquivos parecidos com "home_backup_2017-07-01.tar.gz"

    
por 29.06.2017 / 17:57
1

use - para nomear arquivos
e _ para funções em . para extensões

cat << EOF > foo-bar.sh  
foo_bar() {  
echo baz  
}  
EOF  
    
por 23.08.2018 / 14:25
0

Concordo com o David Oneill que você deve ir com alguma coisa.

Mas é legal se os arquivos forem classificados no mesmo diretório, então não digite 0 .. 10 mas número 00 .. 10.

Ao usar datas em nomes, use um formato de data padrão, como ISO8601 .

E não tenha medo de usar vários caracteres para separar partes lógicas do nome. Se você usar _ (que era 3 _), então você pode simplificar os regexps em nomes de arquivos mais tarde.

Assim, seu exemplo poderia ser algo assim:

backup_2011-06-19T114012___part002___random

Fácil de ler e fácil de analisar com scripts.

    
por 19.06.2011 / 11:41
0

As palavras em um nome de arquivo podem ser separadas por _ ou - de acordo com a convenção Unix.

Se você usar - , será mais fácil digitar, evitando que você pressione SHIFT. Mas como - ocupa muito pouco espaço, é difícil ler as separações de palavras em comparação com _ . Usar _ para separar palavras faz com que pareça muito mais limpo, pois _ ocupa mais espaço.

Em scripts de shell e outros programas de computador, _ são usados para variáveis de várias palavras, como MY_ENVIRONMENT_FILE . Fazer com que os nomes dos arquivos usem _ também o mantém consistente: MY_ENVIRONMENT_FILE=~/my_environment_file .

No desenvolvimento da web, - é o preferido para a nomenclatura de arquivos. Um motivo provavelmente é porque o sublinhado nos links da Web pode ocultar os sublinhados e dificultar a tarefa se você digitar o link da Web manualmente.

Na maioria dos editores e em páginas da Web, this_long_word pode ser totalmente selecionado com um clique duplo, mas não com this-long-word .

    
por 24.01.2017 / 05:27
-1

Existe definitivamente um padrão para o Linux. Se você observar os nomes dos arquivos em qualquer sistema Linux, eles estarão em minúsculas com traços: / usr / bin / ssh-keygen. Isso é especificado em um dos documentos da Base de Padrões do Linux que não posso encontrar agora. Também é especificado pelo GNU que diz para usar sublinhados para nomes e traços de variáveis para nomes de arquivos.

    
por 08.03.2014 / 21:12
-2

Para adicionar ao que todos disseram:

1-Mesmo que o Linux não se importe muito com as extensões, o Windows também, certifique-se de que qualquer arquivo que você planeje dar a alguém tem a extensão apropriada.

2-Camel caps parece ser o mais fácil de usar scripts, sem caracteres especiais para se preocupar com seqüências de escape.

    
por 13.02.2011 / 22:48

Tags