Como eu abro um arquivo grande em um terminal (usando o vim faz o terminal travar)? [duplicado]

9

Estou usando o Ubuntu 14.04. Eu tenho um arquivo de log grande:

-rw-r--r-- 1 rails root 1792390124 Jan 10 14:54 /var/log/unicorn/unicorn.log

No entanto, eu preciso abri-lo e encontrar algumas coisas nele. Eu tentei o vim, mas rodando

vim /var/log/unicorn/unicorn.log

apenas abre uma tela em branco e mesmo quando eu uso Ctrl + C , nada acontece. O terminal está suspenso. Sem atualizar nenhum hardware da minha máquina (mas estou aberto para instalar software), como posso abrir o arquivo e dar uma olhada (não preciso editá-lo, só preciso ler algumas linhas dele).

    
por Dave 10.01.2017 / 21:03

4 respostas

4

Ao lidar com arquivos grandes, é melhor minimizar a quantidade de informações com as quais você vai lidar e existem ferramentas para isso. Uma ferramenta mencionada é grep para procurar linhas específicas de que você precisa. Outras duas ferramentas que eu recomendo usar são tail e head que podem exibir um número específico de linhas ou bytes da parte superior do arquivo ( head ) ou do final ( tail ). Isso é útil se você só precisa ler essas partes específicas do arquivo, mas nada entre elas.

O caminho alternativo é usar o comando split . Pode dividir um arquivo com base no número de bytes ou linhas. Por exemplo,

$ mkdir SPLIT

$ cd SPLIT/                                                                                                       

$ split -l 5  /etc/passwd

$ ls
xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

Agora, meu /etc/password é dividido em arquivos menores, 5 linhas cada, que você pode abrir com o vim ou outro editor de texto

    
por Sergiy Kolodyazhnyy 10.01.2017 / 21:33
6

Use o comando less . less usa uma maneira mais eficiente de ler um arquivo na memória. Existem dois comandos equivalentes: more e most (esse último você precisa instalar). Aqueles colocam a única página na memória.

Mas sua melhor opção para pesquisar seria usar grep . Exemplo:

grep {searchstring} {file}

E dê uma olhada em logrotate para que você ocupe esse log em vários arquivos.

E split pode dividir seu arquivo atual em partes iguais para que você tenha uma vida mais fácil olhando para esse registro.

    
por Rinzwind 10.01.2017 / 21:16
5

Depende de qual é o seu objetivo.

Se você quiser rolar pelo arquivo de log todo , poderá usar os comandos less ou more para obter uma visualização de página por página do arquivo em questão.

Caso contrário, se você souber onde está o arquivo que está procurando, use os comandos head ou tail para capturar uma seção / trecho do arquivo. Veja man head e man tail para mais informações sobre como pesquisar por partes exatas.

Se você estiver procurando por uma string / entrada específica, você pode usar grep para pesquisar a string no arquivo. Você pode usar cat file | grep something ou grep something file dependendo do que você deseja fazer.

Como alternativa, se você quiser fazer algumas coisas mais avançadas, poderá usar sed ou awk para operações mais avançadas, se necessário.

    
por Kaz Wolfe 10.01.2017 / 21:18
0

Se você sabe exatamente qual linha deseja, use grep . Mas se você está pescando algo sobre o qual não tem certeza, usar less é melhor, porque ele mostrará o contexto (que é especialmente útil para arquivos de log).

Digite o comando / de dentro de less para abrir o campo de pesquisa. Digite o que você deseja e pressione enter. Então, para continuar pesquisando a mesma palavra, digite n para avançar e N para voltar. Para pular para o final do tipo de arquivo G , então N ou ? .

    
por Mark Lakata 11.01.2017 / 01:53