31
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 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 一般ユーザでも実行可能な基本的はコマンドを格納
/sbin rootユーザのみが実行可能なシステム管理コマンドを格納
/etc システムやコマンドの各種設定ファイル、スクリプトファイルを格納
/dev ハードディスク、CD-ROM、DVD-ROMなどデバイスファイルを格納
/lib 共有ライブラリ、カーネルモジュールを格納

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

ディレクトリ名 説明
/opt 追加のパッケージやプログラムがインストールされるディレクトリ
/root rootユーザ専用のディレクトリ
/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には mvmv -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 ファイルの末尾に追加された行をリアルタイムで表示

ログファイルの監視にとても便利:exclamation:
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コマンドと併用すると便利かも:question:
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 アーカイブからファイルを取り出す(展開する)
-z gzipによる圧縮・展開

tarコマンドのオプションはほぼ2種類 :interrobang:
上記の例ではアーカイブしていますが、その他はそれを展開するときに指定する -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 秘密鍵 文字数のみ表示
-1 SSH1を使用する
-2 SSH2を使用する
-4 IPv4を使用する 
-6 IPv6を使用する

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

/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 が存在しますが違いは以下です。

オプション 説明
-i DNS/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 ユーザ名 ファイルの所有者で検索

アクセス日時 :question: 更新日 :question:
アクセス日時:ファイルをアクセスされた(読み込まれた)時刻のこと
更新日   :ファイルの中身が変更された時の時刻のこと
: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:egrepfgrep も存在しますが grep -E = egrepgrep -F = fgrep ですので、説明は割愛、気になる方は調べてみてください。

grep -vの使いどころはどこ :question:
-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 フィールドの区切り文字を指定、デフォルトはスペースとタブ

ロングオプション :question: ショートオプション :question:
: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
%CPU CPU使用率
START プロセスの起動時刻
TTY プロセスを実行した端末
TIME 消費したCPU使用率
COMMAND 実行コマンド or 実行プログラム名

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

killコマンド

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

シグナル名 シグナルID 説明
HUP 1 ハングアップ(端末との接続が切断)
INT 2 キーボードからの割り込み
QUIT 3 キーボードからのプロセス中止
KILL 9 強制終了
TERM 15 通常終了
CONT 18 一時停止中のプロセスを再開
STOP 19 一時停止
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: 以下の実行例は全て同じ処理です :bangbang::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)の実行時は気を付けて:raised_hand:
killコマンドはプロセスのシグナルを送信できますが、取り扱いには注意です。
強制終了であるKILLシグナルは、問答無用でプロセスを終了させてしまうため、ほんとにkillしていいプロセスなのか、killすることで他に影響はないか、事前に確認する必要があります。

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

ジョブ

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

: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: フォアグラウンドジョブとバックグラウンドジョブの制御
・実行する際にバックグランドで実行指定することもできますが、実行中のジョブをバックグラウンドに変更したり、バックグラウンドで実行しているジョブをフォアグラウンドに変更したりすることもできます。
image.png

ジョブ制御 説明
$コマンド & コマンドをバックグラウンドで実行
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単位で表示
-i inodeの使用状況を表示

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コマンドの違い

コマンド 意味 説明
df Disk Free ファイルシステムの空き容量を表示
du Dick 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 説明
cpu us カーネルコード以外の実行に使用した時間(%)
sy カーネルコードの実行に使用時間(%)
id アイドル時間(%)
wa IO待ち時間(%)
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

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

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

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

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

image.png

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

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

:white_check_mark: パーミッションは8進数で扱うことが多い :bangbang:
:point_right:パーミッションをいちいち記号で表すと扱いにくいので、以下のように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コマンド出力結果
構文: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 実行権限
s SUIDまたは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
オプション 説明
-e viエディタなどでcrontabファイルを編集
-l crontabファイルの内容を表示
-r crontabファイルの削除
-i crontabファイル削除時の確認
-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コマンドで以下の書式に従って設定を行います。

書式 MM DD hh mm CC YY SS
意味 西暦上二桁 西暦下二桁

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通信において、コンピュータが通信に使用するプログラムを識別するための番号です。
以下が主なポート番号です。

ポート番号 プロトコル サービス 説明
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接続

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

:black_small_square: TCPとUDPの比較

プロトコル TCP UDP
通信方式 コネクション型 コネクションレス型
信頼性 高い 低い
転送速度 低速 高速
上位のプロトコル 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の教科書

31
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?