Hace unos meses unos estudiantes me preguntaron cómo saber desde la consola, la distribución de linux en la que se está (es decir, cómo puede un programa, escrito en c, por ejemplo, saber en qué distribución está corriendo).
Supuse que debía haber una manera de saberlo, pero no la conocía, así que les dije que me imaginaba que podría ser una variable de entorno o algo así... ahora sé que no hay tal variable y en su lugar, se averigua ese dato y otros con el comando lsb_release.
El comando tiene varias opciones, y debo suponer que está relacionado con el LSB (Linux Standard Base). Las opciones específicas pueden consultarse, como es usual en los comanos unix, con la opcción --help.
Con la siguiente instrucción se obtiene información, primero, de los módulos lsb del sistema, y después, despliega el nombre de la distribución, el nombre completo, la versión y el nombre clave.
$ lsb_release -a
Al ejecutarlo en ubuntu 8.04 (conocido como Hardy Heron), aparece lo siguiente:
Distributor ID: Ubuntu
Description: Ubuntu 8.04.1
Release: 8.04
Codename: hardy
en openSuSE 10.3:
Distributor ID: SUSE LINUX
Description: openSUSE 10.3 (i586)
Release: 10.3
Codename: n/a
en Fedora 8:
Distributor ID: Fedora
Description: Fedora release 8 (Werewolf)
Release: 8
Codename: Werewolf
y en Knoppix 5.3:
Distributor ID: Debian
Description: Debian GNU/Linux lenny/sid
Release: lenny/sid
Codename: n/a
... no lo he probado en otras distribuciones, pero supongo que funciona en muchas... debido al LSB.
Este blog tiene como objetivo compartir los adelantos y descubrimientos en el área del software libre en sistemas GNU/Linux de un altermundista salvadoreño
miércoles, 14 de enero de 2009
lunes, 12 de enero de 2009
Partir archivos grandes
Recuerdo cuando apareció el WinRAR (para windows)... una de las grandes novedades que traía era la opción de partir el archivo comprimido resultante en pedazos de tamaño configurable... lo cual fue una gran cosa en aquel tiempo, porque la mayoría de los servidores de correo electrónico sólo permitían archivos de 2MB.
Cuando me pasé a Linux no sabía cómo hacer eso... y la verdad ni siquiera entendía el modelo de funcionamiento de "los programas para comprimir" del mundo GNU... posteriormente entendí que esos programas no son más que Front-Ends para comandos de consola (principalmente para tar), pero seguí sin saber cómo partir los archivos.
Algún tiempo después, "descubrí" por casualidad el comando split (andaba buscando otra cosa). Este comando permite dividir un archivo arbitrario, por líneas o por bytes. Fue una gran alegría encontrarlo, ya que en ese mismo tiempo comencé a trabajar con máquinas virtuales (y sus discos duros son archivos bien grandes que necesitaba dividir para transportarlos). Pero inmediatamente después, me surgió la duda correspondiente: ¿Cómo unirlos después?
Bueno, seguí buscando y leyendo, y encontré que un comando que yo "conocía" de antaño era la respuesta: el comando cat.
El comando cat, concatena archivos y los despliega en la salida estándar. Entonces para unir los pedazos, se procede así:
$ cat pedazo-01 pedazo-02 ... > archivo-unido
El comando cat concatena los archivos pedazo-01, pedazo-02, etc. y con el redireccionador de flujo de salida del bash (>), la salida estándar de cat se redirige al archivo archivo-unido que obviamente será sobreescrito si ya existe.
Cuando me pasé a Linux no sabía cómo hacer eso... y la verdad ni siquiera entendía el modelo de funcionamiento de "los programas para comprimir" del mundo GNU... posteriormente entendí que esos programas no son más que Front-Ends para comandos de consola (principalmente para tar), pero seguí sin saber cómo partir los archivos.
Algún tiempo después, "descubrí" por casualidad el comando split (andaba buscando otra cosa). Este comando permite dividir un archivo arbitrario, por líneas o por bytes. Fue una gran alegría encontrarlo, ya que en ese mismo tiempo comencé a trabajar con máquinas virtuales (y sus discos duros son archivos bien grandes que necesitaba dividir para transportarlos). Pero inmediatamente después, me surgió la duda correspondiente: ¿Cómo unirlos después?
Bueno, seguí buscando y leyendo, y encontré que un comando que yo "conocía" de antaño era la respuesta: el comando cat.
El comando cat, concatena archivos y los despliega en la salida estándar. Entonces para unir los pedazos, se procede así:
$ cat pedazo-01 pedazo-02 ... > archivo-unido
El comando cat concatena los archivos pedazo-01, pedazo-02, etc. y con el redireccionador de flujo de salida del bash (>), la salida estándar de cat se redirige al archivo archivo-unido que obviamente será sobreescrito si ya existe.
Introducir el caracter EOF
Hay muchos comandos en linux que reciben su entrada de datos directamene de la entrada estándar (por ejemplo more, less, tail, grep, etc.), y su funcionamiento termina cuando encuentran el caracter de fin de archivo, típicamente conocido como EOF.
Cuando la entrada de estos comandos se redirecciona desde un archivo (con <) o desde otro comando a través de una tubería (con |), el funcionamiento es muy natural... pero ¿y si los queremos usar directamente con la entrada estándar??
Bueno, en ese caso el problema se resuelve a saber cómo introducir, con el teclado, el dichoso caracter de fin de archivo. Durante mucho tiempo, eso fue un misterio para mí, hasta que lo descubrí por casualidad en un manual de Python:
El caracter de fin de archivo se inserta en la terminal con la combinación Ctrl+D.
Cuando la entrada de estos comandos se redirecciona desde un archivo (con <) o desde otro comando a través de una tubería (con |), el funcionamiento es muy natural... pero ¿y si los queremos usar directamente con la entrada estándar??
Bueno, en ese caso el problema se resuelve a saber cómo introducir, con el teclado, el dichoso caracter de fin de archivo. Durante mucho tiempo, eso fue un misterio para mí, hasta que lo descubrí por casualidad en un manual de Python:
El caracter de fin de archivo se inserta en la terminal con la combinación Ctrl+D.
Primera entrada
Bien, finalmente me decidí a hacer otro blog, pero especializado en temas relacionados con GNU/Linux... y helo aquí.
Ciertamente no tengo mucho tiempo para hacer publicaciones demasiado elaboradas, así que trataré que sean concisas pero útiles.
Ciertamente no tengo mucho tiempo para hacer publicaciones demasiado elaboradas, así que trataré que sean concisas pero útiles.
Suscribirse a:
Entradas (Atom)