状況によっては、既存のファイルをゼロの長さに切り捨てる(空にする)ことが必要になる場合があります。簡単に言うと、ファイルを切り捨てるということは、ファイルを削除せずにファイルの内容を削除することを意味します。
ファイルの切り捨ては、ファイルを削除して再作成し、正しいアクセス許可と所有権を設定するよりもはるかに高速で簡単です。また、プロセスによってファイルが開かれた場合、ファイルを削除すると、それを使用するプログラムが誤動作する可能性があります。
このチュートリアルでは、シェルリダイレクトと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でファイルを切り捨てるには、リダイレクト演算子>を使用します その後にファイル名が続きます。
ご質問やご意見がございましたら、下にコメントを残してください。