免責事項
この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。
環境
OS:最新版ではないMacOS
VirtualBox:5.2.26
Vagrant:2.2.6
Ubuntu:ubuntu/bionic64 v20181129.0.0
目次
- Linuxコマンドとは
- 標準入力・標準出力とは
- 標準入力・標準出力で便利なコマンド
1. Linuxコマンドとは
「コマンド」とは直訳すると「命令」を意味し、キーボードで入力して、「コンピュータに命令」をすることです。
Linuxコマンドはキーボードを使ってLinuxを操作することを意味します。
(Linuxを操作するためには、GUI上でマウスを使って操作するか、CLI上でコマンドを使って操作するのかの2つの手段があります。
しかし、一般的にLinuxを操作する場合1、CLI上でコマンドを使って操作することが多いのでコマンドをしっかりと覚えなくてはなりません。
Linuxコマンドは使う場面があったら、その都度検索をして調べて覚えるのが良いでしょう。
2. 標準入力・標準出力とは
Linuxのコマンドには、1つの入口と2つの出口があります。
1つの入口が標準入力、2つの出口が標準出力と標準エラー出力です。
標準出力
例えば、コマンドで以下のように入力すると
echo 'Hello World'
以下の結果が返ってきます。
Hello World
これはキーボードで、echo 'Hello World'と標準入力し、Hello Worldと標準出力されたことを意味します。
標準エラー出力
次にコマンドで以下のように入力すると
//helloというディレクトリを作成
mkdir hello
//helloディレクトリを削除しようとする
rm hello
以下の結果が返ってきます。
rm: cannot remove ‘hello’: Is a directory
これはキーボードで、rm helloと標準入力し、rm: cannot remove ‘hello’: Is a directoryと標準エラー出力されたことを意味します。
以上の例のように、Linuxのコマンドは「標準入力をうけて、標準出力と標準エラー出力を出す」という仕組みになっています。
3. 標準入力・標準出力で便利なコマンド
リダイレクト
リダイレクトとは、コマンドの最後に > 出力先ファイル と記述することで標準出力をファイルに保存する機能です。
//helloディレクトリ上に移動
cd ~/hello
//helloディレクトリに新しいディレクトリa, bを作る
mkdir ~/hello/a
mkdir ~/hello/b
//helloの中身を出力
ls
> a b
//helloディレクトリの中身をls-output.txtに保存
ls > hello/ls-output.txt
// ls-output.txtの中身を表示
cat hello/ls-output.txt
> a b
ちなみに、以下の記法もあります。
- コマンド >> ファイル ...出力がファイルに追記されます。(元のファイル内容の後ろに新しい出力結果が追記される)
- コマンド 2> ファイル ...標準エラー出力をファイルに保存。
- コマンド > ファイル 2>&1 ...標準出力と標準エラー出力の両方をファイルに保存。
※数字の意味について
Linuxには、OSが入出力を識別するための「割り振り番号」識別子がついていて、それぞれ以下を意味します。
・0...標準入力
・1...標準出力
・2...標準エラー出力
パイプ
パイプとは、記号 | でコマンド同士をつないで、1つ目のコマンドの標準出力を、2つ目のコマンドの標準入力とすることができる機能です。
ls | cat > ls-output.txt
以上のコマンドは、
① lsで現在いるディレクトリの中身を出力する。
② ①の出力をcatの標準入力とする。
③ catで一覧表示された現在のディレクトリの中身をls-output.txtに保存する。
という意味になります。
ちなみに以上の流れを簡単に書き換えると
ls | tee ls-output.txt
>a b
になります。
teeは、標準入力の内容を標準出力とファイルに出力するコマンドです。
オプションで-a(オプション--append)をつけると上書きではなくファイルに追記する。
grepコマンド
grepコマンドは、第一引数に「含まれるかどうかを判定する単語」を、第二引数に「検索したいファイル名」を入力して検索する機能です。
パイプによって標準入力がある場合には、第二引数を省くこともできます。
第一引数を正規表現にして検索することもできます。
ls | grep a
以上のコマンドは現在いるディレクトリの中身一覧の中で、aという文字が含まれているディレクトリorファイルがあるか検索しています。
aという文字が含まれているディレクトリorファイルが存在したら、そのディレクトリorファイルが出力されます。
ls | grep -s a
以上のコマンドは-sオプションをつけ、aという文字が含まれないディレクトリorファイルがあるか検索しています。
参考
「N予備校 プログラミングコース」
https://www.nnn.ed.nico/
「5分で一通り理解できる!Linuxのリダイレクト 使い方と種類まとめ」
https://eng-entrance.com/linux-redirect
「パイプ「|」を使って 複数のコマンドを組み合わせる」
https://webkaru.net/linux/commands-pipeline/
-
サーバーを操作する場合など ↩