はじめに
今回の記事は、私がエンジニア1年のなかで使用頻度の高いコマンドから、これ便利だったなというコマンドを、あとで見返せるようにチートシート的な感じでまとめていきます。
また、コマンドのオプションについて、紹介してるもの以外にもいろいろありますが、あくまで自分が業務内で使用したオプションや、使用頻度が高いオプションに絞って紹介していますのでご了承ください。
事前準備
本書は、以下のようにコマンド、説明、例、オプション、コメントの構成に則って解説していきます。
コマンド~(難易度)
・ここに説明を書きます
構文:コマンド [オプション] ファイル名
[] :任意、指定しなくてもよい
[]なし:必須、指定しないと動作しない
[user@localhost ~]$ ここに例を書きます
オプション |
説明 |
---|---|
オプション | ここにオプションの説明を書きます |
オプション | オプションに関しては使用頻度が高い順に書きます |
ここにコメントを書きます
ここに注意すべきことを書きます
ここにやってはいけないことを書きます
前章:Linuxの構造について
・Linuxでは、FHS(Filesystem Hierarchy Standard)という既定に基づいて標準化されたファイルシステム(ディレクトリ構造)を採用しています。
これにより、CentOSやDebianなど異なるディストリビューションでも基本的なディレクト構成は統一されています。
・FHSは、ディレクトリの最上位階層であるルートファイルシステム( / )に含める必要があるディレクトリや各ディレクトリの役割、ファイルの配置場所を定義しており、ルートには以下の5つのディレクトリを含める必要があります。
ルートに含める必要のあるディレクトリ
ディレクトリ名 |
説明 |
---|---|
/bin | 一般ユーザでも実行可能な基本的はコマンドを格納 |
/sbin | rootユーザのみが実行可能なシステム管理コマンドを格納 |
/etc | システムやコマンドの各種設定ファイル、スクリプトファイルを格納 |
/dev | ハードディスク、CD-ROM、DVD-ROMなどデバイスファイルを格納 |
/lib | 共有ライブラリ、カーネルモジュールを格納 |
ルート以外の主なディレクトリ
ディレクトリ名 |
説明 |
---|---|
/opt | 追加のパッケージやプログラムがインストールされるディレクトリ |
/root | rootユーザ専用のディレクトリ |
/home | 一般ユーザ専用のディレクトリ |
/tmp | 一時的な作業ディレクトリ、全てのユーザが読み書き可能 |
/var ※1 | システム関連のログファイルを格納するディレクトリ |
/usr ※2 | 一般ユーザが共用するコマンド、ライブラリ等を格納 |
/var配下の主なディレクト※1
ディレクトリ名 |
説明 |
---|---|
/var/log | システムのログファイル(messages)、メールログ(maillog)などを格納 |
/var/run | システム状態を示すファイルを格納 |
/var/spool | 送信待ちメール(/var/spool/mqueue)などを格納 |
cronの実体はどこに??
余談なりますが、ユーザごとに存在する定時処理を行うためのcron
の実態の格納先は、/var/spool/cron
に格納されています。
cronとはなんぞや
/usr配下の主なディレクト※2
ディレクトリ名 |
説明 |
---|---|
/usr/bin | 一般ユーザ、rootユーザが使用する基本コマンドを格納 |
/usr/sbin | システム管理コマンドを格納 |
/usr/lib | プログラムに必要な共有ライブラリを格納 |
基本的なファイル操作コマンド
lsコマンド(list segments)
・ファイルの一覧を表示するコマンドで、オプション次第でファイル属性、ディレクトリ一覧の情報を取得することができます。
また、コマンド実後の出力結果では、ファイル種別により、ディレクトリ、シンボリックリンク 、実行可能ファイル、圧縮ファイル/アーカイブ、画像 のように異なる色で表示されます。
構文:ls [オプション] [ファイル名 or ディレクトリ名]
[user@localhost ~]$ ls / # ルートディレクトリ配下の情報を検索
bin boot dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var
オプション |
説明 |
---|---|
-l | ファイルの属性(種類、保護モード、所有者など)の情報を表示 |
-t | 日付順に表示 |
-r | 出力結果を降順で表示 |
-R | 再帰的にディレクトリとその配下全てのファイルを表示 |
-a | 隠しファイルを含む全てのファイル名を表示 |
-h | ファイルサイズをK、M、Gなど単位で表示 |
オプションは複数指定できるの??
ls
コマンドに限らずLinuxコマンドのオプションは、複数指定することで出力結果が見やすくなったり、全く別の挙動になったりします。
ls
コマンドに関して、-l
を指定すると、パーミッション、所有者、サイズ、更新日時を見ることができます。
また、オプションを指定しないと操作しないコマンドも存在します。(例:tar
)
よく使うls
コマンドのオプション組み合わせ
【以下のような構造の場合】
/home/user
├─test.sh
├─SymbolicDir
└─TestDir
└─hoge.txt
[user@localhost ~]$ ls -ltr /home/user # ファイルを日付順の降順で表示
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.sh
drw-rw-r-- 1 user user 4096 12月 1 00:00 2024 TestDir
lrw-rw-r-- 1 user user 2 11月 1 00:00 2024 SymbolicDir -> TestDir
[user@localhost ~]$ ls -lR /home/user # 検索対象ディレクトリ配下を全て表示
.:
total 8
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.sh
drw-rw-r-- 1 user user 4096 12月 1 00:00 2024 TestDir
lrw-rw-r-- 1 user user 2 11月 1 00:00 2024 SymbolicDir -> TestDir
./TestDir
total 8
rw-rw-r-- 1 user user 200 1月 1 00:00 2025 hoge.txt
catコマンド(concatenate)
・ファイル内容を表示するコマンド、ログとかの確認の際に使用していましたが、オプションを指定して使用することはあまりなかった印象です。
構文:cat [オプション] ファイル名
[user@localhost ~]$ cat test.txt # test.txtの内容を表示
Hello,My name is Tun.
オプション |
説明 |
---|---|
-n | 各行ごとに行番号を付加して表示 |
touchコマンド
・ファイルのタイムスタンプ(最終アクセス日時・最終更新日時)を変更するコマンドです。
しかし、時間を指定せずに実行すると空のファイルが作成されるという、空ファイル作成の用途で多く使用していました。
構文:touch [オプション] ファイル名
[user@localhost ~]$ touch test.txt # 空のファイルを作成
[user@localhost ~]$ ls -l # 作成されていることの確認
-rw-rw-r-- 1 user user 0 1月 1 00:00 2025 test.txt
オプション |
説明 |
---|---|
-t | タイムスタンプをYYYYMMDDhhmmに変更 |
-a | 最終アクセス日時のみを変更 |
-m | 最終更新日時のみを変更 |
cpコマンド(copy)
・ファイルのコピーやディレクトリのコピーを行うコマンドです。
構文:cp [オプション] コピー元ファイル名 コピー先ファイル名
構文:cp [オプション] コピー元ファイル名 コピー先ディレクトリ名
構文:cp [オプション] コピー元ディレクトリ名 コピー先ディレクトリ名
[user@localhost ~]$ cp -p /home/log/*log /home/log/bk # 全てのログをbkディレクトリにバックアップ
[user@localhost ~]$ ls -l /home/log/bk
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.log
-rw-rw-r-- 1 user user 100 1月 2 00:00 2025 test1.log
オプション |
説明 |
---|---|
-p | コピー先のファイル属性(パーミッション、所有者等)を保持してコピー |
-r | ディレクトリ内を再帰的にコピー |
-f | コピー先に同じ名前のファイルがある場合は上書き |
-i | コピー先に同じ名前のファイルがある場合は上書きするかどうか確認 |
よく使うオプション
基本的にcp -p
とcp -pr
の二つさえ抑えておけば大丈夫かと思います。
cp -pr
の挙動確認
【コマンド実行前の構造】
/home/user
├─TestDir
| └─test.sh ←これを/TestDir2配下にディレクトリごとコピー
└─TestDir2
└─ここにコピーしたい
[user@localhost ~]$ ls -lR /home/user # homeディレクトリ内を確認
.:
total 8
drw-rw-r-- 1 user user 4096 12月 1 00:00 2024 TestDir
drw-rw-r-- 1 user user 4096 12月 1 00:00 2024 TestDir2
./TestDir:
total 8
rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.sh
[user@localhost ~]$ cp -pr TestDir /home/TestDir # 対象ファイルをディレクトごと
[user@localhost ~]$ ls -lR /home/user # homeディレクトリ内を確認
.:
total 8
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.sh
drw-rw-r-- 1 user user 4096 12月 1 00:00 2024 TestDir
./TestDir:
total 8
rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.sh
./TestDir2/TestDir:
total 8
rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.sh
【コマンド実行後の構造】
/home/user
├─TestDir
| └─test.sh
└─TestDir2
└─TestDir
└─test.sh
mvコマンド(move)
・ファイルの移動を行うコマンドで、同じ階層のディレクトリ内でファイルを移動した場合、実質ファイル名の変更と同じ挙動になるため、 mv
コマンドはファイル名変更で使用することがあります。
構文:mv [オプション] 移動元ファイル名/移動元ディレクトリ名 移動先ディレクトリ名
構文:mv [オプション] 名前変更前ファイル名/変更前ディレクトリ名 変更後ファイル名/変更後ディレクトリ名
[user@localhost ~]$ mv test.sh test2.sh # ファイル名をtest.shからtest2.shに変更
[user@localhost ~]$ mv test.sh /home/user/TestDir # test.shを「/home/user/TestDir」配下へ移動
オプション |
説明 |
---|---|
-f | 移動先に同じ名前のファイルがある場合は上書き |
-i | 移動先に同じ名前のファイルがある場合は上書きするか確認 |
シェルを作成する場合にmv
コマンドを使用して名前変更してもいいの??
Linuxサーバには隠しファイル.bash_profile
という環境変数や現場によってはエイリアスを設定するファイルが存在します。
この.bash_profile
には mv
を mv -i
という風にエイリアスを設定している場合があります。(rm
コマンドも同様)
これは、ユーザの誤操作でファイルの移動や削除するというヒューマンエラーを防止する働きがあります。
※筆者の体験談です
しかしこれの何が問題かというと、-i
オプションは実行するたびに上書きをしてよいか確認してくるので、もし仮に重要な定時処理を担うシェルスクリプトに記述してしまうと、意図しない箇所で止まってエラーもはかず に処理が実行されないということが起きてしまう可能性があります
詳細を調べると、シェルスクリプトを実行する場合は環境変数を読み込まないようになっているみたいで、mv
コマンドは本番環境でも確認されることなく無事に実行されていました・・・。
(リリース前日に、「ここって上書き確認されないよね?大丈夫?」って言われたときは冷や汗止まりませんでした、結局動いてくれたのでよかった)
rmコマンド(remove)
・ファイルやディレクトリの削除を行うコマンドです。
構文:rm [オプション] ファイル名 or ディレクトリ名
[user@localhost ~]$ rm -f test.sh # ファイルを確認なしで削除
[user@localhost ~]$ rm -rf TestDir # ディレクトリ配下を確認なしで全て削除
オプション |
説明 |
---|---|
-f | 削除の確認を行わない |
-r | ディレクトリも含めて、ディレクトリとファイルの全てを削除する |
-i | 削除する前に確認する |
-f
は便利だけど乱用禁止
前述のとおり、コマンド実行時の確認(エイリアス設定時等)は便利な反面、面倒であり正しく動作しない場合があります。
rm
コマンドには確認なしで強制突破するオプションが備わっています!
しかし、楽だからと言って乱用、特に管理者(root
ユーザ)の場合に使用しすぎると、その癖が抜けないようになってしまい、ルートディレクトリでコマンドを実行してしまうとサーバの全ファイルを削除してしまい取り返しのつかないことになってしまいます!
初心者の方は 慎重にコマンドを実行 してください!
ディレクトリを管理・操作コマンド
pwdコマンド(print working directory)
・現在の作業ディレクトリを確認するコマンドです。
構文:pwd [ディレクトリ名]
[user@localhost ~]$ pwd # 現在の作業ディレクトリを確認
/home/user
cdコマンド(change directory)
・現在の作業ディレクトリを変更(移動)するコマンドです。とてもよく使うコマンドの一つです。
構文:cd [ディレクトリ名]
[user@localhost ~]$ pwd # 現在の作業ディレクトリを確認
/home/user
[user@localhost ~]$ cd /home/user/log # /home/user/logに移動
[user@localhost log]$pwd # 移動できたかの確認
/home/user/log
cd
コマンドは相対パス?絶対パス?
cd
コマンドはどちらのパス指定でも移動できますが、移動したい先のパスがわかっているのであれば絶対パスで、移動先が決まってない場合は相対パスで移動したほうが効率はいいかなと思います。
また、tab
補完機能を使えば、絶対パスの指定を省略できます!!
指定次第で移動先が変わる!
当たり前のこと言ってますが、以下の指定次第で移動が楽になります!
[user@localhost ~]$ cd /home/user/log # これが普通の移動の方法
[user@localhost ~]$ cd # ユーザのホームディレクトリに移動
[user@localhost ~]$ cd ~ # これもホームディレクトリに移動
[user@localhost ~]$ cd .. # 親ディレクトリに移動
mkdirコマンド(make dirctory)
・ディレクトリを作成するコマンドです。
構文:mkdir [オプション] ディレクトリ名
[user@localhost ~]$ pwd # 現在の作業ディレクトリを確認
/home/user
[user@localhost ~]$ cd /home/user/log # /home/user/logに移動する。
[user@localhost log]$pwd # 移動できたかの確認
/home/user/log
rmdirコマンド(remove dirctory)
・ディレクトリを削除するコマンドで、削除するには削除対象のディレクトリは空である必要があります。
全くと言っていほど使いません。
構文:rmdir ディレクトリ名
[user@localhost ~]$ rmdir user # userディレクトリを削除
応用的なファイル操作コマンド
headコマンド
・ファイルの先頭から10行を表示するコマンドで、ログファイルを確認するときなどに使用していました。(オプションなしのデフォルトが10行)
構文:head [オプション] ファイル名
[user@localhost ~]$ head -n 3 test.txt # test.txtの内容を先頭から3行表示
1
2
3
オプション |
説明 |
---|---|
-n | 先頭から表示する行数の指定 |
-行数 | 先頭から表示する行数の指定 |
-c | 先頭から表示するバイト数の指定 |
tailコマンド
・ファイルの末尾から10行を表示するコマンドで、これもログファイルを確認するときなどに使用していました。(オプションなしのデフォルトが10行)
構文:tail [オプション] ファイル名
[user@localhost ~]$ tail -n 3 test.txt # test.txtの内容を末尾から3行表示
8
9
10
オプション |
説明 |
---|---|
-n | 末尾から表示する行数の指定 |
-行数 | 末尾から表示する行数の指定 |
-c | 末尾から表示するバイト数の指定 |
-f | ファイルの末尾に追加された行をリアルタイムで表示 |
ログファイルの監視にとても便利
tail -f
はリアルタイムのログ監視にとても便利です。
リリース作業をした後に、既存の処理が正しく動作しているか、エラーログをはいていないかなどの確認する際に、かなり使用していました。
[user@localhost ~]$ tail -f test.log # test.logをリアルタイムで監視
~省略~
2025/01/01 12:00 〇〇処理:正常終了
2025/01/01 12:10 〇〇処理:正常終了
2025/01/01 12:20 〇〇処理:正常終了
sortコマンド
・行単位でファイルの内容をソートするコマンドです。オプション指定なし(デフォルト)の場合、昇順にソートする。
構文:sort [オプション] ファイル名
[user@localhost ~]$ sort -n -r test.txt # test.txtの内容を数字として逆順に表示
10
9
8
~省略~
2
1
オプション |
説明 |
---|---|
-r | 降順にソート |
-k | ソートのキーとして使用するフィールドを指定 |
-n | 数字を文字ではなく数値として処理 |
-f | 大文字小文字の区別を無視 |
-b | 空白を無視 |
ls
コマンドと併用すると便利かも
ls -l
の出力結果を、ファイルのサイズの大きい順位ソートする場合は以下のように使用する。
以下の例で使用している |
(パイプ) は後述します
[user@localhost ~]$ ls -l /home/user/log # 現状の確認
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.log
-rw-rw-r-- 1 user user 200 1月 2 00:00 2025 test2.log
-rw-rw-r-- 1 user user 500 1月 3 00:00 2025 test3.log
-rw-rw-r-- 1 user user 400 1月 4 00:00 2025 test4.log
-rw-rw-r-- 1 user user 300 1月 5 00:00 2025 test5.log
[user@localhost ~]$ ls -l /home/user/log | sort -k 5 -n -r # ファイルサイズの大きさを降順で表示
-rw-rw-r-- 1 user user 500 1月 3 00:00 2025 test3.log
-rw-rw-r-- 1 user user 400 1月 4 00:00 2025 test4.log
-rw-rw-r-- 1 user user 300 1月 5 00:00 2025 test5.log
-rw-rw-r-- 1 user user 200 1月 2 00:00 2025 test2.log
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.log
wcコマンド(word count)
・指定したファイルの行数、単語数、文字数を表示するコマンドです。
構文:wc [オプション] [ファイル名]
[user@localhost ~]$ wc test.txt # test.txtの行数、単語数、文字数
10 20 400
オプション |
説明 |
---|---|
-l | 行数のみ表示 |
-c | 文字数のみ表示 |
-w | 単語数のみ表示 |
wc
コマンドも他のコマンドとパイプを使用するほうが多い
【前提条件】
1日24回動作して正常終了するとログをtest.logに出力する処理があるとします
'正常終了'のログが24行あることを確認したい場合
[user@localhost ~]$ cat test.log | grep '正常終了' | wc -l
24
tarコマンド(tape archive)
・ファイルやディレクトリを1つのアーカイブファイルにしたり、圧縮/展開するコマンドです。
複数のファイルを1つのファイルにまとめることを アーカイブ と言います。tar
コマンドで圧縮するときには -z
や -j
を指定する必要があります。
また、オプションを指定するときの-
(ハイフン)は省略できます。
構文:tar [オプション] ファイル名
[user@localhost ~]$ tar cvf archive.tar test1.txt test2.txt
# 2つのファイルをarchive.tarという名前でアーカイブ化
オプション |
説明 |
---|---|
-c | アーカイブの作成 |
-v | 詳細な情報を表示 |
-f ファイル名 | アーカイブするときのファイル名を指定 |
-x | アーカイブからファイルを取り出す(展開する) |
-z | gzipによる圧縮・展開 |
tar
コマンドのオプションはほぼ2種類
上記の例ではアーカイブしていますが、その他はそれを展開するときに指定する -xvf
のオプションくらいしか使用する場面がない気がします。
[user@localhost ~]$ tar xvf archive.tar
# カレントディレクトリにアーカイブ化したファイルを展開する
scpコマンド(secure copy)
・異なるサーバ間でファイルの送受信を行うためのコマンドです。
送信構文:scp [コピー元のローカルファイル] [リモートサーバユーザ]@[リモートサーバのIP or ホスト名]:[コピー先のディレクトリ]
受信構文:scp [リモートサーバユーザ]@[リモートサーバのIP or ホスト名]:[コピー元のファイル名] [コピー先のローカルディレクトリ]
【送信シナリオ】
現在ログインしているサーバ(ホスト名:localhost)から
APサーバ(IP:10.172.10.0、ホスト名:APSV01、一般ユーザ:apuser)の/home/apuser配下に、test.txtを送信する
[user@localhost ~]$ scp test.txt apuser@APSR01:/home/apuser
【受信シナリオ】
APサーバ(IP:10.172.10.0、ホスト名:APSV01、一般ユーザ:apuser)の/home/apuser配下のtest2.txtを
現在ログインしているサーバ(ホスト名:localhost)の/home/user配下に受信する
[user@localhost ~]$ scp apuser@APSR01:/home/apuser/test.txt /home/user
オプション |
説明 |
---|---|
-p | 秘密鍵のファイルを指定する |
-r | ディレクトリ内を再帰的にコピー |
-i 秘密鍵 | 文字数のみ表示 |
-1 | SSH1を使用する |
-2 | SSH2を使用する |
-4 | IPv4を使用する |
-6 | IPv6を使用する |
ftpコマンド(file transfer protocol)
・ファイルの送受信を FTPモード で行うコマンドです。ftp
コマンド自体は FTP
(File Transfer Protocol) といプロトコルを使用しており、FTPモードに切り替えるのみのコマンドです。
構文:ftp [サーバのIP or ホスト名]
【APサーバ情報】
IP :10.172.10.0
ホスト名 :APSV01
一般ユーザ:apuser
パスワード:apuser
[user@localhost ~]$ ftp APSV01
Connected to 10.172.10.0.
220 (vsFTPd 2.0.0)
Please specify the password.
Password: # ここにAPサーバのパスワードを入力する
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> # コマンドのプロンプトが変わる
FTPコマンド |
説明 |
---|---|
ls | 現在のディレクト内の一覧を表示 |
cd [directory] | 指定したディレクトリに移動 |
get [file] | サーバから指定したファイルをローカルにダウンロード |
put [file] | ローカルからサーバに指定したファイルをアップロード |
delete [file] | サーバ上の指定したファイルを削除 |
bye | FTPモードのセッションを終了 |
/var/log/xferlog
ってなに??
FTPで転送ログ情報が出力されるログファイルのこと
いつ誰にどのサイズのファイルを何秒で転送したかのログが残されます
今、どのサーバにいるの??
何かと使える hostname
コマンドについて
自分が今どのサーバにログインしているかはコマンドプロンプトを見ればホスト名はわかりますが、hostname
コマンドを使えばIPアドレスも表示することができます!
【APサーバ情報】
IP :10.172.10.0
ホスト名 :APSV01
[user@localhost ~]$ hostname # オプションなしはホスト名表示
APSV01
[user@localhost ~]$ hostname -I # -IオプションはIPアドレス表示
10.172.10.0
オプションには -i
と -I
が存在しますが違いは以下です。
オプション |
説明 |
---|---|
-i | DNSや /etc/hosts によって名前解決してるホスト名のIPアドレス |
-I | ネットワークに接続している 全てのIPアドレス |
/etc/hosts
には、IPアドレスとホスト名の関係が記述されています。
その他のコマンド
その他のコマンドを説明する前に以下を説明します。
標準入力・標準出力・標準エラー出力
・Linuxコマンドは、標準入力・標準出力・標準エラー出力を処理するようにできています。
入出力名 |
説明 |
---|---|
標準入力 | 文字を入力しコマンドに渡す 例)キーボード |
標準出力 | コマンドやプログラムの実行結果をディスプレイに出力 |
標準エラー出力 | コマンドやプログラムのエラーメッセージをディスプレイに出力 |
リダイレクトとパイプの概要
・コマンドの入出力をファイルに切り替える機能を リダイレクト >
といい、コマンドの出力結果を別のコマンドの標準入力に渡す機能を パイプ |
といいます。
リダイレクト
・通常、コマンドの入力をキーボードを使用して、そのコマンドの実行結果はディスプレイ上に表示されます。
しかし 、 リダイレクト を使用すれば、コマンドの事項結果を画面上に表示されるのではなくファイルに保存することができます。
リダイレクト |
説明 |
---|---|
> | コマンドの実行結果(標準出力)をリダイレクト(上書き) |
>> | コマンドの実行結果(標準出力)をファイルに追記 |
< | 入力のリダイレクト |
<< | 入力終端文字の指定 |
2> | コマンドの実行結果(エラー標準出力)をファイルに設定 |
2>&1 | コマンドの標準出力と標準エラー出力をファイルに設定 |
具体的な使用例
リダイレクト |
説明 |
---|---|
コマンド > ファイル | コマンドの「標準出力」をファイルに書き込む |
コマンド < ファイル | ファイルの内容をコマンドの「標準入力」へ送る |
コマンド >> ファイル | コマンドの「標準出力」をファイルに追記 |
コマンド 2> ファイル | ファイルに「エラー出力」を書き込む |
コマンド 2>> ファイル | ファイルに「エラー出力」を追記 |
コマンド > ファイル 2>&1 | ファイルに「標準出力」と「エラー出力」を書き込む |
コマンド >> ファイル 2>&1 | ファイルに「標準出力」と「エラー出力」を追記する |
コマンド &> ファイル | ファイルに「標準出力」と「エラー出力」を同じファイルに書き込む |
コマンド << 終端文字 | 終了文字が現れるまで「標準入力」へ送る |
パイプ
・コマンドの出力結果を別のコマンドの標準入力に渡すことができます。
sort
コマンドで説明した例をつかって解説します。
[user@localhost ~]$ ls -l /home/user/log | sort -k 5 -n -r
-rw-rw-r--. 1 user user 500 1月 3 00:00 2025 test3.log
-rw-rw-r--. 1 user user 400 1月 4 00:00 2025 test4.log
-rw-rw-r--. 1 user user 300 1月 5 00:00 2025 test5.log
-rw-rw-r--. 1 user user 200 1月 2 00:00 2025 test2.log
-rw-rw-r--. 1 user user 100 1月 1 00:00 2025 test.log
teeコマンド
・標準入力から読み込んでファイルに書き込み、次のコマンドに実行結果を引き渡すコマンドです。
[user@localhost ~]$ ls -l /home/user/log | tee totalLog.txt # ls -lの実行結果をファイルに出力して画面にも表示
-rw-rw-r-- 1 user user 500 1月 3 00:00 2025 test3.log
-rw-rw-r-- 1 user user 400 1月 4 00:00 2025 test4.log
-rw-rw-r-- 1 user user 300 1月 5 00:00 2025 test5.log
-rw-rw-r-- 1 user user 200 1月 2 00:00 2025 test2.log
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.log
[user@localhost ~]$ cat totalLog.txt # ls -l の実行結果がそのまま出力
-rw-rw-r-- 1 user user 500 1月 3 00:00 2025 test3.log
-rw-rw-r-- 1 user user 400 1月 4 00:00 2025 test4.log
-rw-rw-r-- 1 user user 300 1月 5 00:00 2025 test5.log
-rw-rw-r-- 1 user user 200 1月 2 00:00 2025 test2.log
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.log
echoコマンド
・指定した文字列や変数の値を出力することができるコマンドです。
構文:echo 文字列
構文:echo $変数名
[user@localhost ~]$ echo $JAVA_HOME # JAVA_HOMEという環境変数を出力する
/usr/java
Tomcatが再起動しない
※筆者の体験談です
筆者は、サーバの起動・停止を実施したことあるんですが、Tomcatが正常に終了しない という問題に直面しました。
Tomcatが起動しない原因は、/var/run/tomcat/tomcat.pid
に保存されいるPIDと、実際に起動しているtomcat
のサービスのPIDが異なっていたからでした。
そのため、実際のPIDをtomcat.pid
に上書きしないといけないので、その際にecho
コマンドを使用していました。
[root@localhost ~]# ps -ef | grep tomcat # まず実際のプロセスのPIDを調査
USER PID PPID %CPU START TTY TIME COMMAND
tomcat 10000 1 0.1 10:00 ? 0:01 /usr/java/bin/java/・・・
[root@localhost ~]# cat /var/run/tomcat/tomcat.pid # ファイル内のPIDも確認
10001
[root@localhost ~]# echo 10000 > /var/run/tomcat/tomcat.pid
検索関連コマンド
findコマンド
・指定したディレクトリ配下のファイルやディレクトリを検索するコマンドです。検索条件として正規表現を使ったり、検索結果のファイルやディレクトリに対して指定したコマンドを実行したりできます。
構文:find [検索ディレクトリ] [検索条件] [アクション]
[user@localhost ~]$ find /home/user/log -type f "*.log" # 指定ディレクトリ配下のログファイルを検索
検索条件 |
説明 |
---|---|
-type タイプ | ファイルタイプで検索f :ファイル、d :ディレクトリ、l :シンボリックリンク |
-name 文字列 | 文字列を指定して検索 |
-atime 日時 | 最終アクセス日で検索 |
-mtime 日時 | 最終更新日で検索 |
-perm アクセス権 | アクセス権(8進数 or パーミッション)で検索 |
-size サイズ | ファイルサイズで検索 |
-user ユーザ名 | ファイルの所有者で検索 |
アクセス日時 更新日
・アクセス日時:ファイルをアクセスされた(読み込まれた)時刻のこと
・更新日 :ファイルの中身が変更された時の時刻のこと
上記のことから、ファイルを読み込んだだけの時の更新される日時を検索したい場合は -atime
、ファイルに変更加えた時の更新される日時を検索したい場合は -mtime
を使用します。
grepコマンド(global regular expression print)
・指定した文字列を含む行を出力するコマンドです。他のコマンドの標準出力をパイプで標準入力として受け取って、それに対して検索をかけることが多いかと思います。
global / regular expression / print
ファイル全体から / 正規表現に一致する行を / 表示する
構文:grep [オプション] 検索文字列 ファイル名
[user@localhost ~]$ cat test.txt | grep '正常終了' # ファイルの中身から「正常終了」の文字列を含む行を表示
オプション |
説明 |
---|---|
-v | パターンにマッチしない行を表示 |
-f | ファイルから検索パターンを読み込む |
-c | パターンがマッチした行の行数だけ表示 |
-i | 大文字小文字を区別しない |
-n | 検索結果と一緒に行番号も表示 |
-E | 拡張正規表現を使用 |
-F | 検索文字列を正規表現ではなく固定文字列として認識 |
egrep
や fgrep
も存在しますが grep -E = egrep
、grep -F = fgrep
ですので、説明は割愛、気になる方は調べてみてください。
grep -v
の使いどころはどこ
-v
はパターンにマッチしない行を表示となってますが、どういったときに使用するかというと、実行したコマンド自体を表示させたくない場合に使用するのが多いかなと思います。
[root@localhost ~]# ps -ef | grep tomcat # オプション指定なし
USER PID PPID %CPU START TTY TIME COMMAND
tomcat 10000 1 0.1 10:00 ? 0:01 /usr/java/bin/java/・・・
root 2200 1 0.0 10:20 ? 0:00 grep tomcat
⇒オプションなしの場合は、実行したコマンドのプロセスまで表示してしまい見にくくなります
[root@localhost ~]# ps -ef | grep tomcat | grep -v grep # オプション指定あり
USER PID PPID %CPU START TTY TIME COMMAND
tomcat 10000 1 0.1 10:00 ? 0:01 /usr/java/bin/java/・・・
⇒tomcatを含むプロセスを表示後に、実行したgrepコマンド自身のプロセスを除外して表示
awkコマンド(Aho Weinberger Kernighan)
・テキストファイルを処理するコマンドです。
Aho Weinberger Kernighan
Alfred Vaino Aho、Peter Jay Weinberger、Brian Wilson Kernighanの三名が命名
構文:awk '[処理する条件]' [ファイル名]
[user@localhost ~]$ awk -F ',''{ print $3,$5}' test.csv
# CSVファイルを,(カンマ)で区切り、ファイルの中身から第2、5フィールド目を表示させる
オプション |
説明 |
---|---|
-F | フィールドの区切り文字を指定、デフォルトはスペースとタブ |
ロングオプション ショートオプション
ロングオプションは--二文字以上
、ショートオプションは-一文字
普段使っているオプションたちは省略可能なロングオプションの可能性があります!
awk
コマンドを例にとると、
[user@localhost ~]$ awk -F ',''{ print $3,$5}' test.csv
[user@localhost ~]$ awk --field-sepatator ',''{ print $3,$5}' test.csv
上記は、オプションが違うように見えますが、全く同じ処理をします。
ですが、省略形が存在するのにわざわざロングオプションを使用するのは、明示したいときやロングオプションしかない場合に限られるかと思います。
sedコマンド(stream editor)
・テキストに対して編集を行うコマンドです。
構文:sed [オプション] -f スクリプト [ファイル]
構文:sed [オプション] コマンド [ファイル]
構文:sed [オプション] -e コマンド1 -e コマンド2 [ファイル]
[user@localhost ~]$ sed s/abc/ABC/ test.txt # ファイルの「abc」を「ABC」に変換する
オプション |
説明 |
---|---|
-s | パターンに元に置換 s/検索パターン/置換パターン と指定すると置換する |
-d | マッチしタ行を削除する "開始行,終了行d"と指定すると削除する |
-f ファイル | コマンドが書かれたスクリプトファイルを指定 |
-y | 文字の変換 y/検索文字/置換文字/ と指定すると置換する |
whichコマンド
・指定したコマンドの格納されているディレクトリを検索して絶対パスを表示するコマンドです。
[user@localhost ~]$ which systemctl # systemctlコマンドを使用できるか確認
[user@localhost ~]$ echo $? # 前のコマンドの終了ステータスを確認
1 # 「1」の場合は、コマンドが見つからなかったことを示す
[user@localhost ~]$ which ls # lsコマンドを使用できるか確認
/bin/ls # 使用できる場合は絶対パスを表示する
プロセス管理コマンド
psコマンド(process status)
・プロセス情報を確認するコマンドです。
プロセス とは
Linux上のプログラムを実行すると、そのプログラムにメモリが割り当てられて、CPUで処理され、動作中のプログラムはOSで管理されます。この管理する単位のことを プロセス といいます。
今までの説明の中にしれっと出てきましたが、それくらい結構使用頻度が高いコマンドです。
構文:ps [オプション]
[user@localhost ~]$ ps # オプションなしだと、psコマンドを実行した端末で実行されているプロセスを表示
PID TTY TIME CMD
4900 pts/0 00:00:00 ps
7892 pts/0 00:00:01 bash
オプション |
説明 |
---|---|
a | 他のユーザの全てのプロセスを表示 |
-e | 全てのプロセスを表示 |
f | プロセスの親子関係を表示 |
u | プロセスのユーザ情報を表示 |
x | 端末を使用していない全てのプロセスを表示 |
-l | プロセスの詳細情報を表示 |
-p PID | 指定したプロセスID(PID)の情報のみ表示 |
-c プロセス名 | 指定したプロセスのみ表示 |
-w | 長い行を折り返して表示 |
[root@localhost ~]# ps -ef | grep tomcat
USER PID PPID %CPU START TTY TIME COMMAND
tomcat 10000 1 0.1 10:00 ? 0:01 /usr/java/bin/java/・・・
root 2200 1 0.0 10:20 ? 0:00 grep tomcat
上記の ps
コマンドの出力ラベルの説明は以下の通り
項目 |
説明 |
---|---|
USER | プロセスを実行しているユーザ |
PID | プロセスID |
PPID | 親プロセスのPID |
%CPU | CPU使用率 |
START | プロセスの起動時刻 |
TTY | プロセスを実行した端末 |
TIME | 消費したCPU使用率 |
COMMAND | 実行コマンド or 実行プログラム名 |
プロセス関連で top
コマンドや pstree
コマンドが存在しますが、そこまで専門的な業務ではなく全く使用したことがなかったので、ここではこんなコマンドもあるよ~ってだけに留めます。
killコマンド
・ps
コマンドではプロセスを確認しますが、kill
コマンドではプロセスに対してシグナルを送り、プロセスを制御します。
シグナル名 |
シグナルID |
説明 |
---|---|---|
HUP | 1 | ハングアップ(端末との接続が切断) |
INT | 2 | キーボードからの割り込み |
QUIT | 3 | キーボードからのプロセス中止 |
KILL | 9 | 強制終了 |
TERM | 15 | 通常終了 |
CONT | 18 | 一時停止中のプロセスを再開 |
STOP | 19 | 一時停止 |
構文:kill -[シグナル名 or シグナルID] PID
構文:kill -s [シグナル名 or シグナルID] PID
構文:kill -SIGシグナル名 PID
【シナリオ】
・Tomcatを正常終了する。
⇒まずpsコマンドで、対象のプロセスを調べて、その後killコマンドで対象プロセスを正常終了する
[root@localhost ~]# ps -ef | grep tomcat
USER PID PPID %CPU START TTY TIME COMMAND
tomcat 10000 1 0.1 10:00 ? 0:01 /usr/java/bin/java/・・・
root 2200 1 0.0 10:20 ? 0:00 grep tomcat
[root@localhost ~]# kill -TERM 10000
以下の実行例は全て同じ処理です
[root@localhost ~]# kill -TERM 10000
[root@localhost ~]# kill -15 10000
[root@localhost ~]# kill -s TERM 10000
[root@localhost ~]# kill -s 15 10000
[root@localhost ~]# kill -SIGTERM 10000
強制終了(KILL,9)の実行時は気を付けて
kill
コマンドはプロセスのシグナルを送信できますが、取り扱いには注意です。
強制終了であるKILLシグナルは、問答無用でプロセスを終了させてしまうため、ほんとにkillしていいプロセスなのか、killすることで他に影響はないか、事前に確認する必要があります。
kill
コマンドの他にkillall
というコマンドもありますが、ここでは省略いたします。
ジョブ
・1つ以上のコマンドで動作するひとまとまりの処理単位のことです。パイプを使用して複数のコマンドを実行する場合もジョブとなります。
フォアグラウンドジョブとバックグラウンドジョブ
・ジョブには、通常実行される フォアグラウンドジョブ と、時間がかかる処理でもまたなくていい バックグラウンドジョブ に分かれます。
ジョブ |
説明 |
---|---|
フォアグラウンドジョブ | ジョブ実行中、シェル(ターミナル画面)は停止する |
バックグラウンドジョブ | ジョブがバックグランドで実行され、シェルは停止しない |
実行中のジョブはjobs
で確認できます。
[user@localhost ~]$ jobs
[1]+ Runnning ps -ef | grep dbora
[2]- Stopped service dbora reboot
項目 |
説明 |
---|---|
+ (Runnning) | 現在実行中のジョブ |
- (Stopped) | 一時停止中のジョブ |
フォアグラウンドジョブとバックグラウンドジョブの制御
・実行する際にバックグランドで実行指定することもできますが、実行中のジョブをバックグラウンドに変更したり、バックグラウンドで実行しているジョブをフォアグラウンドに変更したりすることもできます。
ジョブ制御 |
説明 |
---|---|
$コマンド & | コマンドをバックグラウンドで実行 |
Ctrl + Z | フォアグラウンドを、バックグラウンドの停止状態へ移行 |
Ctrl + C | フォアグラウンドのジョブを強制終了 |
bg | バックグラウンドで停止中のジョブを実行状態にする |
fg | バックグラウンドをフォアグランドに変更する |
Linuxファイルシステム関連コマンド
dfコマンド(disk free)
・ファイルシステムの空き状況を確認するコマンドです。
構文:df [オプション] [デバイス名/ディレクトリ]
[user@localhost ~]$ df -h # ファイルシステムの使用状況を単位で表示
Filesystem Size Used Free Use% Mount on
/dev/sda1 20G 2G 18G 10% /
tmpfs 500M 20K 500M 1% /dev/shm
オプション |
説明 |
---|---|
-h | 容量を単位(MBやGB)で表示 |
-k | 容量をKB単位で表示 |
-m | 容量をMB単位で表示 |
-i | inodeの使用状況を表示 |
duコマンド(disk used)
・ディレクトリやファイルの容量を表示するコマンドです。
引数になにも指定しない場合、カレントディレクトリを対象として表示します。
構文:du [オプション] [デバイス名/ディレクトリ]
[user@localhost ~]$ du -h # ファイルシステムの使用量を単位で表示
10M . # カレントディレクトリの使用量
8.0k ./http # httpサービスの使用量
オプション |
説明 |
---|---|
-h | 容量を単位(MBやGB)で表示 |
-k | 容量をKB単位で表示 |
-m | 容量をMB単位で表示 |
-a | ディレクトリだけでなく、ファイル容量も表示 |
-c | 合計容量も同時に表示 |
df
コマンドとdu
コマンドの違い
コマンド |
意味 |
説明 |
---|---|---|
df | Disk Free | ファイルシステムの空き容量を表示 |
du | Dick Used | ディレクトリ内のファイルが使用している容量を表示 |
freeコマンド
・システム内のメモリ状況を確認できるコマンドです。
構文:free [オプション]
[root@localhost ~]# free -m # 使用状況を確認
total used free shared budd/cache available
Mem: 15940 5000 940 2000 8000 7000
Swap: 900 400 800
項目の説明
項目 |
説明 |
---|---|
total | 合計メモリ量 |
used | メモリ使用量(実際にプロセスで使用されているメモリ量) |
free | 未使用のメモリ量 |
shared | 共有メモリで使用しているメモリ量 |
buff/cache | バッファ+キャッシュメモリに使用されているメモリ量 |
available | プロセスが利用できるメモリ量 |
vmstat(virtual memory statistics)
・CPU使用率を取得するコマンドです。
[user@localhost ~]$ vmstat
procs -----------memory----------- ---swap--- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 426200 1200 780000 0 0 4 2 85 156 1 0 99 0 0
CPU使用率も算出する方法
・上記のコマンド結果の「cpu」の項目(us、sy、id、wa、st)を足すと100
になります。
CPU使用率 (%) = 100 - idの値
このコマンドは、CPU使用率 を算出する目的で使用していたため、注目する項目は以下だけでもいいと思います。
項目1 | 項目2 | 説明 |
---|---|---|
cpu | us | カーネルコード以外の実行に使用した時間(%) |
sy | カーネルコードの実行に使用時間(%) | |
id | アイドル時間(%) | |
wa | IO待ち時間(%) | |
st | 仮想マシンから盗まれた時間(%) |
パーミッション
・Linuxで作成されるファイルやディレクトリには パーミッション (アクセス権)が設定されます。
このパーミッションを使用することで、ユーザごとにファイルへのアクセスを許可したり禁止したりできます。
ls -l
コマンドを実行した際に、先頭にある r
w
x
で構成されているのがパーミッションです。
[user@localhost ~]$ ls -ltr /home/user
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.txt
アクセス権 |
表記 |
説明 |
---|---|---|
読み取り | r |
read、ファイルの読み取りが可能(内容表示) |
書き込み | w |
write、ファイルへの書き込みが可能(編集、上書きコピー) |
実行 | x |
execute、ファイルの実行が可能(シェルスクリプトの実行) |
ディレクトリへのアクセス権限
アクセス権 |
表記 |
説明 |
---|---|---|
読み取り | r |
read、ディレクトリの読み取りが可能 (ディレクトリに登録されているファイル名の表示) |
書き込み | w |
write、ディレクトリへの書き込みが可能 (新規ファイル作成、削除、名前変更など) |
実行 | x |
execute、ディレクトリに存在するファイルへのアクセスが可能 |
通常ファイル・ディレクトリ・シンボリックリンク
ファイルの種類 |
説明 |
---|---|
- |
通常ファイル |
d |
ディレクトリ |
l |
シンボリックリンク |
パーミッションは8進数で扱うことが多い
パーミッションをいちいち記号で表すと扱いにくいので、以下のように8進数でパーミッションを付与したり、制限したりします。
記号表記 |
8進数 |
---|---|
--- |
0 |
--x |
1 |
-w- |
2 |
-wx |
3 |
r-- |
4 |
r-x |
5 |
rw- |
6 |
rwx |
7 |
上記から、パーミッション「rwx-rw-rw-」の場合は、8進数で「755」となります。
chmodコマンド(change mode)
・パーミッション(アクセス権)を変更することができるコマンドです。パーミッションを指定する場合は、上記で説明したとおり8進数での指定が一般的です。
構文:chmod [オプション] アクセス権 ファイル名
[root@localhost ~]# chmod 744 test.txt # ファイルのパーミッションを744に変更
オプション |
説明 |
---|---|
-R | 指定したディレクトリ以下の全てのファイルのパーミッションを変更 |
8進数以外の記号での設定
8進数以外のパーミッションの指定について
・8進数以外でパーミッションを変更することができますが、業務一年で使用したことはないので、紹介はしますが細かい説明は省略いたします。
なお、 LPIC-1 を受ける方は、ここも範囲ですのでパーミッションについてとSUID・SGID・スティッキービットについてをご参照ください。
カテゴリー |
説明 |
---|---|
u |
所有者 |
g |
グループ |
o |
その他のユーザ |
a |
すべてのユーザ |
定義 |
説明 |
---|---|
+ |
パーミッションの追加 |
- |
パーミッションの削除 |
= |
パーミッションの指定 |
権限 |
説明 |
---|---|
r |
読み取り権限 |
w |
書き込み権限 |
x |
実行権限 |
s |
SUIDまたはSGID |
t |
スティッキービット |
chownコマンド(change owner)
・ファイルやディレクトリの所有者を変更するコマンドです。このコマンドは、root権限のユーザのみ実行できます。
構文:chown[オプション] ユーザ[:グループ] ファイル名 or ディレクトリ名
[root@localhost ~]# chown root test.txt # ファイルの所有者をrootに変更
オプション |
説明 |
---|---|
-R | 指定したディレクトリ以下の全てのファイルの所有者を変更 |
diffコマンド(difference)
・ファイルやディレクトリの内容を比較し、違いを表示するコマンドです。
構文:diff [オプション] ファイル名1 ファイル名2
【シナリオ】
・test.txtに「abc」、test2.txtに「def」が書き込まれているファイルがある
[user@localhost ~]$ diff test.txt test2.txt
1c1
< abc
---
> edf
lnコマンド(link)
・シンボリックリンクを作成するコマンドです。オプションを指定しない場合はハードリンクが作成される。
構文:ln [オプション] リンク元 リンク先
[root@localhost ~]# ln -s test.txt test.lnk # test.txtのシンボリックリンクとしてtest.lnkを作成
[root@localhost ~]# ls -l
lrwxrwxrwx 1 user user 100 1月 1 00:00 2025 test.lnk -> test.txt
-rw-rw-r-- 1 user user 100 1月 1 00:00 2025 test.txt
オプション |
説明 |
---|---|
-s | シンボリックリンクを作成する際に指定する |
シンボリックリンクとハードリンク
・ファイルの実体とファイル名をつなぐ事をリンクといい、リンクには以下の2種類があります。
※ファイルの実体とは、ディスク上に保存されているデータのこと
リンク |
説明 |
---|---|
シンボリックリンク | Windowsのショートカットに該当、 リンク元が配置されている場所にリンクする方式 |
ハードリンク | 1つのファイルの実体を複数のファイル名で表せるリンク、 同じファイルの実体を共有する方式 |
サービス管理コマンド
serviceコマンド
・サービスを起動したり停止したりするコマンドです。
構文:service サービス名 操作
[root@localhost ~]$ service tomcat status
tomcat (pid 4400) is runnning...
操作 |
説明 |
---|---|
start | サービスを起動 |
stop | サービスを停止 |
restart | サービスを再起動 |
status | サービスの状態を表示 |
systemctlコマンド
・サービスを起動したり停止したりするコマンドです。基本的にservice
コマンドと使い方の違いはほとんどありません。
構文:systemctl 操作 サービス名
[root@localhost ~]$ systemctl status tomcat
tomcat (pid 4400) is runnning...
操作 |
説明 |
---|---|
start | サービスを起動 |
stop | サービスを停止 |
restart | サービスを再起動 |
reload | サービスの再読み込み |
status | サービスの状態を表示 |
restart
(サービス再起動)とreload
(設定再読み込み)の違いとは
失敗したときの挙動が異なる
再起動で失敗する場合、停止して成功して起動が失敗するので、正しく起動するまでの間はサービス停止が発生します。
しかし、再読み込みで失敗した場合は、停止をしていないので設定前の状態で起動し続けることができます。
どうしても、サービスを停止したくないときには再読み込みするのがいいでしょう。
chkconfigコマンド(configuration state checker)
・Linuxがシステム起動時に起動するサービスの一覧を表示したり、サービスの登録、削除、サービスの起動をランレベルごとに細かく設定できるコマンドです。コマンドを使用するにはroot権限が必要です。
自分は、一年間でこのコマンドを、サービス一覧表示以外に使用したことがありませんので、細かい説明は--list
オプションのみにします。
構文:chkconfig [オプション] [サービス名]
[root@localhost ~]# chkconfig --list
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
オプション |
説明 |
---|---|
--list | サービスの一覧を表示 |
--add | サービスの登録 |
--del | サービスの削除 |
--h | コマンドのヘルプを表示する |
--v | コマンドのバージョンを表示する |
--level [ランレベル] サービス名 | ランレベル毎にサービスのon/offを設定 |
ランレベル
・onとoffの前についてる0~6の数字のこと、以下の状態を表す。
Run Level |
状態 |
---|---|
0 | システムの停止 |
1 | シングルユーザモード |
2 | マルチユーザモード |
3 | マルチユーザモード |
4 | 未使用 |
5 | マルチユーザモード |
6 | 再起動 |
ランレベルはディストリビューションによって違う
・上記で紹介しているランレベルは、Red Hat Enterprise Linux
、CentOS
、Fedora
での状態です。
他のUbunts
などの状態は、ランレベル4
がマルチユーザモードである、とかの違いがあります。
スケジュール管理コマンド
crontabコマンド
・cron
のスケジュールを編集するコマンドです。スケジュールの管理をしているのは、crond
というデーモンです。また、cron
は全てのユーザが使用できます。
cronとはなんぞやでクーロンについて説明していますので、わからない方はご参照ください
構文:crontab [オプション]
[user@localhost ~]$ crontab -l # userユーザに設定されているクーロンを確認
0 0 * * * /home/user/bin/test.sh
オプション |
説明 |
---|---|
-e | viエディタなどでcrontabファイルを編集 |
-l | crontabファイルの内容を表示 |
-r | crontabファイルの削除 |
-i | crontabファイル削除時の確認 |
-u ユーザ | ユーザを指定してcrontabファイルの編集(rootユーザのみ使用可能) |
crontabファイル
の直接編集は禁止
・crontabファイルは、普通のテキストに設定を記述して、 crontab 編集したテキスト
で/var/spool/cron
配下の実体に反映することができます。
[シナリオ]
・/home/user/crontab/user_crontabに「0 0 * * * /home/user/bin/test.sh」を
追記して、コマンドで実体に反映する
[user@localhost ~]$ cat /home/user/crontab/user_crontab # 編集したファイル内容の確認
0 0 * * * /home/user/bin/test.sh
[user@localhost ~]$ crotnab -l # 現在のcronの設定
※何も設定なし
[user@localhost ~]$ su - # root権限ユーザに切り替え
[root@localhost ~]# cat /var/spool/cron/user # 念のため実体も確認
※何も設定なし
[root@localhost ~]# exit # rootログアウト
[user@localhost ~]$ crontab /home/user/crontab/user_crontab # cron設定の反映
[user@localhost ~]$ crontab -l # cronが設定されていることの確認
0 0 * * * /home/user/bin/test.sh
なるべく実体を直接編集すると、テスト用で反映させたいときには不便です。
一旦、ローカルのファイルを編集して、現在設定しているcrontabファイルをバックアップして、その後、編集した内容を反映させれば、戻すのも簡単ですし差分もわかりやすく管理しやすいと思います。(多分・・・)
サーバ時間管理コマンド
ハードウェアクロックとシステムクロック
・Linuxには、 ハードウェアとして内蔵されている ハードウェアクロック と、メモリ上で動作する システムクロック が存在します。
date
コマンドは、システムクロックを参照して現在の日時を表示します。
システムクロックとハードウェアの修正
・システムクロックを修正するには、 date
コマンドで以下の書式に従って設定を行います。
書式 |
MM | DD | hh | mm | CC | YY | SS |
---|---|---|---|---|---|---|---|
意味 |
月 | 日 | 時 | 分 | 西暦上二桁 | 西暦下二桁 | 秒 |
hwclockコマンド(hardware clock)
・ハードウェアクロックを修正するコマンドです。
構文:hwclock [オプション]
[root@localhost ~]# hwclock -w # システムクロックの時刻をハードウェアクロックに反映
オプション |
説明 |
---|---|
-r | ハードウェアクロックを表示 |
-s(--hctosys) | ハードウェアクロックの時刻をシステムクロックに反映 |
-w(--systohc) | システムクロックの時刻をハードウェアクロックに反映 |
NTPによる時刻設定
・ハードウェアクロック、システムクロックともに完全に正確な時刻とは限りません。正確な時刻を取得するためにはインターネットなどのクロック同期を行うプロトコルである NTP (Network Time Protocol)を使用します。
NTPサーバは、一般向けに公開されたものを利用できますが、組織内で構築してNTPサーバとして利用することもできます。NTPサーバの設定は、 /etc/ntp.conf
で行います。
また、NTPサーバの時刻を取得をするためには ntpdate -q
コマンドを使用することで取得できます。
ネットワーク関連コマンド
ポート番号
・TCP/IP通信において、コンピュータが通信に使用するプログラムを識別するための番号です。
以下が主なポート番号です。
ポート番号 |
プロトコル |
サービス |
説明 |
---|---|---|---|
20 | TCP | FTP | FTP:データ転送 |
21 | TCP/UDP | FTP | FTP:制御情報 |
22 | TCP | ssh | ssh接続 |
23 | TCP | telnet | telnet接続 |
25 | TCP/UDP | SMTP | 電子メール(送信) |
53 | TCP/UDP | DNS | 名前解決 |
80 | TCP | HTTP | Web接続 |
110 | TCP | POP3 | 電子メール(受信) |
143 | TCP | IMAP | 電子メール(受信) |
161 | UDP | SNMP | ネットワーク監視 |
443 | TCP | HTTPS | SSLによるHTTP接続 |
465 | TCP | SMTPS | SSLによるSMTP接続 |
993 | TCP | IMAPS | SSLによるIMAP接続 |
995 | TCP | POP3S | SSLによるPOP接続 |
TCPとUDPとは
・TCPとUDPとは、IPなどと同様にインターネットにて標準的に利用されているプロトコルです。
TCP(Transmission Control Protocol)
信頼性の高い通信を実現 するために使用されるプロトコル
UDP(User Datagram Protocol)
信頼性が高くないが、速さやリアルタイム性を求める通信に使用 するために使用されるプロトコル
TCPとUDPの比較
プロトコル |
TCP |
UDP |
---|---|---|
通信方式 |
コネクション型 | コネクションレス型 |
信頼性 |
高い | 低い |
転送速度 |
低速 | 高速 |
上位のプロトコル |
HTTP、Telnet、FTP、POP・・・ | DNS、NTP、DHCP、SNMP・・・ |
主な用途 |
Webの閲覧、メールの送受信、 ファイル転送 |
音声通話、マルチキャスト通信、 ブロードキャスト通信 |
主な特徴 |
・ポート番号を利用した上位プロトコルへのデータの受け渡し ・コネクションの確立、維持、切断 ・順序制御、再送制御、ウィンドウ制御、フロー制御 |
・ポート番号を利用した上位プロトコルへのデータの橋渡し ・オーバヘッドが少ない ・信頼性がない |
pingコマンド(packet internet groper)
・ネットワーク上のホストが起動しているがどうか、IP通信ができるかどうかを調査したい場合に使用するコマンドです。
構文:ping [オプション]
[root@localhost ~]# ping 10.172.10.0 # 指定したサーバが生きているか確認
64 bytes from 10.172.10.0:icmp_seq=1 ttl=128 time=0.998 ms
オプション |
説明 |
---|---|
-c 回数 | パケットを送信する回数を指定 |
i 秒 | パケットの送信間隔を秒単位で指定 |
ホスト名とIPアドレス
・ホスト名とIPアドレスの名前解決は、 /etc/hosts
ファイルで設定します。名前解決は通常DNSサーバで行いますが、小規模のネットワークでは/etc/hosts
を作成して、全てのクライアント(サーバ)に配布することでネットワーク上のホスト名からIPアドレスを紐づけられて通信できます。しかし、変更が発生した場合、配布しているサーバに対して再配布して書き換える必要があるため、運用上問題があります。
・また、名前解決(ホスト名とIPアドレスを相互に交換する仕組み)の問い合わせを行う順番について、**/etc/nsswitch.conf
**ファイルで定義します。Linuxでの名前解決には、以下の方法があります。
/etc/hostsファイルでの問い合わせ(files)
LDAPサーバへの問い合わせ(ldap)
DNSサーバへの問い合わせ(dns)
上記の順番で名前解決するように設定されていることが多いです。
まとめ
・エンジニア1年を通して使用したLinuxコマンドを紹介してきました。もちろん、思い出せないコマンドや、使用していたけど忘れてしまったコマンドもありますが、結構網羅してると思います。思い出したり、使用したコマンドが増えたりした場合は追記したいと思います。
また、間違いがありましたがご教授お願いいたします。