104 Dispositivos, sistema de archivos Linux y el estándar de jerarquia de archivos
Particiones y sistema de archivos
las particiones las se pueden crer con fdisk, gdisk o parted
entre otros, siendo fdisk
y gparted
los principales programas en crear particiones y un uso practicamente igual.
Parted se maneja algo diferente pero la esencia es la misma.
sudo parted /dev/sdb
# crear tabla de particiones
(parted) mklabel gpt
# crear partición lnux de 500M
(parted) mkpart
Partition name? []? linux
File system type? [ext2]? ext4
Start? 1
End? 512
# Crear particion forma corta
(parted) mkpart windows ntfs 501 1024
# listar tabla
(parted) print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 500MB 499MB ext4 linux
2 501MB 1024MB 523MB ntfs windows
# Eliminar particion 2
(parted) rm 2
# recuperar particion 2
(parted) rescue 490m 1035m
Information: A ext4 primary partition was found at 99.6MB -> 200MB.
Do you want to add it to the partition table?
Yes/No/Cancel? y
# redimensionar segunda particion
(parted) resizepart 2 2048
Al redimensionar un partición si tiene sistema de archivos hay que redimensionarlo también.
resize2fs /dev/sda2 # redimensionar al max disponible
resize2fs -M /dev/sda2 # redimensionar al min disponible
resize2fs /dev/sda2 100m # redimensionar tamaño indicado
sistema de ficheros
FAT32 VFAT es antiguo y sencillo, pero es el más compatible con cualqiuier sistema operativo o dispositivo hardware. Su inconveniente es que admite como máximo archivos de 4G y particiones de máximo 2T
NTFS actualización de fat32, capaz de soportar archivos mayores de 4G y particiones de 2T. Incluye más funcionalidades como: permisos, cifrado, copias de seguridad, cuotas, etc..
EXT4 ultima version de sistema ext usados en linux. El tamaño de los ficheros puede llegar a los 16TB y el de la partición puede llegar a los 1024PB
XFS soporta todas las funcionalidades de un sistema de ficheros moderno y permite archivos de hasta 8EB y una partición de 16EB
BTRFS Es uno de los mas recientes y su uso crece cada vez más debido a las ventajas que ofrece, entre ellas:
multi-devices
: se puede crear un unico sistema de ficheros en varias particionesmkfs.btrfs /dev/device1 /dev/device2 /dev/device3
Compresión
: se puede montar con la opción-o compress
y los datos se guardan comprimidos de forma transparente al usuarioSubvolumenes
: se puede crear subvolúmenes y snapshots(instantaneas)btrfs subvolume create /mnt/punto-montaje/subvolumen1
- mas información sobre btrfs
Para crearlos sistemas de archivos el comando más utilizado es mkfs
junto a sus diferentes extensiones adecuadas a cada sistema de archivos
mkfs.
mkfs.ext4
mkfs.vfat
mkfs.ntfs
mkfs.btrfs
mkswap
Simplemente hay que indicar que extensión utilizar y en que disco, despues se monta el sistema de archivos donde más conviene
sudo mkfs.ext4 /dev/sdb1
sudo mount -t ext4 /dev/sdb1 /mnt
sudo umount /mnt
Si no se especifica la extensión en
mkfs
se creara el file sistem por defectoext2
mke2fs
admite una amplia gama de opciones y parámetros de línea de comandos. Éstos son algunos de los más importantes. Todos ellos también se aplican a mkfs.ext2
, mkfs.ext3
y mkfs.ext4
:
-b SIZE # establece tamaño de bloques 1024,2048 o 4096
-c # comprueba el dispositivo de destino en busca de bloques defectuosos
-d DIRECTORY # copia en contenido del directorio en la raiz
-F # forzar (peligro)
-L VOLUMEN_LABEL # añadir label al volumen
-n # test de lo que aria. es una prueba
-q # modo silencioso, no produce stdout
-U ID # añadir ID random, time, formato 8-4-4-4-12
-V # vervose
-T # especifica como va a ser usado el fs, tamaño de inodo, ratio, etc...
Para los sistemas de ficheros XFS y FAT, VFAT los para metros son similares pero no iguales.
Ejemplo de btrfs
con dos discos. En el siguiente ejemplo se puede ver como btrfs junta el almacenamiento de dos discos de 1G en 2G de almacenamiento.
sudo mkfs.btrfs -m single -d single /dev/sdb2 /dev/sdc2
btrfs-progs v4.20.1
See http://btrfs.wiki.kernel.org for more information.
Label: (null)
UUID: 673ebbe2-0593-421e-baa1-7427bbdf70c5
Node size: 16384
Sector size: 4096
Filesystem size: 2.00GiB
Block group profiles:
Data: RAID0 204.50MiB
Metadata: RAID1 102.25MiB
System: RAID1 8.00MiB
SSD detected: no
Incompat features: extref, skinny-metadata
Number of devices: 2
Devices:
ID SIZE PATH
1 1022.98MiB /dev/sdb2
2 1022.98MiB /dev/sdc2
# se monta cualquiera de los dos discos
sudo mount -t btrfs /dev/sdb2 /mnt
# se puede ver la suma de capacidad a 2G
sudo df -ht btrfs
Filesystem Size Used Avail Use% Mounted on
/dev/sdb2 2.0G 17M 1.8G 1% /mnt
Creación de sistema swap
sudo mkswap /dev/sdc1 # crear filesistem swap
sudo swapon /dev/sdc1 # activar swap
sudo swapoff /dev/sdc1 # desactivar swap
verificar sistema de ficheros
fsck verifica la integridad del sistema de ficheros. Utiliza un comando distinto dependiendo del tipo de sistema de ficheros a analizar:
-
e2fsck
para familia ext -
dosfsckl
para dos/fat -
reiserfsck
para raiserFS
Opciones:
-A verifica todos los sistemas de fstab
-C indica el progreso
-V salida detallada
-N simular verificación
-f fuerza verificación
-p repara sin preguntar
Para verificar un sistema de ficheros la partición a de estar desmontada obligatoriamente
sudo fsck.ext4 /dev/particion
dumpe2fs muestra información técnica sobre el sistema de ficheros que le pasemos como parametro. es recomendabl usar la opción -h
para mostrar unicamente la información más importante dumpe2fs -h /dev/particion
tune2fs Modifica opciones del sistema de ficheros, es muy extensa y técnica esta orden ya que modificar las opciones del sistema de ficheros puede ser en algunos casos peligroso. Las opciones más sencillas serian:
-l # ver parametros actuales
-c # numero maximo de montajes tras los que se hara una verificación
-i # periodo maximo entre comprobaciones, se usa d,w y m para dia, semana y mes
tune2fs -i 1m /dev/sdb1
-m # porcentaje de espacio reservado para root
-L # estblece etiqueta del volumen
-U # añadir UUID
# cambiar espacio reservado de root a 1% y aññadir label buster
sudo tune2fs -m 1 -L buster /dev/sda3
XFS tiene sus propios comandos para verificar su sistema de archivos:
-
xfs_repair
es el equivalente a fsck, para sistemas XFSxfs_repair /dev/sdaX
-
xfs_db
es una herramienta de depuracion de xfs, contiene sus propios subcomandos -
xfs_fsr
defragmenta el sistema de ficheros, reorganiza sus trozos para que estén juntosxfs_fsr /dev/sdaX
xfs_reapir -n /dev/sda1 # buscar errores
-m N # limita la memoria que puede utilizar repair, default 75% del sistema
-d # reparación de sistemas montados en lectura
-v # vervose
Controlar el montaje de los sistema de archivos
mount monta dispositivos, siempre se usa con permisos de administrador a no ser que se configure algunas acciones para el usuario sin privilegiós.
Sintaxis mount -t <fstype> <device> <mountpoint>
:
- fstype: el sistema de ficheros que se va a montar (ext4, ntfs, etc...)
- device: hace referencia a una partición física. Lo más habitual es que sea un fichero dentro de
/dev
, pero también puede ser un UUID una etiqueta o ruta de un recurso de red. - mountpoint: donde se monta el sistema de archivos, normalmente
/media o /mnt
Opciones de mount
:
mount # sin argumentos, muestra los sistemas montados
-t # filtra por el sistema de archivos indicado ext4,btrfs,ntfs
-a # esto montará todos los sistemas de archivos listados en /etc/fstab
-o # lista de opciones de montaje separadas por comas
-r o -ro # montar en solo lectura
-w o -rw # montar en escritura y lectura
Igual que con mount
sin argumentos vemos todo lo montado el sistema on las opciones, esta información sale del archivo /etc/mtab
umount permite desmontar una partición montada por ejemplo umount /media/usb
modos de identificar una partición
- fichero
/dev/
- UUID
mount -t vfat UUID=14Y6-47TR /media/usb
- etiqueta ( opción -L con mount )
mount -t vfat -L myUsb /media/usb
-a # desmontar todo lo listado en /etc/fstab
-f # forzar el desmontaje
-r # remontar en solo lectura
Tratamiento de archivos abiertos
En ocasiones quieres desmontar un dispositivo y salta el mensaje target is busy
. Esto sucede si hay archivos abiertos. Estos archivos tendran que ser cerrados antes de desmontar el dispositivo.
lsof
es el comando para visualzar los procesos asociados a un dispositivo.
# umount /dev/sdb1
umount: /media/carol/External_Drive: target is busy.
# lsof /dev/sdb1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
evince 3135 carol 16r REG 8,17 21881768 5195 /media/carol/External_Drive/Documents/E-Books/MagPi40.pdf
Montaje en el arranque
/etc/fstab es el archivo donde se guardan los puntos de montaje que se haran al arrancar el sistema
Este es un archivo de texto, donde cada línea describe un sistema de archivos que se va a montar, con seis campos por línea en el siguiente orden:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda5 / ext4 errors=remount-ro 0 1
-
fyle sistem
: hace referencia a una partición o recurso. -
mount point
: Dónde se montará el sistema de archivos. type
: El tipo de sistema de archivos. (ext4, ntfs, xfs, vfat, ...)options
: las opciones para montar un dispositivo, si son varias se separan por comas. Para opciones por defcto se utiliza defaultsdump
: si se utiliza dump para hacer copias de seguridad en esta columna podemos indicar 1 para indicar que se copie la partición o un 0 para ignorarla.pass
: Cuando es distinto de cero, define el orden en el que se comprobarán los sistemas de archivos durante el arranque. Normalmente es cero.
Las diferentes formas de identificar un file system
/dev/sdax # nombre particion
UUID=854f5443... # Uid completo de particion
LABEL=sistema # label de partición
/dev/sr0 # cdrom/dvd
192.168.88.10:/ruta # dispositivo de red nfs
/mnt/imagen.raw # imagen en ruta del sistema
Diferentes opciones de montaje de file sistem.
default
: Englova las siguientes opciones:rw, suid, dev, exec, auto, nouser, and async
ro, rw
: Solo lectura o lectura y escritura.noauto
: no se montara automáticamente en el arranque del sistema ni conmount -a
users
: cualquier usuario puede montar y desmontar una linea con la opción users, indiferentemente quien lo aya montado.user
: puede montar cualquier usuario, pero solo el usuario que lo monta puede desmontarlo.group
: Permite a un usuario montar el sistema de archivos si el usuario pertenece al mismo grupo que posee el dispositivo que lo contiene.exec, noexec
: no se pueden ejecutar archivos en esa partición.async
utiliza bufers para el uso de tareas en el disco,sync
no utiliza bufers y escribe al momento.atime, noatime
: por defecto, cada vez que se lee un archivo, se actualiza la información de tiempo de acceso.-
dev, nodev
: se deben interpretarse los dispositivos de caracteres o bloques en el sistema de archivos -
suid, nosuid
: Permite, o no, que los bits SETUID y SETGID surtan efecto. -
remount
: sta opción no es par/etc/fstab
sino para el comandomount -o remount,ro /dev/sdb1
que remontara un dispositivo en solo lectura
Montaje de discos con Systemd
Systemd también se puede utilizar para gestionar el montaje (y montaje automático) de sistemas de archivos.
Para utilizar esta función de systemd, debe crear un archivo de configuración llamado mount unit. Cada volumen que se va a montar tiene su propia unidad de montaje y es necesario colocarlos en /etc/systemd/system/
.
mnt-external.mount
[Unit]
Description=External data disk
[Mount]
What=/dev/disk/by-uuid/56C11DCC5D2E1334
Where=/mnt/external
Type=ntfs
Options=defaults
[Install]
WantedBy=multi-user.target
Para que funcione correctamente, la unidad de montaje debe tener el mismo nombre que el punto de montaje. En este caso, el punto de montaje es
/mnt/external
, por lo que el archivo debe llamarsemnt-external.mount
.
Despues de esto se debe reiniciar el demonio de systemd e inciar la unidad:
sudo systemctl daemon-reload # recargar systemd
sudo systemctl start mnt-external.mount # iniciar unidad de montaje
sudo systemctl enable mnt-external.mount # habilitar unidad en el arranque
Montaje automático de una unidad de montaje
Las unidades de montaje se pueden montar automáticamente siempre que se acceda al punto de montaje. Para hacer esto, necesita un archivo .automount
, junto con el archivo .mount
que describe la unidad. El formato básico es:
mnt-external.automount
[Unit]
Description=Automount for the external data disk
[Automount]
Where=/mnt/external
[Install]
WantedBy=multi-user.target
Despues de esto se debe reiniciar el demonio de systemd e inciar la unidad:
sudo systemctl daemon-reload # recargar systemd
sudo systemctl start mnt-external.automount # iniciar unidad de montaje
sudo systemctl enable mnt-external.automount # habilitar unidad en el arranque
Administración de los permisos y los propietarios de los archivos
$ ls -l
drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory
-rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg
- La primera columna de la lista muestra el tipo de archivo y los permisos. Por ejemplo, en
drwxrwxr-x
: - El primer caracter,
d
, indica el tipo de archivo. - Los siguientes tres caracteres,
rwx
, indican los permisos del propietario del archivo, también conocido como user ou
. - Los siguientes tres caracteres,
rwx
, indican los permisos del grupo propietario del archivo, también denominadog
. - Los últimos tres caracteres,
r-x
, indican los permisos para cualquier otra persona, también conocidos como otros uo
. - Las columnas tercera y cuarta muestran información de propiedad: respectivamente, el usuario y el grupo que posee el archivo.
Tipos de archivos
La primera letra en cada salida de ls -l
describe el tipo de archivo.
-
(archivo normal)d
(directorio) contiene otros archivos o directorios y ayuda a organizar el sistema de archivos.l
(enlace simbólico)b
(dispositivo de bloque) Este archivo representa un dispositivo virtual o físico, generalmente discos u otros tipos de dispositivos de almacenamiento.c
(dispositivo de caracteres) Este archivo representa un dispositivo físico o virtual. Los terminales/dev/ttyS0
y los puertos serie, son comunes de dispositivo de caracteress
(socket) Los sockets sirven como “conductos” para pasar información entre dos programas.
Comprension de permisos
Primero, el sistema verifica si el usuario actual es el propietario del archivo y, si esto es cierto, solo aplica el primer conjunto de permisos. De lo contrario, comprueba si el usuario actual pertenece al grupo propietario del archivo. En ese caso, solo aplica el segundo conjunto de permisos. En cualquier otro caso, el sistema aplicará el tercer conjunto de permisos.
Esto significa que si el usuario actual es el propietario del archivo, solo los permisos de propietario son efectivos, incluso si el grupo u otros permisos son más permisivos que los permisos del propietario.
Permisos de archivo
r-- # ver que contiene octal 4
-w- # escribir o borrar octal 2
--x # permisos de ejecucion octal 1
Permisos en directorio
r-- # ver que contiene
-w- # escribir o borrar un elemento dentro del directorio
--x # acceder al directorio
Si un usuario tiene el permiso w
en un directorio, el usuario puede cambiar los permisos de cualquier archivo en el directorio (el contenido del directorio), incluso si el usuario no tiene permisos sobre el archivo o si el archivo es propiedad de otro usuario.
Tenga en cuenta que tener permisos de escritura en un directorio o archivo no significa que tenga permiso para eliminar o cambiar el nombre del directorio o archivo.
Modificación de permisos
chmod es el comando para modificar permisos, estos se pueden modificar de dos modos: simbolico y octal.
- En el modo simbolico se especifica
u
usuario,g
grupo,o
others seguido de+, -, =
y los permisos que se asignaran - El modo contal read vale 4, write vale 2, y exec vale 1, en la suma de todo seria
4+2+1 = 7
y siete el valor de permisos a ese campo
# modo simbolico
chmod +r elemento # añade lectura a todos u,g,o
chmod -r elemento # quita lectura a todos u,g,o
chmod ug+rw-x,o-rwx elemento
chmod a=rw- text.txt
# modo octal
chmod 660 elemento
Modificación de propietario
chgrp
cambia de grupo de un elemento ( fichero o directorio )
chown
cambia el usuario y el grupo de uno o más elementos. la opción -R
hace que sea recursivo.
bash
chown usuario:grupo elemento
chown :grupo elemento
chown usuario elemento
información de grupos
getent group # ver grupos disponibles
groups jorge # ver grupos de vun usuario
id
groupmems -g grupo -l # ver usuarios que pertenecen a un grupo ( como root )
Permisos predeterminados
Los permisos predeterminados en el sistema suelen ser 644
para archivos y 755
para directorios.
$ ls -lh testfile
-rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Vienen de user mask umask
que establece los permisos predeterminados.
➜ umask
0022
➜ umask -S
u=rwx,g=rx,o=rx
En la forma octal es confusa, ya que en vez de sumar 4+2+1 = 7
permisos a todo. En este caso se resta, si en la posición others hay un 2 0022
quiere decir que a 7 se le resta 2 quedando de resultado final, un permiso de 5.
# cambiar umask temporalmente
➜ umask 0022
➜ umask u=rwx,g=rx,o=rx
# permanente
echo "umask 0022" >> ~/.bashrc
Para un cambio de umask permanente se han de modificar /etc/bash.bashrc
(para todos) o ~/.bashrc
(para cada usuario)
Tabla de valores en permisos umask
Valor | Permiso para archivos | Permiso para directorios |
---|---|---|
0 |
rw- |
rwx |
1 |
rw- |
rw- |
2 |
r-- |
r-x |
3 |
r-- |
r-- |
4 |
-w- |
-wx |
5 |
-w- |
-w- |
6 |
--- |
--x |
7 |
--- |
--- |
Permisos especiales
Además de los permisos de lectura, escritura y ejecución para usuario, grupo y otros, cada archivo puede tener otros tres permisos especiales que pueden alterar la forma en que funciona un directorio o cómo se ejecuta un programa.
Sticky Bit o bit Adhesivo. Esto se aplica solo a los directorios y no tiene ningún efecto en los archivos normales. En Linux, evita que los usuarios eliminen o cambien el nombre de un archivo en un directorio a menos que sean propietarios de ese archivo o directorio.
Se representa en forma de t
en el campo de others o valor octal de 1
$ ls -ld compartida
drwxr-xr-t 1 jorge jorge 4096 feb 26 12:25 compartida/
# Para asignar este bit a un directoro:
chmod o+t compartida/
chmod 1755 compartida/ # en octal
# Y para quitarlo:
chmod o-t compartida/
chmod 0755 compartida/ # en octal
SetGID o SGID. Esto se puede aplicar a archivos o directorios ejecutables. En archivos, hará que el proceso se ejecute con los privilegios del grupo propietario del archivo. Cuando se aplica a directorios, hará que cada archivo o directorio creado bajo él herede el grupo del directorio principal.
Es decir en un directorio todos los archivos creados en su interior se crearan con el grupo del directorio.
tiene valor octal de dos y se representa por una s
en los permisos de group
$ ls -l compartida
-rwxr-sr-x 1 jorge jorge 31012 2018-08-10 12:25 compartida/
# Para asignar este bit a un fichero:
chmod g+s compartida/
chmod 2755 compartida/ # en octal
# Y para quitarlo:
chmod g-s compartida/
chmod 0755 compartida/ # en octal
Ejemplo:
$ ls -l compartida
-rwxr-sr-x 1 jorge jorge 31012 2018-08-10 12:25 compartida/
# con usuario carol
$ touch compartida/file.txt
$ ls -lh compartida/file.txt
-rw-r--r-- 1 carol jorge 0 Jan 18 17:20 file.txt
SetUID o SUID. Con setuid aplicado en un fichero, dicho fichero se ejecutara en nombre del usuario del fichero. Solo se aplica a archivos y no tiene ningún efecto en los directorios.
Tiene el valor octal 4
y está representado por una s
en los permisos de user
$ ls -l /bin/su
-rwsr-xr-x 1 root root 31012 2015-04-04 10:49 /bin/su
# Para asignar este bit a un fichero:
chmod u+s /bin/su
chmod 4755 /bin/su # en octal
# Y para quitarlo:
chmod u-s /bin/su
chmod 0755 /bin/su # en octal
Enlaces duros y simbolicos
Enlaces simbólicos También llamados enlaces suaves, apuntan a la ruta de otro archivo. Si borra el archivo al que apunta el enlace (llamado target), el enlace seguirá existiendo, pero “deja de funcionar”, ya que ahora apunta a “nada”.
Se puede crear un enlace de dos maneras con ruta completa o parcial, la diferencia es que con la ruta parcial si movemos el fichero softlink a otro directorio, no sabra encontrar el archvo original y dejara de funcionar, en cambio con la ruta completa esto no pasará.
➜ ln -s target.txt softlink
➜ ln -s $PWD/target.txt softlink_full_path
➜ ls -l
lrwxrwxrwx 1 debian debian 10 feb 28 10:08 softlink -> target.txt
lrwxrwxrwx 1 debian debian 38 feb 28 10:16 softlink_full_path -> /home/debian/Descargas/test/target.txt
-rw-r--r-- 1 debian debian 11 feb 28 09:58 target.txt
l crear el softlink vemos que los permisos son totales, pero en realidad se aplicarán los permisos del archivo final.
Enlaces duros Piense en un enlace físico como un segundo nombre para el archivo original. No son duplicados, sino que son una entrada adicional en el sistema de archivos que apunta al mismo lugar (inodo) en el disco.
A diferencia de los enlaces simbólicos, solo puede crear enlaces físicos a archivos, y tanto el enlace como el destino deben residir en el mismo sistema de archivos.
➜ ln TARGET LINK_NAME
➜ ln target.txt /home/carol/Documents/hard_link.txt
➜ ls -li
total 8
792634 -rw-r--r-- 2 debian debian 11 feb 28 09:58 hard_link.txt
792634 -rw-r--r-- 2 debian debian 11 feb 28 09:58 target.txt
En el ejemplo se puede observar que los dos archivos apuntan al mismo mismo inodo 792634
, son dos caminos al mismo punto, y en la file 3 se ve el número de caminos que existen 2
.
Encontrar archivos de sistema
find
Para buscar archivos en un sistema Linux, puede usar el comando find
. Esta es una herramienta muy poderosa, llena de parámetros que pueden adaptarse a su comportamiento y modificar la salida exactamente a sus necesidades.
find [camino] [opciones]
opciones:
-name # nombre de archivo es distingue mayusculas y minusculas
-iname # idem al anterior sin distinguir mayusculas
-type d,f,l # distingue directorios, files, links
-size +/-<n> # busqueda por tamaño k,M,G
-perm [-|/] octal # busqueda por permisos
-user user # busqueda archivos de usuario
-group grupo # busqueda archivos de grupo
-mmin [+/-]n # buscar modificación por minutos, -amin acceso, -cmin cambiado atributos
-mtime [+/-]n # igual anterior pero en dias
-maxdepth n # restringir niveles de subdirectorios
-regextype type -regex # buscar vcon expresiones regulares
-exec <comando> ; # explicado mas abajo
-delete # elimina archivos encontrados (mucho cuidado)
Ejemplos de busqueda:
# por nombre
find . -name '*.jpg'
find /home/carol/images -name '*.jpg'
find . -iname '*al*' -type d
# por permisos o tamaño
find . -size +2M
find . -perm 600
find . -user pedro
find . -group users
# por tiempo
find . -mmin +60 # busca elementos modificadoa hace mas de 60m
find . -mtime -10 # busca elementos modificadoa hace menos de 10 dias
# profundizar solo 2 niveles
find . -maxdepth 2 -name "*.jpg"
./Descargas/foto.jpg
Ejemplo argumento -perm
➜ ll
-rw------- 1 debian debian 0 feb 28 11:13 file1
-r-------- 1 debian debian 0 feb 28 11:13 file2
-rw-rw-r-- 1 debian debian 0 feb 28 11:13 file3
➜ find . -perm 600 # permisos iguales rw- --- ---
./file1
➜ find . -perm -600 # busca que cumplan los activos, es decir rw
.
./file1
./file3
➜ find . -perm /600 # a de cumplir alguno de los activos r o w
.
./file1
./file3
./file2
La opción exec permite definir un ncomando a ejeccutarse para cada resulado de la búsqueda. La cadena {}
se sustituye por el nombre de los ficheros encontrados. El caracter ;
indica la finalización del comando. Tanto {}
como ;
tienen que ir entre comillas ""
# hacer copia de todos los archivos .conf de /etc de menos de 1MiB
find /etc/ -iname '*.conf' -size -1M -exec cp '{}' /home/copias/ ';'
# borrar archivos de +2G del home de usuario
find ~ -size +2G -exec rm '{}' ';'
# archivos que contengan informe ennsu interior
find . -type f -exec grep -l informe '{}' ';'
# listar archivos de +1G
find . -size +1G -exec ls -l '{}' ';'
# listar archivos de +1G y saber el tamaño
find . -size +1G -exec du -h '{}' ';'
locate
location
y updatedb
son comandos que pueden usarse para encontrar rápidamente un archivo que coincida con un patrón dado en un sistema Linux. Buscará en una base de datos construida ejecutando el comando updatedb
. Esto le da resultados muy rápidos, pero pueden ser imprecisos dependiendo de cuándo se actualizó la base de datos por última vez.
# busca un patron
$ locate jpg
/home/carol/Downloads/Expert.jpg
/home/carol/Downloads/jpg_specs.doc
# no ignoda mayusculas
$ locate -i jpg
/home/carol/Downloads/Mate1.jpg
/home/carol/Downloads/Mate1_old.JPG
# multiples patrones
$ locate -i zip jpg
/home/carol/Downloads/Expert.jpg
/home/carol/Downloads/gbs-control-master.zip
# multiples patrones coincidentes (and)
$ locate -A .jpg .zip
/home/carol/Downloads/Pentaro.jpg.zip
$ locate -c .jpg
1174
Un problema con locate
es que solo muestra las entradas presentes en la base de datos generada por updatedb
(ubicada en /var/lib/mlocate.db
). Si la base de datos está desactualizada, la salida podría mostrar archivos que se han eliminado desde la última vez que se actualizó.
El comportamiento de updatedb
puede ser controlado por el archivo /etc/updatedb.conf
.
Busqueda de binarios y manuales
which
es un comando muy útil que muestra la ruta completa a un ejecutable. Busca los ejecutables en las rutas de $PATH
$ which less
/usr/bin/less
$ which -a less
/usr/bin/less
/bin/less
type
es un comando similar que mostrará información sobre un binario, incluyendo dónde se encuentra y su tipo.
$ type touch
touch is /usr/bin/touch
$ type -a touch
touch is /usr/bin/touch
touch is /bin/touch
$ type ll
ll is an alias for ls -lh
whereis
es más versátil y, además de los binarios, también se puede usar para mostrar la ubicación de las páginas de manual o incluso el código fuente de un programa (si está disponible en su sistema).
$ whereis locate
locate: /usr/bin/locate.findutils /usr/bin/locate /usr/lib/x86_64-linux-gnu/locate /usr/share/man/man1/locate.1.gz
$ whereis -b locate
locate: /usr/bin/locate.findutils /usr/bin/locate /usr/lib/x86_64-linux-gnu/locate
$ whereis -m locate
locate: /usr/share/man/man1/locate.1.gz