Saya memiliki sistem basis Linux yang diinstal. Saya ingin menjalankan skrip pihak ketiga yang sangat besar dan kompleks yang akan membuat banyak perubahan pada berbagai bagian dari keseluruhan sistem. Perubahan ini termasuk menambahkan file baru, memodifikasi file yang ada, dan menghapus file yang ada. Setelah skrip selesai, saya akan memiliki sistem yang dimodifikasi. Modifikasi akan luas dan substansial.
Saya ingin semacam laporan pada semua file yang telah ditambahkan, dihapus, atau dimodifikasi dan analisis modifikasi baris demi baris. Sesuatu seperti keluaran dari alat diff file akan sangat bagus.
Saya menganggap saya perlu membuat semacam snapshot sebelum menjalankan skrip dan snapshot kedua setelah. Saya berasumsi bahwa saya akan memberi makan snapshot-snapshot itu menjadi semacam alat diff atau seperti-diff.
Adakah yang tahu alat apa yang harus digunakan dan bagaimana cara membedakan seluruh sistem?
Saya menggunakan Virtualbox yang memang memiliki fitur gambar yang berbeda , meskipun saya tidak tahu apakah saya bisa menyesuaikannya dengan tujuan ini. Selain itu, saya lebih suka solusi yang lebih umum jika memungkinkan.
rsync
untuk membuat snapshot dan menjalankan lagi setelah modifikasi untuk menghasilkan laporan file yang dimodifikasi. Bagian yang berbeda mungkin akan lebih sulit.Jawaban:
Saya pikir ide Anda tidak jauh dari solusi. Untuk menguraikan cara yang mungkin: Saya menggunakan
rsnapshot
untuk cadangan. Ini menciptakan struktur direktori (cadangan-) dari semua atau bagian dari file Anda dengan titik masuk (misalnya)/backup/hourly.1/...
dan/backup/hourly.0/...
, di mana setiap cabang membawa seluruh data, tetapi menggunakan tautan (keras) untuk file di mana tidak ada perubahan yang telah dilakukan . Melakukan rekursifls
ataufind
pada kedua struktur dan membandingkan output (diurutkan, jika ditemukan) akan menampilkan file yang hilang, dan memeriksa penghitungan tautan (dils -l
dalamnya akan menjadi kolom kedua) akan menampilkan file baru (yang memiliki jumlah tautan) 1). Untuk perincian perubahan dalam file Anda dapat (untuk file yang diidentifikasi) menggunakan biasadiff
alat. Seperti yang dikatakan ini adalah garis besar, akan membutuhkan beberapa pekerjaan untuk diterapkan, dan mungkin memiliki kebiasaan yang tidak jelas, jadi bawa proposal itu dengan sebutir garamsumber
Saya mungkin akan melakukan ini menggunakan rsync seperti yang disarankan dalam salah satu komentar. Rsync memiliki mode menjalankan-kering dan fitur checksum yang dapat Anda gunakan untuk membuat laporan yang akurat tentang apa yang berubah.
Mengambil lebih jauh Anda mungkin bisa menulis skrip yang melakukan diff pada file yang diubah, meskipun Anda harus membuatnya menghindari file biner (tidak yakin bagaimana) ..
Atau, Anda bisa mengambil pendekatan yang sama sekali berbeda .. gunakan git. Jadi pada sistem 'base' Anda, lakukan git init di /, lalu setelah Anda menjalankan hal pihak ketiga yang bisa Anda lakukan:
menggunakan git akan memberi Anda sedikit fleksibilitas. Setelah mengatakan bahwa itu mungkin memperjuangkan seluruh sistem dan mungkin bingung tentang / proc dll.
sumber
Ada sesuatu yang disebut libguestfs yang dapat Anda gunakan untuk melakukan diff. Itu yang saya gunakan di masa lalu dan saya pikir sekarang operasi itu mungkin dibangun sehingga Anda tidak perlu menggunakan shell guestfish.
Pilihan lain adalah menjalankan operasi Anda dalam wadah buruh pelabuhan dan kemudian mengekspor dan membedakan pohon file yang dihasilkan sebagai file tar.
Perlu diketahui juga bahwa jika skrip mengubah pengaturan sistem dengan menulis ke file virtual maka perubahan itu tidak akan muncul di pohon file dan Anda perlu sesuatu yang lain untuk menangkap perubahan itu. Contoh dari hal seperti itu adalah aturan iptable. Anda perlu logika khusus untuk menangkap perubahan itu.
sumber
Halaman di The Linux Cookbook menunjukkan menemukan-grep modifikasi pra dan pasca, diikuti oleh diff. Ini sangat sederhana, mungkin merupakan titik awal, tetapi masalah Anda mungkin lebih baik ditangani dengan solusi yang lebih canggih yang dicatat.
Sepertinya ini hanya akan menangkap penambahan dan penghapusan, bukan modifikasi ... tepuk tangan, drl
sumber
Semua jawaban ini mengarah ke arah yang benar dan dengan cara yang sama. Semoga juga membuang 8 bit saya di ...
Instal sistem dasar di virtualbox. Setelah pengaturan awal dan basis Anda siap, boot vm dengan beberapa media langsung lainnya. Anda kemudian dapat menambahkan atau mengekspor sistem file tanpa direktori volatile seperti
/proc
yang terlibat.Jalankan skrip besar Anda, dan ulangi proses ekspor.
Sekarang Anda memiliki 2 filesystem yang tersedia, Anda dapat menggunakan berbagai alat perbandingan.
diff --brief -Nr /tree1 /tree2
Akan memberi Anda daftar file bagus yang berbeda
stdout
, dan daftar file yang tidak ditemukan di satu pohon atau yang lainnya aktifstderr
.Untuk mengetahui perubahan aktual apa yang terjadi, Anda bisa mengurai
stdout
output file yang berbeda dan menjalankannya secaradiff
individual, mengarahkan output ke file. Atau Anda bisa memeriksa daftar dan menjalankan diff pada file yang sangat menarik bagi Anda.Anda bisa menggabungkan semua ini menjadi satu perintah, menggunakan
git
. Dapat digunakan tanpa repo diinisialisasi, cukup arahkan ke 2 direktori. Memberikan output berwarna yang bagus, disingkat pagination melaluigit diff --no-index /tree1 /tree2
sumber