linux
LINUX

【完全版】Linuxコマンドチートシート

https://qiita.com/Tun/items/e8e2a4a5fab018d7f6cd?utm_source=Qiita+%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=0e0d152d08-Qiita_newsletter_656_01_30_2025&utm_medium=email&utm_term=0_e44feaa081-0e0d152d08-68745602&mc_cid=0e0d152d08&mc_eid=72d614e548

【完全版】Linuxコマンドチートシート

最終更新日 2025年01月20日投稿日 2025年01月20日

はじめに

 今回の記事は、私がエンジニア1年のなかで使用頻度の高いコマンドから、これ便利だったなというコマンドを、あとで見返せるようにチートシート的な感じでまとめていきます。
 また、コマンドのオプションについて、紹介してるもの以外にもいろいろありますが、あくまで自分が業務内で使用したオプションや、使用頻度が高いオプションに絞って紹介していますのでご了承ください。

事前準備

 本書は、以下のようにコマンド説明オプションコメントの構成に則って解説していきます。

コマンド:beginner::star::star::star:(難易度)

・ここに説明を書きます

コマンドの使用例

 構文:コマンド [オプション] ファイル名
[]    :任意、指定しなくてもよい
[]なし:必須、指定しないと動作しない
 
[user@localhost ~]$ ここに例を書きます
オプション説明
オプションここにオプションの説明を書きます
オプションオプションに関しては使用頻度が高い順に書きます

:point_up:ここにコメントを書きます:point_up:

:point_up:ここに注意すべきことを書きます:point_up:

:point_up:ここにやってはいけないことを書きます:point_up:

前章:Linuxの構造について

・Linuxでは、FHS(Filesystem Hierarchy Standard)という既定に基づいて標準化されたファイルシステム(ディレクトリ構造)を採用しています。
 これにより、CentOSやDebianなど異なるディストリビューションでも基本的なディレクト構成は統一されています。

・FHSは、ディレクトリの最上位階層であるルートファイルシステム/ )に含める必要があるディレクトリや各ディレクトリの役割、ファイルの配置場所を定義しており、ルートには以下の5つのディレクトリを含める必要があります。

:black_small_square:ルートに含める必要のあるディレクトリ

ディレクトリ名説明
/bin一般ユーザでも実行可能な基本的はコマンドを格納
/sbinrootユーザのみが実行可能なシステム管理コマンドを格納
/etcシステムやコマンドの各種設定ファイル、スクリプトファイルを格納
/devハードディスク、CD-ROM、DVD-ROMなどデバイスファイルを格納
/lib共有ライブラリ、カーネルモジュールを格納

:black_small_square:ルート以外の主なディレクトリ

ディレクトリ名説明
/opt追加のパッケージやプログラムがインストールされるディレクトリ
/rootrootユーザ専用のディレクトリ
/home一般ユーザ専用のディレクトリ
/tmp一時的な作業ディレクトリ、全てのユーザが読み書き可能
/var ※1システム関連のログファイルを格納するディレクトリ
/usr ※2一般ユーザが共用するコマンド、ライブラリ等を格納

:black_small_square:/var配下の主なディレクト※1

ディレクトリ名説明
/var/logシステムのログファイル(messages)、メールログ(maillog)などを格納
/var/runシステム状態を示すファイルを格納
/var/spool送信待ちメール(/var/spool/mqueue)などを格納

cronの実体はどこに??
余談なりますが、ユーザごとに存在する定時処理を行うためのcronの実態の格納先は、/var/spool/cronに格納されています。
:point_right:cronとはなんぞや

:black_small_square:/usr配下の主なディレクト※2

ディレクトリ名説明
/usr/bin一般ユーザ、rootユーザが使用する基本コマンドを格納
/usr/sbinシステム管理コマンドを格納
/usr/libプログラムに必要な共有ライブラリを格納

基本的なファイル操作コマンド:beginner:

lsコマンド(list segments)

・ファイルの一覧を表示するコマンドで、オプション次第でファイル属性、ディレクトリ一覧の情報を取得することができます。
 また、コマンド実後の出力結果では、ファイル種別により、ディレクトリシンボリックリンク 、実行可能ファイル圧縮ファイル/アーカイブ画像 のように異なる色で表示されます。

lsコマンド出力結果

構文: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など単位で表示

オプションは複数指定できるの??:thinking:
lsコマンドに限らずLinuxコマンドのオプションは、複数指定することで出力結果が見やすくなったり、全く別の挙動になったりします。
lsコマンドに関して、-lを指定すると、パーミッション所有者サイズ更新日時を見ることができます。
また、オプションを指定しないと操作しないコマンドも存在します。(例:tar)

:point_down:よく使うlsコマンドのオプション組み合わせ:point_down:

実行例

【以下のような構造の場合】
/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コマンド出力結果

構文:cat [オプション] ファイル名

[user@localhost ~]$ cat test.txt   # test.txtの内容を表示
Hello,My name is Tun.
オプション説明
-n各行ごとに行番号を付加して表示

touchコマンド

・ファイルのタイムスタンプ(最終アクセス日時・最終更新日時)を変更するコマンドです。
しかし、時間を指定せずに実行すると空のファイルが作成されるという、空ファイル作成の用途で多く使用していました。

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 [オプション] コピー元ファイル名 コピー先ディレクトリ名
構文: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 -pcp -prの二つさえ抑えておけば大丈夫かと思います。
:point_down:cp -prの挙動確認:point_down:

実行例

【コマンド実行前の構造】
 /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 [オプション] 移動元ファイル名/移動元ディレクトリ名 移動先ディレクトリ名
構文: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コマンドも同様)
これは、ユーザの誤操作でファイルの移動や削除するというヒューマンエラーを防止する働きがあります。

:loudspeaker: :point_down_tone3:筆者の体験談です:point_down_tone3:
しかしこれの何が問題かというと、-iオプションは実行するたびに上書きをしてよいか確認してくるので、もし仮に重要な定時処理を担うシェルスクリプトに記述してしまうと、意図しない箇所で止まってエラーもはかず に処理が実行されないということが起きてしまう可能性があります:bangbang:

:point_right_tone3: 詳細を調べると、シェルスクリプトを実行する場合は環境変数を読み込まないようになっているみたいで、mvコマンドは本番環境でも確認されることなく無事に実行されていました・・・。
(リリース前日に、「ここって上書き確認されないよね?大丈夫?」って言われたときは冷や汗止まりませんでした、結局動いてくれたのでよかった:sob:)

rmコマンド(remove)

・ファイルやディレクトリの削除を行うコマンドです。

rmコマンド出力結果

構文:rm [オプション] ファイル名 or ディレクトリ名

[user@localhost ~]$ rm -f test.sh    # ファイルを確認なしで削除
[user@localhost ~]$ rm -rf TestDir   # ディレクトリ配下を確認なしで全て削除
オプション説明
-f削除の確認を行わない
-rディレクトリも含めて、ディレクトリとファイルの全てを削除する
-i削除する前に確認する

-fは便利だけど乱用禁止:x:
前述のとおり、コマンド実行時の確認(エイリアス設定時等)は便利な反面、面倒であり正しく動作しない場合があります。
rmコマンドには確認なしで強制突破するオプションが備わっています!
しかし、楽だからと言って乱用、特に管理者(rootユーザ)の場合に使用しすぎると、その癖が抜けないようになってしまい、ルートディレクトリでコマンドを実行してしまうとサーバの全ファイルを削除してしまい取り返しのつかないことになってしまいます!
:warning:初心者の方は 慎重にコマンドを実行 してください!

ディレクトリを管理・操作コマンド:beginner:

pwdコマンド(print working directory)

・現在の作業ディレクトリを確認するコマンドです。

pwdコマンド出力結果

構文:pwd [ディレクトリ名] 

[user@localhost ~]$ pwd    # 現在の作業ディレクトリを確認 
/home/user 

cdコマンド(change directory)

・現在の作業ディレクトリを変更(移動)するコマンドです。とてもよく使うコマンドの一つです。

mvコマンド出力結果

構文: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補完機能を使えば、絶対パスの指定を省略できます!!

:white_check_mark: 指定次第で移動先が変わる!:white_check_mark:
当たり前のこと言ってますが、以下の指定次第で移動が楽になります!

cdコマンドの指定先

[user@localhost ~]$ cd /home/user/log    # これが普通の移動の方法
[user@localhost ~]$ cd                  # ユーザのホームディレクトリに移動
[user@localhost ~]$ cd ~                 # これもホームディレクトリに移動
[user@localhost ~]$ cd ..                # 親ディレクトリに移動

mkdirコマンド(make dirctory)

・ディレクトリを作成するコマンドです。

mkdirコマンド出力結果

構文: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)

・ディレクトリを削除するコマンドで、削除するには削除対象のディレクトリは空である必要があります。
全くと言っていほど使いません。

rmkdirコマンド出力結果

構文:rmdir ディレクトリ名
[user@localhost ~]$ rmdir user               # userディレクトリを削除

応用的なファイル操作コマンド:star:

headコマンド

・ファイルの先頭から10行を表示するコマンドで、ログファイルを確認するときなどに使用していました。(オプションなしのデフォルトが10行)

headコマンド出力結果

構文:head [オプション] ファイル名

[user@localhost ~]$ head -n 3 test.txt   # test.txtの内容を先頭から3行表示
1
2
3
オプション説明
-n先頭から表示する行数の指定
-行数先頭から表示する行数の指定
-c先頭から表示するバイト数の指定

tailコマンド

・ファイルの末尾から10行を表示するコマンドで、これもログファイルを確認するときなどに使用していました。(オプションなしのデフォルトが10行)

tailコマンド出力結果

構文:tail [オプション] ファイル名

[user@localhost ~]$ tail -n 3 test.txt   # test.txtの内容を末尾から3行表示
8
9
10
オプション説明
-n末尾から表示する行数の指定
-行数末尾から表示する行数の指定
-c末尾から表示するバイト数の指定
-fファイルの末尾に追加された行をリアルタイムで表示

ログファイルの監視にとても便利
tail -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コマンド出力結果

構文:sort [オプション] ファイル名

[user@localhost ~]$ sort -n -r test.txt   # test.txtの内容を数字として逆順に表示
10
9
8
~省略~
2
1
オプション説明
-r降順にソート
-kソートのキーとして使用するフィールドを指定
-n数字を文字ではなく数値として処理
-f大文字小文字の区別を無視
-b空白を無視

lsコマンドと併用すると便利かも
ls -lの出力結果を、ファイルのサイズの大きい順位ソートする場合は以下のように使用する。
:warning:以下の例で使用している |(パイプ) は後述します

コマンド実行例

[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コマンド出力結果

構文: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つのアーカイブファイルにしたり、圧縮/展開するコマンドです。
:white_check_mark:複数のファイルを1つのファイルにまとめることを アーカイブ と言います。tarコマンドで圧縮するときには -z や -j を指定する必要があります。
また、オプションを指定するときの-(ハイフン)は省略できます。

tarコマンド出力結果

構文:tar [オプション] ファイル名

[user@localhost ~]$ tar cvf archive.tar test1.txt test2.txt 
# 2つのファイルをarchive.tarという名前でアーカイブ化
オプション説明
-cアーカイブの作成
-v詳細な情報を表示 
-f ファイル名アーカイブするときのファイル名を指定
-xアーカイブからファイルを取り出す(展開する)
-zgzipによる圧縮・展開

tarコマンドのオプションはほぼ2種類 
上記の例ではアーカイブしていますが、その他はそれを展開するときに指定する -xvf のオプションくらいしか使用する場面がない気がします。

tar xvfの実行例

[user@localhost ~]$ tar xvf archive.tar 
# カレントディレクトリにアーカイブ化したファイルを展開する

scpコマンド(secure copy)

・異なるサーバ間でファイルの送受信を行うためのコマンドです。

scpコマンド出力結果

送信構文: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 秘密鍵文字数のみ表示
-1SSH1を使用する
-2SSH2を使用する
-4IPv4を使用する 
-6IPv6を使用する

ftpコマンド(file transfer protocol)

・ファイルの送受信を FTPモード で行うコマンドです。ftpコマンド自体は FTP(File Transfer Protocol) といプロトコルを使用しており、FTPモードに切り替えるのみのコマンドです。

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]サーバ上の指定したファイルを削除
byeFTPモードのセッションを終了

/var/log/xferlogってなに??
:point_right:FTPで転送ログ情報が出力されるログファイルのこと
いつ誰にどのサイズのファイルを何秒で転送したかのログが残されます

今、どのサーバにいるの??
:bell:何かと使える hostname コマンドについて
自分が今どのサーバにログインしているかはコマンドプロンプトを見ればホスト名はわかりますが、hostnameコマンドを使えばIPアドレスも表示することができます!

実行例

【APサーバ情報】
IP       :10.172.10.0
ホスト名  :APSV01

[user@localhost ~]$ hostname       # オプションなしはホスト名表示
APSV01
[user@localhost ~]$ hostname -I    # -IオプションはIPアドレス表示
10.172.10.0

:white_check_mark: オプションには -i と -I が存在しますが違いは以下です。

オプション説明
-iDNSや /etc/hosts によって名前解決してるホスト名のIPアドレス
-Iネットワークに接続している 全てのIPアドレス

:point_right:/etc/hosts には、IPアドレスとホスト名の関係が記述されています。

その他のコマンド:star:

その他のコマンドを説明する前に以下を説明します。

:black_small_square:標準入力・標準出力・標準エラー出力
・Linuxコマンドは、標準入力・標準出力・標準エラー出力を処理するようにできています。

入出力名説明
標準入力文字を入力しコマンドに渡す 例)キーボード
標準出力コマンドやプログラムの実行結果をディスプレイに出力
標準エラー出力コマンドやプログラムのエラーメッセージをディスプレイに出力

:black_small_square:リダイレクトとパイプの概要
・コマンドの入出力をファイルに切り替える機能を リダイレクト > といい、コマンドの出力結果を別のコマンドの標準入力に渡す機能を パイプ | といいます。

image.png

リダイレクト

・通常、コマンドの入力をキーボードを使用して、そのコマンドの実行結果はディスプレイ上に表示されます。
しかし 、 リダイレクト を使用すれば、コマンドの事項結果を画面上に表示されるのではなくファイルに保存することができます。

リダイレクト説明
>コマンドの実行結果(標準出力)をリダイレクト(上書き)
>>コマンドの実行結果(標準出力)をファイルに追記
<入力のリダイレクト
<<入力終端文字の指定
2>コマンドの実行結果(エラー標準出力)をファイルに設定
2>&1コマンドの標準出力と標準エラー出力をファイルに設定

:black_small_square:具体的な使用例

リダイレクト説明
コマンド > ファイルコマンドの「標準出力」をファイルに書き込む
コマンド < ファイルファイルの内容をコマンドの「標準入力」へ送る
コマンド >> ファイルコマンドの「標準出力」をファイルに追記
コマンド 2> ファイルファイルに「エラー出力」を書き込む
コマンド 2>> ファイルファイルに「エラー出力」を追記
コマンド > ファイル 2>&1ファイルに「標準出力」と「エラー出力」を書き込む
コマンド >> ファイル 2>&1ファイルに「標準出力」と「エラー出力」を追記する
コマンド &> ファイルファイルに「標準出力」と「エラー出力」を同じファイルに書き込む
コマンド << 終端文字終了文字が現れるまで「標準入力」へ送る
image.png

パイプ

・コマンドの出力結果を別のコマンドの標準入力に渡すことができます。
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
image.png

teeコマンド

・標準入力から読み込んでファイルに書き込み、次のコマンドに実行結果を引き渡すコマンドです。

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
image.png

echoコマンド

・指定した文字列や変数の値を出力することができるコマンドです。

echoコマンド出力結果

構文:echo 文字列
構文:echo $変数名

[user@localhost ~]$ echo $JAVA_HOME   # JAVA_HOMEという環境変数を出力する
/usr/java

Tomcatが再起動しない :interrobang:
:loudspeaker: :point_down:筆者の体験談です:point_down:
筆者は、サーバの起動・停止を実施したことあるんですが、Tomcatが正常に終了しない という問題に直面しました。
Tomcatが起動しない原因は、/var/run/tomcat/tomcat.pid に保存されいるPIDと、実際に起動しているtomcatのサービスのPIDが異なっていたからでした。
そのため、実際のPIDをtomcat.pidに上書きしないといけないので、その際にechoコマンドを使用していました。

tomcatのPIDを正規に変更する

[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

検索関連コマンド :star::star:

findコマンド

・指定したディレクトリ配下のファイルやディレクトリを検索するコマンドです。検索条件として正規表現を使ったり、検索結果のファイルやディレクトリに対して指定したコマンドを実行したりできます。

findコマンド出力結果

構文:find [検索ディレクトリ] [検索条件] [アクション]

[user@localhost ~]$ find /home/user/log -type f "*.log"  # 指定ディレクトリ配下のログファイルを検索
検索条件説明
-type タイプファイルタイプで検索
f:ファイル、d:ディレクトリ、l:シンボリックリンク
-name 文字列文字列を指定して検索
-atime 日時最終アクセス日で検索
-mtime 日時最終更新日で検索
-perm アクセス権アクセス権(8進数 or パーミッション)で検索
-size サイズファイルサイズで検索
-user ユーザ名ファイルの所有者で検索

アクセス日時  更新日 
アクセス日時:ファイルをアクセスされた(読み込まれた)時刻のこと
更新日   :ファイルの中身が変更された時の時刻のこと
:point_right:上記のことから、ファイルを読み込んだだけの時の更新される日時を検索したい場合は -atime、ファイルに変更加えた時の更新される日時を検索したい場合は -mtime を使用します。

grepコマンド(global regular expression print)

・指定した文字列を含む行を出力するコマンドです。他のコマンドの標準出力をパイプで標準入力として受け取って、それに対して検索をかけることが多いかと思います。
global / regular expression / print
:point_right:ファイル全体から / 正規表現に一致する行を / 表示する

grepコマンド出力結果

構文:grep [オプション] 検索文字列 ファイル名

[user@localhost ~]$ cat test.txt | grep '正常終了'    # ファイルの中身から「正常終了」の文字列を含む行を表示
オプション説明
-vパターンにマッチしない行を表示
-fファイルから検索パターンを読み込む
-cパターンがマッチした行の行数だけ表示
-i大文字小文字を区別しない
-n検索結果と一緒に行番号も表示
-E拡張正規表現を使用
-F検索文字列を正規表現ではなく固定文字列として認識

:warning:egrep や fgrep も存在しますが grep -E = egrepgrep -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
:point_right:Alfred Vaino Aho、Peter Jay Weinberger、Brian Wilson Kernighanの三名が命名

awkコマンド出力結果

構文:awk '[処理する条件]' [ファイル名]

[user@localhost ~]$ awk -F ',''{ print $3,$5}' test.csv  
# CSVファイルを,(カンマ)で区切り、ファイルの中身から第2、5フィールド目を表示させる
オプション説明
-Fフィールドの区切り文字を指定、デフォルトはスペースとタブ

ロングオプション  ショートオプション 
:bell:ロングオプションは--二文字以上、ショートオプションは-一文字
普段使っているオプションたちは省略可能なロングオプションの可能性があります!
awkコマンドを例にとると、

オプション比較

[user@localhost ~]$ awk -F ',''{ print $3,$5}' test.csv  
[user@localhost ~]$ awk --field-sepatator ',''{ print $3,$5}' test.csv  

上記は、オプションが違うように見えますが、全く同じ処理をします。
ですが、省略形が存在するのにわざわざロングオプションを使用するのは、明示したいときやロングオプションしかない場合に限られるかと思います。

sedコマンド(stream editor)

・テキストに対して編集を行うコマンドです。

sedコマンド出力結果

構文: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コマンド

・指定したコマンドの格納されているディレクトリを検索して絶対パスを表示するコマンドです。

whichコマンド実行結果

[user@localhost ~]$ which systemctl  # systemctlコマンドを使用できるか確認
[user@localhost ~]$ echo $?          # 前のコマンドの終了ステータスを確認
1                                    # 「1」の場合は、コマンドが見つからなかったことを示す

[user@localhost ~]$ which ls         # lsコマンドを使用できるか確認
/bin/ls                              # 使用できる場合は絶対パスを表示する

プロセス管理コマンド:star::star::star:

psコマンド(process status)

・プロセス情報を確認するコマンドです。
:white_check_mark: プロセス とは:question:
:point_right:Linux上のプログラムを実行すると、そのプログラムにメモリが割り当てられて、CPUで処理され、動作中のプログラムはOSで管理されます。この管理する単位のことを プロセス といいます。
今までの説明の中にしれっと出てきましたが、それくらい結構使用頻度が高いコマンドです。

psコマンド実行結果

構文: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

:point_up:上記の ps コマンドの出力ラベルの説明は以下の通り

項目説明
USERプロセスを実行しているユーザ
PIDプロセスID
PPID親プロセスのPID
%CPUCPU使用率
STARTプロセスの起動時刻
TTYプロセスを実行した端末
TIME消費したCPU使用率
COMMAND実行コマンド or 実行プログラム名

:warning: プロセス関連で topコマンドや pstreeコマンドが存在しますが、そこまで専門的な業務ではなく全く使用したことがなかったので、ここではこんなコマンドもあるよ~ってだけに留めます。

killコマンド

psコマンドではプロセスを確認しますが、killコマンドではプロセスに対してシグナルを送り、プロセスを制御します。

シグナル名シグナルID説明
HUP1ハングアップ(端末との接続が切断)
INT2キーボードからの割り込み
QUIT3キーボードからのプロセス中止
KILL9強制終了
TERM15通常終了
CONT18一時停止中のプロセスを再開
STOP19一時停止

killコマンド実行結果

構文: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

:white_check_mark::point_down: 以下の実行例は全て同じ処理です :point_down:

killコマンドの構文は多いよね

[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

:loudspeaker:強制終了(KILL,9)の実行時は気を付けて
killコマンドはプロセスのシグナルを送信できますが、取り扱いには注意です。
強制終了であるKILLシグナルは、問答無用でプロセスを終了させてしまうため、ほんとにkillしていいプロセスなのか、killすることで他に影響はないか、事前に確認する必要があります。

:warning: killコマンドの他にkillallというコマンドもありますが、ここでは省略いたします。

ジョブ

・1つ以上のコマンドで動作するひとまとまりの処理単位のことです。パイプを使用して複数のコマンドを実行する場合もジョブとなります。

:black_small_square: フォアグラウンドジョブとバックグラウンドジョブ
・ジョブには、通常実行される フォアグラウンドジョブ と、時間がかかる処理でもまたなくていい バックグラウンドジョブ に分かれます。

ジョブ説明
フォアグラウンドジョブジョブ実行中、シェル(ターミナル画面)は停止する
バックグラウンドジョブジョブがバックグランドで実行され、シェルは停止しない
image.png
image.png

:white_check_mark:実行中のジョブはjobsで確認できます。

jobsコマンド出力結果

[user@localhost ~]$ jobs
[1]+ Runnning   ps -ef | grep dbora 
[2]- Stopped    service dbora reboot
項目説明
+ (Runnning)現在実行中のジョブ
– (Stopped)一時停止中のジョブ

:black_small_square: フォアグラウンドジョブとバックグラウンドジョブの制御
・実行する際にバックグランドで実行指定することもできますが、実行中のジョブをバックグラウンドに変更したり、バックグラウンドで実行しているジョブをフォアグラウンドに変更したりすることもできます。

ジョブ制御説明
$コマンド &コマンドをバックグラウンドで実行
Ctrl + Zフォアグラウンドを、バックグラウンドの停止状態へ移行
Ctrl + Cフォアグラウンドのジョブを強制終了
bgバックグラウンドで停止中のジョブを実行状態にする
fgバックグラウンドをフォアグランドに変更する

Linuxファイルシステム関連コマンド:star::star::star:

dfコマンド(disk free)

・ファイルシステムの空き状況を確認するコマンドです。

dfコマンド出力結果

構文: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単位で表示
-iinodeの使用状況を表示

duコマンド(disk used)

・ディレクトリやファイルの容量を表示するコマンドです。
引数になにも指定しない場合、カレントディレクトリを対象として表示します。

duコマンド出力結果

構文:du [オプション] [デバイス名/ディレクトリ]

[user@localhost ~]$ du -h    # ファイルシステムの使用量を単位で表示
10M     .           # カレントディレクトリの使用量
8.0k    ./http      # httpサービスの使用量
オプション説明
-h容量を単位(MBやGB)で表示
-k容量をKB単位で表示
-m容量をMB単位で表示
-aディレクトリだけでなく、ファイル容量も表示
-c合計容量も同時に表示

:black_small_square: dfコマンドとduコマンドの違い

コマンド意味説明
dfDisk Freeファイルシステムの空き容量を表示
duDick Usedディレクトリ内のファイルが使用している容量を表示

freeコマンド

・システム内のメモリ状況を確認できるコマンドです。

freeコマンド出力結果

構文:free [オプション]

[root@localhost ~]# free -m     # 使用状況を確認
           total     used      free      shared    budd/cache     available
Mem:       15940     5000       940        2000          8000          7000
Swap:        900      400       800

:black_small_square: 項目の説明

項目説明
total合計メモリ量
usedメモリ使用量(実際にプロセスで使用されているメモリ量)
free未使用のメモリ量
shared共有メモリで使用しているメモリ量
buff/cacheバッファ+キャッシュメモリに使用されているメモリ量
availableプロセスが利用できるメモリ量

vmstat(virtual memory statistics)

・CPU使用率を取得するコマンドです。

vmstatコマンド出力結果


[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

:point_right: CPU使用率も算出する方法
・上記のコマンド結果の「cpu」の項目(us、sy、id、wa、st)を足すと100になります。
CPU使用率 (%) = 100 – idの値
このコマンドは、CPU使用率 を算出する目的で使用していたため、注目する項目は以下だけでもいいと思います。

項目1項目2説明
cpuusカーネルコード以外の実行に使用した時間(%)
syカーネルコードの実行に使用時間(%)
idアイドル時間(%)
waIO待ち時間(%)
st仮想マシンから盗まれた時間(%)

パーミッション:star:

・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


:black_small_square: ファイルへのアクセス権限

アクセス権表記説明
読み取りrread、ファイルの読み取りが可能(内容表示)
書き込みwwrite、ファイルへの書き込みが可能(編集、上書きコピー)
実行xexecute、ファイルの実行が可能(シェルスクリプトの実行)

:black_small_square: ディレクトリへのアクセス権限

アクセス権表記説明
読み取りrread、ディレクトリの読み取りが可能
(ディレクトリに登録されているファイル名の表示)
書き込みwwrite、ディレクトリへの書き込みが可能
(新規ファイル作成、削除、名前変更など)
実行xexecute、ディレクトリに存在するファイルへのアクセスが可能
image.png

:black_small_square: 通常ファイル・ディレクトリ・シンボリックリンク

ファイルの種類説明
-通常ファイル
dディレクトリ
lシンボリックリンク

:white_check_mark: パーミッションは8進数で扱うことが多い :bangbang:
:point_right:パーミッションをいちいち記号で表すと扱いにくいので、以下のように8進数でパーミッションを付与したり、制限したりします。

記号表記8進数
---0
--x1
-w-2
-wx3
r--4
r-x5
rw-6
rwx7

上記から、パーミッション「rwx-rw-rw-」の場合は、8進数で「755」となります。

chmodコマンド(change mode)

・パーミッション(アクセス権)を変更することができるコマンドです。パーミッションを指定する場合は、上記で説明したとおり8進数での指定が一般的です。

chmodコマンド出力結果

構文:chmod [オプション] アクセス権 ファイル名

[root@localhost ~]# chmod 744 test.txt   # ファイルのパーミッションを744に変更
オプション説明
-R指定したディレクトリ以下の全てのファイルのパーミッションを変更

:black_small_square: 8進数以外の記号での設定

:loudspeaker: 8進数以外のパーミッションの指定について
・8進数以外でパーミッションを変更することができますが、業務一年で使用したことはないので、紹介はしますが細かい説明は省略いたします。
なお、 LPIC-1 を受ける方は、ここも範囲ですのでパーミッションについてSUID・SGID・スティッキービットについてをご参照ください。

カテゴリー説明
u所有者
gグループ
oその他のユーザ
aすべてのユーザ
定義説明
+パーミッションの追加
-パーミッションの削除
=パーミッションの指定
権限説明
r読み取り権限
w書き込み権限
x実行権限
sSUIDまたはSGID
tスティッキービット

chownコマンド(change owner)

・ファイルやディレクトリの所有者を変更するコマンドです。このコマンドは、root権限のユーザのみ実行できます。

chownコマンド出力結果

構文:chown[オプション] ユーザ[:グループ] ファイル名 or ディレクトリ名

[root@localhost ~]# chown root test.txt   # ファイルの所有者をrootに変更
オプション説明
-R指定したディレクトリ以下の全てのファイルの所有者を変更

diffコマンド(difference)

・ファイルやディレクトリの内容を比較し、違いを表示するコマンドです。

diffコマンド出力結果

構文:diff [オプション] ファイル名1 ファイル名2 

【シナリオ】
・test.txtに「abc」、test2.txtに「def」が書き込まれているファイルがある

[user@localhost ~]$ diff test.txt test2.txt
1c1
< abc
---
> edf

lnコマンド(link)

・シンボリックリンクを作成するコマンドです。オプションを指定しない場合はハードリンクが作成される。

lnコマンド出力結果

構文: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シンボリックリンクを作成する際に指定する

:black_small_square: シンボリックリンクとハードリンク
・ファイルの実体とファイル名をつなぐ事をリンクといい、リンクには以下の2種類があります。
※ファイルの実体とは、ディスク上に保存されているデータのこと

リンク説明
シンボリックリンクWindowsのショートカットに該当、
リンク元が配置されている場所にリンクする方式
ハードリンク1つのファイルの実体を複数のファイル名で表せるリンク、
同じファイルの実体を共有する方式
image.png
image.png

サービス管理コマンド:star::star::star:

serviceコマンド

・サービスを起動したり停止したりするコマンドです。

serviceコマンド出力結果

構文:service サービス名 操作

[root@localhost ~]$ service tomcat status
tomcat (pid  4400) is runnning...
操作説明
startサービスを起動
stopサービスを停止
restartサービスを再起動
statusサービスの状態を表示

systemctlコマンド

・サービスを起動したり停止したりするコマンドです。基本的にserviceコマンドと使い方の違いはほとんどありません。

systemctlコマンド出力結果

構文:systemctl  操作 サービス名

[root@localhost ~]$ systemctl status tomcat
tomcat (pid  4400) is runnning...
操作説明
startサービスを起動
stopサービスを停止
restartサービスを再起動
reloadサービスの再読み込み
statusサービスの状態を表示

restart(サービス再起動)とreload(設定再読み込み)の違いとは :interrobang:
:point_right:失敗したときの挙動が異なる
再起動で失敗する場合、停止して成功して起動が失敗するので、正しく起動するまでの間はサービス停止が発生します。
しかし、再読み込みで失敗した場合は、停止をしていないので設定前の状態で起動し続けることができます。
どうしても、サービスを停止したくないときには再読み込みするのがいいでしょう。

chkconfigコマンド(configuration state checker)

・Linuxがシステム起動時に起動するサービスの一覧を表示したり、サービスの登録、削除、サービスの起動をランレベルごとに細かく設定できるコマンドです。コマンドを使用するにはroot権限が必要です。
自分は、一年間でこのコマンドを、サービス一覧表示以外に使用したことがありませんので、細かい説明は--listオプションのみにします。

chkconfigコマンド出力結果

構文: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を設定

:black_small_square: ランレベル
・onとoffの前についてる0~6の数字のこと、以下の状態を表す。

Run Level状態
0システムの停止
1シングルユーザモード
2マルチユーザモード
3マルチユーザモード
4未使用
5マルチユーザモード
6再起動

ランレベルはディストリビューションによって違う :interrobang:
・上記で紹介しているランレベルは、Red Hat Enterprise LinuxCentOSFedoraでの状態です。
他のUbuntsなどの状態は、ランレベル4がマルチユーザモードである、とかの違いがあります。

スケジュール管理コマンド:star::star:

crontabコマンド

cronのスケジュールを編集するコマンドです。スケジュールの管理をしているのは、crondというデーモンです。また、cronは全てのユーザが使用できます。
:point_right:cronとはなんぞやでクーロンについて説明していますので、わからない方はご参照ください

crontabコマンド出力結果

構文:crontab [オプション]

[user@localhost ~]$ crontab -l   # userユーザに設定されているクーロンを確認
0 0 * * * /home/user/bin/test.sh
オプション説明
-eviエディタなどでcrontabファイルを編集
-lcrontabファイルの内容を表示
-rcrontabファイルの削除
-icrontabファイル削除時の確認
-u ユーザユーザを指定してcrontabファイルの編集(rootユーザのみ使用可能)

crontabファイルの直接編集は禁止 :interrobang:
・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

:point_right:なるべく実体を直接編集すると、テスト用で反映させたいときには不便です。
一旦、ローカルのファイルを編集して、現在設定しているcrontabファイルをバックアップして、その後、編集した内容を反映させれば、戻すのも簡単ですし差分もわかりやすく管理しやすいと思います。(多分・・・)

サーバ時間管理コマンド:star:

:black_small_square: ハードウェアクロックとシステムクロック
・Linuxには、 ハードウェアとして内蔵されている ハードウェアクロック と、メモリ上で動作する システムクロック が存在します。
dateコマンドは、システムクロックを参照して現在の日時を表示します。

:point_right: システムクロックとハードウェアの修正
・システムクロックを修正するには、 dateコマンドで以下の書式に従って設定を行います。

書式MMDDhhmmCCYYSS
意味西暦上二桁西暦下二桁

hwclockコマンド(hardware clock)

・ハードウェアクロックを修正するコマンドです。

hwclockコマンド出力結果

構文:hwclock [オプション]

[root@localhost ~]# hwclock -w   # システムクロックの時刻をハードウェアクロックに反映
オプション説明
-rハードウェアクロックを表示
-s(–hctosys)ハードウェアクロックの時刻をシステムクロックに反映
-w(–systohc)システムクロックの時刻をハードウェアクロックに反映
image.png

:black_small_square: NTPによる時刻設定
・ハードウェアクロック、システムクロックともに完全に正確な時刻とは限りません。正確な時刻を取得するためにはインターネットなどのクロック同期を行うプロトコルである NTP (Network Time Protocol)を使用します。
NTPサーバは、一般向けに公開されたものを利用できますが、組織内で構築してNTPサーバとして利用することもできます。NTPサーバの設定は、 /etc/ntp.conf で行います。
また、NTPサーバの時刻を取得をするためには ntpdate -q コマンドを使用することで取得できます。

ネットワーク関連コマンド:star::star::star:

ポート番号

・TCP/IP通信において、コンピュータが通信に使用するプログラムを識別するための番号です。
以下が主なポート番号です。

ポート番号プロトコルサービス説明
20TCPFTPFTP:データ転送
21TCP/UDPFTPFTP:制御情報
22TCPsshssh接続
23TCPtelnettelnet接続
25TCP/UDPSMTP電子メール(送信)
53TCP/UDPDNS名前解決
80TCPHTTPWeb接続
110TCPPOP3電子メール(受信)
143TCPIMAP電子メール(受信)
161UDPSNMPネットワーク監視
443TCPHTTPSSSLによるHTTP接続
465TCPSMTPSSSLによるSMTP接続
993TCPIMAPSSSLによるIMAP接続
995TCPPOP3SSSLによるPOP接続

:black_small_square: TCPとUDPとは
TCPUDPとは、IPなどと同様にインターネットにて標準的に利用されているプロトコルです。
TCP(Transmission Control Protocol)
:point_right: 信頼性の高い通信を実現 するために使用されるプロトコル
UDP(User Datagram Protocol)
:point_right: 信頼性が高くないが、速さやリアルタイム性を求める通信に使用 するために使用されるプロトコル

:black_small_square: TCPとUDPの比較

プロトコルTCPUDP
通信方式コネクション型コネクションレス型
信頼性高い低い
転送速度低速高速
上位のプロトコルHTTP、Telnet、FTP、POP・・・DNS、NTP、DHCP、SNMP・・・
主な用途Webの閲覧、メールの送受信、
ファイル転送
音声通話、マルチキャスト通信、
ブロードキャスト通信
主な特徴・ポート番号を利用した上位プロトコルへのデータの受け渡し
・コネクションの確立、維持、切断
・順序制御、再送制御、ウィンドウ制御、フロー制御
・ポート番号を利用した上位プロトコルへのデータの橋渡し
・オーバヘッドが少ない
・信頼性がない

pingコマンド(packet internet groper)

・ネットワーク上のホストが起動しているがどうか、IP通信ができるかどうかを調査したい場合に使用するコマンドです。

pingコマンド出力結果

構文: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 秒パケットの送信間隔を秒単位で指定

:black_small_square: ホスト名とIPアドレス
・ホスト名とIPアドレスの名前解決は、 /etc/hosts ファイルで設定します。名前解決は通常DNSサーバで行いますが、小規模のネットワークでは/etc/hostsを作成して、全てのクライアント(サーバ)に配布することでネットワーク上のホスト名からIPアドレスを紐づけられて通信できます。しかし、変更が発生した場合、配布しているサーバに対して再配布して書き換える必要があるため、運用上問題があります。
・また、名前解決(ホスト名とIPアドレスを相互に交換する仕組み)の問い合わせを行う順番について、**/etc/nsswitch.conf**ファイルで定義します。Linuxでの名前解決には、以下の方法があります。

:small_blue_diamond: /etc/hostsファイルでの問い合わせ(files)
:small_blue_diamond: LDAPサーバへの問い合わせ(ldap)
:small_blue_diamond: DNSサーバへの問い合わせ(dns)

上記の順番で名前解決するように設定されていることが多いです。

まとめ

・エンジニア1年を通して使用したLinuxコマンドを紹介してきました。もちろん、思い出せないコマンドや、使用していたけど忘れてしまったコマンドもありますが、結構網羅してると思います。思い出したり、使用したコマンドが増えたりした場合は追記したいと思います。
また、間違いがありましたがご教授お願いいたします。

参考

LinuCイージス
新しいLinuxの教科書

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です