GNU/Linux >> Tutoriales Linux >  >> Linux

Linux – ¿Todo es un archivo?

En Linux, cada entidad individual se considera como ARCHIVO. Si hago vim <cd-Name> entonces, vim abrirá el contenido del directorio en su editor, porque no diferencia entre archivos y directorios.

Pero hoy, mientras trabajaba, me encontré con algo que tengo curiosidad por saber.

Planeé abrir un archivo desde un directorio anidado

vim a/b/c/d/file

Pero en lugar de vim , escribí

 cd a/b/c/d/

y presione el TAB dos veces, pero el comando solo mostraba el directorio disponible del directorio "d" en lugar de los archivos.

No el cd comando honor “todo es un archivo “? ¿O me estoy perdiendo algo?

Respuesta aceptada:

El “Todo es un archivo ” frase define la arquitectura del sistema operativo. Significa que todo en el sistema, desde procesos, archivos, directorios, sockets, conductos, … está representado por un descriptor de archivo abstraído sobre la capa del sistema de archivos virtual en el núcleo. El sistema de archivos virtual es una interfaz proporcionada por el núcleo. Por lo tanto, la frase se corrigió para decir "Todo es un descriptor de archivo “. El propio Linus Torvalds volvió a corregirlo con un poco más de precisión:“Todo es un flujo de bytes “.

Sin embargo, cada "archivo" también tiene un propietario y permisos que puede conocer de los archivos y directorios normales. Por lo tanto, las herramientas clásicas de Unix como cat, ls, ps, ... pueden consultar todos esos "archivos" y no es necesario inventar otros mecanismos especiales, además de las herramientas antiguas, que usan read() llamada del sistema. Por ejemplo, en la familia de sistemas operativos de Microsoft hay varios read() diferentes llamadas al sistema (escuché unas 15) para cualquier tipo de archivo y cada una de ellas es un poco diferente. Cuando todo es un archivo, entonces no lo necesitas.

A su pregunta :Por supuesto que hay diferentes tipos de archivos . En Linux hay 7 tipos de archivos. El directorio es uno de ellos. Pero, las utilidades pueden distinguirlos entre sí. Por ejemplo, la función completa del cd comando (cuando presiona TAB ) solo lista directorios, porque stat() llamada al sistema (ver man 2 stat ) devuelve una estructura con un campo llamado st_mode . El estándar POSIX define lo que ese campo puede contener:

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

El cd la función de finalización de comando solo muestra "archivos" donde el S_ISDIR la bandera está configurada.

Relacionado:Linux:¿deshabilitar los servicios de vbox para disminuir el tiempo de arranque?
Linux
  1. Cómo mover un archivo en Linux

  2. Comprender los permisos de archivos de Linux

  3. Comando de cola de Linux

  4. Conceptos básicos de los permisos de archivos de Linux

  5. ¿Cómo cambiar el nombre de un archivo en Linux?

¿Qué es umask en Linux?

Compresión de archivos de Linux:todo lo que necesita saber

Todo es un archivo en Linux - Parte 2

Todo es archivo en Linux – Parte 1

Cómo vincular un archivo en Linux

Extraiga el archivo tar.gz en Linux