膨大な作業の時って手順作ったり、実作業の時に少しでも手数減らしたくないですか?
自分は少しでも楽したいほうなのですが、そんな時によく使ってるコマンドをまとめて見ました。
- 目次 -
1. 基本の構文
1ライナーで繋ぐ時に使う色々な制御演算子と呼ぶのかな?(正式名称不明)をまずは改めて説明します。
記号 | 説明 |
---|---|
; | コマンドを順番に実行 |
| | コマンドの結果を後ろのコマンドに渡す |
& | バックグラウンドで実行 |
&& | 前のコマンドが成功した場合に次を実行 |
|| | 前のコマンドが失敗した場合に次を実行 |
1.1. 「;」 コマンドを順番に実行
- 各コマンドを独立して順番に実行します。
- 前のコマンドの成否に関係なく次のコマンドを実行します。
■ 書式
$command1; command2; command3
■ コマンド例
$ echo "Hello"; echo "World"; ls
echo "Hello"
が成功しても失敗しても、次のecho "World"
を実行。その後にls
を実行。
1.2. 「|」 コマンドの結果を渡す
- 前のコマンドの結果を後ろのコマンドに渡します。
■ 書式
$command1 | command2
■ コマンド例
$ ps -ef | grep system
プロセス一覧を取得し(ps -ef)、その結果から「system」を含むものを検索(grep system)します。
1.3. 「&」バックグラウンド実行
- 「&」前のコマンドをバックグラウンドで実行し、後ろのコマンドを即実行します。
■ 書式
$command1 & command2
■ コマンド例
$ sleep 10 & echo "Task running"
sleep 10をバックグラウンドで実行し、直後にecho で”Tast running”を返します。
バックグラウンド実行しているジョブを確認する時は「jobs」コマンドで確認します。
■ 参考
$ sleep 10 & echo sleep10
[1] 1463199
sleep10
$ jobs
[1]+ 実行中 sleep 10 &
1.4. 「&&」: 前のコマンドが成功した場合に次を実行
- 前のコマンドが成功(終了ステータスが
0
)した場合のみ次のコマンドを実行します。
■ 書式
$command1 && command2
■ コマンド例$ mkdir test_dir && cd test_dir
mkdir test_dir
が成功したらcd test_dir
を実行し、cd test_dir
で移動します。
1.5. 「||」: 前のコマンドが失敗した場合に次を実
前のコマンドが失敗(終了ステータスが非0
)した場合のみ次のコマンドを実行します。
■ 書式
$command1 || command2
■ コマンド例
$
cd
test_dir
|| echo "Directory does not exist"
cd
が失敗した場合にtest_dir
echo "Directory does not exist"
を実行します。
利用例
mountの確認、mountの有無でmount/umount
環境によって、「作業領域は通常unmountされていて、作業時にmountして利用すること」みたいな時に一々確認→mountが面倒だったので使ってました。
■ 構文
# mountpoint -q <path> || mount <path>
■ コマンド例
# mountpoint -q /mnt/data || mount -t nfs nfs.example.com:/data /mnt/data
mountpointコマンドを -q オプションで実行すると標準出力なしで実行されます。
マウントされていると終了コード「0」が返る。
マウントされていないと終了コード「1」が返る。
ので、「||」(終了コードが0以外の場合実行)で繋げてmountコマンドを実行させます。
逆にマウントしていたらアンマウントさせたりも。
■ 構文
# mountpoint -q <path> && mount <path>
■ コマンド例
# mountpoint -q /mnt/data && umount /mnt/data
サービスが起動していなかったら起動/起動してたら停止
systemctlで任意のサービスが起動していなかったら起動させる(またはその逆)時に使ってます。
【起動していない場合起動させる】
■ 構文
# systemctl is-active --quiet <service名> || systemctl start <service名>
■ コマンド例
# systemctl is-active --quiet iscsi.service || systemctl start iscsi.service
【起動している場合停止させる】
■ 構文
# systemctl is-active --quiet <service名> && systemctl stop <service名>
■ コマンド例
# systemctl is-active --quiet iscsi.service && systemctl stop iscsi.service
systemctl is-activeでアクティブかどうかを判断。–quietで出力を抑止して、終了コードで起動・停止を制御させています。
コメント