web-dev-qa-db-fra.com

Dans Ubuntu, un fichier vide est-il identique à un fichier texte?

Je suis nouveau sur Ubuntu.

Si dans la coquille je fais:

touch file

Il crée un fichier dans le répertoire actuel et si j'ouvre ce fichier, il apparaît sous la forme d'un fichier texte vierge. Aussi je peux faire

echo "test" > file
cat file

Et ce que je reçois, c'est une ficelle.

Un fichier vide est-il égal à un fichier texte?

6
Tantaros

Il crée un fichier dans le répertoire actuel. Si j'ouvre ce fichier, il apparaît sous la forme d'un fichier texte vierge.

Si vous exécutez touch non_existing_filename, un fichier vide sera créé. Le fichier est vide, ne contenant rien. Cela ne signifie pas qu'il s'agisse d'un fichier texte ou de tout autre type de fichier.

Si vous exécutez touch existing_file, touchez mettra à jour les horodatages du fichier.

echo "test" > file
cat file

Et ce que je reçois, c'est une ficelle. Un fichier vide est-il égal à un fichier texte?

Oui, si vous écrivez une chaîne dans un fichier vide, vous obtiendrez une chaîne lorsque vous lirez le contenu du fichier. Notez que > écrase tout le contenu d'un fichier et le résultat serait identique si le fichier était vide, inexistant ou quelque autre fichier (comme une image). Vous pouvez utiliser >> pour ajouter du texte à un fichier.

Notez que les outils, tels que la redirection (>>, > et ainsi de suite), ne s’intéressent pas au type de fichier. C'est une opération parfaitement valable d'ajouter une chaîne de texte à un fichier contenant, par exemple, une image JPEG. C'est également une opération parfaitement valide pour cat un fichier image. Pas que je te recommande d'essayer; il ne s'affichera pas correctement sur votre terminal.

Le système de fichiers n'a pas de concept de types de fichiers. Peu importe le contenu d'un fichier - et il n'y a pas de différence entre les différents types de fichiers au niveau du système de fichiers.

Traditionnellement, Unix dépend beaucoup moins des types de fichiers que Windows, et il est parfaitement raisonnable d’avoir un fichier texte appelé README, alors que sous Windows, il serait courant d’avoir l’extension .txt pour un fichier texte.

Si vous vous demandez quel type de fichier vous avez entre les mains, l'utilitaire file est plutôt utile:

$ file  auth.log
auth.log: ASCII text
$ file Dokken.mp4 
Dokken.mp4: ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]

file décide du type de contenu en fonction d'une description des caractéristiques communes de chaque fichier, communément appelée signature du fichier . Par exemple, une debian commencera toujours par les octets 21 3C 61 72 63 68 3E, et si nous voyons ces octets au début du fichier, nous avons probablement un paquet debian entre nos mains.

L'utilitaire file utilise ce qu'on appelle des fichiers magiques pour décider du type de fichier qu'il recherche. Vous trouverez plus d’informations à ce sujet dans la page de manuel relative à magic (par exemple man magic sur un système Linux).

Notez que file n'est pas infaillible, c'est simplement un très bon indicateur. Si je crée un fichier contenant les octets ed ab ee db 0d 25, file sera identifié par /tmp/foobar: RPM v13.37 bin. ed ab ee db est l'en-tête requis pour les fichiers RPM et 0d 25 est 1337 en hexadécimal ... Ce fichier ne sera en aucun cas un package RPM valide.

15
vidarlo

Si vous utilisez touch sur un fichier qui n'existe pas, il créera un fichier vide pour vous. Si vous l'utilisez sur un fichier existant, il mettra à jour les temps d'accès, etc. Vérifiez le type d'un fichier à l'aide de la commande file. Il peut y avoir des fichiers binaires nuls.

Pour ces fichiers, l'utilitaire file renvoie les informations suivantes:

$ touch new
$ file new
new: empty

Mais pour un fichier avec du texte, il retournera "texte ASCII"

$ echo "text" > text
$ file text 
text: ASCII text

Mais certaines applications graphiques telles que Pluma ou Gedit ouvriront les deux fichiers sous forme de texte.

9
Kyle H

Il y a un vieil adage sous Linux/Unix

Tout est un fichier

Cela dit, Linux identifie les types de fichiers par magie, pas nécessairement par contenu.

Voir Comment Ubuntu sait-il quel type de fichier est un fichier sans extension?

5
Panther

TLDR: Non. Un fichier texte ne doit pas être vide pour être détecté en tant que tel. Bien sûr, il peut être vide.

touch définit l'horodatage du fichier et le crée s'il n'existe pas. Alors, quel type de fichier est un fichier vide?

$ ls -l test
-rw-r--r-- 1 user users 0  1. Jän 18:36 test
$ file test
test: empty

L'utilitaire file indique qu'il s'agit d'un type de fichier distinct. En effet, un fichier vide peut être utile pour un certain nombre d'applications: il peut s'agir d'un fichier texte brut vide, d'une table CSV vide, d'un flux de données brutes vide (il ne peut s'agir d'un fichier vide de type GZ, JPEG, etc.). , parce que ces fichiers n’ont pas 0 octet même si les applications les traitent comme vides, car ils contiennent tous des en-têtes et d’autres choses). Donc, le type ne peut pas être mieux défini comme vide.

1
rexkogitans

Un fichier vide est juste un fichier vide - il n'a pas de contenu, ce n'est donc pas un fichier texte. Vous pouvez remplir un fichier vide avec tout ce que vous voulez (pour en faire un fichier texte, un fichier binaire ou tout autre type de fichier de votre choix). Voici un test simple:

Créez un fichier vide: $ touch somefile

Voir quel est le type de fichier:

$ touch somefile
$ file somefile
$ somefile: empty

Ajoutez du texte à "somefile" et voyez de quel type de fichier il s'agit:

$ echo "Some text..." >> somefile
$ file somefile
somefile: ASCII text

Créez un petit binaire:

#include <iostream>
int main(int argc, char *argv[]) {
    std::cout << "Hello, cruel world!" << std::endl;
    return 0;
}

$ g++ test.cpp -o test

Supprimez "un fichier", touchez-le à nouveau, puis ajoutez le contenu du fichier binaire à "un fichier":

$ rm somefile
$ touch somefile
$ cat test >> somefile
$ file somefile
somefile: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=18c391d1f1bba8069fe85962458c7609bd8f516e, not stripped
1
Vanessa Deagan

En bref, un fichier vide est appelé fichier de zéro octet. Ce fichier n'a pas de données ni même juste un en-tête, vous ne pouvez donc pas le saisir, bien que certains gestionnaires de fichiers et certains programmes puissent les traiter comme des fichiers texte (ce n'est pas vrai, mais c'est un bon choix à traiter). Lire plus de ici .

0
WailenB