Frage Wie öffne ich eine große Datei in einem Terminal (mit vim Ursachen Terminal zu hängen)? [Duplikat]


Diese Frage hat hier bereits eine Antwort:

Ich benutze Ubuntu 14.04. Ich habe eine große Protokolldatei:

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

Trotzdem muss ich es öffnen und einige Dinge darin finden. Ich habe es versucht, aber rennend

vim /var/log/unicorn/unicorn.log

öffnet nur einen leeren Bildschirm und auch wenn ich benutze Strg+C, nichts passiert. Das Terminal ist aufgehängt. Ohne die Hardware auf meinem Rechner zu aktualisieren (aber ich bin bereit, Software zu installieren), wie kann ich die Datei öffnen und mich umsehen (ich muss sie nicht bearbeiten, ich muss nur einige Zeilen daraus lesen).


9
2018-01-10 20:03


Ursprung


Die Suche nach Objekten in Protokolldateien erfolgt am besten mit grep. -A und -B könnten hier helfen. - RoVo
Mit riesigen Dateien in Linux arbeiten (auf Stack Overflow) kann auch helfen. - Eliah Kagan


Antworten:


Wenn Sie mit großen Dateien arbeiten, ist es besser, die Menge an Informationen zu minimieren, mit der Sie arbeiten werden, und dafür gibt es Tools. Ein Tool, das erwähnt wurde, ist grep um nach bestimmten Zeilen zu suchen, die Sie benötigen. Weitere zwei Tools, die ich empfehlen würde, sind tail und head das kann bestimmte Anzahl von Zeilen oder Bytes von der Spitze der Datei anzeigen ( head ) oder vom Ende ( tail ). Dies ist nützlich, wenn Sie nur diese spezifischen Teile der Datei lesen müssen, aber nichts dazwischen.

Alternative Möglichkeit ist zu verwenden split Befehl. Es kann eine Datei basierend auf der Anzahl der Bytes oder Zeilen aufschlüsseln. Beispielsweise,

$ mkdir SPLIT

$ cd SPLIT/                                                                                                       

$ split -l 5  /etc/passwd

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

Jetzt mein /etc/password ist in kleinere Dateien unterteilt, jeweils 5 Zeilen, die Sie mit vim oder einem anderen Texteditor öffnen können


4
2018-01-10 20:33





Verwenden Sie den Befehl less. less verwendet eine effizientere Methode zum Lesen einer Datei in den Speicher. Es gibt 2 äquivalente Befehle: more und most (das letzte, das Sie installieren müssen). Diese setzen die einzelne Seite in den Speicher.

Aber Ihre beste Option für die Suche wäre zu verwenden grep. Beispiel:

grep {searchstring} {file}

Und schau dir das an logrotate Also überspannt man das Protokoll über mehrere Dateien.

Und split Sie können Ihre aktuelle Datei in gleiche Teile aufteilen, so dass Sie das Leben leichter sehen können.


6
2018-01-10 20:16



Mögen less (aber nicht wie more), most unterstützt Scrollen sowohl zurück als auch vorwärts. Es verwendet nur verschiedene Tasten, um eine Seite zurückzuscrollen: less verwendet B (für zurück), während most verwendet U (für oben). In den meisten Terminals funktioniert die Page Up-Taste jedoch in beiden Fällen einwandfrei. (Im most, B scrollt den ganzen Weg zum Unterseite; und in less, U scrollt oben... aber nur um einen halben Bildschirm.) Zum Glück beides less und most akzeptieren / um vorwärts zu suchen, ? für die Rückwärtssuche und H für HilfeSo können Benutzer, die an einen gewöhnt sind, den anderen normalerweise problemlos verwenden. - Eliah Kagan


Es hängt davon ab, was dein Ziel ist.

Wenn Sie durch die ganz Logfile, können Sie das verwenden less oder more Befehle, um eine Seite-für-Seite-Ansicht der Datei zur Hand zu bekommen.

Wenn Sie sonst wissen, wo in der Datei Sie suchen, können Sie das verwenden head oder tail Befehle zum Abrufen eines Abschnitts / Ausschnitts der Datei. Sehen man head und man tail für mehr Information, wie man nach genauen Teilen sucht.

Wenn Sie nach einem bestimmten String / Eintrag suchen, können Sie ihn verwenden grep um die Datei nach Ihrer Zeichenfolge zu durchsuchen. Sie können entweder verwenden cat file | grep something oder grep something file abhängig davon, was Sie tun möchten.

Alternativ, wenn Sie etwas fortgeschrittenere Dinge tun möchten, könnten Sie mit verwenden sed oder awk für fortgeschrittene Operationen, wenn es sein muss.


5
2018-01-10 20:18



Ich suche nach einem Platz in der Datei, aber der Grund (glaube ich) grep allein ist nicht gut genug, weil ich nach einer Zeichenfolge (beginnend mit "Http") suche, die vor einer anderen Zeichenfolge (beginnend mit " 120 "). Ich weiß nicht genau, wie ich das mit Grep alleine machen soll. - Dave
@Dave gut, wenn Sie eine bestimmte Zeichenfolge in der Datei finden müssen, eine andere Frage stellen, genau erklären, was das Muster ist, und ich bin sicher, dass Menschen Lösungen dafür bieten können. Diese Frage ist in einem anderen Zusammenhang, würde ich sagen, also wäre ein neuer Beitrag besser - Sergiy Kolodyazhnyy
Hey, du warst derjenige, der gefragt hat, warum ich die große Textdatei öffnen wollte. Ich bin glücklich, diese Frage in ihrem ursprünglichen Kontext zu behalten. - Dave


Wenn Sie genau wissen, welche Zeile Sie verwenden möchten, verwenden Sie grep. Aber wenn du etwas fischst, von dem du dir nicht sicher bist, benutze es less ist besser, weil es Ihnen Kontext anzeigt (was besonders nützlich für Protokolldateien ist).

Schreib die / Befehl von innen less um das Suchfeld zu öffnen. Geben Sie ein, was Sie wollen und drücken Sie Enter. Um weiter nach demselben Wort zu suchen, geben Sie ein n vorwärts gehen und N rückwärts gehen. Um zum Ende des Dateityps zu springen G, dann N oder ?.


0
2018-01-11 00:53