GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:tutto è un file?

In Linux, ogni singola entità è considerata FILE. Se faccio vim <cd-Name> quindi, vim aprirà il contenuto della directory nel suo editor, perché non fa distinzione tra file e directory.

Ma oggi, mentre lavoro, mi sono imbattuto in una cosa di cui sono curioso di sapere.

Ho pianificato di aprire un file dalla directory nidificata

vim a/b/c/d/file

Ma invece di vim , ho digitato

 cd a/b/c/d/

e premi il TAB due volte, ma il comando mostrava solo la directory disponibile della directory "d" anziché i file.

Non il cd command honor “tutto è un file “? O mi sfugge qualcosa?

Risposta accettata:

Il "Tutto è un file ” frase definisce l'architettura del sistema operativo. Significa che tutto nel sistema da processi, file, directory, socket, pipe, ... è rappresentato da un descrittore di file astratto sul livello del filesystem virtuale nel kernel. Il filesystem virtuale è un'interfaccia fornita dal kernel. Quindi la frase è stata corretta per dire "Tutto è un descrittore di file “. Linus Torvalds stesso lo ha corretto ancora un po' più precisamente:“Tutto è un flusso di byte “.

Tuttavia, ogni "file" ha anche un proprietario e autorizzazioni che potresti conoscere da normali file e directory. Pertanto i classici strumenti Unix come cat, ls, ps, ... possono interrogare tutti quei "file" e non è necessario inventare altri meccanismi speciali, oltre ai semplici vecchi strumenti, che usano tutti read() chiamata di sistema. Ad esempio, nella famiglia di sistemi operativi Microsoft ci sono più read() chiamate di sistema (ne ho sentito parlare di 15) per qualsiasi tipo di file e ognuna di esse è leggermente diversa. Quando tutto è un file, non ne hai bisogno.

Alla tua domanda :Ovviamente ci sono diversi tipi di file . In Linux ci sono 7 tipi di file. La directory è una di queste. Ma le utilità possono distinguerli l'uno dall'altro. Ad esempio, la funzione completa del cd comando (quando si preme TAB ) elenca solo le directory, perché stat() chiamata di sistema (vedi man 2 stat ) restituisce una struttura con un campo chiamato st_mode . Lo standard POSIX definisce cosa può contenere quel campo:

       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.)

Il cd la funzione di completamento del comando mostra solo "file" dove S_ISDIR il flag è impostato.

Correlati:Linux – Disabilitare i servizi vbox per ridurre il tempo di avvio?
Linux
  1. Come spostare un file in Linux

  2. Comprendere i permessi dei file Linux

  3. Comando coda di Linux

  4. Nozioni di base sui permessi dei file Linux

  5. Come rinominare un file in Linux?

Cos'è umask in Linux?

Compressione file Linux:tutto ciò che devi sapere

Tutto è un file in Linux – Parte 2

Tutto è file in Linux – Parte 1

Come collegare simbolicamente un file in Linux

Estrai il file tar.gz in Linux