Tidak setiap lingkungan OpenWrt sudah diatur dengan cara yang sama, jadi jawaban saya adalah kesempatan ...
Contoh output diambil dari OpenWrt-12.09 pada "TP-Link TL-WDR4300".
ssh
ke router Anda.
Periksa file sistem Anda.
root@AP9:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 5184 2124 3060 41% /
/dev/root 2048 2048 0 100% /rom
tmpfs 63340 948 62392 1% /tmp
tmpfs 512 0 512 0% /dev
/dev/mtdblock3 5184 2124 3060 41% /overlay
overlayfs:/overlay 5184 2124 3060 41% /
/dev/sda1 31234700 593536 29075728 2% /mnt/sda1
/dev/sda1
adalah kartu micro SD tongkat UMTS saya ... abaikan saja.
Banyak router di-flash dengan cara yang mirip seperti yang terlihat di sini: File root readonly dibuat pseudo dapat ditulisi oleh sistem file overlay.
Lihat ke dalam /overlay
...
root@AP9:~# cd /overlay/usr/lib/opkg/info/
root@AP9:/overlay/usr/lib/opkg/info# ls *.list | tail -3
usb-modeswitch-data.list
usb-modeswitch.list
zlib.list
Direktori ini berisi info tentang paket tambahan yang diinstal. File yang diakhiri dengan .list
adalah daftar file yang diinstal oleh paket dengan nama yang sama (tanpa .list
):
root@AP9:/overlay/usr/lib/opkg/info# cat zlib.list
/usr/lib/libz.so.1.2.7
/usr/lib/libz.so.1
/usr/lib/libz.so
Paket zlib
memiliki 3 file yang diinstal.
root@AP9:/overlay/usr/lib/opkg/info# du $(cat zlib.list)
71 /usr/lib/libz.so.1.2.7
1 /usr/lib/libz.so.1
1 /usr/lib/libz.so
Paket zlib
memiliki 73kbytes file yang diinstal.
1-liner mentah untuk merekatkan semuanya dan ini memperpendek output:
# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";while(C|getline>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J);print s"\t"P}print t"\t---TOTAL---"}'
26 blkid
30 block-mount
17 chat
55 comgt
6 kmod-fs-exportfs
(((...some lines skipped...)))
14 portmap
48 swap-utils
223 usb-modeswitch-data
45 usb-modeswitch
73 zlib
4184 ---TOTAL---
HTH!
Ditambahkan 2014-10-17:
Output berikut diambil dari OpenWrt-12.09 pada "TP-Link TL-WR703N" dan menunjukkan cara menambahkan pengurutan output berdasarkan ukuran paket.
Lihat di mana dan bagaimana variabel S
masuk ke dalam game ...
# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";S="sort -n";while(C|getli
ne>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J)
;print s"\t"P|S}close(S);print t"\t---TOTAL---"}'
5 kmod-lib-crc16
5 luci-proto-3g
12 libuuid
13 kmod-usb-serial-wwan
17 chat
24 kmod-usb-acm
24 libusb
26 blkid
30 block-mount
41 kmod-usb-serial
45 usb-modeswitch
48 kmod-usb-serial-option
48 swap-utils
55 comgt
67 kmod-usb-storage
148 libblkid
154 kmod-scsi-core
223 usb-modeswitch-data
382 kmod-fs-ext4
1367 ---TOTAL---
Lagi: HTH!
Ditambahkan 2018-01-13:
Cara di atas diuji pada OpenWrt-AA.
Sekarang melihat LEDE-17,01 jalan telah berubah: Mengganti /overlay
dengan /overlay/upper
perbaikan ini.
Status quo ( opkg-list-user-installed-sorted-by-size
bukan sebagai 1-liner):
#!/usr/bin/awk -f
BEGIN {
D="cd /overlay/upper/usr/lib/opkg/info&&"
C=D"ls *.list"
S="sort -n"
while(C|getline>0) {
P=substr(F=$1,1,length($1)-5)
J=D"du -sk $(cat "F")"
s=0
while(J|getline>0) {
s+=$1
t+=$1
}
close(J)
print s"\t"P|S
}
close(S)
print t"\t---TOTAL---"
}
Uji coba:
root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8 luci-ssl
9 libustream-mbedtls
13 px5g-mbedtls
338 libmbedtls
368 ---TOTAL---
Pertanyaan terbuka: Kapan perubahan /overlay
struktur ini terjadi? LEDE-17 adalah penerus OpenWrt-CC dan saya tidak memiliki sistem runnig OpenWrt. Jadi, jika Anda membutuhkan ini di OpenWrt-BB atau -CC, lihat ke dalam /overlay
dulu.
Berdasarkan solusi yeti , ada kemungkinan lain, yang mungkin lebih cepat. Alih-alih menghitung ukuran dengan
du
untuk file dalamlist
file, kita dapat menggunakan ukuran yang dinyatakan dalamcontrol
file.Sesuatu seperti
opkg_sizes
naskah kecilkuJika Anda ingin output diurutkan, Anda dapat menjalankannya melalui
sort
:EDIT
Membandingkan hasil skrip saya dengan perbedaan yeti yang terungkap. Itu karena dia merujuk
/overlay/usr/lib/opkg/info
sementara saya berpikir bahwa/overlay
awalan tidak perlu. Yah, saya tidak sepenuhnya mengerti mengapa, tetapi/usr/lib/opkg/info
juga memberikan paket sistem, sementara/overlay/usr/lib/opkg/info
hanya memberikan paket pengguna.Jadi, jika pengguna tertarik pada paket sistem juga, gunakan versi pertama. Tetapi untuk mencapai hanya paket pengguna, cukup ganti baris pertama ke:
Setelah melakukannya, kedua skrip merujuk ke paket yang sama, tetapi dengan nomor yang berbeda ... (selain perbedaan yang jelas antara byte dan kilobyte :-))
ls
menunjukkan ukuran dalam byte,du
menunjukkan ukuran semua blok yang dialokasikan oleh file.sumber
du
diperhitungkan dalam rincian ukuran sistem berkas. Dan / overlay hanyalah bagian writale dari lapisan filesystem.Jawaban ini adalah versi yang lebih baik dari jawaban Zvika . Karena kode sumbernya sangat berbeda, saya yakin lebih baik menambahkannya sebagai jawaban tambahan, daripada mengedit yang asli.
The kode asli yang diperlukan terlalu banyak garpu, menjadikannya sebagai lambat satu detik. Kode yang ditingkatkan ini lebih pendek dan hanya menggunakan tiga proses, yang mengarah ke waktu berjalan cepat 0,02s (di router saya).
Anda dapat mengubah jalur:
/overlay/usr/lib/opkg/info/*.control
→ paket yang diinstal pengguna. Ini adalah paket yang bisa dihapus untuk membebaskan ruang./rom/usr/lib/opkg/info/*.control
→ paket sistem. Ini tidak dapat dihapus. (Kecuali Anda benar - benar tahu apa yang Anda lakukan.) Karena mereka disimpan di partisi read-only, menghapusnya tidak akan membebaskan ruang tambahan./usr/lib/opkg/info/*.control
→ semua paket.sumber
Bagi saya cara termudah adalah menggunakan
find
;dengan output di bawah ini;
Ini adalah file "besar" di instal LEDE saya. Saya membutuhkan ruang ekstra pada router saya sehingga saya dapat memformat, mempartisi, dan me-mount beberapa ruang penyimpanan USB. Sesuaikan
+500k
dengan ukuran file yang lebih cocok untuk Anda.sumber