Qual extensão usar para arquivos de texto? (Unix / Linux)

20

Percebi que posso ler arquivos de texto sem uma extensão .txtmuito bem. Por quê? Devo salvar esses arquivos com ou sem a .txtextensão?

Além disso, e os .iniarquivos? Eu normalmente os uso assim: config.inidevo remover a extensão aqui para?

Quaisquer recursos gerais sobre como o Linux lida com extensões de arquivo seriam úteis.

jcora
fonte

Respostas:

37

O UNIX / Linux não possui a mesma herança DOS / CP / M anterior que o Windows. Portanto, as extensões geralmente são menos significativas para a maioria dos utilitários e ferramentas UNIX.

Eu normalmente uso um ambiente somente de linha de comando. Extensões nesse ambiente no Linux não são realmente significativas, exceto como uma conveniência para o operador ou usuário. (Não tenho experiência suficiente com o KDE ou o GNOME para saber como os gerenciadores de arquivos lidam com as extensões.)

Mas essa conveniência geralmente é importante. Se config.inirealmente estiver no formato ".ini" padrão da Microsoft, eu deixaria a extensão em pé. Arquivos de texto antigos simples normalmente não possuem extensão no Linux, mas isso não é universal para todos os arquivos de configuração de programas. O programador geralmente decide isso.

Eu acho que ".txt" é útil no Linux se você quiser enfatizar que NÃO é um arquivo de configuração ou outro documento legível por máquina. No entanto, nas distribuições de código-fonte, a convenção é nomear esses arquivos com todas as letras maiúsculas sem uma extensão (por exemplo, README, INSTALL, COPYING etc.)

Existem alguns padrões e convenções, mas nada impede você de nomear o que quiser, a menos que esteja compartilhando coisas com outras pessoas.

No Windows, nomear um arquivo .exeindica para o shell (geralmente explorer.exe) que é um arquivo executável. O UNIX constrói esse conhecimento nas permissões do sistema de arquivos. Se os xbits apropriados (veja man chmod) são definidos, ele é reconhecido como executável pelas funções shells e kernel (acredito). Além disso, o Linux não se importa, a maioria dos shells não se importa, e a maioria dos programas procura no arquivo para descobrir que é "tipo".

Obviamente, existe o comando legal fileque pode analisar o arquivo e dizer o que é com certo grau de certeza. Acredito que, se não puder corresponder os dados no arquivo com nenhum tipo conhecido, e se contiver apenas caracteres ASCII / Unicode imprimíveis, será considerado um arquivo de texto.


@ Bruce Ediger abaixo está absolutamente correto. Não há nada no nível do kernel ou do sistema de arquivos, ou seja, o próprio Linux, impondo ou importando que o conteúdo de um arquivo precise corresponder ao seu nome ou ao programa que deve entendê-lo. Isso não significa que não é possível criar um utilitário de shell ou iniciador para fazer coisas com base no nome do arquivo.

LawrenceC
fonte
7
Também é útil se você estiver trabalhando muito no console, pois os arquivos bem nomeados são mais fáceis de diferenciar dos outros com globbing.
Lynxlynxlynx
9
Você deve enfatizar que os nomes de arquivo do Linux não têm "extensões" - a parte ".txt" de um nome de arquivo que o contém é apenas uma substring. Você também deve enfatizar que a organização interna do arquivo (cadeias terminadas por LF, cadeias terminadas por CR-LF, registros de tamanho fixo, etc.) não está nem um pouco relacionada ao nome, nem o "aplicativo" que conhece o arquivo relacionado a ele pelo nome .
9788 Bruce Ediger
2
Acho que apenas as entradas do diretório 8.3 do FAT16 no DOS tinham um campo de 3 bytes separado para a extensão. O FAT32 manteve o campo 8.3 para compatibilidade, mas o "nome do arquivo longo" real é uma sequência sem campo de extensão separado, dividido em várias entradas de diretório ( fandecheng.com/personal/interests/ewindows/nuhelp/lfnspec.htm )
LawrenceC
23

Diferentemente do Windows, nos sistemas UNIX, o tipo de arquivo não é determinado pela extensão. A extensão do arquivo é e foi simplesmente um indicador visual para humanos. Você pode nomear um JPEG foo.c e abri-lo no Gimp. Outro contraste do Windows é que, nos sistemas UNIX, você deve usar todo o nome do arquivo, enquanto o Windows costuma cuidar dele (por exemplo, executando apenas explorervs. explorer.exe). No UNIX foo.shdeve ser chamado como foo.sh, não simplesmente foo.

Por convenção, as pessoas tendem a usar um conjunto comum de extensões. Essa prática, embora desnecessária, provavelmente é benéfica para a humanidade em geral.

bahamat
fonte
7
+1 paraThis practice…is probably beneficial for humanity at large
Ulrich Dangel
Pena que a diversidade de embalagens às vezes dificulta o manuseio adequado de mímica (por exemplo, no KDE por minha experiência), embora eu não saiba por que os programas não recorrem à verificação do byte mágico.
Lynxlynxlynx
3
Porque não há byte "mágico". Isso é apenas uma abreviação para "todos os tipos de arquivos conhecidos que estão razoavelmente bem documentados e estruturados o suficiente para serem detectados com segurança com um alto grau de certeza". Funciona muito bem para arquivos de texto ou contêiner. Geralmente, falha miseravelmente em qualquer tipo de dados brutos ou desconhecidos.
bahamat
11
@bahamat Não é um byte, mas há uma parte do arquivo tradicionalmente chamada de " número mágico " que deve definir o que o arquivo contém. É para isso que o filecomando está olhando. ( #!É o número mágico para scripts sh, por exemplo)
Izkata
11
@lzkata, como eu disse: "tipos de arquivos conhecidos que estão razoavelmente bem documentados e estruturados o suficiente para serem detectados com um alto grau de certeza".
bahamat
7

Em geral, achei muito útil manter uma convenção estrita e descritiva de nomes. Você não precisa da extensão no Unix, mas eu a manteria por dois motivos:

1) Se esse arquivo for lido por uma máquina Windows, será mais fácil abrir do que tentar encontrar "abrir com ...".

2) Extensões ajuda você, o usuário, a descobrir o que o arquivo está fazendo. Em nosso laboratório: .txt = arquivo de texto .sgi = binário compilado irix .linux = binário compilado linux

Se você precisar usar máquinas unix mais antigas (ainda usamos o IRIX), lembre-se de que o retorno de carro é diferente em máquinas * nix, e os programas podem não ser agradáveis ​​se você tentar abrir um arquivo com retorno de carro do Windows.

Lenz
fonte
3

Existem várias boas respostas. Gostaria de responder ainda a parte da pergunta original: "Quaisquer recursos gerais sobre como o Linux lida com extensões de arquivo seriam úteis".

É possível registrar extensões, para que o Linux sempre abra certas extensões com certos programas. Esse recurso é chamado de binfmt .

O binfmt_misc é um recurso do kernel Linux que permite que formatos de arquivo executáveis ​​arbitrários sejam reconhecidos e passados ​​para determinados aplicativos de espaço do usuário, como emuladores e máquinas virtuais. Os formatos executáveis ​​são registrados por meio de uma interface de sistema de arquivos para fins especiais (semelhante a / proc). As distribuições baseadas no Debian fornecem a funcionalidade através de um pacote de suporte binfmt extra.

Cada formato possui uma entrada de arquivo correspondente no diretório / proc / sys / fs / binfmt_misc, que pode ser lido para obter informações sobre um determinado formato de arquivo.

Agora não
fonte
-2

.txt pode ser aberto através de diferentes aplicativos. mas o importante é que ele seja usado para classificar o arquivo em determinado tipo. Você pode ver se salvamos o mesmo arquivo usando .html que o arquivo tenta abrir no Internet Explorer. os aplicativos são feitos de acordo para oferecer suporte a esses tipos de arquivo. Se você usar .html acima, o compilador tenta encontrar os atributos html nele e mostra o resultado de acordo. mesmo com as outras extensões. O arquivo .ini pode ser lido como texto, mas a extensão o classifica como arquivo de configuração e, portanto, o compilador o trata como arquivo de configuração, não como um arquivo de texto comum, pois o arquivo de texto é apenas um conjunto de registros e não possui uma função específica. Por isso, você não gostaria de alterar a extensão de ini para texto

Sanjay Maharjan
fonte
6
Pode ser o caso do Windows, mas (como explicado em outras respostas), isso é irrelevante nos sistemas operacionais UN * X-ish.
Piskvor 10/10/12