Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて

標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて

みなさまどうも。

続きまして『標準入出力』と『リダイレクション』(リダイレクト)についてやっていきましょう。そのついでに『echo』コマンドくんと『cat』コマンドくんについてもやっていきます。

まず『echo』コマンドくんですが、この子は『標準出力』に文字を出力してくれたりするコマンドになります。使い方はとっても簡単で『echo 出力したい文字』って感じで打ち込めばOKです。

例えば「初音ミク」を出力したい、となったら以下のように打つ感じになりますね。

[root@localhost ~]# echo 初音ミク
初音ミク

さて、ここで『標準出力』って言葉が出てきました。UNIX系OSの公式ドキュメントとか参考書とかを読んだことがある方はちょいちょいいらっしゃると思うのですがその中で『標準出力』とか『標準入力』とかって言葉がよく出てきますよね。

これ慣れてないと「なんのこっちゃ?」って話になると思うんですが『標準出力』っていうのは「標準で出力するもの」ってそのままの意味になりますので要するに皆様の目の前にあるディスプレイの事を指しており、そんでもって『標準入力』っていうのも「標準で入力するもの」ってそのままの意味になりますので皆様のお手元のキーボードの事を指しているのでございます。

なので先程紹介した『echo』コマンドくんの解説もちょっとむつかしい言い方をするならば「キーボード(標準入力)で入力されたデータをディスプレイ(標準出力)に出力する」ってわけなので「標準入力を標準出力に出力する処理を行うコマンド」って感じになります。

そしてここが非常に重要なのですがなーぜ『標準出力』みたいにまどろっこしい言い回しをしているのかと言うと"標準を変えることができるから"だったりします。初期状態の『標準出力』はディスプレイ、『標準入力』はキーボードになるのですがちょちょーいとコマンドを変えるだけで色々なところに入出力ができちゃったりするんですね。というわけでそれらを色々と試してみましょう。

まず先ほどと同じように『echo 初音ミク』とタイピングしてみましょう。まだエンターキーは押さないで下さい。

[root@localhost ~]# echo 初音ミク

そしたら半角スペースを挟んで『>』を記述します。

[root@localhost ~]# echo 初音ミク >

そしたらさらにもういっちょ半角スペースを挟んで『miku.txt』と入力してみて下さい。ちなみに「初音ミク」と「miku.txt」はどんな名前でもOKなのでお好きなように入力してしまってOKですのでお好きなようにコマンドを作ってしまって下さい。

[root@localhost ~]# echo 初音ミク > miku.txt

そしたら『ls』コマンドを使ってディスプレイの中身を確認してみましょう。するとあらふしぎ。

[root@localhost ~]# ls
miku.txt

「miku.txt」ってファイルが出来上がっていますね。

そしてここで『cat』コマンドくんを紹介しておきます。『cat』コマンドくんは「ファイルの中身を標準出力に出力してくれるコマンド」になります。標準出力は初期状態だとディスプレイになるので「ファイルの中身をディスプレイに出力してくれるんだな!(*'▽'*)」ってイメージでOKです。

さて、この『cat』コマンドくんを使って『miku.txt』の中身を確認してみると

[root@localhost ~]# cat miku.txt
初音ミク

ちゃんと「初音ミク」っていう文字が保存されていますね。

ここで先程使った『>』についての解説です。もうお察しの方も多いかと思いますが「『>』は『標準出力』を変えることが出来る記号」って感じになりますね。先程のように「> ファイル名」って記述することで『標準出力』を該当ファイルとした状態で処理を行う事が出来ます。

そしてここがUNIXの設計で非常にユニークな部分なのですが『標準出力』って言葉を聞くと「ディスプレイとかテレビみたいな感じの映像を出力できるデバイス」というイメージを持ってしまいがちですよね。実はそういうデバイスに限らず、先程のように出力先をファイルにしたり別の通信先にしたりといった様々な事ができちゃったりします。まあよく使われるのが「ファイルに出力する」ってパターンになりますので「> ファイル名」っていうのを覚えておけばOKでございます。

あとちょいと注意点なのですが『>』を使ってファイルとかに『標準出力』を変更した場合で「XXXをファイルに書き込みしました!」とかって感じでOSが教えてくれることはありません。なので『echo 初音ミク > miku.txt』ってコマンドを叩くと以下のように

[root@localhost ~]# echo 初音ミク > miku.txt
[root@localhost ~]# 

何も言わずにまたプロンプトが表示されてコマンド待ち状態になります。この「何も言われなかった」ってのが処理が成功している証になるので覚えておくと良いかもです。「『標準出力』がファイルに指定されているので『標準出力』(ディスプレイ)には何も出力されない」といったイメージになりますね。

ではここでちょっと応用技を紹介しておきます。これまで何度も登場したディレクトリの中身を教えてくれる『ls』コマンドってありましたよね。実はこの『ls』コマンドくんも難しい言い方をするならば「ディレクトリの中身を『標準出力』に出力してくれるコマンド」になりますので先程の『>』と組み合わせることでこんな事ができちゃいます。

[root@localhost ~]# ls -l
total 28
-rw-r--r--. 1 root root     0  Jun 14 19:13 2018 ls.txt
-rw-r--r--. 1 root root    13  Jun 14 18:50 2018 miku.txt
[root@localhost ~]# ls -l > ls.txt
[root@localhost ~]# cat ls.txt
total 28
-rw-r--r--. 1 root root     0  Jun 14 19:13 2018 ls.txt
-rw-r--r--. 1 root root    13  Jun 14 18:50 2018 miku.txt

『ls -l』って叩いて出力した内容をそのまま『ls.txt』に保存できちゃっています。とってもファンタスティックでございますね。

このように「標準出力(ディスプレイ)に出力されているほぼ全てのものは『>』を使ってファイルにそのまま保存できるんだな!(*'▽'*)」って覚えておくと幸せになれることうけあいなので皆様もぜひ色々と使ってみて下さい。

あと『>』を使う際の注意点でございますが『>』を使って『標準出力』をファイルに指定した場合で、すでに存在しているファイルを指定すると中身が全部上書きされちゃいます。それをちょいと試してみましょう。

まず以下のように適当に『echo』コマンドくんでファイルを生成してみます。

[root@localhost ~]# echo 初音ミク > ia.txt

んで『cat』コマンドで「ia.txt」の中身を見てみると

[root@localhost ~]# cat ia.txt
初音ミク

「初音ミク」になっていますね。

ここで以下のようなコマンドを打つと

[root@localhost ~]# echo IA > ia.txt

中身が全て上書きされてそっくり入れ替わっちゃいます。

[root@localhost ~]# cat ia.txt
IA

問答無用で全消しされて上書きされちゃうので要注意でございます。

そして
「俺は上書きじゃなくて追記がしたいんだ...なぜなら君がこれまで歩んできた過去全てを含めて愛しているから...(*'ω'*)」
なんてロマンチックかつセンチメンタルな気分になった時は『>>』を使ってみましょう。

先程作った『ia.txt』の中身は現状「IA」になっていますが

[root@localhost ~]# cat ia.txt
IA

以下のコマンドを打つと

[root@localhost ~]# echo 初音ミク >> ia.txt

こうなります。

[root@localhost ~]# cat ia.txt
IA
初音ミク

「初音ミク」が追記されましたね。このように『>』を『>>』に変更することで上書きではなく追記することができますのでこちらも覚えておいて下さい。

というわけで『標準入出力』の基本的なとこはこんな感じになります。

最後に用語の紹介になりますが『標準入出力』を変更する事は『リダイレクション』と呼ばれます。『リダイレクション』は『リダイレクト』って呼ばれることも多いですので両方覚えておくと良いかもです。

英語的に『リダイレクション』が名詞になって『リダイレクト』が動詞になる感じだと思うのですが昔から使われている言葉なせいか人によって呼び方が違う事が多いのでそこはちょっとご注意ですね。まあ指してるものはほぼ同じでございますので細かいことは気にしない精神こそ肝要でございます。

今回紹介した『>』と『>>』の前後の半角スペースについてですが、「『>』と『>>』を使う際は手前の半角スペースのみを入れて後ろは入れない」っていう書き方をする方が多数派になります。こんな感じですね。

[root@localhost ~]# echo 初音ミク >ia.txt

著者は両方に半角スペースを置く派なのですがこの辺はお好みでどうぞ。

あとこんな感じで前の半角スペースも入れなくても動いちゃうのですが

[root@localhost ~]# echo 初音ミク>ia.txt
[root@localhost ~]# cat ia.txt
初音ミク

『>』は「『1>』とすると『標準出力』を変更、『2>』とすると『標準エラー出力』を変更」などなど少し派生系があったりすますので手前の半角スペースは置いたほうが無難かもです。

[root@localhost ~]# echo 初音ミク 1> ia.txt
[root@localhost ~]# cat ia.txt
初音ミク

ちなみに『標準エラー出力』っていうのはエラーだった際の出力先、って感じになります。

『echo』くんで半角スペースとか『()』とかが含まれた文字列をこにょこにょしたいって場合は『"』または『'』で囲んであげて下さい。以下のような感じですね。

[root@localhost ~]# echo "Miku is cute" > miku.txt
[root@localhost ~]# cat miku.txt
Miku is cute

これの理由なんですが半角スペースはコマンド実行時の引数の区切りとして使用してる文字になる等の理由でPCくんが上手く認識できなくなってしまうから『"』または『'』で囲んであげる必要がある感じですね。

ちなみに全てのコマンドを確認したわけではないのですが『echo』くん以外のコマンドも大体こんな仕様になっています。

んでこれは余談なのですが『"』と『'』には違いがございまして、『"』は中身の変数等を展開、『'』はそういったものの展開は行わないという差があったりします。

まだ変数等の説明をしてないのでなんとなーくで認識して頂ければOKなのですが、現在のシェルが収まっている『$SHELL』という変数を『"』で出力すると以下になります。

[root@localhost ~]# echo "$SHELL"
/bin/bash

『$SHELL』の中身である「/bin/bash」が出力されていますね。

逆に『'』だとこうなります。

[root@localhost ~]# echo '$SHELL'
$SHELL

そのまま「$SHELL」となっていますね。

この知識はいずれ必要になると思うので軽く覚えておくと良いかもです。

続いての記事ではファイルとディレクトリの削除についてやっていきましょう。ではこの辺で失礼致します。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。