Herramientas personales

Explicaciones acerca de /dev

De Proyectos GULIX

/dev (dispositivos de Linux)

Para los que llevan poco tiempo utilizando Linux, y por qué no, para los que llevan su rato, acá va un pequeño listado explicativo de qué significan las cosas que puedes encontrar en el árbol de directorios /dev.

Para aquellos que no lo saben, "/dev" es una parte del árbol de directorios de Linux compuesta por un sistema de archivos virtual, llamado devfs, que dinámicamente crea directorios y archivos para presentar una estructura jerarquizada de accesos a diversas características del sistema, como por ejemplo los discos duros, la memoria o la pantalla. Cada uno de estos archivos y directorios cuple una función particular y debido a esta función requieren privilegios especiales para ser operados, siendo la mayoría de estos archivos propiedad de root y chmod'eados a 0660.

Tabla de contenidos

Accesos Virtuales más Comunes

/dev/null

Todos hemos escuchado los chistes y referencias a /dev/null. En esencia, es un "hoyo negro" que se traga sin chistar todo lo que escribas en él, y del cual no es posible leer nada.

En resumen:

  • Leer desde /dev/null siempre devuelve un error de lectura.
  • Escribir a /dev/null no sucede nada (se realiza el proceso de lectura desde la fuente, pero no se realiza ningun proceso de escritura).

Las mecánicas de /dev/null se pueden explicar con comandos sencillos como los siguientes:

dd if=/dev/cdrom of=/dev/null

Este comando copia todo el contenido del CD a /dev/null. Como el archivo /dev/null es un hoyo negro, en realidad la información no va a parar a ninguna parte, aunque igual el programa hará el esfuerzo de leerla.

tail -f /dev/null

Este comando no va a hacer nada. Se queda esperando que haya algo que mostrar desde /dev/null, pero como no es posible leer algo desde ese archivo, y se ha especificado la opción "-f" para dejar a "tail" corriendo continuamente, el programa nunca terminará. Presiona CONTROL+C para abortar.

/dev/zero

Este archivo es similar a /dev/null, pero con a diferencia que "contiene", en cierta forma, un número infinito de caracteres ASCII 0. En resumen:

  • Leer desde /dev/zero siempre devuelve un caracter ASCII 0 (el nulo o 0x00, no el número cero).
  • Escribir a /dev/zero no sucede nada (se realiza el proceso de lectura desde la fuente, pero no se realiza ningun proceso de escritura).

Prueba a ejecutar el mismo comando de antes:

tail -f /dev/zero

Al igual que antes, nada aparecerá en pantalla, pero verás que el uso de tu CPU se va a las nubes, porque el sistema hace el esfuerzo de leer más y más y más.... ASCIIS nulo.

Prueba este comando para que veas lo que hay en earchivo (presiona CONTROL+C cuando te hayas convencido que sólo hay nulos)

od -vx /dev/zero

POR HACER: ejemplos de uso de /dev/zero

/dev/full

Este archivo es similar a los dos anteriores, pero se comporta como si existiera en un medio que esté siempre lleno, algo así como tratar de escribir a un CD cerrado.

En resumen:

  • Leer desde /dev/full siempre falla.
  • Escribir a /dev/full siempre devuelve un error del tipo "no hay suficiente espacio en disco".

Como ves, útil para pruebas.

Acceso a Dispositivos de Disco

/dev/hd*

En estricto rigor, /dev/hdXNN donde X puede ser (a, b, c, d) y NN, si existe, es un número.

Estos archivos corresponden a las particiones de las unidades de disco duro. Los primeros cuatro, sin números, son:

  • hda para el disco Primario Maestro, o IDE 0
  • hdb para el disco Primario Esclavo, o IDE 1
  • hdc para el disco Secundario Maestro, o IDE 2
  • hdd para el disco Secundario Esclavo, o IDE 3

Estos archivos representan la totalidad del disco duro como si fueran un solo archivo, contiguo, secuencial, por tanto escribir o leer directo de estos archivos es escribir o leer directo del disco duro. Importante entonces tener cuidado al pasar por aquí.

Los archivos numerados corresponden a las particiones de cada disco duro, siendo, por ejemplo, hda1 la primera partición del primer disco duro, y hdb18 la décimooctava partición del segundo disco duro. Estas numeraciones no son necesariamente contiguas, están basadas en tres reglas sencillas:

  • Los números 1 a 4 representan las cuatro particiones estándar IDE, es decir las particiones primarias.
  • Posterior a esto, los números 5 a 63 (en discos de menos de 32Gb) o 255 (más de 32Gb) se considera las particiones lógicas que existen dentro de la partición extendida (que es una de las primarias configuradas para ese efecto). Por ejemplo, hdb5 es la primera partición lógica del segundo disco duro.
  • Si hay un espacio no particionado en el disco, sea primario o lógico, se considera como una partición numerada que no existe, es decir, si hay dos particiones lógicas separadas por un "hueco" de 8Gb, veremos los archivos para las particiones como hda5 y hda7. El archivo hda6 no existe porque no hay partición en ese lugar.

Con estas sencillas reglas es fácil entender el particionado con programas en modo texto, como fdisk y parted. Aunque las interfaces como gparted o qtparted hacen esto más fácil poque lo hacen visual.


/dev/sd*

Es lo mismo que con los discos IDE, pero el prefijo "sd" es para discos conectados por una interfaz SCSI o, en general, una interfaz no IDE, aunque existen distribuciones linux que actualmente están tratando tanto los discos IDE, SATA, SCSI como sd*. Por ejemplo, discos SATA o pendrives. El primer pendrive que conectemos a nuestro computador aparecerá como sda si no tenemos discos SATA o SCSI, y como sdc si tenemos dos discos SATA o SCSI, dado que el primer disco será sda y el segundo sdb.

Las mismas reglas de numeración anteriores aplican aunque con la salvedad que no existe la limitante de cuatro discos, por lo que los fanáticos de Robotech que se esfuercen lo suficiente podrán montar más y más pendrives hasta recibir el mensaje que ha aparecido el dispositivo /dev/sdf1.

/dev/sr*

Este prefijo es para algunas clases especiales de conexiones SCSI, como por ejemplo, los grabadores de DVD. Aplica la misma propiedad anterior en cuanto a que si tenemos una interna, la numeración de las externas cambia.

/dev/fd*

Estos archivos corresponden a las disqueteras (Floppy Disc) conectadas en el equipo. La primera disquetera, la configurada al cable IDE FLOPPY 0 o la que bootea el sistema, corresponde a fd0, y la segunda disquetera, a fd1.

Acceso a Componentes del Sistema

/dev/audio

Este archivo es un acceso al secuenciador de audio del sistema. Si le mandas un archivo de audio "nativo" a este archivo por medio de echo (por ejemplo, un AIFF), lo más probable es que lo escuches por los parlantes del sistema:

echo /media/mi_disco/campana.aiff > /dev/audio

Aplicaciones que hacen uso: no recuerdo ninguna que accese directamente al archivo.

/dev/sound

Esencialmente lo mismo que el anterior. Estoy en proceso de determinar las diferencias.

/dev/random y /dev/urandom

Estos archivos corresponden al generador de números pseudo—aleatorio integrado en el kernel Linux. Este generador es una herramienta que lee y acumula señales de diversos disopsitivos, como el movimiento del mouse o la tasa de paquetes de red, y por medio de un algoritmo los procesa y los convierte en información que parece como si fuera generada al azar: por eso, "pseudo—aleatorio".

La pila de entropía que usan estos dispositivos lee información desde varios eventos, como por ejemplo:

  • los más comunes son las pulsaciones de teclado y movimiento del mouse como fuente.
  • algunas máquinas pueden configurarse para leer un sensor de hardware (como la temperatura de la CPU) y usar el valor como fuente.
  • los eventos generados por dispositivoc de Interface Humana (HID) conectados vía USB pueden usarse como fuente.
  • en caso de existir la conexión, la tasa de transferencia de paquetes (no los paquetes mismos) pueden usarse como fuente.

La diferencia entre random y urandom es que del primero se puede leer mientras haya información en la pila de eventos del sistema, después de eso se bloquea hasta que suceda algo que genere más información al azar (por ejemplo, hasta que muevas el mouse). El segundo, urandom, recompila y regenera los eventos para seguir produciendo números por cuanto tiempo sea necesario, aunque eso lo hace algo menos prdecible y algo menos seguro.

Aplicaciones que hacen uso: cualquier aplicación criptográfica como ssh-keygen, truecrypt, Blowfish, SSL, etc.

/dev/input/*

Estos archivos con manejadores de Linux para recibir e interpretar los eventos de los dispositivos de entrada, como: teclado, mouse, joystick, tableta gráfica, Wiimote, etc...

Cada archivo corresponde aun dispositivo, para saber qué dispositivo es y en qué estado se encuentra se usa el programa lsdev (Gestor de Paquetes buscar bajo "procinfo" o similar), o puede buscar los enlaces simbólicos de la forma input/by-path/event-XXX donde XXX es la abreviatura de un dispositivo como por ejemplo "kbd" (teclado), "usb1" (quizá un joystick USB), etc.

Aplicaciones que hacen uso: el kernel de Linux y algunos demonios y servicios como gpm (mouse en consola), egd (cargador de entropía del sistema), ppp (manejador de conexiones de modem), etc.

/dev/mem

¿A que no adivinas? —— Sí, es la memoria RAM del sistema. Mucho cuidado por aquí.

/dev/rtc y /dev/hpet

Este archivo es un acceso por BIOS al "reloj de tiempo real" que tiene integrado el computador. Más sobre esto en el futuro.

Aplicaciones que hacen uso: cualquiera que requiera temporización en procesos hasta milisegundos, por ejemplo: emuladores, debuggers, etc.

/dev/tty* y /dev/pty*

Estos archivos corresponden a las terminales del sistema.

  • tty* corresponde a las "terminales reales" o consolas del sistema, es decir, aquellas que pueden alcanzarse usualmente con las combinaciones CTRL+ALT+F1... CTRL+ALT+F9.
  • pty* corresponde a las terminales virtuales o ventanas de consola que son lanzadas por manejadores de consola como xterm, Konsole, GnomeTerminal, xfterm, aterm, rxvt, y un largo etcétera, además de las consolas virtuales sin "representación gráfica" en las cuales están corriendo scripts del sistema, etc.

Aplicaciones que hacen uso: el shell principal de Linux, las shell remotas (usualmente ssh),así como la miriada de aplicaciones antes mencionadas.

/dev/xconsole

Consola virtual que utiliza el superusuario del sistema para almacenar y mostrar los mensajes de los demonios (daemon) que se encargan del logging del sistema: en las distribuciones más recientes, syslogd o similar.

Si quieres ver este dispositivo en acción solamente invoca el programa "xconsole" desde una termina, lo cual mostrará los avisos del sistema a medida que se vayan generando.

Aplicaciones que hacen uso: syslogd, el manejador de ACPI, DBUS, HAL, inetd, etc...

Acceso a Utilidades del Kernel

/dev/core, /dev/kmem, /dev/kmsg

Accesos de muy bajo nivel (bajo como en profundo) a las utilidades y contenidos de la memoria usada por el kernel Linux.


/dev/fd (enlace simbólico)

Este enlace simbólico siempre apunta al descriptor de archivo (en /proc) del proceso que lo está tratando de ver. Con esto quiero decir que si entras a este enlace simbólico desde dos terminales distintas (ej.: dos ventanas distintas de GnomeTerminal), acabarás en dos lugares distintos de la estructura de gestión de procesos en /proc.

/dev/net/*

Las interfaces virtuales de red y algunas características avanzadas de red en Linux opera por medio de la interface TUN/TAP que se accede desde los archivos en este directorio, los cuales pueden ser, por ejemplo, "tun" o "tap".

Aplicaciones que hacen uso: tunctl, Xen, algunos emuladores de PC, y herramientas de testeo de red.

/dev/shm

Este archivo provee acceso a la Memoria Compartida de Linux, es decir, memoria reservada por aplicaciones en modo contiguo. Más sobre esto más adelante.

Aplicaciones que hacen uso: cualquier aplicación que quiera evitar el swapping de sus páginas, como: emuladores, sistemas de autoría multimedia, o lectores de sensores.

POR HACER: ejemplo de cómo reservar memoria virtual.


Utilidades Varias

/dev/fuse

Si tienes instalado FUSE (Filesystems in Userspace), este archivo provee a las utilidades de FUSE el acceso a llamadas del sistema necesarias para que puedan montar y leer, con privilegios de usuario, discos, archivos de imagen o dispositivos del sistema.

Aplicaciones que hacen uso: todo lo que diga "fuse-algo" o "xxx sistema de archivos en userspace", como: ntfs-3g, sshfs, fuse-iso, fuse-cram, etc.

/dev/nvidia

Los usuarios de tarjeta gráfica NVidia con los drivers instalados, ven este archivo que corresponde al acceso por BIOS a las especificaciones y funciones PCI de la tarjeta. El acceso a la aceleracion de hardware se hace por medio del archivo "parecido pero no igual", /dev/nvidia0.

Aplicaciones que hacen uso: bueno.... cualquier aplicación 3D si estás usando aceleración gráfica con tu tarjeta NVidia.

A los usuarios de ATI: aún no averiguo cuál es el dispositivo asociado.

/dev/usb/*

Si existe este directorio, cada dispositivo USB reconocido es alcanzado por un archivo en este directorio, cuyo nombre sigue la numeración del dispositivo y del concentrador USB al que está asociado, por ejemplo, usb1 es el primer concentrador (usualmente uno de los puertos traseros de las placas madre) y usbdev_1_1 el primer dispositivo conectado a ese concentrador (p.ej.: el primer pendrive conectado a un minihub en ese puerto).

/dev/disk/*

Los kernel más recientes incorporan el directorio "/dev/disk" el cual contiene enlaces simbólicos a cada una de las entradas de las particiones de los discos duros (hda1, hdb69, hdc6 o sda1) basadas en un criterio especial que es capaz de determinar el manejador o "driver" de cada sistema de archivos detectado. Estos criterior y directorios son:

  • disk/by-label: enlaces simbólicos de acuerdo a la Etiqueta de Volumen de la partición. Particularmente útil con particiones ext2 y FAT32.
  • disk/by-uuid: enlaces simbólicos de acuerdo a la ordenación de los Identificadores Únicos de Disco que proveen algunos sistemas de archivo como ext2/3 y XFS.
  • disk/by-path: enlaces simbólicos de acuerdo a la ordenación de a qué conector (ya sea IDE, SCSI, SATA, USB, etc) está conectado el dispositivo, y en qué orden está la partición dentro de los elementos integrados a ese conector en particular.

Aplicaciones que hacen uso: las herramientas para particionado en las versiones más recientes de Linux, como el instalador de Ubuntu 7.10.


/dev/kqemu y /dev/vboxvdrv

Los que están usando los softwares de emulación Qemu (con el acelerador KQEMU) y/o VirtualBox verán estos archivos que corresponden a accesos de nivel privilegiado a las operaciones del sistema. Son estos "accesos" los que permiten a los emuladores alcanzar las velocidades casi-nativas.

Aplicaciones que hacen uso: bueno.... Qemu y Virtualbox.


Más Archivos

El árbol de directorios en /dev puede ser toda una sorpresa. Se va a ir agregando información más adelante para que nuestros lectores siempre sepan qué está pasando cuando el sistema les da un aviso relacionado con alguno de estos archivos.

Autores de este Resumen

Un placer haberles ayudado. Atte.: --Ryan.chappelle 02:02 13 ene 2008 (ART)


Leer más


Buscar