今日のコマンド@リダイレクション

先日のワイルドカードについて、一覧表示が
されないけど?という質問がありました。
コマンドビギナーの方で、聞くとファイルへの
パスがよく分からなかったようです。

今更ですが基本すぎるお話です。

カレントディレクトリから見た相対パス

$ ls *.jpg

上記のようにディレクトリ名が何もないときは
現在自分の居るディレクトリ内にあるすべての
.jpgを一覧表示します。
現在自分が居るディレクトリをカレントディレクトリ
と呼び、どこに居るのかを調べるには

$ pwd

で、結果例は

$ /home/username

などと絶対パスが表示されます。

$ ls images/*.jpg

上記の相対パスでは、現在自分の居るディレクトリの
下にあるimagesというディレクトリの中にあるすべての
.jpgファイルを一覧表示するという意味です。
これを絶対パスで書くと

ls /home/username/images/*.jpg

になります。

カレントディレクトリと異なるディレクトリに.jpg
ファイルが置いてあったため表示しなかったという
ことでありました。
ビギーナーにもなるべく分かりやすい書き方を
しなくてはいけませんねぇ。。。(反省!

せっかく書いたので、ビギナー向けに便利な
コマンドを紹介しておきます。

ご紹介するのはリダイレクションです。
それに先駆け2つの用語などの説明をします。

標準入力 通常はコマンドをキーボードから入力
標準出力 通常は液晶モニタなどの画面

例としてcatコマンドを使います。
catコマンドはファイルまたは標準入力(キーボードから)の
入力内容をそのまま標準出力に出力します。

つまりexamplというファイルにTESTと書かれていれば

$ cat exampl

を実行すると

TEST

と標準出力(画面に表示)されます。

また

$ cat

のみを実行すると入力できる状態になります。
そこで

ABCDEFG

などと入力しEnterすると
入力した内容がそのまま出力されるので

ABCDEFG (← 入力内容)
ABCDEFG (← 出力内容)

のような表示になり、あまり意味がないように
思われるかもしれません。(Ctrl+dで抜ける。)

さてリダイレクションを試してみます。

$ cat > test

を実行してみます。
入力できるようになるので

ABCDEFG

と入力してEnterします。
今度は標準出力されませんね。
とりあえずCtrl+dで抜けましょう。

実は標準出力の内容がtestというファイルに
書き込まれているのです。
このころをリダイレクションと言います。

$ cat test

でtestというファイル内容を表示させると

ABCDEFG

と表示されます。
標準出力では違いが分かりづらいので、GUI環境
であれば、geditなどを使って確かめてみてください。

もちろん

$ cat test > test2

とすると testに書き込まれている内容が
test2に書き込まれることになります。
(コピーと一緒でtestにも内容は残ります。)

===========================================

リダイレクションの書式

[コマンド] > [出力するファイル名]
         処理結果をファイルに上書き

[コマンド] >> [出力するファイル名]
         処理結果を改行した上で末尾に加筆

[コマンド] >& [出力するファイル名]   
         標準出力+標準エラーを出力

===========================================

その他の使用例

$ ls の結果が q.txt p.jpg の場合

$ ls > test

testにlsの結果を書き込みます。
 よって

$ cat test
q.txt p.jpg

と表示されます。

その他様々なコマンドに対応します。

注意

・残念ながら >>& はありませんので構文エラーになります。
  >& は上書きのみしかできません

・入力と出力先に同じファイル名を指定するとファイルが
 壊れてしまいます。
 事前に

 $ set noclobbe

 を実行し上書きを禁止しておきます。

・新規ファイルに書き込むときは3つのうちの書式でも
 かまいません。

ビギナー向けのつもりで書きましたがいかがでしょうか?

次はパイプあたりを覚えるとコマンド使いにかなり
近づきます。

HOME

おすすめ