状況によっては、既存のファイルをゼロの長さに切り捨てる(空にする)ことが必要になる場合があります。簡単に言うと、ファイルを切り捨てるということは、ファイルを削除せずにファイルの内容を削除することを意味します。
ファイルの切り捨ては、ファイルを削除して再作成し、正しいアクセス許可と所有権を設定するよりもはるかに高速で簡単です。また、プロセスによってファイルが開かれた場合、ファイルを削除すると、それを使用するプログラムが誤動作する可能性があります。
このチュートリアルでは、シェルリダイレクトとtruncate
を使用して、Linuxシステムでファイルをゼロサイズに切り捨てる方法について説明します。 コマンド。
シェルリダイレクト#
ファイルを切り捨てる最も簡単で最もよく使用される方法は、>
を使用することです。 シェルリダイレクト演算子。
リダイレクトを使用してファイルを切り捨てる一般的な形式は次のとおりです。
: > filename
コマンドを分解してみましょう:
-
:
コロンはtrue
を意味します 出力は生成されません。 - リダイレクト演算子
>
前のコマンドの出力を指定されたファイルにリダイレクトします。 filename
、切り捨てるファイル。
ファイルが存在する場合は、ゼロに切り捨てられます。それ以外の場合は、ファイルが作成されます。
:
出力を生成しない別のコマンドを使用することもできます。
cat
の使用例を次に示します。 /dev/null
の内容を出力するコマンド ファイルの終わりの文字のみを返すデバイス:
cat /dev/null > filename
使用できるもう1つのコマンドは、echo
です。 。 -n
オプションはecho
に指示します 改行を追加しない:
echo -n > filename
BashやZshなどの最新のシェルでは、リダイレクト記号の前のコマンドを省略して、次を使用できます。
> filename
ファイルを切り捨てられるようにするには、ファイルに対する書き込み権限が必要です。通常、sudo
を使用します このためですが、昇格されたルート権限はリダイレクトには適用されません。次に例を示します:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
sudo
でリダイレクトできるソリューションがいくつかあります 。最初のオプションでは、sudoを使用して新しいシェルを実行し、-c
を使用してそのシェル内でコマンドを実行できます。 フラグ:
sudo sh -c '> filename'
もう1つのオプションは、出力をtee
にパイプすることです。 コマンド、tee
を昇格させます sudo
の権限 、そして空の出力を指定されたファイルに書き込みます:
: | sudo tee filename
truncate
コマンド#
truncate
は、ファイルのサイズを特定のサイズに縮小または拡大できるコマンドラインユーティリティです。
truncate
を使用してファイルをゼロサイズに切り捨てるための一般的な構文 コマンドは次のとおりです:
truncate -s 0 filename
-s 0
オプションはファイルサイズをゼロに設定します。
たとえば、Nginxアクセスログを空にするには、次を使用します:
sudo truncate -s 0 /var/log/nginx/access.log
すべてのログファイルを空にする#
時間の経過とともに、ディスクドライブが大量のログファイルで乱雑になり、大量のディスク領域を占有する可能性があります。
次のコマンドは、/var/log
の下の「.log」で終わるファイルを空にします ディレクトリ:
sudo truncate -s 0 /var/log/**/*.log
より良いオプションは、logrotate
を使用してログファイルをローテーション、圧縮、および削除することです。 ツール。
結論#
Linuxでファイルを切り捨てるには、リダイレクト演算子>
を使用します その後にファイル名が続きます。
ご質問やご意見がございましたら、下にコメントを残してください。