Saya memiliki file bernama error.log di server saya yang harus sering saya potong. Saya memiliki izin rw untuk file tersebut. Membuka file di vi> menghapus semua konten> menyimpan karya (jelas). Tapi saat saya coba di bawah ini
cat /dev/null > error.log
Saya mengerti pesannya
File already exists.
Jelas ada beberapa jenis konfigurasi yang dilakukan di server untuk mencegah penimpaan file yang tidak disengaja. Adakah yang bisa tahu bagaimana cara "memotong" file dalam satu perintah?
linux
file
command-line
Sumeet Pareek
sumber
sumber
Jawaban:
Anda memiliki
noclobber
set opsi. Kesalahannya sepertinya berasal dari csh, jadi Anda akan melakukan:Jika saya salah dan Anda menggunakan bash, Anda harus melakukan:
di bash, Anda juga dapat mempersingkatnya menjadi:
sumber
File exists
kesalahan yang sama sedangkan bash memberikancannot overwrite existing file
kesalahan yang sangat berbeda .>file
tidak bekerja.> file
dan>| file
?noclobber
pilihan yang ditetapkan, mencoba untuk mengarahkan ke file yang ada gagal. Untuk menimpa pengalihan spesifik sementara membiarkan noclobber menyala, Anda dapat menggunakan>|
Anda juga dapat menggunakan fungsi truncate
jika izin ditolak, gunakan sudo
Bantuan / Manual: man truncate
diuji di ubuntu Linux
sumber
Ini akan cukup untuk mengatur ukuran file menjadi 0:
sumber
Penghargaan diberikan kepada rekan senior saya untuk ini:
Ini tidak akan merusak file log, jadi Anda bahkan dapat menggunakannya di syslog, misalnya.
sumber
:
adalah perintah tanpa efek (hampir menjadi komentar), kemudian>
dialihkan seperti biasa, sehingga ini hanya mengalihkan kekurangan keluaran dari perintah yang tidak melakukan apa pun ke dalam file. Jika noclobber diaktifkan, Anda perlu:>| filename
(bash) (dan saya menganggap:>! filename
di csh dengan asumsi csh memiliki:
).mungkin berhasil juga
sumber
dd
keluaran tidak ada yang lebih baik daripada yang biasa dibacafalse
?Karena sudo tidak akan berfungsi dengan pengalihan
>
, saya sukatee
perintah untuk tujuan inisumber
error.log
, jika itu sudah bisa ditulis tidak perlu sudo. Saya pikir masalah lainnya adalah Anda memberikan perintah sebagai argumen string kesh
, saya tidak tahu bagaimana itu ditangani secara internal tetapi itu adalah lapisan kompleksitas / pengalihan lain yang ditambahkanecho ""
akan menambah baris baru. Anda dapat menggunakanecho -n ""
untuk menekan baris baruSiapapun dapat mencoba perintah ini untuk memotong file apapun di sistem linux
Ini pasti akan berfungsi dalam format apa pun:
sumber
Saya suka ini:
cp /dev/null file
sumber
Anda juga dapat mencoba:
echo -n > /my/file
sumber
noclobber
lalu tanyakan pada diri Anda apakah jawaban Anda masuk akal sama sekali.