Huney

サーバー / Linux

Linuxでテキストを編集・検索しよう|nano・vi・grep・findを初心者向けに解説

Linuxでテキストファイルを編集・検索する方法を初心者向けに解説します。nano、vi・vim、grep、find、head、tail、パイプ、リダイレクトなど、設定ファイルやログを扱うための基本操作を学びます。

読了時間:約18分
  • #Linux
  • #nano
  • #vi
  • #grep
  • #find
  • #Linuxコマンド

Linuxでテキストを編集・検索しよう|nano・vi・grep・findを初心者向けに解説

Linuxサーバーを管理していると、テキストファイルを扱う機会がたくさんあります。

たとえば、

  • 設定ファイルを書き換える
  • ログファイルを確認する
  • ファイルからエラーを探す
  • 大量のファイルから目的のファイルを探す

といった操作です。

LinuxサーバーではGUIを使わず、ターミナルだけで作業することも珍しくありません。

そのため、

「コマンドだけでファイルを編集・検索できる」

ことは非常に重要です。

今回は、

  • nano
  • vi / vim
  • grep
  • find
  • head
  • tail
  • パイプ |
  • リダイレクト > >>

などを使いながら、Linuxでテキストを扱う基本を学びます。

Linuxでは設定ファイルを編集することが多い

Linuxサーバーでは、多くの設定がテキストファイルとして保存されています。

たとえば、

/etc
├── ssh
├── systemd
└── その他の設定ファイル

のように、/etc配下にはさまざまな設定ファイルがあります。

Minecraftサーバーでも、

server.properties

という設定ファイルを編集します。

たとえば、

motd=A Minecraft Server
max-players=20
server-port=25565

といった設定があります。

つまりLinuxサーバーを管理するうえでは、

「設定ファイルを開いて、編集して、保存する」

という操作が必要になります。

テキストエディタとは?

テキストファイルを編集するためのソフトウェアをテキストエディタと呼びます。

Linuxでは、

  • nano
  • vi
  • vim

などがよく利用されます。

イメージとしては、

設定ファイル
    ↓
テキストエディタで開く
    ↓
内容を変更
    ↓
保存

という流れです。

nanoとは?

nanoは、ターミナル上で利用できる比較的シンプルなテキストエディタです。

初心者でも操作を理解しやすいため、Linuxを学び始めた段階では扱いやすいエディタです。

ファイルを開く基本形は、

nano ファイル名

です。

たとえば、

nano sample.txt

とすると、sample.txtをnanoで開けます。

ファイルが存在しない場合は、新しいファイルとして作成できます。

nanoで文字を書いてみよう

まず、

nano honey.txt

を実行してみます。

nanoが起動したら、

Hello Linux!

などと入力してみましょう。

nanoでは基本的に、そのまま文字を入力できます。

編集できたら保存します。

nanoで保存する

nanoでは、

Ctrl + O

で保存できます。

Oは「Write Out」の操作です。

保存するファイル名を確認したらEnterを押します。

その後、

Ctrl + X

でnanoを終了できます。

まずは、

Ctrl + O
→ 保存

Ctrl + X
→ 終了

を覚えておけば十分です。

viとは?

Linuxではviというテキストエディタもよく利用されます。

vi sample.txt

のように起動します。

また、viを拡張した**Vim(Vi IMproved)**も広く利用されています。

環境によっては、

vim sample.txt

として利用できます。

viはnanoと比べると最初は少し操作が独特です。

その理由がモードです。

viにはモードがある

viでは、主に、

  • ノーマルモード
  • インサートモード
  • コマンドラインモード

を切り替えながら操作します。

イメージすると、

ノーマルモード
     ↓ i
インサートモード
     ↓ Esc
ノーマルモード
     ↓ :
コマンドラインモード

となります。

この仕組みを知らずにviを開くと、

「文字が入力できない!」

となりやすいので注意しましょう。

viで文字を入力する

まずファイルを開きます。

vi sample.txt

起動直後は基本的にノーマルモードです。

文字を入力するには、

i

を押します。

するとインサートモードになり、文字を入力できます。

たとえば、

Hello Linux!

と入力します。

viで保存して終了する

編集が終わったら、

Esc

を押してノーマルモードへ戻ります。

その後、

:wq

と入力してEnterを押します。

これは、

w
→ write(保存)

q
→ quit(終了)

という意味です。

つまり、

:wq
→ 保存して終了

です。

保存せず終了したい場合は、

:q!

を利用できます。

最初は、

i
→ 編集開始

Esc
→ ノーマルモード

:wq
→ 保存して終了

:q!
→ 変更を保存せず終了

の4つを覚えておけば十分です。

nanoとviはどちらを使えばいい?

初心者の場合、まずnanoから始めても問題ありません。

エディタ 特徴
nano 操作が比較的分かりやすい
vi / vim 操作に慣れが必要だが高機能

Linuxサーバーではvi系エディタを利用する場面も多いため、最低限、

i
Esc
:wq
:q!

くらいは覚えておくと便利です。

catでファイルの内容を確認する

以前の記事で登場したcatを使えば、ファイルの内容を表示できます。

cat sample.txt

短いファイルなら、これだけで内容を簡単に確認できます。

ただしログなどの大きなファイルでは、すべて表示すると見づらくなることがあります。

そこでheadやtailを利用します。

head:ファイルの先頭を見る

ファイルの先頭部分を確認するときは、

head ファイル名

を利用します。

たとえば、

head sample.txt

です。

表示する行数を指定することもできます。

head -n 5 sample.txt

とすると、先頭5行を表示できます。

tail:ファイルの末尾を見る

ファイルの最後の部分を確認するときは、

tail ファイル名

を利用します。

たとえば、

tail server.log

です。

ログファイルでは、新しい情報がファイルの末尾へ追加されることが多いため、tailは非常によく利用されます。

tail -f:ログをリアルタイムで見る

ログ確認で特に便利なのが、

tail -f ファイル名

です。

たとえば、

tail -f server.log

とすると、新しくログが追加されるたびに画面へ表示されます。

イメージすると、

server.log

起動しました
ユーザーが接続しました
処理を開始しました
      ↓
新しいログが追加
      ↓
画面にも表示

という動きです。

終了するときは、

Ctrl + C

を押します。

サーバーの動作を確認しながらログを見るときに便利なコマンドです。

grep:文字列を検索する

大量のログから特定の文字を探したい場合、すべてを目で確認するのは大変です。

そこで利用するのがgrepです。

基本形は、

grep "検索文字列" ファイル名

です。

たとえば、

grep "ERROR" server.log

とすると、ERRORを含む行を探せます。

イメージすると、

INFO Server started
INFO User connected
ERROR Connection failed
INFO Retry
ERROR Timeout

というログから、

grep "ERROR" server.log

を実行すると、

ERROR Connection failed
ERROR Timeout

のように必要な行だけを取り出せます。

大文字・小文字を区別せず検索する

通常、文字列検索では大文字・小文字の違いが影響します。

たとえば、

ERROR
error
Error

をまとめて検索したい場合には、

grep -i "error" server.log

のように-iを利用できます。

-iを指定すると、大文字・小文字を区別せず検索できます。

行番号も表示する

どの行に文字列が存在するか確認したい場合は、

grep -n "ERROR" server.log

とします。

すると、

15:ERROR Connection failed
42:ERROR Timeout

のように行番号付きで表示できます。

パイプとは?

これまでの記事でも、

ps aux | grep java

や、

ss -tln | grep ':22'

といったコマンドが登場しました。

この、

|

を**パイプ(Pipe)**と呼びます。

パイプは、

左側のコマンドの出力を右側のコマンドへ渡す

ために利用します。

たとえば、

ps aux | grep java

なら、

ps aux
↓
すべてのプロセスを表示
↓
|
↓
grep java
↓
javaを含む行だけ表示

という処理になります。

複数の小さなコマンドを組み合わせられるのが、Linuxの便利なところです。

find:ファイルやディレクトリを探す

grepは主にファイルの中身を検索するために使います。

一方、

「ファイルそのものがどこにあるか分からない」

という場合にはfindが便利です。

基本形の一例は、

find 検索開始場所 -name "ファイル名"

です。

たとえば現在のディレクトリ以下から、

server.properties

を探したい場合、

find . -name "server.properties"

とできます。

ここで.は以前学んだカレントディレクトリです。

つまり、

.
↓
現在いる場所から

-name "server.properties"
↓
この名前のファイルを探す

という意味です。

Linux全体から探す場合

ルートディレクトリから検索する場合は、

find / -name "server.properties"

とできます。

ただし、システム全体を検索すると時間がかかったり、アクセス権限がないディレクトリでエラーが表示されたりすることがあります。

そのため、できるだけ、

find /opt -name "server.properties"

など、検索範囲を絞ると効率的です。

grepとfindの違い

ここは覚えておきましょう。

grep
→ ファイルの中身を探す

find
→ ファイルやディレクトリそのものを探す

たとえば、

「server.propertiesはどこ?」

なら、

find /opt -name "server.properties"

です。

「ログの中にERRORという文字はある?」

なら、

grep "ERROR" server.log

です。

リダイレクトとは?

Linuxでは、コマンドの実行結果をファイルへ保存することもできます。

そこで利用するのが**リダイレクト(Redirection)**です。

代表的なのが、

>

と、

>>

です。

>:ファイルへ出力する

たとえば、

echo "Hello Linux" > sample.txt

とすると、

Hello Linux

という内容がsample.txtへ書き込まれます。

イメージすると、

echoの出力
     ↓
     >
     ↓
sample.txt

です。

ただし、>を使って既存ファイルへ出力すると、基本的に元の内容は上書きされます。

ここは注意しましょう。

>>:ファイルへ追記する

既存の内容を残したまま追加したい場合は、

>>

を利用します。

たとえば、

echo "Hello Linux" > sample.txt

のあとに、

echo "Hello Server" >> sample.txt

を実行します。

すると、

Hello Linux
Hello Server

となります。

つまり、

>
→ 上書き

>>
→ 追記

です。

この違いは重要です。

コマンドを組み合わせてみよう

Linuxでは、これまで学んだコマンドを組み合わせることで、より便利な操作ができます。

たとえば、

ps aux | grep java

なら、

Javaのプロセスを探す

ことができます。

ss -tln | grep 25565

なら、

25565番ポートを探す

ことができます。

grep "ERROR" server.log > error.log

なら、

ERRORを含む行だけをerror.logへ保存する

ことができます。

このように、

コマンド
   ↓
パイプ
   ↓
別のコマンド
   ↓
リダイレクト
   ↓
ファイル

と組み合わせられます。

Minecraftサーバーではどう使う?

Minecraftサーバーを構築すると、今回のコマンドをかなり利用します。

たとえば、

/opt/minecraft
├── server.jar
├── server.properties
├── world
└── logs

という構成だったとします。

Minecraftの設定を変更したい場合は、

nano /opt/minecraft/server.properties

などで設定ファイルを開けます。

たとえば、

motd=Huney Minecraft Server
max-players=10
server-port=25565

などの設定を編集します。

Minecraftのログを確認する

Minecraftサーバーではログも重要です。

たとえばログディレクトリへ移動します。

cd /opt/minecraft/logs

ファイルを確認します。

ls

最新ログがlatest.logなら、

tail latest.log

で末尾を確認できます。

リアルタイムで確認したい場合は、

tail -f latest.log

です。

Minecraftのエラーを探す

ログが大量にある場合、

grep -i "error" latest.log

のように検索できます。

さらに、

grep -i "error" latest.log > error.log

とすれば、エラーを含む行を別のファイルへ保存することもできます。

ここまでできると、

Minecraftで問題発生
        ↓
ログを確認
        ↓
grepでエラーを探す
        ↓
原因を調査

という、実際のサーバートラブルシューティングに近い操作ができます。

設定ファイルを変更したらどうする?

設定ファイルは、書き換えただけでは動作中のサービスへ反映されないことがあります。

たとえば一般的なサービスでは、

設定ファイルを編集
      ↓
保存
      ↓
サービスを再起動・再読み込み
      ↓
新しい設定を反映

という流れになることがあります。

以前学んだ、

sudo systemctl restart サービス名

などがここでつながります。

ただし、サービスによって設定の反映方法は異なるため、そのサービスに適した方法を確認して操作します。

設定ファイルを編集するときはバックアップも意識しよう

重要な設定ファイルを変更するときは、いきなり編集するのではなく、変更前のファイルをコピーしておく方法があります。

たとえば、

cp server.properties server.properties.bak

とします。

すると、

server.properties
server.properties.bak

の2つができます。

もし編集後に問題が発生しても、元の設定を確認しやすくなります。

以前学んだcpが、実際のサーバー管理でも役立ちます。

実際に操作してみよう

まず練習用ディレクトリを作ります。

mkdir -p ~/linux-practice/text

移動します。

cd ~/linux-practice/text

nanoでファイルを作ります。

nano sample.txt

次のように入力して保存してみましょう。

INFO Server started
INFO User connected
ERROR Connection failed
INFO Retry
ERROR Timeout

保存できたら、

cat sample.txt

で確認します。

先頭を確認します。

head sample.txt

末尾を確認します。

tail sample.txt

ERRORだけ検索します。

grep "ERROR" sample.txt

行番号付きでも確認します。

grep -n "ERROR" sample.txt

次にファイルを探します。

find . -name "sample.txt"

最後に、ERRORを含む行だけ別ファイルへ保存します。

grep "ERROR" sample.txt > error.txt

確認します。

cat error.txt

これで、

編集
↓
表示
↓
検索
↓
ファイル探索
↓
結果を保存

という一連の操作を体験できます。

🍯 はちみつメモ

Linuxでは「設定ファイル」と「ログ」を扱えるようになると一気にサーバーらしくなる!

nanoやviで設定を書き換え、

tailでログを確認し、

grepでエラーを探し、

findで目的のファイルを探す。

これらはLinuxサーバーを管理するときの基本操作です。

Minecraftサーバーでもserver.propertiesやlatest.logを扱うときに、そのまま使います。

まとめ

今回はLinuxでテキストを編集・検索する方法を学びました。

この記事で覚えること

  • Linuxでは設定ファイルやログをテキストとして扱うことが多い
  • nanoは初心者でも扱いやすいテキストエディタ
  • viではモードを切り替えて操作する
  • viではiで入力、Escでノーマルモードへ戻る
  • :wqで保存して終了できる
  • :q!で変更を保存せず終了できる
  • headでファイルの先頭を確認できる
  • tailでファイルの末尾を確認できる
  • tail -fでログを継続的に確認できる
  • grepでファイル内の文字列を検索できる
  • findでファイルやディレクトリを探せる
  • |でコマンドの出力を別のコマンドへ渡せる
  • >は出力先を上書きする
  • >>は出力先へ追記する
  • 設定変更前にはバックアップを取る習慣も重要
  • Minecraftでは設定ファイル編集やログ調査に利用できる

ここまで学ぶと、

「Linuxへログインしてコマンドを実行する」

だけでなく、

「設定を変更して、ログを確認して、問題を調査する」

というサーバー管理らしい操作ができるようになります。

コマンド単体ではなく、

設定を編集する
↓
サービスを動かす
↓
ログを見る
↓
問題があれば検索する

という流れで覚えていきましょう。

次におすすめ

次は**「Linuxサーバー構築の基本」**について学びます。

ここまで学んできた、

  • ユーザー・権限
  • プロセス・サービス
  • ネットワーク
  • パッケージ管理
  • SSH
  • 設定ファイル
  • ログ

を一度まとめて、

「Linuxサーバーを構築・運用するときに何を考えればいいのか?」

を整理します。

特に、

  • サービス
  • ポート
  • ファイアウォール
  • ログ
  • アップデート
  • 専用ユーザー
  • 最小権限
  • バックアップ

などを扱い、その次のMinecraftサーバー構築へつなげていきます。