¿Qué extensión usar para los archivos de texto? (Unix / Linux)

20

Me di cuenta de que puedo leer archivos de texto sin una extensión .txtmuy bien. ¿Cómo? ¿Debo guardar estos archivos con o sin la .txtextensión?

Además, ¿qué pasa con los .iniarchivos? Por lo general, los uso de esta manera: config.ini¿debo eliminar la extensión aquí?

Cualquier recurso general sobre cómo Linux maneja las extensiones de archivo sería útil.

jcora
fuente

Respuestas:

37

UNIX / Linux no tiene la misma herencia temprana de DOS / CP / M que Windows. Por lo tanto, las extensiones son generalmente menos significativas para la mayoría de las utilidades y herramientas de UNIX.

Usualmente uso un entorno de línea de comandos solamente. Las extensiones en un entorno de este tipo bajo Linux no son realmente significativas, excepto por conveniencia para el operador o el usuario. (No tengo suficiente experiencia con KDE o GNOME para saber cómo manejan sus administradores de archivos las extensiones).

Pero tal conveniencia suele ser importante. Si config.inirealmente está en formato ".ini" estándar de Microsoft, dejaría que la extensión permanezca. Los archivos de texto antiguos generalmente no tienen extensión en Linux, pero esto no es universal para todos los archivos de configuración de programas. El programador generalmente decide eso.

Creo que ".txt" es útil en Linux si desea enfatizar que NO es un archivo de configuración u otro documento legible por máquina. Sin embargo, en las distribuciones de origen, la convención es nombrar dichos archivos con mayúsculas sin una extensión (es decir, README, INSTALL, COPYING, etc.)

Hay algunos estándares y convenciones, pero nada te impide nombrar lo que quieras, a menos que estés compartiendo cosas con otros.

En Windows, nombrar un archivo .exeindica al shell (generalmente explorer.exe) que es un archivo ejecutable. UNIX construye este conocimiento en los permisos del sistema de archivos. Si se establecen los xbits adecuados (ver man chmod), los shells y las funciones del kernel lo reconocen como ejecutable (creo). Más allá de esto, a Linux no le importa, a la mayoría de los shells no le importará, y la mayoría de los programas buscan en el archivo para encontrar su "tipo".

Por supuesto, existe el comando agradable fileque puede analizar el archivo y decirle qué es con cierto grado de certeza. Creo que si no puede hacer coincidir los datos en el archivo con ningún tipo conocido, y si contiene solo caracteres ASCII / Unicode imprimibles, entonces se supone que es un archivo de texto.


@Bruce Ediger a continuación es absolutamente correcto. No hay nada en el nivel del kernel o del sistema de archivos, es decir, Linux en sí mismo, que imponga o cuide que el contenido de un archivo deba coincidir con su nombre o con el programa que se supone que debe comprenderlo. Esto no significa que no sea posible crear una utilidad de shell o lanzador para hacer cosas basadas en el nombre del archivo.

LawrenceC
fuente
77
También es útil si trabajas mucho en la consola, ya que los archivos bien nombrados son más fáciles de diferenciar de otros con globbing.
lynxlynxlynx
99
Debe enfatizar que los nombres de archivo de Linux no tienen "extensiones": la parte ".txt" de un nombre de archivo que lo contiene es simplemente una subcadena. También debe enfatizar que la organización interna de archivos (cadenas terminadas en LF, cadenas terminadas en CR-LF, registros de tamaño fijo, etc.) ni siquiera está ligeramente relacionada con el nombre, ni la "aplicación" que conoce el archivo está relacionado por nombre .
Bruce Ediger
2
Creo que solo las entradas del directorio FAT16 8.3 en DOS tenían un campo separado de 3 bytes para la extensión. FAT32 mantuvo el campo 8.3 por compatibilidad, pero el "nombre de archivo largo" real es una cadena sin campo de extensión separado, dividido contra múltiples entradas de directorio ( fandecheng.com/personal/interests/ewindows/nuhelp/lfnspec.htm )
LawrenceC
23

A diferencia de Windows, en los sistemas UNIX el tipo de archivo no está determinado por la extensión. La extensión del archivo es y fue simplemente un indicador visual para los humanos. Puede nombrar un archivo JPEG foo.c y abrirlo en Gimp. Otro contraste de Windows es que en los sistemas UNIX debe usar el nombre de archivo completo, mientras que Windows a menudo se encargará de usted (por ejemplo, ejecutando solo explorervs. explorer.exe). En UNIX foo.shdebe llamarse como foo.sh, no simplemente foo.

Por convención, las personas tienden a usar un conjunto común de extensiones. Esta práctica, aunque innecesaria, es probablemente beneficiosa para la humanidad en general.

bahamat
fuente
77
+1 paraThis practice…is probably beneficial for humanity at large
Ulrich Dangel
Lástima que la diversidad de empaquetamiento dificulta el manejo adecuado del mimo a veces (por ejemplo, en KDE, según mi experiencia), aunque no sé por qué los programas no recurren a verificar el byte mágico.
lynxlynxlynx
3
Porque no hay un byte "mágico". Eso es solo una abreviatura de "todos los tipos de archivos conocidos que están razonablemente bien documentados y estructurados lo suficiente como para ser detectados de manera confiable con un alto grado de certeza". Funciona muy bien para archivos de texto o contenedores. Generalmente falla miserablemente para cualquier tipo de datos sin procesar o desconocido.
bahamat
1
@bahamat No es un byte, pero hay una parte del archivo tradicionalmente llamada " número mágico " que se supone que define lo que contiene el archivo. Es lo que el filecomando está mirando. ( #!es el número mágico para guiones sh, por ejemplo)
Izkata
1
@lzkata a la derecha, como dije: "tipos de archivo conocidos que están razonablemente bien documentados y estructurados lo suficiente como para ser detectados de manera confiable con un alto grado de certeza".
bahamat
7

En general, me ha resultado muy útil mantener una convención de nomenclatura estricta y descriptiva. No necesita la extensión en Unix, pero la conservaría por dos razones:

1) Si ese archivo será leído alguna vez por una máquina Windows, será más fácil abrirlo que tratar de encontrar "abrir con ...".

2) Extensiones lo ayuda a usted, el usuario, a descubrir qué está haciendo el archivo. En nuestro laboratorio: .txt = archivo de texto .sgi = binario compilado irix .linux = binario compilado linux

Si tiene que usar máquinas Unix más antiguas (todavía usamos IRIX), tenga en cuenta que el retorno de carro es diferente en las máquinas * nix, y los programas podrían no apreciarlo si intenta abrir un archivo con retornos de carro de Windows.

Lenz
fuente
3

Hay varias buenas respuestas. Me gustaría responder una parte de la pregunta original: "Cualquier recurso general sobre cómo Linux maneja las extensiones de archivo sería útil".

Es posible registrar extensiones, de modo que Linux siempre abra ciertas extensiones con ciertos programas. Esta instalación se llama binfmt .

binfmt_misc es una capacidad del kernel de Linux que permite reconocer y pasar formatos arbitrarios de archivos ejecutables a ciertas aplicaciones de espacio de usuario, como emuladores y máquinas virtuales. Los formatos ejecutables se registran a través de una interfaz de sistema de archivos de propósito especial (similar a / proc). Las distribuciones basadas en Debian proporcionan la funcionalidad a través de un paquete adicional binfmt-support.

Cada formato tiene una entrada de archivo correspondiente en el directorio / proc / sys / fs / binfmt_misc que se puede leer para obtener información sobre un formato de archivo determinado.

Ahora no
fuente
-2

.txt se puede abrir a través de diferentes aplicaciones. pero lo importante es que se usa para clasificar el archivo en cierto tipo. Puede ver si guardamos el mismo archivo usando .html, el archivo intenta abrirse en Internet Explorer. las aplicaciones se realizan en consecuencia para admitir dichos tipos de archivos. Si usa .html arriba, el compilador intenta encontrar los atributos html y muestra el resultado correspondiente. Lo mismo con las otras extensiones. El archivo .ini se puede leer como texto, pero la extensión lo clasifica como archivo de configuración y, por lo tanto, el compilador lo trata como un archivo de configuración, no como un archivo de texto ordinario, ya que el archivo de texto es solo un conjunto de registros y no tiene una función específica. por lo tanto, no querrá cambiar la extensión de ini a texto

Sanjay Maharjan
fuente
66
Ese puede ser el caso en Windows, pero (como se explica en otras respuestas), esto es irrelevante en los sistemas operativos UN * X-ish.
Piskvor