Linux でファイルを切り詰める (空にする) 方法

6月 15, 2021
admin

状況によっては、既存のファイルを長さゼロに切り詰める (空にする) ことがあります。 簡単に言うと、ファイルを切り捨てるとは、ファイルを削除することなくファイルの内容を削除することです。

ファイルを切り捨てることは、ファイルを削除し、それを再作成し、正しい権限と所有者を設定するよりはるかに速く、簡単な方法です。

このチュートリアルでは、シェルリダイレクトと 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ツールでログファイルを回転、圧縮、削除することでしょう。

コメントを残す

メールアドレスが公開されることはありません。