Linux host2.homegym.sg 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64
Apache
Server IP : 159.223.38.192 & Your IP : 159.223.38.192
Domains : 20 Domain
User : eachadea
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Lock Shell
Lock File++
Readme
/
usr /
sbin /
Delete
Unzip
Name
Size
Permission
Date
Action
NetworkManager
3.41
MB
-rwxr-xr-x
2025-08-26 09:47
a3mnt
832
B
-rwxr-xr-x
2025-10-16 17:25
aakore
481
B
-rwxr-xr-x
2025-10-16 17:25
accessdb
12.59
KB
-rwxr-xr-x
2021-10-08 13:04
acp-update-controller
820
B
-rwxr-xr-x
2025-10-16 17:25
acrocmd
822
B
-rwxr-xr-x
2025-10-16 17:25
acronis_encrypt
818
B
-rwxr-xr-x
2025-10-16 17:26
acronis_mms
1.29
KB
-rwxr-xr-x
2025-10-16 17:25
acronis_schedinfo
435
B
-rwxr-xr-x
2025-10-16 17:26
acronis_schedule
818
B
-rwxr-xr-x
2025-10-16 17:25
acropsh
804
B
-rwxr-xr-x
2025-10-16 17:25
addgnupghome
3
KB
-rwxr-xr-x
2018-12-11 07:44
addpart
24.86
KB
-rwxr-xr-x
2024-04-06 13:02
adduser
148.17
KB
-rwxr-xr-x
2024-04-06 14:00
agetty
62.38
KB
-rwxr-xr-x
2024-04-06 13:02
alternatives
36.66
KB
-rwxr-xr-x
2023-10-14 22:48
anacron
40.99
KB
-rwxr-xr-x
2024-04-06 11:40
apachectl
4.52
KB
-rwxr-xr-x
2025-10-15 20:35
applygnupgdefaults
2.17
KB
-rwxr-xr-x
2017-12-18 12:28
arp
64.71
KB
-rwxr-xr-x
2020-08-30 17:47
arpd
109.52
KB
-rwxr-xr-x
2024-05-23 08:36
arping
28.74
KB
-rwxr-xr-x
2023-10-14 17:19
atd
32.63
KB
-rwxr-xr-x
2022-10-10 10:23
atrun
67
B
-rwxr-xr-x
2022-10-10 10:23
auditctl
45.04
KB
-rwxr-xr-x
2025-07-15 09:41
auditd
151.73
KB
-rwxr-xr-x
2025-07-15 09:41
augenrules
4.04
KB
-rwxr-xr-x
2025-07-15 09:41
aureport
122.35
KB
-rwxr-xr-x
2025-07-15 09:41
ausearch
130.36
KB
-rwxr-xr-x
2025-07-15 09:41
autrace
16.54
KB
-rwxr-x---
2025-07-15 09:41
avcstat
16.4
KB
-rwxr-xr-x
2025-03-11 12:11
badblocks
32.59
KB
-rwxr-xr-x
2025-10-07 07:08
biosdecode
21.45
KB
-rwxr-xr-x
2024-04-06 13:04
blkdeactivate
15.97
KB
-r-xr-xr-x
2025-07-15 09:03
blkdiscard
29.05
KB
-rwxr-xr-x
2024-04-06 13:02
blkid
98.66
KB
-rwxr-xr-x
2024-04-06 13:02
blkmapd
53.47
KB
-rwxr-xr-x
2025-06-04 10:54
blkzone
49.74
KB
-rwxr-xr-x
2024-04-06 13:02
blockdev
41.3
KB
-rwxr-xr-x
2024-04-06 13:02
bridge
158.25
KB
-rwxr-xr-x
2024-05-23 08:36
capsh
32.44
KB
-rwxr-xr-x
2024-01-10 14:34
cfdisk
98.4
KB
-rwxr-xr-x
2024-04-06 13:02
cgdisk
206.55
KB
-rwxr-xr-x
2022-10-12 10:53
chcpu
28.84
KB
-rwxr-xr-x
2024-04-06 13:02
chgpasswd
69.69
KB
-rwxr-xr-x
2024-04-06 14:00
chkconfig
45.11
KB
-rwxr-xr-x
2023-10-14 22:48
chpasswd
61.42
KB
-rwxr-xr-x
2024-04-06 14:00
chronyd
375.66
KB
-rwxr-xr-x
2024-11-05 07:47
chroot
41.52
KB
-rwxr-xr-x
2023-04-01 08:44
clock
65.22
KB
-rwxr-xr-x
2024-04-06 13:02
clockdiff
20.43
KB
-rwxr-xr-x
2023-10-14 17:19
consoletype
11.85
KB
-rwxr-xr-x
2022-10-08 11:08
convertquota
78.68
KB
-rwxr-xr-x
2021-10-09 07:08
cracklib-check
13.05
KB
-rwxr-xr-x
2019-10-12 00:47
cracklib-format
251
B
-rwxr-xr-x
2019-10-12 00:47
cracklib-packer
13.05
KB
-rwxr-xr-x
2019-10-12 00:47
cracklib-unpacker
9.03
KB
-rwxr-xr-x
2019-10-12 00:47
create-cracklib-dict
990
B
-rwxr-xr-x
2019-10-12 00:47
crond
73.94
KB
-rwxr-xr-x
2024-04-06 11:40
csf
245.1
KB
-rwx------
2025-02-28 14:06
ctrlaltdel
24.79
KB
-rwxr-xr-x
2024-04-06 13:02
ctstat
25.33
KB
-rwxr-xr-x
2024-05-23 08:36
dcb
155.04
KB
-rwxr-xr-x
2024-05-23 08:36
ddns-confgen
20.46
KB
-rwxr-xr-x
2025-02-20 09:05
debugfs
231.63
KB
-rwxr-xr-x
2025-10-07 07:08
delpart
24.86
KB
-rwxr-xr-x
2024-04-06 13:02
depmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
devlink
215.87
KB
-rwxr-xr-x
2024-05-23 08:36
dhclient
453.68
KB
-rwxr-xr-x
2024-05-22 17:58
dhclient-script
32.86
KB
-rwxr-xr-x
2024-05-22 16:12
dkms
117.1
KB
-rwxr-xr-x
2025-07-29 05:51
dmfilemapd
24.55
KB
-r-xr-xr-x
2025-07-15 09:03
dmidecode
141.8
KB
-rwxr-xr-x
2024-04-06 13:04
dmsetup
158.64
KB
-r-xr-xr-x
2025-07-15 09:03
dmstats
158.64
KB
-r-xr-xr-x
2025-07-15 09:03
dnssec-checkds
936
B
-rwxr-xr-x
2025-02-20 09:05
dnssec-coverage
938
B
-rwxr-xr-x
2025-02-20 09:05
dnssec-dsfromkey
60.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-importkey
60.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-keyfromlabel
64.76
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-keygen
72.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-keymgr
934
B
-rwxr-xr-x
2025-02-20 09:05
dnssec-revoke
56.74
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-settime
60.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-signzone
117.2
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-verify
52.84
KB
-rwxr-xr-x
2025-02-20 09:05
dovecot
137.48
KB
-rwxr-xr-x
2025-02-25 20:04
dovecot_cpshutdown
3.27
KB
-rwxr-xr-x
2025-02-25 20:00
dpkg-fsys-usrunmess
12.11
KB
-rwxr-xr-x
2021-12-15 12:46
dumpe2fs
32.52
KB
-rwxr-xr-x
2025-10-07 07:08
e2freefrag
16.42
KB
-rwxr-xr-x
2025-10-07 07:08
e2fsck
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
e2image
36.61
KB
-rwxr-xr-x
2025-10-07 07:08
e2label
110.63
KB
-rwxr-xr-x
2025-10-07 07:08
e2mmpstatus
32.52
KB
-rwxr-xr-x
2025-10-07 07:08
e2undo
20.38
KB
-rwxr-xr-x
2025-10-07 07:08
e4crypt
24.55
KB
-rwxr-xr-x
2025-10-07 07:08
e4defrag
28.49
KB
-rwxr-xr-x
2025-10-07 07:08
edquota
91.24
KB
-rwxr-xr-x
2021-10-09 07:08
ether-wake
73.99
KB
-rwxr-xr-x
2020-08-30 17:47
ethtool
557.79
KB
-rwxr-xr-x
2022-10-08 17:27
exicyclog
11.1
KB
-rwxr-xr-x
2025-05-12 17:54
exigrep
10.52
KB
-rwxr-xr-x
2025-05-12 17:54
exim
1.49
MB
-rwsr-xr-x
2025-05-12 17:54
exim_checkaccess
4.83
KB
-rwxr-xr-x
2025-05-12 17:54
exim_dbmbuild
23.23
KB
-rwxr-xr-x
2025-05-12 17:54
exim_dumpdb
38.02
KB
-rwxr-xr-x
2025-05-12 17:54
exim_fixdb
47.56
KB
-rwxr-xr-x
2025-05-12 17:54
exim_lock
26.59
KB
-rwxr-xr-x
2025-05-12 17:54
exim_tidydb
42.35
KB
-rwxr-xr-x
2025-05-12 17:54
eximstats
148.26
KB
-rwxr-xr-x
2025-05-12 17:54
exinext
7.14
KB
-rwxr-xr-x
2025-05-12 17:54
exiqgrep
5.66
KB
-rwxr-xr-x
2025-05-12 17:54
exiqsumm
5.32
KB
-rwxr-xr-x
2025-05-12 17:54
exiwhat
4.42
KB
-rwxr-xr-x
2025-05-12 17:54
exportfs
82.38
KB
-rwxr-xr-x
2025-06-04 10:54
faillock
20.52
KB
-rwxr-xr-x
2025-08-26 08:59
fcgistarter
17.11
KB
-rwxr-xr-x
2025-10-15 20:39
fdformat
33.17
KB
-rwxr-xr-x
2024-04-06 13:02
fdisk
130.92
KB
-rwxr-xr-x
2024-04-06 13:02
filefrag
16.46
KB
-rwxr-xr-x
2025-10-07 07:08
findfs
12.37
KB
-rwxr-xr-x
2024-04-06 13:02
fix-info-dir
7.84
KB
-rwxr-xr-x
2022-04-18 17:09
fixfiles
10.48
KB
-rwxr-xr-x
2024-07-02 21:04
fixparts
74.91
KB
-rwxr-xr-x
2022-10-12 10:53
fsck
53.47
KB
-rwxr-xr-x
2024-04-06 13:02
fsck.cramfs
41.4
KB
-rwxr-xr-x
2024-04-06 13:02
fsck.ext2
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
fsck.ext3
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
fsck.ext4
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
fsck.minix
98.74
KB
-rwxr-xr-x
2024-04-06 13:02
fsck.xfs
1.92
KB
-rwxr-xr-x
2023-10-15 05:10
fsfreeze
16.38
KB
-rwxr-xr-x
2024-04-06 13:02
fstrim
49.6
KB
-rwxr-xr-x
2024-04-06 13:02
fuse2fs
70.39
KB
-rwxr-xr-x
2025-10-07 07:08
fuser
38.14
KB
-rwxr-xr-x
2020-11-06 14:24
g13-syshelp
189.71
KB
-rwxr-xr-x
2022-09-13 10:15
gdisk
214.46
KB
-rwxr-xr-x
2022-10-12 10:53
genhomedircon
29.27
KB
-rwxr-xr-x
2024-07-02 21:04
genhostid
11.85
KB
-rwxr-xr-x
2022-10-08 11:08
genl
121.41
KB
-rwxr-xr-x
2024-05-23 08:36
genrandom
12.38
KB
-rwxr-xr-x
2025-02-20 09:05
getcap
12.34
KB
-rwxr-xr-x
2024-01-10 14:34
getenforce
7.84
KB
-rwxr-xr-x
2025-03-11 12:11
getpcaps
12.27
KB
-rwxr-xr-x
2024-01-10 14:34
getsebool
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
groupadd
95.34
KB
-rwxr-xr-x
2024-04-06 14:00
groupdel
91.09
KB
-rwxr-xr-x
2024-04-06 14:00
groupmems
61.48
KB
-rwxr-xr-x
2024-04-06 14:00
groupmod
99.37
KB
-rwxr-xr-x
2024-04-06 14:00
grpck
61.48
KB
-rwxr-xr-x
2024-04-06 14:00
grpconv
57.26
KB
-rwxr-xr-x
2024-04-06 14:00
grpunconv
57.25
KB
-rwxr-xr-x
2024-04-06 14:00
grub2-bios-setup
1.16
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-get-kernel-settings
2.68
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-install
1.44
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-macbless
1.14
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkconfig
8.68
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-ofpathname
242.26
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-probe
1.16
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-reboot
3.99
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-rpm-sort
279.16
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-set-bootflag
16.34
KB
-rwsr-xr-x
2025-10-07 08:06
grub2-set-default
3.45
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-set-password
3.05
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-setpassword
3.05
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-sparc64-setup
1.16
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-switch-to-blscfg
8.6
KB
-rwxr-xr-x
2025-10-07 08:06
grubby
260
B
-rwxr-xr-x
2024-04-06 13:02
gss-server
24.62
KB
-rwxr-xr-x
2025-06-03 02:06
gssproxy
132.08
KB
-rwxr-xr-x
2022-10-08 08:02
halt
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
hardlink
17.09
KB
-rwxr-xr-x
2019-10-15 21:49
hdparm
131.91
KB
-rwxr-xr-x
2021-10-08 19:47
htcacheclean
44.36
KB
-rwxr-xr-x
2025-10-15 20:39
httpd
990.57
KB
-rwxr-xr-x
2025-10-15 20:39
hwclock
65.22
KB
-rwxr-xr-x
2024-04-06 13:02
iconvconfig
33.05
KB
-rwxr-xr-x
2025-08-05 14:12
ifconfig
80.86
KB
-rwxr-xr-x
2020-08-30 17:47
ifdown
2.07
KB
-rwxr-xr-x
2022-08-10 13:03
ifenslave
24.95
KB
-rwxr-xr-x
2023-10-14 17:19
ifstat
117.67
KB
-rwxr-xr-x
2024-05-23 08:36
ifup
5.33
KB
-rwxr-xr-x
2022-08-10 13:03
imunify-notifier
9.82
MB
-rwxr-xr-x
2024-10-25 12:14
init
1.53
MB
-rwxr-xr-x
2025-04-22 01:58
insmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
install-info
50.23
KB
-rwxr-xr-x
2022-04-18 17:09
installkernel
323
B
-rwxr-xr-x
2024-04-06 13:02
intel_sdsi
15.62
KB
-rwxr-xr-x
2025-10-27 15:46
ip
693.3
KB
-rwxr-xr-x
2024-05-23 08:36
ip6tables
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-apply
6.89
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-restore
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-restore-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-save
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ipmaddr
21
KB
-rwxr-xr-x
2020-08-30 17:47
iptables
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-apply
6.89
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-restore
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-restore-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-save
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptunnel
25
KB
-rwxr-xr-x
2020-08-30 17:47
irqbalance
62.28
KB
-rwxr-xr-x
2023-10-14 17:57
irqbalance-ui
41.29
KB
-rwxr-xr-x
2023-10-14 17:57
isc-hmac-fixup
11.85
KB
-rwxr-xr-x
2025-02-20 09:05
kexec
194.98
KB
-rwxr-xr-x
2024-09-24 08:36
key.dns_resolver
24.52
KB
-rwxr-xr-x
2021-10-08 13:50
kpartx
49.05
KB
-rwxr-xr-x
2025-04-22 01:55
lchage
16.41
KB
-rwxr-xr-x
2024-09-24 02:24
ldattach
32.99
KB
-rwxr-xr-x
2024-04-06 13:02
ldconfig
986.02
KB
-rwxr-xr-x
2025-08-05 14:12
lfd
382.45
KB
-rwx------
2025-02-28 14:06
lgroupadd
11.88
KB
-rwxr-xr-x
2024-09-24 02:24
lgroupdel
11.88
KB
-rwxr-xr-x
2024-09-24 02:24
lgroupmod
19.88
KB
-rwxr-xr-x
2024-09-24 02:24
lid
16.27
KB
-rwxr-xr-x
2024-09-24 02:24
lnewusers
19.87
KB
-rwxr-xr-x
2024-09-24 02:24
lnstat
25.33
KB
-rwxr-xr-x
2024-05-23 08:36
load_policy
12.28
KB
-rwxr-xr-x
2024-07-02 21:04
logrotate
93.03
KB
-rwxr-xr-x
2023-04-02 00:29
logsave
16.41
KB
-rwxr-xr-x
2025-10-07 07:08
losetup
90.59
KB
-rwxr-xr-x
2024-04-06 13:02
lpasswd
20.35
KB
-rwxr-xr-x
2024-09-24 02:24
lshw
969.55
KB
-rwxr-xr-x
2025-10-07 08:50
lsmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
luseradd
19.88
KB
-rwxr-xr-x
2024-09-24 02:24
luserdel
15.88
KB
-rwxr-xr-x
2024-09-24 02:24
lusermod
19.88
KB
-rwxr-xr-x
2024-09-24 02:24
lwresd
840.86
KB
-rwxr-xr-x
2025-02-20 09:05
makedumpfile
425.19
KB
-rwxr-xr-x
2024-09-24 08:36
matchpathcon
12.37
KB
-rwxr-xr-x
2025-03-11 12:11
mediabuilder
826
B
-rwxr-xr-x
2025-10-16 17:13
mii-diag
25.4
KB
-rwxr-xr-x
2020-08-30 17:47
mii-tool
21.03
KB
-rwxr-xr-x
2020-08-30 17:47
mkdict
251
B
-rwxr-xr-x
2019-10-12 00:47
mkdumprd
12.68
KB
-rwxr-xr-x
2024-09-24 08:36
mke2fs
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfadumprd
2.23
KB
-rwxr-xr-x
2024-09-24 08:36
mkfs
16.47
KB
-rwxr-xr-x
2024-04-06 13:02
mkfs.cramfs
41.26
KB
-rwxr-xr-x
2024-04-06 13:02
mkfs.ext2
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfs.ext3
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfs.ext4
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfs.minix
86.55
KB
-rwxr-xr-x
2024-04-06 13:02
mkfs.xfs
475.98
KB
-rwxr-xr-x
2023-10-15 05:11
mkhomedir_helper
24.43
KB
-rwxr-xr-x
2025-08-26 08:59
mklost+found
11.86
KB
-rwxr-xr-x
2025-10-07 07:08
mksquashfs
186.83
KB
-rwxr-xr-x
2024-04-06 14:17
mkswap
86.47
KB
-rwxr-xr-x
2024-04-06 13:02
modinfo
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
modprobe
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
modsec-sdbm-util
25.83
KB
-rwxr-x---
2025-08-19 20:11
mount.nfs
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
mount.nfs4
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
mountstats
42.22
KB
-rwxr-xr-x
2025-06-04 10:53
mysqld
62.62
MB
-rwxr-xr-x
2024-06-13 12:01
named
840.86
KB
-rwxr-xr-x
2025-02-20 09:05
named-checkconf
36.77
KB
-rwxr-xr-x
2025-02-20 09:05
named-checkzone
36.63
KB
-rwxr-xr-x
2025-02-20 09:05
named-compilezone
36.63
KB
-rwxr-xr-x
2025-02-20 09:05
named-journalprint
11.85
KB
-rwxr-xr-x
2025-02-20 09:05
nameif
16.98
KB
-rwxr-xr-x
2020-08-30 17:47
newusers
107.23
KB
-rwxr-xr-x
2024-04-06 14:00
nfsconf
37.48
KB
-rwxr-xr-x
2025-06-04 10:54
nfsconvert
13.03
KB
-rwxr-xr-x
2025-06-04 10:54
nfsdcld
65.87
KB
-rwxr-xr-x
2025-06-04 10:54
nfsdclddb
10
KB
-rwxr-xr-x
2025-06-04 10:53
nfsdclnts
9.02
KB
-rwxr-xr-x
2025-06-04 10:53
nfsdcltrack
49.78
KB
-rwxr-xr-x
2025-06-04 10:54
nfsidmap
45.36
KB
-rwxr-xr-x
2025-06-04 10:54
nfsiostat
23.36
KB
-rwxr-xr-x
2025-06-04 10:53
nfsref
65.8
KB
-rwxr-xr-x
2025-06-04 10:54
nfsstat
35.52
KB
-rwxr-xr-x
2025-06-04 10:54
nft
24.41
KB
-rwxr-xr-x
2025-01-28 01:24
nologin
11.87
KB
-rwxr-xr-x
2024-04-06 13:02
nscd
160.68
KB
-rwxr-xr-x
2025-08-05 14:12
nsec3hash
12.29
KB
-rwxr-xr-x
2025-02-20 09:05
nstat
113.57
KB
-rwxr-xr-x
2024-05-23 08:36
ownership
12.4
KB
-rwxr-xr-x
2024-04-06 13:04
packer
13.05
KB
-rwxr-xr-x
2019-10-12 00:47
pam_console_apply
45.2
KB
-rwxr-xr-x
2025-08-26 08:59
pam_timestamp_check
11.87
KB
-rwsr-xr-x
2025-08-26 08:59
paperconfig
4.07
KB
-rwxr-xr-x
2019-10-12 20:09
parted
85.6
KB
-rwxr-xr-x
2021-10-08 15:43
partprobe
16.39
KB
-rwxr-xr-x
2021-10-08 15:43
partx
94.5
KB
-rwxr-xr-x
2024-04-06 13:02
pdns_server
6.24
MB
-rwxr-xr-x
2025-05-12 18:42
pidof
16.7
KB
-rwxr-xr-x
2023-10-14 20:31
ping
66.13
KB
-rwxr-xr-x
2023-10-14 17:19
ping6
66.13
KB
-rwxr-xr-x
2023-10-14 17:19
pivot_root
12.38
KB
-rwxr-xr-x
2024-04-06 13:02
plipconfig
12.71
KB
-rwxr-xr-x
2020-08-30 17:47
pluginviewer
20.57
KB
-rwxr-xr-x
2022-02-23 20:13
poweroff
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
pure-authd
19.23
KB
-rwxr-xr-x
2024-10-30 12:42
pure-certd
19.13
KB
-rwxr-xr-x
2024-10-30 12:42
pure-config.pl
4.64
KB
-rwxr-xr-x
2024-10-30 12:41
pure-ftpd
182.06
KB
-rwxr-xr-x
2024-10-30 12:42
pure-ftpwho
26.82
KB
-rwxr-xr-x
2024-10-30 12:42
pure-mrtginfo
11.16
KB
-rwxr-xr-x
2024-10-30 12:42
pure-quotacheck
18.81
KB
-rwxr-xr-x
2024-10-30 12:42
pure-uploadscript
19.07
KB
-rwxr-xr-x
2024-10-30 12:42
pwck
57.27
KB
-rwxr-xr-x
2024-04-06 14:00
pwconv
53.1
KB
-rwxr-xr-x
2024-04-06 14:00
pwhistory_helper
20.44
KB
-rwxr-xr-x
2025-08-26 08:59
pwunconv
53.13
KB
-rwxr-xr-x
2024-04-06 14:00
quot
78.67
KB
-rwxr-xr-x
2021-10-09 07:08
quotacheck
115.75
KB
-rwxr-xr-x
2021-10-09 07:08
quotaoff
83.16
KB
-rwxr-xr-x
2021-10-09 07:08
quotaon
83.16
KB
-rwxr-xr-x
2021-10-09 07:08
quotastats
16.54
KB
-rwxr-xr-x
2021-10-09 07:08
rdisc
24.55
KB
-rwxr-xr-x
2023-10-14 17:19
rdma
187.38
KB
-rwxr-xr-x
2024-05-23 08:36
readprofile
20.55
KB
-rwxr-xr-x
2024-04-06 13:02
reboot
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
repquota
83.24
KB
-rwxr-xr-x
2021-10-09 07:08
request-key
24.38
KB
-rwxr-xr-x
2021-10-08 13:50
resize2fs
64.91
KB
-rwxr-xr-x
2025-10-07 07:08
resizepart
41.56
KB
-rwxr-xr-x
2024-04-06 13:02
resolvconf
195.74
KB
-rwxr-xr-x
2025-04-22 01:58
restorecon
20.53
KB
-rwxr-xr-x
2024-07-02 21:04
restorecon_xattr
16.41
KB
-rwxr-xr-x
2024-07-02 21:04
rfkill
53.46
KB
-rwxr-xr-x
2024-04-06 13:02
rmmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
rndc
36.53
KB
-rwxr-xr-x
2025-02-20 09:05
rndc-confgen
20.45
KB
-rwxr-xr-x
2025-02-20 09:05
rotatelogs
30.51
KB
-rwxr-xr-x
2025-10-15 20:39
route
67.63
KB
-rwxr-xr-x
2020-08-30 17:47
rpc.gssd
106.55
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.idmapd
61.73
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.mountd
158.92
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.nfsd
49.91
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.statd
103.29
KB
-rwxr-xr-x
2025-06-04 10:54
rpcbind
61.55
KB
-rwxr-xr-x
2022-10-12 11:00
rpcctl
9.41
KB
-rwxr-xr-x
2025-06-04 10:53
rpcdebug
19.38
KB
-rwxr-xr-x
2025-06-04 10:54
rpcinfo
32.64
KB
-rwxr-xr-x
2022-10-12 11:00
rsyslogd
724.73
KB
-rwxr-xr-x
2024-11-05 02:34
rtacct
46.94
KB
-rwxr-xr-x
2024-05-23 08:36
rtcwake
49.31
KB
-rwxr-xr-x
2024-04-06 13:02
rtmon
117.27
KB
-rwxr-xr-x
2024-05-23 08:36
rtstat
25.33
KB
-rwxr-xr-x
2024-05-23 08:36
runlevel
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
runq
1.49
MB
-rwsr-xr-x
2025-05-12 17:54
runuser
48.99
KB
-rwxr-xr-x
2024-04-06 13:02
sasl2-shared-mechlist
12.19
KB
-rwxr-xr-x
2022-02-23 20:13
saslauthd
94.42
KB
-rwxr-xr-x
2022-02-23 20:13
sasldblistusers2
20.77
KB
-rwxr-xr-x
2022-02-23 20:13
saslpasswd2
16.42
KB
-rwxr-xr-x
2022-02-23 20:13
schedmgr
818
B
-rwxr-xr-x
2025-10-16 17:25
sedispatch
20.52
KB
-rwxr-xr-x
2024-04-06 13:44
sefcontext_compile
65.35
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_digest
12.28
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_lookup
12.27
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_lookup_best_match
11.89
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_partial_match
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
selinux_check_access
12.36
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxconlist
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxdefcon
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxenabled
7.84
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxexeccon
11.86
KB
-rwxr-xr-x
2025-03-11 12:11
semanage
41.18
KB
-rwxr-xr-x
2024-07-02 21:08
semodule
29.27
KB
-rwxr-xr-x
2024-07-02 21:04
sendmail
16.91
KB
-rwxr-sr-x
2025-05-12 17:54
service
3.64
KB
-rwxr-xr-x
2022-08-10 13:03
sestatus
20.41
KB
-rwxr-xr-x
2024-07-02 21:04
setcap
16.27
KB
-rwxr-xr-x
2024-01-10 14:34
setenforce
12.27
KB
-rwxr-xr-x
2025-03-11 12:11
setfiles
20.53
KB
-rwxr-xr-x
2024-07-02 21:04
setquota
91.38
KB
-rwxr-xr-x
2021-10-09 07:08
setroubleshootd
3.34
KB
-rwxr-xr-x
2024-04-06 13:44
setsebool
16.38
KB
-rwxr-xr-x
2024-07-02 21:04
sfdisk
118.5
KB
-rwxr-xr-x
2024-04-06 13:02
sgdisk
198.05
KB
-rwxr-xr-x
2022-10-12 10:53
showmount
21.06
KB
-rwxr-xr-x
2025-06-04 10:54
shutdown
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
sim_server
11.87
KB
-rwxr-xr-x
2025-06-03 02:06
slattach
43.76
KB
-rwxr-xr-x
2020-08-30 17:47
sm-notify
78.14
KB
-rwxr-xr-x
2025-06-04 10:54
smartctl
907.08
KB
-rwxr-xr-x
2024-04-06 14:11
smartd
733.2
KB
-rwxr-xr-x
2024-04-06 14:11
snmpd
32.45
KB
-rwxr-xr-x
2025-10-07 09:19
snmptrapd
32.6
KB
-rwxr-xr-x
2025-10-07 09:19
sos
627
B
-rwxr-xr-x
2025-10-06 03:40
sos-collector
147
B
-rwxr-xr-x
2025-10-06 03:40
sosreport
140
B
-rwxr-xr-x
2025-10-06 03:40
ss
191.3
KB
-rwxr-xr-x
2024-05-23 08:36
sshd
869.75
KB
-rwxr-xr-x
2025-09-30 10:44
sss_cache
61.09
KB
-rwxr-xr-x
2025-06-05 19:42
sssd
73.01
KB
-rwxr-xr-x
2025-06-05 19:42
start-statd
838
B
-rwxr-xr-x
2018-09-06 18:09
start-stop-daemon
45.98
KB
-rwxr-xr-x
2021-12-15 12:46
suexec
25.3
KB
-rwsr-xr-x
2025-10-15 20:39
sulogin
49.24
KB
-rwxr-xr-x
2024-04-06 13:02
suphp
6.56
MB
-rwsr-x---
2025-10-15 20:46
swaplabel
16.5
KB
-rwxr-xr-x
2024-04-06 13:02
swapoff
20.74
KB
-rwxr-xr-x
2024-04-06 13:02
swapon
49.4
KB
-rwxr-xr-x
2024-04-06 13:02
switch_root
16.49
KB
-rwxr-xr-x
2024-04-06 13:02
sysctl
28.88
KB
-rwxr-xr-x
2023-10-14 20:31
syspurpose
415
B
-rwxr-xr-x
2025-07-15 09:13
tcpdump
1.01
MB
-rwxr-xr-x
2024-04-06 11:58
tcpslice
32.63
KB
-rwxr-xr-x
2024-04-06 11:58
tcsd
309.72
KB
-rwxr-xr-x
2024-04-06 12:42
telinit
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
testsaslauthd
16.66
KB
-rwxr-xr-x
2022-02-23 20:13
tibxread
828
B
-rwxr-xr-x
2025-10-16 17:25
timedatex
33.43
KB
-rwxr-xr-x
2019-10-16 17:24
tipc
163.07
KB
-rwxr-xr-x
2024-05-23 08:36
tmpwatch
35.47
KB
-rwxr-xr-x
2019-10-12 11:32
tracepath
20.44
KB
-rwxr-xr-x
2023-10-14 17:19
tracepath6
20.44
KB
-rwxr-xr-x
2023-10-14 17:19
trueimagemnt
850
B
-rwxr-xr-x
2025-10-16 17:25
tsig-keygen
20.46
KB
-rwxr-xr-x
2025-02-20 09:05
tune2fs
110.63
KB
-rwxr-xr-x
2025-10-07 07:08
tuned
3.88
KB
-rwxr-xr-x
2024-02-22 12:23
tuned-adm
6.5
KB
-rwxr-xr-x
2024-02-22 12:23
udevadm
424.59
KB
-rwxr-xr-x
2025-04-22 01:58
umount.nfs
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
umount.nfs4
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
unbound-anchor
57.34
KB
-rwxr-xr-x
2025-07-28 13:31
unix_chkpwd
36.86
KB
-rwsr-xr-x
2025-08-26 08:59
unix_update
36.87
KB
-rwx------
2025-08-26 08:59
unsquashfs
99.57
KB
-rwxr-xr-x
2024-04-06 14:17
update-alternatives
36.66
KB
-rwxr-xr-x
2023-10-14 22:48
update-smart-drivedb
14.44
KB
-rwxr-xr-x
2024-04-06 14:11
useradd
148.17
KB
-rwxr-xr-x
2024-04-06 14:00
userdel
107.29
KB
-rwxr-xr-x
2024-04-06 14:00
usermod
144.07
KB
-rwxr-xr-x
2024-04-06 14:00
usernetctl
12.4
KB
-rwxr-xr-x
2022-10-08 11:08
uuserver
15.88
KB
-rwxr-xr-x
2025-06-03 02:06
varnishd
1.61
MB
-rwxr-xr-x
2025-06-04 10:25
varnishreload
5.43
KB
-rwxr-xr-x
2025-06-04 10:25
vdpa
118.04
KB
-rwxr-xr-x
2024-05-23 08:36
vigr
68.05
KB
-rwxr-xr-x
2024-04-06 14:00
vipw
68.05
KB
-rwxr-xr-x
2024-04-06 14:00
virt-what
14.22
KB
-rwxr-xr-x
2023-10-14 20:52
visudo
239.28
KB
-rwxr-xr-x
2025-08-26 09:02
vmcore-dmesg
28.58
KB
-rwxr-xr-x
2024-09-24 08:36
vpddecode
16.47
KB
-rwxr-xr-x
2024-04-06 13:04
weak-modules
33.6
KB
-rwxr-xr-x
2024-04-08 09:18
whmapi0
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
whmapi1
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
whmlogin
2.33
KB
-rwxr-xr-x
2024-05-22 18:59
wipefs
41.11
KB
-rwxr-xr-x
2024-04-06 13:02
xfs_admin
1.38
KB
-rwxr-xr-x
2023-10-15 05:10
xfs_bmap
695
B
-rwxr-xr-x
2023-10-15 05:11
xfs_copy
434.59
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_db
760.47
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_estimate
12.39
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_freeze
800
B
-rwxr-xr-x
2023-10-15 05:11
xfs_fsr
53.41
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_growfs
422.48
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_info
1.26
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_io
188.28
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_logprint
454.7
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_mdrestore
410.09
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_metadump
782
B
-rwxr-xr-x
2023-10-15 05:10
xfs_mkfile
1.02
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_ncheck
685
B
-rwxr-xr-x
2023-10-15 05:10
xfs_quota
93.98
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_repair
715.24
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_rtcp
16.38
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_spaceman
45.42
KB
-rwxr-xr-x
2023-10-15 05:11
xqmstats
16.45
KB
-rwxr-xr-x
2021-10-09 07:08
xtables-monitor
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
xtables-nft-multi
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
zabbix_agentd
635.65
KB
-rwxr-xr-x
2025-01-27 10:11
zdump
20.57
KB
-rwxr-xr-x
2025-08-05 14:12
zic
52.83
KB
-rwxr-xr-x
2025-08-05 14:12
zramctl
99.09
KB
-rwxr-xr-x
2024-04-06 13:02
Save
Rename
#!/usr/libexec/platform-python # -*- 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 fstype(self): """Return the fstype for the mountpoint """ return self.__nfs_data['fstype'] 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): display_stats = {} if len(devices) == 0: print('No NFS mount points were found') return for device in devices: stats = DeviceData() stats.parse_stats(new[device]) if old and device in old: old_stats = DeviceData() old_stats.parse_stats(old[device]) if stats.fstype() == old_stats.fstype(): display_stats[device] = stats.compare_iostats(old_stats) else: # device is in old, but fstypes are different display_stats[device] = stats else: # device is only in new display_stats[device] = stats if options.sort: devices.sort(key=lambda x: display_stats[x].ops(time), reverse=True) count = 1 for device in devices: display_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: if device in mountstats: 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[1:]: 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 old_mountstats = None sample_time = 0.0 # make certain devices contains only NFS mount points devices = list_nfs_mounts(origdevices, mountstats) print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) if not interval_seen: return while True: if count_seen: count -= 1 if count == 0: break time.sleep(interval) old_mountstats = mountstats sample_time = interval mountstats = parse_stats_file('/proc/self/mountstats') # nfs mountpoints may appear or disappear, so we need to # recheck the devices list each time we parse mountstats devices = list_nfs_mounts(origdevices, mountstats) print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) # # Main # prog = os.path.basename(sys.argv[0]) try: iostat_command(prog) except KeyboardInterrupt: print('Caught ^C... exiting') sys.exit(1) sys.exit(0)