Linuxでテキストを編集・検索しよう|nano・vi・grep・findを初心者向けに解説
Linuxサーバーを管理していると、テキストファイルを扱う機会がたくさんあります。
たとえば、
- 設定ファイルを書き換える
- ログファイルを確認する
- ファイルからエラーを探す
- 大量のファイルから目的のファイルを探す
といった操作です。
LinuxサーバーではGUIを使わず、ターミナルだけで作業することも珍しくありません。
そのため、
「コマンドだけでファイルを編集・検索できる」
ことは非常に重要です。
今回は、
nanovi/vimgrepfindheadtail- パイプ
| - リダイレクト
>>>
などを使いながら、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サーバー構築へつなげていきます。