ウェブサイト検索

Linuxの10の便利なチェイニング演算子とその例


Linuxコマンドのチェイニングとは、いくつかのコマンドを組み合わせ、それらの間に使用される演算子の動作に基づいて実行させることを意味します。

Linuxでのコマンドのチェーンは、シェル自体で短いシェルスクリプトを書き、ターミナルから直接実行するようなものです。チェーニングにより、プロセスの自動化が可能になります。

さらに、無人の機械はチェイニングオペレーターの助けを借りて体系的に機能することができます。

この記事は、頻繁に使用されるコマンドチェイニングオペレーターについて明らかにすることを目的としています。生産性を向上させ、システムの負荷を軽減しながら、簡潔で意味のあるコードを書くことを可能にする短い説明とそれに対応する例を提供します。

1. アンパサンドオペレーター (&) - バックグラウンドでLinuxコマンドを実行する

'&' の機能は、コマンドをバックグラウンドで実行することです。コマンドを入力し、空白の後に '&' を続けて入力するだけです。一度に複数のコマンドをバックグラウンドで実行することができます。

バックグラウンドで単一のLinuxコマンド「ping」を実行する:

ping -­c5 linux-console.net &

バックグラウンドで同時に2つ以上のaptコマンドを実行するには:

apt update & apt upgrade &

2. セミコロン演算子 (;) - 複数のコマンドを実行する

セミコロン (;) 演算子は、一度に複数のコマンドを実行することを可能にし、コマンドの実行は順次行われます。

apt update ; apt upgrade ; mkdir test

上記のコマンドの組み合わせは、最初にupdate命令を実行し、次にupgrade命令を実行し、最後に現在の作業ディレクトリの下に「test」ディレクトリを作成します。

3. AND 演算子 (&&) - 成功した場合に2番目のコマンドを実行する

AND演算子(&&)は、最初のコマンドが成功した場合、つまり最初のコマンドの終了ステータスが0である場合にのみ、2番目のコマンドを実行します。このコマンドは、最後のコマンドの実行状況を確認するのに非常に便利です。

例えば、私はターミナルでリンクコマンドを使ってウェブサイトlinux-console.netを訪れたいのですが、その前にホストが生きているかいないかを確認する必要があります。

ping -c3 linux-console.net && links linux-console.net

4. OR演算子 (||) - 条件付きコマンド実行

OR 演算子 (||) はプログラミングにおける ‘else‘ 文に非常によく似ています。|| 演算子は、最初のコマンドが失敗した場合のみ、2番目のコマンドを実行することを許可します。つまり、最初のコマンドの終了ステータスが ‘1‘ である場合です。

例えば、非ルートアカウントから「apt update」を実行したいです。そして、最初のコマンドが失敗した場合、次の「links linux-console.net」コマンドが実行されます。

apt update || links linux-console.net

上記のコマンドでは、ユーザーがシステムを更新することを許可されていなかったため、最初のコマンドの終了ステータスは‘1’となり、それゆえに最後のコマンド‘links linux-console.net’が実行されます。

最初のコマンドが正常に実行され、終了ステータスが「0」である場合はどうなるのでしょうか?もちろん、2番目のコマンドは実行されません。

mkdir test || links linux-console.net

ここで、ユーザーは自分のホームディレクトリにフォルダー「test」を作成します。ユーザーにはそのための権限があります。コマンドは正常に実行され、終了ステータスは「0」となり、したがってコマンドの最後の部分は実行されません。

5. NOT 演算子 (!) - コマンドの選択的実行

NOT 演算子 (!) は、まるで「except」文のようなものです。このコマンドは、提供された条件を除いてすべてを実行します。これを理解するために、あなたのホームディレクトリに「tecmint」というディレクトリを作成し、「cd」でそこに移動してください。

mkdir tecmint 
cd tecmint

次に、フォルダー「tecmint」内にいくつかの種類のファイルを作成します。

touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html

見てください、'tecmint'というフォルダー内にすべての新しいファイルを作成しました。

ls 

a.doc  a.html  a.pdf  a.xml  b.doc  b.html  b.pdf  b.xml

今すぐ、htmlファイル以外のすべてのファイルを一度にスマートな方法でrmコマンドを使って削除してください。

rm -r !(*.html)

確認のために、最後の実行です。lsコマンドを使用して利用可能なファイルのリストを表示してください。

ls 

a.html  b.html

6. AND – OR 演算子 (&& – ||) – コマンドの条件付き実行

上記の演算子は「AND」と「OR」演算子の組み合わせです。これは「if-else」ステートメントに非常に似ています。

例えば、linux-console.netにpingを実行して、成功したら「確認済み」と出力し、失敗したら「ホストがダウン」と出力します。

ping -c3 linux-console.net && echo "Verified" || echo "Host Down"

サンプル出力:

PING linux-console.net (212.71.234.61) 56(84) bytes of data. 
64 bytes from linux-console.net (212.71.234.61): icmp_req=1 ttl=55 time=216 ms 
64 bytes from linux-console.net (212.71.234.61): icmp_req=2 ttl=55 time=224 ms 
64 bytes from linux-console.net (212.71.234.61): icmp_req=3 ttl=55 time=226 ms 

--- linux-console.net ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2001ms 
rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms 
Verified

今、インターネット接続を切断し、再度同じコマンドを試してください。

ping -c3 linux-console.net && echo "verified" || echo "Host Down"

サンプル出力:

ping: unknown host linux-console.net 
Host Down

7. PIPE演算子 (|) - ストリームラインされた出力処理

このPIPEオペレーターは、最初のコマンドの出力が2番目のコマンドの入力として作用する場合に非常に便利です。例えば、‘ls -l‘の出力を‘less‘にパイプし、コマンドの出力を確認します。

ls -l | less

drwx------  tecmint tecmint  4.0 KB Thu Nov 16 12:03:02 2023 AnyDesk
drwxrwxr-x  tecmint tecmint  4.0 KB Tue Oct 10 10:44:35 2023 bin
drwxr-xr-x  root    root     4.0 KB Wed Nov 24 22:05:09 2021 DEBIAN
drwxrwxr-x  tecmint tecmint  4.0 KB Sat Nov 18 12:32:49 2023 Desktop
drwx--x---+ tecmint tecmint  100 KB Fri Dec  8 12:00:49 2023 Downloads
drwxrwxr-x  tecmint tecmint  4.0 KB Wed Sep 13 10:25:07 2023 llpp
drwxrwxr-x  tecmint tecmint  4.0 KB Thu Nov 16 14:26:46 2023 MyImages
drwxrwxr-x  tecmint tecmint  4.0 KB Wed Sep 13 14:55:42 2023 Obsidian Vault
drwxrwxr-x  tecmint tecmint  4.0 KB Tue Oct 10 10:44:32 2023 opt
drwxrwxr-x  tecmint tecmint  4.0 KB Thu Nov 16 14:46:54 2023 php
drwxrwxr-x  tecmint tecmint  4.0 KB Thu Nov 16 15:54:33 2023 tar_examples
.rw-rw-r--  tecmint tecmint   73 KB Mon Sep 18 11:46:02 2023 Apache-Web-Server-Security.png
.rw-rw-r--  tecmint tecmint  2.2 KB Sun Oct 29 00:17:15 2023 ChatGPT-SEO-Prompts
.rw-rw-r--  tecmint tecmint   41 KB Thu Nov 23 11:34:33 2023 Create-Users-in-Linux.png
...

8. コマンド組み合わせ演算子 {}

2つ以上のコマンドを組み合わせて、2番目のコマンドは1番目のコマンドの実行に依存します。

例えば、ディレクトリ「bin」が利用可能かどうかを確認し、それに応じた出力を行います。

[ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.

9. 優先順位演算子() - コマンド実行順序の管理

() 演算子は、命令を優先順位に従って実行することを可能にします。

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

上記の擬似コマンドで、Command_x1 が失敗した場合はどうなりますか? Command_x2、Command_x3、Command_x4 はいずれも実行されません。このために優先演算子を使用します。

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

上記の擬似コマンドでは、Command_x1 が失敗した場合、Command_x2 も失敗しますが、それでも Command_x3 と Command_x4 は Command_x3 の終了ステータスに応じて実行されます。

10. 連結演算子(\) - 複数行コマンドの連結

連結演算子 (\) は、その名の通り、シェル内で複数行にわたる大きなコマンドを連結するために使用されます。例えば、以下のコマンドはテキストファイルtest(1).txtを開きます。

nano test\(1\).txt

それでは今回はここまでです。またすぐに別の興味深い記事を作成します。それまでの間、Tecmintにご注目いただき、健康でつながりを保ってください。コメントセクションで貴重なフィードバックをお忘れなく。

関連記事: