LinuxParty
Herramientas básicas para la línea de comandos Linux
La semana pasada publicamos una introducción (http://www.linuxparty.es/index.php/17-educacion/9264-curso-gratis-certificacion-lpic-1-400) a lo que sería el curso (capítulo a capítulo) para obtener* la certificación LPI 1 400, pues bien, hoy traemos el tema 1/10 en el que se abarcarán los siguientes objetivos del examen 101
- 103.1: Trabajar desde la línea de comandos (4)
- 103.2: Procesar flujos de texto mediante filtros (3)
- 103.4: Uso de flujos, pipes, y redirecciones (4)
- 103.7: Buscar archivos de texto mediante expresiones regulares (2)
(*) Siempre será un extra aquella información que podamos recabar de otros libros, enlaces, howtos, etc... Aquí se tratarán los objetivos de una forma 'tímida' aunque en muchos aspectos suficiente para estar preparados.
Notas del autor:
Agradeceré infinitamente vuestro apoyo en www.facebook.com/4adminsys
- Para ampliar los conocimientos podéis pasaros por www.nebul4ck.wordpress.com
Las consolas mas comunes en Linux.
- bsh: Consola Bourne de Unix. En los OS Linux suele ser un enlace simbolico a bash.
- bash: Bourne Again Shell. Basada en la consola Bourne de UNIX. Es la mas común entre los OS Linux.Ofrece complexión de comandos y nombres.
- csh: La consola C original. No se usa (normalmente)
- tcsh: Basada en la antigua consola csh, es bastante popular en Linux aunque no es la consola por defecto. Difiere en algunos aspectos a bash. Ofrece complexión de comandos y nombres.
- ksh: Korn.Escasos usuarios, pero fieles. Diseñada para tener lo mejor de bsh y csh (Bourne y C)
- zsh: Consola Z. Va aún mas allá de Korn, incorporando nuevas funcionalidades y mejoras
Diferencia entre comandos internos y externos del bash
- Los comandos internos son los que vienen integrado con la consola (man bash, para conocer los de bash) algunos de ellos pueden ser: cd, pwd, echo, exec, time, set, exit…
- Los comandos internos y externos tienen comportamientos diferentes y pueden aceptar parámetros diferentes. Por ejemplo con respecto a los enlaces simbólicos, el comando interno pwd mostrará la ruta “destino” del enlace, mientras que el comando externo pwd (/bin/pwd) mostrará el origen.
Advertencia: La cuenta root JAMAS debe de tener en su variable PATH la ruta de directorio actual (./), y con respecto a los usuarios, en caso de que sea necesario, deberá de ir al final del PATH.
Buscar ayuda
Linux posee diferentes ‘canales’ para buscar ayuda de forma local sobre la utilización de sus comandos o incluso mini manuales para realizar una tarea concreta, estamos hablando de las páginas de manuales, de extractos de información o pequeños tutoriales que nos harán la vida mas fácil dentro de un sistema Línux y en concreto con su línea de comandos o shell.
- Páginas man: Las páginas man son archivos de manuales que se encuentran en formato comprimido y localizadas normalmente en el directorio /usr/lib/man o /user/share/man. Para acceder a las páginas de manuales bastará con escribir $man <comando> y se desplegarán mediante un paginador (more o less). Las páginas man suelen estar estructurada por secciones normalmente:
- NOMBRE
- SIPNOSIS
- DESCRIPCIÓN
- OPCIONES
- VEA TAMBIÉN
- DIAGNÓSTICOS
- ARCHIVOS
- ERRORES/BUGS
- HISTORIA
- AUTOR
No todas las páginas man cuentan con todas estas secciones. Podemos buscar ayuda para man desplegando man $man man
- info: Con el comando info podremos leer la documentación de una forma mas fácil que la mostrada por las páginas man. La navegación por la información dada por info suele ser un poco mas complicada, pero si nos encontramos con la info de un comando o utilidad que presenta un menú, podremos pulsar ‘m’ e introducir el nombre de la sección del menú a la que queremos acceder o ‘h’ si necesitamos ayuda para movernos por la página.
- HOWTOs: Son documentos detallados que describen métodos para realizar ciertas tareas, como por ejemplo la configuración de un dispositivo. Un documento HOWTO suele cubrir un tema complejo y por ello tienden a ser extensos. Estos documentos suelen encontrarse bajo el directorio /usr/share/doc/utilidad/howto y normalmente podremos abrirlo con nuestro navegador preferido.
- FAQ: Preguntas mas frecuentes. Como su nombre indica son documentos en los que se detallan las respuestas a las preguntas mas frecuentes que surgen sobre distintas utilidades, comandos o métodos para realizar ciertas tareas. Estos documentos igualmente podremos abrir en su mayor parte con el navegador y localizarlos bajo /usr/share, quizás necesitemos hacer una búsqueda con find para ser mas precisos.
Linux nos ofrece otras dos herramientas de búsqueda de información que en realidad lo que hacen es derivar su información de las páginas de manual anteriormente mencionadas. Estas herramientas son whatis y apropos. Estos comandos aceptan como argumentos nombres de comandos o expresiones (opción -r) y wildcards (opción -w) para buscar en las descripciones de las páginas man y mostrar las páginas man que contienen el patrón. Si usamos ambas herramientas sin opciones apropos suele ofrecer mas resultados ya que no precisa del nombre exacto del comando, es decir si hacemos un whatis passwd y un apropos passwd, whatis se limitará a resultados exactos para passwd mientras que apropos mostrará las páginas man de otros comandos como por ejemplo gpasswd o chgpasswd. Ambas herramientas tienen su símil con el comando man acompañado de opciones, por ejemplo whatis es igual a man -f mientras que apropos es igual a man -k.
Conclusión: Podemos usar man -f o whatis cuando queramos localizar las páginas man existentes para un determinado comando, mientras que apropros y man -k servirán cuando no recordemos el nombre de un comando y podamos ir averiguarlo mediante patrones. También disponemos de pequeños mini tutoriales y FAQ en html, así como información detallada a través del comando info.
Complexión de comandos y atajos de teclado
- Buscar comando en el historial hacia arriba (comandos mas antiguos): Flecha arriba / Control-P
- Buscar comandos en el historial hacia abajo (comandos mas nuevos): Flecha abajo / Control-N
- Buscar comandos en el historial por caracteres: Control-R y escribo caracteres (vuelvo a pulsar Control R para recorrer la lista de comandos que contienen esos caracteres), Control-G para salir de la búsqueda
- Desplazarnos al inicio de una línea: Control-A
- Desplazarnos al final de una línea: Control-E
- Desplazarnos una palabra a la izquierda: Control + Flecha izq. / Esc + B
- Desplazarnos una palabra a la derecha: Control + Flecha Der. / Esc + F
- Borrar un carácter (el que está sobre el cursor): Control-D / Supr
- Borrar todo el texto entre el cursor y el inicio de linea: Control-K
- Borrar todo el texto entre el cursor y el final de linea: Control-X + Retroceso
- Intercambiar o desplazar la letra anterior al cursor un carácter hacia delante: Control-T
- Intercambiar o desplazar la palabra anterior al cursor una palabra hacia delante: Esc+T ; González Mesas, si el cursor está en la M y pulsamos Esc+T ahora quedará Mesas González.
- Cambiar de minúsculas a mayúsculas los caracteres que hay entre el cursor y el final de la palabra: Esc + U
- Cambiar de mayúsculas a minúsculas los caracteres que hay entre el cursor y el final de la palabra: Esc + L
- Cambiar a mayúscula la letra que hay sobre el cursor, si el cursos está en el espacio, se cambiará la primera letra de la siguiente palabra: Esc + C
- Abrir un editor de texto: Control X + Control E
- Limpiar el historial: history -c
- Ejecutar un comando del historial conociendo su número en la lista: !210
Exportar una variable de entorno para la sesión de consola actual:
$export NOM_VAR=valor_variable
Algunos metacaracteres útiles de shell:
- || : Representa un OR
- && : Representa un AND
- ; : Separa dos comandos
Expresiones regulares
Metacaracteres y rangos:
- \ : Sirve para escapar un caracter especial dentro de una expresión regular.
Ejemplo: . (punto) hace referencia a cualquier caracter, \. hace referencia a “.” (punto)
- / : Sirve para acotar una expresión regular:
Ejemplo: /expresión regular/
- ^ : Indica que la línea comienza con un determinado caracter. Dentro de corchetes y al principio su significado es de inversión.
Ejemplo: ^a la línea comienza con el caracter “a”, [^a] la línea comienza con cualquier caracter menos con “a”
- $ : Indica que el final de línea termina con un determinado caracter.
- . (punto) : Hace referencia a cualquier carácter, pero solo a 1. No incluye el salto de línea.
- ? : Hace referencia a 0 o 1 carácter. En expresiones regulares también puede representar la opcionalidad de aparición de uno o varios caracteres.
- + : Referencia a 1 o mas caracteres
- * : Refiere a 0 o mas caracteres
- [] : Referencia a un conjunto de caracteres (expresiones entre corchetes) o rango ( expresiones de rango).
Ejemplo: c[ao]ma (cama o coma), c[1-2A-Z]ma (c2ma, c1-ma, cIma, cLma…)
- () : Al igual que con expresiones aritméticas, sirve para agrupar una parte de la expresión
- | : Significa “opción”.
Ejemplo: cama|coma , la posibilidad de concordar con cama o coma dentro de un texto
- {} : Indica un rango de repetición.
Ejemplo: r{1,2} indica 1 o 2 concurrencias de r
- [:alnum:] : rango alfanumérico. Equivale a [0-9a-zA-Z] incluso es mas apropiado, pues no depende de la codificación del archivo.
- [:alpha:] : rango alfabético [a-zA-Z]
- [:digit:] : Dígitos [0-9]
- [:xdigit:] : Dígitos hexadecimal
- [:lower:] : Minúsculas
- [:upper:] : Mayúsculas
- [:space:] : Espacios
- [:print:] : Imprimibles
- [:graph:] : Gráfico
- La diferencia entre expresiones básicas y extendidas “es simple”, las expresiones básicas no hacen uso de caracteres especiales como ?,+,|, (), {}… por lo que su utilidad se ve disminuida.
- Algunos ejemplos de expresiones regulares:
- [0-9]* : Cadena vacía, 1, 43, 6542, etc…
- ^.*$ : Cualquier línea completa
- [ab]* : a, aaaaaa, aa, bb, b, bbbb….
- (ab)* : a, b, ba, ab, bababa, abab, aaaaabbbbabab…
- ^[0-9]?b : Puede o no (?) empezar por un dígito o por b. Ejemplo 3b, b, 0b…
- ([0-9]+ab)* : El * fuera del paréntesis indica que puede existir una cadena vacia dentro del parentesis, también infinitas a y b, pero el + del corchete obliga a que haya uno o mas digitos númericos. Ejemplo: cadena vacia, 023a, 1aa34bbaa23….
- /^#/ : Cualquier línea que comience por #
- /^$/ : Cualquier línea en blanco
- /}$/ : Cualquier línea que termine con }
- /} *$/ : Cualquier línea que termine con } y tenga 0 o mas espacios
Comandos Capítulo 1
- Comandos para la ayuda de otros comandos
- Redirecciones y canalizadores
- Comandos para combinar archivos
- Comandos para la transformación de archivos
- Comandos para dar formatos a archivos
- Comandos para la mensajería desde línea de comandos
- Comandos para la visualización de archivos
- Comandos para resumir archivos
- Comandos útiles en expresiones regulares
-
LPIC
- Comandos deb y rpm para la administración de paquetes y dependencias.
- Capítulo 2 - Curso LPIC-1 400 - Administración de paquetes, deb y rpm: RPM y Debian
- Capítulo 2 - Curso GRATIS LPIC-1 400 - Herramientas de administración del software: RPM y Debian
- Capítulo 7 - Curso GRATIS LPIC-1 400 - Administrar el sistema 2/2
- Capítulo 7 - Curso GRATIS LPIC-1 400 - Administrar el sistema 1/2
- Capítulo 10 - Curso GRATIS LPIC-1 400 - Proteger el sistema 2/2
- Capítulo 10 - Curso GRATIS LPIC-1 400 - Proteger el sistema 1/2
- Capítulo 9 - Curso GRATIS LPIC-1 400 - El entorno de Consola, Shell Scripts, el Correo Electrónico y uso básico de SQL 2/2
- Capítulo 9 - Curso GRATIS LPIC-1 400 - El entorno de Consola, Shell Scripts, el Correo Electrónico y uso básico de SQL 1/2
- Capítulo 8 - Curso GRATIS LPIC-1 400 - Configuración básica de redes TCP/IP 1/2
- Capítulo 8 - Curso GRATIS LPIC-1 400 - Configuración básica de redes TCP/IP 2/2
- Capítulo 6 - Curso GRATIS LPIC-1 400 - COnfigurar el sistema de ventanas de X, localización y sistema de impresión
- Capítulo 5 - Curso GRATIS LPIC-1 400 - Inicializar sistemas Linux: SysV, Upstart y systemd
- Capítulo 4 - Curso GRATIS LPIC-1 400 - Filesystem y la Administración de archivos
- Capítulo 3 - Curso GRATIS LPIC-1 400 - Instalar, configurar y administrar el hardware del equipo