Saya menjalankan aplikasi yang menulis ke log.txt. Aplikasi diperbarui ke versi baru, membuat plugin yang didukung tidak lagi kompatibel. Itu memaksa sejumlah besar kesalahan ke log.txt dan tampaknya tidak mendukung penulisan ke file log yang berbeda.
Bagaimana saya bisa menulisnya ke log yang berbeda?
Saya telah mempertimbangkan untuk mengganti log.txt dengan tautan keras (aplikasi tidak dapat membedakannya, bukan?) Atau tautan keras yang menunjuk ke / dev / null. Apa saja pilihan saya?
chmod -w log.txt
?Jawaban:
Ini menyalin perangkat nol Anda dengan angka dev utama dan minor yang tepat
log.txt
sehingga Anda memiliki yang lainnull
.Perangkat sama sekali tidak dikenal namanya di dalam kernel melainkan oleh nomor utama dan minor mereka. Karena saya tidak tahu OS apa yang Anda miliki, saya merasa nyaman untuk hanya menyalin angka dari tempat yang sudah kami ketahui. Jika Anda membuatnya dengan nomor mayor dan minor yang salah, kemungkinan besar Anda telah membuat beberapa perangkat lain, mungkin disk atau sesuatu yang tidak ingin Anda tulis.
sumber
sudo
(atau berjalan sebagai pengguna root). Tolong jelaskan (dalam jawaban Anda) apa yang Anda maksud dengan "angka dev utama dan minor yang tepat"./dev/null
, seperti yang digunakan dalam perintah Anda. Dan, saya pikir itu akan membantu pembaca masa depan untuk mencatat jawaban Anda yangsudo
diperlukan.cp -a /dev/null log.txt
dan komentar saya?sudo
untuk melakukan perintah ini, kecuali Anda kebetulan berjalan sebagai penggunaroot
(yang umumnya berkecil). Menggunakansudo
(atau menjalankan sebagairoot
) untuk membuat tautan keras (jawaban ini) atau symlink (jawaban @ V.Michel) mungkin merupakan solusi yang tepat, jika file tersebut harus ditempatkan di lokasi yang dapat ditulisi oleh akun pengguna mana pun , tetapi intinya adalah: perhatikan persyaratan itu secara eksplisit.mknod
. Perhatikan bahwa komentar pada umumnya hanya mendapat sedikit perhatian, sehingga seseorang hanya membaca pertanyaan dan kemudian jawaban Anda mungkin bingung (seperti juga saya; perhatikan juga bahwa kebanyakan orang tidak pernah terpapar konsep seperti nomor perangkat utama dan kecil).Anda dapat membuat tautan simbolis ke / dev / null dan Anda tidak perlu menjadi root:
sumber
ls -l log.txt
akan menunjukkan bahwa itu adalah symlink ke / dev / null, daripada mengandalkan mengetahui bahwa misalnya "1, 3" entah bagaimana signifikan.Jawaban lain di sini mungkin akan berfungsi. Secara khusus, solusi symlink mungkin akan menjadi solusi termudah. Saya menawarkan ini terutama untuk kelengkapan.
Solusi yang melibatkan
mknod
(ataucp -a
) menjadi bermasalah jika sistem file yang berisi file tidak mendukung perangkat (misalnya, sudah terpasang dengannodev
opsi, misalnya). Dan tentu saja, tautan keras antar sistem file tidak akan berfungsi.Alternatif untuk tautan keras atau membuat simpul perangkat baru adalah dengan menggunakan bind mounts, yang memungkinkan Anda memasang file atau direktori dari satu bagian dari susunan sistem file Anda ke yang lain. Jadi, misalnya, Anda dapat menjalankan:
Ini sangat mirip dengan tautan keras, tetapi:
Untuk contoh lengkap:
sumber
nodev
sistem file.Itu sangat tergantung pada BAGAIMANA aplikasi menangani log.txt.
Jika aplikasi hanya membuka file yang sudah ada dan menulisnya kemudian seperti yang dijelaskan dalam jawaban lain Anda dapat symlink ke / dev / null, symlink di tempat lain, hardlink di tempat lain (meskipun hardlink tidak dapat lintas sistem file sehingga tidak ada t banyak poin dalam hal ini) buat salinan / dev / null device node di sana dll.
OTOH jika aplikasi menghapus dan membuat ulang log.txt tidak ada yang berfungsi. Anda dapat menghubungkan seluruh direktori di tempat lain untuk mengarahkan ulang penulisan ke sistem file yang berbeda tetapi itu saja dan Anda harus berurusan dengan hal-hal lain dalam direktori.
Saya kira jika Anda benar-benar ingin, Anda dapat membuat filesystem overlay khusus yang melewati sebagian besar operasi sekaligus membuang semua upaya untuk membuat file bernama log.txt.
sumber
chattr +i log.txt
pertama kali dan aplikasi tidak akan menghapus file lagi.Nah, satu metode tidak berterima dengan pipa bernama :
Anda hampir dapat melakukan apa saja dengan log yang dibuang, seperti filter atau kirim nc .
sumber
cat
proses terbunuh atau macet, program login akan hang ketika pipa penuh.Pertimbangkan untuk menjadikan file sebagai perangkat null yang sebenarnya. File "log.txt" dibuat dengan mknod, dengan tipe file yang tepat dan angka minor dan mayor yang sama, akan bertindak sebagai perangkat null karena itu.
sumber