GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Tout est un fichier ?

Sous Linux, chaque entité est considérée comme FILE. Si je fais vim <cd-Name> puis, vim ouvrira le contenu du répertoire dans son éditeur, car il ne fait pas la différence entre le fichier et les répertoires.

Mais aujourd'hui, en travaillant, j'ai rencontré une chose que je suis curieux de savoir.

J'avais prévu d'ouvrir un fichier à partir d'un répertoire imbriqué

vim a/b/c/d/file

Mais au lieu de vim , j'ai tapé

 cd a/b/c/d/

et appuyez sur TAB deux fois, mais la commande n'affichait que le répertoire disponible du répertoire "d" plutôt que les fichiers.

Ne pas le cd command honor "tout est un fichier “? Ou est-ce que j'ai raté quelque chose ?

Réponse acceptée :

Le "Tout est un fichier ” La phrase définit l'architecture du système d'exploitation. Cela signifie que tout dans le système, depuis les processus, les fichiers, les répertoires, les sockets, les canaux, … est représenté par un descripteur de fichier abstrait sur la couche de système de fichiers virtuel dans le noyau. Le système de fichiers virtuel est une interface fournie par le noyau. Par conséquent, la phrase a été corrigée pour dire "Tout est un descripteur de fichier “. Linus Torvalds lui-même l'a encore corrigé un peu plus précisément :"Tout est un flux d'octets ".

Cependant, chaque « fichier » a également un propriétaire et des autorisations que vous connaissez peut-être à partir de fichiers et de répertoires réguliers. Par conséquent, les outils Unix classiques comme cat, ls, ps, ... peuvent interroger tous ces "fichiers" et il n'est pas nécessaire d'inventer d'autres mécanismes spéciaux, que les simples outils classiques, qui utilisent tous le read() appel système. Par exemple, dans la famille de systèmes d'exploitation de Microsoft, il existe plusieurs éléments read() différents appels système (j'en ai entendu environ 15) pour tous les types de fichiers et chacun d'eux est un peu différent. Quand tout est un fichier, alors vous n'en avez pas besoin.

À votre question  :Bien sûr, il existe différents types de fichiers . Sous Linux, il existe 7 types de fichiers. L'annuaire en fait partie. Mais, les utilitaires peuvent les distinguer les uns des autres. Par exemple, la fonction complète du cd commande (lorsque vous appuyez sur TAB ) répertorie uniquement les répertoires, car le stat() appel système (voir man 2 stat ) renvoie une structure avec un champ appelé st_mode . La norme POSIX définit ce que ce champ peut contenir :

       S_ISREG(m)  is it a regular file?
       S_ISDIR(m)  directory?
       S_ISCHR(m)  character device?
       S_ISBLK(m)  block device?
       S_ISFIFO(m) FIFO (named pipe)?
       S_ISLNK(m)  symbolic link? (Not in POSIX.1-1996.)
       S_ISSOCK(m) socket? (Not in POSIX.1-1996.)

Le cd la fonction de complétion de commande affiche simplement les "fichiers" où le S_ISDIR l'indicateur est défini.

En relation :Linux – Désactiver les services vbox pour réduire le temps de démarrage ?
Linux
  1. Comment déplacer un fichier sous Linux

  2. Comprendre les autorisations de fichiers Linux

  3. Commande Tail Linux

  4. Bases des autorisations de fichiers Linux

  5. Comment renommer un fichier sous Linux ?

Qu'est-ce qu'umask sous Linux ?

Compression de fichiers Linux :tout ce que vous devez savoir

Tout est un fichier sous Linux - Partie 2

Tout est un fichier sous Linux - Partie 1

Comment créer un lien symbolique vers un fichier sous Linux

Extraire le fichier tar.gz sous Linux