はじめに
Linux初心者が、最初の壁と感じやすいのが「そもそも何から覚えればいいのか」という点ではないでしょうか。
まずはコマンドを覚えよう、と思ってもコマンドは数え切れないほどあるため、何から手を付ければよいか迷ってしまうことと思います。
ですが実際の日常作業では、それほど多くないコマンドで事足りることかと思います。
この記事では、Linuxを触り始めたばかりの方がまず知っておくと幸せになれそうなコマンドを5つピックアップしてご紹介します。
Linuxの資格試験では、「ある結果を導き出すコマンド操作」を複数答えさせる問題がありますが、正直なところ一つ知っていればまず問題ありませんので、手に馴染んだものをまずは使えるようになれば良いかと思います。
1. cd / pwd / type — まず覚えたいシェルの組み込みコマンド
Linuxのコマンドには、外部のプログラムとして存在するものと、シェル(bash)自体に組み込まれている「ビルトインコマンド」があります。ここでは、ターミナルを開いて最初に使うことになるビルトインコマンドを紹介します。
シェルの選択によって利便性が変わったりもするのですが、ここではLinuxで標準的に使われているbashを前提に執筆しています。
pwd — 現在のディレクトリを確認する
pwdは、今いるディレクトリのフルパスを表示します。作業中に「自分がどこにいるか」を確認したいときに使います。
$ pwd
/var/log
作業の事故原因が、「意図しないディレクトリで操作したこと」というのは往々にしてあることです。そうならないためにも、pwdで現在地を確認する方法を知っておくと良いかと思います。
cd — ディレクトリを移動する
cdは、現在の作業ディレクトリを変更するコマンドです。Linuxの操作は「今いる場所」が起点になるため、最も使用頻度の高いコマンドの一つです。
# /var/log に移動する
$ cd /var/log
$ pwd
/var/log
# ひとつ上のディレクトリに戻る
$ cd ..
$ pwd
/var
# ホームディレクトリに戻る
$ cd
$ pwd
/home/username
cdだけで引数がない場合は、ホームディレクトリに戻りますが、cd -を使うと、直前にいたディレクトリへ戻れます。2つのディレクトリを行き来するときに便利です。
$ cd /etc
$ cd /var/log
# /etc に戻る
$ cd -
$ pwd
/etc
type — コマンドの正体を調べる
typeは、指定したコマンドがビルトインなのか、外部コマンドなのか、エイリアスなのかを教えてくれます。
$ type cd
cd is a shell builtin
$ type mv
mv is /usr/bin/mv
$ type ll
ll is aliased to `ls -l --color=auto'
「このコマンドは何者なのか?」と気になったときにtypeで調べると、動作の違いやマニュアルの探し方を知る手がかりになります。ビルトインコマンドのヘルプはmanではなくhelpコマンドで確認できる点も覚えておくとよいかと思います。ビルトインコマンドをmanで調べた場合は、その元になるシェルのマニュアルに飛ばされ、詳細説明の中にビルトインコマンドの説明が記載されています。
# ビルトインコマンドのヘルプを確認する
help cd
type と which の違い
コマンドのパスを調べるコマンドとしてwhichもよく紹介されますが、whichは外部コマンドの実行ファイルのパスだけを検索します。そのため、ビルトインコマンドやエイリアスは見つけられません。
$ which cd
/usr/bin/cd
$ type cd
cd is a shell builtin
which cdは/usr/bin/cdを返しますが、実際にシェルでcdと打ったときに動くのはビルトインコマンドの方です。whichの結果だけを見ると、外部コマンドが動いているように誤解してしまうことがあります。同名のビルトインコマンドと外部コマンドがあるとき、その僅かな仕様差の沼にハマる人が時々います。typeはシェルが実際にどれを実行するかを教えてくれるため、コマンドの正体を調べるにはtypeの方が確実ということを覚えておきましょう。
上記結果は、RHEL9.xでの実行結果です。RHEL9では、/usr/bin/cdというビルトインコマンドのcdを呼び出すシェルスクリプトが用意されています。
2. grep — ファイルの中から目的のテキストを探す
Linuxで作業していると、設定ファイルの中から特定の設定項目を探したり、ログの中からエラーメッセージを見つけ出したりといった機会が頻繁にあります。grepは、そういった「テキスト検索」を担うコマンドです。
基本的な使い方
$ grep 検索パターン ファイル名
例として、コメント行・空行・設定値が混在する設定ファイル(抜粋)を取り上げてみます。
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")
基本の使い方として、特定の文字列が含まれる行を探してみます。
$ grep GLOBAL /etc/rsyslog.conf
#### GLOBAL DIRECTIVES ####
今度は、パラメータだけを確認しようと、コメント行を除いてみます。
$ grep -v '^#' /etc/rsyslog.conf
global(workDirectory="/var/lib/rsyslog")
空行も混ざっていると見づらいので、空行も除いてみます。
$ grep -v '^#' /etc/rsyslog.conf | grep -v '^$'
global(workDirectory="/var/lib/rsyslog")
パイプ (|) でコマンドを繋げることで、段階的にフィルタをかけられます。この考え方はLinuxコマンドの基本なので、身につけておくとよいかと思います。
-
^#: 行頭が#の行(コメント行) -
^$: 何も書かれていない空行
どちらも正規表現のパターンで、^は行頭、$は行末を表します。正規表現では非常に複雑なパターンも書けるのですが、最初はこの程度の基本的なパターンを覚えるだけでも十分かと思います。
設定ファイルによっては//や;がコメントになるものもあります。その場合はパターンを適宜変更してください。
よく使うオプション
-
-n: マッチした行の行番号も表示する -
-i: 大文字・小文字を区別しない -
-v: 条件に一致しない行だけを表示する(除外フィルタ)
3. find — ファイルを探す
「あのファイルはどこにある?」という状況は、Linuxを使い始めるとよく起こります。findは、ディレクトリを再帰的にたどって条件に合うファイルを探してくれるコマンドです。
基本的な使い方
$ find 検索対象ディレクトリ オプション
-nameでファイル名を絞り込む
-nameオプションは、ファイル名のパターンで検索します。ワイルドカード (*) を使えば、拡張子や名前の一部だけで絞り込めます。
-nameオプションで利用するワイルドカードは、正規表現とは違う点に注意してください。慣れればすぐに区別できるようになりますが、混乱するようであれば、-nameオプションを使わずに、grepと組み合わせてファイル名を絞り込む方法もあります。
$ find /etc -name "*.conf"
/etc/rsyslog.conf
/etc/chrony.conf
⋮
$ find /etc | grep "\.conf$"
/etc/rsyslog.conf
/etc/chrony.conf
⋮
ファイル・ディレクトリの種類で絞る
-typeオプションで、ファイルだけ、またはディレクトリだけに絞れます。
# ファイルだけ
$ find /var/log -type f
# ディレクトリだけ
$ find /etc -type d
ls -lのように詳細情報も一緒に表示する
-lsオプションを使うと、ls -lに近い形式でパーミッションや更新日時もまとめて確認できます。
# fooユーザで実施
$ find /home/foo/.ssh -ls
33685634 0 drwx------ 2 foo foo 76 6月 28 /home/foo/.ssh
33706547 4 -rw------- 1 foo foo 1743 6月 28 /home/foo/.ssh/id_rsa
find /のように広いパスを指定すると、探索対象が膨大になり、システムに負荷をかけてしまうことがあります。なるべく対象ディレクトリを絞って実行するように気をつけましょう。
4. chmod / chown / chgrp — ファイルの権限・オーナーを変更する
Linuxでは、ファイルやディレクトリに「誰が」「何をできるか」という情報(パーミッション・オーナー)が設定されています。chmodはパーミッション、chownはオーナーとグループ、chgrpはグループを変更するコマンドです。
基本的な使い方
# パーミッションを変更する
$ chmod 644 ファイル名
# オーナー・グループを変更する
# chown オーナー:グループ ファイル名
$ chown apache:apache /var/www/html/index.html
-Rで再帰的に変更する
ディレクトリ配下のファイルをまとめて変更したい場合は-Rオプションを使います。
# /var/www/html 配下を再帰的に変更
$ chmod -R 644 /var/www/html
$ chown -R apache:apache /var/www/html
-Rは配下のすべてのファイルとディレクトリに適用されます。ディレクトリの実行ビット(x)をまとめて外してしまうと入れなくなるなど、意図しない変更になることがあります。範囲をよく確認してから実行してください。
--referenceで別ファイルの設定を丸ごとコピーする
「このファイルと同じ設定にしたい」という場合、--referenceオプションに参照元ファイルを指定すると、権限・オーナーをそのままコピーできます。同じにしたいのに細かい数字やユーザー名を間違えてしまうリスクが減るので、合わせたいマスタファイルがあるときはこのオプションを使うと便利です。
# .bash_profile の権限・オーナーを .bashrc にコピーする
$ chown --reference .bash_profile .bashrc
# .bash_profile のパーミッションを .bashrc にコピーする
$ chmod --reference .bash_profile .bashrc
SELinuxのコンテキストを変更するchconでも--referenceが使えます。コンテキストは得てして複雑になりがちなので、合わせたいファイルがあるときはchcon --referenceで丸ごとコピーするのがおすすめです。
5. head / tail — ファイルの先頭・末尾を確認する
headはファイルの先頭から、tailはファイルの末尾から、それぞれ指定した行数を表示するコマンドです。名前のとおり対になっており、設定ファイルの冒頭を確認したいときはhead、ログの最新部分を見たいときはtail、というように使い分けます。
head の基本的な使い方
# ファイルの先頭10行を表示する(デフォルト)
$ head /etc/passwd
# 先頭3行だけ表示する
$ head -n 3 /etc/passwd
# -nは省略可能で、行数を直接指定しても同じ意味になります
$ head -3 /etc/passwd
ファイルの中身をざっと確認したいときや、CSVの先頭行(ヘッダ)だけ見たいときなどに便利です。
tail の基本的な使い方
# ファイルの末尾10行を表示する(デフォルト)
$ tail /var/log/messages
# 末尾50行を表示する
$ tail -n 50 /var/log/messages
# -nは省略可能で、行数を直接指定しても同じ意味になります
$ tail -50 /var/log/messages
ログファイルは末尾に最新の情報が追記されていくため、tailで直近の内容を確認するのが定番です。
head と tail を組み合わせる
パイプで繋ぐと、ファイルの途中の行だけを抽出できます。
# 11行目から20行目を表示する
$ head -20 /etc/passwd | tail -10
head -20で先頭20行を取り出し、その結果をtail -10に渡すことで末尾10行(つまり11〜20行目)だけが残ります。セクション2のgrepで紹介したパイプの考え方がここでも活きてきます。
-f / -Fでリアルタイム監視する(tail固有)
トラブル発生時やサービス起動時に、ログをリアルタイムで追いたい場面があります。tailの-fオプションを使うと、ファイルに追記された内容を随時表示し続けます。
$ tail -f /var/log/messages
新しい行がファイルに書き込まれる様子が、画面にリアルタイムで表示されます。Ctrl+Cで監視を終了します。
-fはファイルのinodeという情報を元に追跡します。ログローテーションが起きるとinodeが変更され、追跡が途切れたりします。-Fを使うと、ファイルが置き換えられた場合でも同名の新しいファイルを自動で開き直します。
$ tail -F /var/log/messages
長時間監視したい場合や、ローテーションが発生するログを追う場合は-Fを使ってください。
おわりに
今回紹介した5つのコマンドをまとめます。
| コマンド | 主な用途 |
|---|---|
cd/ pwd/ type
|
ディレクトリ移動・現在地確認・コマンドの正体調査 |
grep |
ファイル内のテキスト検索・フィルタリング |
find |
ファイルやディレクトリの検索 |
chmod/ chown/ chgrp
|
ファイルの権限・オーナーの変更 |
head/ tail
|
ファイルの先頭・末尾の確認、リアルタイム監視 |
これらのコマンドを自然に使えるようになると、設定ファイルの確認・ファイル操作・ログ追跡という日常的な作業がぐっとスムーズになります。
最初は覚えることより、実際に手を動かして使ってみることが大切です。まずはサンプルの通りに打ってみて、少しずつオプションを変えて試してみてください。
We Are Hiring!