Live Encoding and Transcoding Techniques
目次:
状況によっては、既存のファイルを長さゼロに切り捨てる(空にする)こともできます。 簡単に言えば、ファイルを切り捨てるとは、ファイルを削除せずにファイルの内容を削除することを意味します。
ファイルの切り捨ては、ファイルの削除、再作成、および正しいアクセス許可と所有権の設定よりもはるかに速く簡単です。 また、ファイルがプロセスによって開かれている場合、ファイルを削除すると、それを使用するプログラムが誤動作する可能性があります。
このチュートリアルでは、シェルリダイレクトと
truncate
コマンドを使用して、Linuxシステムでファイルをゼロサイズに切り捨てる方法について説明します。
シェルリダイレクト
ファイルを切り捨てる最も簡単で最も使用される方法は、
>
シェルリダイレクト演算子を使用することです。
リダイレクトを使用してファイルを切り捨てる一般的な形式は次のとおりです。
: > filename
コマンドを分解しましょう:
-
:
コロンはtrue
を意味し、出力を生成しません。リダイレクト演算子>
先行コマンドの出力を指定されたファイルにリダイレクトします。filename
、切り捨てるファイル。
ファイルが存在する場合、ゼロに切り捨てられます。 それ以外の場合、ファイルが作成されます。
:
代わりに、出力を生成しない別のコマンドを使用することもできます。
次に、
cat
コマンドを使用して
/dev/null
デバイスの内容を出力する例を示します。これは、ファイルの終わり文字のみを返します。
cat /dev/null > filename
使用できる別のコマンドは
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'
別のオプションは、出力を
tee
コマンドにパイプし、
sudo
で
tee
特権を昇格させ、空の出力を特定のファイルに書き込むことです:
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でファイルを切り捨てるには、リダイレクト演算子
>
続けてファイル名を使用します。