ファイルの中身を空にしたい時のシェルコマンドの考察

プログラムを書いている時などで、ファイルを削除したい時が多々あると思います。

サーバー触りたての頃は毎度毎度

rm filename.txt とかやってから
touch filename.txt

なんてやっていたりして、今思うと可愛いなオレ。

けど、一行でサクっと消す場合はみなさん大体下記のどちらかではないでしょうか。

cat /dev/null > filename
or
: > filename


前者の方が有名だと思います。
自分もそっちです。

後者は最近知りました。 man : で調べるとわかりますが、何も返さない特殊コマンドだそうで
これをリダイレクトしてもファイルの中身がゼロにクリアできる事が分かります。

ファイルの所有者が別だとsudoのリダイレクトが使えない

しかしどちらの方法もファイルの所有権が自分でない場合sudoを使っても実行できない事を
初めて知りました。

sudo ってリダイレクトする時はsudoしたヤツの権限でファイル作成がなされるらしいです。
こちらのブログで紹介されてて「へぇ~」でした。
⇒sudoでリダイレクトするときの権限

ちなみに、
sudo -u XXX
とやってみた、というかやり方がよくわからんかったのでヤパーリだめでした。

なので、sudoでもできるようにするには

cp /dev/null filename

と、リダイレクト無しで空をコピーする方法だと可能です。
cpの挙動をちゃんと理解していないといけないんですが、これだとi-node番号が変わったりするのかな?
とか思ったりしましたが変化無しでいけました。

なので、別にどれでもいいと思いますが、リダイレクト派の方で あれ sudo できないじゃんと思った方いらしたら是非cpを

という秋の夜長エントリーでした。

2012-10-13 | Posted in サーバー小ネタ(Linux)No Comments » 


関連記事

Comment





Comment



*