Como fazer um despejo octal de arquivos em meus diretórios?

4

Estou lendo o livro Ambiente de programação Unix . Eu me deparei com o comando od . O comando funciona para o conteúdo do arquivo, mas não para os diretórios quando eu o executo. No entanto, este comando parece funcionar em diretórios quando demonstrado pelos autores do livro.

Quando eu executo o seguinte comando:

od -c .

Recebo uma mensagem de erro que diz:

od: .: read error: Is a directory
0000000

Por que estou recebendo esse erro?

    
por batman 11.08.2012 / 11:45

4 respostas

3

  • Se você quiser fazer um octal dump de todos os arquivos dentro e abaixo do diretório atual, use find , por exemplo:

    od -c 'find -type f'

Veja man find ou google para um tutorial sobre encontrar para mais informações.

    
por ish 11.08.2012 / 12:54
3

Por que od -c directory não funciona

Um diretório aponta para zero, um ou vários arquivos, não é realmente um arquivo em si, portanto, não pode ser processado por od ou hd . A maioria dos programas do tipo Unix processa arquivos, não diretórios inteiros.

O que fazer

Você pode listar o conteúdo do diretório com ls e, em seguida, usar o comando od -c ou hd -b para despejar cada arquivo que deseja examinar. Ao fazê-los um por um, você saberá o que cada arquivo contém.

( od -c file1 file2 enche o arquivo1 e o arquivo2 juntos e, em seguida, despeja a coisa toda. Isso faz com que ele ouça onde o primeiro termina e o próximo começa).

Você também pode escrever um pequeno script para fornecer a você, um por um, o nome de cada arquivo em um diretório e depois copiá-lo em octal ou hexadecimal. Aqui está um exemplo:

 for f in *; do echo $f; od -c $f; done | less

for f in * atribui cada arquivo no diretório atual a $ f por vez; echo $f fornece o nome do arquivo em seu terminal antes de cada arquivo de despejo; od -c $f produz o despejo; e done diz para continuar com o próximo arquivo ou terminar se não houver mais. |less diz: pegue todas as opções acima e envie a saída pelo programa "less", que permite que você analise pouco a pouco, em vez de fazer com que tudo saia do topo da tela.

Um script como este é interpretado por um programa chamado por um "shell". Quando você está digitando comandos no terminal, você está falando com um "shell". Por padrão, o Ubuntu usa o shell "bash".

Se você preferir ver a saída hexadecimal, pode usar od -t x1 filename ou hd filename . Use man od ou man hd para mais opções.

    
por John S Gruber 11.08.2012 / 20:42
1
od [options] [files] od --traditional [file] [[+] offset [[+] label] ]
     

Descarrega os arquivos especificados para a saída padrão. O padrão é despejar   formato octal, mas outros formatos podem ser especificados. Com vários arquivos,   concatene-os na ordem especificada. Se nenhum arquivo for especificado ou   arquivo é -, leia a partir da entrada padrão. Com o segundo formulário, usando o   - opção tradicional, somente um arquivo pode ser especificado. 1

Leia mais

1 Fonte: diretório de comandos do Linux

    
por Mitch 11.08.2012 / 12:11
1

Talvez isso seja mais apropriado como comentário. Mas aqui vai.

Para poder ler diretórios como arquivos, como mostrado no livro, o Ambiente de programação Unix (página 51) não é possível em versões recentes do Linux.

Como mencionado nesta resposta ( Quando os diretórios pararam de ser legíveis como arquivos? ) no Unix & amp; Sub-site do Linux, isso parece ser uma quebra do padrão POSIX, que permite que os diretórios sejam lidos como arquivos, desde que sejam abertos no modo somente leitura.

Também relevante: Como se inspeciona a informação da estrutura de diretório de um arquivo unix / linux?

    
por Slothworks 31.07.2015 / 18:10

Tags