それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ファイルを空にするlinuxコマンド

ファイルを空っぽにしたい。

dhcp leases とか log とかファイルを空っぽにしたい事があると思います。

rm && touch

単純に考えると、rm して touch ですが。パーミッションが初期化されるので面倒です。

rm fileA && touch fileA

空文字を書き出す。(リダイレクト)

/dev/null から空っぽを取り出せばいいのです。

cat /dev/null  > /tmp/dhcp.leases

この他にも、リダイレクトを応用すると次のような方法があります。

: > file
echo -n > file
print '' > file

bash の コロン(:)は 何もしない(true)です。なので、: > a は次のようにもかけます。
また falseも結果としておなじになるのでファイルを空っぽにすることができます。

: > file 
true > file
false> file

ファイルを空にするにはリダイレクトが便利なようです。

空っぽへ編集する。

sed を用いて、空ファイルへ編集すればいいとわかります。

sed 'd' -i a

sed で全行(指定省略)にたいして、d (delete)を発行します。

同等のことはvi/ex/ed コマンドでもできるかもしれませんが試してません。

vim なら ex モードを使って書くことも可能ですが、現実的ではありませんでした。

vim -e +'norm dG' +'wq'  fileA

空っぽのファイルをコピーする

/dev/null はいつでも空っぽなので cp コマンドでもできます。

cp /dev/null file

dd する

/dev/null はいつでも空っぽなので dd コマンドでもできます。

dd if=/dev/null of=/tmp/echo bs=1 count=0

truncate コマンド

この目的(ファイルを指定サイズにする)ためには、truncate コマンドが便利です。

truncate -s0 file 

ただし、busyboxなどの極限環境ではtruncateは使えないことがあると思います。

alias を使う

truncate がない場合などに、aliasや関数を使うと便利かもしれない。

function trancate(){
  dd if=/dev/null of=$1 bs=$2 count=1
}

参考資料

vimをパイプにする - 余白の書きなぐり