Linux でファイルを切り詰める (空にする) 方法
状況によっては、既存のファイルを長さゼロに切り詰める (空にする) ことがあります。 簡単に言うと、ファイルを切り捨てるとは、ファイルを削除することなくファイルの内容を削除することです。
ファイルを切り捨てることは、ファイルを削除し、それを再作成し、正しい権限と所有者を設定するよりはるかに速く、簡単な方法です。
このチュートリアルでは、シェルリダイレクトと truncate
コマンドを使用して、Linux システムでファイルをゼロサイズに切り詰める方法について説明します。
リダイレクションを使ってファイルを切り詰める一般的なフォーマットは以下の通り:
: > filename
コマンドを分解してみよう:
-
:
コロンはtrue
を意味し、何も出力されない。 - リダイレクト演算子
>
は、前のコマンドの出力を与えられたファイルにリダイレクトします。 -
filename
, 切り捨てたいファイル
もしファイルが存在すれば、それはゼロに切り捨てられるでしょう。
:
の代わりに、何も出力しない別のコマンドを使うこともできます。以下は、cat
コマンドを使って、/dev/null
デバイスの内容を出力し、ファイルの終端文字だけを返す例です:
cat /dev/null > filename
別のコマンドとして、echo
も使用可能です。 -n
オプションは echo
に改行を追加しないように指示します:
echo -n > filename
Bash や Zsh などの最近のシェルでは、リダイレクトシンボルの前のコマンドを省略して使用できます:
> filename
ファイルの切り詰めを行うには、ファイルに書き込み権限を持っていなければなりません。 通常、これにはsudo
を使用しますが、昇格したroot権限はリダイレクトには適用されません。 以下はその例です:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
sudo
でリダイレクトを可能にするいくつかの解決策があります。 最初の選択肢は、sudo で新しいシェルを実行し、そのシェル内で -c
フラグを使用してコマンドを実行できます:
sudo sh -c '> filename'
もうひとつの選択肢は、出力を tee
コマンドにパイプし、sudo
でその権限を上げ、空の出力を所定のファイルに書き込む方法です。
: | sudo tee filename
truncate コマンド #
truncate
は、ファイルのサイズを任意のサイズに縮小または拡張するためのコマンドラインユーティリティである。
truncate
コマンドでファイルを 0 サイズに切り詰める一般的な構文は次のとおりです:
truncate -s 0 filename
-s 0
オプションはファイルサイズを 0 に設定します。
例えば、Nginx のアクセスログを空にするには次のようにします:
sudo truncate -s 0 /var/log/nginx/access.log
Empty All Log Files #
長い間、ディスク ドライブは多くの大きなログ ファイルで乱雑になっていて、大量のディスク領域を占有しているかもしれません。log” で終わるファイルを空にします。
sudo truncate -s 0 /var/log/**/*.log
より良いオプションは、logrotate
ツールでログファイルを回転、圧縮、削除することでしょう。