web-dev-qa-db-ja.com

すでに存在し、何らかの方法で保護されているLinux上のファイルを空にする(「切り捨てる」)方法

サーバーにerror.logというファイルがあり、頻繁に切り捨てる必要があります。ファイルのrw権限があります。 viでファイルを開く>すべてのコンテンツを削除する>保存する(明らかに)。しかし、私が以下を試してみると

cat /dev/null > error.log

私はメッセージを受け取ります

File already exists.

明らかに、ファイルの偶発的な上書きを防ぐために、サーバー上で何らかの構成が行われます。誰もが単一のコマンドでファイルをどのように「切り捨てる」ことができますか?

111
Sumeet Pareek

noclobberオプションが設定されています。エラーはcshからのもののように見えるため、次のようにします。

cat /dev/null >! file

私が間違っていて、bashを使用している場合は、次を実行する必要があります。

cat /dev/null >| file

bashでは、次のように短縮することもできます。

>| file
157

関数truncateを使用することもできます

$truncate -s0 yourfile

許可が拒否された場合は、Sudoを使用します

$Sudo truncate -s0 yourfile

ヘルプ/マニュアル:man truncate

ubuntu Linuxでテスト済み

70
risnandar

これは、ファイルサイズを0に設定するのに十分です。

> error.log
49
SIFE

これは私の先輩の功績です。

:> filename

これによりログファイルが破損することはないため、たとえばsyslogで使用することもできます。

7
petermolnar

false | tee fileToTruncate

うまくいくかもしれません

4
Dodger Web

Sudoは redirection>では機能しないため、この目的でteeコマンドが好きです。

echo "" | Sudo tee fileName
2
sakhunzai

誰でもこのコマンドを試して、linux systemのファイルを切り捨てることができます。

これはどんな形式でも確実に動作します:

truncate -s 0 file.txt
0
user3301460