今日のコマンド@リダイレクション
先日のワイルドカードについて、一覧表示が
されないけど?という質問がありました。
コマンドビギナーの方で、聞くとファイルへの
パスがよく分からなかったようです。
今更ですが基本すぎるお話です。
カレントディレクトリから見た相対パス
$ 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つのうちの書式でも
かまいません。
ビギナー向けのつもりで書きましたがいかがでしょうか?
次はパイプあたりを覚えるとコマンド使いにかなり
近づきます。
最近のコメント