回答:
すべてのOpenWrt環境が同じように設定されているわけではないので、私の答えは暗闇でのショットです...
出力例は、「TP-Link TL-WDR4300」上のOpenWrt-12.09から取得したものです。
ssh
ルーターに。
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
UMTSスティックのマイクロSDカードです。これを無視してください。
多くのルーターは、次のような類似の方法でフラッシュされます。読み取り専用のルートファイルシステムは、オーバーレイファイルシステムによって擬似的に書き込み可能になります。
中を見て/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
このディレクトリには、追加でインストールされたパッケージに関する情報が含まれています。で終わる.list
ファイルは、パッケージによってインストールされるファイルのリストで、同様の名前(なし.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
パッケージにzlib
は3つのファイルがインストールされています。
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
パッケージにzlib
は73kバイトのインストール済みファイルがあります。
これをすべて一緒に接着する粗い1ライナーで、出力が短縮されます。
# 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!
2014-10-17を追加:
次の出力は、「TP-Link TL-WR703N」上のOpenWrt-12.09から取得したもので、パッケージサイズによる出力の並べ替えを追加する方法を示しています。
変数S
がゲームに登場する場所と方法を確認してください...
# 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---
繰り返しますが、HTH!
2018-01-13を追加:
上記の方法は、OpenWrt-AAでテストされました。
LEDE-17.01を見ると、パスが変更されています。これ/overlay
を/overlay/upper
修正することで置き換えます。
現状(opkg-list-user-installed-sorted-by-size
1-ライナーではない):
#!/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---"
}
テスト走行:
root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8 luci-ssl
9 libustream-mbedtls
13 px5g-mbedtls
338 libmbedtls
368 ---TOTAL---
未解決の質問:/overlay
の構造のこの変更はいつ発生しましたか?LEDE-17はOpenWrt-CCの後継であり、OpenWrtを実行するシステムはありません。OpenWrt-BBまたは-CCでこれが必要な場合は、/overlay
まず中を見てください。
yetiのソリューションに基づいて、別の可能性があります。du
ファイル内のlist
ファイルのサイズを計算する代わりに、ファイルで宣言されたサイズを使用できcontrol
ます。
私の小さなopkg_sizes
スクリプトのようなもの
cd /usr/lib/opkg/info
for i in *.control
do
echo `grep Size "$i" | cut -f 2 -d :` "${i%.control}"
done
出力をソートしたい場合は、以下を実行できますsort
。
./opkg_sizes | sort -n
スクリプトの結果をyetiの明らかになった違いと比較します。プレフィックスが不要/overlay/usr/lib/opkg/info
だと思っている間に彼が言及したから/overlay
です。さて、私は理由を完全には理解していませんが/usr/lib/opkg/info
、システムパッケージも提供しますが、/overlay/usr/lib/opkg/info
ユーザーのパッケージのみを提供します。
そのため、ユーザーがシステムパッケージにも関心がある場合は、最初のバージョンを使用してください。ただし、ユーザーのパッケージのみを実現するには、最初の行を次のように置き換えます。
cd /overlay/usr/lib/opkg/info
そうすると、両方のスクリプトは同じパッケージを参照しますが、番号は異なります...(バイトとキロバイトの明らかな違いに加えて:-))
root@ap8:~# ls -l 1412453029-14.07-wdr4300-default-packages
-rw-r--r-- 1 root root 2683 Oct 4 20:03 1412453029-14.07-wdr4300-default-packages
root@ap8:~# du 1412453029-14.07-wdr4300-default-packages
3 1412453029-14.07-wdr4300-default-packages
ls
バイト単位du
のサイズを示し、ファイルによって割り当てられたすべてのブロックのサイズを示します。
この回答は、Zvikaの回答の改良版です。ソースコードはかなり異なるため、元のコードを編集するのではなく、追加の回答として追加する方が良いと思います。
#!/bin/sh
grep -H Installed-Size: /overlay/usr/lib/opkg/info/*.control | \
sed 's,^.*/\([^/]\+\)\.control:Installed-Size: *\(.*\),\2\t\1,'
元のコードは、 1秒と遅いとしてそれを作る、あまりにも多くのフォークを必要としていました。この改善されたコードはより短く、3つのプロセスのみを使用するため、0.02秒という非常に速い実行時間になります(ルーター上)。
パスを微調整できます:
/overlay/usr/lib/opkg/info/*.control
→ユーザーがインストールしたパッケージ。これらは、スペースを解放するために削除できるパッケージです。/rom/usr/lib/opkg/info/*.control
→システムパッケージ。これらはアンインストールできません。(あなたが何をしているのかを本当に知らない限り。)それらは読み取り専用パーティションに保存されているため、それらを削除しても追加のスペースは解放されません。/usr/lib/opkg/info/*.control
→すべてのパッケージ。私にとって最も簡単な方法は、使用することfind
でした。
find / -size +500k
以下の出力で;
# find / -size +500k
/lib/libc.so
/lib/modules/4.4.92/mac80211.ko
/overlay/upper/usr/lib/libcrypto.so.1.0.0
/overlay/upper/usr/lib/libdns.so.165.0.4
/overlay/upper/usr/sbin/sshd
/rom/lib/libc.so
/rom/lib/modules/4.4.92/mac80211.ko
/usr/lib/libcrypto.so.1.0.0
/usr/lib/libdns.so.165.0.4
/usr/sbin/sshd
これらは私のLEDEインストールの「大きな」ファイルでした。USBストレージスペースをフォーマット、パーティション分割、およびマウントできるように、ルーターに余分なスペースが必要でした。最適+500k
なファイルサイズに調整します。