Linux cesa-www-main 6.1.0-49-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.174-1 (2026-05-26) x86_64
Apache/2.4.68 (Debian)
Server IP : 10.218.0.2 & Your IP : 216.73.217.79
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
sbin /
Delete
Unzip
Name
Size
Permission
Date
Action
ModemManager
2.01
MB
-rwxr-xr-x
2023-01-03 12:34
a2disconf
15.86
KB
-rwxr-xr-x
2026-06-12 05:08
a2dismod
15.86
KB
-rwxr-xr-x
2026-06-12 05:08
a2dissite
15.86
KB
-rwxr-xr-x
2026-06-12 05:08
a2enconf
15.86
KB
-rwxr-xr-x
2026-06-12 05:08
a2enmod
15.86
KB
-rwxr-xr-x
2026-06-12 05:08
a2ensite
15.86
KB
-rwxr-xr-x
2026-06-12 05:08
a2query
9.6
KB
-rwxr-xr-x
2026-06-12 05:08
aa-remove-unknown
3.13
KB
-rwxr-xr-x
2023-02-14 11:49
aa-status
38.3
KB
-rwxr-xr-x
2023-02-14 11:49
aa-teardown
137
B
-rwxr-xr-x
2022-11-22 00:54
accessdb
14.46
KB
-rwxr-xr-x
2023-03-12 22:23
add-shell
1.03
KB
-rwxr-xr-x
2023-07-28 23:46
addgnupghome
3
KB
-rwxr-xr-x
2026-01-01 14:54
addgroup
47.25
KB
-rwxr-xr-x
2023-05-25 15:54
adduser
47.25
KB
-rwxr-xr-x
2023-05-25 15:54
agetty
67.49
KB
-rwxr-xr-x
2024-11-21 20:01
apache2
716.53
KB
-rwxr-xr-x
2026-06-12 05:08
apache2ctl
7.19
KB
-rwxr-xr-x
2026-06-12 05:08
apachectl
7.19
KB
-rwxr-xr-x
2026-06-12 05:08
apparmor_parser
1.39
MB
-rwxr-xr-x
2023-02-14 11:49
apparmor_status
38.3
KB
-rwxr-xr-x
2023-02-14 11:49
applygnupgdefaults
2.17
KB
-rwxr-xr-x
2026-01-01 14:54
arp
66.13
KB
-rwxr-xr-x
2025-05-26 19:27
arpd
104.48
KB
-rwxr-xr-x
2023-05-22 13:19
arptables
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
arptables-nft
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
arptables-nft-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
arptables-nft-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
arptables-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
arptables-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
aspell-autobuildhash
13.36
KB
-rwxr-xr-x
2023-03-14 21:17
avahi-daemon
146.43
KB
-rwxr-xr-x
2024-12-19 07:01
badblocks
34.25
KB
-rwxr-xr-x
2025-06-06 17:12
biosdecode
27.13
KB
-rwxr-xr-x
2022-06-30 18:37
blkdeactivate
15.96
KB
-rwxr-xr-x
2022-10-19 19:37
blkdiscard
34.31
KB
-rwxr-xr-x
2024-11-21 20:01
blkid
122.34
KB
-rwxr-xr-x
2024-11-21 20:01
blkmapd
54.34
KB
-rwxr-xr-x
2024-12-11 14:00
blkzone
78.31
KB
-rwxr-xr-x
2024-11-21 20:01
blockdev
78.31
KB
-rwxr-xr-x
2024-11-21 20:01
bridge
152.54
KB
-rwxr-xr-x
2023-05-22 13:19
capsh
53.29
KB
-rwxr-xr-x
2026-05-07 21:10
cgdisk
210.41
KB
-rwxr-xr-x
2022-10-16 12:32
chcpu
46.3
KB
-rwxr-xr-x
2024-11-21 20:01
check_forensic
952
B
-rwxr-xr-x
2011-04-26 15:10
chgpasswd
66.29
KB
-rwxr-xr-x
2025-12-14 14:00
chmem
66.31
KB
-rwxr-xr-x
2024-11-21 20:01
chpasswd
62.36
KB
-rwxr-xr-x
2025-12-14 14:00
chroot
46.98
KB
-rwxr-xr-x
2022-09-20 15:27
cifs.idmap
14.3
KB
-rwxr-xr-x
2022-08-26 14:06
cifs.upcall
38.52
KB
-rwxr-xr-x
2022-08-26 14:06
cpgr
60.43
KB
-rwxr-xr-x
2025-12-14 14:00
cppw
60.43
KB
-rwxr-xr-x
2025-12-14 14:00
cron
50.56
KB
-rwxr-xr-x
2023-03-02 07:33
ctrlaltdel
38.3
KB
-rwxr-xr-x
2024-11-21 20:01
dbconfig-generate-include
12.36
KB
-rwxr-xr-x
2023-02-16 12:37
dbconfig-load-include
5.57
KB
-rwxr-xr-x
2023-02-16 12:37
dcb
144.6
KB
-rwxr-xr-x
2023-05-22 13:19
debugfs
233.83
KB
-rwxr-xr-x
2025-06-06 17:12
delgroup
16.33
KB
-rwxr-xr-x
2023-05-25 15:54
deluser
16.33
KB
-rwxr-xr-x
2023-05-25 15:54
depmod
174.27
KB
-rwxr-xr-x
2022-12-10 00:02
devlink
220.98
KB
-rwxr-xr-x
2023-05-22 13:19
dhclient
2.63
MB
-rwxr-xr-x
2023-04-17 12:20
dhclient-script
14.21
KB
-rwxr-xr-x
2023-04-17 12:20
dmidecode
127.16
KB
-rwxr-xr-x
2022-06-30 18:37
dmsetup
166.98
KB
-rwxr-xr-x
2022-10-19 19:37
dmstats
166.98
KB
-rwxr-xr-x
2022-10-19 19:37
dpkg-fsys-usrunmess
16.99
KB
-rwxr-xr-x
2026-03-07 12:15
dpkg-preconfigure
3.83
KB
-rwxr-xr-x
2023-01-08 21:50
dpkg-reconfigure
4.38
KB
-rwxr-xr-x
2023-01-08 21:50
dumpe2fs
30.31
KB
-rwxr-xr-x
2025-06-06 17:12
e2freefrag
14.3
KB
-rwxr-xr-x
2025-06-06 17:12
e2fsck
348.27
KB
-rwxr-xr-x
2025-06-06 17:12
e2image
54.45
KB
-rwxr-xr-x
2025-06-06 17:12
e2label
114.52
KB
-rwxr-xr-x
2025-06-06 17:12
e2mmpstatus
30.31
KB
-rwxr-xr-x
2025-06-06 17:12
e2scrub
7.12
KB
-rwxr-xr-x
2025-06-06 17:12
e2scrub_all
5.27
KB
-rwxr-xr-x
2025-06-06 17:12
e2undo
22.3
KB
-rwxr-xr-x
2025-06-06 17:12
e4crypt
26.3
KB
-rwxr-xr-x
2025-06-06 17:12
e4defrag
30.23
KB
-rwxr-xr-x
2025-06-06 17:12
ebtables
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ebtables-nft
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ebtables-nft-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ebtables-nft-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ebtables-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ebtables-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ebtables-translate
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ethtool
592.45
KB
-rwxr-xr-x
2022-12-20 11:18
exicyclog
11.03
KB
-rwxr-xr-x
2026-05-27 16:52
exigrep
10.4
KB
-rwxr-xr-x
2026-05-27 16:52
exim
1.35
MB
-rwsr-xr-x
2026-05-27 16:52
exim4
1.35
MB
-rwsr-xr-x
2026-05-27 16:52
exim_checkaccess
4.74
KB
-rwxr-xr-x
2026-05-27 16:52
exim_convert4r4
72.76
KB
-rwxr-xr-x
2026-05-27 16:52
exim_dbmbuild
18.24
KB
-rwxr-xr-x
2026-05-27 16:52
exim_dumpdb
26.23
KB
-rwxr-xr-x
2026-05-27 16:52
exim_fixdb
34.23
KB
-rwxr-xr-x
2026-05-27 16:52
exim_lock
18.23
KB
-rwxr-xr-x
2026-05-27 16:52
exim_tidydb
30.23
KB
-rwxr-xr-x
2026-05-27 16:52
eximstats
148.03
KB
-rwxr-xr-x
2026-05-27 16:52
exinext
8.08
KB
-rwxr-xr-x
2026-05-27 16:52
exipick
59.25
KB
-rwxr-xr-x
2026-05-27 16:52
exiqgrep
5.42
KB
-rwxr-xr-x
2026-05-27 16:52
exiqsumm
5.04
KB
-rwxr-xr-x
2026-05-27 16:52
exiwhat
4.34
KB
-rwxr-xr-x
2026-05-27 16:52
exportfs
90.59
KB
-rwxr-xr-x
2024-12-11 14:00
faillock
14.24
KB
-rwxr-xr-x
2025-08-10 15:54
filefrag
18.26
KB
-rwxr-xr-x
2025-06-06 17:12
findfs
14.3
KB
-rwxr-xr-x
2024-11-21 20:01
fixparts
74.4
KB
-rwxr-xr-x
2022-10-16 12:32
fsck
54.36
KB
-rwxr-xr-x
2024-11-21 20:01
fsck.cramfs
42.37
KB
-rwxr-xr-x
2024-11-21 20:01
fsck.ext2
348.27
KB
-rwxr-xr-x
2025-06-06 17:12
fsck.ext3
348.27
KB
-rwxr-xr-x
2025-06-06 17:12
fsck.ext4
348.27
KB
-rwxr-xr-x
2025-06-06 17:12
fsck.minix
122.34
KB
-rwxr-xr-x
2024-11-21 20:01
fsfreeze
14.3
KB
-rwxr-xr-x
2024-11-21 20:01
fstab-decode
14.23
KB
-rwxr-xr-x
2023-04-03 06:25
fstrim
74.31
KB
-rwxr-xr-x
2024-11-21 20:01
gdisk
218.41
KB
-rwxr-xr-x
2022-10-16 12:32
genl
116.51
KB
-rwxr-xr-x
2023-05-22 13:19
getcap
14.23
KB
-rwxr-xr-x
2026-05-07 21:10
getpcaps
14.23
KB
-rwxr-xr-x
2026-05-07 21:10
getty
67.49
KB
-rwxr-xr-x
2024-11-21 20:01
groupadd
99.04
KB
-rwxr-xr-x
2025-12-14 14:00
groupdel
86.85
KB
-rwxr-xr-x
2025-12-14 14:00
groupmems
66.33
KB
-rwxr-xr-x
2025-12-14 14:00
groupmod
99.01
KB
-rwxr-xr-x
2025-12-14 14:00
grpck
66.3
KB
-rwxr-xr-x
2025-12-14 14:00
grpconv
58.14
KB
-rwxr-xr-x
2025-12-14 14:00
grpunconv
58.14
KB
-rwxr-xr-x
2025-12-14 14:00
grub-install
1.15
MB
-rwxr-xr-x
2026-04-01 20:03
grub-macbless
931.48
KB
-rwxr-xr-x
2026-04-01 20:03
grub-mkconfig
8.46
KB
-rwxr-xr-x
2026-04-01 20:03
grub-mkdevicemap
216.76
KB
-rwxr-xr-x
2026-04-01 20:03
grub-probe
939.79
KB
-rwxr-xr-x
2026-04-01 20:03
grub-reboot
4.73
KB
-rwxr-xr-x
2026-04-01 20:03
grub-set-default
3.47
KB
-rwxr-xr-x
2026-04-01 20:03
halt
1.29
MB
-rwxr-xr-x
2026-04-27 19:48
haveged
30.8
KB
-rwxr-xr-x
2026-05-22 12:56
httxt2dbm
14.23
KB
-rwxr-xr-x
2026-06-12 05:08
hwclock
86.44
KB
-rwxr-xr-x
2024-11-21 20:01
iconvconfig
30.84
KB
-rwxr-xr-x
2026-04-27 20:14
ifconfig
82.01
KB
-rwxr-xr-x
2025-05-26 19:27
iio-sensor-proxy
67.06
KB
-rwxr-xr-x
2021-01-29 07:05
init
90.38
KB
-rwxr-xr-x
2026-04-27 19:48
insmod
174.27
KB
-rwxr-xr-x
2022-12-10 00:02
install-sgmlcatalog
4.44
KB
-rwxr-xr-x
2022-10-06 18:03
installkernel
2.6
KB
-rwxr-xr-x
2023-07-28 23:46
invoke-rc.d
16.13
KB
-rwxr-xr-x
2022-07-04 10:14
ip
674.82
KB
-rwxr-xr-x
2023-05-22 13:19
ip6tables
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-apply
6.87
KB
-rwxr-xr-x
2023-01-12 10:27
ip6tables-legacy
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-legacy-restore
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-legacy-save
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-nft
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-nft-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-nft-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-restore-translate
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ip6tables-translate
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
ipmaddr
18.56
KB
-rwxr-xr-x
2025-05-26 19:27
iptables
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-apply
6.87
KB
-rwxr-xr-x
2023-01-12 10:27
iptables-legacy
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-legacy-restore
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-legacy-save
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-nft
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-nft-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-nft-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-restore
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-restore-translate
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-save
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptables-translate
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
iptunnel
26.55
KB
-rwxr-xr-x
2025-05-26 19:27
isosize
30.31
KB
-rwxr-xr-x
2024-11-21 20:01
ispell-autobuildhash
15.52
KB
-rwxr-xr-x
2023-03-14 21:17
key.dns_resolver
30.32
KB
-rwxr-xr-x
2022-12-18 21:15
killall5
26.31
KB
-rwxr-xr-x
2023-04-03 06:25
ldattach
34.31
KB
-rwxr-xr-x
2024-11-21 20:01
ldconfig
959.84
KB
-rwxr-xr-x
2026-04-27 20:14
logrotate
98.16
KB
-rwxr-xr-x
2022-12-14 18:16
logsave
14.09
KB
-rwxr-xr-x
2025-06-06 17:12
losetup
114.42
KB
-rwxr-xr-x
2024-11-21 20:01
lsmod
174.27
KB
-rwxr-xr-x
2022-12-10 00:02
make-ssl-cert
6.65
KB
-rwxr-xr-x
2021-12-30 16:52
mii-tool
27.08
KB
-rwxr-xr-x
2025-05-26 19:27
mke2fs
138.58
KB
-rwxr-xr-x
2025-06-06 17:12
mkfs
14.3
KB
-rwxr-xr-x
2024-11-21 20:01
mkfs.bfs
34.31
KB
-rwxr-xr-x
2024-11-21 20:01
mkfs.cramfs
42.24
KB
-rwxr-xr-x
2024-11-21 20:01
mkfs.ext2
138.58
KB
-rwxr-xr-x
2025-06-06 17:12
mkfs.ext3
138.58
KB
-rwxr-xr-x
2025-06-06 17:12
mkfs.ext4
138.58
KB
-rwxr-xr-x
2025-06-06 17:12
mkfs.minix
110.32
KB
-rwxr-xr-x
2024-11-21 20:01
mkhomedir_helper
22.27
KB
-rwxr-xr-x
2025-08-10 15:54
mkinitramfs
12.4
KB
-rwxr-xr-x
2025-04-26 20:00
mklost+found
14.23
KB
-rwxr-xr-x
2025-06-06 17:12
mkswap
114.31
KB
-rwxr-xr-x
2024-11-21 20:01
modinfo
174.27
KB
-rwxr-xr-x
2022-12-10 00:02
modprobe
174.27
KB
-rwxr-xr-x
2022-12-10 00:02
mount.cifs
47
KB
-rwsr-xr-x
2022-08-26 14:06
mount.nfs
127.01
KB
-rwsr-xr-x
2024-12-11 14:00
mount.nfs4
127.01
KB
-rwsr-xr-x
2024-12-11 14:00
mount.smb3
47
KB
-rwsr-xr-x
2022-08-26 14:06
mountstats
42.28
KB
-rwxr-xr-x
2024-12-11 14:00
nameif
14.65
KB
-rwxr-xr-x
2025-05-26 19:27
netplan
798
B
-rwxr-xr-x
2023-02-09 08:15
newusers
102.92
KB
-rwxr-xr-x
2025-12-14 14:00
nfnl_osf
18.23
KB
-rwxr-xr-x
2023-01-16 13:44
nfsconf
46.72
KB
-rwxr-xr-x
2024-12-11 14:00
nfsdcld
70.6
KB
-rwxr-xr-x
2024-12-11 14:00
nfsdclddb
9.99
KB
-rwxr-xr-x
2024-12-11 14:00
nfsdclnts
9.05
KB
-rwxr-xr-x
2024-12-11 14:00
nfsdcltrack
50.73
KB
-rwxr-xr-x
2024-12-11 14:00
nfsidmap
46.34
KB
-rwxr-xr-x
2024-12-11 14:00
nfsiostat
24.41
KB
-rwxr-xr-x
2024-12-11 14:00
nfsstat
37.2
KB
-rwxr-xr-x
2024-12-11 14:00
nologin
14.23
KB
-rwxr-xr-x
2025-12-14 14:00
nvme
919.27
KB
-rwxr-xr-x
2023-04-15 08:18
ownership
14.38
KB
-rwxr-xr-x
2022-06-30 18:37
pam-auth-update
20.79
KB
-rwxr-xr-x
2025-08-10 15:54
pam_getenv
2.82
KB
-rwxr-xr-x
2025-08-10 15:54
pam_namespace_helper
467
B
-rwxr-xr-x
2025-08-10 15:54
pam_timestamp_check
14.24
KB
-rwxr-xr-x
2025-08-10 15:54
paperconfig
4.07
KB
-rwxr-xr-x
2023-03-17 13:44
parted
86.33
KB
-rwxr-xr-x
2022-11-15 23:24
partprobe
14.3
KB
-rwxr-xr-x
2022-11-15 23:24
php-fpm7.2
4.72
MB
-rwxr-xr-x
2026-05-14 15:46
php-fpm7.4
4.56
MB
-rwxr-xr-x
2026-05-14 15:45
php-fpm8.1
5.28
MB
-rwxr-xr-x
2026-05-14 15:46
php-fpm8.4
5.7
MB
-rwxr-xr-x
2026-06-06 06:52
phpdismod
7.11
KB
-rwxr-xr-x
2026-05-03 07:49
phpenmod
7.11
KB
-rwxr-xr-x
2026-05-03 07:49
phpquery
6.24
KB
-rwxr-xr-x
2026-05-03 07:49
pivot_root
14.3
KB
-rwxr-xr-x
2024-11-21 20:01
plipconfig
14.48
KB
-rwxr-xr-x
2025-05-26 19:27
poweroff
1.29
MB
-rwxr-xr-x
2026-04-27 19:48
pwck
58.26
KB
-rwxr-xr-x
2025-12-14 14:00
pwconv
54.13
KB
-rwxr-xr-x
2025-12-14 14:00
pwhistory_helper
18.24
KB
-rwxr-xr-x
2025-08-10 15:54
pwunconv
54.17
KB
-rwxr-xr-x
2025-12-14 14:00
rarp
37.13
KB
-rwxr-xr-x
2025-05-26 19:27
readprofile
34.34
KB
-rwxr-xr-x
2024-11-21 20:01
reboot
1.29
MB
-rwxr-xr-x
2026-04-27 19:48
remove-default-ispell
2.86
KB
-rwxr-xr-x
2023-03-14 21:17
remove-default-wordlist
2.86
KB
-rwxr-xr-x
2023-03-14 21:17
remove-shell
1.08
KB
-rwxr-xr-x
2023-07-28 23:46
request-key
26.32
KB
-rwxr-xr-x
2022-12-18 21:15
resize2fs
62.3
KB
-rwxr-xr-x
2025-06-06 17:12
resolvconf
146.53
KB
-rwxr-xr-x
2026-04-27 19:48
rmail
1.35
MB
-rwsr-xr-x
2026-05-27 16:52
rmmod
174.27
KB
-rwxr-xr-x
2022-12-10 00:02
rmt
59.02
KB
-rwxr-xr-x
2024-01-20 09:27
rmt-tar
59.02
KB
-rwxr-xr-x
2024-01-20 09:27
route
69.17
KB
-rwxr-xr-x
2025-05-26 19:27
rpc.gssd
106.57
KB
-rwxr-xr-x
2024-12-11 14:00
rpc.idmapd
62.53
KB
-rwxr-xr-x
2024-12-11 14:00
rpc.mountd
145.68
KB
-rwxr-xr-x
2024-12-11 14:00
rpc.nfsd
50.88
KB
-rwxr-xr-x
2024-12-11 14:00
rpc.statd
111.02
KB
-rwxr-xr-x
2024-12-11 14:00
rpc.svcgssd
62.54
KB
-rwxr-xr-x
2024-12-11 14:00
rpcbind
62.48
KB
-rwxr-xr-x
2022-10-09 21:12
rpcctl
9.42
KB
-rwxr-xr-x
2024-12-11 14:00
rpcdebug
18.3
KB
-rwxr-xr-x
2024-12-11 14:00
rpcinfo
34.39
KB
-rwxr-xr-x
2022-10-09 21:12
rsmtp
1.35
MB
-rwsr-xr-x
2026-05-27 16:52
rsyslogd
731.79
KB
-rwxr-xr-x
2025-01-08 18:13
rtacct
44.37
KB
-rwxr-xr-x
2023-05-22 13:19
rtcwake
46.31
KB
-rwxr-xr-x
2024-11-21 20:01
rtmon
112.45
KB
-rwxr-xr-x
2023-05-22 13:19
runlevel
1.29
MB
-rwxr-xr-x
2026-04-27 19:48
runq
1.35
MB
-rwsr-xr-x
2026-05-27 16:52
runuser
70.31
KB
-rwxr-xr-x
2024-11-21 20:01
select-default-ispell
3.23
KB
-rwxr-xr-x
2023-03-14 21:17
select-default-wordlist
3.21
KB
-rwxr-xr-x
2023-03-14 21:17
sendmail
1.35
MB
-rwsr-xr-x
2026-05-27 16:52
service
8.89
KB
-rwxr-xr-x
2025-08-20 18:58
setcap
14.23
KB
-rwxr-xr-x
2026-05-07 21:10
sgdisk
202.41
KB
-rwxr-xr-x
2022-10-16 12:32
shadowconfig
2.22
KB
-rwxr-xr-x
2025-12-14 14:00
showmount
22.5
KB
-rwxr-xr-x
2024-12-11 14:00
shutdown
1.29
MB
-rwxr-xr-x
2026-04-27 19:48
slattach
41.2
KB
-rwxr-xr-x
2025-05-26 19:27
sm-notify
78.51
KB
-rwxr-xr-x
2024-12-11 14:00
split-logfile
2.36
KB
-rwxr-xr-x
2026-06-12 05:08
sshd
1.21
MB
-rwxr-xr-x
2026-05-05 10:26
start-statd
1023
B
-rwxr-xr-x
2024-12-11 14:00
start-stop-daemon
43.42
KB
-rwxr-xr-x
2026-03-07 12:15
sudo_logsrvd
244.57
KB
-rwxr-xr-x
2026-04-11 12:01
sudo_sendlog
151.41
KB
-rwxr-xr-x
2026-04-11 12:01
sulogin
54.31
KB
-rwxr-xr-x
2024-11-21 20:01
swaplabel
18.3
KB
-rwxr-xr-x
2024-11-21 20:01
swapoff
22.3
KB
-rwxr-xr-x
2024-11-21 20:01
swapon
50.3
KB
-rwxr-xr-x
2024-11-21 20:01
switch_root
18.3
KB
-rwxr-xr-x
2024-11-21 20:01
sysctl
30.31
KB
-rwxr-xr-x
2022-12-19 06:06
syslog2eximlog
1.41
KB
-rwxr-xr-x
2026-05-27 16:52
tarcat
936
B
-rwxr-xr-x
2024-01-20 09:27
tc
574
KB
-rwxr-xr-x
2023-05-22 13:19
tcptraceroute
1.56
KB
-rwxr-xr-x
2023-02-25 12:24
tcptraceroute.db
1.56
KB
-rwxr-xr-x
2023-02-25 12:24
telinit
1.29
MB
-rwxr-xr-x
2026-04-27 19:48
tipc
152.6
KB
-rwxr-xr-x
2023-05-22 13:19
traceroute
71.23
KB
-rwxr-xr-x
2023-02-25 12:24
tune2fs
114.52
KB
-rwxr-xr-x
2025-06-06 17:12
umount.nfs
127.01
KB
-rwsr-xr-x
2024-12-11 14:00
umount.nfs4
127.01
KB
-rwsr-xr-x
2024-12-11 14:00
unix_chkpwd
38.24
KB
-rwxr-sr-x
2025-08-10 15:54
unix_update
38.24
KB
-rwxr-xr-x
2025-08-10 15:54
update-ca-certificates
5.54
KB
-rwxr-xr-x
2026-07-17 08:50
update-catalog
9.17
KB
-rwxr-xr-x
2022-10-06 18:03
update-default-aspell
1
KB
-rwxr-xr-x
2023-03-14 21:17
update-default-ispell
9.68
KB
-rwxr-xr-x
2023-03-14 21:17
update-default-wordlist
7.5
KB
-rwxr-xr-x
2023-03-14 21:17
update-dictcommon-aspell
1
KB
-rwxr-xr-x
2023-03-14 21:17
update-dictcommon-hunspell
782
B
-rwxr-xr-x
2023-03-14 21:17
update-exim4.conf
14.7
KB
-rwxr-xr-x
2026-05-27 16:52
update-exim4.conf.template
3.35
KB
-rwxr-xr-x
2025-11-24 05:52
update-exim4defaults
8.16
KB
-rwxr-xr-x
2026-05-27 16:52
update-fonts-alias
5.71
KB
-rwxr-xr-x
2016-08-21 16:54
update-fonts-dir
3.98
KB
-rwxr-xr-x
2016-08-21 16:54
update-fonts-scale
6.1
KB
-rwxr-xr-x
2016-08-21 16:54
update-grub
64
B
-rwxr-xr-x
2026-03-31 19:41
update-grub2
64
B
-rwxr-xr-x
2026-03-31 19:41
update-gsfontmap
470
B
-rwxr-xr-x
2025-10-05 08:11
update-icon-caches
596
B
-rwxr-xr-x
2024-07-19 10:57
update-initramfs
6.75
KB
-rwxr-xr-x
2025-04-24 15:40
update-passwd
38.49
KB
-rwxr-xr-x
2022-09-20 10:22
update-pciids
1.71
KB
-rwxr-xr-x
2023-01-17 23:50
update-rc.d
17.33
KB
-rwxr-xr-x
2025-08-20 18:56
update-secureboot-policy
5.13
KB
-rwxr-xr-x
2026-06-22 21:30
update-shells
3.89
KB
-rwxr-xr-x
2023-07-28 23:46
update-xmlcatalog
16.88
KB
-rwxr-xr-x
2019-02-27 00:18
usb_modeswitch
59.59
KB
-rwxr-xr-x
2022-05-31 23:53
usb_modeswitch_dispatcher
34.08
KB
-rwxr-xr-x
2022-05-31 23:53
useradd
155.8
KB
-rwxr-xr-x
2025-12-14 14:00
userdel
110.95
KB
-rwxr-xr-x
2025-12-14 14:00
usermod
143.61
KB
-rwxr-xr-x
2025-12-14 14:00
uuidd
38.81
KB
-rwxr-xr-x
2024-11-21 20:01
vdpa
116.66
KB
-rwxr-xr-x
2023-05-22 13:19
vigr
72.64
KB
-rwxr-xr-x
2025-12-14 14:00
vipw
72.64
KB
-rwxr-xr-x
2025-12-14 14:00
visudo
256.63
KB
-rwxr-xr-x
2026-04-11 12:01
vpddecode
14.51
KB
-rwxr-xr-x
2022-06-30 18:37
wipefs
46.31
KB
-rwxr-xr-x
2024-11-21 20:01
wpa_action
1.69
KB
-rwxr-xr-x
2025-04-11 14:29
wpa_cli
160.24
KB
-rwxr-xr-x
2025-04-11 14:29
wpa_supplicant
3.21
MB
-rwxr-xr-x
2025-04-11 14:29
xtables-legacy-multi
88.98
KB
-rwxr-xr-x
2023-01-16 13:44
xtables-monitor
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
xtables-nft-multi
223.16
KB
-rwxr-xr-x
2023-01-16 13:44
zic
58.73
KB
-rwxr-xr-x
2026-04-27 20:14
zramctl
114.42
KB
-rwxr-xr-x
2024-11-21 20:01
Save
Rename
#!/usr/bin/python3 # -*- python-mode -*- """Emulate iostat for NFS mount points using /proc/self/mountstats """ from __future__ import print_function __copyright__ = """ Copyright (C) 2005, Chuck Lever <cel@netapp.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA """ import sys, os, time from optparse import OptionParser, OptionGroup Iostats_version = '0.2' def difference(x, y): """Used for a map() function """ return x - y NfsEventCounters = [ 'inoderevalidates', 'dentryrevalidates', 'datainvalidates', 'attrinvalidates', 'vfsopen', 'vfslookup', 'vfspermission', 'vfsupdatepage', 'vfsreadpage', 'vfsreadpages', 'vfswritepage', 'vfswritepages', 'vfsreaddir', 'vfssetattr', 'vfsflush', 'vfsfsync', 'vfslock', 'vfsrelease', 'congestionwait', 'setattrtrunc', 'extendwrite', 'sillyrenames', 'shortreads', 'shortwrites', 'delay' ] NfsByteCounters = [ 'normalreadbytes', 'normalwritebytes', 'directreadbytes', 'directwritebytes', 'serverreadbytes', 'serverwritebytes', 'readpages', 'writepages' ] class DeviceData: """DeviceData objects provide methods for parsing and displaying data for a single mount grabbed from /proc/self/mountstats """ def __init__(self): self.__nfs_data = dict() self.__rpc_data = dict() self.__rpc_data['ops'] = [] def __parse_nfs_line(self, words): if words[0] == 'device': self.__nfs_data['export'] = words[1] self.__nfs_data['mountpoint'] = words[4] self.__nfs_data['fstype'] = words[7] if words[7] == 'nfs': self.__nfs_data['statvers'] = words[8] elif 'nfs' in words or 'nfs4' in words: self.__nfs_data['export'] = words[0] self.__nfs_data['mountpoint'] = words[3] self.__nfs_data['fstype'] = words[6] if words[6] == 'nfs': self.__nfs_data['statvers'] = words[7] elif words[0] == 'age:': self.__nfs_data['age'] = int(words[1]) elif words[0] == 'opts:': self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') elif words[0] == 'caps:': self.__nfs_data['servercapabilities'] = ''.join(words[1:]).split(',') elif words[0] == 'nfsv4:': self.__nfs_data['nfsv4flags'] = ''.join(words[1:]).split(',') elif words[0] == 'sec:': keys = ''.join(words[1:]).split(',') self.__nfs_data['flavor'] = int(keys[0].split('=')[1]) self.__nfs_data['pseudoflavor'] = 0 if self.__nfs_data['flavor'] == 6: self.__nfs_data['pseudoflavor'] = int(keys[1].split('=')[1]) elif words[0] == 'events:': i = 1 for key in NfsEventCounters: self.__nfs_data[key] = int(words[i]) i += 1 elif words[0] == 'bytes:': i = 1 for key in NfsByteCounters: self.__nfs_data[key] = int(words[i]) i += 1 def __parse_rpc_line(self, words): if words[0] == 'RPC': self.__rpc_data['statsvers'] = float(words[3]) self.__rpc_data['programversion'] = words[5] elif words[0] == 'xprt:': self.__rpc_data['protocol'] = words[1] if words[1] == 'udp': self.__rpc_data['port'] = int(words[2]) self.__rpc_data['bind_count'] = int(words[3]) self.__rpc_data['rpcsends'] = int(words[4]) self.__rpc_data['rpcreceives'] = int(words[5]) self.__rpc_data['badxids'] = int(words[6]) self.__rpc_data['inflightsends'] = int(words[7]) self.__rpc_data['backlogutil'] = int(words[8]) elif words[1] == 'tcp': self.__rpc_data['port'] = words[2] self.__rpc_data['bind_count'] = int(words[3]) self.__rpc_data['connect_count'] = int(words[4]) self.__rpc_data['connect_time'] = int(words[5]) self.__rpc_data['idle_time'] = int(words[6]) self.__rpc_data['rpcsends'] = int(words[7]) self.__rpc_data['rpcreceives'] = int(words[8]) self.__rpc_data['badxids'] = int(words[9]) self.__rpc_data['inflightsends'] = int(words[10]) self.__rpc_data['backlogutil'] = int(words[11]) elif words[1] == 'rdma': self.__rpc_data['port'] = words[2] self.__rpc_data['bind_count'] = int(words[3]) self.__rpc_data['connect_count'] = int(words[4]) self.__rpc_data['connect_time'] = int(words[5]) self.__rpc_data['idle_time'] = int(words[6]) self.__rpc_data['rpcsends'] = int(words[7]) self.__rpc_data['rpcreceives'] = int(words[8]) self.__rpc_data['badxids'] = int(words[9]) self.__rpc_data['backlogutil'] = int(words[10]) self.__rpc_data['read_chunks'] = int(words[11]) self.__rpc_data['write_chunks'] = int(words[12]) self.__rpc_data['reply_chunks'] = int(words[13]) self.__rpc_data['total_rdma_req'] = int(words[14]) self.__rpc_data['total_rdma_rep'] = int(words[15]) self.__rpc_data['pullup'] = int(words[16]) self.__rpc_data['fixup'] = int(words[17]) self.__rpc_data['hardway'] = int(words[18]) self.__rpc_data['failed_marshal'] = int(words[19]) self.__rpc_data['bad_reply'] = int(words[20]) elif words[0] == 'per-op': self.__rpc_data['per-op'] = words else: op = words[0][:-1] self.__rpc_data['ops'] += [op] self.__rpc_data[op] = [int(word) for word in words[1:]] def parse_stats(self, lines): """Turn a list of lines from a mount stat file into a dictionary full of stats, keyed by name """ found = False for line in lines: words = line.split() if len(words) == 0: continue if (not found and words[0] != 'RPC'): self.__parse_nfs_line(words) continue found = True self.__parse_rpc_line(words) def is_nfs_mountpoint(self): """Return True if this is an NFS or NFSv4 mountpoint, otherwise return False """ if self.__nfs_data['fstype'] == 'nfs': return True elif self.__nfs_data['fstype'] == 'nfs4': return True return False def compare_iostats(self, old_stats): """Return the difference between two sets of stats """ result = DeviceData() # copy self into result for key, value in self.__nfs_data.items(): result.__nfs_data[key] = value for key, value in self.__rpc_data.items(): result.__rpc_data[key] = value # compute the difference of each item in the list # note the copy loop above does not copy the lists, just # the reference to them. so we build new lists here # for the result object. for op in result.__rpc_data['ops']: try: result.__rpc_data[op] = list(map( difference, self.__rpc_data[op], old_stats.__rpc_data[op])) except KeyError: continue # update the remaining keys we care about result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] result.__rpc_data['backlogutil'] -= old_stats.__rpc_data['backlogutil'] for key in NfsEventCounters: result.__nfs_data[key] -= old_stats.__nfs_data[key] for key in NfsByteCounters: result.__nfs_data[key] -= old_stats.__nfs_data[key] return result def __print_data_cache_stats(self): """Print the data cache hit rate """ nfs_stats = self.__nfs_data app_bytes_read = float(nfs_stats['normalreadbytes']) if app_bytes_read != 0: client_bytes_read = float(nfs_stats['serverreadbytes'] - nfs_stats['directreadbytes']) ratio = ((app_bytes_read - client_bytes_read) * 100) / app_bytes_read print() print('app bytes: %f client bytes %f' % (app_bytes_read, client_bytes_read)) print('Data cache hit ratio: %4.2f%%' % ratio) def __print_attr_cache_stats(self, sample_time): """Print attribute cache efficiency stats """ nfs_stats = self.__nfs_data print() print('%d VFS opens' % (nfs_stats['vfsopen'])) print('%d inoderevalidates (forced GETATTRs)' % \ (nfs_stats['inoderevalidates'])) print('%d page cache invalidations' % \ (nfs_stats['datainvalidates'])) print('%d attribute cache invalidations' % \ (nfs_stats['attrinvalidates'])) def __print_dir_cache_stats(self, sample_time): """Print directory stats """ nfs_stats = self.__nfs_data lookup_ops = self.__rpc_data['LOOKUP'][0] readdir_ops = self.__rpc_data['READDIR'][0] if 'READDIRPLUS' in self.__rpc_data: readdir_ops += self.__rpc_data['READDIRPLUS'][0] dentry_revals = nfs_stats['dentryrevalidates'] opens = nfs_stats['vfsopen'] lookups = nfs_stats['vfslookup'] getdents = nfs_stats['vfsreaddir'] print() print('%d open operations (pathname lookups)' % opens) print('%d dentry revalidates and %d vfs lookup requests' % \ (dentry_revals, lookups)) print('resulted in %d LOOKUPs on the wire' % lookup_ops) print('%d vfs getdents calls resulted in %d READDIRs on the wire' % \ (getdents, readdir_ops)) def __print_page_stats(self, sample_time): """Print page cache stats """ nfs_stats = self.__nfs_data vfsreadpage = nfs_stats['vfsreadpage'] vfsreadpages = nfs_stats['vfsreadpages'] pages_read = nfs_stats['readpages'] vfswritepage = nfs_stats['vfswritepage'] vfswritepages = nfs_stats['vfswritepages'] pages_written = nfs_stats['writepages'] print() print('%d nfs_readpage() calls read %d pages' % \ (vfsreadpage, vfsreadpage)) print('%d nfs_readpages() calls read %d pages' % \ (vfsreadpages, pages_read - vfsreadpage)) if vfsreadpages != 0: print('(%.1f pages per call)' % \ (float(pages_read - vfsreadpage) / vfsreadpages)) else: print() print() print('%d nfs_updatepage() calls' % nfs_stats['vfsupdatepage']) print('%d nfs_writepage() calls wrote %d pages' % \ (vfswritepage, vfswritepage)) print('%d nfs_writepages() calls wrote %d pages' % \ (vfswritepages, pages_written - vfswritepage)) if (vfswritepages) != 0: print('(%.1f pages per call)' % \ (float(pages_written - vfswritepage) / vfswritepages)) else: print() congestionwaits = nfs_stats['congestionwait'] if congestionwaits != 0: print() print('%d congestion waits' % congestionwaits) def __print_rpc_op_stats(self, op, sample_time): """Print generic stats for one RPC op """ if op not in self.__rpc_data: return rpc_stats = self.__rpc_data[op] ops = float(rpc_stats[0]) retrans = float(rpc_stats[1] - rpc_stats[0]) kilobytes = float(rpc_stats[3] + rpc_stats[4]) / 1024 queued_for = float(rpc_stats[5]) rtt = float(rpc_stats[6]) exe = float(rpc_stats[7]) if len(rpc_stats) >= 9: errs = float(rpc_stats[8]) # prevent floating point exceptions if ops != 0: kb_per_op = kilobytes / ops retrans_percent = (retrans * 100) / ops rtt_per_op = rtt / ops exe_per_op = exe / ops queued_for_per_op = queued_for / ops if len(rpc_stats) >= 9: errs_percent = (errs * 100) / ops else: kb_per_op = 0.0 retrans_percent = 0.0 rtt_per_op = 0.0 exe_per_op = 0.0 queued_for_per_op = 0.0 if len(rpc_stats) >= 9: errs_percent = 0.0 op += ':' print(format(op.lower(), '<16s'), end='') print(format('ops/s', '>8s'), end='') print(format('kB/s', '>16s'), end='') print(format('kB/op', '>16s'), end='') print(format('retrans', '>16s'), end='') print(format('avg RTT (ms)', '>16s'), end='') print(format('avg exe (ms)', '>16s'), end='') print(format('avg queue (ms)', '>16s'), end='') if len(rpc_stats) >= 9: print(format('errors', '>16s'), end='') print() print(format((ops / sample_time), '>24.3f'), end='') print(format((kilobytes / sample_time), '>16.3f'), end='') print(format(kb_per_op, '>16.3f'), end='') retransmits = '{0:>10.0f} ({1:>3.1f}%)'.format(retrans, retrans_percent).strip() print(format(retransmits, '>16'), end='') print(format(rtt_per_op, '>16.3f'), end='') print(format(exe_per_op, '>16.3f'), end='') print(format(queued_for_per_op, '>16.3f'), end='') if len(rpc_stats) >= 9: errors = '{0:>10.0f} ({1:>3.1f}%)'.format(errs, errs_percent).strip() print(format(errors, '>16'), end='') print() def ops(self, sample_time): sends = float(self.__rpc_data['rpcsends']) if sample_time == 0: sample_time = float(self.__nfs_data['age']) if sample_time == 0: sample_time = 1; return (sends / sample_time) def display_iostats(self, sample_time, which): """Display NFS and RPC stats in an iostat-like way """ sends = float(self.__rpc_data['rpcsends']) if sample_time == 0: sample_time = float(self.__nfs_data['age']) # sample_time could still be zero if the export was just mounted. # Set it to 1 to avoid divide by zero errors in this case since we'll # likely still have relevant mount statistics to show. # if sample_time == 0: sample_time = 1; if sends != 0: backlog = (float(self.__rpc_data['backlogutil']) / sends) / sample_time else: backlog = 0.0 print() print('%s mounted on %s:' % \ (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) print() print(format('ops/s', '>16') + format('rpc bklog', '>16')) print(format((sends / sample_time), '>16.3f'), end='') print(format(backlog, '>16.3f')) print() if which == 0: self.__print_rpc_op_stats('READ', sample_time) self.__print_rpc_op_stats('WRITE', sample_time) elif which == 1: self.__print_rpc_op_stats('GETATTR', sample_time) self.__print_rpc_op_stats('ACCESS', sample_time) self.__print_attr_cache_stats(sample_time) elif which == 2: self.__print_rpc_op_stats('LOOKUP', sample_time) self.__print_rpc_op_stats('READDIR', sample_time) if 'READDIRPLUS' in self.__rpc_data: self.__print_rpc_op_stats('READDIRPLUS', sample_time) self.__print_dir_cache_stats(sample_time) elif which == 3: self.__print_rpc_op_stats('READ', sample_time) self.__print_rpc_op_stats('WRITE', sample_time) self.__print_page_stats(sample_time) sys.stdout.flush() # # Functions # def parse_stats_file(filename): """pop the contents of a mountstats file into a dictionary, keyed by mount point. each value object is a list of the lines in the mountstats file corresponding to the mount point named in the key. """ ms_dict = dict() key = '' f = open(filename) for line in f.readlines(): words = line.split() if len(words) == 0: continue if line.startswith("no device mounted"): continue if words[0] == 'device': key = words[4] new = [ line.strip() ] elif 'nfs' in words or 'nfs4' in words: key = words[3] new = [ line.strip() ] else: new += [ line.strip() ] ms_dict[key] = new f.close return ms_dict def print_iostat_summary(old, new, devices, time, options): stats = {} diff_stats = {} devicelist = [] if old: # Trim device list to only include intersection of old and new data, # this addresses umounts due to autofs mountpoints for device in devices: if "fstype autofs" not in str(old[device]): devicelist.append(device) else: devicelist = devices for device in devicelist: stats[device] = DeviceData() stats[device].parse_stats(new[device]) if old: old_stats = DeviceData() old_stats.parse_stats(old[device]) diff_stats[device] = stats[device].compare_iostats(old_stats) if options.sort: if old: # We now have compared data and can print a comparison # ordered by mountpoint ops per second devicelist.sort(key=lambda x: diff_stats[x].ops(time), reverse=True) else: # First iteration, just sort by newly parsed ops/s devicelist.sort(key=lambda x: stats[x].ops(time), reverse=True) count = 1 for device in devicelist: if old: diff_stats[device].display_iostats(time, options.which) else: stats[device].display_iostats(time, options.which) count += 1 if (count > options.list): return def list_nfs_mounts(givenlist, mountstats): """return a list of NFS mounts given a list to validate or return a full list if the given list is empty - may return an empty list if none found """ devicelist = [] if len(givenlist) > 0: for device in givenlist: stats = DeviceData() stats.parse_stats(mountstats[device]) if stats.is_nfs_mountpoint(): devicelist += [device] else: for device, descr in mountstats.items(): stats = DeviceData() stats.parse_stats(descr) if stats.is_nfs_mountpoint(): devicelist += [device] return devicelist def iostat_command(name): """iostat-like command for NFS mount points """ mountstats = parse_stats_file('/proc/self/mountstats') devices = [] origdevices = [] interval_seen = False count_seen = False mydescription= """ Sample iostat-like program to display NFS client per-mount' statistics. The <interval> parameter specifies the amount of time in seconds between each report. The first report contains statistics for the time since each file system was mounted. Each subsequent report contains statistics collected during the interval since the previous report. If the <count> parameter is specified, the value of <count> determines the number of reports generated at <interval> seconds apart. If the interval parameter is specified without the <count> parameter, the command generates reports continuously. If one or more <mount point> names are specified, statistics for only these mount points will be displayed. Otherwise, all NFS mount points on the client are listed. """ parser = OptionParser( usage="usage: %prog [ <interval> [ <count> ] ] [ <options> ] [ <mount point> ]", description=mydescription, version='version %s' % Iostats_version) parser.set_defaults(which=0, sort=False, list=sys.maxsize) statgroup = OptionGroup(parser, "Statistics Options", 'File I/O is displayed unless one of the following is specified:') statgroup.add_option('-a', '--attr', action="store_const", dest="which", const=1, help='displays statistics related to the attribute cache') statgroup.add_option('-d', '--dir', action="store_const", dest="which", const=2, help='displays statistics related to directory operations') statgroup.add_option('-p', '--page', action="store_const", dest="which", const=3, help='displays statistics related to the page cache') parser.add_option_group(statgroup) displaygroup = OptionGroup(parser, "Display Options", 'Options affecting display format:') displaygroup.add_option('-s', '--sort', action="store_true", dest="sort", help="Sort NFS mount points by ops/second") displaygroup.add_option('-l','--list', action="store", type="int", dest="list", help="only print stats for first LIST mount points") parser.add_option_group(displaygroup) (options, args) = parser.parse_args(sys.argv) for arg in args: if arg == sys.argv[0]: continue if arg in mountstats: origdevices += [arg] elif not interval_seen: try: interval = int(arg) except: print('Illegal <interval> value %s' % arg) return if interval > 0: interval_seen = True else: print('Illegal <interval> value %s' % arg) return elif not count_seen: try: count = int(arg) except: print('Ilegal <count> value %s' % arg) return if count > 0: count_seen = True else: print('Illegal <count> value %s' % arg) return # make certain devices contains only NFS mount points devices = list_nfs_mounts(origdevices, mountstats) if len(devices) == 0: print('No NFS mount points were found') return old_mountstats = None sample_time = 0.0 if not interval_seen: print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) return if count_seen: while count != 0: print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) old_mountstats = mountstats time.sleep(interval) sample_time = interval mountstats = parse_stats_file('/proc/self/mountstats') # automount mountpoints add and drop, if automount is involved # we need to recheck the devices list when reparsing devices = list_nfs_mounts(origdevices,mountstats) if len(devices) == 0: print('No NFS mount points were found') return count -= 1 else: while True: print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) old_mountstats = mountstats time.sleep(interval) sample_time = interval mountstats = parse_stats_file('/proc/self/mountstats') # automount mountpoints add and drop, if automount is involved # we need to recheck the devices list when reparsing devices = list_nfs_mounts(origdevices,mountstats) if len(devices) == 0: print('No NFS mount points were found') return # # Main # prog = os.path.basename(sys.argv[0]) try: iostat_command(prog) except KeyboardInterrupt: print('Caught ^C... exiting') sys.exit(1) sys.exit(0)