Comandos UNIX - encontrar

Comandos UNIX - encontrar

Estou tentando aprender comandos UNIX e estou jogando esse jogo para aprender e estou muito preso no momento. Estou em um servidor através de ssh e o diretório está cheio de arquivos e pastas aleatórios e a senha do próximo nível está dentro de um dos arquivos. Disseram-me que o arquivo possui os seguintes atributos:

  • legível por humanos
  • 1033 bytes
  • não executável

Suponho que deveria usar o findcomando e tentei, find ! -executablemas retornou uma carga de arquivos. A única ajuda legível que posso encontrar no manual ou on-line é imprimir os tamanhos dos arquivos em formato legível. Então estou um pouco perdido aí?

Também tentei, find ~ -size 1033bmas não retornou nada. Mas quando tentei, find ~ -size -1033bele retornou todos os arquivos do diretório.

Responder1

Para filtrar os nomes de arquivos legíveis por humanos, você pode usar o [:print:](imprimível)classe de personagemnome. Você encontrará mais sobre essas classes no manual do grep.

find . -type f -size 1033c -name "[[:print:]]*" ! -executable

Pensando bem, o requisito "legível por humanos" pode se referir ao conteúdo do arquivo, em vez de ao seu nome. Em outras palavras, você estaria procurando portextoarquivos. Isso é um pouco mais complicado. Como @D_Bye sugeriu em um comentário, você deve usar o filecomando para determinar o tipo de conteúdo do arquivo. Mas não seria uma boa ideia correr fileatrás de um pipe, pois complicaria a tarefa de exibir o nome do arquivo. Aqui está o que eu sugiro:

find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print

É assim que a file-part funciona:

  • O-execo predicado é executado sh -c 'file -b $0 | grep -q text' FILENAMEpara cada um FILENAMEque satisfaça todas as condições anteriores (tipo, tamanho, não executável).
  • Para cada um desses arquivos, um shell ( sh) executa este curtoroteiro: file -b $0 | grep -q text, substituindo $0pelo nome do arquivo.
  • OfileO programa determina o tipo de conteúdo de cada arquivo e gera essas informações. A -bopção evita a impressão do nome de cada arquivo testado.
  • grepfiltra a saída vinda do fileprograma, procurando por linhas contendo"texto". (Veja você mesmo como é uma saída típica do filecomando.)
  • Mas grepnão gera o texto filtrado, pois possui o-qopção (silenciosa) dada. O que ele faz é apenas mudar seustatus de saídapara 0(que representa "verdadeiro" - o texto filtrado foi encontrado) ou 1 (que significa "erro" - o texto"texto"não apareceu na saída de file).
  • O status de saída verdadeiro/falso proveniente de grepé passado para she findatua como o resultado final de todo o -exec sh -c 'file $0 | grep -q text' {} \;teste " ".
  • Caso o teste acima tenha retornadoverdadeiro, o -printcomando é executado (ou seja, o nome do arquivo testado é impresso).

Responder2

find . -type f -readable -size 1033c ! -executable

Observe que usei cem vez de bpara o tamanho do arquivo. bé para blocos de 512 bytes. cé para bytes reais.

Responder3

tudo que escrevi foi:

find -size 1033c ! -executable

e peguei o arquivo. Aparentemente, a parte legível por humanos era para confundir você.

Responder4

Acho que para o jogo, entretanto, a sintaxe correta é:

file ./* 

Você recebe um retorno que lista em que consiste cada arquivo. Funcionou muito bem para o que você está tentando realizar no jogo Bandit. A verdadeira curva para esta tarefa é que cada arquivo começa com - (hífen).

informação relacionada