“¿Cómo usar find en Linux?”, “¿Cómo encontrar cosas en Linux?”, “¿Cómo buscar en Linux?”, entre otras preguntas, son las que naturalmente nos formularemos tarde o temprano. Sin más preambulos, vamos a estudiar el comando find.
 
1. Uso básico de find:

Lo primero es que si usted ejecuta find sin pasarle ningún argumento, intentará encontrar todos los directorios, subdirectorios y ficheros a partir del lugar donde lo ejecute.

Ejecutarlo sin argumentos no tendría mucha utilidad. El primer argumento que deberiamos pasarle debe ser la ruta donde se ejecutará la busqueda y, como segundo argumento, el nombre del fichero que queremos buscar.

Ejemplo:
Digamos que quiero buscar un fichero llamado pepito.txt , en mi directorio HOME. Haría algo como lo siguiente:

$ find /home/jespinal/ -name "pepito.txt"

En el ejemplo anterior, /home/jespinal es el nombre de mi directorio HOME, mientras que pepito.txt es el nombre del fichero, el cual escribimos entre comillas (“”), aunque esto último no es obligatorio a menos que usted use carácteres comodines como ‘*’ o ‘?’, los cuales podrían ser interpretados por el intérprete de comandos. No obstante, es buena práctica escribir el texto que buscamos en comillas dobles.

 

2. Uso intermedio de find:

Puede darse el caso donde no sabemos exactamente el nombre del fichero, sino que solo recordamos parte de este, por ejemplo ‘pep‘; y no solo eso, sino que tampoco sabemos donde está ubicado exactamente.

Ya que ciertamente el fichero estará en un subdirectorio en algún lugar debajo de nuestro directorio raíz ( / ), empezaremos la busqueda a partir ahí y debido a que desconocemos el nombre exacto del fichero, le proporcionamos a find lo que sabemos hasta ahora.

$ find / -name "*pep*"

Nota: fíjese que tanto delante de ‘pep’ como detrás de este, hemos colocado un asterisco ( * ). El asterisco básicamente significa ‘cualquier cosa’, o ‘cualquier combinación de texto’.

Estamos indicándole a find que busque a partir de / (root) algo (ya sea fichero o directorio) cuyo nombre comience con ‘cualquier cosa’, seguida de los caracteres ‘pep’, seguido de cualquier otra combinación de caracteres.

Ya que entre los valores que podría representar el asterisco, está incluida la posibilidad de una cadena de texto vacía; es decir, si aparece un fichero (o directorio) llamado pepsi.txt, sipep.txt, pep.txt, sopepto.txt, entonces find podrá encontrarlo ya que todos coinciden con los argumentos de busqueda que utilizamos.

 

3. Uso semi-avanzado de find

El comando find es bastante flexible en cuanto a la cantidad de argumentos de búsqueda que acepta. Imagine que quiere ver los ficheros regulares que tiene en su directorio HOME. Para eso podríamos utilizar el argumento ‘-type f’.

La tabla de posibles tipos de ficheros es la siguiente:

b bloque especial
c caracter especial
d directorio
p tuberia (pipe)
f fichero regular
l vínculo simbólico
s socket
D Puerta (Solaris)

Para el ejemplo anterior, tendríamos que ejecutar lo siguiente:

$ find /home/jespinal –type f

 
4. Algunos ejemplos prácticos

a. Buscar a partir del directorio raíz todos los ficheros regulares cuyo nombre termine en .log

$ find / –type f -name "*.log"

b. Buscar a partir del directorio raíz todos los ficheros terminados en .tmp y eliminarlos

$ find / –type f -name "*.tmp" -delete

c. Encontrar en el directorio actual ( . ) los ficheros regulares, y copiarlos a /tmp

$ find . –type f –exec cp ‘{}’ /tmp \;

Nota: cuando find encuentra algún resultado en la búsqueda, su nombre es sustituido por los carácteres '{}', de modo que cuando hacemos el ‘cp {} /tmp‘ , es lo mismo que si hicieramos (uno por uno) un ‘cp fichero.txt /tmp‘ o ‘cp fichero_regular.zip /tmp‘, etc.

Otro dato muy importante, es que para poder ejecutar alguna orden utilizando los nombres de los ficheros que find encuentra, usted necesita utilizar -exec.

Los argumentos que se le proporcionan a find, utilizando -exec deben ser terminados con un ‘;’.

En el ejemplo anterior usted vio que utilicé \; para poder ‘escapar’ ese carácter. Ya que las ordenes que le damos a nuestro sistema en la línea de comandos también son separados por ‘;’, debemos hacer que la el intérprete de comandos ignore el ‘;’ y se lo pase a find

Ej. si ejecutamos

$ clear; cd /tmp; ls

estos comandos serán ejecutados uno a continuación del otro, en el orden que usted los escribió, separados por ‘;‘ por nuestro sistema. Al utilizar \; , entonces bash no lo interpretá y se lo pasa directamente a find.

d. Encontrar en el directorio actual los ficheros (de cualquier tipo) que tengan permisos 644

$ find . -perm 664

e. Encontrar en el directorio /usr/src los archivos cuyo nombre terminen en .c (código fuente) y cuyo tamaño sea mayor a 100k, e imprimirlos (en pantalla).

$ find /usr/src -name ‘*.c’size +100k -print

Nota: fíjese que nuevamente he utilizado el carácter comodín ( * ) dentro de comillas, para evitar que el shell lo expanda (interprete).

Finalmente, me despido esperando que este artículo haya sido de utilidad para usted.

A cualquiera le podría pasar que olvide su contraseña de root. Puede sonar extraño, pero, si usas diferentes contraseñas en diferentes sitios, esto es una posibilidad.

En todo caso, si esto te ha sucedido asumo que estás en una urgencia y no quieres mucha palabrería, así que veamos cómo recuperar tu contraseña de root en Linux: (Asumo que estás usando Slackware Linux, tambien. Si ese no es tu caso, tambien daré notas de como hacerlo en una distribución tipo RedHat)

(more…)

Cómo comprimir archivos, cómo descomprimir archivos en Linux, hacer backups, etc, son, sin duda alguna, tareas esenciales tanto para un usuario normal como para un administrador de sistemas.

En esta ocasión veremos como comprimir, descomprimir, o hacer backups. En fin, estaremos viendo cómo usar el comando tar en Linux.

NOMBRE
       tar – La version GNU de la utilidad para archivar

SINOPSIS
       <strong>tar</strong>  [  –  ]  A  –catenate –concatenate | c –create |
          d –diff –compare | r –append | t  –list | u –update |
          x -extract –get [ –atime-preserve ] [ -b, –block-size  N  ]
          [  -B, –read-full-blocks ] [ -C, –directory DIR ]
          [ –checkpoint    ] [ -f, –file [HOSTNAME:]F ] [ –force-local   ]
          [ -F, –info-script F –new-volume-script F ] [ -G,  –incremental  ]
          [ -g,  –listed-incremental F ] [ -h, –dereference ]
          [ -i, –ignore-zeros ] [ -j, –bzip2 ] [ –ignore-failed-read ]
          [ -k, –keep-old-files ] [ -K, –starting-file F ]
          [ -l,  –one-file- system  ]  [  -L, –tape-length N ]
          [ -m, –modification-time ] [ -M, –multi-volume ]
          [ -N, –after-date DATE, –newer DATE ]
          [ -o, –old-archive, –portability ] [ -O, –to-stdout ]
          [ -p,  –same-permissions, –preserve-permissions ]
          [ -P, –absolute-names ] [ –preserve ] [ -R, –record-number ]
          [ –remove-files  ]  [  -s,  –same-order,  –preserve-order  ]
          [ –same-owner  ] [ –numeric-owner ] [ -S, –sparse ]
          [ -T, –files-from F ] [ –null     ] [ –totals   ]
          [ -v, –verbose ] [ -V, –label NAME ] [  –version   ]
          [  -w,  –interactive, –confirmation  ]  [  -W, –verify    ]
          [ –exclude FILE ] [ -X, –exclude-from FILE ]
          [ -Z, –compress, –uncompress ] [ -z, –gzip, –ungzip ]
          [ –use-compress-program PROG  ]  [ –block-compress ]
          [ -[0-7][lmh] ]
          NombreDeArchivo1 [ NombreDeArchivo2, … NombreDeArchivoN ]
          directorio1 [ directorio2, …directorioN ]
 

Como es obvio, la cantidad de opciones y parametros que acepta el comando ‘tar‘ es sencillamente grotesco como para querer incluir un ejemplo para cada posible combinación; de modo que me limitaré a lo básico -pero esencial-, a lo que realmente (bajo circunstancias normales) van a utilizar.

(more…)

Hoy tendremos la oportunidad de configurar un servidor FTP en Linux.

He elegido VSFTPD (Very Secure FTP Daemon) por varias razones:

– Es muy rápido.
– Es muy seguro.
– Es realmente fácil de configurar

El archivo de configuración trae por defecto las siguientes opciones con las cuales se puede correr el server FTP luego de ser modificadas a tu gusto: (more…)