Especiales Una mirada a la línea de comandos en Linux

Imagen del post Una mirada a la línea de comandos en Linux

Por: Chema Martín

Ingeniero y usuario avanzado de Linux

23 Dec 2009 | 15 comentarios

En Linux, la línea de comandos todavía tiene plena vigencia, y es que es una herramienta muy poderosa que los usuarios avanzados prefieren por encima de la interfaz visual.

En el artículo anterior, vimos una pequeña lista de aplicaciones que considero interesantes y recomendables. En este, mi último artículo de esta serie introductoria a Linux, me gustaría ver algunos conceptos básicos sobre una herramienta tan poderosa como “temida”: La shell. Este artículo será más técnico que los anteriores, pero bueno... ya hay confianza ;-)

Aquellos que, como yo, llegasteis a Linux desde el mundo Windows, posiblemente tengáis olvidada la línea de comandos que tan indispensable era en los días de MS-DOS y Windows 3.x. En Linux, la línea de comandos todavía tiene plena vigencia, y es que es una herramienta muy poderosa que los usuarios avanzados prefieren por encima de la interfaz visual.

Empezaré diciendo que esa línea de comandos de MS-DOS a la que me refería antes poco tiene que ver con la que encontramos en Linux. Existen conceptos básicos tan radicalmente opuestos entre ambas que quizá su similitud visual sea la más real. La principal razón por la que son tan diferentes es porque, como hemos dicho con anterioridad, Linux es un sistema operativo basado en UNIX, y su arquitectura poco tiene que ver con la de DOS. Veamos algunos de los conceptos importantes en torno a la shell de Linux/UNIX.

Terminales

Un terminal virtual es una aplicación que nos da acceso a la línea de comandos. En Linux hay en todo momento siete terminales accesibles, seis de los cuales son pura línea de comandos, siendo el séptimo el que tiene funcionando el entorno visual. Los terminales están numerados, y su nomenclatura es ttyN (numeradas del 1 al 7). Para acceder a ellas, debemos usar una combinación de teclas:

Control+Alt+tecla de función correspondiente al número de terminal virtual que queramos acceder.

Ejemplo: Para acceder a tty1 tecleamos Ctrl + Alt + F1. Podemos ver como la terminal virtual muestra una serie de información, pero está a la espera de que algún usuario introduzca sus credenciales para iniciar esa sesión. Para volver a la interfaz visual, teclead Ctrl + Alt + F7.

También podemos abrir terminales virtuales desde dentro del entorno visual. En Ubuntu existen dos principales pre-instaladas: xterm y gnome-terminal. A la segunda podemos acceder desde el menú Aplicaciones > Accesorios > Terminal. A ambas podemos acceder desde el lanzador de aplicaciones (similar a la entrada “Ejecutar” del menú de inicio de Windows) que podemos abrir con la combinación de teclas Alt + F2. Una vez se abra, veremos una pequeña ventana cuyo título dice “Ejecutar una aplicación”. En el campo de texto habilitado tecleamos “xterm” o “gnome-terminal” (sin comillas).

Es importante recordar que en UNIX y Linux, la sintaxis tiene en cuenta las mayúsculas y minúsculas. Este es un cambio importante respecto a Windows y DOS y se traduce, por ejemplo, en que “Dir1” y “dir1” son directorios diferentes.

Carpetas y más carpetas

En Linux todo es un fichero. Sin embargo, para facilitar la organización del sistema operativo de cara al usuario, existe una estructura de carpetas (que en realidad también son ficheros). No existen conceptos como el de unidad lógica de Windows o DOS (el famoso C: ), por lo que cualquier cambio de localización que queramos llevar a cabo en Linux requerirá movernos a otra carpeta. Pero si no existen las unidades lógicas, ¿cómo accedemos a nuestro disco duro, unidad de CD o USB? Fácilmente, accediendo a las carpetas que les corresponden.

En Linux, un dispositivo externo se “monta”. Una vez montado, es accesible como una carpeta más. Nuestro disco duro se monta por defecto y su punto de montaje, que se denomina “root”, se identifica por el símbolo “/” (de nombre “slash”, que es el opuesto al usado en Windows o DOS, el “backslash” con símbolo “”). Sin embargo, otras unidades como un lector de CD o un USB se montan actualmente en la carpeta “/media”. Al ir precedida del símbolo root, entendemos que dicha carpeta “cuelga” de la raíz.

Veamos algunos comandos muy útiles en cuanto a navegación de carpetas se refiere:

cd – Este comando es uno de los que mas usaremos, y nos permite cambiar de directorio. Ejemplos:

cd / Nos lleva al directorio raíz.

cd /home Nos lleva el directorio donde se almacenan las carpetas personales de los usuarios.

cd Nos lleva a nuestro directorio home

cd - Nos lleva al directorio inmediatamente anterior.

pwd – Este comando imprime en pantalla el nombre del directorio en que nos encontramos.

ls – Este comando lista los contenidos de directorio. Para referenciar al mundo DOS/Windows, este comando se corresponde con “dir”, aunque es muchísimo más potente. Ejemplos:

ls /home Lista los contenidos de la carpeta /home. Al menos deberíamos ver una carpeta con el nombre del usuario que creamos en el momento de la instalación. Si creamos más usuarios, deberíamos ver una carpeta listada por cada uno de ellos.

ls -a Lista todos los ficheros en el directorio actual, incluyendo los ficheros ocultos.

ls -l Muestra los contenidos en forma largo, un formato más completo, que incluye los permisos de cada fichero o directorio.

ls -h Muestra los contenidos de forma más facilmente comprensible a simple vista. Los tamaños de los archivos no se muestran en bits, si no que se muestran en KB , MB o GB.

Tened en cuenta que estas opciones son combinables. Así, ejecutar “ls -alh” nos mostraría todos los contenidos y sus características en formato largo y “human readable”. Por otro lado, sólo estoy listando algunas opciones que utilizo a menudo, pero existen muchas más.

Generalmente podemos ver las opciones y funcionalidad de un archivo con la opción “--help”. También podemos usar el comando man, para ver el manual de cada comando, así:

man ls

man cd

Permisos y dueños

Un concepto que es crítico en Linux, dada su naturaleza multitarea y particularmente multiusuario, es el de permisos, dueños, usuarios y grupos. Cualquier elemento en Linux posee una serie de permisos, pertenece a un usuario y a un grupo.

Analicemos lo que devuelve el comando “ls -lh config_backup.xml”:

-rw-r--r-- 1 user1 user1 4,7K 2009-10-31 22:26 config_backup.xml

Empezando por la izquierda, vemos un primer carácter que nos muestra un guión, lo que quiere decir que es un fichero estándar. En caso de ser un directorio, veríamos la letra “d”. Siguiendo hacia la derecha vemos nueve caracteres a continuación, que deben interpretarse en grupos de tres.

Los primeros tres (rw-) muestran los permisos del dueño del fichero. La letra r sirve para denotar permiso de lectura. La letra w denota permiso de escritura. La letra x, que no vemos en este caso, denotaría el permiso de ejecución.

El segundo grupo (r--) muestra los permisos del grupo del dueño del fichero. En este caso, simplemente permisos de lectura.

El tercer grupo (r--) muestra los permisos de un usuario cualquiera.

Seguidamente encontramos otras dos palabras (user1 user1). En este caso, muestran que el fichero pertenece al usuario user1 y al grupo del mismo nombre. Lo siguiente que vemos es el tamaño del fichero, la fecha y hora de creación, y el nombre.

Hay dos comandos especialmente interesantes en la gestión de dueños y permisos:

chown Permite cambiar el dueño y el grupo al que pertenece un fichero. En la mayor parte de los casos es necesario ser superusuario para completar esta acción. Ejemplos:

sudo chown user2:user2 config_backup.xml Cambia el dueño y grupo a “user2”.

sudo chown user2 config_backup.xml Cambia el dueño a “user2”.

chmod Permite cambiar los permisos de un fichero. Puede requerir impersonarse como el superusuario. Desde mi punto de vista, la manera más cómoda de manejar este comando es usando los valores octales:



r = 4

w = 2

x = 1

De esta forma, se dan varias combinaciones:

rw (lectura y escritura) = 6

rx (lectura y ejecución) = 5

rwx (lectura, escritura y ejecución) = 7





...

Ejemplos:

chmod 755 config_backup.xml Cambia los permisos a:

rwx para el dueño

r-x para el grupo

r-x para un usuario cualquiera

chmod 600 config_backup.xml Cambia los permisos a:

rw- para el dueño

--- para el grupo

--- para un usuario cualquiera

Tuberías y otras herramientas

Obviamente, los comandos que estoy mostrando son muy simples, puesto que esta es una primera toma de contacto. Pero aun así, ¿por qué usar la línea de comandos, que a todas vistas parece mas complicada y “gris” que la interfaz visual, cuando casi todo lo que hemos visto hasta ahora se puede hacer igual en ambas?. Esta pregunta es legítima y correcta, pero como digo, aun no hemos empezado a ver la potencia real de la línea de comandos.

Una de sus herramientas más poderosas está en su capacidad para conectar unos comandos con otros, de forma que podamos completar actividades muy complejas, que nos llevarían mucho esfuerzo y tiempo en la interfaz visual. Estas conexiones se llevan a cabo por lo que se conoce como tuberías, que encauzan el resultado de un fichero y lo convierten en parámetros de entrada para el comando siguiente. Estas conexiones pueden ser tan complejas como nos permita la imaginación.

Para conectar un comando con el siguiente usamos el símbolo “|”, conocido como “pipe” o tubería. Veamos algunos ejemplos:

top | grep firefox Imaginemos que queremos averiguar el consumo de memoria actual de nuestro navegador Firefox. El comando top nos muestra los procesos en ejecución en tiempo real, entre los que se encuentra el navegador web firefox, pero no queremos ver la lista completa, si no el caso particular de Firefox. Cuando conectamos este resultado con el comando grep, que busca el término “firefox”, nos devuelve la línea siguiente:

12783 shred 20 0 389m 123m 28m S 2 3.5 0:37.16 firefox-3.5

Aquí vemos diferentes columnas de información, entre las que se encuentran en porcentaje de uso de CPU y Memoria, 2 y 3,5% respectivamente. Este comando nos muestra un refresco en la información cada pocos segundos. Para salir de él, basta con presionar la tecla “q”.

ls /usr/bin | tail -n 50 | less Ahora imaginemos que buscamos el nombre de un comando, pero no lo recordamos. Sin embargo, creemos que empezaba por “x” o “y”. Con este comando podemos listar los contenidos de la carpeta /usr/bin, que contiene aplicaciones, extraer los 50 últimos y paginarlos para poder visualizar la información fácilmente.

Estos son tan solo dos ejemplos para demostrar la potencia inherente a estas conexiones de comandos, pero como decía antes, el límite lo pone vuestra imaginación.

Otro elemento muy importante es el redireccionamiento de input, output o error. Digamos que podemos manejar y redireccionar los datos que son introducidos a donde queramos, así como el resultado de un comando, o un mensaje de error. Veamos algunos ejemplos:

ls /usr/bin > ls_output Dado que el contenido de la carpeta /usr/bin es muy extenso, podemos enviarlo a un fichero de texto para revisarlo más tarde con calma. Este comando genera el fichero output, que es de texto plano (ya veis que en Linux no es necesario añadir extensiones a los ficheros, el propio sistema operativo detecta el tipo siguiendo otros métodos).

ls /usr/bin | tail -n 60 | grep runner >> xuout En este caso, combinamos conexiones con redireccionamiento mientras buscamos las aplicaciones cuyo nombre contenga la palabra “runner” de entre los últimos 60 programas dentro de la carpeta /usr/bin. Luego los pasamos a un fichero llamado “xuout”. Ya veis que estoy usando “>>” en lugar de “>”. Esto me sirve para crear el fichero si no existe, pero si existe, añade el resultado al final del mismo. Esto es muy práctico cuando queremos almacenar el resultado de nuestros comandos a lo largo del tiempo.

Shell scripting

Como habéis podido comprobar en el apartado anterior, podemos comenzar a incrementar la complejidad de nuestros comandos muy rápidamente, pero también su potencia. En el último ejemplo anterior ya vemos una muestra de algo que no sería tan sencillo llevar a cabo desde un entorno visual, pero como digo, esto son sólo ejemplos muy simples. Es más, la propia shell soporta un lenguaje de scripting con el que podemos realmente programar y dar lugar a rutinas muy complejas y capaces.

Sin embargo, no quiero entrar demasiado en este tema, ya que lo considero complicado y quizá fuera de lugar en un artículo de introducción a la línea de comandos, pero es interesante que sepáis que esta poderosa herramienta está a vuestra disposición. Es más, como suele ser habitual en la comunidad Linux, existen muchas páginas en las que se comparte el código de millares de scripts tipo.

ADVERTENCIA: No ejecutéis scripts ajenos a no ser que entendáis plenamente qué es lo que hacen y podáis garantizar que no van a suponer ningún daño para vuestro sistema operativo y datos.

Conclusión

Este artículo no pretende ser un tutorial sobre la Shell Linux, ni siquiera una guía detallada. Mi idea es mostraros algunas ideas básicas para que tengáis un mejor entendimiento de lo que podemos llegar a conseguir usándola. Para aquellos que ya os hayáis “pegado” con una línea de comandos DOS, probablemente solo necesitáis un periodo de adaptación. Para los que nunca hayais visto una línea de comandos, no os dejeis intimidar por una sintaxis que puede parecer incomprensible. Paciencia y aprendiendo poco a poco. Finalmente, para aquellos que no os guste usar la línea de comandos y no deseéis aprenderla, pues gracias si aun así habéis leído hasta aquí.

En fin, todo llega, y con este artículo termino mi serie introductoria a Linux. Espero que os haya gustado, que os haya servido para aprender cosas que quizá no habíais visto explicadas de una forma sencilla hasta ahora, y sobre todo espero que os haya tentado a sumergiros en el mundo Linux.

Para los interesados, podéis seguir mis devaneos en general y en el mundo Linux en particular desde:

Twitter - http://twitter.com/GodLikeCreature

y en mi blog – http://cristalinux.blogspot.com

Saludos, gracias, y hasta la próxima!

deja tu comentario
15 comentarios

Default-opinion-80x80

19.MAY
16.38

Frases de amor:

Un articulo excelente, con muy buenos aportes, ojala pudiera ayudar un poco más a la duda técnica de gabriel, pero me temo que mis conocimientos de linux son bastante limitados, de ahí que me guste tanto este post. Un saludo!

Responder

Default-opinion-80x80

07.MAY
03.15

mauro:

detestable el auto-refreshing de este sitio!!!

Responder

Default-opinion-80x80

21.JAN
19.28

Gabriel:

@Chema: gracias por tus amables consejos, la verdad estaba muy frustrado. El Hydrogen lo he probado, pero no consigo que Ubuntu me reconozca la batería USB que usa mi hijo para practicar. El problema ha sido reportado en los foros y nadie sabe como arreglarlo (en http://ubuntuforums.org/showthread.php?t=1366660 ). Así que de momento seguiré con el XP. Y poco a poco practicando con el Ubuntu. ¡Gracias!

Responder

Default-opinion-80x80

18.JAN
21.55

Placer Virtual:

Me quedo con la pagina en favoritos para mirarlo con mas detenimiento, buena info

Responder

Default-opinion-80x80

11.JAN
09.58

Chema Martin:

@Camilo: Complicado? No se si te sigo... Yo he usado Opera desde la version 10 y Chrome desde la Beta y ambos han sido tan sencillos como Firefox. Yo utilizo Flash para la navegacion basica, ver videos, etc. No se si tu lo usas para algo mas especifico, pero en mi caso flash en Ubuntu ha sido tan sencillo como en Windows. En cuanto al rendimiento, tienes razon, los videos en ocasiones pueden no tener la fluidez que tienen en Windows, pero tampoco es algo grave para mi. Se mire como se mire, son videos de muy mala calidad en su mayoria, asi que a mi no me molesta si se escapa algun frame que otro. Saludos!

Responder

Default-opinion-80x80

07.JAN
23.11

Camilo:

@Chema Martin: Bueno, si hay algo complicado en Ubuntu es la instalación del plugin de Flash, para lograr que se pueda usar en todos los navegadores (yo prefiero Opera y Chrome, sobre Mozilla). Y después de la instalación, sin duda, el rendimiento es menor que el que se ofrece en Windows, eso hay que reconocerlo.

Responder

Default-opinion-80x80

30.DEC
12.51

Chema Martin:

@Camilo: Una vez más, gracias por tus comentarios. Efectivamente, es una lata que la pagina este recargandose sola continuamente, a mi tambien me pasa. En cuanto a otro articulo, efectivamente pense en multimedia, pero ya habia hablado de muchas aplicaciones de ese tipo y practicamente nada de la linea de comandos, que me parece muy importante. Sobre la incompatibilidad de flash, a que te refieres? Flash 10 funciona sin problemas en todos los navegadores que he probado. Y sobre los comentarios de Gabriel, efectivamente pienso que es simplemente la frustracion inicial hasta que te acostumbras a Linux... Despues lo normal es no volver a mirar atras! ;-) Saludos!

Responder

Default-opinion-80x80

30.DEC
07.40

Camilo:

Hasta ahora me doy cuenta de que este es el ultimo texto que vas a escribir sobre Linux. ¿Creí que ibas a escribir uno mas acerca de multimedia en Linux? El punto mas negro de Ubuntu que hasta ahora he encontrado, especialmente la compatibilidad con Flash.

Sobre lo que comenta Gabriel, es un asunto de perspectiva. Como tu comentabas apenas ha instalado Linux ha querido continuar con las mismas aplicaciones de Windows. Yo en cambio he luchado incansablemente con las diferencias de Windows y con los problemas propios, he intentado sobrellevarme. Además he encontrado una diferencia ultrapositiva en favor de Ubuntu. Mientras que con Windows hay máximo dos formas de resolver un problemas (estoy siendo muy optimista, sin duda) en Ubuntu hay múltiples y muy variadas formas de resolverlas y cientos de personas dispuestas a ayudar ;)

@Gabriel: Para DVD, incluso en Windows, el reproductor "universal" es VLC. Y no solo para DVD sino para cualquier formato de vídeo, no conozco un formato que no lea este programilla. Ademas por la web hay un post hecho de "100 aplicaciones imprescindibles para Ubuntu" sin duda deberias chequearlo porque ayuda muchisimo.

Pdta: ¿Por qué esta página se actualiza automáticamente y sin avisar? Es muy molesto!

Responder

Default-opinion-80x80

29.DEC
22.32

Chema Martin:

@Joaquin: Gracias, espero que el resto de los articulos tambien te gusten, aunque para alguien con conocimientos como tu quiza sean demasiado basicos. Yo tambien comparto contigo ese gusto por resolver problemas (algo que no es posible en Windows, porque si no funciona, no tienes ni idea de que tocar para solucionarlo), pero entiendo que la mayor parte de los usuarios no tienen ese interes. Linux tiene que mejorar ciertos aspectos, pero sobre todo es importante que se entienda el por que de sus limitaciones. Saludos!

Responder

Default-opinion-80x80

28.DEC
15.57

Nepranto:

Saludos Chema, este es primero de sus artículos que leo, aunque de ya conozco los temas de antemano, me parece interesante y ameno. Le echaré un vistazo a los otros.

Llegué a Linux desde Mac, llevo trabando en diseño gráfico y preprensa hace ya tiempo donde el Mac sigue reinando, en casa uso linux, los dos sistemas son muy parecidos, para el resto de la empresa, utilizan windows, resulta muy gracioso cuando pido asistencia a departamento de sistemas y ven que es un mac, porque sus conocimientos se limitan a windows, inventa una serie de excusas. ¿siempre resulta tan difícil para los usuarios de windows explorar otros sistemas operativos como le ocurre a Grabiel?.

A mi me divierte mucho resolver los problemitas de incompatibilidad de hardware que se me presentan, mucho más que jugar Battery 3 :-) .

Hasta luego,
Joaquín.

Responder

deja tu comentario

Si ya eres miembro de Baquía identifícate para dejar tu comentario y añadirlo a tu página personal.

 

showwx showwx

Síguenos

Comunidad ver más

Ver más Directorio

Logo de Imperva

Imperva

Seguridad
Paseo de la Castellana, 95

Logo de Innovae

Innovae

Gestión documental, factura y certificación electrónica
Calle Manuel Tovar 16

Logo de MarketiNet Agencia Interactiva

MarketiNet Agencia Interactiva

Consultoría y servicios
C. Cronos, 20, 28037 Madrid

Logo de Zitralia Seguridad Informática S.L

Zitralia Seguridad Informática S.L

Seguridad
C/ Manuel Tovar 16

Logo de USOWEB

USOWEB

E-Learning
C/ Sotillo 35, 28043 Madrid

Directorio de empresas

Ver más Blogs

FICOD2010

Foro internacional de contenidos digitales

Cloud Computing: De la nube a tu PC

Recopilación de artículos y casos prácticos sobre cloud computing y SaaS, elaborados por expertos y profesionales del sector.

Baquía Mobile

Recopilación de artículos sobre smartphones, elaborados por expertos y profesionales del sector.

baquía-tv

Gonzalo Giráldez, Audienzia: “La tecnología ha acercado y democratizado el mundo de la radio”

Baquía TV entrevista a Gonzalo Giráldez, fundador de Audienzia.

deja tu comentario

otros vídeos

Juanlu

24symbols