103.3 Lección 2
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
103 Comandos GNU y Unix |
Objetivo: |
103.3 Gestión básica de archivos |
Lección: |
2 de 2 |
Introducción
Cómo encontrar archivos
A medida que utiliza su máquina, los archivos crecen progresivamente en número y tamaño. A veces se hace difícil localizar un archivo en particular. Afortunadamente, Linux proporciona find
para buscar y localizar archivos rápidamente. find
usa la siguiente sintaxis:
find STARTING_PATH OPTIONS EXPRESSION
STARTING_PATH
-
define el directorio donde comienza la búsqueda.
OPTIONS
-
controla el comportamiento y agrega criterios específicos para optimizar el proceso de búsqueda.
EXPRESSION
-
define la consulta de búsqueda.
$ find . -name "myfile.txt" ./myfile.txt
La ruta de inicio en este caso es el directorio actual. La opción -name
especifica que la búsqueda se basa en el nombre del archivo. myfile.txt
es el nombre del archivo a buscar. Cuando utilice globbing, asegúrese de incluir la expresión entre comillas:
$ find /home/frank -name "*.png" /home/frank/Pictures/logo.png /home/frank/screenshot.png
Este comando encuentra todos los archivos que terminan con .png
comenzando desde el directorio /home/frank/
y dentro de éste. Si no comprende el uso del asterisco (*
), se trata en la lección anterior.
Uso de criterios para acelerar la búsqueda
Use find
para localizar archivos basados en tipo, tamaño u hora. Al especificar una o más opciones, los resultados deseados se obtienen en menos tiempo.
Los cambios para buscar archivos según el tipo incluyen:
-type f
-
búsqueda de archivos.
-type d
-
búsqueda de directorio.
-type l
-
búsqueda de enlaces simbólicos.
$ find . -type d -name "example"
Este comando encuentra todos los directorios en el directorio actual y dentro de éste, que tienen el nombre example
.
Otros criterios que podrían usarse con find
incluyen:
-name
-
realiza una búsqueda basada en el nombre dado.
-iname
-
búsquedas basadas en el nombre, sin embargo, las mayúsculas y minúsculas no son importantes (es decir, el caso de prueba
myFile
es similar aMYFILE
). -not
-
devuelve los resultados que no coinciden con el caso de prueba.
-maxdepth N
-
busca en el directorio actual así como en los subdirectorios
N
niveles de profundidad.
Localización de archivos por hora de modificación
find
también permite filtrar una jerarquía de directorios en función de cuándo se modificó el archivo:
$ sudo find / -name "*.conf" -mtime 7 /etc/logrotate.conf
Este comando buscaría todos los archivos en todo el sistema de archivos (la ruta de inicio es el directorio raíz, es decir, /
) que termina con los caracteres .conf
y se ha modificado en los últimos siete días. Este comando requeriría privilegios elevados para acceder a los directorios comenzando en la base de la estructura de directorios del sistema, de ahí el uso de sudo
aquí. El argumento pasado a mtime
representa el número de días desde la última modificación del archivo.
Ubicar archivos por tamaño
find
también puede localizar archivos por tamaño. Por ejemplo, buscando archivos más grandes que 2G
en /var
:
$ sudo find /var -size +2G /var/lib/libvirt/images/debian10.qcow2 /var/lib/libvirt/images/rhel8.qcow2
La opción -size
muestra archivos de tamaños correspondientes al argumento pasado. Algunos argumentos de ejemplo incluyen:
-size 100b
-
archivos de exactamente 100 bytes.
-size +100k
-
archivos de más de 100 kilobytes.
-size -20M
-
archivos de menos de 20 megabytes.
-size +2G
-
archivos de más de 2 gigabytes.
Note
|
Para encontrar archivos vacíos podemos usar: |
Actuando sobre el conjunto de resultados
Una vez que se realiza una búsqueda, es posible realizar una acción en el conjunto resultante utilizando -exec
:
$ find . -name "*.conf" -exec chmod 644 '{}' \;
Esto filtra cada objeto en el directorio actual (.
) y dentro de éste para los nombres de archivo que terminan en x.conf
y luego ejecuta el comando chmod 644
para modificar los permisos de archivo en los resultados.
Por ahora, no se preocupe con el significado de '{}'\;
ya que se discutirá más adelante.
Usar grep
para filtrar archivos basados en contenido
grep
se usa para buscar la aparición de una palabra clave.
Considere una situación en la que debemos encontrar archivos basados en el contenido:
$ find . -type f -exec grep "lpi" '{}' \; -print ./.bash_history Alpine/M helping/M
Esto buscaría cada objeto en la jerarquía de directorio actual (.
) en archivos (-type f
) y luego ejecuta el comando grep "lpi"
para cada archivo que satisfaga las condiciones. Los archivos que coinciden con estas condiciones se imprimen en la pantalla (-print
). Las llaves ({}
) son un marcador de posición para los resultados de la búsqueda find
. Los {}
están encerrados entre comillas simples ('
) para evitar pasar archivos grep
con nombres que contengan caracteres especiales. El comando -exec
se termina con un punto y coma (;
), que se debe escapar (\;
) para evitar la interpretación por parte del shell.
Agregar la opción -delete
al final de una expresión eliminaría todos los archivos que coincidan. Esta opción debe usarse cuando esté seguro de que los resultados solo coinciden con los archivos que desea eliminar.
En el ejemplo a continuación, find
localiza todos los archivos en la jerarquía comenzando en el directorio actual y luego elimina todos los archivos que terminan con los caracteres .bak
:
$ find . -name "*.bak" -delete
Archivado de archivos
El comando tar
(archivo y compresión)
El comando tar
, abreviatura de “tape archive (r)”, se utiliza para crear archivos tar convirtiendo un grupo de archivos en un archivo. Los archivos se crean para mover o respaldar fácilmente un grupo de archivos. Piense en tar
como una herramienta que crea un pegamento sobre el cual los archivos se pueden adjuntar, agrupar y mover fácilmente.
tar
también tiene la capacidad de extraer archivos tar, mostrar una lista de los archivos incluidos en el archivo y agregar archivos adicionales a un archivo existente.
La sintaxis del comando tar
es la siguiente:
tar [OPERATION_AND_OPTIONS] [ARCHIVE_NAME] [FILE_NAME(S)]
OPERATION
-
Solo se permite y requiere un argumento de operación. Las operaciones más utilizadas son:
--create
(-c
)-
Crea un nuevo archivo tar.
--extract
(-x
)-
Extrae todo el archivo o uno o más archivos de un archivo.
--list
(-t
)-
Muestra una lista de los archivos incluidos en el archivo.
OPTIONS
-
Las opciones más utilizadas son:
--verbose
(-v
)-
Muestra los archivos procesados por el comando
tar
. --file=archive=name
(-f archive-name
)-
Especifica el nombre del archivo.
ARCHIVE_NAME
-
El nombre del archivo.
FILE_NAME (S)
-
Una lista de nombres de archivos separados por espacios que se extraerán. Si no se proporciona, se extrae todo el archivo.
Crear un archivo
Supongamos que tenemos un directorio llamado stuff
en el directorio actual y queremos guardarlo en un archivo llamado archive.tar
. Ejecutaríamos el siguiente comando:
$ tar -cvf archive.tar stuff stuff/ stuff/service.conf
Esto es lo que realmente significan esos parámetros:
-c
-
Crea un archivo.
-v
-
Muestra el progreso en la terminal mientras se crea el archivo, también conocido como modo “verbose”.
-v
siempre es opcional en estos comandos, pero es útil. -f
-
Permite especificar el nombre de archivo del archivo.
En general, para archivar un único directorio o un único archivo en Linux, utilizamos:
tar -cvf NAME-OF-ARCHIVE.tar /PATH/TO/DIRECTORY-OR-FILE
Note
|
|
Para archivar múltiples directorios a la vez, se especifican todos los directorios delimitándolos por un espacio en la sección /PATH/TO/DIRECTORY-OR-FILE
:
$ tar -cvf archive.tar stuff1 stuff2
Esto produciría un archivo de stuff1
y stuff2
en archive.tar
Extraer un archivo
Podemos extraer un archivo usando tar
:
$ tar -xvf archive.tar stuff/ stuff/service.conf
Esto extraerá el contenido de archive.tar
en el directorio actual.
Este comando es el mismo que el comando de creación de archivo utilizado anteriormente, excepto el modificador -x
que reemplaza al modificador -c
.
Para extraer el contenido del archivo en un directorio específico, usamos -C
:
$ tar -xvf archive.tar -C /tmp
Esto extraerá el contenido de archive.tar
al directorio /tmp
.
$ ls /tmp stuff
Comprimiendo con tar
El comando GNU tar
incluido en las distribuciones de Linux puede crear un archivo .tar
y luego comprimirlo con la compresión gzip
o bzip2
en un solo comando:
$ tar -czvf name-of-archive.tar.gz stuff
Este comando crearía un archivo comprimido usando el algoritmo gzip
(-z
).
Si bien la compresión gzip
se usa con mayor frecuencia para crear archivos .tar.gz
o .tgz
, tar
también admite la compresión bzip2
. Esto permite la creación de archivos comprimidos bzip2
, a menudo llamados archivos .tar.bz2
, .tar.bz
o .tbz
.
Para hacerlo, reemplazamos -z
por gzip
con -j
por bzip2
:
$ tar -cjvf name-of-archive.tar.bz stuff
Para descomprimir el archivo, reemplazamos -c
por -x
, donde x
significa “extract”:
$ tar -xzvf archive.tar.gz
gzip
es más rápido, pero generalmente se comprime un poco menos, por lo que se obtiene un archivo algo más grande. bzip2
es más lento, pero se comprime un poco más, por lo que se obtiene un archivo algo más pequeño. Sin embargo, en general, gzip
y bzip2
son prácticamente lo mismo y ambos funcionarán de manera similar.
Alternativamente, podemos aplicar la compresión gzip
o bzip2
usando el comando gzip
para las compresiones gzip
y el comando bzip
para las compresiones bzip
. Por ejemplo, para aplicar la compresión gzip
, use:
gzip FILE-TO-COMPRESS
gzip
-
crea el archivo comprimido con el mismo nombre pero con un final
.gz
. gzip
-
elimina los archivos originales después de crear el archivo comprimido.
El comando bzip2
funciona de manera similar.
Para descomprimir los archivos, usamos gunzip
o bunzip2
dependiendo del algoritmo utilizado para comprimir un archivo.
El comando cpio
cpio
significa “copy in, copy out” (copiar dentro, copiar fuera). Se utiliza para procesar archivos de almacenamiento como archivos .cpio
o .tar
.
cpio
realiza las siguientes operaciones:
-
Copiar archivos a un archivo.
-
Extraer archivos de un archivo.
Toma la lista de archivos de la entrada estándar (principalmente salida de ls
).
Para crear un archivo cpio
, utilizamos:
$ ls | cpio -o > archive.cpio
La opción -o
indica a cpio
que cree una salida. En este caso, el archivo de salida creado es archive.cpio
. El comando ls
lista el contenido del directorio actual que se archivará.
Para extraer el archivo utilizamos:
$ cpio -id < archive.cpio
La opción -i
se usa para realizar el extracto. La opción -d
crearía la carpeta de destino. El caracter <
representa la entrada estándar. El archivo de entrada a extraer es archive.cpio
.
El comando dd
dd
copia datos de una ubicación a otra. La sintaxis de la línea de comandos de dd
difiere de muchos otros programas de Unix, utiliza la sintaxis option=value
para sus opciones de línea de comandos en lugar de los formatos estándar GNU -option value
o --option=value
:
$ dd if=oldfile of=newfile
Este comando copiará el contenido de oldfile
en newfile
, donde if=
es el archivo de entrada y of=
se refiere al archivo de salida.
Note
|
El comando |
dd
también se utiliza para cambiar datos a mayúsculas/minúsculas o escribir directamente en dispositivos de bloque como /dev/sdb
:
$ dd if=oldfile of=newfile conv=ucase
Esto copiaría todo el contenido de oldfile
en newfile
y capitalizaría todo el texto.
El siguiente comando hará una copia de seguridad de todo el disco duro ubicado en /dev/sda
en un archivo llamado backup.dd
:
$ dd if=/dev/sda of=backup.dd bs=4096
Ejercicios Guiados
-
Considere la siguiente lista:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
¿Qué tipo de archivos generaría este comando?
-
¿En qué directorio comienza la búsqueda?
-
-
Un usuario desea comprimir su carpeta de respaldo. Él usa el siguiente comando:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
¿Qué opción falta para comprimir la copia de seguridad utilizando el algoritmo
gzip
?
Ejercicios Exploratorios
-
Como administrador del sistema, es necesario realizar verificaciones regulares para eliminar archivos voluminosos. Estos voluminosos archivos se encuentran en
/var
y terminan con una extensión.backup
.-
Escriba el comando, usando
find
, para localizar estos archivos: -
Un análisis de los tamaños de estos archivos revela que varían de
100M
a1G
. Complete el comando anterior con esta nueva información, para que pueda ubicar esos archivos de respaldo que van desde100M
a1G
: -
Finalmente, complete este comando, con la acción de eliminación para que se eliminen estos archivos:
-
-
En el directorio
/var
, existen cuatro archivos de respaldo:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Usando
tar
, especifique el comando que crearía un archivo con el nombredb-first-quarter-2018.backup.tar
: -
Usando
tar
, especifique el comando que crearía el archivo comprimido y comprímalo usandogzip
. Tenga en cuenta que el nombre del archivo resultante debe terminar con.gz
:
-
Resumen
En esta sección, aprendió:
-
¿Cómo encontrar archivos con
find
? -
¿Cómo agregar criterios de búsqueda basados en el tiempo, tipo de archivo o tamaño al proporcionar un argumento para
find
? -
¿Cómo actuar en un conjunto devuelto?
-
¿Cómo archivar, comprimir y descomprimir archivos usando
tar
? -
Procesar archivos con
cpio
. -
Copiar archivos con
dd
.
Respuestas a los ejercicios guiados
-
Considere la siguiente lista:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
¿Qué tipo de archivos generaría este comando?
Directorios.
-
¿En qué directorio comienza la búsqueda?
/home/frank/Documents
-
-
Un usuario desea comprimir su carpeta de respaldo. Él usa el siguiente comando:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
¿Qué opción falta para comprimir la copia de seguridad utilizando el algoritmo
gzip
?Option
-z
.
Respuestas a ejercicios exploratorios
-
Como administrador del sistema, es necesario realizar verificaciones regulares para eliminar archivos voluminosos. Estos voluminosos archivos se encuentran en
/var
y terminan con una extensión.backup
.-
Escriba el comando, usando
find
, para localizar estos archivos:$ find /var -name *.backup
-
Un análisis de los tamaños de estos archivos revela que varían de
100M
a1000M
. Complete el comando anterior con esta nueva información, para que pueda ubicar esos archivos de respaldo que van desde100M
a1000M
:$ find /var -name *.backup -size +100M -size -1000M
-
Finalmente, complete este comando, con la acción de eliminación para que se eliminen estos archivos:
$ find /var -name *.backup -size +100M -size -1000M -delete
-
-
En el directorio
/var
, existen cuatro archivos de respaldo:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Usando
tar
, especifique el comando que crearía un archivo con el nombredb-first-quarter-2018.backup.tar
:$ tar -cvf db-first-quarter-2018.backup.tar db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Usando
tar
, especifique el comando que crearía el archivo comprimido y comprímalo usandogzip
. Tenga en cuenta que el nombre del archivo resultante debe terminar con.gz
:$ tar -zcvf db-first-quarter-2018.backup.tar.gz db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-