web-dev-qa-db-ja.com

ターミナルで大きなファイルを開くにはどうすればよいですか(vimを使用するとターミナルがハングします)?

Ubuntu 14.04を使用しています。大きなログファイルがあります。

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

それにもかかわらず、私はそれを開き、その中のいくつかのものを見つける必要があります。 vimを試しましたが、実行中です

vim /var/log/Unicorn/unicorn.log

空白の画面を開くだけで Ctrl+C、 何も起こりません。端末がハングしています。マシンのハードウェアをアップグレードせずに(ただし、ソフトウェアをインストールすることはできます)、どのようにファイルを開いて見回すことができますか(編集する必要はありません、それからいくつかの行を読むだけです)。

9
Dave

大きなファイルを扱うときは、扱う情報の量を最小限に抑えることをお勧めします。そのためのツールがあります。言及されているツールの1つは、必要な特定の行を検索するgrepです。私が使用することをお勧めする別の2つのツールは、tailおよびheadです。これらは、ファイルの先頭(head)または末尾(tail)から特定の行数またはバイト数を表示できます。これは、ファイルの特定の部分だけを読む必要があり、その間に何も読む必要がない場合に便利です。

別の方法は、splitコマンドを使用することです。バイト数または行数に基づいてファイルを分割できます。例えば、

$ mkdir SPLIT

$ cd SPLIT/                                                                                                       

$ split -l 5  /etc/passwd

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

さて、私の/etc/passwordは、vimまたは他のテキストエディターで開くことができる、それぞれ5行の小さなファイルに分割されます

4

コマンドlessを使用します。 lessは、ファイルをメモリに読み込むより効率的な方法を使用します。同等のコマンドが2つあります:moremost(最後にインストールする必要があるコマンド)。それらは単一のページをメモリに入れます。

しかし、検索の最良のオプションはgrepを使用することです。例:

grep {searchstring} {file}

そして、logrotateを見て、そのログを複数のファイルに広げます。

また、splitは現在のファイルを均等な部分に分割できるため、そのログを簡単に見ることができます。

6
Rinzwind

それはあなたの目標が何であるかによります。

entireログファイルをスクロールする場合は、lessまたはmoreコマンドを使用して、ファイルのページごとのビューを取得できます。

それ以外の場合、探しているファイルの場所がわかっている場合は、headまたはtailコマンドを使用して、ファイルのセクション/抜粋を取得できます。正確な部品を検索する方法の詳細については、man headおよびman tailを参照してください。

特定の文字列/エントリを探している場合は、grepを使用してファイルの文字列を検索できます。目的に応じて、cat file | grep somethingまたはgrep something fileを使用できます。

あるいは、より高度な操作を行う場合は、必要に応じて、sedまたはawkを使用して、より高度な操作を行うことができます。

5
Kaz Wolfe

必要な行が正確にわかっている場合は、grepを使用します。ただし、不明なものを探している場合は、lessを使用することをお勧めします。コンテキストを表示するためです(ログファイルに特に便利です)。

less内から/コマンドを入力して、検索フィールドを開きます。必要なものを入力してEnterキーを押します。次に、同じWordの検索を続けるには、nと入力して前に進み、Nと入力して後ろに進みます。ファイルの最後にジャンプするには、Gを入力してから、Nまたは?を入力します。

0
Mark Lakata