「下記ファイルディスクリプタがプロセスと結びつける対象ファイル」を別のファイルに変更することをリダイレクションとよびます。実際には、ファイルディスクリプタ1と2の対象ファイルの変更を指すことが多いです。
ファイルディスクリプタは「プロセス」と「プロセスが使用するファイル」を結びつけるもので、それらには0,1,2,...と連続した番号が割り当てられています。ファイルディスクリプタ0,1,2は既定値として存在しており、
となります。
対象ファイルを「標準出力」から別のファイルに変更します。
ls 1> sample.txt
これはよく使われるため、
$ ls > sample.txt
と省略して記述できます。
対象ファイルを「標準エラー出力」から別のファイルに変更します。
$ ls dummydummydummy 2> sample.txt
同時に変更することもできます。ログの保存の際に便利です。
$ ls . dummydummydummy 1> sample.txt 2> sample.txt
これは以下のように略記できます。
$ ls . dummydummydummy > sample.txt 2> sample.txt
更に略記できます。「&1」は「ファイルディスクリプタ1が対象とするファイル」を表しています。
$ ls . dummydummydummy > sample.txt 2>&1
応用例として、完全に出力内容を捨てるためには、
$ ls . dummydummydummy > /dev/null 2>&1
いわゆる/dev/nullにリダイレクトします。
上書きではなく追記の場合、「n>」ではなく「n>>」とします。ここで、nはファイルディスクリプタの番号です。
$ ls >> sample.txt
「n>&m」はファイルディスクリプタmが追記であればファイルディスクリプタnも追記となり、上書きであれば上書きとなります。「n>>&m」とは記述できません。
ls . dummydummydummy >> sample.txt 2>&1
rmをするのではなくファイル内だけを消去したい場合、空の結果をそのファイルにリダイレクトして上書きします。
$ :> sample.txt
':'は何もしないコマンドです。