
Estoy tratando de aprender los comandos de UNIX y estoy jugando este juego para aprender y estoy realmente estancado en este momento. Estoy en un servidor a través de ssh y el directorio está lleno de archivos y carpetas aleatorios y la contraseña para el siguiente nivel está dentro de uno de los archivos. Me han dicho que el archivo tiene los siguientes atributos:
- legible por humanos
- 1033 bytes
- no ejecutable
Supongo que debería usar el find
comando y lo intenté, find ! -executable
pero me devolvió una gran cantidad de archivos. La única ayuda legible para humanos que puedo encontrar en el manual o en línea es imprimir los tamaños de archivo en formato legible para humanos. ¿Entonces estoy un poco perdido?
También lo intenté find ~ -size 1033b
pero no devolvió nada. Pero cuando lo intenté, find ~ -size -1033b
devolvió todos los archivos del directorio.
Respuesta1
Para filtrar los nombres de archivos legibles por humanos, puede utilizar [:print:]
(imprimible)clase de personajenombre. Encontrará más información sobre estas clases en el manual de grep
.
find . -type f -size 1033c -name "[[:print:]]*" ! -executable
Pensándolo bien, el requisito de "legible por humanos" podría referirse al contenido del archivo, en lugar de a su nombre. En otras palabras, estarías buscandotextoarchivos. Eso es un poco más complicado. Como sugirió @D_Bye en un comentario, luego debe usar el file
comando para determinar el tipo de contenido del archivo. Pero no sería una buena idea ejecutar file
después de una tubería, porque complicaría la tarea de mostrar el nombre del archivo. Esto es lo que sugiero:
find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print
Así es brevemente como file
funciona la parte:
- El
-exec
El predicado se ejecutash -c 'file -b $0 | grep -q text' FILENAME
para cada unoFILENAME
que satisface todas las condiciones anteriores (tipo, tamaño, no ejecutable). - Para cada uno de esos archivos, un shell (
sh
) ejecuta este breveguion:file -b $0 | grep -q text
, reemplazándolo$0
con el nombre del archivo. - El
file
El programa determina el tipo de contenido de cada archivo y genera esta información. La-b
opción evita imprimir el nombre de cada archivo probado. grep
filtra la salida procedente delfile
programa, buscando líneas que contengan"texto". (Compruebe usted mismo cómofile
se ve una salida típica del comando).- Pero
grep
no genera el texto filtrado, porque tiene la-q
Opción (tranquila) dada. Lo que hace es simplemente cambiar suestado de salidaa0
(que representa "verdadero" - se encontró el texto filtrado) o 1 (que significa "error" - el texto"texto"no apareció en la salida defile
). - El estado de salida verdadero/falso procedente de
grep
se pasash
afind
y actúa como el resultado final de toda la "-exec sh -c 'file $0 | grep -q text' {} \;
" prueba. - En caso de que la prueba anterior arrojara resultadosverdadero, se ejecuta el
-print
comando (es decir, se imprime el nombre del archivo probado).
Respuesta2
find . -type f -readable -size 1033c ! -executable
Tenga en cuenta que utilicé c
en lugar de b
para el tamaño del archivo. b
es para bloques de 512 bytes. c
es para bytes reales.
Respuesta3
todo lo que escribí fue:
find -size 1033c ! -executable
y obtuve el archivo. Aparentemente, la parte legible por humanos era para desconcertarte.
Respuesta4
Sin embargo, creo que para el juego la sintaxis correcta es:
file ./*
Obtendrá una devolución que enumera en qué consiste cada archivo. Funcionó muy bien para lo que intentas lograr en el juego Bandit. La verdadera bola curva para esta tarea es que cada archivo comienza con - (guión).