Quale estensione usare per i file di testo? (Unix / Linux)


20

Ho notato che posso leggere i file di testo senza un'estensione .txtbene. Come mai? Devo salvare questi file con o senza l' .txtestensione?

Inoltre, che dire dei .inifile? Di solito li uso in questo modo config.ini:, dovrei rimuovere l'estensione qui?

Qualsiasi risorsa generale su come Linux gestisce le estensioni dei file sarebbe utile.

Risposte:


37

UNIX / Linux non ha la stessa eredità DOS / CP / M iniziale di Windows. Quindi le estensioni sono generalmente meno significative per la maggior parte delle utility e degli strumenti UNIX.

Di solito uso un ambiente solo da riga di comando. Le estensioni in un tale ambiente sotto Linux non sono davvero significative se non per comodità dell'operatore o dell'utente. (Non ho abbastanza esperienza con KDE o GNOME per sapere come i loro file manager gestiscono le estensioni.)

Ma tale praticità è di solito importante. Se config.iniè davvero in formato ".ini" standard Microsoft, lascerei stare l'estensione. I normali file di testo vecchi di solito non hanno estensione in Linux, ma questo non è universale per tutti i file di configurazione dei programmi. Il programmatore di solito lo decide.

Penso che ".txt" sia utile sotto Linux se vuoi sottolineare che NON è un file di configurazione o un altro documento leggibile dalla macchina. Tuttavia, nelle distribuzioni dei sorgenti, la convenzione è di nominare tali file in maiuscolo senza estensione (ovvero README, INSTALL, COPYING, ecc.)

Ci sono alcuni standard e convenzioni, ma nulla ti impedisce di nominare qualsiasi cosa tu voglia, a meno che tu non stia condividendo le cose con gli altri.

In Windows, la denominazione di un file .exeindica alla shell (di solito explorer.exe) che si tratta di un file eseguibile. UNIX inserisce questa conoscenza nelle autorizzazioni del file system. Se vengono impostati i xbit corretti (vedi man chmod), viene riconosciuto come eseguibile da shell e funzioni del kernel (credo). Oltre a ciò, a Linux non importa, alla maggior parte delle shell non importa, e la maggior parte dei programmi cerca nel file per trovare il "tipo".

Certo, c'è il bel comando fileche può analizzare il file e dirti di cosa si tratta con un certo grado di certezza. Credo che se non può corrispondere ai dati nel file con alcun tipo noto e se contiene solo caratteri ASCII / Unicode stampabili, presuppone che sia un file di testo.


@Bruce Ediger di seguito è assolutamente corretto. Non c'è nulla a livello di kernel o filesystem, cioè Linux stesso, che impone o si preoccupi che il contenuto di un file debba corrispondere al suo nome, o al programma che dovrebbe capirlo. Ciò non significa che non sia possibile creare un'utilità shell o launcher per fare cose in base al nome del file.


7
È anche utile se lavori molto nella console, poiché i file con un buon nome sono più facili da distinguere dagli altri con il globbing.
lynxlynxlynx,

9
Dovresti sottolineare che i nomi dei file Linux non hanno "estensioni" - la parte ".txt" di un nome file che lo contiene è semplicemente una sottostringa. Dovresti anche sottolineare che l'organizzazione interna dei file (stringhe con terminazione LF, stringhe con terminazione CR-LF, record di dimensioni fisse, ecc.) Non è nemmeno debolmente correlata al nome, né "l'app" che conosce il file correlato al nome in base al nome .
Bruce Ediger,

2
Penso che solo le voci della directory FAT16 8.3 sotto DOS avessero un campo separato da 3 byte per l'estensione. FAT32 ha mantenuto il campo 8.3 per compatibilità, ma l'attuale "nome file lungo" è una stringa senza campo di estensione separato, suddivisa su più voci di directory ( fandecheng.com/personal/interests/ewindows/nuhelp/lfnspec.htm )
LawrenceC

23

A differenza di Windows, nei sistemi UNIX il tipo di file non è determinato dall'estensione. L'estensione del file è ed era semplicemente un indicatore visivo per l'uomo. Puoi nominare un JPEG foo.c e aprirlo in Gimp. Un altro contrasto di Windows è che sui sistemi UNIX è necessario utilizzare l'intero nome del file, mentre Windows si occuperà spesso di esso (ad esempio, eseguendo solo explorervs. explorer.exe). Su UNIX foo.shdeve essere chiamato come foo.sh, non semplicemente foo.

Per convenzione le persone tendono ad usare un insieme comune di estensioni. Questa pratica, sebbene non necessaria, è probabilmente benefica per l'umanità in generale.


7
+1 perThis practice…is probably beneficial for humanity at large
Ulrich Dangel,

Peccato che la diversità del packaging renda difficile la corretta gestione del mime a volte (ad es. In KDE dalla mia esperienza), anche se non so perché i programmi non ricadano sul controllo del byte magico.
lynxlynxlynx,

3
Perché non esiste un byte "magico". Questa è solo una scorciatoia per "tutti i tipi di file conosciuti che sono ragionevolmente ben documentati e strutturati abbastanza da essere rilevati in modo affidabile con un alto grado di certezza". Funziona molto bene con file di testo o container. In genere fallisce miseramente per tutti i tipi di dati grezzi o sconosciuti.
bahamat,

1
@bahamat Non è un byte, ma c'è una parte del file tradizionalmente chiamata " numero magico " che dovrebbe definire il contenuto del file. È ciò che il filecomando sta guardando. ( #!è il numero magico per gli script sh, per esempio)
Izkata

1
@lzkata, come ho detto: "tipi di file conosciuti che sono ragionevolmente ben documentati e strutturati abbastanza da essere rilevati in modo affidabile con un alto grado di certezza".
bahamat,

7

In generale ho trovato molto utile mantenere una convenzione di denominazione rigorosa, descrittiva. Non è necessaria l'estensione in Unix, ma la terrei per due motivi:

1) Se quel file verrà mai letto da un computer Windows, sarà più facile aprirlo che provare a trovare "apri con ...".

2) Extensions aiuta l'utente a capire cosa sta facendo il file. Nel nostro laboratorio: .txt = file di testo .sgi = binario compilato irix .linux = binario compilato linux

Se devi usare macchine unix precedenti (usiamo ancora IRIX), tieni presente che il ritorno a capo è diverso nelle macchine * nix e che i programmi potrebbero non apprezzare se provi ad aprire un file con i ritorni a capo di Windows.



3

Ci sono molte buone risposte. Vorrei rispondere ulteriormente a una parte della domanda originale: "Qualsiasi risorsa generale su come Linux gestirà le estensioni dei file sarebbe utile".

È possibile registrare estensioni, in modo che Linux apra sempre determinate estensioni con determinati programmi. Questa funzione si chiama binfmt .

binfmt_misc è una capacità del kernel Linux che consente di riconoscere e trasmettere formati di file eseguibili arbitrari a determinate applicazioni dello spazio utente, come emulatori e macchine virtuali. I formati eseguibili sono registrati tramite un'interfaccia del file system per scopi speciali (simile a / proc). Le distribuzioni basate su Debian forniscono la funzionalità attraverso un pacchetto aggiuntivo di supporto binfmt.

Ogni formato ha una voce di file corrispondente nella directory / proc / sys / fs / binfmt_misc che può essere letta per ottenere informazioni su un determinato formato di file.


-2

.txt può essere aperto attraverso diverse applicazioni. ma l'importante è che sia usato per classificare il file in un certo tipo. Puoi vedere se salviamo lo stesso file usando .html che il file tenta di aprire in Internet Explorer. le applicazioni sono realizzate di conseguenza per supportare tali tipi di file. Se usi .html sopra, il compilatore prova a trovare gli attributi html in esso e mostra i risultati di conseguenza. lo stesso con le altre estensioni. Il file .ini può essere letto come testo ma l'estensione lo classifica come file di configurazione e quindi il compilatore lo considera come file di configurazione non un normale file di testo poiché il file di testo è solo un set di record e non ha una funzione specifica come quella di. ini.hence non vorrai modificare l'estensione di ini in testo


6
Questo può essere il caso di Windows, ma (come spiegato in altre risposte), questo è irrilevante nei sistemi operativi UN * X-ish.
Piskvor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.