LPIC

Guía extraoficial de estudio

Archivos por Etiqueta: linux

Las expresiones regulares

El shell nos proporciona una característica que nos ahorra tiempo a la hora de teclear nombre de ficheros con los que operan comandos. La característica se llama generación de ficheros o expansión de nombres y permite utilizar caracteres especiales para especificar grupos de nombres de ficheros.

Podemos encontrar nombre de ficheros que cumplen un determinado patrón, como por ejemplo los que acaben en “.txt” o los que empiecen por “fichero” o los que tienen 3 caracteres. Veamos los tipos de esprexion regular:

Caracteres especiales utilizados:

Carácter Resultado Ejemplo
 . Representa cualquier carácter único, excepto el salto de linea El comando “ls o.o mostrará los ficheros que empiecen por o, contenga cualquier otra letra, y termine por o (oso, oco, olo..).
^ Representa el comienzo de una linea cat /etc/passwd | grep ^u nos devolverá las lineas del fichero que empiecen por “u”.
$ Representa el final de una linea cat /etc/passwd | grep “bash$” nos devolverá las lineas del fichero que acaben en “bash”.
| Separa dos posibles coincidencias hola | adios coincide con hola y adiós
() Rodean subexpresiones. Es utilizado para asegurarse de las expresiones que rodean sean tratadas como un grupo. grep “\(us\)\+” passwd nos devolverá todas las coincidencias que encuentre con la cadena “us“.
\ Si se antepone a un carácter especial, este será tratado como un carácter normal.  Para que la cadena http://www.google.com  sea tratada como
tal, deberemos indica www\.google\.com.
Sino, el punto podria ser igual a cualquier carácter, y nos podría devolver, por ejemplo, wwwagoogleacom.


Expresiones entre corchetes:

 Las expresiones que contengan caracteres rodeados entre corchetes, nos devolverán las cadenas que coincidan con cualquiera de las letras que estén entre los mismos. Por ejemplo, el comando ls C[AEIOU]L nos va a mostar todos los archivos que tengamos en el directorio que se llamen cal, cel, cil, col y cul, y el comando ls [a-zA-z], todos los ficheros que empiecen por minúscula o mayúscula.

Expresión regular Resultado
[] Coincidencia con cualquiera de los caracteres cerrados
[! ] Coincidencia con cualquiera de los caraceres no cerrados
[ – ] Coincidencia con cualquiera de los caracteres del rango

Operadores de repetición:

Se trata de símbolos especiales que se utilizan para denotar cuantas veces debe aparecer un elemento coincidente.

Símbolo Resultado
? Especifica cero o una coincidencia
* Especifica cero o más ocurrencias
+ Coincide con una o mas apariciones

Ejemplos:

La expresión A?B, nos podrá coincidir con AEB, ACB, AB, …..

La expresión version10.*, nos podra coincidir con version101,version102, version1000 ….etc

Comandos para visualizar ficheros (head, tail y less)

Vamos a comentar algunos de los comandos más utilizados para la visualización de ficheros:

Visualizar el inicio de los ficheros con head.

head  fichero.txt nos mostrará las 10 primeras lineas de éste. Esto es útil si necesitemos ver la cabecera de un archivo, por ejemplo. Podemos especificar el número de lineas con el flag -n, o el número de bytes con -c.

Visualizar el final del fichero con tail.

Este comando actúa de la misma manera que head, solo que al revés. Al ejecutar tail fichero.txt el shell nos mostrará las 10 últimas lineas. Este comando es utilizado para examinar la actividad reciente en los ficheros de registro (logs), o en otros fichero a los que haya que añadir datos. También estás disponibles los flags -n y-c.

Recorrer las páginas del fichero con less.

Éste comando no es más que una versión mejorada de more. Posee algunas funcionalidades, como la de poder retroceder por páginas en un fichero, que le hacen más interesante. No obstante, aunque suele venir configurado por defecto en Linux, muchos siguen utilizando more. Cuando ejecutamos este comando sobre un fichero, es posible avanzar o retroceder páginas. Veamos su funcionamiento:

Tecla Resultado
Barra espaciadora Avanza por el fichero
Esc + v Retrocede por el fichero
Flecha arriba y abajo recorre el fichero linea a linea
/palabra_a_buscar Busca la palabra en el documento, hacia adelante.
?palabra_a_buscar Busca la palabra en el documento, hacia atrás.
g+num Nos lleva a la línea especificada, en este caso la 50
q Salir del programa

Bifurcaciones y paso de múltiples argumentos a comandos

Bifurcaciones

tee: este comando se encarga de dividir la entrada estándar para que se muestre en la salida estándar y en tantos ficheros como se desee. Esto es útil cuando no solo se quieren enviar datos hacia una tuberia, sino también guardar una cópia en un archivo. Si este no existe, lo crea, y si existe lo sobrescribirá, siempre y cuando no usemos el flag -a.

Supongamos que queremos ver el contenido de un archivo por pantalla y a su vez guardar el contenido en un fichero:

cat fichero.txt | tee contenido.txt

Generar líneas de comandos

xargs: este comando se utiliza para pasar un gran número de argumentos a otros comandos. En la siguiente instrucción queremos borrar todos los ficheros que terminen en .py de nuestro directorio home:

find ~/ -name *.py | xargs rm

Si a su vez quisiéramos guardar un archivo .log con todos los ficheros que hemos eliminado:

find ~/ -name “*.l” | tee ficheros_borrados.log | xargs rm

Pipes

Empecemos traduciendo la palabra al español:  pipe –> tubería.  Tener claro esto va a ser fundamental para entender su funcionamiento.

Las pipes o pipelines se representan mediante la barra vertical ( | ). Se utilizan para redireccionar la salida estándar de un programa a la entrada estándar de otro. La mejor forma para comprenderlas es viendo un ejemplo.

Supongamos que necesitamos extraer un determinado dato de un fichero. El fichero passwd, situado en /etc, contiene datos sobre los usuarios y grupos definidos del sistema. Ejecutamos cat /etc/passwd para ver su estructura:

at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
avahi:x:105:107:User for Avahi:/var/run/avahi-daemon:/bin/false
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:Daemon:/sbin:/bin/bash
dnsmasq:x:104:65534:dnsmasq:/var/lib/empty:/bin/false
ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
games:x:12:100:Games account:/var/games:/bin/bash
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false
man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash
messagebus:x:101:103:User for D-Bus:/var/run/dbus:/bin/false
mysql:x:60:106:MySQL database admin:/var/lib/mysql:/bin/false
news:x:9:13:News system:/etc/news:/bin/bash
nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
ntp:x:74:102:NTP daemon:/var/lib/ntp:/bin/false
postfix:x:51:51:Postfix Daemon:/var/spool/postfix:/bin/false
pulse:x:106:108:PulseAudio daemon:/var/lib/pulseaudio:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
rtkit:x:103:105:RealtimeKit:/proc:/bin/false
sshd:x:100:101:SSH daemon:/var/lib/sshd:/bin/false
statd:x:102:65534:NFS statd daemon:/var/lib/nfs:/sbin/nologin
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
super:x:1000:100:super:/home/super:/bin/bash
usbmux:x:107:65534:usbmuxd daemon:/var/lib/usbmuxd:/sbin/nologin

Queremos saber si el usuario “super” existe en el sistema, y si es así, que Uid  tiene. Dado que la magnitud de este fichero puede ser muy grande, descartamos la búsqueda “a ojo” y haríamos lo siguiente:

cat /etc/passwd | grep ^super | cut -f3 -d”:”

Hemos usado dos pipes, por lo tanto podemos diferenciar tres bloques:

  • cat /etc/passwd: muestra el contenido del fichero.
  • grep ^super: de las lineas mostradas por el comando anterior, busca la que empiece por “super”.
  • cut -f3 -d”:” : corta el campo 3 de la linea, teniendo en cuenta que delimitamos los campos con “:”

Más adelante veremos mejor el funcionamiento del comando grep y cut, lo que nos debe quedar claro ahora es como hemos entrelazado tres comandos distintos para obtener un resultado, que en este caso será “1000”.

Las pipes pueden tener una longitud arbitraria:

comando uno |comando dos | comando tres […..]

Otro ejemplo interesante podría ser.

grep /bin/bash /etc/passwd | wc -l

En este caso, nos devuelve el número de usuarios que tengan definida la shell bash.

Flujos estándares y su redirección

De entre los diferentes tipos de flujo, definiremos los tres que destacan:

  • Entrada estándar (stdin): Es la utilizada para recoger información. En la mayoría de los casos es a través del teclado.
  • Salida estándar (stdout): Se usa para enviar información al exterior. Suele ser el monitor.
  • Error estándar (stderr) : Es utilizada para llevar los mensajes  de error y de alta prioridad.

Ahora veamos una tabla con los operadores comunes de redirección:

Operador Efecto
> Crea un fichero que contiene la salida estándar. Si el fichero existe, se sobrescribe.
>> Añade al fichero la salida estándar. Si el fichero no existe, se sobrescribe.
2> Crea un fichero con la salida de error estándar. Si el fichero no  existe, se crea.
2>> Añade a un fichero la salida de error estándar. Si el fichero no existe, se crea.
&> Crea un fichero que contiene tanto el error estándar como la salida estándar. Si el fichero existe, se reemplaza.
<> El fichero especificado se  utiliza tanto para la salida estándar como para la entrada estándar.
< El contenido del fichero especificado se envía para utilizarlo como entrada estándar
<< Acepta el texto de las siguientes lineas como entrada estándar.

Veamos ejemplos:

  • Operador “>”:
super@linux-jweh:~> echo envio frase a fichero  >  fichero.txt
super@linux-jweh:~> cat fichero.txt
envio frase a fichero
  • Operador “>>”:

En este ejemplo, vemos como el resultado de ejecutar la orden “ls Descargas” se añade a fichero.txt:

super@linux-jweh:~> ls Descargas >> fichero.txt
super@linux-jweh:~> cat fichero.txt
envio frase a fichero
299859_10150486380139606_800839605_11184435_1607766419_n.jpg
bbgf126.wmv
gbbm12.jpg
gbbm25.jpg
gbbm26.jpg
install-apt4suse.rpm
libapt-pkg-libc6_9-6-2-0.5.15lorg3.2-123.12.i586.rpm
Public
Public.zip
  • Operador “2>”:

Ahora vamos a intentar listar una carpeta que no existe, y enviar los errores a un fichero:

super@linux-jweh:~> ls carpeta_no_existe >> fichero.txt 2>errores.txt
super@linux-jweh:~> cat errores.txt
ls: no se puede acceder a carpeta_no_existe: No existe el fichero o el directorio

Como vemos, no muestra ningún error por pantalla diciendo que la carpeta no existe, ya que hemos redirigido la salida de error al fichero “errores.txt”

  • Operador “2>>”:

Este comando haría exactamente lo mismo que el anterior, solo que las lineas de error se añadirían a las ya existentes.

  • Operador “&>”:

Podríamos decir que este operador actúa como “>” y “2>” a la vez. Vamos a listar una carpeta que existe y otra que no, redirigiendo su salida a fichero.txt.

super@linux-jweh:~> ls carpeta_no_existe Descargas/ &> fichero.txt
super@linux-jweh:~> cat fichero.txt
ls: no se puede acceder a carpeta_no_existe: No existe el fichero o el directorio
Descargas/:
299859_10150486380139606_800839605_11184435_1607766419_n.jpg
bbgf126.wmv
gbbm12.jpg
gbbm25.jpg
gbbm26.jpg
install-apt4suse.rpm
libapt-pkg-libc6_9-6-2-0.5.15lorg3.2-123.12.i586.rpm
Public
Public.zip

Vemos que tanto los errores como el resultado de “ls Descargas” se guardan en el mismo fichero.

  • Operador “<>”:

Utilizamos fichero.txt para tanto para la salida estándar como para la entrada estándar.

super@linux-jweh:~> <> fichero.txt
  • Operador “<“:

En el siguiente ejemplo vemos como cambiamos a al vez la entrada y salida estándar de un programa. Cogemos el contenido de “fichero.txt” y lo enviamos a “fichero2.txt”.

super@linux-jweh:~> cat < fichero.txt > fichero2.txt

Podríamos haber omitido el uso de “<” y en este caso el resultado hubiera sido el mismo. Unix dispone de un gran número de comandos que leen de la entrada estándar, realizan la operación con el texto y escriben en la salida estándar: cat, grep, soft, cut, sed, tr…

  • Operador “<<“:

Hacemos que “programa” acepte la entrada hasta que vea una linea que contiene solo EOF:

 super@linux-jweh:~> programa << EOF
> hola
> EOF

Combinaciones de teclas en la consola de comandos

Vamos a describir algunas de las combinaciones de teclas más útiles que tiene la consola de comandos, que nos van a ayudar a mejorar nuestra productividad y velocidad:

Combinación Resultado         
Ctrl+A/E Desplazar el cursor al principio o final de la linea
Ctrl+flecha izq/der Desplazar el cursor palabra a palabra
Ctrl+l Borra la pantalla (clear)
Ctrl+d Final de archivo EOF – cancela – borra carácter que hay debajo del cursor
Ctrl+c Mata un proceso
Ctrl+z Suspende un proceso
Ctrl+k Borra el texto que hay entre el cursor y el final de la línea
Ctrl+x+retroceso Borra el texto que hay entre el cursor y el principio de la línea
Shift+insert Pega el texto copiado
Ctrl+insert Copia el texto seleccionado
Ctrl+r Comienza una búsqueda hacia atrás de un comando por las letras que introduzcas.
Ctrl+s Comienza una búsqueda hacia adelante de un comando (útil solo si nos hemos pasado pulsando “flecha adelante” para buscar un comando) por las letras que introduzcas.

Para practicar con las  últimas combinaciones de teclas, recordad el comando history (muestra historial de comandos) y history -c (lo borra).

Comandos internos y externos

La diferencia entre estos dos tipos de comando no es más que los internos son los nativos de la consola. Digamos que los externos el intérprete no los sabe ejecutar y para ello requiere su localización en el disco duro. Para encontrarlos, los buscará en una serie de directorios, en concreto aquellos que están indicados en la variable PATH.

Veamos que contiene la variable PATH de mi sistema:

super@linux-jweh:~> echo $PATH
/home/super/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/jvm/jre/bin

Cada directorio separado por ” : ” es un “lugar” donde bash va a buscar dichos comandos externos.

Algunos de los comandos internos de bash son:

  • cd: Comando utilizado para el cambio de directorio de trabajo.
              super@linux-jweh:~> cd /home/super/
              super@linux-jweh:~> pwd
              /home/super
  • pwd: como hemos visto en el ejemplo anterior, este comando muestra por pantalla el directorio de trabajo actual.
              super@linux-jweh:~> pwd
              /home/super
  • echo: Muestra el texto que le sigue. Se podría decir que es como un “printf” en C. En el caso pasarle una variable, muestra su contenido.
                  super@linux-jweh:~> echo hello
  • exec: este comando se utiliza para la ejecución de un programa especificado. Tiene la funcionalidad adicional de ejecutarse junta a la consola, no crea un nuevo proceso. Con esto, cuando finalice la ejecución del programa, finalizará también la consola.
  • time: Muestra el tiempo que tardan en ejecutarse los siguientes procesos:
 [J.F.]$ time ls
1 2 3 back.tar.gz backup.tar
real 0m0.01s
user 0m0.00s
sys 0m0.01s
  • exit: cierra la consola.
Podemos ver más comandos internos ejecutando el comando “help” (también interno) en nuestra consola.

De entre los comandos externos, podríamos citar algunos:

  • ls: sin argumentos,  muestra el contenido del directorio actual. Si le indicamos un directorio, muestra el contenido de dicho directorio.
   super@linux-jweh:~> ls
   bin   Descargas   EOF         Imágenes  Música      Plantillas   Público
   come  Documentos  Escritorio  menu.py   output.txt  public_html  trabajo
   super@linux-jweh:~> ls trabajo/
   copiafitxers.py  formateado   olag    olasaa  olasac  olasa_may   test
   fichero.txt      formateado2  ola.py  olasab  olasad  salida.txt  tabu.txt
  • cp: copia un fichero o directorio.
         super@linux-jweh:~/trabajo> cp formateado formateado_copia
  • mv: mueve un fichero a otro lugar. Si l directorio de destino es el mismo que el de origen, en fichero se renombrará.
        super@linux-jweh:~/trabajo> mv formateado formateado8
  • rm: borra un fichero
        super@linux-jweh:~/trabajo> rm fichero_para_borrar.txt

Presentación LPIC-1

;

Para todas esas personas que deseen obtener la “Linux Professional Institute Certification” y no encuentren material en castellano, o simplemente necesiten una ayudita, voy a crear este blog-guia para intentar ayudarles lo máximo posible. Primero aclarar que se trata de una guía de estudio y no debe ser la única referencia que tengamos. El objetivo es marcar que puntos deberán estudiarse con más fuerza e intentar aclarar vuestras dudas . Para hacerla me voy a basar en el libro “Guía de estudio – exámenes 101 y 102″ de Roderick W. Smith, del todopoderoso Sr. google y demás enlaces que ya iré poniendo durante el desarrollo de la misma.

Actualmente existen tres niveles de certificación:

  • LPIC-1 o Profesional junior en Linux
  • LPIC-2 o Profesional avanzado en Linux
  • LPIC-3 o Profesional senior y expecialista en Linux.

De momento nosotros nos centraremos en la primera.

Aprovecho la presentación para aclarar los pasos que deben seguirse para presentarse a los exámenes 101 y 102 (LPIC-1).

  1. Debemos registrarnos en el LPI para obtener un número ID. ( En la barra de superior del menú tenemos enlaces de interés)
  2. Nos enviarán por correo electrónico el ID, con el que podremos registrarnos en algunas de las dos firmas que lo administran: Thomson Prometric y Pearson VUE .
  3. Deberemos facilitar el nombre, dirección de correo, teléfono, cuando y donde se desea realizar la prueba y el número de la tarjeta de crédito.

Espero que os sirva de ayuda.