Nicht jede OpenWrt-Umgebung ist auf die gleiche Weise eingerichtet, daher ist meine Antwort ein Schuss in die Dunkelheit ...
Die Beispielausgabe stammt von OpenWrt-12.09 auf einem "TP-Link TL-WDR4300".
ssh
in Ihren Router.
Überprüfen Sie Ihre filesytsems.
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
ist die micro SD Karte meines UMTS Sticks ... einfach ignorieren.
Viele Router werden auf ähnliche Weise wie hier dargestellt geflasht: Ein schreibgeschütztes Root-Dateisystem wird durch ein Overlay-Dateisystem pseudobeschreibbar gemacht.
Schau rein /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
Dieses Verzeichnis enthält die Informationen zu zusätzlich installierten Paketen. Die Dateien, die mit enden, .list
sind Listen von Dateien, die vom Paket mit dem ähnlichen Namen (ohne .list
) installiert wurden :
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
hat 3 Dateien installiert.
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
Das Paket zlib
enthält 73 KB installierte Dateien.
Ein roher 1-Liner, der alles zusammenklebt und die Ausgabe verkürzt:
# 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!
Hinzugefügt am 17.10.2014:
Die folgende Ausgabe stammt aus OpenWrt-12.09 auf einem "TP-Link TL-WR703N" und zeigt, wie die Ausgabe nach Paketgröße sortiert wird.
Schauen Sie sich an, wo und wie die Variable S
ins Spiel kommt ...
# 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---
Nochmals: HTH!
Hinzugefügt am 13.01.2018:
Der obige Weg wurde mit OpenWrt-AA getestet.
Bei LEDE-17.01 hat sich ein Pfad geändert: Ersetzen /overlay
durch /overlay/upper
behebt diesen Fehler.
Status quo ( opkg-list-user-installed-sorted-by-size
nicht als 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---"
}
Testlauf:
root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8 luci-ssl
9 libustream-mbedtls
13 px5g-mbedtls
338 libmbedtls
368 ---TOTAL---
Offene Frage: Wann ist diese /overlay
Strukturänderung eingetreten? LEDE-17 ist der Nachfolger von OpenWrt-CC und ich habe keine OpenWrt-Systeme zur Hand. Wenn Sie dies für OpenWrt-BB oder -CC benötigen, schauen Sie /overlay
zuerst hinein.
Basierend auf Yetis Lösung gibt es eine andere Möglichkeit, die möglicherweise schneller ist. Anstatt die Größe mit
du
für die Dateien in derlist
Datei zu berechnen , können wir die deklarierte Größe in dercontrol
Datei verwenden.Sowas wie mein kleines
opkg_sizes
DrehbuchWenn Sie möchten, dass die Ausgabe sortiert wird, können Sie Folgendes ausführen
sort
:BEARBEITEN
Das Vergleichen meiner Skriptergebnisse mit Yetis aufgedeckten Unterschieden. Es ist, weil er angesprochen hat,
/overlay/usr/lib/opkg/info
während ich dachte, dass das/overlay
Präfix unnötig ist. Nun, ich verstehe nicht ganz warum, aber ich/usr/lib/opkg/info
gebe auch die Systempakete an, während ich/overlay/usr/lib/opkg/info
nur die Pakete des Benutzers gebe.Wenn der Benutzer auch an den Systempaketen interessiert ist, verwenden Sie die erste Version. Um jedoch nur die Pakete des Benutzers zu erhalten, ersetzen Sie einfach die erste Zeile durch:
Danach beziehen sich beide Skripte auf die gleichen Pakete, jedoch mit unterschiedlichen Nummern ... (abgesehen von dem offensichtlichen Unterschied zwischen Bytes und Kilobytes :-))
ls
Zeigt die Größe in Bytes an,du
zeigt die Größe aller von der Datei zugewiesenen Blöcke an.quelle
du
zählt in Dateisystem blockiert Granularität. Und / overlay ist nur der beschreibbare Teil der Dateisystemebenen.Diese Antwort ist eine verbesserte Version der Antwort von Zvika . Da der Quellcode wesentlich anders ist, halte ich es für besser, ihn als zusätzliche Antwort anstelle einer Bearbeitung des ursprünglichen Codes hinzuzufügen.
Für den ursprünglichen Code waren zu viele Gabeln erforderlich, sodass der Vorgang nur eine Sekunde dauert. Dieser verbesserte Code ist kürzer und verwendet nur drei Prozesse. Dies führt zu einer blitzschnellen Laufzeit von 0,02 Sekunden (auf meinem Router).
Sie können die Pfade optimieren:
/overlay/usr/lib/opkg/info/*.control
→ vom Benutzer installierte Pakete. Dies sind die Pakete, die entfernt werden können, um Speicherplatz freizugeben./rom/usr/lib/opkg/info/*.control
→ Systempakete. Diese können nicht deinstalliert werden. (Es sei denn, Sie wissen wirklich , was Sie tun.) Da sie in der schreibgeschützten Partition gespeichert sind, wird durch das Entfernen kein zusätzlicher Speicherplatz freigegeben./usr/lib/opkg/info/*.control
→ alle pakete.quelle
Für mich war der einfachste Weg zu benutzen
find
;mit Ausgabe unten;
Dies waren die "großen" Dateien in meiner LEDE-Installation. Ich benötigte zusätzlichen Speicherplatz auf meinem Router, um USB-Speicherplatz formatieren, partitionieren und bereitstellen zu können. Stellen Sie
+500k
eine Dateigröße ein, die besser zu Ihnen passt.quelle