Cerramos del 10/08 al 18/08. Los pedidos cursados a partir del 09/08 a las 12.00 hora de España peninsular se tramitarán el 19/08/2024.
Cerramos del 10/08 al 18/08. Los pedidos cursados a partir del 09/08 a las 12.00 hora de España peninsular se tramitarán el 19/08/2024.
  1. Libros
  2. Linux
  3. Herramientas de Linux
Extrait - Linux Principios básicos de uso del sistema (8ª edición)
Extractos del libro
Linux Principios básicos de uso del sistema (8ª edición)
2 opiniones
Volver a la página de compra del libro

Herramientas de Linux

Introducción

Este capítulo presenta una serie de herramientas de Linux que todo usuario debería conocer. A menudo basta con una línea de comandos adecuada para efectuar los mismos tratamientos que un centenar de clics de ratón con un administrador de archivos gráfico.

Al finalizar este capítulo el lector sabrá, entre otras cosas:

  • buscar archivos según ciertos criterios y aplicarles un tratamiento;

  • filtrar el contenido de archivos y las salidas de comandos con expresiones regulares; 

  • ordenar y separar datos;

  • ver parcialmente el contenido de archivos.

find

El comando find permite buscar, en uno o más árboles de directorios, archivos que respondan a ciertos criterios y aplicarles un tratamiento según una acción determinada.

La sintaxis global del comando es:

find ruta(s) parámetro(s) acción 

La sintaxis del comando find no sigue las reglas elementales de sintaxis de los comandos de Linux descritos en el capítulo Inicio de sesión y primeros comandos.

1. Ruta de búsqueda

Se especifica en el comando find una o más rutas de búsqueda; estas rutas son directorios del sistema de archivos y find se encarga de recorrer todo el árbol subyacente en busca de archivos.

Si no se especifica una ruta, find inicia su búsqueda en el directorio actual:

$ ls -R 
.: 
archivo1 archivo2 dir1 dir2 
 
./dir1: 
 
./dir2: 
$ find 
. 
./dir2 
./dir1 
./archivo2 
./archivo1 
$ find . 
. 
./dir2 
./dir1 
./archivo2 
./archivo1 

Cuando se especifican varias rutas, se separan con espacios:

$ find /var/spool/mail . /etc/skel 
/var/spool/mail 
/var/spool/mail/alan 
/var/spool/mail/linus 
/var/spool/mail/richard 
/var/spool/mail/gordon 
/var/spool/mail/eric 
/var/spool/mail/rpc 
/var/spool/mail/ken 
/var/spool/mail/dennis 
/var/spool/mail/javier 
. 
./dir2 
./dir1 
./archivo2 
./archivo1 
/etc/skel 
/etc/skel/.gnome2 
/etc/skel/.bashrc 
/etc/skel/.bash_logout 
/etc/skel/.mozilla 
/etc/skel/.mozilla/plugins 
/etc/skel/.mozilla/extensions 
/etc/skel/.bash_profile 

2. Expresiones de selección

Los criterios de selección, o expresiones, empiezan con un - (guión) seguido por sus parámetros.

Por ejemplo, la expresión -name nomarc pide al comando find que busque sólo los archivos cuyo nombre sea nomarc. La línea de comando completa, para una búsqueda en todo el árbol de Linux, es:

find / -name nomarc 2>/dev/null 

Un usuario normal no tiene los permisos suficientes para acceder a todos los archivos presentes en el sistema. Como por lo general sólo se buscan los archivos a los que se puede acceder, habitualmente se suprimen los mensajes de error del comando find debidos a esta falta de permiso de acceso, redirigiendo la salida de errores estándar al archivo...

grep

El comando grep permite buscar en uno o más archivos, o en la entrada estándar, las líneas correspondientes a un filtro.

La sintaxis general de grep es:

grep opción(es) filtro archivo(s) 

Al utilizar la entrada estándar para filtrar la salida del comando ps, se limita el resultado a las líneas que contienen una cadena de caracteres en particular; por ejemplo, para encontrar rápidamente el PID del proceso sleep:

$ ps -ef  
UID        PID  PPID  C STIME TTY          TIME CMD  
root         1     0  0 09:45 ?        00:00:02 /sbin/init  
root         2     0  0 09:45 ?        00:00:00 [kthreadd]  
root         3     2  0 09:45 ?        00:00:00 [ksoftirqd/0]  
root         4     2  0 09:45 ?        00:00:00 [migration/0]  
root         5     2  0 09:45 ?        00:00:00 [watchdog/0]  
root         6     2  0 09:45 ?        00:00:00 [events/0]  
...  
root      1528     1  0 09:46 ?        00:00:00 crond  
root      1542     1  0 09:46 ?        00:00:00 /usr/sbin/atd  
root      1550     1  0 09:46 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon  
root      1555     1  0 09:46 tty2     00:00:00 /sbin/mingetty /dev/tty2  
root      1557     1  0 09:46 tty3     00:00:00 /sbin/mingetty /dev/tty3  
root      1559     1  0 09:46 tty4     00:00:00 /sbin/mingetty /dev/tty4  
root      1561     1  0 09:46 tty5     00:00:00 /sbin/mingetty /dev/tty5  
root      1565     1  0 09:46 tty6     00:00:00 /sbin/mingetty /dev/tty6  
root      1573  1550  0 09:46 ?        00:00:00 /usr/libexec/gdm-simple-slave...

cut

El comando cut permite extraer columnas o campos seleccionados a partir de su entrada estándar o de archivos.

Extracción de campos

La primera sintaxis del comando cut para extraer campos es:

cut -f campo(s) -d delimitador archivo(s) 

Cuando se especifican varios campos, los números se separan con comas.

Para mostrar sólo el tercero y el sexto campo del archivo /etc/passwd:

$ cat /etc/passwd  
root:x:0:0:root:/root:/bin/bash  
bin:x:1:1:bin:/bin:/sbin/nologin  
javier:x:1000:1000:Javier Olivares:/home/javier:/bin/bash  
linus:x:1004:1000:Linus Torvalds:/home/linus:/bin/bash  
richard:x:1005:1000:Richard M. Stallman:/home/richard:/bin/bash 
ken:x:1001:1000:Ken Thompson:/home/ken:/bin/bash  
dennis:x:1002:100:Dennis Ritchie:/home/dennis:/bin/bash  
eric:x:1006:1000:Eric S. Raymond:/home/eric:/bin/bash  
alan:x:1007:1000:Alan Cox:/home/alan:/bin/bash  
gordon:x:1003:1000:Gordon E. Moore:/home/gordon:/bin/bash  
$ cut -f 3,6 -d : /etc/passwd  
0:/root  
1:/bin  
1000:/home/javier  
1004:/home/linus  
1005:/home/richard  
1001:/home/ken  
1002:/home/dennis  
1006:/home/eric  
1007:/home/alan  
1003:/home/gordon 

Extracción de columnas

El separador de campos es un carácter definido por la opción -d, por lo que no es posible...

sort

El comando sort ordena las líneas de un archivo (o su entrada estándar) y devuelve el resultado en su salida estándar.

Su sintaxis general es:

sort -t delimitador -k campo.carácter opción(s) archivo 

El archivo de ejemplo frutas utilizado en esta sección es:

manzana.2 
tomate.10 
pera.4 

En su expresión más simple, sort ordena alfabéticamente por el primer carácter de cada línea:

$ sort frutas 
manzana.2 
pera.4 
tomate.10 

La clasificación puede empezar a partir de cualquier carácter de cualquier campo en el archivo. Se usa entonces la sintaxis -kn.m donde n es el número de campo y m el número del carácter en el campo. Si el número de carácter se omite, la ordenación se efectuará a partir del primer carácter del campo especificado.

A diferencia del comando cut, el separador de campos predeterminado es uno o más caracteres de espacio. Además, es modificable con la opción -t.

Veamos una clasificación a partir del tercer carácter en el primer campo de cada línea:

$ sort -k1.3 frutas 
tomate.10 
manzana.2 
pera.4 

Veamos una clasificación sobre el primer carácter del segundo campo de cada línea:

$ sort -t. -k2 frutas 
tomate.10 
manzana.2 
pera.4 

La opción -n clasifica los campos numéricos...

head, tail

Los comandos head y tail permiten respectivamente mostrar sólo el principio o el final de los archivos.

El comando head muestra de modo predeterminado las diez primeras líneas de un archivo. Se puede modificar esta opción a las N primeras líneas del archivo con la sintaxis head -nN.

El comando tail muestra de modo predeterminado las diez últimas líneas de un archivo. Se puede cambiar este valor de dos modos:

tail -nN

muestra las N últimas líneas del archivo.

tail -n+N

muestra desde la línea N hasta el final del archivo.

En resumen, se obtiene:

images/1201head.png

El comando tail se usa también para consultar archivos escritos al mismo tiempo por otros procesos, como archivos de registro. La opción -f le indica al comando tail que lea las nuevas líneas del archivo de entrada a medida que estén disponibles; esto permite controlar el crecimiento del archivo.

Sólo se puede utilizar la opción -f de tail especificando un archivo. Es imposible emplearlo cuando el comando lee los datos en su entrada estándar.

Para detener la visualización con la opción -f, se interrumpe el comando con las teclas [Ctrl]+[c].

Ejercicios

Ejercicio 1

Cuente el número de subdirectorios presentes en /etc.

Solución

Bastará con listar los archivos con sus detalles (ls -l) para mostrar su tipo (primer carácter de cada línea devuelta) y de filtrar las líneas que comiencen con el carácter d (grep ’^d’).

Las lineas correspondientes a los subdirectorios de /etc podrán entonces ser contadas empleando el comando wc -l o la opción -c de grep:

[javier]$ ls -l /etc | grep '^d' | wc -l  
137  
[javier]$ ls -l /etc | grep -c '^d'  
137 

Ejercicio 2

Encuentre todos los archivos de los que es propietario en el sistema.

Solución

El comando find con el parámetro de búsqueda -user es el más adecuado para esta tarea:

[javier]$ find / -user javier 2>/dev/null  
/run/media/javier/Fedora-Live-WS-x86_64-23-10  
/run/media/javier/Fedora-Live-WS-x86_64-23-10/EFI  
/run/media/javier/Fedora-Live-WS-x86_64-23-10/EFI/BOOT  
/run/media/javier/Fedora-Live-WS-x86_64-23-10/EFI/BOOT/BOOTX64.EFI 
/run/media/javier/Fedora-Live-WS-x86_64-23-10/EFI/BOOT/fonts  
... 

Una redirección de los mensajes de error a /dev/null se requiere para eliminar todas las alertas referentes a los permisos de acceso a algunos directorios del sistema a los que el usuario no tiene acceso.

Ejercicio 3

Ordene por tamaño los últimos 10 archivos...