Consulta: Busqueda especifica de archivos (solucionado)

Imagen de Dario32343
0 puntos

Hola a todos. tengo un problemilla y busqué repuestas por todos lados pero no pude resolverlo.

Es un trabajo para la facultad, estamos aprendiendo comandos en linux, así que ahí va mi problema.

Tengo que mostrar todas las lineas que contengan el texto "POSIX" de todos los archivos (incluyendo subdirectorio) en /etc. Y evitar los archivos binarios y aquellos archivos y directorios que no tienen permisos de lectura para mi usuario.

Bueno ese el problema. Para imprimir las lineas no hay problema, es lo único que hago bien :-P, el tema es que no se como evitar los archivos binarios, y los que son solo de permiso lectura para mi usuario.

Espero puedan darme una mano, les voy a estar agradecido.

Imagen de pwned
+1
0
-1

A ver es que has dicho cosas contradictorias, en el segundo parrafo dices:"
"... evitar los archivos binarios y aquellos archivos y directorios que NO tienen permisos de lectura para MI usuario"

y en el tercer parrafo dices:
"... no se como evitar los archivos binarios, y los que son SOLO de permiso lectura para MI usuario"

Si me aclaras eso te puedo ayudar, siempre esta la forma de hacerlo, puede ser más/menos elegante con más/menos líneas, etc, pero siempre se puede hacer.

Saludos.

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

Deberías comentar lo que tienes hecho ¿no?

Para ver que te falta o que te sobra...

Porque por lo que dices casi lo tienes.

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Dario32343
+1
0
-1

A ver es que has dicho cosas contradictorias, en el segundo parrafo dices:"
"... evitar los archivos binarios y aquellos archivos y directorios que NO tienen permisos de lectura para MI usuario"

Es verdad me contradije, me refiero a que solo tengo que buscar archivos con el texto "POSIX" que tengan permiso de lectura para mi usuario y no sean archivos binarios. en /etc y los subdirectorios de /etc.

A mi se me ocurrió utilizando grep y pipes pero no se bien como:

podria ser algo así??: ls -xal /etc | algo que me de como salida archivos con permiso de lectura y no binarios | grep "POSIX"

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

¿Con el texto POSIX dentro del archivo o como parte del nombre?

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Dario32343
+1
0
-1

Con el texto "POSIX" dentro del archivo

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

sudo grep "posix" $(find /etc/ -group dario -perm -400)

Pero no consigo filtrar los arhivos que son .bin..... sería con un flag del tipo
.... -not (-iname "*.bin") dentro del comando anterior, pero no me sale.

Sigue probando ya está casi resuelto.

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Dario32343
+1
0
-1

Quizás de esta manera se podrían filtrar los archivos binarios?

grep -r "POSIX" /etc | awk ' $4=="dario", $8!"*.bin"' (es solo una idea), no logro que funcione.

+1
0
-1
Imagen de Dario32343
+1
0
-1

grep -r "POSIX" /etc | awk ' $4=="dario", $8!"*.bin"' (es solo una idea), no logro que funcione.

creo que adelante hay que agregarle un ls -l para que awk vea todos los campos

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

Así:

sudo grep "posix" $(find /etc \( ! -name "*.bin" \) -type f -group dario -perm -400)

Con eso buscas la palabra "posix" dentro de todos los archivos que encuentre find en la ruta /etc sin la extensión .bin del tipo fichero que pertenzca a tu grupo "dario" y con almenos permisos de lectura para su dueño.

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Dario32343
+1
0
-1

Muchas gracias por todo scorpyo, no se porque pero no me funciona. Ya estoy exhausto creo que me rindo

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

¿¿No te funciona o no te salen resultados??

Mira que yo lo he probado y me funciona, pero no me arroja resultados en /etc, así que creé una carpeta para hacer pruebas.

Haz lo siguiente, crea dos archivos de texto con la palabra posix dentro de ellos, uno con extensión .bin y otro con la que te de la gana, y cópialos donde te plazca dentro de etc y ejecuta el comando que te dí.
Luego cambia su usuario para que sean tuyos.

touch pruebacomando proebacomando.bin
echo "posix" > pruebacomando
echo "posix" > pruebacomando.bin

sudo mv pruebacomando*  /etc/ruta-que-te-de-la-gana/

sudo chown dario:dario /etc/ruta-que-te-de-la-gana/pruebacomando.bin
sudo chown dario:dario /etc/ruta-que-te-de-la-gana/pruebacomando
sudo chmod 400 /etc/ruta-que-te-de-la-gana/pruebacomando.bin
sudo chmod 400 /etc/ruta-que-te-de-la-gana/pruebacomando

Solo te tendría que salir el que no tiene extensión .bin.
Ejecuta el comando y verás si te arroja resultados.

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Scorpyo82
+1
0
-1

Falta un sudo que no sé por que te pide.....

sudo grep "posix" $(sudo find /etc \( ! -name "*.bin" \) -type f -group dario -perm -400)

Se queda un buen rato leyendo....

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Scorpyo82
+1
0
-1

Macho, ahora resulta que no te muestra el nombre del archivo, solo el resultado, no sé porqué cambia tanto de usarlo en la carpeta /etc a la carpeta que usé de pruebas...

si pones
sudo find /etc \( ! -name "*.bin" \) -type f -group dario -perm -400
te salen los ficheros que complen con los permisos y usuarios que quieres y sin la extenxión .bin.

Y con:
sudo grep "posix" ...... tienes que poder filtrarlos, pero ahora juntos no me sale como antes...
no sé.

Sigo mirando.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Scorpyo82
+1
0
-1

Listo:

sudo grep -l "posix" $(sudo find /etc \( ! -name "*.bin" \) -type f -group dario -perm -400)

Con eso solo se imprime las rutas de archivo y no el contenido que encuentra grep con la palabra posix...

Pruébalo y me cuentas.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Scorpyo82
+1
0
-1

Lo destripo:

sudo grep -l "posix" $(sudo find /etc \( ! -name "*.bin" \) -type f -group dario -perm -400)

sudo grep > ejecuta grep como super usuario
-l > solo muestra las rutas de los archivos
"posix" > la palabra que buscamos
$() > crea una especie de variable en la que se encuentran los resultados que salgan de los comandos en su interiór
sudo find /etc > hace la búsqueda en /etc como administrador
\( ! -name "*.bin" \) > Se evitan los archivos con extensión .bin para eso se usa el [ ! ]
-type f > Solo muestra los elementos del tipo fichero.
-group dario > solo mostrará resultados que pertenezcan al grupo dario
-perm -400 > solo mostrará resultados que tengan como mínimo, permisos de lectura para el dueño.

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de pwned
+1
0
-1

A ver los archivos binarios no son los de extensión .bin jaja. Añade los parámetros para grep (imagino lo estarás haciendo con grep):
--binary-files=without-match # Para omitir archivos binarios (-I).
--recursive # Para que sea recursivo (-r).
--no-messages # Para que en los archivos que no tengas permisos de lectura no te imprima el error (-s).
--word-regexp # Para que te coja "solo" el texto que buscas (-w).
Como ves omite los binarios ya que simplemente los pasa como que no tienen coincidencias. El recursivo que necesitas. La sigiuente opción, si el grep pasa por un archivo del cual no tienes permisos de lectura, simplemente lo omite y te lanza el error, asi que poniendole que no muestre los errores lo omitira como tu quieres. La última es para que solo te busque "POSIX" y no por ejemplo "MIPOSIX".

Saludos.

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

Pues entonces lo que yo hago no vale :( jeje

Un saludo.

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de Dario32343
+1
0
-1

JEje parece que es como dice pwned si haces:
grep -rI s "POSIX" /etc

me busca:
con -r de forma recursiva en /etc
con -I ignoro binarios
con -s omite los mensajes de error.

Y los archivos que no tengan permisos de lectura directamente no puede leerlos

En la consola arroja este resultado:

~$ grep -rIs "POSIX" /etc
/etc/alternatives/bf_tar:# This file dumps a bogofilter to standard output in POSIX-tar format.
/etc/alternatives/fakeroot:*) # POSIX getopt ?
/etc/security/limits.conf:# - msgqueue - max memory used by POSIX message queues (bytes)
/etc/default/samba:# This is a POSIX shell fragment
/etc/speech-dispatcher/speechd.conf:# PulseAudio is a sound server for POSIX and WIN32 systems.

:-D

+1
0
-1
Imagen de Dario32343
+1
0
-1

Vaya al final era muuy sencillo jaja, No importa estuvo bueno aprendí sobre otros comandos también.

Creo que puede darse por solucionado este post. Gracias a todos.

SALUDOS.

+1
0
-1
Imagen de Scorpyo82
+1
0
-1

Si no llega a a ser por el compañero anterior pwned ... y si me llegas a dejar una tarde más te lo saco con 15 lineas! jajaja

Un saludo

+1
0
-1

Si entro en Window$ estoy más tenso que en el bautizo de un gremlin.
Linux user: 545.017
Por favor, si solucionas el hilo añade [Solucionado] al título.

Imagen de pwned
+1
0
-1

Me alegro de que te haya servido.

+1
0
-1