Linuxでファイルを空にする方法

こんにちは、さるまりんです。

ファイルを消すのではなくて空にしたい時があります。

ファイルがが開かれている状態で消してしまうとプログラムがおかしな動作をしてしまったりすることがあるので、消すのではなく、空にしたいということです。

例えば、ログファイルを出力し続けていてそれがサーバーのディスクスペースを圧迫してしまった時などです。

いくつか方法があるのでここに残しておきます。

まずはこれです。

: > [ファイル名]

:(コロン)はtrueを意味していて、なんの出力も発生しません。それを>(リダイレクト)オペレータで[ファイル名]のファイルに出力しています。 何も出力しないということです。

これで[ファイル名]のファイルが存在したら空になります。ファイルが存在しなければ空のファイルが作成されます。

:(コロン)の代わりに何も出力しないコマンドで置き換えることもできます。

cat /dev/null > [ファイル名]

です。

/dev/nullデバイスをcatするとEOF、ファイルの終端を表す制御文字のみが出力されます。
この方法でも同様にファイルを空にすることができます。

echoを使った方法もあります。

echo -n > [ファイル名]

echoコマンドの-nオプションは「最後の改行文字を出力しない」というものでこのオプションの後に何もなく> [ファイル名]なので改行なしの空っぽがファイルに出力されることになり、こちらでもファイルが空になります。

権限の関係でsudoを使わなければいけない時はこうです。

sudo sh -c ': > [ファイル名]'

''に挟まれたコマンドは他に例を上げたものでもOKです。

空にすることをtruncateと言います。

データベーステーブルを空にするときもtruncate table [テーブル名]のSQLを発行します。

このコマンドでファイルサイズをゼロに(空に)することができます。

truncate -s 0 [ファイル名]

です。

オプション-s 0でファイルのサイズがゼロになります。

冒頭の例えばで書いたようなことがあって、ファイルを空にする必要があったのですが、ログファイルが大きくなって困るという場合は、ローテンションさせるほうがいいです。
名前変えて圧縮して元のファイル消して新しいファイルにする。
これをするためにlogrotateコマンドがあります。
今度はこれを勉強したいと思います。

読んでくださってありがとうございました。

それではまた!