{"id":23863,"date":"2019-08-18T18:32:50","date_gmt":"2019-08-18T16:32:50","guid":{"rendered":"https:\/\/eltallerdelbit.com\/?p=23863"},"modified":"2020-09-02T20:25:27","modified_gmt":"2020-09-02T18:25:27","slug":"comando-find-linux","status":"publish","type":"post","link":"https:\/\/eltallerdelbit.com\/comando-find-linux\/","title":{"rendered":"C\u00f3mo buscar con el comando Find en Linux"},"content":{"rendered":"
<\/p>\n
El comando find es un comando con el que podemos buscar ficheros y directorios en Linux.<\/p>\n
Vamos a ver muchos ejemplos del comando find<\/em> linux<\/strong>, junto con las opciones que ofrece para realizar diferentes b\u00fasquedas.<\/p>\n <\/p>\n <\/p>\n \u00cdndice de Contenidos:<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n As\u00ed funciona el comando find<\/em>:<\/p>\n <\/p>\n Si buscamos un nombre exacto y no existe, no encontrar\u00e1 nada. Pero si usamos comodines, poniendo una parte del nombre del archivo, encontrar\u00e1 lo que buscamos. Por ejemplo, listamos el contenido del directorio Descargas y vemos que tenemos estos archivos:<\/p>\n As\u00ed que vamos a ver unos ejemplos usando este directorio.<\/p>\n <\/p>\n A continuaci\u00f3n vamos a buscar un archivo llamado “archivo<\/em>“:<\/p>\n <\/p>\n Como no existe un archivo con ese nombre exacto, find<\/em> no devuelve ning\u00fan resultado:<\/p>\n <\/p>\n <\/p>\n <\/p>\n Pero si usamos el comod\u00edn, podemos facilitar al comando find<\/em> la b\u00fasqueda. As\u00ed le decimos que busque los archivos que comienzen por ‘archivo<\/em>‘ (usando la comilla simple) :<\/p>\n <\/p>\n <\/p>\n <\/p>\n Para solucionarlo, enviaremos la salida de standard error\u00a0 (2) a \/dev\/null<\/em> (el agujero negro de Linux que se traga todo):<\/p>\n <\/p>\n 2>\/dev\/null<\/strong> <\/p>\n <\/p>\n El comando find<\/em> ofrece una gran cantidad de opciones y par\u00e1metros para afinas las b\u00fasquedas de archivos y directorios en Linux. Si especificamos varios criterios, deber\u00e1n cumplirse todos para que find<\/em> encuentre el archivo deseado.<\/p>\n <\/p>\n <\/p>\n Buscamos el archivo de nombre “archivo1.txt<\/em>”<\/p>\n o<\/p>\n <\/p>\n Si usamos el comod\u00edn, podemos facilitar al comando “find” la b\u00fasqueda. As\u00ed le decimos que busque todos los archivos que comienzen por ‘archivo’ (usando la comilla simple) :<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n Un detalle importante es que al buscar en root (\/) debemos hacerlo con privilegios de super usuario:<\/p>\n <\/p>\n <\/p>\n <\/p>\n Podemos hacer que find<\/em><\/strong> muestre de forma detallada los resultados de la b\u00fasqueda, a\u00f1adiendo al final -ls<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n Buscamos los ficheros con extensi\u00f3n “.txt<\/em>”<\/p>\n <\/strong> <\/p>\n <\/p>\n Usaremos el par\u00e1metro -iname<\/em><\/p>\n <\/p>\n <\/p>\n <\/p>\n Podemos buscar archivos seg\u00fan sus permisos con el par\u00e1metro -perm<\/em> y la m\u00e1scara de permisos.<\/p>\n <\/p>\n As\u00ed, buscamos los archivos que tienen permisos 0755<\/p>\n <\/p>\n Y los enlaces con permisos 0777:<\/p>\n <\/p>\n <\/p>\n <\/p>\n O buscando los archivos donde el grupo tiene permisos de lectura:<\/p>\n <\/p>\n Buscando donde “Otros” tiene permisos de lectura<\/p>\n <\/p>\n Buscando archivos en los que “todos” tienen permisos de lectura:<\/p>\n <\/p>\n <\/p>\n <\/p>\n Tambi\u00e9n podr\u00edamos buscar seg\u00fan permisos en octal<\/strong>. As\u00ed que los archivos donde solo el usuario tenga permisos de escritura y lectura, y nadie m\u00e1s tenga permisos (tendr\u00eda estos permisos:\u00a0 -rw——-\u00a0 \u00a0), lo buscar\u00edamos con:<\/p>\n <\/p>\n <\/p>\n En este caso buscamos en Linux los archivos ejecutables por el usuario propietario:<\/p>\n <\/p>\n Tambi\u00e9n de esta forma:<\/p>\n <\/p>\n Y con notaci\u00f3n octal (en este caso buscamos archivos que tengan permisos 771, que son lectura, escritura y ejecuci\u00f3n para el propietario “u<\/em><\/strong>” y para el grupo “g<\/em><\/strong>“, y solo ejecuci\u00f3n para “otros”\u00a0 “o<\/em><\/strong>“)<\/p>\n <\/p>\n <\/p>\n <\/p>\n Y al rev\u00e9s, podemos buscar los archivos que NO tengan ciertos permisos, con el par\u00e1metro -perm, y colocando antes la exclamaci\u00f3n !<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n\u00bfC\u00f3mo funciona el comando find?<\/span><\/h3>\n
\nEl comando find<\/em><\/strong> busca a tiempo real en directorios, y no es tan r\u00e1pido como el comando locate<\/em>, pero no tendr\u00e1 problemas asociados a una base de datos (locate<\/em> es m\u00e1s r\u00e1pido por que no busca a tiempo real sino en su base de datos, pero si la base de datos se corrompe, locate<\/em> quedar\u00e1 inutilizado hasta que regeneremos la base de datos).<\/p>\n\n
\n
\n
\n
\n
Sintaxis del comando find en Linux<\/span><\/h3>\n
\nComo primer argumento, el comando find<\/em><\/strong> espera\u00a0 un directorio donde comenzar a buscar.
\n <\/p>\nfind donde qu\u00e9_queremos_buscar<\/pre>\n
\n <\/p>\n
\n <\/p>\nfind Descargas\/ -name archivo<\/pre>\n
El error “permiso denegado<\/em>” al buscar con find<\/em> en Linux<\/strong><\/span><\/h3>\n
\nSi buscamos en la ra\u00edz del sistema (en \/) recibiremos el mensaje: “Permiso denegado<\/strong><\/em>” en multitud de archivos.
\n
\n<\/p>\n
\n
\nDe esta forma:<\/p>\nsudo find \/ -type d -iname descargas -ls 2>\/dev\/null<\/pre>\n
\n
\n <\/p>\nOPCIONES DEL COMANDO FIND<\/span><\/h3>\n
Buscar archivos por nombre<\/span><\/h3>\n
\n
find . -name archivo1.txt<\/pre>\n
find . -name 'archivo*'<\/pre>\n
\n <\/p>\nMostrar todos los archivos del directorio actual y los subdirectorios<\/span><\/h3>\n
\nPodemos usar estas 3 opciones :<\/p>\n\n
find<\/pre>\n
\n
find .<\/pre>\n
\n
find . -print<\/pre>\n
Buscar directorios con find<\/span><\/h3>\n
\nUsamos el par\u00e1metro -type d<\/strong><\/em>, diciendo as\u00ed a find<\/em> que busque ficheros del tipo “d<\/em><\/strong>“, que son directorios.<\/p>\nfind \/ -type d -name \"apt\"<\/pre>\n
sudo find \/ -type d -name \"apt\"<\/pre>\n
Mostrar de forma detallada la lista de archivos y directorios<\/span><\/h3>\n
find $HOME -type d -name Descargas -ls<\/pre>\n
Buscar directorios por nombre<\/span><\/h3>\n
\nPor ejemplo queremos buscar el directorio “Descargas<\/em>“:<\/p>\nfind $HOME -type d -name Descargas<\/pre>\n
\n <\/p>\nBuscar archivos por tipo de archivo (extensi\u00f3n)<\/span><\/h3>\n
find . -type f -name '*.txt'<\/pre>\n
\n <\/p>\nRealizar b\u00fasquedas no sensitivas (sin tener en cuenta que las letras sean may\u00fasculas o min\u00fasculas)<\/span><\/h3>\n
find \/ -type d -iname \"apt\" -ls<\/pre>\n
\n <\/p>\nBuscar archivos con ciertos permisos<\/span><\/h3>\n
find Descargas\/ -type f -perm 0755 -print<\/pre>\n
find Descargas\/ -type l -perm 0777 -print<\/pre>\n
\n <\/p>\nBuscar archivos con permisos de solo lectura<\/span><\/h3>\n
\nPodemos usar el comando find<\/em> para buscar archivos que tengan permisos de solo lectura.
\n
\nEn este caso buscamos los archivos de solo lectura para el usuario propietario:<\/p>\nsudo find -perm \/u=r<\/pre>\n
sudo find -perm \/g=r<\/pre>\n
sudo find -perm \/o=r<\/pre>\n
sudo find -perm \/a=r<\/pre>\n
sudo find -perm 600<\/pre>\n
\n <\/p>\nBuscar archivos ejecutables (archivos con permiso de ejecuci\u00f3n)<\/span><\/h3>\n
\nDe la misma forma que hemos buscado archivos con permisos de solo lectura, tambi\u00e9n podemos buscar archivos ejecutables.
\n <\/p>\nsudo find -perm \/u=x<\/pre>\n
sudo find -perm \/u=+x<\/pre>\n
sudo find -perm 771<\/pre>\n
\n <\/p>\nBuscar archivos que NO tengan ciertos permisos<\/span><\/h3>\n
find \/ -type f ! -perm 777\r\n\r\nfind Descargas\/ -type f ! -perm 0777 -print<\/pre>\n
Buscar archivos por su edad (d\u00edas, minutos … )<\/span><\/h3>\n
Buscar archivos por su edad en d\u00edas<\/span><\/h4>\n
\n
\n <\/p>\n
-atime<\/pre>\n<\/li>\n
-mtime<\/pre>\n<\/li>\n
-ctime<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n