Linux server.thearyasamaj.org 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64
Apache
: 103.90.241.146 | : 216.73.216.222
Cant Read [ /etc/named.conf ]
5.6.40
ftpuser@mantra.thearyasamaj.org
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
bin /
[ HOME SHELL ]
Name
Size
Permission
Action
7za
41
B
-rwxr-xr-x
GET
15.84
KB
-rwxr-xr-x
HEAD
15.84
KB
-rwxr-xr-x
POST
15.84
KB
-rwxr-xr-x
[
53.57
KB
-rwxr-xr-x
ab
56.96
KB
-rwxr-xr-x
ac
33.07
KB
-rwxr-xr-x
aclocal
35.62
KB
-rwxr-xr-x
aclocal-1.16
35.62
KB
-rwxr-xr-x
acyclic
12.37
KB
-rwxr-xr-x
addr2line
33.28
KB
-rwxr-xr-x
alias
29
B
-rwxr-xr-x
appstream-compose
33.21
KB
-rwxr-xr-x
appstream-util
114.34
KB
-rwxr-xr-x
apropos
54.04
KB
-rwxr-xr-x
ar
61.95
KB
-rwxr-xr-x
arch
37.33
KB
-rwxr-xr-x
arpaname
11.81
KB
-rwxr-xr-x
as
889.89
KB
-rwxr-xr-x
aspell
159.5
KB
-rwxr-xr-x
at
57.33
KB
-rwsr-xr-x
atq
57.33
KB
-rwsr-xr-x
atrm
57.33
KB
-rwsr-xr-x
attr
13.06
KB
-rwxr-xr-x
audit2allow
14.85
KB
-rwxr-xr-x
audit2why
14.85
KB
-rwxr-xr-x
aulast
20.56
KB
-rwxr-xr-x
aulastlog
12.43
KB
-rwxr-xr-x
ausyscall
12.27
KB
-rwxr-xr-x
authselect
41.06
KB
-rwxr-xr-x
autoconf
14.42
KB
-rwxr-xr-x
autoheader
8.33
KB
-rwxr-xr-x
autom4te
31.43
KB
-rwxr-xr-x
automake
251.9
KB
-rwxr-xr-x
automake-1.16
251.9
KB
-rwxr-xr-x
autoreconf
20.57
KB
-rwxr-xr-x
autoscan
16.72
KB
-rwxr-xr-x
autoupdate
33.08
KB
-rwxr-xr-x
auvirt
32.71
KB
-rwxr-xr-x
awk
669.77
KB
-rwxr-xr-x
b2sum
57.68
KB
-rwxr-xr-x
base32
41.46
KB
-rwxr-xr-x
base64
41.48
KB
-rwxr-xr-x
basename
37.41
KB
-rwxr-xr-x
bash
1.1
MB
-rwxr-xr-x
bashbug
7.18
KB
-rwxr-xr-x
bashbug-64
7.18
KB
-rwxr-xr-x
batch
137
B
-rwxr-xr-x
bc
94.98
KB
-rwxr-xr-x
bcomps
20.59
KB
-rwxr-xr-x
bdftopcf
45.4
KB
-rwxr-xr-x
bg
26
B
-rwxr-xr-x
bison
437.72
KB
-rwxr-xr-x
blkiomon
30.51
KB
-rwxr-xr-x
blkparse
61.48
KB
-rwxr-xr-x
blkrawverify
18.7
KB
-rwxr-xr-x
blktrace
49.66
KB
-rwxr-xr-x
bmon
122.1
KB
-rwxr-xr-x
bno_plot.py
3.47
KB
-rwxr-xr-x
bond2team
22.74
KB
-rwxr-xr-x
bootctl
45.14
KB
-rwxr-xr-x
brotli
739.2
KB
-rwxr-xr-x
btrace
891
B
-rwxr-xr-x
btrecord
19.94
KB
-rwxr-xr-x
btreplay
32.45
KB
-rwxr-xr-x
btt
144.79
KB
-rwxr-xr-x
bunzip2
37.57
KB
-rwxr-xr-x
busctl
77.25
KB
-rwxr-xr-x
bzcat
37.57
KB
-rwxr-xr-x
bzcmp
2.08
KB
-rwxr-xr-x
bzdiff
2.08
KB
-rwxr-xr-x
bzegrep
1.64
KB
-rwxr-xr-x
bzfgrep
1.64
KB
-rwxr-xr-x
bzgrep
1.64
KB
-rwxr-xr-x
bzip2
37.57
KB
-rwxr-xr-x
bzip2recover
17.15
KB
-rwxr-xr-x
bzless
1.23
KB
-rwxr-xr-x
bzmore
1.23
KB
-rwxr-xr-x
c++
1.21
MB
-rwxr-xr-x
c++filt
28.89
KB
-rwxr-xr-x
c89
224
B
-rwxr-xr-x
c99
215
B
-rwxr-xr-x
ca-legacy
1.61
KB
-rwxr-xr-x
cairo-sphinx
69.71
KB
-rwxr-xr-x
cal
65.98
KB
-rwxr-xr-x
captoinfo
85.23
KB
-rwxr-xr-x
cat
37.45
KB
-rwxr-xr-x
catchsegv
3.21
KB
-rwxr-xr-x
catman
41.45
KB
-rwxr-xr-x
cc
1.21
MB
-rwxr-xr-x
ccomps
24.68
KB
-rwxr-xr-x
cd
26
B
-rwxr-xr-x
centrino-decode
11.26
KB
-rwxr-xr-x
certbot
387
B
-rwxr-xr-x
certbot-3
387
B
-rwxr-xr-x
chacl
17.08
KB
-rwxr-xr-x
chage
77.67
KB
-rwsr-xr-x
chardetect
400
B
-rwxr-xr-x
chattr
16.4
KB
-rwxr-xr-x
chcat
13.57
KB
-rwxr-xr-x
chcon
70.34
KB
-rwxr-xr-x
checkmodule
427.01
KB
-rwxr-xr-x
checkpolicy
488.64
KB
-rwxr-xr-x
chfn
32.89
KB
-rws--x--x
chgrp
66.27
KB
-rwxr-xr-x
chmem
45.47
KB
-rwxr-xr-x
chmod
62.22
KB
-rwxr-xr-x
chown
70.3
KB
-rwxr-xr-x
chronyc
119.37
KB
-rwxr-xr-x
chrt
37.18
KB
-rwxr-xr-x
chsh
24.71
KB
-rws--x--x
chvt
12.66
KB
-rwxr-xr-x
circo
12.23
KB
-rwxr-xr-x
cksum
37.38
KB
-rwxr-xr-x
clear
12.49
KB
-rwxr-xr-x
cluster
518.3
KB
-rwxr-xr-x
cmp
103.76
KB
-rwxr-xr-x
cockpit-bridge
496.18
KB
-rwxr-xr-x
col
29
KB
-rwxr-xr-x
colcrt
16.47
KB
-rwxr-xr-x
colrm
24.88
KB
-rwxr-xr-x
column
49.46
KB
-rwxr-xr-x
comm
41.54
KB
-rwxr-xr-x
command
31
B
-rwxr-xr-x
compile_et
1.31
KB
-rwxr-xr-x
config_data
6.97
KB
-rwxr-xr-x
coredumpctl
44.9
KB
-rwxr-xr-x
corelist
14.64
KB
-rwxr-xr-x
cp
147.99
KB
-rwxr-xr-x
cpan
7.87
KB
-rwxr-xr-x
cpan-mirrors
4.19
KB
-rwxr-xr-x
cpio
159.8
KB
-rwxr-xr-x
cpp
1.21
MB
-rwxr-xr-x
cpupower
66.9
KB
-rwxr-xr-x
crb
2.58
KB
-rwxr--r--
crc32
1.02
KB
-rwxr-xr-x
cronnext
49.8
KB
-rwxr-xr-x
crontab
61.66
KB
-rwsr-xr-x
csplit
53.66
KB
-rwxr-xr-x
csslint-0.6
24.56
KB
-rwxr-xr-x
cstool
4.58
MB
-rwxr-xr-x
curl
230.08
KB
-rwxr-xr-x
cut
49.51
KB
-rwxr-xr-x
cvtsudoers
263.95
KB
-rwxr-xr-x
date
105.95
KB
-rwxr-xr-x
db_archive
12.45
KB
-rwxr-xr-x
db_checkpoint
16.48
KB
-rwxr-xr-x
db_deadlock
16.48
KB
-rwxr-xr-x
db_dump
16.51
KB
-rwxr-xr-x
db_dump185
69.55
KB
-rwxr-xr-x
db_hotbackup
20.49
KB
-rwxr-xr-x
db_load
28.61
KB
-rwxr-xr-x
db_log_verify
16.52
KB
-rwxr-xr-x
db_printlog
33.4
KB
-rwxr-xr-x
db_recover
16.51
KB
-rwxr-xr-x
db_replicate
16.49
KB
-rwxr-xr-x
db_stat
16.48
KB
-rwxr-xr-x
db_tuner
24.55
KB
-rwxr-xr-x
db_upgrade
12.45
KB
-rwxr-xr-x
db_verify
16.46
KB
-rwxr-xr-x
dbilogstrip
1.35
KB
-rwxr-xr-x
dbinfo
4.5
KB
-rwxr-xr-x
dbiprof
6.06
KB
-rwxr-xr-x
dbpmda
93.96
KB
-rwxr-xr-x
dbus-binding-tool
110.43
KB
-rwxr-xr-x
dbus-cleanup-sockets
16.38
KB
-rwxr-xr-x
dbus-daemon
239.71
KB
-rwxr-xr-x
dbus-monitor
28.57
KB
-rwxr-xr-x
dbus-run-session
15.88
KB
-rwxr-xr-x
dbus-send
28.54
KB
-rwxr-xr-x
dbus-test-tool
24.59
KB
-rwxr-xr-x
dbus-update-activation-environ...
16.41
KB
-rwxr-xr-x
dbus-uuidgen
12.37
KB
-rwxr-xr-x
dc
53.02
KB
-rwxr-xr-x
dd
77.96
KB
-rwxr-xr-x
deallocvt
12.66
KB
-rwxr-xr-x
debuginfod-find
16.46
KB
-rwxr-xr-x
delv
42.45
KB
-rwxr-xr-x
df
91.08
KB
-rwxr-xr-x
diff
268.01
KB
-rwxr-xr-x
diff3
128.6
KB
-rwxr-xr-x
diffimg
12.24
KB
-rwxr-xr-x
dig
162.17
KB
-rwxr-xr-x
dijkstra
16.7
KB
-rwxr-xr-x
dir
139.88
KB
-rwxr-xr-x
dircolors
49.55
KB
-rwxr-xr-x
dirmngr
580.16
KB
-rwxr-xr-x
dirmngr-client
120.12
KB
-rwxr-xr-x
dirname
33.36
KB
-rwxr-xr-x
distro
389
B
-rwxr-xr-x
dltest
13.05
KB
-rwxr-xr-x
dm_date
5.38
KB
-rwxr-xr-x
dm_zdump
4.99
KB
-rwxr-xr-x
dmesg
77.9
KB
-rwxr-xr-x
dnf
1.91
KB
-rwxr-xr-x
dnf-3
1.91
KB
-rwxr-xr-x
dnsdomainname
21.16
KB
-rwxr-xr-x
dnstap-read
20.42
KB
-rwxr-xr-x
domainname
21.16
KB
-rwxr-xr-x
dos2unix
58.54
KB
-rwxr-xr-x
dot
12.23
KB
-rwxr-xr-x
dot2gxl
41.27
KB
-rwxr-xr-x
dotty
2.04
KB
-rwxr-xr-x
doveadm
678.08
KB
-rwxr-xr-x
doveconf
185.02
KB
-rwxr-xr-x
dovecot-sysreport
5.63
KB
-rwxr-xr-x
dracut
67.81
KB
-rwxr-xr-x
dstat
70.37
KB
-rwxr-xr-x
dsync
678.08
KB
-rwxr-xr-x
dtrace
17.25
KB
-rwxr-xr-x
du
107.02
KB
-rwxr-xr-x
dumpkeys
170
KB
-rwxr-xr-x
dwp
2.17
MB
-rwxr-xr-x
dwz
167.64
KB
-rwxr-xr-x
easy_install-3
246
B
-rwxr-xr-x
easy_install-3.6
246
B
-rwxr-xr-x
echo
37.34
KB
-rwxr-xr-x
ed
57.28
KB
-rwxr-xr-x
edgepaint
420.73
KB
-rwxr-xr-x
egrep
28
B
-rwxr-xr-x
eject
57.77
KB
-rwxr-xr-x
elfedit
33.27
KB
-rwxr-xr-x
enc2xs
40.97
KB
-rwxr-xr-x
encguess
2.91
KB
-rwxr-xr-x
enchant
21.08
KB
-rwxr-xr-x
enchant-lsmod
13.09
KB
-rwxr-xr-x
env
41.34
KB
-rwxr-xr-x
envml
4.1
KB
-rwxr-xr-x
envsubst
48.99
KB
-rwxr-xr-x
eqn
232.16
KB
-rwxr-xr-x
erb
4.72
KB
-rwxr-xr-x
evmctl
62.54
KB
-rwxr-xr-x
ex
1.13
MB
-rwxr-xr-x
expand
41.58
KB
-rwxr-xr-x
expr
49.56
KB
-rwxr-xr-x
facter
145.19
KB
-rwxr-xr-x
factor
85.97
KB
-rwxr-xr-x
fail2ban-client
1.39
KB
-rwxr-xr-x
fail2ban-python
11.59
KB
-rwxr-xr-x
fail2ban-regex
1.25
KB
-rwxr-xr-x
fail2ban-server
1.39
KB
-rwxr-xr-x
fallocate
28.95
KB
-rwxr-xr-x
false
33.3
KB
-rwxr-xr-x
fc
26
B
-rwxr-xr-x
fc-cache
132
B
-rwxr-xr-x
fc-cache-64
20.35
KB
-rwxr-xr-x
fc-cat
16.35
KB
-rwxr-xr-x
fc-conflist
12.25
KB
-rwxr-xr-x
fc-list
12.25
KB
-rwxr-xr-x
fc-match
16.26
KB
-rwxr-xr-x
fc-pattern
12.26
KB
-rwxr-xr-x
fc-query
12.24
KB
-rwxr-xr-x
fc-scan
12.26
KB
-rwxr-xr-x
fc-validate
16.26
KB
-rwxr-xr-x
fdp
12.23
KB
-rwxr-xr-x
fg
26
B
-rwxr-xr-x
fgconsole
12.67
KB
-rwxr-xr-x
fgrep
28
B
-rwxr-xr-x
file
24.68
KB
-rwxr-xr-x
fincore
33.02
KB
-rwxr-xr-x
find
255.85
KB
-rwxr-xr-x
findmnt
70.6
KB
-rwxr-xr-x
fips-finish-install
1.29
KB
-rwxr-xr-x
fips-mode-setup
3.91
KB
-rwxr-xr-x
firewall-cmd
139.61
KB
-rwxr-xr-x
firewall-offline-cmd
120.73
KB
-rwxr-xr-x
flex
428.45
KB
-rwxr-xr-x
flex++
428.45
KB
-rwxr-xr-x
flock
33.19
KB
-rwxr-xr-x
fmt
45.48
KB
-rwxr-xr-x
fold
41.4
KB
-rwxr-xr-x
fonttosfnt
41.18
KB
-rwxr-xr-x
formail
48.22
KB
-rwxr-xr-x
free
20.66
KB
-rwxr-xr-x
fribidi
21.14
KB
-rwxr-xr-x
ftpdctl
98.2
KB
-rwxr-xr-x
funzip
36.74
KB
-rwxr-xr-x
g++
1.21
MB
-rwxr-xr-x
g13
212.02
KB
-rwxr-xr-x
gapplication
20.44
KB
-rwxr-xr-x
gawk
669.77
KB
-rwxr-xr-x
gc
16.61
KB
-rwxr-xr-x
gcc
1.21
MB
-rwxr-xr-x
gcc-ar
36.64
KB
-rwxr-xr-x
gcc-nm
36.65
KB
-rwxr-xr-x
gcc-ranlib
36.65
KB
-rwxr-xr-x
gcov
1.31
MB
-rwxr-xr-x
gcov-dump
566.9
KB
-rwxr-xr-x
gcov-tool
603.88
KB
-rwxr-xr-x
gdbm_dump
21.05
KB
-rwxr-xr-x
gdbm_load
25.31
KB
-rwxr-xr-x
gdbmtool
111.57
KB
-rwxr-xr-x
gdbus
48.7
KB
-rwxr-xr-x
gdk-pixbuf-query-loaders-64
18.7
KB
-rwxr-xr-x
gdk-pixbuf-thumbnailer
28.66
KB
-rwxr-xr-x
gem
542
B
-rwxr-xr-x
gencat
24.82
KB
-rwxr-xr-x
genl-ctrl-list
12.04
KB
-rwxr-xr-x
geoiplookup
21.89
KB
-rwxr-xr-x
geoiplookup6
21.65
KB
-rwxr-xr-x
geqn
232.16
KB
-rwxr-xr-x
getconf
32.45
KB
-rwxr-xr-x
getent
33.12
KB
-rwxr-xr-x
getfacl
27.99
KB
-rwxr-xr-x
getfattr
23.03
KB
-rwxr-xr-x
getkeycodes
12.66
KB
-rwxr-xr-x
getopt
20.52
KB
-rwxr-xr-x
getopts
31
B
-rwxr-xr-x
gettext
48.97
KB
-rwxr-xr-x
gettext.sh
4.52
KB
-rwxr-xr-x
gio
85.2
KB
-rwxr-xr-x
gio-querymodules-64
16.3
KB
-rwxr-xr-x
glib-compile-schemas
48.84
KB
-rwxr-xr-x
gmake
235.32
KB
-rwxr-xr-x
gml2gv
41.2
KB
-rwxr-xr-x
gneqn
908
B
-rwxr-xr-x
gnroff
3.23
KB
-rwxr-xr-x
gpasswd
82.17
KB
-rwsr-xr-x
gpg
1.04
MB
-rwxr-xr-x
gpg-agent
419.29
KB
-rwxr-xr-x
gpg-connect-agent
165.3
KB
-rwxr-xr-x
gpg-error
34.16
KB
-rwxr-xr-x
gpg-wks-server
206.69
KB
-rwxr-xr-x
gpg-zip
3.44
KB
-rwxr-xr-x
gpg2
1.04
MB
-rwxr-xr-x
gpgconf
176.09
KB
-rwxr-xr-x
gpgme-json
85.8
KB
-rwxr-xr-x
gpgparsemail
28.74
KB
-rwxr-xr-x
gpgsm
514.45
KB
-rwxr-xr-x
gpgsplit
87.02
KB
-rwxr-xr-x
gpgv
451.58
KB
-rwxr-xr-x
gpgv2
451.58
KB
-rwxr-xr-x
gpic
293.84
KB
-rwxr-xr-x
gpio-event-mon
14.96
KB
-rwxr-xr-x
gpio-hammer
14.95
KB
-rwxr-xr-x
gprof
103.34
KB
-rwxr-xr-x
gr2fonttest
29.95
KB
-rwxr-xr-x
graphml2gv
20.62
KB
-rwxr-xr-x
grep
193.63
KB
-rwxr-xr-x
groff
124.92
KB
-rwxr-xr-x
grops
191.14
KB
-rwxr-xr-x
grotty
141.9
KB
-rwxr-xr-x
groups
37.38
KB
-rwxr-xr-x
grub2-editenv
444.02
KB
-rwxr-xr-x
grub2-file
914.98
KB
-rwxr-xr-x
grub2-fstest
1.14
MB
-rwxr-xr-x
grub2-glue-efi
279.27
KB
-rwxr-xr-x
grub2-kbdcomp
1.63
KB
-rwxr-xr-x
grub2-menulst2cfg
262.57
KB
-rwxr-xr-x
grub2-mkfont
308.02
KB
-rwxr-xr-x
grub2-mkimage
427.29
KB
-rwxr-xr-x
grub2-mklayout
285.4
KB
-rwxr-xr-x
grub2-mknetdir
481.71
KB
-rwxr-xr-x
grub2-mkpasswd-pbkdf2
287.74
KB
-rwxr-xr-x
grub2-mkrelpath
279.16
KB
-rwxr-xr-x
grub2-mkrescue
1.1
MB
-rwxr-xr-x
grub2-mkstandalone
590.36
KB
-rwxr-xr-x
grub2-render-label
919.53
KB
-rwxr-xr-x
grub2-script-check
311.89
KB
-rwxr-xr-x
grub2-syslinux2cfg
844.16
KB
-rwxr-xr-x
gsettings
28.6
KB
-rwxr-xr-x
gsoelim
42.55
KB
-rwxr-xr-x
gss-client
24.55
KB
-rwxr-xr-x
gtar
449
KB
-rwxr-xr-x
gtbl
154.61
KB
-rwxr-xr-x
gtk-query-immodules-2.0-64
16.29
KB
-rwxr-xr-x
gtk-update-icon-cache
33.02
KB
-rwxr-xr-x
gtroff
805.02
KB
-rwxr-xr-x
gunzip
2.29
KB
-rwxr-xr-x
gv2gml
24.66
KB
-rwxr-xr-x
gv2gxl
41.27
KB
-rwxr-xr-x
gvcolor
46.87
KB
-rwxr-xr-x
gvgen
24.77
KB
-rwxr-xr-x
gvmap
526.3
KB
-rwxr-xr-x
gvmap.sh
2.14
KB
-rwxr-xr-x
gvpack
28.87
KB
-rwxr-xr-x
gvpr
7.8
KB
-rwxr-xr-x
gxl2dot
41.27
KB
-rwxr-xr-x
gxl2gv
41.27
KB
-rwxr-xr-x
gzexe
6.23
KB
-rwxr-xr-x
gzip
94.67
KB
-rwxr-xr-x
h2ph
28.54
KB
-rwxr-xr-x
h2xs
59.44
KB
-rwxr-xr-x
hash
28
B
-rwxr-xr-x
head
45.49
KB
-rwxr-xr-x
hexdump
57.5
KB
-rwxr-xr-x
host
142.29
KB
-rwxr-xr-x
hostid
33.32
KB
-rwxr-xr-x
hostname
21.16
KB
-rwxr-xr-x
hostnamectl
20.82
KB
-rwxr-xr-x
htdbm
24.66
KB
-rwxr-xr-x
htdigest
16.53
KB
-rwxr-xr-x
htop
304.73
KB
-rwxr-xr-x
htpasswd
24.66
KB
-rwxr-xr-x
httxt2dbm
16.47
KB
-rwxr-xr-x
hunspell
144.7
KB
-rwxr-xr-x
i386
20.75
KB
-rwxr-xr-x
ibd2sdi
313.23
KB
-rwxr-xr-x
ibdev2netdev
5.59
KB
-rwxr-xr-x
iceauth
41.87
KB
-rwxr-xr-x
iconv
61.43
KB
-rwxr-xr-x
id
45.43
KB
-rwxr-xr-x
idiag-socket-details
12.09
KB
-rwxr-xr-x
idn
39.41
KB
-rwxr-xr-x
ifnames
4.03
KB
-rwxr-xr-x
iio_event_monitor
22.97
KB
-rwxr-xr-x
iio_generic_buffer
26.98
KB
-rwxr-xr-x
info
249.89
KB
-rwxr-xr-x
infocmp
60.98
KB
-rwxr-xr-x
infotocap
85.23
KB
-rwxr-xr-x
innochecksum
219.7
KB
-rwxr-xr-x
install
156.14
KB
-rwxr-xr-x
instmodsh
4.1
KB
-rwxr-xr-x
intel-speed-select
93.02
KB
-rwxr-xr-x
ionice
28.98
KB
-rwxr-xr-x
ipcalc
46.08
KB
-rwxr-xr-x
ipcmk
29.13
KB
-rwxr-xr-x
ipcount
3.55
KB
-rwxr-xr-x
ipcrm
28.98
KB
-rwxr-xr-x
ipcs
53.4
KB
-rwxr-xr-x
iptab
897
B
-rwxr-xr-x
irb
186
B
-rwxr-xr-x
isosize
24.87
KB
-rwxr-xr-x
ispell
988
B
-rwxr-xr-x
isql
37.29
KB
-rwxr-xr-x
iusql
29.68
KB
-rwxr-xr-x
jk_uchroot
28.85
KB
-rwsr-xr-x
jobs
28
B
-rwxr-xr-x
join
53.68
KB
-rwxr-xr-x
journalctl
76.98
KB
-rwxr-xr-x
json_pp
4.19
KB
-rwxr-xr-x
json_xs
6.84
KB
-rwxr-xr-x
jws
373
B
-rwxr-xr-x
kbd_mode
12.67
KB
-rwxr-xr-x
kbdinfo
16.69
KB
-rwxr-xr-x
kbdrate
16.64
KB
-rwxr-xr-x
kbxutil
177.32
KB
-rwxr-xr-x
kdumpctl
33.18
KB
-rwxr-xr-x
kernel-install
4.41
KB
-rwxr-xr-x
kill
37.27
KB
-rwxr-xr-x
killall
29.77
KB
-rwxr-xr-x
kmod
159.46
KB
-rwxr-xr-x
krb5-config
6.98
KB
-rwxr-xr-x
kvm_stat
60.85
KB
-rwxr-xr-x
l4p-tmpl
1.8
KB
-rwxr-xr-x
last
49.27
KB
-rwxr-xr-x
lastb
49.27
KB
-rwxr-xr-x
lastcomm
37.8
KB
-rwxr-xr-x
lastlog
20.61
KB
-rwxr-xr-x
lchfn
20.33
KB
-rwxr-xr-x
lchsh
16.34
KB
-rwxr-xr-x
ld
1.71
MB
-rwxr-xr-x
ld.bfd
1.71
MB
-rwxr-xr-x
ld.gold
2.39
MB
-rwxr-xr-x
ld.so
1.07
MB
-rwxr-xr-x
ldd
5.31
KB
-rwxr-xr-x
lefty
304.54
KB
-rwxr-xr-x
less
187.54
KB
-rwxr-xr-x
lessecho
13.52
KB
-rwxr-xr-x
lesskey
23.11
KB
-rwxr-xr-x
lesspipe.sh
3.07
KB
-rwxr-xr-x
letsencrypt
387
B
-rwxr-xr-x
lex
428.45
KB
-rwxr-xr-x
lexgrog
93.7
KB
-rwxr-xr-x
libnetcfg
15.41
KB
-rwxr-xr-x
libtool
359.11
KB
-rwxr-xr-x
libtoolize
126.17
KB
-rwxr-xr-x
link
33.32
KB
-rwxr-xr-x
linux-boot-prober
5.85
KB
-rwxr-xr-x
linux32
20.75
KB
-rwxr-xr-x
linux64
20.75
KB
-rwxr-xr-x
ln
70.48
KB
-rwxr-xr-x
lneato
1.51
KB
-rwxr-xr-x
loadkeys
210.65
KB
-rwxr-xr-x
loadunimap
29.13
KB
-rwxr-xr-x
locale
56.43
KB
-rwxr-xr-x
localectl
28.84
KB
-rwxr-xr-x
localedef
307.45
KB
-rwxr-xr-x
locate
47.41
KB
-rwx--s--x
lockfile
23.91
KB
-rwxr-sr-x
logger
49.97
KB
-rwxr-xr-x
login
40.95
KB
-rwxr-xr-x
loginctl
57.28
KB
-rwxr-xr-x
logname
33.34
KB
-rwxr-xr-x
logresolve
16.39
KB
-rwxr-xr-x
look
16.45
KB
-rwxr-xr-x
ls
139.88
KB
-rwxr-xr-x
lsattr
11.93
KB
-rwxr-xr-x
lsblk
90.13
KB
-rwxr-xr-x
lscpu
77.68
KB
-rwxr-xr-x
lsgpio
15.05
KB
-rwxr-xr-x
lsiio
22.98
KB
-rwxr-xr-x
lsinitrd
8.68
KB
-rwxr-xr-x
lsipc
73.77
KB
-rwxr-xr-x
lslocks
37.52
KB
-rwxr-xr-x
lslogins
69.63
KB
-rwxr-xr-x
lsmcli
954
B
-rwxr-xr-x
lsmd
24.87
KB
-rwxr-xr-x
lsmem
45.32
KB
-rwxr-xr-x
lsns
49.27
KB
-rwxr-xr-x
lsof
175.4
KB
-rwxr-xr-x
lsscsi
86.01
KB
-rwxr-xr-x
lsusb
244.14
KB
-rwxr-xr-x
lsusb.py
14.89
KB
-rwxr-xr-x
lwp-download
10.05
KB
-rwxr-xr-x
lwp-dump
2.65
KB
-rwxr-xr-x
lwp-mirror
2.36
KB
-rwxr-xr-x
lwp-request
15.84
KB
-rwxr-xr-x
m4
185.56
KB
-rwxr-xr-x
mac2unix
58.54
KB
-rwxr-xr-x
mailq
28.48
KB
-rwxr-xr-x
mailq.postfix
28.48
KB
-rwxr-xr-x
mailstat
5.72
KB
-rwxr-xr-x
make
235.32
KB
-rwxr-xr-x
make-dummy-cert
610
B
-rwxr-xr-x
makedb
24.83
KB
-rwxr-xr-x
man
112.52
KB
-rwxr-xr-x
mandb
134.52
KB
-rwxr-xr-x
manpath
33.42
KB
-rwxr-xr-x
mapscrn
24.97
KB
-rwxr-xr-x
mcookie
33.26
KB
-rwxr-xr-x
mcpp
9.02
KB
-rwxr-xr-x
md5sum
45.52
KB
-rwxr-xr-x
mdig
48.51
KB
-rwxr-xr-x
mecab
7.84
KB
-rwxr-xr-x
memstrack
83.72
KB
-rwxr-xr-x
mesg
16.36
KB
-rwxr-xr-x
miltertest
56.8
KB
-rwxr-xr-x
mkdir
82.7
KB
-rwxr-xr-x
mkfifo
66.48
KB
-rwxr-xr-x
mkfontdir
65
B
-rwxr-xr-x
mkfontscale
41.59
KB
-rwxr-xr-x
mkinitrd
6.43
KB
-rwxr-xr-x
mknod
70.47
KB
-rwxr-xr-x
mktemp
45.66
KB
-rwxr-xr-x
mm2gv
90.51
KB
-rwxr-xr-x
mmdblookup
16.8
KB
-rwxr-xr-x
modulecmd
384.46
KB
-rwxr-xr-x
modulemd-validator
24.96
KB
-rwxr-xr-x
more
44.94
KB
-rwxr-xr-x
mount
49.16
KB
-rwsr-xr-x
mountpoint
16.47
KB
-rwxr-xr-x
msgattrib
25.58
KB
-rwxr-xr-x
msgcat
25.55
KB
-rwxr-xr-x
msgcmp
26.12
KB
-rwxr-xr-x
msgcomm
25.55
KB
-rwxr-xr-x
msgconv
21.55
KB
-rwxr-xr-x
msgen
21.55
KB
-rwxr-xr-x
msgexec
21.55
KB
-rwxr-xr-x
msgfilter
34.53
KB
-rwxr-xr-x
msgfmt
90.3
KB
-rwxr-xr-x
msggrep
43.6
KB
-rwxr-xr-x
msginit
67.85
KB
-rwxr-xr-x
msgmerge
71.48
KB
-rwxr-xr-x
msgunfmt
35.8
KB
-rwxr-xr-x
msguniq
25.56
KB
-rwxr-xr-x
mv
143.96
KB
-rwxr-xr-x
my_print_defaults
195.91
KB
-rwxr-xr-x
myisam_ftdump
6.38
MB
-rwxr-xr-x
myisamchk
6.59
MB
-rwxr-xr-x
myisamlog
6.4
MB
-rwxr-xr-x
myisampack
6.44
MB
-rwxr-xr-x
mysql
7.27
MB
-rwxr-xr-x
mysql_config_editor
181.27
KB
-rwxr-xr-x
mysql_migrate_keyring
7.18
MB
-rwxr-xr-x
mysql_secure_installation
7.09
MB
-rwxr-xr-x
mysql_ssl_rsa_setup
232.91
KB
-rwxr-xr-x
mysql_tzinfo_to_sql
123.82
KB
-rwxr-xr-x
mysql_upgrade
7.18
MB
-rwxr-xr-x
mysqladmin
7.11
MB
-rwxr-xr-x
mysqlbinlog
7.44
MB
-rwxr-xr-x
mysqlcheck
7.12
MB
-rwxr-xr-x
mysqld_pre_systemd
4.27
KB
-rwxr-xr-x
mysqldump
7.19
MB
-rwxr-xr-x
mysqldumpslow
7.49
KB
-rwxr-xr-x
mysqlimport
7.1
MB
-rwxr-xr-x
mysqlpump
7.52
MB
-rwxr-xr-x
mysqlshow
7.1
MB
-rwxr-xr-x
mysqlslap
7.12
MB
-rwxr-xr-x
named-rrchecker
19.87
KB
-rwxr-xr-x
namei
33.09
KB
-rwxr-xr-x
nano
254.73
KB
-rwxr-xr-x
ncurses6-config
5.87
KB
-rwxr-xr-x
ncursesw6-config
5.88
KB
-rwxr-xr-x
ndptool
24.41
KB
-rwxr-xr-x
neato
12.23
KB
-rwxr-xr-x
neqn
908
B
-rwxr-xr-x
net-server
3.34
KB
-rwxr-xr-x
netstat
158.68
KB
-rwxr-xr-x
newaliases
28.48
KB
-rwxr-xr-x
newaliases.postfix
28.48
KB
-rwxr-xr-x
newgidmap
47.79
KB
-rwxr-xr-x
newgrp
42.45
KB
-rwsr-xr-x
newuidmap
47.75
KB
-rwxr-xr-x
nf-ct-add
16.46
KB
-rwxr-xr-x
nf-ct-events
12.38
KB
-rwxr-xr-x
nf-ct-list
16.49
KB
-rwxr-xr-x
nf-exp-add
16.87
KB
-rwxr-xr-x
nf-exp-delete
16.66
KB
-rwxr-xr-x
nf-exp-list
16.49
KB
-rwxr-xr-x
nf-log
12.35
KB
-rwxr-xr-x
nf-monitor
12.36
KB
-rwxr-xr-x
nf-queue
16.35
KB
-rwxr-xr-x
ngettext
48.97
KB
-rwxr-xr-x
nice
37.32
KB
-rwxr-xr-x
nisdomainname
21.16
KB
-rwxr-xr-x
nl
45.54
KB
-rwxr-xr-x
nl-addr-add
12.34
KB
-rwxr-xr-x
nl-addr-delete
16.77
KB
-rwxr-xr-x
nl-addr-list
16.88
KB
-rwxr-xr-x
nl-class-add
16.73
KB
-rwxr-xr-x
nl-class-delete
12.63
KB
-rwxr-xr-x
nl-class-list
12.59
KB
-rwxr-xr-x
nl-classid-lookup
12.47
KB
-rwxr-xr-x
nl-cls-add
16.77
KB
-rwxr-xr-x
nl-cls-delete
16.77
KB
-rwxr-xr-x
nl-cls-list
12.73
KB
-rwxr-xr-x
nl-fib-lookup
12.5
KB
-rwxr-xr-x
nl-link-enslave
11.87
KB
-rwxr-xr-x
nl-link-ifindex2name
11.87
KB
-rwxr-xr-x
nl-link-list
12.23
KB
-rwxr-xr-x
nl-link-name2ifindex
11.86
KB
-rwxr-xr-x
nl-link-release
11.86
KB
-rwxr-xr-x
nl-link-set
12.77
KB
-rwxr-xr-x
nl-link-stats
12.59
KB
-rwxr-xr-x
nl-list-caches
12.27
KB
-rwxr-xr-x
nl-list-sockets
11.87
KB
-rwxr-xr-x
nl-monitor
12.52
KB
-rwxr-xr-x
nl-neigh-add
12.63
KB
-rwxr-xr-x
nl-neigh-delete
12.66
KB
-rwxr-xr-x
nl-neigh-list
12.19
KB
-rwxr-xr-x
nl-neightbl-list
12.01
KB
-rwxr-xr-x
nl-pktloc-lookup
12.56
KB
-rwxr-xr-x
nl-qdisc-add
12.65
KB
-rwxr-xr-x
nl-qdisc-delete
12.63
KB
-rwxr-xr-x
nl-qdisc-list
16.74
KB
-rwxr-xr-x
nl-route-add
16.39
KB
-rwxr-xr-x
nl-route-delete
16.88
KB
-rwxr-xr-x
nl-route-get
12.35
KB
-rwxr-xr-x
nl-route-list
16.44
KB
-rwxr-xr-x
nl-rule-list
12.05
KB
-rwxr-xr-x
nl-tctree-list
12.66
KB
-rwxr-xr-x
nl-util-addr
11.85
KB
-rwxr-xr-x
nload
234.35
KB
-rwxr-xr-x
nm
50.24
KB
-rwxr-xr-x
nm-online
20.83
KB
-rwxr-xr-x
nmcli
1008.96
KB
-rwxr-xr-x
nmtui
780.12
KB
-rwxr-xr-x
nmtui-connect
780.12
KB
-rwxr-xr-x
nmtui-edit
780.12
KB
-rwxr-xr-x
nmtui-hostname
780.12
KB
-rwxr-xr-x
nohup
37.41
KB
-rwxr-xr-x
nop
12.47
KB
-rwxr-xr-x
nproc
37.4
KB
-rwxr-xr-x
nroff
3.23
KB
-rwxr-xr-x
nsenter
33.29
KB
-rwxr-xr-x
nslookup
146.24
KB
-rwxr-xr-x
nsupdate
73.03
KB
-rwxr-xr-x
numfmt
65.63
KB
-rwxr-xr-x
objcopy
240.05
KB
-rwxr-xr-x
objdump
415.61
KB
-rwxr-xr-x
od
73.8
KB
-rwxr-xr-x
odbc_config
13.05
KB
-rwxr-xr-x
odbcinst
37.68
KB
-rwxr-xr-x
open
21.09
KB
-rwxr-xr-x
openssl
745.94
KB
-rwxr-xr-x
openvt
21.09
KB
-rwxr-xr-x
os-prober
5.78
KB
-rwxr-xr-x
osage
12.23
KB
-rwxr-xr-x
p11-kit
37.16
KB
-rwxr-xr-x
package-stash-conflicts
842
B
-rwxr-xr-x
page_owner_sort
10.88
KB
-rwxr-xr-x
pango-list
11.88
KB
-rwxr-xr-x
pango-view
57.44
KB
-rwxr-xr-x
paperconf
13.07
KB
-rwxr-xr-x
passwd
32.77
KB
-rwsr-xr-x
paste
37.37
KB
-rwxr-xr-x
patchwork
12.23
KB
-rwxr-xr-x
pathchk
37.32
KB
-rwxr-xr-x
pchrt
4.53
KB
-rwxr-xr-x
pcp
5.3
KB
-rwxr-xr-x
pcp2csv
65.89
KB
-rwxr-xr-x
pcre-config
2.09
KB
-rwxr-xr-x
pcre2-config
1.9
KB
-rwxr-xr-x
pear
333
B
-rwxr-xr-x
peardev
360
B
-rwxr-xr-x
pecl
248
B
-rwxr-xr-x
peekfd
16.51
KB
-rwxr-xr-x
percona-release
21.4
KB
-rwxr-xr-x
perl
12.52
KB
-rwxr-xr-x
perl5.26.3
12.52
KB
-rwxr-xr-x
perlbug
44.39
KB
-rwxr-xr-x
perldoc
118
B
-rwxr-xr-x
perlivp
10.56
KB
-rwxr-xr-x
perlthanks
44.39
KB
-rwxr-xr-x
perltidy
129.13
KB
-rwxr-xr-x
perror
1.43
MB
-rwxr-xr-x
pflags
2.57
KB
-rwxr-xr-x
pgrep
28.7
KB
-rwxr-xr-x
phar
14.46
KB
-rwxr-xr-x
phar.phar
14.46
KB
-rwxr-xr-x
php
6.1
MB
-rwxr-xr-x
php-bkp9july
4.84
MB
-rwxr-xr-x
php-cgi
4.74
MB
-rwxr-xr-x
php-config
5.11
KB
-rwxr-xr-x
php.old
6.09
MB
-rwxr-xr-x
php56
4.3
MB
-rwxr-xr-x
php56-cgi
4.27
MB
-rwxr-xr-x
php56-pear
393
B
-rwxr-xr-x
php56-phar
14.5
KB
-rwxr-xr-x
php70
4.31
MB
-rwxr-xr-x
php70-cgi
4.21
MB
-rwxr-xr-x
php70-pear
393
B
-rwxr-xr-x
php70-phar
14.5
KB
-rwxr-xr-x
php71
4.46
MB
-rwxr-xr-x
php71-cgi
4.36
MB
-rwxr-xr-x
php71-pear
393
B
-rwxr-xr-x
php71-phar
14.48
KB
-rwxr-xr-x
php72
4.84
MB
-rwxr-xr-x
php72-cgi
4.74
MB
-rwxr-xr-x
php72-pear
393
B
-rwxr-xr-x
php72-phar
14.48
KB
-rwxr-xr-x
php73
4.62
MB
-rwxr-xr-x
php73-cgi
4.51
MB
-rwxr-xr-x
php73-pear
393
B
-rwxr-xr-x
php73-phar
14.48
KB
-rwxr-xr-x
php74
6.08
MB
-rwxr-xr-x
php74-cgi
6.08
MB
-rwxr-xr-x
php74-pear
393
B
-rwxr-xr-x
php74-phar
14.55
KB
-rwxr-xr-x
php80
6.08
MB
-rwxr-xr-x
php80-cgi
6.08
MB
-rwxr-xr-x
php80-phar
24.5
KB
-rwxr-xr-x
php81
6.09
MB
-rwxr-xr-x
php81-cgi
6.09
MB
-rwxr-xr-x
php81-phar
14.9
KB
-rwxr-xr-x
php82
6.09
MB
-rwxr-xr-x
php82-cgi
6.09
MB
-rwxr-xr-x
php82-phar
14.9
KB
-rwxr-xr-x
php83-cgi
6.1
MB
-rwxr-xr-x
php83-phar
14.9
KB
-rwxr-xr-x
phpize
4.65
KB
-rwxr-xr-x
pic
293.84
KB
-rwxr-xr-x
piconv
8.08
KB
-rwxr-xr-x
pidof
16.55
KB
-rwxr-xr-x
pigz
125.38
KB
-rwxr-xr-x
pinentry
2.35
KB
-rwxr-xr-x
pinentry-curses
77.89
KB
-rwxr-xr-x
ping
66.08
KB
-rwxr-xr-x
pinky
41.45
KB
-rwxr-xr-x
pip-3
209
B
-rwxr-xr-x
pip-3.6
209
B
-rwxr-xr-x
pip3
209
B
-rwxr-xr-x
pip3.6
209
B
-rwxr-xr-x
pkaction
16.38
KB
-rwxr-xr-x
pkcheck
24.4
KB
-rwxr-xr-x
pkcon
81.53
KB
-rwxr-xr-x
pkexec
28.4
KB
-rwsr-xr-x
pkg-config
40.04
KB
-rwxr-xr-x
pkgconf
40.04
KB
-rwxr-xr-x
pkill
28.7
KB
-rwxr-xr-x
pkla-admin-identities
25.72
KB
-rwxr-xr-x
pkla-check-authorization
33.78
KB
-rwxr-xr-x
pkmon
20.9
KB
-rwxr-xr-x
pkttyagent
20.23
KB
-rwxr-xr-x
pl2pm
4.43
KB
-rwxr-xr-x
pldd
16.73
KB
-rwxr-xr-x
pmafm
11.84
KB
-rwxr-xr-x
pmap
32.65
KB
-rwxr-xr-x
pmdate
11.83
KB
-rwxr-xr-x
pmdiff
7.63
KB
-rwxr-xr-x
pmdumplog
33.53
KB
-rwxr-xr-x
pmevent
41.9
KB
-rwxr-xr-x
pmfind
21.21
KB
-rwxr-xr-x
pmgenmap
2.38
KB
-rwxr-xr-x
pmie
182.95
KB
-rwxr-xr-x
pmie2col
2.81
KB
-rwxr-xr-x
pmieconf
60.01
KB
-rwxr-xr-x
pmiectl
44.39
KB
-rwxr-xr-x
pminfo
42.02
KB
-rwxr-xr-x
pmiostat
20.78
KB
-rwxr-xr-x
pmjson
12.51
KB
-rwxr-xr-x
pmlc
58.81
KB
-rwxr-xr-x
pmlogcheck
37.18
KB
-rwxr-xr-x
pmlogconf
54.48
KB
-rwxr-xr-x
pmlogctl
44.39
KB
-rwxr-xr-x
pmlogextract
70.02
KB
-rwxr-xr-x
pmlogger
143.2
KB
-rwxr-xr-x
pmloglabel
21.01
KB
-rwxr-xr-x
pmlogmv
16.91
KB
-rwxr-xr-x
pmlogpaste
16.98
KB
-rwxr-xr-x
pmlogsize
29.02
KB
-rwxr-xr-x
pmlogsummary
33.59
KB
-rwxr-xr-x
pmprobe
21.41
KB
-rwxr-xr-x
pmpython
11.83
KB
-rwxr-xr-x
pmrep
65.89
KB
-rwxr-xr-x
pmrepconf
54.48
KB
-rwxr-xr-x
pmsearch
21.36
KB
-rwxr-xr-x
pmseries
37.97
KB
-rwxr-xr-x
pmsocks
1010
B
-rwxr-xr-x
pmstat
25.55
KB
-rwxr-xr-x
pmstore
16.97
KB
-rwxr-xr-x
pmtrace
15.84
KB
-rwxr-xr-x
pmval
41.9
KB
-rwxr-xr-x
pod2html
4.04
KB
-rwxr-xr-x
pod2man
14.68
KB
-rwxr-xr-x
pod2text
10.55
KB
-rwxr-xr-x
pod2usage
3.86
KB
-rwxr-xr-x
podchecker
3.57
KB
-rwxr-xr-x
podselect
2.47
KB
-rwxr-xr-x
post-grohtml
238.73
KB
-rwxr-xr-x
powernow-k8-decode
10.87
KB
-rwxr-xr-x
pr
82.13
KB
-rwxr-xr-x
pre-grohtml
130.55
KB
-rwxr-xr-x
precat
5.52
KB
-rwxr-xr-x
preconv
57.65
KB
-rwxr-xr-x
preunzip
5.52
KB
-rwxr-xr-x
prezip
5.52
KB
-rwxr-xr-x
prezip-bin
11.98
KB
-rwxr-xr-x
printenv
33.3
KB
-rwxr-xr-x
printf
53.55
KB
-rwxr-xr-x
prlimit
37.53
KB
-rwxr-xr-x
procmail
116.16
KB
-rwxr-xr-x
procmail-wrapper
8.45
KB
-rwsr-sr-x
prove
13.24
KB
-rwxr-xr-x
prtstat
20.51
KB
-rwxr-xr-x
prune
16.7
KB
-rwxr-xr-x
ps
134.63
KB
-rwxr-xr-x
psfaddtable
20.77
KB
-rwxr-xr-x
psfgettable
20.77
KB
-rwxr-xr-x
psfstriptable
20.77
KB
-rwxr-xr-x
psfxtable
20.77
KB
-rwxr-xr-x
pslog
12.48
KB
-rwxr-xr-x
pstree
33.53
KB
-rwxr-xr-x
pstree.x11
33.53
KB
-rwxr-xr-x
ptar
3.38
KB
-rwxr-xr-x
ptardiff
2.48
KB
-rwxr-xr-x
ptargrep
4.2
KB
-rwxr-xr-x
ptaskset
4.48
KB
-rwxr-xr-x
ptx
77.98
KB
-rwxr-xr-x
pwd
37.41
KB
-rwxr-xr-x
pwdx
12.55
KB
-rwxr-xr-x
pwmake
12.26
KB
-rwxr-xr-x
pwscore
12.26
KB
-rwxr-xr-x
pydoc-3
89
B
-rwxr-xr-x
pydoc3
89
B
-rwxr-xr-x
pydoc3.6
89
B
-rwxr-xr-x
python3
11.59
KB
-rwxr-xr-x
python3.6
11.59
KB
-rwxr-xr-x
python3.6m
11.59
KB
-rwxr-xr-x
pyvenv-3
446
B
-rwxr-xr-x
pyvenv-3.6
446
B
-rwxr-xr-x
quota
91.49
KB
-rwxr-xr-x
quotasync
74.69
KB
-rwxr-xr-x
ranlib
61.95
KB
-rwxr-xr-x
raw
16.48
KB
-rwxr-xr-x
rdoc
934
B
-rwxr-xr-x
read
28
B
-rwxr-xr-x
readelf
624.54
KB
-rwxr-xr-x
readlink
45.88
KB
-rwxr-xr-x
realpath
49.93
KB
-rwxr-xr-x
recode-sr-latin
17.99
KB
-rwxr-xr-x
red
89
B
-rwxr-xr-x
rename
16.48
KB
-rwxr-xr-x
renew-dummy-cert
725
B
-rwxr-xr-x
renice
16.45
KB
-rwxr-xr-x
rescan-scsi-bus.sh
38.24
KB
-rwxr-xr-x
reset
24.72
KB
-rwxr-xr-x
resizecons
20.89
KB
-rwxr-xr-x
resolvectl
195.74
KB
-rwxr-xr-x
rev
12.45
KB
-rwxr-xr-x
ri
184
B
-rwxr-xr-x
rm
70.38
KB
-rwxr-xr-x
rmail
262
B
-rwxr-xr-x
rmail.postfix
262
B
-rwxr-xr-x
rmdir
45.46
KB
-rwxr-xr-x
rnano
254.73
KB
-rwxr-xr-x
rngtest
17.34
KB
-rwxr-xr-x
rpm
20.84
KB
-rwxr-xr-x
rpm2archive
19.84
KB
-rwxr-xr-x
rpm2cpio
11.84
KB
-rwxr-xr-x
rpmdb
16.95
KB
-rwxr-xr-x
rpmkeys
16.87
KB
-rwxr-xr-x
rpmquery
20.84
KB
-rwxr-xr-x
rpmverify
20.84
KB
-rwxr-xr-x
rsync
506.1
KB
-rwxr-xr-x
rsyslog-recover-qi.pl
5.96
KB
-rwxr-xr-x
ruby
11.84
KB
-rwxr-xr-x
run-parts
1.94
KB
-rwxr-xr-x
run-with-aspell
85
B
-rwxr-xr-x
runcon
37.36
KB
-rwxr-xr-x
rvi
1.13
MB
-rwxr-xr-x
rview
1.13
MB
-rwxr-xr-x
rvim
2.93
MB
-rwxr-xr-x
sa-awl
4.9
KB
-rwxr-xr-x
sa-check_spamd
14.52
KB
-rwxr-xr-x
sa-learn
44.83
KB
-rwxr-xr-x
sa-update
72.6
KB
-rwxr-xr-x
sandbox
17.62
KB
-rwxr-xr-x
sccmap
20.59
KB
-rwxr-xr-x
scl
36.95
KB
-rwxr-xr-x
scl_enabled
258
B
-rwxr-xr-x
scl_source
1.82
KB
-rwxr-xr-x
scp
102.82
KB
-rwxr-xr-x
screen
482.46
KB
-rwxr-sr-x
script
36.82
KB
-rwxr-xr-x
scriptreplay
28.98
KB
-rwxr-xr-x
scsi-rescan
38.24
KB
-rwxr-xr-x
scsi_logging_level
8.38
KB
-rwxr-xr-x
scsi_mandat
3.52
KB
-rwxr-xr-x
scsi_readcap
1.3
KB
-rwxr-xr-x
scsi_ready
1.09
KB
-rwxr-xr-x
scsi_satl
3.77
KB
-rwxr-xr-x
scsi_start
1.25
KB
-rwxr-xr-x
scsi_stop
1.44
KB
-rwxr-xr-x
scsi_temperature
936
B
-rwxr-xr-x
sdiff
105.33
KB
-rwxr-xr-x
sealert
26.97
KB
-rwxr-xr-x
secon
25.45
KB
-rwxr-xr-x
secret-tool
21.17
KB
-rwxr-xr-x
sed
115.48
KB
-rwxr-xr-x
sedismod
273.66
KB
-rwxr-xr-x
sedispol
198.48
KB
-rwxr-xr-x
semodule_expand
12.27
KB
-rwxr-xr-x
semodule_link
12.27
KB
-rwxr-xr-x
semodule_package
16.67
KB
-rwxr-xr-x
semodule_unpackage
12.28
KB
-rwxr-xr-x
seq
53.45
KB
-rwxr-xr-x
sessreg
17.38
KB
-rwxr-xr-x
setarch
20.75
KB
-rwxr-xr-x
setfacl
41.48
KB
-rwxr-xr-x
setfattr
23.19
KB
-rwxr-xr-x
setfont
45.3
KB
-rwxr-xr-x
setkeycodes
12.69
KB
-rwxr-xr-x
setleds
16.72
KB
-rwxr-xr-x
setmetamode
12.76
KB
-rwxr-xr-x
setpriv
45.15
KB
-rwxr-xr-x
setsid
16.37
KB
-rwxr-xr-x
setterm
45.12
KB
-rwxr-xr-x
setup-nsssysinit
1.5
KB
-rwxr-xr-x
setup-nsssysinit.sh
1.5
KB
-rwxr-xr-x
setvtrgb
16.77
KB
-rwxr-xr-x
sfdp
12.23
KB
-rwxr-xr-x
sftp
159.73
KB
-rwxr-xr-x
sg
42.45
KB
-rwsr-xr-x
sg_bg_ctl
16.07
KB
-rwxr-xr-x
sg_compare_and_write
20.9
KB
-rwxr-xr-x
sg_copy_results
20.81
KB
-rwxr-xr-x
sg_dd
44.58
KB
-rwxr-xr-x
sg_decode_sense
20.33
KB
-rwxr-xr-x
sg_emc_trespass
12.26
KB
-rwxr-xr-x
sg_format
33.37
KB
-rwxr-xr-x
sg_get_config
33.31
KB
-rwxr-xr-x
sg_get_lba_status
20.46
KB
-rwxr-xr-x
sg_ident
16.17
KB
-rwxr-xr-x
sg_inq
117.91
KB
-rwxr-xr-x
sg_logs
150.02
KB
-rwxr-xr-x
sg_luns
24.85
KB
-rwxr-xr-x
sg_map
16.41
KB
-rwxr-xr-x
sg_map26
24.87
KB
-rwxr-xr-x
sg_modes
43.88
KB
-rwxr-xr-x
sg_opcodes
28.69
KB
-rwxr-xr-x
sg_persist
34.13
KB
-rwxr-xr-x
sg_prevent
12.07
KB
-rwxr-xr-x
sg_raw
24.38
KB
-rwxr-xr-x
sg_rbuf
20.84
KB
-rwxr-xr-x
sg_rdac
15.88
KB
-rwxr-xr-x
sg_read
24.41
KB
-rwxr-xr-x
sg_read_attr
34.79
KB
-rwxr-xr-x
sg_read_block_limits
12.12
KB
-rwxr-xr-x
sg_read_buffer
20.96
KB
-rwxr-xr-x
sg_read_long
16.27
KB
-rwxr-xr-x
sg_readcap
20.86
KB
-rwxr-xr-x
sg_reassign
16.22
KB
-rwxr-xr-x
sg_referrals
16.23
KB
-rwxr-xr-x
sg_rep_zones
20.66
KB
-rwxr-xr-x
sg_requests
16.3
KB
-rwxr-xr-x
sg_reset
16.73
KB
-rwxr-xr-x
sg_reset_wp
16.17
KB
-rwxr-xr-x
sg_rmsn
12.06
KB
-rwxr-xr-x
sg_rtpg
16.16
KB
-rwxr-xr-x
sg_safte
20.27
KB
-rwxr-xr-x
sg_sanitize
24.58
KB
-rwxr-xr-x
sg_sat_identify
16.71
KB
-rwxr-xr-x
sg_sat_phy_event
20.59
KB
-rwxr-xr-x
sg_sat_read_gplog
16.3
KB
-rwxr-xr-x
sg_sat_set_features
16.27
KB
-rwxr-xr-x
sg_scan
16.5
KB
-rwxr-xr-x
sg_seek
16.85
KB
-rwxr-xr-x
sg_senddiag
25.27
KB
-rwxr-xr-x
sg_ses
118.23
KB
-rwxr-xr-x
sg_ses_microcode
29.48
KB
-rwxr-xr-x
sg_start
20.93
KB
-rwxr-xr-x
sg_stpg
20.3
KB
-rwxr-xr-x
sg_stream_ctl
20.27
KB
-rwxr-xr-x
sg_sync
16.22
KB
-rwxr-xr-x
sg_test_rwbuf
20.73
KB
-rwxr-xr-x
sg_timestamp
20.74
KB
-rwxr-xr-x
sg_turs
16.74
KB
-rwxr-xr-x
sg_unmap
24.32
KB
-rwxr-xr-x
sg_verify
20.46
KB
-rwxr-xr-x
sg_vpd
108.75
KB
-rwxr-xr-x
sg_wr_mode
20.3
KB
-rwxr-xr-x
sg_write_buffer
21.24
KB
-rwxr-xr-x
sg_write_long
16.33
KB
-rwxr-xr-x
sg_write_same
24.48
KB
-rwxr-xr-x
sg_write_verify
20.78
KB
-rwxr-xr-x
sg_write_x
53.75
KB
-rwxr-xr-x
sg_xcopy
40.59
KB
-rwxr-xr-x
sg_zone
16.3
KB
-rwxr-xr-x
sginfo
74.85
KB
-rwxr-xr-x
sgm_dd
32.55
KB
-rwxr-xr-x
sgp_dd
36.95
KB
-rwxr-xr-x
sh
1.1
MB
-rwxr-xr-x
sha1hmac
32.82
KB
-rwxr-xr-x
sha1sum
45.54
KB
-rwxr-xr-x
sha224hmac
32.82
KB
-rwxr-xr-x
sha224sum
45.58
KB
-rwxr-xr-x
sha256hmac
32.82
KB
-rwxr-xr-x
sha256sum
45.58
KB
-rwxr-xr-x
sha384hmac
32.82
KB
-rwxr-xr-x
sha384sum
45.58
KB
-rwxr-xr-x
sha512hmac
32.82
KB
-rwxr-xr-x
sha512sum
45.58
KB
-rwxr-xr-x
shasum
9.66
KB
-rwxr-xr-x
showconsolefont
20.85
KB
-rwxr-xr-x
showkey
16.7
KB
-rwxr-xr-x
showrgb
13.05
KB
-rwxr-xr-x
shred
61.86
KB
-rwxr-xr-x
shuf
58.08
KB
-rwxr-xr-x
sim_client
16.27
KB
-rwxr-xr-x
sim_lsmplugin
1.22
KB
-rwxr-xr-x
simc_lsmplugin
118.55
KB
-rwxr-xr-x
size
33.23
KB
-rwxr-xr-x
skill
28.66
KB
-rwxr-xr-x
slabinfo
36.14
KB
-rwxr-xr-x
slabtop
20.7
KB
-rwxr-xr-x
sleep
37.38
KB
-rwxr-xr-x
slencheck
13.07
KB
-rwxr-xr-x
snice
28.66
KB
-rwxr-xr-x
soelim
42.55
KB
-rwxr-xr-x
sort
123.45
KB
-rwxr-xr-x
sotruss
4.18
KB
-rwxr-xr-x
spamassassin
29.39
KB
-rwxr-xr-x
spamc
50.15
KB
-rwxr-xr-x
spamd
127.63
KB
-rwxr-xr-x
spell
122
B
-rwxr-xr-x
spfd
17.96
KB
-rw-r--r--
spfd.perl-Mail-SPF
17.96
KB
-rw-r--r--
spfquery
22.45
KB
-rwxr-xr-x
spfquery.perl-Mail-SPF
22.45
KB
-rwxr-xr-x
spinner
2.38
KB
-rwxr-xr-x
splain
18.7
KB
-rwxr-xr-x
split
58.02
KB
-rwxr-xr-x
sprof
28.66
KB
-rwxr-xr-x
sqlite3
1.28
MB
-rwxr-xr-x
sscg
57.1
KB
-rwxr-xr-x
ssh
757.46
KB
-rwxr-xr-x
ssh-add
346.15
KB
-rwxr-xr-x
ssh-agent
325.6
KB
-rwxr-xr-x
ssh-copy-id
10.44
KB
-rwxr-xr-x
ssh-keygen
427.17
KB
-rwxr-xr-x
ssh-keyscan
428.53
KB
-rwxr-xr-x
sss_ssh_authorizedkeys
24.76
KB
-rwxr-xr-x
sss_ssh_knownhostsproxy
28.76
KB
-rwxr-xr-x
stat
86.14
KB
-rwxr-xr-x
stdbuf
49.49
KB
-rwxr-xr-x
strace
1.97
MB
-rwxr-xr-x
strace-log-merge
1.78
KB
-rwxr-xr-x
strings
37.42
KB
-rwxr-xr-x
strip
240.07
KB
-rwxr-xr-x
stty
77.59
KB
-rwxr-xr-x
su
48.98
KB
-rwsr-xr-x
sudo
161.77
KB
---s--x--x
sudoedit
161.77
KB
---s--x--x
sudoreplay
61.79
KB
---x--x--x
sum
45.52
KB
-rwxr-xr-x
symlinks
17.16
KB
-rwxr-xr-x
sync
37.34
KB
-rwxr-xr-x
systemctl
218.45
KB
-rwxr-xr-x
systemd-analyze
1.55
MB
-rwxr-xr-x
systemd-ask-password
12.02
KB
-rwxr-xr-x
systemd-cat
16.02
KB
-rwxr-xr-x
systemd-cgls
16.43
KB
-rwxr-xr-x
systemd-cgtop
32.88
KB
-rwxr-xr-x
systemd-delta
24.44
KB
-rwxr-xr-x
systemd-detect-virt
11.87
KB
-rwxr-xr-x
systemd-escape
16
KB
-rwxr-xr-x
systemd-firstboot
36.98
KB
-rwxr-xr-x
systemd-hwdb
28.9
KB
-rwxr-xr-x
systemd-inhibit
16.02
KB
-rwxr-xr-x
systemd-machine-id-setup
24.74
KB
-rwxr-xr-x
systemd-mount
52.63
KB
-rwxr-xr-x
systemd-notify
16.02
KB
-rwxr-xr-x
systemd-path
16.01
KB
-rwxr-xr-x
systemd-resolve
195.74
KB
-rwxr-xr-x
systemd-run
48.93
KB
-rwxr-xr-x
systemd-socket-activate
24.77
KB
-rwxr-xr-x
systemd-stdio-bridge
16.03
KB
-rwxr-xr-x
systemd-sysusers
53.05
KB
-rwxr-xr-x
systemd-tmpfiles
73.29
KB
-rwxr-xr-x
systemd-tty-ask-password-agent
32.81
KB
-rwxr-xr-x
systemd-umount
52.63
KB
-rwxr-xr-x
tabs
16.52
KB
-rwxr-xr-x
tac
41.48
KB
-rwxr-xr-x
tail
74.14
KB
-rwxr-xr-x
tar
449
KB
-rwxr-xr-x
taskset
37.25
KB
-rwxr-xr-x
tbl
154.61
KB
-rwxr-xr-x
tcamgr
25.13
KB
-rwxr-xr-x
tcamttest
21.16
KB
-rwxr-xr-x
tcatest
57.6
KB
-rwxr-xr-x
tcbmgr
29.1
KB
-rwxr-xr-x
tcbmttest
53.22
KB
-rwxr-xr-x
tcbtest
69.56
KB
-rwxr-xr-x
tcfmgr
25.09
KB
-rwxr-xr-x
tcfmttest
37.2
KB
-rwxr-xr-x
tcftest
45.18
KB
-rwxr-xr-x
tchmgr
25.09
KB
-rwxr-xr-x
tchmttest
49.22
KB
-rwxr-xr-x
tchtest
57.53
KB
-rwxr-xr-x
tclsh
9.04
KB
-rwxr-xr-x
tclsh8.6
9.04
KB
-rwxr-xr-x
tcptraceroute
1.54
KB
-rwxr-xr-x
tctmgr
37.09
KB
-rwxr-xr-x
tctmttest
45.2
KB
-rwxr-xr-x
tcttest
57.19
KB
-rwxr-xr-x
tcucodec
37.08
KB
-rwxr-xr-x
tcumttest
25.16
KB
-rwxr-xr-x
tcutest
73.17
KB
-rwxr-xr-x
teamd
160.63
KB
-rwxr-xr-x
teamdctl
30.52
KB
-rwxr-xr-x
teamnl
20.59
KB
-rwxr-xr-x
tee
41.47
KB
-rwxr-xr-x
telnet
104.88
KB
-rwxr-xr-x
test
53.55
KB
-rwxr-xr-x
tic
85.23
KB
-rwxr-xr-x
time
27.54
KB
-rwxr-xr-x
timedatectl
36.95
KB
-rwxr-xr-x
timeout
41.85
KB
-rwxr-xr-x
tload
16.62
KB
-rwxr-xr-x
tmon
39.62
KB
-rwxr-xr-x
tmux
589.49
KB
-rwxr-xr-x
toe
16.42
KB
-rwxr-xr-x
top
121.57
KB
-rwxr-xr-x
touch
93.92
KB
-rwxr-xr-x
tput
24.73
KB
-rwxr-xr-x
tr
49.62
KB
-rwxr-xr-x
tracepath
20.44
KB
-rwxr-xr-x
tracer
1.15
KB
-rwxr-xr-x
traceroute
79.56
KB
-rwxr-xr-x
traceroute6
79.56
KB
-rwxr-xr-x
tred
16.55
KB
-rwxr-xr-x
tree
81.59
KB
-rwxr-xr-x
troff
805.02
KB
-rwxr-xr-x
true
33.32
KB
-rwxr-xr-x
truncate
41.35
KB
-rwxr-xr-x
trust
215.59
KB
-rwxr-xr-x
tset
24.72
KB
-rwxr-xr-x
tsort
41.48
KB
-rwxr-xr-x
tty
33.3
KB
-rwxr-xr-x
turbostat
122.38
KB
-rwxr-xr-x
twopi
12.23
KB
-rwxr-xr-x
type
28
B
-rwxr-xr-x
tzselect
15.01
KB
-rwxr-xr-x
ucs2any
24.41
KB
-rwxr-xr-x
udevadm
424.55
KB
-rwxr-xr-x
ul
20.57
KB
-rwxr-xr-x
ulimit
30
B
-rwxr-xr-x
umask
29
B
-rwxr-xr-x
umount
32.74
KB
-rwsr-xr-x
unalias
31
B
-rwxr-xr-x
uname
37.33
KB
-rwxr-xr-x
uname26
20.75
KB
-rwxr-xr-x
unexpand
45.59
KB
-rwxr-xr-x
unflatten
16.59
KB
-rwxr-xr-x
unicode_start
2.55
KB
-rwxr-xr-x
unicode_stop
363
B
-rwxr-xr-x
uniq
49.63
KB
-rwxr-xr-x
unix2dos
58.53
KB
-rwxr-xr-x
unix2mac
58.53
KB
-rwxr-xr-x
unlink
33.33
KB
-rwxr-xr-x
unpigz
125.38
KB
-rwxr-xr-x
unshare
24.92
KB
-rwxr-xr-x
unversioned-python
157
B
-rwxr-xr-x
unxz
82.09
KB
-rwxr-xr-x
unzip
201.98
KB
-rwxr-xr-x
unzipsfx
101.59
KB
-rwxr-xr-x
update-ca-trust
1.24
KB
-rwxr-xr-x
update-crypto-policies
87
B
-rwxr-xr-x
update-gtk-immodules
313
B
-rwxr-xr-x
update-mime-database
53.92
KB
-rwxr-xr-x
updatedb
53.84
KB
-rwxr-xr-x
uptime
12.45
KB
-rwxr-xr-x
usb-devices
4.01
KB
-rwxr-xr-x
usbhid-dump
31.04
KB
-rwxr-xr-x
users
37.38
KB
-rwxr-xr-x
usleep
11.85
KB
-rwxr-xr-x
utmpdump
28.68
KB
-rwxr-xr-x
uuclient
15.87
KB
-rwxr-xr-x
uuidgen
16.37
KB
-rwxr-xr-x
uuidparse
37.13
KB
-rwxr-xr-x
vdir
139.88
KB
-rwxr-xr-x
vdo
5
KB
-rwxr-xr-x
vdo-by-dev
1.83
KB
-rwxr-xr-x
vdodmeventd
62.44
KB
-rwxr-xr-x
vdodumpconfig
536.56
KB
-rwxr-xr-x
vdoforcerebuild
524.62
KB
-rwxr-xr-x
vdoformat
548.9
KB
-rwxr-xr-x
vdosetuuid
536.57
KB
-rwxr-xr-x
vdostats
10.26
KB
-rwxr-xr-x
verify_blkparse
14.52
KB
-rwxr-xr-x
vi
1.13
MB
-rwxr-xr-x
view
1.13
MB
-rwxr-xr-x
vim
2.93
MB
-rwxr-xr-x
vimdiff
2.93
MB
-rwxr-xr-x
vimdot
1.06
KB
-rwxr-xr-x
vimtutor
2.07
KB
-rwxr-xr-x
virtualmin-config-system
3.22
KB
-rwxr-xr-x
vlock
20.98
KB
-rwxr-xr-x
vmstat
36.66
KB
-rwxr-xr-x
vnstat
153.03
KB
-rwxr-xr-x
w
20.61
KB
-rwxr-xr-x
wait
28
B
-rwxr-xr-x
wall
33.05
KB
-rwxr-xr-x
watch
29.05
KB
-rwxr-xr-x
watchgnupg
16.43
KB
-rwxr-xr-x
wc
49.66
KB
-rwxr-xr-x
wcmgr
24.66
KB
-rwxr-xr-x
wdctl
36.97
KB
-rwxr-xr-x
webalizer
197.15
KB
-rwxr-xr-x
webazolver
197.15
KB
-rwxr-xr-x
webmin
14.57
KB
-rwxr-xr-x
wget
521.64
KB
-rwxr-xr-x
whatis
54.04
KB
-rwxr-xr-x
whereis
29.27
KB
-rwxr-xr-x
which
29.37
KB
-rwxr-xr-x
whiptail
33.09
KB
-rwxr-xr-x
who
53.58
KB
-rwxr-xr-x
whoami
33.33
KB
-rwxr-xr-x
word-list-compress
11.99
KB
-rwxr-xr-x
wp
6.61
MB
-rwxrwxr-x
write
20.61
KB
-rwxr-sr-x
x86_64
20.75
KB
-rwxr-xr-x
x86_64-redhat-linux-c++
1.21
MB
-rwxr-xr-x
x86_64-redhat-linux-g++
1.21
MB
-rwxr-xr-x
x86_64-redhat-linux-gcc
1.21
MB
-rwxr-xr-x
x86_64-redhat-linux-gcc-8
1.21
MB
-rwxr-xr-x
x86_64-redhat-linux-gnu-pkg-co...
424
B
-rwxr-xr-x
x86_energy_perf_policy
31.95
KB
-rwxr-xr-x
xargs
88.2
KB
-rwxr-xr-x
xgamma
17.08
KB
-rwxr-xr-x
xgettext
283.88
KB
-rwxr-xr-x
xhost
17.12
KB
-rwxr-xr-x
xinput
63.61
KB
-rwxr-xr-x
xkill
17.1
KB
-rwxr-xr-x
xml2-config
1.71
KB
-rwxr-xr-x
xmlcatalog
20.36
KB
-rwxr-xr-x
xmllint
73.36
KB
-rwxr-xr-x
xmlwf
32.95
KB
-rwxr-xr-x
xmodmap
39.98
KB
-rwxr-xr-x
xorg-x11-fonts-update-dirs
1.29
KB
-rwxr--r--
xrandr
65.46
KB
-rwxr-xr-x
xrdb
33.98
KB
-rwxr-xr-x
xrefresh
17.94
KB
-rwxr-xr-x
xset
37.2
KB
-rwxr-xr-x
xsetpointer
13.05
KB
-rwxr-xr-x
xsetroot
21.44
KB
-rwxr-xr-x
xsltproc
28.42
KB
-rwxr-xr-x
xstdcmap
17.68
KB
-rwxr-xr-x
xsubpp
4.96
KB
-rwxr-xr-x
xxd
20.52
KB
-rwxr-xr-x
xz
82.09
KB
-rwxr-xr-x
xzcat
82.09
KB
-rwxr-xr-x
xzcmp
6.48
KB
-rwxr-xr-x
xzdec
16.48
KB
-rwxr-xr-x
xzdiff
6.48
KB
-rwxr-xr-x
xzegrep
5.76
KB
-rwxr-xr-x
xzfgrep
5.76
KB
-rwxr-xr-x
xzgrep
5.76
KB
-rwxr-xr-x
xzless
1.76
KB
-rwxr-xr-x
xzmore
2.11
KB
-rwxr-xr-x
yes
33.36
KB
-rwxr-xr-x
ypdomainname
21.16
KB
-rwxr-xr-x
yum
1.91
KB
-rwxr-xr-x
zcat
1.94
KB
-rwxr-xr-x
zcmp
1.64
KB
-rwxr-xr-x
zdiff
5.74
KB
-rwxr-xr-x
zegrep
29
B
-rwxr-xr-x
zfgrep
29
B
-rwxr-xr-x
zforce
2.03
KB
-rwxr-xr-x
zgrep
7.4
KB
-rwxr-xr-x
zip
229
KB
-rwxr-xr-x
zipcloak
102.91
KB
-rwxr-xr-x
zipdetails
49.39
KB
-rwxr-xr-x
zipgrep
2.88
KB
-rwxr-xr-x
zipinfo
201.98
KB
-rwxr-xr-x
zipnote
97.76
KB
-rwxr-xr-x
zipsplit
97.76
KB
-rwxr-xr-x
zless
2.15
KB
-rwxr-xr-x
zmore
1.8
KB
-rwxr-xr-x
znew
4.45
KB
-rwxr-xr-x
zsoelim
42.55
KB
-rwxr-xr-x
zts-php
5.01
MB
-rwxr-xr-x
zts-php-config
5.29
KB
-rwxr-xr-x
zts-phpize
4.66
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : pcp2csv
#!/usr/bin/pmpython # # Copyright (C) 2015-2021 Marko Myllynen <myllynen@redhat.com> # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # 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. # pylint: disable=superfluous-parens # pylint: disable=invalid-name, line-too-long, no-self-use # pylint: disable=too-many-boolean-expressions, too-many-statements # pylint: disable=too-many-instance-attributes, too-many-locals # pylint: disable=too-many-branches, too-many-nested-blocks # pylint: disable=broad-except, too-many-arguments # pylint: disable=too-many-lines, too-many-public-methods """ Performance Metrics Reporter """ # Common imports from collections import OrderedDict import errno import sys # Our imports from datetime import datetime, timedelta import signal import shutil import time import math import re import os # PCP Python PMAPI from pcp import pmapi, pmi, pmconfig from cpmapi import PM_CONTEXT_ARCHIVE, PM_CONTEXT_LOCAL from cpmapi import PM_INDOM_NULL, PM_IN_NULL, PM_DEBUG_APPL1, PM_TIME_SEC from cpmapi import PM_SEM_DISCRETE, PM_TYPE_STRING from cpmapi import PM_TEXT_PMID, PM_TEXT_INDOM, PM_TEXT_ONELINE, PM_TEXT_HELP from cpmapi import PM_LABEL_INDOM, PM_LABEL_INSTANCES from cpmapi import PM_LABEL_DOMAIN, PM_LABEL_CLUSTER, PM_LABEL_ITEM from cpmi import PMI_ERR_DUPINSTNAME, PMI_ERR_DUPTEXT if sys.version_info[0] >= 3: long = int # pylint: disable=redefined-builtin # Default config DEFAULT_CONFIG = ["./pmrep.conf", "$HOME/.pmrep.conf", "$HOME/.pcp/pmrep.conf", "$PCP_SYSCONF_DIR/pmrep/pmrep.conf", "$PCP_SYSCONF_DIR/pmrep"] # Defaults CONFVER = 1 CSVSEP = "," CSVTIME = "%Y-%m-%d %H:%M:%S" OUTSEP = " " OUTTIME = "%H:%M:%S" NO_VAL = "N/A" NO_INST = "~" SINGULR = "=" # pmrep output targets OUTPUT_ARCHIVE = "archive" OUTPUT_CSV = "csv" OUTPUT_STDOUT = "stdout" class PMReporter(object): """ Report PCP metrics """ def __init__(self): """ Construct object, prepare for command line handling """ self.context = None self.daemonize = 0 self.pmconfig = pmconfig.pmConfig(self) self.opts = self.options() # Configuration directives self.keys = ('source', 'output', 'derived', 'header', 'globals', 'samples', 'interval', 'type', 'precision', 'daemonize', 'timestamp', 'unitinfo', 'colxrow', 'separate_header', 'fixed_header', 'delay', 'width', 'delimiter', 'extcsv', 'width_force', 'extheader', 'repeat_header', 'timefmt', 'interpol', 'dynamic_header', 'overall_rank', 'overall_rank_alt', 'sort_metric', 'count_scale', 'space_scale', 'time_scale', 'version', 'count_scale_force', 'space_scale_force', 'time_scale_force', 'type_prefer', 'precision_force', 'limit_filter', 'limit_filter_force', 'live_filter', 'rank', 'invert_filter', 'predicate', 'names_change', 'speclocal', 'instances', 'ignore_incompat', 'ignore_unknown', 'omit_flat', 'instinfo', 'include_labels', 'include_texts') # The order of preference for options (as present): # 1 - command line options # 2 - options from configuration file(s) # 3 - built-in defaults defined below self.check = 0 self.version = CONFVER self.source = "local:" self.output = OUTPUT_STDOUT self.speclocal = None self.derived = None self.header = 1 self.instinfo = 1 self.unitinfo = 1 self.globals = 1 self.timestamp = 0 self.samples = None # forever self.interval = pmapi.timeval(1) # 1 sec self.opts.pmSetOptionInterval(str(1)) # 1 sec self.delay = 0 self.type = 0 self.type_prefer = self.type self.ignore_incompat = 0 self.ignore_unknown = 0 self.names_change = 0 # ignore self.instances = [] self.live_filter = 0 self.rank = 0 self.overall_rank = 0 self.overall_rank_alt = 0 self.limit_filter = 0 self.limit_filter_force = 0 self.invert_filter = 0 self.predicate = None self.sort_metric = None self.omit_flat = 0 self.include_labels = 0 self.include_texts = 0 self.colxrow = None self.width = 0 self.width_force = None self.precision = 3 # .3f self.precision_force = None self.delimiter = None self.extcsv = 0 self.extheader = 0 self.fixed_header = 0 self.repeat_header = 0 self.dynamic_header = 0 self.separate_header = 0 self.timefmt = None self.interpol = 1 self.count_scale = None self.count_scale_force = None self.space_scale = None self.space_scale_force = None self.time_scale = None self.time_scale_force = None # Not in pmrep.conf, won't overwrite self.outfile = None # Internal self.format = None # stdout format self.writer = None self.pmi = None self.lines = 0 self.localtz = None self.prev_ts = None self.runtime = -1 self.found_insts = [] self.prev_insts = None self.static_header = 1 self.repeat_header_auto = 0 # Performance metrics store # key - metric name # values - 0:txt label, 1:instance(s), 2:unit/scale, 3:type, # 4:width, 5:pmfg item, 6:precision, 7:limit self.metrics = OrderedDict() self.pmfg = None self.pmfg_ts = None # Read configuration and prepare to connect self.config = self.pmconfig.set_config_path(DEFAULT_CONFIG) self.pmconfig.read_options() self.pmconfig.read_cmd_line() self.pmconfig.prepare_metrics() self.pmconfig.set_signal_handler() def options(self): """ Setup default command line argument option handling """ opts = pmapi.pmOptions() opts.pmSetOptionCallback(self.option) opts.pmSetOverrideCallback(self.option_override) opts.pmSetShortOptions("a:h:LK:c:Co:F:e:D:V?HUGpA:S:T:O:s:t:Z:zdrRIi:jJ:234:578:9:nN:6:vmX:W:w:P:0:l:kxE:1gf:uq:b:y:Q:B:Y:") opts.pmSetShortUsage("[option...] metricspec [...]") opts.pmSetLongOptionHeader("General options") opts.pmSetLongOptionArchive() # -a/--archive opts.pmSetLongOptionArchiveFolio() # --archive-folio opts.pmSetLongOptionContainer() # --container opts.pmSetLongOptionHost() # -h/--host opts.pmSetLongOptionLocalPMDA() # -L/--local-PMDA opts.pmSetLongOptionSpecLocal() # -K/--spec-local opts.pmSetLongOption("config", 1, "c", "FILE", "config file path") opts.pmSetLongOption("check", 0, "C", "", "check config and metrics and exit") opts.pmSetLongOption("output", 1, "o", "OUTPUT", "output target: archive, csv, stdout (default)") opts.pmSetLongOption("output-file", 1, "F", "OUTFILE", "output file") opts.pmSetLongOption("derived", 1, "e", "FILE|DFNT", "derived metrics definitions") opts.pmSetLongOption("daemonize", 0, "", "", "daemonize on startup") opts.pmSetLongOptionDebug() # -D/--debug opts.pmSetLongOptionVersion() # -V/--version opts.pmSetLongOptionHelp() # -?/--help opts.pmSetLongOptionHeader("Reporting options") opts.pmSetLongOption("no-header", 0, "H", "", "omit headers") opts.pmSetLongOption("no-unit-info", 0, "U", "", "omit unit info from headers") opts.pmSetLongOption("no-inst-info", 0, "", "", "omit instance info from headers") opts.pmSetLongOption("no-globals", 0, "G", "", "omit global metrics") opts.pmSetLongOption("timestamps", 0, "p", "", "print timestamps") opts.pmSetLongOptionAlign() # -A/--align opts.pmSetLongOptionStart() # -S/--start opts.pmSetLongOptionFinish() # -T/--finish opts.pmSetLongOptionOrigin() # -O/--origin opts.pmSetLongOptionSamples() # -s/--samples opts.pmSetLongOptionInterval() # -t/--interval opts.pmSetLongOptionTimeZone() # -Z/--timezone opts.pmSetLongOptionHostZone() # -z/--hostzone opts.pmSetLongOption("delay", 0, "d", "", "delay, pause between updates for archive replay") opts.pmSetLongOption("raw", 0, "r", "", "output raw counter values (no rate conversion)") opts.pmSetLongOption("raw-prefer", 0, "R", "", "prefer output raw counter values (no rate conversion)") opts.pmSetLongOption("ignore-incompat", 0, "I", "", "ignore incompatible instances (default: abort)") opts.pmSetLongOption("ignore-unknown", 0, "5", "", "ignore unknown metrics (default: abort)") opts.pmSetLongOption("instances", 1, "i", "STR", "instances to report (default: all current)") opts.pmSetLongOption("live-filter", 0, "j", "", "perform instance live filtering") opts.pmSetLongOption("rank", 1, "J", "COUNT", "limit results to COUNT highest/lowest valued instances") opts.pmSetLongOption("overall-rank", 0, "2", "", "report overall ranking from archive") opts.pmSetLongOption("overall-rank-alt", 0, "3", "", "report overall ranking from archive in pmrep format") opts.pmSetLongOption("names-change", 1, "4", "ACTION", "update/ignore/abort on PMNS changes (default: ignore)") opts.pmSetLongOption("limit-filter", 1, "8", "LIMIT", "default limit for value filtering") opts.pmSetLongOption("limit-filter-force", 1, "9", "LIMIT", "forced limit for value filtering") opts.pmSetLongOption("invert-filter", 0, "n", "", "perform ranking before live filtering") opts.pmSetLongOption("predicate", 1, "N", "METRIC", "set predicate filter reference metric") opts.pmSetLongOption("sort-metric", 1, "6", "METRIC", "set sort reference metric for colxrow output") opts.pmSetLongOption("omit-flat", 0, "v", "", "omit single-valued metrics") opts.pmSetLongOption("include-labels", 0, "m", "", "include metric label info") opts.pmSetLongOption("include-texts", 0, "", "", "include metric help texts in archive output") opts.pmSetLongOption("colxrow", 1, "X", "STR", "swap stdout columns and rows using STR as header label") opts.pmSetLongOption("width", 1, "w", "N", "default column width") opts.pmSetLongOption("width-force", 1, "W", "N", "forced column width") opts.pmSetLongOption("precision", 1, "P", "N", "prefer N digits after decimal separator (default: 3)") opts.pmSetLongOption("precision-force", 1, "0", "N", "force N digits after decimal separator") opts.pmSetLongOption("delimiter", 1, "l", "STR", "delimiter to separate csv/stdout columns") opts.pmSetLongOption("extended-csv", 0, "k", "", "write extended CSV") opts.pmSetLongOption("extended-header", 0, "x", "", "display extended header") opts.pmSetLongOption("fixed-header", 0, "7", "", "fixed header and dynamic instances with colxrow output") opts.pmSetLongOption("repeat-header", 1, "E", "N", "repeat stdout headers every N lines") opts.pmSetLongOption("dynamic-header", 0, "1", "", "update header dynamically on metric/instance changes") opts.pmSetLongOption("separate-header", 0, "g", "", "write separated header before metrics") opts.pmSetLongOption("timestamp-format", 1, "f", "STR", "strftime string for timestamp format") opts.pmSetLongOption("no-interpol", 0, "u", "", "disable interpolation mode with archives") opts.pmSetLongOption("count-scale", 1, "q", "SCALE", "default count unit") opts.pmSetLongOption("count-scale-force", 1, "Q", "SCALE", "forced count unit") opts.pmSetLongOption("space-scale", 1, "b", "SCALE", "default space unit") opts.pmSetLongOption("space-scale-force", 1, "B", "SCALE", "forced space unit") opts.pmSetLongOption("time-scale", 1, "y", "SCALE", "default time unit") opts.pmSetLongOption("time-scale-force", 1, "Y", "SCALE", "forced time unit") return opts def option_override(self, opt): """ Override standard PCP options """ if opt in ('g', 'H', 'K', 'n', 'N', 'p'): return 1 return 0 def option(self, opt, optarg, _index): """ Perform setup for individual command line option """ if opt == 'daemonize': self.daemonize = 1 elif opt == 'include-texts': self.include_texts = 1 elif opt == 'no-inst-info': self.instinfo = 0 elif opt == 'K': if not self.speclocal or not self.speclocal.startswith(";"): self.speclocal = ";" + optarg else: self.speclocal = self.speclocal + ";" + optarg elif opt == 'c': self.config = optarg elif opt == 'C': self.check = 1 elif opt == 'o': self.output = optarg elif opt == 'F': if os.path.exists(optarg + ".index"): sys.stderr.write("Archive %s already exists.\n" % optarg) sys.exit(1) if os.path.exists(optarg): kind = "File" if os.path.isfile(optarg) else "Directory" sys.stderr.write("%s %s already exists.\n" % (kind, optarg)) sys.exit(1) self.outfile = optarg elif opt == 'e': if not self.derived or not self.derived.startswith(";"): self.derived = ";" + optarg else: self.derived = self.derived + ";" + optarg elif opt == 'H': self.header = 0 elif opt == 'U': self.unitinfo = 0 elif opt == 'G': self.globals = 0 elif opt == 'p': self.timestamp = 1 elif opt == 'd': self.delay = 1 elif opt == 'r': self.type = 1 elif opt == 'R': self.type_prefer = 1 elif opt == 'I': self.ignore_incompat = 1 elif opt == '5': self.ignore_unknown = 1 elif opt == 'i': self.instances = self.instances + self.pmconfig.parse_instances(optarg) elif opt == 'j': self.live_filter = 1 elif opt == 'J': self.rank = optarg elif opt == '2': self.overall_rank = 1 elif opt == '3': self.overall_rank_alt = 1 elif opt == '4': if optarg == 'ignore': self.names_change = 0 elif optarg == 'abort': self.names_change = 1 elif optarg == 'update': self.names_change = 2 else: sys.stderr.write("Unknown names-change action '%s' specified.\n" % optarg) sys.exit(1) elif opt == '8': self.limit_filter = optarg elif opt == '9': self.limit_filter_force = optarg elif opt == 'n': self.invert_filter = 1 elif opt == 'N': self.predicate = optarg elif opt == '6': self.sort_metric = optarg elif opt == 'v': self.omit_flat = 1 elif opt == 'm': self.include_labels = 1 elif opt == 'X': self.colxrow = optarg elif opt == 'w': self.width = optarg elif opt == 'W': self.width_force = optarg elif opt == 'P': self.precision = optarg elif opt == '0': self.precision_force = optarg elif opt == 'l': self.delimiter = optarg elif opt == 'k': self.extcsv = 1 elif opt == 'x': self.extheader = 1 elif opt == 'E': self.repeat_header = optarg elif opt == '7': self.fixed_header = 1 elif opt == '1': self.dynamic_header = 1 elif opt == 'g': self.separate_header = 1 elif opt == 'f': self.timefmt = optarg elif opt == 'u': self.interpol = 0 elif opt == 'q': self.count_scale = optarg elif opt == 'Q': self.count_scale_force = optarg elif opt == 'b': self.space_scale = optarg elif opt == 'B': self.space_scale_force = optarg elif opt == 'y': self.time_scale = optarg elif opt == 'Y': self.time_scale_force = optarg else: raise pmapi.pmUsageErr() def connect(self): """ Establish PMAPI context """ context, self.source = pmapi.pmContext.set_connect_options(self.opts, self.source, self.speclocal) self.pmfg = pmapi.fetchgroup(context, self.source) self.pmfg_ts = self.pmfg.extend_timestamp() self.context = self.pmfg.get_context() if pmapi.c_api.pmSetContextOptions(self.context.ctx, self.opts.mode, self.opts.delta): raise pmapi.pmUsageErr() def validate_config(self): """ Validate configuration """ if self.version != CONFVER: sys.stderr.write("Incompatible configuration file version (read v%s, need v%d).\n" % (self.version, CONFVER)) sys.exit(1) self.pmconfig.validate_common_options() if self.output != OUTPUT_ARCHIVE and \ self.output != OUTPUT_CSV and \ self.output != OUTPUT_STDOUT: sys.stderr.write("Error while parsing options: Invalid output target specified.\n") sys.exit(1) # Check how we were invoked and adjust output if sys.argv[0].endswith("pcp2csv"): self.output = OUTPUT_CSV if self.output == OUTPUT_ARCHIVE and not self.outfile: sys.stderr.write("Output archive must be defined with archive output.\n") sys.exit(1) if self.output == OUTPUT_ARCHIVE: outdir = os.path.dirname(self.outfile) if os.path.dirname(self.outfile) else "." if not os.access(outdir, os.W_OK|os.X_OK): sys.stderr.write("Output directory %s not accessible.\n" % outdir) sys.exit(1) # Set default width when needed if self.separate_header and not self.width: self.width = 8 # Adjustments and checks for overall rankings if not self.rank and (self.overall_rank or self.overall_rank_alt): sys.stderr.write("Overall ranking requires ranking enabled.\n") sys.exit(1) if self.overall_rank_alt: self.overall_rank = 1 if self.overall_rank and \ (self.context.type != PM_CONTEXT_ARCHIVE or self.output != OUTPUT_STDOUT): sys.stderr.write("Overall ranking supported only with archive input and stdout output.\n") sys.exit(1) if self.overall_rank: self.header = 0 self.colxrow = None self.predicate = None # Adjust header selection if self.output == OUTPUT_ARCHIVE: self.dynamic_header = 0 self.fixed_header = 0 if self.colxrow is None or self.output != OUTPUT_STDOUT: self.fixed_header = 0 if self.dynamic_header: self.fixed_header = 0 if self.fixed_header: self.dynamic_header = 0 if self.names_change == 2: self.fixed_header = 0 self.dynamic_header = 1 self.static_header = 1 not in (self.fixed_header, self.dynamic_header) self.pmconfig.validate_metrics(curr_insts=not self.live_filter) self.pmconfig.finalize_options() if self.sort_metric: for sort_metric in self.sort_metric.split(","): sort_metric = sort_metric[1:] if sort_metric[:1] == "-" else sort_metric if sort_metric not in self.metrics: sys.stderr.write("Sort reference metric %s not part of metrics.\n" % sort_metric) sys.exit(1) i = list(self.metrics.keys()).index(sort_metric) if self.pmconfig.insts[i][0][0] == PM_IN_NULL: sys.stderr.write("Sort reference metric must have instances.\n") sys.exit(1) def execute(self): """ Fetch and report """ # Debug if self.context.pmDebug(PM_DEBUG_APPL1): sys.stdout.write("Known config file keywords: " + str(self.keys) + "\n") sys.stdout.write("Known metric spec keywords: " + str(self.pmconfig.metricspec) + "\n") # Set delay mode, interpolation if self.context.type != PM_CONTEXT_ARCHIVE: self.delay = 1 self.interpol = 1 # Time self.localtz = self.context.get_current_tz() # Common preparations self.context.prepare_execute(self.opts, self.output == OUTPUT_ARCHIVE, self.interpol, self.interval) # Set output primitives if self.delimiter is None: if self.output == OUTPUT_CSV: self.delimiter = CSVSEP else: self.delimiter = OUTSEP if self.timefmt is None: if self.output == OUTPUT_CSV: self.timefmt = CSVTIME else: self.timefmt = OUTTIME if not self.timefmt: self.timestamp = 0 # Print preparation self.prepare_writer() if self.output == OUTPUT_STDOUT: self.prepare_stdout() # Headers if self.extheader == 1: self.write_extheader() if self.header == 1 and not self.dynamic_header: self.write_header() if self.header == 0: self.repeat_header = 0 if self.repeat_header == "auto" and (self.dynamic_header or self.fixed_header): self.repeat_header = 0 if self.repeat_header == "auto": self.set_auto_repeat_header() if self.repeat_header != "auto": try: signum = getattr(signal, "SIGWINCH") signal.signal(signum, self.set_auto_repeat_header) except Exception: pass else: adjust = 2 if not self.unitinfo else 3 if [x for x in self.pmconfig.descs if x.contents.indom != PM_INDOM_NULL]: adjust += 1 # Best guess with no terminal info available self.repeat_header = 24 - adjust # Just checking if self.check == 1: return # Daemonize when requested if self.daemonize == 1: self.opts.daemonize() # Align poll interval to host clock if self.context.type != PM_CONTEXT_ARCHIVE and self.opts.pmGetOptionAlignment(): align = float(self.opts.pmGetOptionAlignment()) - (time.time() % float(self.opts.pmGetOptionAlignment())) time.sleep(align) # Main loop refresh_metrics = 0 while self.samples != 0: # Refresh metrics as needed if refresh_metrics: refresh_metrics = 0 self.pmconfig.update_metrics(curr_insts=not self.live_filter) # Fetch values refresh_metrics = self.pmconfig.fetch() if refresh_metrics < 0: break # Repeat header if needed if self.output == OUTPUT_STDOUT and not self.dynamic_header: if (self.lines > 0 and self.repeat_header == self.lines) or \ (self.repeat_header_auto and self.lines >= self.repeat_header): self.write_header(True) self.lines = 0 self.lines += 1 # Report and prepare for the next round self.report(self.pmfg_ts()) if self.samples and self.samples > 0: self.samples -= 1 if self.delay and self.interpol and self.samples != 0: self.pmconfig.pause() # Allow to flush buffered values / say goodbye self.report(None) def report(self, tstamp): """ Report metric values """ if tstamp is not None: tstamp = tstamp.strftime(self.timefmt) if self.overall_rank: self.overall_ranking(tstamp) elif self.output == OUTPUT_ARCHIVE: self.write_archive(tstamp) elif self.output == OUTPUT_CSV: self.write_csv(tstamp) elif self.output == OUTPUT_STDOUT: self.write_stdout(tstamp) def prepare_writer(self): """ Prepare generic stdout writer """ if not self.writer: if self.output == OUTPUT_ARCHIVE or self.outfile is None: self.writer = sys.stdout else: self.writer = open(self.outfile, 'wt') def prepare_stdout(self): """ Prepare stdout output format """ if self.colxrow is None: self.prepare_stdout_std() else: self.prepare_stdout_colxrow() def prepare_stdout_std(self, results=()): """ Prepare standard/default stdout output format """ index = 0 if self.timestamp == 0: #self.format = "{:}{}" self.format = "{0:}{1}" index += 2 else: tstamp = datetime.fromtimestamp(time.time()).strftime(self.timefmt) #self.format = "{:<" + str(len(tstamp)) + "}{}" self.format = "{" + str(index) + ":<" + str(len(tstamp)) + "}" index += 1 self.format += "{" + str(index) + "}" index += 1 def prepare_line(index, l): """ Line prepare helper """ #self.format += "{:>" + l + "." + l + "}{}" self.format += "{" + str(index) + ":>" + l + "." + l + "}" index += 1 self.format += "{" + str(index) + "}" index += 1 if results: for i, metric in enumerate(results): for _ in range(len(results[metric])): prepare_line(index, str(self.metrics[metric][4])) index += 2 else: for i, metric in enumerate(self.metrics): for _ in range(len(self.pmconfig.insts[i][0])): prepare_line(index, str(self.metrics[metric][4])) index += 2 #self.format = self.format[:-2] l = len(str(index-1)) + 2 self.format = self.format[:-l] def prepare_stdout_colxrow(self, results=()): """ Prepare columns and rows swapped stdout output """ index = 0 # Timestamp if self.timestamp == 0: self.format = "{0:}{1}" index += 2 else: tstamp = datetime.fromtimestamp(time.time()).strftime(self.timefmt) self.format = "{0:<" + str(len(tstamp)) + "." + str(len(tstamp)) + "}{1}" index += 2 # Instance name if self.colxrow: self.format += "{2:>" + str(len(self.colxrow)) + "." + str(len(self.colxrow)) + "}{3}" else: self.format += "{2:>" + str(8) + "." + str(8) + "}{3}" index += 2 # Metrics / text labels self.labels = OrderedDict() # pylint: disable=attribute-defined-outside-init for i, metric in enumerate(self.metrics): if self.dynamic_header and results and not results[metric]: continue l = str(self.metrics[metric][4]) label = self.metrics[metric][0] if label in self.labels: self.labels[label].append((metric, i)) continue self.labels[label] = [(metric, i)] # Value truncated and aligned self.format += "{" + str(index) + ":>" + l + "." + l + "}" index += 1 # Dummy self.format += "{" + str(index) + "}" index += 1 # Drop the last dummy l = len(str(index-1)) + 2 self.format = self.format[:-l] # Collect the instances in play if self.static_header: for i in range(len(self.metrics)): for instance in self.pmconfig.insts[i][1]: if instance not in self.found_insts: self.found_insts.append(instance) else: seen = set() self.found_insts = [i[1] for metric in results for i in results[metric]] self.found_insts = [i for i in self.found_insts if not (i in seen or seen.add(i))] def set_auto_repeat_header(self, *_args): """ Set auto repeat header """ try: if hasattr(shutil, 'get_terminal_size'): lines = shutil.get_terminal_size().lines else: lines = int(os.popen('stty size', 'r').read().split()[0]) if self.colxrow is None: header = 2 if not self.unitinfo else 3 if [x for x in self.pmconfig.descs if x.contents.indom != PM_INDOM_NULL]: header += 1 self.repeat_header = lines - header else: header = 1 if not self.unitinfo else 2 instances = len(set([j for i in self.pmconfig.insts for j in i[0]])) # pylint: disable=consider-using-set-comprehension self.repeat_header = int(lines / instances) - header self.repeat_header_auto = 1 except Exception: pass def write_extheader(self): """ Write extended header """ if self.context.type == PM_CONTEXT_LOCAL: host = "localhost, using DSO PMDAs" else: host = self.context.pmGetContextHostName() timezone = self.context.posix_tz_to_utc_offset(self.context.get_current_tz(self.opts)) if timezone != self.context.posix_tz_to_utc_offset(self.localtz): timezone += " (reporting, current is " + self.context.posix_tz_to_utc_offset(self.localtz) + ")" origin = float(self.opts.pmGetOptionOrigin()) if self.opts.pmGetOptionOrigin() is not None else 0 if self.runtime != -1: duration = self.runtime samples = self.samples else: if self.samples: duration = (self.samples - 1) * float(self.interval) samples = self.samples else: duration = float(self.opts.pmGetOptionFinish()) - origin samples = int(duration / float(self.interval) + 1) samples = max(0, samples) duration = (samples - 1) * float(self.interval) duration = max(0, duration) endtime = origin + duration instances = sum([len(x[0]) for x in self.pmconfig.insts]) insts_txt = "instances" if instances != 1 else "instance" if not self.static_header: if self.context.type == PM_CONTEXT_ARCHIVE: insts_txt += " present in archive" else: insts_txt += " initially" if self.context.type == PM_CONTEXT_ARCHIVE and not self.interpol: duration = float(self.opts.pmGetOptionFinish()) - origin duration = max(0, duration) def secs_to_readable(seconds): """ Convert seconds to easily readable format """ seconds = float(math.floor((seconds) + math.copysign(0.5, seconds))) parts = str(timedelta(seconds=int(round(seconds)))).split(":") if len(parts[0]) == 1: parts[0] = "0" + parts[0] elif parts[0][-2] == " ": parts[0] = parts[0].rsplit(" ", 1)[0] + " 0" + parts[0].rsplit(" ", 1)[1] return ":".join(parts) if self.context.type == PM_CONTEXT_ARCHIVE: endtime = float(self.context.pmGetArchiveEnd()) if not self.interpol and self.opts.pmGetOptionSamples(): samples = str(samples) + " (requested)" elif not self.interpol: samples = "N/A" comm = "#" if self.output == OUTPUT_CSV else "" self.writer.write(comm + "\n") if self.context.type == PM_CONTEXT_ARCHIVE: self.writer.write(comm + " archive: " + self.source + "\n") self.writer.write(comm + " host: " + host + "\n") self.writer.write(comm + " timezone: " + timezone + "\n") self.writer.write(comm + " start: " + time.asctime(time.localtime(origin)) + "\n") self.writer.write(comm + " end: " + time.asctime(time.localtime(endtime)) + "\n") self.writer.write(comm + " metrics: " + str(len(self.metrics)) + " (" + str(instances) + " " + insts_txt + ")\n") self.writer.write(comm + " samples: " + str(samples) + "\n") if not (self.context.type == PM_CONTEXT_ARCHIVE and not self.interpol): self.writer.write(comm + " interval: " + str(float(self.interval)) + " sec\n") else: self.writer.write(comm + " interval: N/A\n") self.writer.write(comm + " duration: " + secs_to_readable(duration) + "\n") self.writer.write(comm + "\n") def get_results_iter(self, i, metric, results): """ Helper to get results iterators """ l = len(self.pmconfig.insts[i][0]) if not self.dynamic_header else len(results[metric]) r = self.pmconfig.insts[i][0] if not self.dynamic_header else results[metric] return zip(range(l), r) def get_instance_count(self, results): """ Helper to get number of instances of current results """ if self.static_header: if self.colxrow is None: c = len(str(sum([len(i[0]) for i in self.pmconfig.insts]))) else: c = len(str(len(self.metrics))) else: if self.colxrow is None: c = len(str(sum([len(results[i]) for i in results]))) else: c = len(str(len(results))) return c def get_labels_inst(self, i, j, n): """ Helper to get labels instance id reference """ if j is None: return None if self.dynamic_header: return None if n[0] == PM_IN_NULL else j return None if self.pmconfig.insts[i][0][0] == PM_IN_NULL else j def write_separate_header(self, results=()): """ Write separate header """ c = self.get_instance_count(results) + 1 def write_labels(metric, k, i, j, n, metric_only=False): """ Labels writer helper """ if self.include_labels: ins = None if metric_only else self.get_labels_inst(i, j, n) labels = self.pmconfig.get_labels_str(metric, ins, self.dynamic_header, True) write_line(metric, k, labels, True) def write_line(metric, k, name, label=False): """ Line writer helper """ line = "[" + str(k).rjust(c) + "] - " if label: self.writer.write(line + name + "\n") return line += metric if name: line += "[\"" + name + "\"]" if self.unitinfo: if self.metrics[metric][2][0]: line += " - " + self.metrics[metric][2][0] else: line += " - none" line += "\n" self.writer.write(line.format(str(k))) k = 0 if self.colxrow is None: for i, metric in enumerate(self.metrics): for j, n in self.get_results_iter(i, metric, results): k += 1 name = self.pmconfig.insts[i][1][j] if self.static_header else n[1] name = name if name is None else str(name) write_line(metric, k, name) write_labels(metric, k, i, j, n) else: for label in self.labels: k += 1 for metric, i in self.labels[label]: if self.fixed_header: write_line(metric, k, None) write_labels(metric, k, None, None, None, True) else: for j, n in self.get_results_iter(i, metric, results): name = self.pmconfig.insts[i][1][j] if not self.dynamic_header else n[1] name = name if name is None else str(name) write_line(metric, k, name) write_labels(metric, k, i, j, n) self.writer.write("\n") names = ["", self.delimiter] # no timestamp on header line if self.colxrow is not None: names.extend(["", self.delimiter]) # nothing for the instance column k = 0 for i, metric in enumerate(self.metrics): l = len(self.pmconfig.insts[i][0]) if not self.dynamic_header else len(results[metric]) for _ in range(l): k += 1 names.extend([str(k), self.delimiter]) del names[-1] self.writer.write(self.format.format(*names) + "\n") def write_header(self, repeat=False): """ Write info header """ if self.output == OUTPUT_ARCHIVE: self.write_header_archive() if self.output == OUTPUT_CSV: self.write_header_csv() if self.output == OUTPUT_STDOUT: self.write_header_stdout(repeat) def write_header_archive(self): """ Write info header for archive output """ self.writer.write("Recording %d metrics to %s" % (len(self.metrics), self.outfile)) if self.runtime != -1: self.writer.write(":\n%s samples(s) with %.1f sec interval ~ %d sec duration.\n" % (self.samples, float(self.interval), self.runtime)) elif self.samples: duration = (self.samples - 1) * float(self.interval) self.writer.write(":\n%s samples(s) with %.1f sec interval ~ %d sec duration.\n" % (self.samples, float(self.interval), duration)) else: self.writer.write("...") if self.context.type != PM_CONTEXT_ARCHIVE: self.writer.write(" (Ctrl-C to stop)") self.writer.write("\n") def write_header_csv(self, results=()): """ Write info header for CSV output """ if not self.header: return if self.extcsv: self.writer.write("Host,Interval,") self.writer.write("Time") for i, metric in enumerate(self.metrics): for j, n in self.get_results_iter(i, metric, results): name = metric if not self.dynamic_header: if self.pmconfig.descs[i].contents.indom != PM_INDOM_NULL: # Always mark metrics with instance domain name += "-" if self.pmconfig.insts[i][1][j]: # Append instance name when present name += self.pmconfig.insts[i][1][j] else: if self.pmconfig.descs[i].contents.indom != PM_INDOM_NULL: name += "-" + n[1] if self.delimiter: name = name.replace(self.delimiter, " ") name = name.replace("\n", " ").replace("\"", " ") self.writer.write(self.delimiter + "\"" + name + "\"") if self.include_labels: ins = j if not self.dynamic_header else n[0] labels = self.pmconfig.get_labels_str(metric, ins, self.dynamic_header, True) if self.delimiter: repl = ";" if self.delimiter == "," else "," labels = labels.replace(self.delimiter, repl) labels = labels.replace("\n", " ").replace("\"", " ") self.writer.write(self.delimiter + "\"" + labels + "\"") self.writer.write("\n") def write_header_stdout(self, repeat=False, results=()): """ Write info header for stdout output """ if not self.header: return if repeat: self.writer.write("\n") if self.separate_header: self.write_separate_header(results) return names = ["", self.delimiter] # no timestamp on header line insts = ["", self.delimiter] # no timestamp on instances line units = ["", self.delimiter] # no timestamp on units line mlabels = ["", self.delimiter] # no timestamp on metric labels line if self.colxrow is not None: names += [self.colxrow, self.delimiter] units += ["", self.delimiter] mlabels += ["", self.delimiter] prnti = 0 hlabels = [] # header labels def add_header_items(metric, name, i, j, n=[PM_IN_NULL]): # pylint: disable=dangerous-default-value """ Helper to add items to header """ names.extend([self.metrics[metric][0], self.delimiter]) insts.extend([name, self.delimiter]) units.extend([self.metrics[metric][2][0], self.delimiter]) if self.include_labels: ins = self.get_labels_inst(i, j, n) mlabels.append(self.pmconfig.get_labels_str(metric, ins, self.dynamic_header, True)) mlabels.append(self.delimiter) hlabels.append(self.metrics[metric][0]) for i, metric in enumerate(self.metrics): if self.colxrow is not None: if self.metrics[metric][0] in hlabels or \ (self.dynamic_header and results and not results[metric]): continue add_header_items(metric, None, i, None) continue prnti = 1 if self.pmconfig.descs[i].contents.indom != PM_INDOM_NULL else prnti if results: for inst, name, _ in results[metric]: name = name if prnti and name else self.delimiter j = None if not self.include_labels else list(self.metrics.keys()).index(metric) n = None if not self.include_labels else [x for x in results[metric] if x[0] == inst] add_header_items(metric, name, i, j, n[0] if n else None) # pylint: disable=unsubscriptable-object else: for j, n in self.get_results_iter(i, metric, results): name = self.pmconfig.insts[i][1][j] if prnti and self.pmconfig.insts[i][1][j] else self.delimiter add_header_items(metric, name, i, j, n) del names[-1] del units[-1] del insts[-1] del mlabels[-1] self.writer.write(self.format.format(*names) + "\n") if self.instinfo and prnti: self.writer.write(self.format.format(*insts) + "\n") if self.include_labels: self.writer.write(self.format.format(*mlabels) + "\n") if self.unitinfo: self.writer.write(self.format.format(*units) + "\n") def write_archive(self, timestamp): """ Write archive record """ if timestamp is None: # Complete and close self.pmi.pmiEnd() self.pmi = None return def record_metric_info(metric, i, inst=None): """ Helper to record metric info """ def record_labels(lid, i, inst, name, value): """ Helper to record labels """ try: pmid = self.pmconfig.pmids[i] if lid is PM_LABEL_DOMAIN: ident = pmapi.pmContext.pmID_domain(pmid) elif lid is PM_LABEL_INDOM: ident = self.pmconfig.descs[i].contents.indom elif lid is PM_LABEL_CLUSTER: ident = pmapi.pmContext.pmID_cluster(pmid) elif lid is PM_LABEL_ITEM: ident = pmapi.pmContext.pmID_item(pmid) else: ident = 0 self.pmi.pmiPutLabel(lid, ident, inst, name, str(value)) except Exception as pmierror: sys.stderr.write("pmiPutLabel failed: %s\n" % str(pmierror)) sys.exit(1) if inst in (None, PM_IN_NULL): self.pmi.pmiAddMetric(metric, self.pmconfig.pmids[i], self.pmconfig.descs[i].contents.type, self.pmconfig.descs[i].contents.indom, self.pmconfig.descs[i].contents.sem, self.pmconfig.descs[i].contents.units) if self.include_labels: for lid in self.pmconfig.labels[i][0]: for name, value in self.pmconfig.labels[i][0][lid].items(): record_labels(lid, i, PM_IN_NULL, name, value) if self.include_labels and inst not in (None, PM_IN_NULL): if inst in self.pmconfig.res_labels[metric][1]: for name, value in self.pmconfig.res_labels[metric][1][inst].items(): record_labels(PM_LABEL_INSTANCES, i, inst, name, value) if self.include_texts: try: if self.pmconfig.texts[i][0]: self.pmi.pmiPutText(PM_TEXT_PMID, PM_TEXT_ONELINE, self.pmconfig.pmids[i], self.pmconfig.texts[i][0]) if self.pmconfig.texts[i][1]: self.pmi.pmiPutText(PM_TEXT_PMID, PM_TEXT_HELP, self.pmconfig.pmids[i], self.pmconfig.texts[i][1]) if self.pmconfig.descs[i].contents.indom != PM_INDOM_NULL: if self.pmconfig.texts[i][2]: self.pmi.pmiPutText(PM_TEXT_INDOM, PM_TEXT_ONELINE, self.pmconfig.descs[i].contents.indom, self.pmconfig.texts[i][2]) if self.pmconfig.texts[i][3]: self.pmi.pmiPutText(PM_TEXT_INDOM, PM_TEXT_HELP, self.pmconfig.descs[i].contents.indom, self.pmconfig.texts[i][3]) except pmi.pmiErr as pmierror: if pmierror.errno() == PMI_ERR_DUPTEXT: # Ignore duplicate help texts pass if self.pmi is None: # Create a new archive self.pmi = pmi.pmiLogImport(self.outfile) self.prev_res = OrderedDict() # pylint: disable=attribute-defined-outside-init self.recorded = {} # pylint: disable=attribute-defined-outside-init if self.context.type == PM_CONTEXT_ARCHIVE: self.pmi.pmiSetHostname(self.context.pmGetArchiveLabel().hostname) self.pmi.pmiSetTimezone(self.context.get_current_tz(self.opts)) for i, metric in enumerate(self.metrics): self.recorded[metric] = [] record_metric_info(metric, i) # Add current values data = 0 # NB. We use valid_only=False to make sure that for every metric # requested their metadata will be recorded in the archive even # if their values are not available for whatever reason. results = self.pmconfig.get_ranked_results(valid_only=False) for i, metric in enumerate(results): if metric not in self.recorded: self.recorded[metric] = [] record_metric_info(metric, i) for inst, name, value in results[metric]: if inst != PM_IN_NULL and inst not in self.recorded[metric]: self.recorded[metric].append(inst) record_metric_info(metric, i, inst) try: self.pmi.pmiAddInstance(self.pmconfig.descs[i].contents.indom, name, inst) except pmi.pmiErr as pmierror: if pmierror.errno() == PMI_ERR_DUPINSTNAME: # Already added pass if self.pmconfig.descs[i].contents.sem == PM_SEM_DISCRETE and metric in self.prev_res: index = [idx for idx, (x, _, _) in enumerate(self.prev_res[metric]) if x == inst] if index and value == self.prev_res[metric][index[0]][2]: continue try: self.pmi.pmiPutValue(metric, name, str(value)) except pmi.pmiErr as pmierror: pass data = 1 self.prev_res = results # pylint: disable=attribute-defined-outside-init # Flush if data: self.pmi.pmiWrite(int(self.pmfg_ts().strftime('%s')), self.pmfg_ts().microsecond) def dynamic_header_update(self, results, line=None): """ Update dynamic header as needed """ if self.rank: for metric in results: results[metric] = sorted(results[metric], key=lambda x: x[0]) insts = [(metric, list(zip(*results[metric]))[0]) for metric in results if results[metric]] if self.fixed_header: self.prepare_stdout_colxrow(results) elif (insts and (self.repeat_header == self.lines or insts != self.prev_insts)) or \ (self.repeat_header_auto and self.lines >= self.repeat_header): if self.output == OUTPUT_CSV: self.write_header_csv(results) if self.output == OUTPUT_STDOUT: if self.colxrow is None: self.prepare_stdout_std(results) else: self.prepare_stdout_colxrow(results) self.write_header_stdout(self.prev_insts is not None, results) self.lines = 0 if not self.fixed_header: self.lines += 1 if not insts and line: self.format = "{0:}{1}{2:>" + str(self.width) + "}" line.extend([NO_VAL, self.delimiter]) self.prev_insts = insts def parse_non_number(self, value, width=8): """ Check and handle float inf, -inf, and NaN """ if math.isinf(value): if value > 0: value = "inf" if width >= 3 else pmconfig.TRUNC else: value = "-inf" if width >= 4 else pmconfig.TRUNC elif math.isnan(value): value = "NaN" if width >= 3 else pmconfig.TRUNC return value def remove_delimiter(self, value): """ Remove delimiter if needed in string values """ if isinstance(value, str) and self.delimiter and not self.delimiter.isspace(): if self.delimiter != "_": value = value.replace(self.delimiter, "_") else: value = value.replace(self.delimiter, " ") return value def write_csv(self, timestamp): """ Write results in CSV format """ if timestamp is None: # Silent goodbye return ts = self.context.datetime_to_secs(self.pmfg_ts(), PM_TIME_SEC) if self.prev_ts is None: self.prev_ts = ts if self.context.type == PM_CONTEXT_LOCAL: host = "localhost" else: host = self.context.pmGetContextHostName() self.csv_host = host + self.delimiter # pylint: disable=attribute-defined-outside-init self.csv_tz = " " + self.context.posix_tz_to_utc_offset(self.context.get_current_tz(self.opts)) # pylint: disable=attribute-defined-outside-init # Construct the results line = "" if self.extcsv: line += self.csv_host line += str(int(ts - self.prev_ts + 0.5)) + self.delimiter self.prev_ts = ts line += timestamp if self.extcsv: line += self.csv_tz results = self.pmconfig.get_ranked_results() if self.dynamic_header: self.dynamic_header_update(results) res = {} for i, metric in enumerate(results): for inst, _, value in results[metric]: res[metric + "+" + str(inst)] = value # Add corresponding values for each header column for i, metric in enumerate(self.metrics): fmt = "." + str(self.metrics[metric][6]) + "f" for j, n in self.get_results_iter(i, metric, results): line += self.delimiter try: ref = str(self.pmconfig.insts[i][0][j]) if not self.dynamic_header else str(n[0]) value = res[metric + "+" + ref] except Exception: continue if isinstance(value, str): value = self.remove_delimiter(value) value = value.replace("\n", " ").replace('"', " ") line += '"' + value + '"' if self.include_labels: line += self.delimiter line += '"' + value + '"' else: if isinstance(value, float): value = self.parse_non_number(value) if isinstance(value, float): value = format(value, fmt) line += str(value) if self.include_labels: line += self.delimiter line += str(value) self.writer.write(line + "\n") def format_stdout_value(self, value, width, precision, fmt, k): """ Format value for stdout output """ if isinstance(value, (int, long)): if len(str(value)) > width: value = pmconfig.TRUNC else: #fmt[k] = "{:" + str(width) + "d}" fmt[k] = "{X:" + str(width) + "d}" elif isinstance(value, float) and \ not math.isinf(value) and \ not math.isnan(value): s = len(str(int(value))) if s > width: value = pmconfig.TRUNC elif s + 2 > width: fmt[k] = "{X:" + str(width) + "d}" value = int(value) else: c = precision for _ in reversed(range(c+1)): t = "{0:" + str(width) + "." + str(c) + "f}" if len(t.format(value)) > width: c -= 1 else: #fmt[k] = t.replace("0:", ":") fmt[k] = t.replace("0:", "X:") break elif isinstance(value, str): value = self.remove_delimiter(value) value = value.replace("\n", "\\n") else: value = self.parse_non_number(value, width) return value def write_stdout(self, timestamp): """ Write line to stdout """ if self.colxrow is None: self.write_stdout_std(timestamp) else: self.write_stdout_colxrow(timestamp) def write_stdout_std(self, timestamp): """ Write line to standard formatted stdout """ if timestamp is None: # Silent goodbye return line = [] if self.timestamp == 0: line.append("") else: line.append(timestamp) line.append(self.delimiter) results = self.pmconfig.get_ranked_results() if self.dynamic_header: self.dynamic_header_update(results, line) #fmt = self.format.split("{}") fmt = re.split("{\\d+}", self.format) res = {} for i, metric in enumerate(results): for inst, _, value in results[metric]: res[metric + "+" + str(inst)] = value # Add corresponding values for each header column k = 0 for i, metric in enumerate(self.metrics): for j, n in self.get_results_iter(i, metric, results): k += 1 try: ref = str(self.pmconfig.insts[i][0][j]) if not self.dynamic_header else str(n[0]) value = res[metric + "+" + ref] value = self.format_stdout_value(value, self.metrics[metric][4], self.metrics[metric][6], fmt, k) except Exception: value = NO_VAL line.extend([value, self.delimiter]) del line[-1] #self.writer.write('{}'.join(fmt).format(*line) + "\n") index = 0 nfmt = "" for f in fmt: nfmt += f.replace("{X:", "{" + str(index) + ":") index += 1 nfmt += "{" + str(index) + "}" index += 1 l = len(str(index-1)) + 2 nfmt = nfmt[:-l] self.writer.write(nfmt.format(*line) + "\n") def write_stdout_colxrow(self, timestamp): """ Write line to columns and rows swapped stdout """ if timestamp is None: # Silent goodbye return # Avoid per-line I/O output = "" results = self.pmconfig.get_ranked_results() res = {} for i, metric in enumerate(results): for inst, name, value in results[metric]: if self.static_header: res[metric + "+" + str(inst)] = value else: res[metric + "+" + str(name)] = value if not self.static_header: self.dynamic_header_update(results) if self.sort_metric: found_insts = self.found_insts self.found_insts = [] for sort_metric in self.sort_metric.split(","): revs = sort_metric[:1] != "-" sort_metric = sort_metric if revs else sort_metric[1:] for r in sorted(results[sort_metric], key=lambda x: x[2], reverse=revs): if r[1] not in self.found_insts: self.found_insts.append(r[1]) self.found_insts.extend([i for i in found_insts if i not in self.found_insts]) # We need to construct each line independently for instance in self.found_insts: # Split on dummies fmt = re.split("{\\d+}", self.format) # Start a new line line = [] k = 0 # Add timestamp if wanted if self.timestamp == 0: line.append("") else: line.append(timestamp) line.append(self.delimiter) k += 1 # Add instance if instance: line.append(instance) else: line.append(SINGULR) line.append(self.delimiter) k += 1 for label in self.labels: found = 0 for metric, i in self.labels[label]: if found: break insts = self.pmconfig.insts[i][1] if self.static_header else self.found_insts if label == self.metrics[metric][0] and instance in insts: found = 1 try: if self.static_header: ref = self.pmconfig.insts[i][0][self.pmconfig.insts[i][1].index(instance)] else: ref = instance value = res[metric + "+" + str(ref)] value = self.format_stdout_value(value, self.metrics[metric][4], self.metrics[metric][6], fmt, k) except Exception: value = NO_VAL if self.static_header else NO_INST line.extend([value, self.delimiter]) k += 1 if not found: # Not an instance for this label, # add a placeholder and move on line.extend([NO_INST, self.delimiter]) k += 1 continue # Skip metric output when only unavailable instances if self.dynamic_header: values = set(line[4::2]) if len(values) == 1 and NO_INST in values: continue # Print the line in a Python 2.6 compatible manner del line[-1] index = 0 nfmt = "" for f in fmt: nfmt += f.replace("{X:", "{" + str(index) + ":") index += 1 nfmt += "{" + str(index) + "}" index += 1 l = len(str(index-1)) + 2 nfmt = nfmt[:-l] output += nfmt.format(*line) + "\n" if not output: line = [""] if self.timestamp == 0 else [timestamp] if self.dynamic_header: self.format = "{0:}{1}{2:>" + str(len(self.colxrow)) + "}" line.extend([self.delimiter, NO_VAL, self.delimiter]) else: line.extend([self.delimiter, NO_VAL]) for _ in range(len(self.metrics)): line.extend([self.delimiter, NO_INST]) output = self.format.format(*line) + "\n" self.writer.write(output) def overall_ranking(self, timestamp): """ Perform overall ranking """ if not hasattr(self, 'all_ranked'): self.all_ranked = OrderedDict() # pylint: disable=attribute-defined-outside-init if timestamp is None: # All results available, pretty print results in requested format m_len = i_len = u_len = v_len = 3 for metric in self.all_ranked: values = False for _, name, value in self.all_ranked[metric]: values = True name = name.replace("\n", " ") if name else name if name: i_len = i_len if len(name) < i_len else len(name) p = self.metrics[metric][6] if self.metrics[metric][4] > self.metrics[metric][6] else self.metrics[metric][4] numfmt = "." + str(p) + "f" value = format(value, numfmt) if isinstance(value, float) else str(value) v_len = v_len if len(value) < v_len else len(value) if values: m_len = m_len if len(metric) < m_len else len(metric) u_len = u_len if len(self.metrics[metric][2][0]) < u_len else len(self.metrics[metric][2][0]) d = self.delimiter for metric in self.all_ranked: alt_line = [] for _, name, value in self.all_ranked[metric]: name = name.replace("\n", " ") if name else name if not self.overall_rank_alt: line = [metric, d, "", d] if not name else [metric, d, name, d] line.append(self.metrics[metric][2][0]) p = self.metrics[metric][6] if self.metrics[metric][4] > self.metrics[metric][6] else self.metrics[metric][4] numfmt = "." + str(p) + "f" value = format(value, numfmt) if isinstance(value, float) else str(value) line.append(value) output = "{0:<" + str(m_len+1) + "}{1:<2}{2:<" + str(i_len+1) + "}" output += "{3:<2}{4:>" + str(u_len) + "} " + d + "{5:>" + str(v_len+1) + "}" else: if not alt_line: alt_line = [metric, ",,", ""] if not name else [metric, ",,\"'", name + "'\""] output = "{0}{1}{2}" else: alt_line[2] = alt_line[2][:-1] + ",'" + name + "'\"" if not self.overall_rank_alt: self.writer.write(output.format(*line) + "\n") if self.overall_rank_alt and alt_line: self.writer.write(output.format(*alt_line) + "\n") return results = self.pmconfig.get_ranked_results() if self.prev_insts is None: for i, metric in enumerate(results): if self.pmconfig.descs[i].contents.type != PM_TYPE_STRING: self.all_ranked[metric] = results[metric] self.prev_insts = [] revs = self.rank > 0 for i, metric in enumerate(results): if self.pmconfig.descs[i].contents.type == PM_TYPE_STRING: continue rank = abs(self.rank) if self.pmconfig.descs[i].contents.indom != PM_INDOM_NULL else 1 c, r, t = (0, [], []) for j in sorted(results[metric] + self.all_ranked[metric], key=lambda x: x[2], reverse=revs): if j[0] not in t and c < rank: c += 1 r.append(j) t.append(j[0]) self.all_ranked[metric] = r def finalize(self): """ Finalize and clean up """ if self.writer: try: self.writer.flush() except IOError as ioerror: if ioerror.errno != errno.EPIPE: raise error try: self.writer.close() except Exception: pass self.writer = None if self.pmi: self.pmi.pmiEnd() self.pmi = None if __name__ == '__main__': try: P = PMReporter() P.connect() P.validate_config() P.execute() P.finalize() except pmapi.pmErr as error: sys.stderr.write("%s: %s" % (error.progname(), error.message())) if error.message() == "Connection refused": sys.stderr.write("; is pmcd running?") sys.stderr.write("\n") sys.exit(1) except pmapi.pmUsageErr as usage: usage.message() sys.exit(1) except IOError as error: if error.errno != errno.EPIPE: sys.stderr.write("%s\n" % str(error)) sys.exit(1) except KeyboardInterrupt: sys.stdout.write("\n") P.finalize()
Close