web-dev-qa-db-fra.com

Comment ouvrir un fichier volumineux dans un terminal (l'utilisation de vim provoque le blocage du terminal)?

J'utilise Ubuntu 14.04. J'ai un gros fichier journal:

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

Néanmoins, je dois l'ouvrir et y trouver des éléments. J'ai essayé vim, mais en cours d'exécution

vim /var/log/Unicorn/unicorn.log

ouvre simplement un écran vide et même lorsque j'utilise Ctrl+C, Rien ne se passe. Le terminal est bloqué. Sans mettre à niveau le matériel de ma machine (mais je suis ouvert à l’installation de logiciel), comment puis-je ouvrir le fichier et regarder autour de moi (je n’ai pas besoin de le modifier, je dois simplement en lire quelques lignes).

9
Dave

Lorsque vous traitez avec des fichiers volumineux, il est préférable de minimiser la quantité d'informations que vous allez traiter, et il existe des outils pour cela. Un outil mentionné est grep pour rechercher les lignes spécifiques dont vous avez besoin. Les deux autres outils que je recommande d'utiliser sont tail et head qui peuvent afficher un nombre spécifique de lignes ou d'octets du haut du fichier (head) ou de la fin (tail). Ceci est utile si vous n'avez besoin que de lire ces parties spécifiques du fichier, mais rien entre les deux.

Une autre méthode consiste à utiliser la commande split. Il peut décomposer un fichier en fonction du nombre d'octets ou de lignes. Par exemple,

$ mkdir SPLIT

$ cd SPLIT/                                                                                                       

$ split -l 5  /etc/passwd

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

Maintenant, mon /etc/password est divisé en fichiers plus petits, de 5 lignes chacun, que vous pouvez ouvrir avec vim ou un autre éditeur de texte.

4
Sergiy Kolodyazhnyy

Utilisez la commande lessname__. lessutilise un moyen plus efficace de lire un fichier en mémoire. Il existe 2 commandes équivalentes: moreet most(la dernière à installer). Ceux-ci ont mis la seule page en mémoire.

Mais votre MEILLEURE option de recherche consisterait à utiliser grepname__. Exemple:

grep {searchstring} {file}

Et jetez un coup d'œil à logrotatepour étendre ce journal à plusieurs fichiers.

Et splitpeut diviser votre fichier actuel en parties égales, ce qui vous permet de regarder plus facilement ce journal.

6
Rinzwind

Cela dépend de votre objectif.

Si vous voulez faire défiler le fichier de consignation entier, vous pouvez utiliser les commandes lessou morepour obtenir une vue page par page du fichier.

Sinon, si vous savez où se trouve le fichier que vous recherchez, vous pouvez utiliser les commandes headou tailpour récupérer une section/un extrait du fichier. Voir man head et man tail pour plus d'informations sur la recherche de pièces exactes.

Si vous recherchez une chaîne/entrée spécifique, vous pouvez utiliser greppour rechercher dans le fichier votre chaîne. Vous pouvez utiliser cat file | grep something ou grep something file en fonction de ce que vous souhaitez faire.

Si vous souhaitez faire des choses plus avancées, vous pouvez également utiliser sedou awkpour des opérations plus avancées, si besoin est.

5
Kaz Wolfe

Si vous savez exactement quelle ligne vous voulez, utilisez grepname__. Mais si vous pêchez pour quelque chose dont vous n'êtes pas sûr, utilisez lessest préférable, car il vous montrera le contexte (ce qui est particulièrement utile pour les fichiers journaux).

Tapez la commande / dans lesspour ouvrir le champ de recherche. Tapez ce que vous voulez puis appuyez sur Entrée. Ensuite, pour continuer à chercher le même mot, tapez npour avancer et Npour revenir en arrière. Pour aller à la fin du type de fichier Gname__, puis Nou ?.

0
Mark Lakata