Saya ingin sebuah program atau lebih disukai cara untuk mencatat penggunaan disk.
Untuk menjelaskan apa yang saya maksud, ketika seseorang menginstal Ubuntu ada sekitar 4,5 GB disk yang digunakan. Kemudian ketika Anda menginstal/mencopot program, penggunaan ini meningkat atau menurun.
Yang saya inginkan adalah cara untuk mencatat secara otomatis disk saat ini yang digunakan dalam file txt ketika ada perubahan (ada yang diinstal/disimpan atau dihapus/dihapus) dengan waktu dan tanggal terjadinya perubahan ini.
Jawaban yang Diterima:
Menggunakan df
perintah untuk melacak ruang disk, dan lsblk
perintah untuk melacak drive yang dipasang, skrip di bawah ini, berjalan di latar belakang, akan mencatat perubahan di ruang kosong semua drive yang dipasang. Itu membuat file log:~/disklog
di mana ia menulis perubahan (dalam k
).
Jika Anda menjalankannya di terminal, hasilnya akan ditampilkan secara bersamaan.
Isi file log terlihat seperti:
[mountpoint / change / date/time / used]
/ . . . . . . . . . . . . . . . . . . 36 k Fri Mar 27 08:17:30 2015 used 87989352 k
/media/intern_2 . . . . . . . . . . . -1792 k Fri Mar 27 08:17:32 2015 used 562649592 k
/ . . . . . . . . . . . . . . . . . . -4 k Fri Mar 27 08:17:39 2015 used 87989356 k
/ . . . . . . . . . . . . . . . . . . -36 k Fri Mar 27 08:17:43 2015 used 87989392 k
/ . . . . . . . . . . . . . . . . . . -4 k Fri Mar 27 08:17:55 2015 used 87989396 k
/ . . . . . . . . . . . . . . . . . . 4 k Fri Mar 27 08:18:11 2015 used 87989392 k
/ . . . . . . . . . . . . . . . . . . -32 k Fri Mar 27 08:18:13 2015 used 87989424 k
Cara menggunakan
- Copy script di bawah ini ke dalam file kosong, simpan sebagai
log_diskusage.py
-
Di bagian kepala skrip, atur interval waktu treshold dan jumlah maksimum baris dalam file log:
#--- set time interval in seconds, threshold in k, and the max number of lines in the logfile interval = 20 # the interval between the checks threshold = 0 # in K, you'd probably set this higher max_lines = 5000 # if you want no limit, comment out the line line_limit() in the script #---
interval
untuk menjalankan pemeriksaan ruang disk, sebagaimana adanya, 20 detiktreshold
:Anda mungkin tidak ingin menyimpan semua (sangat) perubahan kecil, karena disk memiliki banyak perubahan kecil dalam ruang disk kosong. Seperti itu, diatur ke10k
max_lines
, karena file log akan tumbuh dengan cepat, terutama jika Anda menyetel treshold ke nol
-
Test-run script dengan perintah:
python3 /path/to/log_diskusage.py
-
Jika semuanya berfungsi dengan baik, tambahkan ke Aplikasi Startup Anda:Dash> Startup Applications> Add.
Skrip
#!/usr/bin/env python3
import subprocess
import os
import time
log = os.environ["HOME"]+"/disklog.txt"
#--- set time interval in seconds, threshold in k
interval = 1
threshold = 0
max_lines = 5000
#---
def line_limit():
lines = open(log).readlines()
if len(lines) > max_lines:
with open(log, "wt") as limit:
for l in lines[-max_lines:]:
limit.write(l)
get = lambda cmd: subprocess.check_output([cmd]).decode("utf-8")
def disk_change():
mounted = [l[l.find("/"):] for l in get("lsblk").splitlines() if "/" in l]
data = get("df").splitlines()
matches = [("/", data[1].split()[-4])]
for l in mounted:
if l != "/":
match = [(l, d.replace(l, "").split()[-3]) for d in data if l in d][0]
matches.append(match)
return matches
disk_data1 = disk_change()
while True:
time.sleep(interval)
disk_data2 = disk_change()
for latest in disk_data2:
try:
compare = [(latest[0], int(latest[1]), int(item[1])) for item in disk_data1 if latest[0] == item[0]][0]
if not compare[1] == compare[2]:
diff = compare[2]-compare[1]
if abs(diff) > threshold:
with open(log, "a") as logfile:
drive = compare[0]; lt = 18-int((len(drive)/2)); lk = 14-len(str(diff))
s = drive+" ."*lt+lk*" "+str(diff)+" k \t"+str(time.strftime("%c"))+"\t"+"used "+str(compare[1])+" k\n"
logfile.write(s)
print(s, end = "")
# if you don't want to set a limit to the max number of lines, comment out the line below
line_limit()
except IndexError:
pass
disk_data1 = disk_data2