Linux/Unixのセミコロン、パイプ、アンパサンド、リダイレクトの役割についてメモ。

スポンサーリンク




Macのターミナルでも使えて便利ですよ。

いつも「a composer」をお読みいただきありがとうございます。banba(@banba929)です。
以前の記事「Bashの「for」と「while read」はどちらが速いのか。」にも書きましたが、最近はひたすらにLinuxを使っています。

CLIに慣れてくるとかなり効率的に作業ができるのですが、操作して感じたことは記号、役割持ちすぎ

触り始めた頃はひたすらにググりながら操作していたので、復習と備忘録を含め、書き残しておきます。

紹介するのは

  • ;       (セミコロン)
  • &     (アンパサンド)
  • &&  (アンパサンドアンパサンド)
  • |      (パイプ)
  • ||    (パイプパイプ)
  • >    (リダイレクト)
  • >> (リダイレクト)

ではGo。

 

コマンドを連続して使用する際の記号

CLIでは基本的にコマンドを入力することで、操作を行います。その際にコマンドを続けて使用することができます。

1つめのコマンド結果をそのまま2個目のコマンドに使用したり、1つ目のコマンドが正常終了すれば2つ目のコマンドを実行したり…などができます。

コマンドを連続して使用したい場合に使えるのは以下のものです。

  • ;       (セミコロン)
  • &     (アンパサンド)
  • &&  (アンパサンドアンパサンド)
  • |      (パイプ)
  • ||     (パイプパイプ)

1つずつ見ていこうと思います。

;     (セミコロン)

コマンド1が実行された後、コマンド2が実行される。

<使い方>

コマンド1  ;  コマンド2

<例>

画像を見てもらうとわかるように、dateコマンド実行後、sleepコマンドが実行され、その後またdateコマンドが実行されていますね。

コマンド1の実行が終わってからコマンド2の実行。その後コマンド3の実行というように実行されていきます。

 

&    (アンパサンド)

コマンド1の実行を待たずにコマンド2を実行する。

<使い方>

コマンド1  &  コマンド2

<例>

sh /home/shell/ampersand.sh  &  tail -f ampersand.log

ampersand.shというシェルスクリプトを実行しながら、ログを監視する的な感じになりますかね。

あんまり「&」は使わないのでいいのが思い浮かびません…。

&&   (アンパサンドアンパサンド)

コマンド1が正常終了した場合、コマンド2を実行する。

<使い方>

コマンド1  &&  コマンド2

<例>

cd /home/shell  &&  mkdir ampersandx2

/home/shell配下に移動することが出来たら、ampersandx2というディレクトリを作成します。

|     (パイプ)

コマンド1の結果をコマンド2に渡して、コマンド2を実行する。

<使い方>

コマンド1  |  コマンド2

<例>

catで開き、その結果をcutに渡すことで、カンマ区切りの2カラム目のみをcatしています。

「|」は一番使用しやすいのではないかなと思います。

||    (パイプパイプ)

コマンド1が以上終了した場合、コマンド2を実行する。

<使い方>

コマンド1  ||  コマンド2

<例>

cd /home/shell/pipepipe  ||  mkdir /home/shell/pipepipe

/home/shell/pipepipeに移動できなかった場合、/home/shell/pipepipeを作成します。

以上がコマンドを連続して使いたい場合の使い方になります。

出力に使用できる記号

> (リダイレクト)

コマンドを使用した結果を新しくファイルを作成し、書き込む。

<使い方>

cat テキストファイル | grep “抽出したい行のキーワード” > 新しいテキストファイル

<例>

cat /home/kakeibo/kakeibo_12.txt  |  grep “月合計”  >  /home/kakeibo/total/total_12.txt

catで開いた”kakeibo_12.txt”というテキストファイルの中から、”月合計”をgrepした結果を  “/home/kakeibo/total/total_12.txt”というファイルを作成し、書き込むという内容です。

注意しないといけないのは、追記ではないということです。もともと”/home/kakeibo/total/total_12.txt”というファイルが存在した場合、内容は消えてしまいます。

>> (リダイレクト)

<使い方>

cat テキストファイル | grep “抽出したい行のキーワード” >> 追記したいテキストファイル

<例>

cat /home/kakeibo/kakeibo_12.txt  |  grep “月合計”  >> /home/kakeibo/total/total_12.txt

この場合はもともとあった”/home/kakeibo/total/total_12.txt”にgrepで抽出した内容が追記されます。

以上がリダイレクトです。入力のリダイレクトはあまり使用しておらず、いい例が思い浮かびませんでした。forとかwhile readに使用している程度ですかね。

よく使うのはこの2つだと思います。

 

まとめ

いろいろとまとめてみました。CLIでの操作は慣れさえすれば、GUIより効率的に作業できる場合も多いかと思います。大量のデータ編集などをするときなど…

僕もまだまだ勉強中ですので、しっかり備忘録などをとるようにして身につけていきたいところです。

あと記号に役割がある扱いっていったら正規表現とかですかね…正規表現しっかり使えるようになりたいんですよねー。便利。

しっかり使えるようになったらまとめてみたいところです。それでは。

スポンサーリンク