Linux v69820.1blu.de 4.15.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64
Apache/2.4.58
Server IP : 195.90.215.149 & Your IP : 216.73.216.250
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
bin /
Delete
Unzip
Name
Size
Permission
Date
Action
X11
[ DIR ]
drwxr-xr-x
2026-07-29 13:22
2to3-2.7
96
B
-rwxr-xr-x
2022-07-01 10:30
GET
15.87
KB
-rwxr-xr-x
2026-05-22 15:41
HEAD
15.87
KB
-rwxr-xr-x
2026-05-22 15:41
Mail
110.4
KB
-rwxr-xr-x
2024-04-08 15:54
POST
15.87
KB
-rwxr-xr-x
2026-05-22 15:41
[
54.44
KB
-rwxr-xr-x
2026-01-23 13:30
aa-enabled
18.3
KB
-rwxr-xr-x
2026-04-13 22:29
aa-exec
18.3
KB
-rwxr-xr-x
2026-04-13 22:29
aa-features-abi
18.3
KB
-rwxr-xr-x
2026-04-13 22:29
ab
58.43
KB
-rwxr-xr-x
2026-07-06 16:27
acorn
60
B
-rwxr-xr-x
2022-11-10 05:48
add-apt-repository
16.04
KB
-rwxr-xr-x
2026-01-05 16:17
addpart
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
addr2line
30.7
KB
-rwxr-xr-x
2026-02-09 21:03
agentxtrap
26.38
KB
-rwxr-xr-x
2026-01-06 12:41
amuFormat.sh
2.61
KB
-rwxr-xr-x
2024-04-08 16:13
apport-bug
2.27
KB
-rwxr-xr-x
2026-04-24 11:18
apport-cli
13.31
KB
-rwxr-xr-x
2026-04-28 17:12
apport-collect
2.27
KB
-rwxr-xr-x
2026-04-24 11:18
apport-unpack
3.7
KB
-rwxr-xr-x
2026-04-28 17:12
appres
14.3
KB
-rwxr-xr-x
2024-03-31 17:27
appstreamcli
138.23
KB
-rwxr-xr-x
2024-04-08 14:37
apropos
47.28
KB
-rwxr-xr-x
2024-04-08 14:45
apt
18.38
KB
-rwxr-xr-x
2024-10-22 13:02
apt-add-repository
16.04
KB
-rwxr-xr-x
2026-01-05 16:17
apt-cache
86.47
KB
-rwxr-xr-x
2024-10-22 13:02
apt-cdrom
26.47
KB
-rwxr-xr-x
2024-10-22 13:02
apt-config
30.39
KB
-rwxr-xr-x
2024-10-22 13:02
apt-extracttemplates
22.47
KB
-rwxr-xr-x
2024-10-22 13:02
apt-ftparchive
222.48
KB
-rwxr-xr-x
2024-10-22 13:02
apt-get
50.47
KB
-rwxr-xr-x
2024-10-22 13:02
apt-key
27.99
KB
-rwxr-xr-x
2024-10-22 13:02
apt-mark
54.47
KB
-rwxr-xr-x
2024-10-22 13:02
apt-sortpkgs
50.4
KB
-rwxr-xr-x
2024-10-22 13:02
aptdcon
1.01
KB
-rwxr-xr-x
2023-05-22 20:24
ar
54.48
KB
-rwxr-xr-x
2026-02-09 21:03
arborist
3.26
KB
-rwxr-xr-x
2023-11-23 07:39
arch
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
aria_chk
5.52
MB
-rwxr-xr-x
2025-10-11 02:08
aria_dump_log
5.31
MB
-rwxr-xr-x
2025-10-11 02:08
aria_ftdump
5.32
MB
-rwxr-xr-x
2025-10-11 02:08
aria_pack
5.35
MB
-rwxr-xr-x
2025-10-11 02:08
aria_read_log
5.48
MB
-rwxr-xr-x
2025-10-11 02:08
arping
26.15
KB
-rwxr-xr-x
2025-07-24 11:51
as
728.29
KB
-rwxr-xr-x
2026-02-09 21:03
aspell
150.48
KB
-rwxr-xr-x
2024-04-08 15:54
aspell-import
2
KB
-rwxr-xr-x
2024-04-08 15:54
awk
722.5
KB
-rwxr-xr-x
2026-07-20 22:38
b2sum
54.51
KB
-rwxr-xr-x
2026-01-23 13:30
babeljs
46
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-7
46
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-7-external-helpers
63
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-7-node
51
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-7-parser
328
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-external-helpers
63
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-node
51
B
-rwxr-xr-x
2024-02-26 08:46
babeljs-parser
328
B
-rwxr-xr-x
2024-02-26 08:46
base32
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
base64
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
basename
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
basenc
46.51
KB
-rwxr-xr-x
2026-01-23 13:30
bash
1.38
MB
-rwxr-xr-x
2024-03-31 08:41
bashbug
6.82
KB
-rwxr-xr-x
2024-03-31 08:41
bdftopcf
42.26
KB
-rwxr-xr-x
2024-04-08 16:22
bdftruncate
14.15
KB
-rwxr-xr-x
2024-04-08 16:22
broadwayd
122.3
KB
-rwxr-xr-x
2025-01-27 19:56
browse
25.46
KB
-rwxr-xr-x
2022-08-01 14:14
browserslist
4.25
KB
-rwxr-xr-x
2023-12-22 10:30
bsd-mailx
110.4
KB
-rwxr-xr-x
2024-04-08 15:54
bunzip2
38.38
KB
-rwxr-xr-x
2024-08-09 02:33
busctl
94.59
KB
-rwxr-xr-x
2026-06-05 15:36
bwrap
70.47
KB
-rwxr-xr-x
2024-09-23 18:15
bzcat
38.38
KB
-rwxr-xr-x
2024-08-09 02:33
bzcmp
2.17
KB
-rwxr-xr-x
2024-08-09 02:33
bzdiff
2.17
KB
-rwxr-xr-x
2024-08-09 02:33
bzegrep
3.69
KB
-rwxr-xr-x
2024-08-09 02:33
bzexe
4.78
KB
-rwxr-xr-x
2021-11-27 12:25
bzfgrep
3.69
KB
-rwxr-xr-x
2024-08-09 02:33
bzgrep
3.69
KB
-rwxr-xr-x
2024-08-09 02:33
bzip2
38.38
KB
-rwxr-xr-x
2024-08-09 02:33
bzip2recover
18.3
KB
-rwxr-xr-x
2024-08-09 02:33
bzless
1.27
KB
-rwxr-xr-x
2024-08-09 02:33
bzmore
1.27
KB
-rwxr-xr-x
2024-08-09 02:33
c++
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
c++filt
22.27
KB
-rwxr-xr-x
2026-02-09 21:03
c89
428
B
-rwxr-xr-x
2020-11-17 18:53
c89-gcc
428
B
-rwxr-xr-x
2020-11-17 18:53
c99
454
B
-rwxr-xr-x
2020-11-17 18:53
c99-gcc
454
B
-rwxr-xr-x
2020-11-17 18:53
c_rehash
6.68
KB
-rwxr-xr-x
2026-06-02 19:33
cal
36.95
KB
-rwxr-xr-x
2023-02-20 09:19
captoinfo
90.41
KB
-rwxr-xr-x
2026-06-30 21:25
cat
38.46
KB
-rwxr-xr-x
2026-01-23 13:30
catman
30.77
KB
-rwxr-xr-x
2024-04-08 14:45
cautious-launcher
758
B
-rwxr-xr-x
2026-07-02 14:59
cc
999.05
KB
-rwxr-xr-x
2025-12-18 20:59
certbot
958
B
-rwxr-xr-x
2024-02-09 01:14
cgi-fcgi
18.15
KB
-rwxr-xr-x
2025-04-30 08:36
chacl
18.3
KB
-rwxr-xr-x
2024-10-02 12:40
chage
70.49
KB
-rwxr-sr-x
2024-05-30 14:52
chardet
221
B
-rwxr-xr-x
2023-08-20 12:12
chardetect
221
B
-rwxr-xr-x
2023-08-20 12:12
chattr
14.31
KB
-rwxr-xr-x
2024-04-28 23:44
chcon
58.51
KB
-rwxr-xr-x
2026-01-23 13:30
checkgid
14.3
KB
-rwxr-xr-x
2026-07-06 16:27
chfn
71.09
KB
-rwsr-xr-x
2024-05-30 14:52
chgrp
58.51
KB
-rwxr-xr-x
2026-01-23 13:30
chmod
54.51
KB
-rwxr-xr-x
2026-01-23 13:30
choom
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
chown
58.51
KB
-rwxr-xr-x
2026-01-23 13:30
chrt
30.38
KB
-rwxr-xr-x
2026-03-06 16:00
chsh
43.71
KB
-rwsr-xr-x
2024-05-30 14:52
chvt
14.37
KB
-rwxr-xr-x
2024-03-31 09:02
ckbcomp
147.14
KB
-rwxr-xr-x
2024-02-26 12:58
cksum
102.52
KB
-rwxr-xr-x
2026-01-23 13:30
clear
14.31
KB
-rwxr-xr-x
2026-06-30 21:25
clear_console
14.23
KB
-rwxr-xr-x
2024-03-31 08:41
cmp
42.39
KB
-rwxr-xr-x
2024-04-08 15:55
codepage
14.3
KB
-rwxr-xr-x
2024-03-31 09:02
col
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
colcrt
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
colrm
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
column
38.38
KB
-rwxr-xr-x
2026-03-06 16:00
comm
38.52
KB
-rwxr-xr-x
2026-01-23 13:30
compose
18.06
KB
-rwxr-xr-x
2026-07-02 14:59
containerd
52.33
MB
-rwxr-xr-x
2024-06-18 19:00
containerd-shim
6.84
MB
-rwxr-xr-x
2024-06-18 19:00
containerd-shim-runc-v1
8.47
MB
-rwxr-xr-x
2024-06-18 19:00
containerd-shim-runc-v2
11.6
MB
-rwxr-xr-x
2024-06-18 19:00
corelist
15.01
KB
-rwxr-xr-x
2026-06-12 13:42
cp
138.52
KB
-rwxr-xr-x
2026-01-23 13:30
cpan
8.16
KB
-rwxr-xr-x
2026-06-12 13:42
cpan5.38-x86_64-linux-gnu
8.18
KB
-rwxr-xr-x
2026-06-12 13:42
cpio
137.67
KB
-rwxr-xr-x
2024-04-08 15:55
cpp
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
cpp-11
906.92
KB
-rwxr-xr-x
2025-12-18 07:26
cpp-12
1.33
MB
-rwxr-xr-x
2025-12-18 07:53
cpp-13
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
cpp-9
766.71
KB
-rwxr-xr-x
2026-01-12 02:59
crontab
38.73
KB
-rwxr-sr-x
2024-03-31 00:06
csh
455.8
KB
-rwxr-xr-x
2024-04-01 08:23
csplit
50.51
KB
-rwxr-xr-x
2026-01-23 13:30
ctr
26.93
MB
-rwxr-xr-x
2024-06-18 19:00
ctstat
22.66
KB
-rwxr-xr-x
2026-04-15 06:53
curl
290.32
KB
-rwxr-xr-x
2026-07-06 17:02
cut
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
cvtsudoers
321.1
KB
-rwxr-xr-x
2026-03-02 12:56
dash
126.74
KB
-rwxr-xr-x
2024-03-31 08:47
date
106.51
KB
-rwxr-xr-x
2026-01-23 13:30
db5.3_archive
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_checkpoint
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_deadlock
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_dump
18.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_hotbackup
18.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_load
26.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_log_verify
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_printlog
34.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_recover
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_replicate
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_stat
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_tuner
22.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_upgrade
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db5.3_verify
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_archive
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_checkpoint
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_deadlock
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_dump
18.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_hotbackup
18.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_load
26.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_log_verify
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_printlog
34.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_recover
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_replicate
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_stat
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_upgrade
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
db_verify
14.02
KB
-rwxr-xr-x
2024-04-13 13:12
dbilogstrip
1.35
KB
-rwxr-xr-x
2026-06-22 07:05
dbiprof
6.06
KB
-rwxr-xr-x
2026-06-22 07:05
dbiproxy
5.27
KB
-rwxr-xr-x
2026-06-22 07:05
dbus-cleanup-sockets
14.29
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-daemon
230.64
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-launch
30.14
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-monitor
26.3
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-run-session
14.3
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-send
30.29
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-update-activation-environment
14.29
KB
-rwxr-xr-x
2024-08-09 02:33
dbus-uuidgen
14.29
KB
-rwxr-xr-x
2024-08-09 02:33
dd
70.54
KB
-rwxr-xr-x
2026-01-23 13:30
deallocvt
14.37
KB
-rwxr-xr-x
2024-03-31 09:02
deb-systemd-helper
23.79
KB
-rwxr-xr-x
2023-12-06 07:46
deb-systemd-invoke
6.97
KB
-rwxr-xr-x
2023-12-06 07:47
debconf
2.8
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-apt-progress
11.57
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-communicate
623
B
-rwxr-xr-x
2024-04-12 12:40
debconf-copydb
1.68
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-escape
668
B
-rwxr-xr-x
2024-04-12 12:40
debconf-get-selections
1.72
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-getlang
6.94
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-loadtemplate
944
B
-rwxr-xr-x
2024-04-12 12:40
debconf-mergetemplate
5.09
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-set-selections
3.14
KB
-rwxr-xr-x
2024-04-12 12:40
debconf-show
1.78
KB
-rwxr-xr-x
2024-04-12 12:40
debian-distro-info
30.95
KB
-rwxr-xr-x
2024-04-08 15:56
delpart
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
desktop-file-edit
92.49
KB
-rwxr-xr-x
2024-03-31 08:47
desktop-file-install
92.49
KB
-rwxr-xr-x
2024-03-31 08:47
desktop-file-validate
80.77
KB
-rwxr-xr-x
2024-03-31 08:47
df
87.08
KB
-rwxr-xr-x
2026-01-23 13:30
dh_installxmlcatalogs
9.22
KB
-rwxr-xr-x
2023-12-12 02:01
dh_perl_dbi
1.17
KB
-rwxr-xr-x
2026-06-22 07:05
dh_perl_openssl
1.53
KB
-rwxr-xr-x
2022-05-01 18:31
dh_python3-ply
2.28
KB
-rwxr-xr-x
2018-07-25 07:05
dialog
254.66
KB
-rwxr-xr-x
2024-01-23 17:05
diff
134.55
KB
-rwxr-xr-x
2024-04-08 15:55
diff3
58.52
KB
-rwxr-xr-x
2024-04-08 15:55
dir
138.98
KB
-rwxr-xr-x
2026-01-23 13:30
dircolors
46.52
KB
-rwxr-xr-x
2026-01-23 13:30
dirmngr
473.77
KB
-rwxr-xr-x
2026-01-05 22:01
dirmngr-client
54.92
KB
-rwxr-xr-x
2026-01-05 22:01
dirname
34.38
KB
-rwxr-xr-x
2026-01-23 13:30
distro-info
26.89
KB
-rwxr-xr-x
2024-04-08 15:56
dmesg
68.64
KB
-rwxr-xr-x
2026-03-06 16:00
dnsdomainname
22.23
KB
-rwxr-xr-x
2024-04-08 15:59
dnssec-cds
51.39
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-dsfromkey
38.38
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-keyfromlabel
42.38
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-keygen
46.38
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-revoke
30.38
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-settime
46.38
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-signzone
90.41
KB
-rwxr-xr-x
2026-05-21 13:51
dnssec-verify
30.39
KB
-rwxr-xr-x
2026-05-21 13:51
do-release-upgrade
10.42
KB
-rwxr-xr-x
2026-01-19 15:31
docker
37.95
MB
-rwxr-xr-x
2024-06-29 00:02
docker-compose
996
B
-rwxr-xr-x
2024-03-09 10:48
docker-proxy
2.09
MB
-rwxr-xr-x
2024-06-29 00:02
dockerd
101.37
MB
-rwxr-xr-x
2024-06-29 00:02
dockerd-rootless-setuptool.sh
14.49
KB
-rwxr-xr-x
2024-06-29 00:02
dockerd-rootless.sh
7.08
KB
-rwxr-xr-x
2024-06-29 00:02
domainname
22.23
KB
-rwxr-xr-x
2024-04-08 15:59
dotlockfile
22.15
KB
-rwxr-sr-x
2024-04-08 16:05
dpkg
310.72
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-architecture
14.85
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-buildapi
1.79
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-buildflags
8.14
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-buildpackage
34.2
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-buildtree
1.88
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-checkbuilddeps
7.45
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-deb
142.58
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-distaddfile
2.72
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-divert
118.57
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-genbuildinfo
18.54
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-genchanges
17.92
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-gencontrol
14.29
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-gensymbols
10.66
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-maintscript-helper
20.71
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-mergechangelogs
8.87
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-name
6.61
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-parsechangelog
4.83
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-query
134.56
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-realpath
4.09
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-scanpackages
8.45
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-scansources
9.1
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-shlibdeps
31.46
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-source
23.05
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-split
98.53
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-statoverride
50.38
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-trigger
42.53
KB
-rwxr-xr-x
2026-05-06 17:38
dpkg-vendor
3.18
KB
-rwxr-xr-x
2026-05-06 17:38
dselect
222.58
KB
-rwxr-xr-x
2026-05-06 17:38
du
98.51
KB
-rwxr-xr-x
2026-01-23 13:30
dumpkeys
162.85
KB
-rwxr-xr-x
2024-03-31 09:02
dvipdf
1007
B
-rwxr-xr-x
2025-09-25 16:37
dwp
1.87
MB
-rwxr-xr-x
2026-02-09 21:03
echo
34.38
KB
-rwxr-xr-x
2026-01-23 13:30
ed
58.55
KB
-rwxr-xr-x
2024-02-17 11:12
edit
18.06
KB
-rwxr-xr-x
2026-07-02 14:59
editor
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
editres
72.69
KB
-rwxr-xr-x
2024-03-31 17:27
egrep
41
B
-rwxr-xr-x
2024-04-08 15:58
eject
42.23
KB
-rwxr-xr-x
2026-03-06 16:00
elfedit
34.72
KB
-rwxr-xr-x
2026-02-09 21:03
enc2xs
40.96
KB
-rwxr-xr-x
2026-06-12 13:42
encguess
3
KB
-rwxr-xr-x
2026-06-12 13:42
enchant-2
22.3
KB
-rwxr-xr-x
2024-03-31 07:33
enchant-lsmod-2
14.3
KB
-rwxr-xr-x
2024-03-31 07:33
encode_keychange
22.3
KB
-rwxr-xr-x
2026-01-06 12:41
env
46.95
KB
-rwxr-xr-x
2026-01-23 13:30
envsubst
34.38
KB
-rwxr-xr-x
2024-04-08 15:58
eps2eps
639
B
-rwxr-xr-x
2025-09-25 16:37
epsffit
18.15
KB
-rwxr-xr-x
2024-02-17 18:37
eqn
188.45
KB
-rwxr-xr-x
2024-03-31 08:54
escodegen
2.65
KB
-rwxr-xr-x
2023-10-17 07:31
esgenerate
2.36
KB
-rwxr-xr-x
2023-10-17 07:31
eslint
2.57
KB
-rwxr-xr-x
2019-09-14 01:35
esparse
4.83
KB
-rwxr-xr-x
2018-06-16 14:36
esvalidate
7.56
KB
-rwxr-xr-x
2018-06-16 14:36
ex
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
expand
34.53
KB
-rwxr-xr-x
2026-01-23 13:30
expiry
26.52
KB
-rwxr-sr-x
2024-05-30 14:52
expr
42.41
KB
-rwxr-xr-x
2026-01-23 13:30
extractres
2.68
KB
-rwxr-xr-x
2024-02-17 18:37
factor
62.51
KB
-rwxr-xr-x
2026-01-23 13:30
faillog
22.63
KB
-rwxr-xr-x
2024-05-30 14:52
faked-sysv
30.39
KB
-rwxr-xr-x
2024-01-21 16:56
faked-tcp
34.38
KB
-rwxr-xr-x
2024-01-21 16:56
fakeroot
3.9
KB
-rwxr-xr-x
2024-01-21 16:56
fakeroot-sysv
3.9
KB
-rwxr-xr-x
2024-01-21 16:56
fakeroot-tcp
3.9
KB
-rwxr-xr-x
2024-01-21 16:56
fallocate
26.38
KB
-rwxr-xr-x
2026-03-06 16:00
false
26.3
KB
-rwxr-xr-x
2026-01-23 13:30
fc-cache
22.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-cat
18.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-conflist
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-list
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-match
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-pattern
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-query
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-scan
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fc-validate
14.38
KB
-rwxr-xr-x
2024-03-31 00:59
fcgistarter
14.3
KB
-rwxr-xr-x
2026-07-06 16:27
fetchmail
302.7
KB
-rwxr-xr-x
2025-10-08 11:40
fgconsole
14.37
KB
-rwxr-xr-x
2024-03-31 09:02
fgrep
41
B
-rwxr-xr-x
2024-04-08 15:58
filan
50.48
KB
-rwxr-xr-x
2026-07-03 12:45
file
30.6
KB
-rwxr-xr-x
2024-03-31 07:35
find
199.48
KB
-rwxr-xr-x
2024-04-08 15:57
findmnt
67.66
KB
-rwxr-xr-x
2026-03-06 16:00
finger
30.63
KB
-rwxr-xr-x
2019-07-07 23:09
fixdlsrps
1.53
KB
-rwxr-xr-x
2024-02-17 18:37
fixfmps
599
B
-rwxr-xr-x
2024-02-17 18:37
fixproc
15.16
KB
-rwxr-xr-x
2026-01-06 12:41
fixpsditps
694
B
-rwxr-xr-x
2024-02-17 18:37
fixpspps
1.27
KB
-rwxr-xr-x
2024-02-17 18:37
fixscribeps
479
B
-rwxr-xr-x
2024-02-17 18:37
fixtpps
699
B
-rwxr-xr-x
2024-02-17 18:37
fixwfwps
857
B
-rwxr-xr-x
2024-02-17 18:37
fixwpps
732
B
-rwxr-xr-x
2024-02-17 18:37
fixwwps
427
B
-rwxr-xr-x
2024-02-17 18:37
flock
22.48
KB
-rwxr-xr-x
2026-03-06 16:00
fmt
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
fold
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
fonttosfnt
38.16
KB
-rwxr-xr-x
2024-04-08 16:22
formail
46.58
KB
-rwxr-xr-x
2024-04-08 16:16
free
26.38
KB
-rwxr-xr-x
2024-09-26 08:44
fromdos
18.17
KB
-rwxr-xr-x
2023-01-24 20:47
ftp
182.9
KB
-rwxr-xr-x
2024-04-08 14:50
funzip
26.3
KB
-rwxr-xr-x
2024-10-02 13:29
fuser
39.34
KB
-rwxr-xr-x
2024-03-31 17:02
fusermount
38.38
KB
-rwsr-xr-x
2024-04-08 15:57
fusermount3
38.38
KB
-rwsr-xr-x
2024-04-08 15:57
g++
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
g++-13
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
galera_new_cluster
917
B
-rwxr-xr-x
2025-10-11 02:08
galera_recovery
3.29
KB
-rwxr-xr-x
2025-10-11 02:08
gapplication
22.38
KB
-rwxr-xr-x
2026-01-28 17:53
gawk
722.5
KB
-rwxr-xr-x
2026-07-20 22:38
gawkbug
6.74
KB
-rwxr-xr-x
2026-07-20 22:38
gcc
999.05
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-11
906.92
KB
-rwxr-xr-x
2025-12-18 07:26
gcc-12
1.33
MB
-rwxr-xr-x
2025-12-18 07:53
gcc-13
999.05
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-9
766.71
KB
-rwxr-xr-x
2026-01-12 02:59
gcc-ar
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-ar-11
26.59
KB
-rwxr-xr-x
2025-12-18 07:26
gcc-ar-12
34.7
KB
-rwxr-xr-x
2025-12-18 07:53
gcc-ar-13
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-ar-9
26.52
KB
-rwxr-xr-x
2026-01-12 02:59
gcc-nm
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-nm-11
26.59
KB
-rwxr-xr-x
2025-12-18 07:26
gcc-nm-12
34.7
KB
-rwxr-xr-x
2025-12-18 07:53
gcc-nm-13
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-nm-9
22.51
KB
-rwxr-xr-x
2026-01-12 02:59
gcc-ranlib
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-ranlib-11
26.59
KB
-rwxr-xr-x
2025-12-18 07:26
gcc-ranlib-12
34.7
KB
-rwxr-xr-x
2025-12-18 07:53
gcc-ranlib-13
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
gcc-ranlib-9
26.52
KB
-rwxr-xr-x
2026-01-12 02:59
gcore
3.43
KB
-rwxr-xr-x
2026-02-05 01:58
gcov
432.13
KB
-rwxr-xr-x
2025-12-18 20:59
gcov-11
400.05
KB
-rwxr-xr-x
2025-12-18 07:26
gcov-12
740.37
KB
-rwxr-xr-x
2025-12-18 07:53
gcov-13
432.13
KB
-rwxr-xr-x
2025-12-18 20:59
gcov-9
383.92
KB
-rwxr-xr-x
2026-01-12 02:59
gcov-dump
348.08
KB
-rwxr-xr-x
2025-12-18 20:59
gcov-dump-11
251.88
KB
-rwxr-xr-x
2025-12-18 07:26
gcov-dump-12
576.2
KB
-rwxr-xr-x
2025-12-18 07:53
gcov-dump-13
348.08
KB
-rwxr-xr-x
2025-12-18 20:59
gcov-dump-9
235.79
KB
-rwxr-xr-x
2026-01-12 02:59
gcov-tool
304.05
KB
-rwxr-xr-x
2025-12-18 20:59
gcov-tool-11
275.97
KB
-rwxr-xr-x
2025-12-18 07:26
gcov-tool-12
600.3
KB
-rwxr-xr-x
2025-12-18 07:53
gcov-tool-13
304.05
KB
-rwxr-xr-x
2025-12-18 20:59
gcov-tool-9
267.86
KB
-rwxr-xr-x
2026-01-12 02:59
gcr-viewer
14.37
KB
-rwxr-xr-x
2024-04-08 14:39
gcr-viewer-gtk4
30.37
KB
-rwxr-xr-x
2024-04-04 14:50
gdb
8.51
MB
-rwxr-xr-x
2026-02-05 01:58
gdb-add-index
4.52
KB
-rwxr-xr-x
2026-02-05 01:58
gdbtui
126
B
-rwxr-xr-x
2026-02-05 01:58
gdbus
50.38
KB
-rwxr-xr-x
2026-01-28 17:53
gdk-pixbuf-csource
14.33
KB
-rwxr-xr-x
2026-04-02 13:40
gdk-pixbuf-pixdata
14.31
KB
-rwxr-xr-x
2026-04-02 13:40
gdk-pixbuf-thumbnailer
18.39
KB
-rwxr-xr-x
2026-04-02 13:40
gencat
26.44
KB
-rwxr-xr-x
2026-07-23 17:18
geqn
188.45
KB
-rwxr-xr-x
2024-03-31 08:54
getafm
6.18
KB
-rwxr-xr-x
2024-02-17 18:37
getconf
26.36
KB
-rwxr-xr-x
2026-07-23 17:18
getent
38.72
KB
-rwxr-xr-x
2026-07-23 17:18
getfacl
30.38
KB
-rwxr-xr-x
2024-10-02 12:40
getkeycodes
14.37
KB
-rwxr-xr-x
2024-03-31 09:02
getopt
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
gettext
34.38
KB
-rwxr-xr-x
2024-04-08 15:58
gettext.sh
5.07
KB
-rwxr-xr-x
2024-04-08 15:58
gettextize
41.28
KB
-rwxr-xr-x
2024-04-08 15:58
ghostscript
14.15
KB
-rwxr-xr-x
2025-09-25 16:37
ginstall-info
47.24
KB
-rwxr-xr-x
2024-03-30 23:49
gio
102.4
KB
-rwxr-xr-x
2026-01-28 17:53
gio-querymodules
18.3
KB
-rwxr-xr-x
2026-01-28 17:53
git
3.88
MB
-rwxr-xr-x
2025-07-02 20:23
git-receive-pack
3.88
MB
-rwxr-xr-x
2025-07-02 20:23
git-shell
624.81
KB
-rwxr-xr-x
2025-07-02 20:23
git-upload-archive
3.88
MB
-rwxr-xr-x
2025-07-02 20:23
git-upload-pack
3.88
MB
-rwxr-xr-x
2025-07-02 20:23
glib-compile-schemas
54.3
KB
-rwxr-xr-x
2026-01-28 17:53
gmake
253.72
KB
-rwxr-xr-x
2024-04-08 16:12
gnome-help
58.23
KB
-rwxr-xr-x
2025-04-17 14:58
gnome-keyring
22.54
KB
-rwxr-xr-x
2026-03-10 16:24
gnome-keyring-3
22.54
KB
-rwxr-xr-x
2026-03-10 16:24
gnome-keyring-daemon
965.32
KB
-rwxr-xr-x
2026-03-10 16:24
gnome-session
953
B
-rwxr-xr-x
2024-04-15 15:49
gnome-session-inhibit
22.31
KB
-rwxr-xr-x
2024-04-15 15:49
gnome-session-properties
62.26
KB
-rwxr-xr-x
2024-04-15 15:49
gnome-session-quit
14.61
KB
-rwxr-xr-x
2024-04-15 15:49
gnome-terminal
3.32
KB
-rwxr-xr-x
2024-03-31 06:13
gnome-terminal.real
87.7
KB
-rwxr-xr-x
2024-03-31 06:13
gnome-terminal.wrapper
2.65
KB
-rwxr-xr-x
2024-03-18 17:15
gold
3.07
MB
-rwxr-xr-x
2026-02-09 21:03
gp-archive
158.53
KB
-rwxr-xr-x
2026-02-09 21:03
gp-collect-app
174.37
KB
-rwxr-xr-x
2026-02-09 21:03
gp-display-html
626.89
KB
-rwxr-xr-x
2026-02-09 21:03
gp-display-src
150.35
KB
-rwxr-xr-x
2026-02-09 21:03
gp-display-text
290.37
KB
-rwxr-xr-x
2026-02-09 21:03
gpasswd
74.46
KB
-rwsr-xr-x
2024-05-30 14:52
gpg
1.09
MB
-rwxr-xr-x
2026-01-05 22:01
gpg-agent
357.52
KB
-rwxr-xr-x
2026-01-05 22:01
gpg-connect-agent
87.3
KB
-rwxr-xr-x
2026-01-05 22:01
gpg-wks-client
139.37
KB
-rwxr-xr-x
2026-01-05 22:01
gpg-wks-server
123.05
KB
-rwxr-xr-x
2026-01-05 22:01
gpgconf
115.36
KB
-rwxr-xr-x
2026-01-05 22:01
gpgparsemail
34.38
KB
-rwxr-xr-x
2026-01-05 22:01
gpgsm
501.37
KB
-rwxr-xr-x
2026-01-05 22:01
gpgsplit
26.62
KB
-rwxr-xr-x
2026-01-05 22:01
gpgtar
67.83
KB
-rwxr-xr-x
2026-01-05 22:01
gpgv
303.14
KB
-rwxr-xr-x
2026-01-05 22:01
gpic
196.06
KB
-rwxr-xr-x
2024-03-31 08:54
gprof
99.79
KB
-rwxr-xr-x
2026-02-09 21:03
gprofng
138.35
KB
-rwxr-xr-x
2026-02-09 21:03
gpu-manager
78.82
KB
-rwxr-xr-x
2026-03-18 05:59
grep
182.45
KB
-rwxr-xr-x
2024-04-08 15:58
gresource
22.3
KB
-rwxr-xr-x
2026-01-28 17:53
groff
94.51
KB
-rwxr-xr-x
2024-03-31 08:54
grog
18.75
KB
-rwxr-xr-x
2024-03-31 08:54
grops
162.55
KB
-rwxr-xr-x
2024-03-31 08:54
grotty
118.51
KB
-rwxr-xr-x
2024-03-31 08:54
groups
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
gs
14.15
KB
-rwxr-xr-x
2025-09-25 16:37
gsbj
350
B
-rwxr-xr-x
2025-09-25 16:37
gsdj
352
B
-rwxr-xr-x
2025-09-25 16:37
gsdj500
352
B
-rwxr-xr-x
2025-09-25 16:37
gsettings
30.3
KB
-rwxr-xr-x
2026-01-28 17:53
gslj
353
B
-rwxr-xr-x
2025-09-25 16:37
gslp
350
B
-rwxr-xr-x
2025-09-25 16:37
gsnd
277
B
-rwxr-xr-x
2025-09-25 16:37
gtbl
134.48
KB
-rwxr-xr-x
2024-03-31 08:54
gtk-builder-tool
34.73
KB
-rwxr-xr-x
2025-01-27 19:56
gtk-encode-symbolic-svg
18.41
KB
-rwxr-xr-x
2025-01-27 19:56
gtk-launch
18.46
KB
-rwxr-xr-x
2025-01-27 19:56
gtk-query-settings
14.3
KB
-rwxr-xr-x
2025-01-27 19:56
gtk-update-icon-cache
38.57
KB
-rwxr-xr-x
2025-01-27 19:56
gtk4-broadwayd
138.31
KB
-rwxr-xr-x
2026-03-17 14:21
gtk4-builder-tool
74.71
KB
-rwxr-xr-x
2026-03-17 14:21
gtk4-encode-symbolic-svg
11.35
MB
-rwxr-xr-x
2026-03-17 14:21
gtk4-launch
18.46
KB
-rwxr-xr-x
2026-03-17 14:21
gtk4-path-tool
50.38
KB
-rwxr-xr-x
2026-03-17 14:21
gtk4-query-settings
14.3
KB
-rwxr-xr-x
2026-03-17 14:21
gtk4-rendernode-tool
38.3
KB
-rwxr-xr-x
2026-03-17 14:21
gtk4-update-icon-cache
38.73
KB
-rwxr-xr-x
2026-03-17 14:21
gunzip
2.29
KB
-rwxr-xr-x
2026-07-03 11:53
gyp
932
B
-rwxr-xr-x
2022-07-16 12:04
gzexe
6.33
KB
-rwxr-xr-x
2026-07-03 11:53
gzip
91.23
KB
-rwxr-xr-x
2026-07-03 11:53
h2ph
28.54
KB
-rwxr-xr-x
2026-06-12 13:42
h2xs
59.51
KB
-rwxr-xr-x
2026-06-12 13:42
handlebars
4.14
KB
-rwxr-xr-x
2021-12-13 11:49
hardlink
46.48
KB
-rwxr-xr-x
2026-03-06 16:00
hd
46.39
KB
-rwxr-xr-x
2026-03-06 16:00
head
42.51
KB
-rwxr-xr-x
2026-01-23 13:30
helpztags
2.46
KB
-rwxr-xr-x
2026-06-15 22:15
hexdump
46.39
KB
-rwxr-xr-x
2026-03-06 16:00
hostid
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
hostname
22.23
KB
-rwxr-xr-x
2024-04-08 15:59
hostnamectl
30.45
KB
-rwxr-xr-x
2026-06-05 15:36
htcacheclean
34.31
KB
-rwxr-xr-x
2026-07-06 16:27
htdbm
26.3
KB
-rwxr-xr-x
2026-07-06 16:27
htdigest
14.3
KB
-rwxr-xr-x
2026-07-06 16:27
htop
370.33
KB
-rwxr-xr-x
2024-04-08 15:59
htpasswd
26.3
KB
-rwxr-xr-x
2026-07-06 16:27
hwe-support-status
11.24
KB
-rwxr-xr-x
2025-04-25 13:16
i386
26.65
KB
-rwxr-xr-x
2026-03-06 16:00
iceauth
42.42
KB
-rwxr-xr-x
2024-03-31 17:27
iconv
66.48
KB
-rwxr-xr-x
2026-07-23 17:18
id
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
includeres
1.43
KB
-rwxr-xr-x
2024-02-17 18:37
inetutils-telnet
177.85
KB
-rwxr-xr-x
2026-06-04 13:25
info
241.73
KB
-rwxr-xr-x
2024-03-30 23:49
infobrowser
241.73
KB
-rwxr-xr-x
2024-03-30 23:49
infocmp
66.38
KB
-rwxr-xr-x
2026-06-30 21:25
infotocap
90.41
KB
-rwxr-xr-x
2026-06-30 21:25
innochecksum
4.57
MB
-rwxr-xr-x
2025-10-11 02:08
innotop
445.71
KB
-rwxr-xr-x
2025-10-11 02:08
install
142.52
KB
-rwxr-xr-x
2026-01-23 13:30
install-info
47.24
KB
-rwxr-xr-x
2024-03-30 23:49
instmodsh
4.27
KB
-rwxr-xr-x
2026-06-12 13:42
ionice
18.38
KB
-rwxr-xr-x
2026-03-06 16:00
ip
754.8
KB
-rwxr-xr-x
2026-04-15 06:53
ipcmk
22.45
KB
-rwxr-xr-x
2026-03-06 16:00
ipcrm
18.38
KB
-rwxr-xr-x
2026-03-06 16:00
ipcs
38.38
KB
-rwxr-xr-x
2026-03-06 16:00
iptables-xml
92.95
KB
-rwxr-xr-x
2024-04-08 15:59
ischroot
14.48
KB
-rwxr-xr-x
2024-03-31 08:47
ispell-wrapper
7.05
KB
-rwxr-xr-x
2023-09-07 08:57
isql
34.3
KB
-rwxr-xr-x
2024-06-03 13:23
istanbul
2.45
KB
-rwxr-xr-x
2023-08-21 05:40
itox
26.3
KB
-rwxr-xr-x
2024-04-01 08:35
iusql
30.3
KB
-rwxr-xr-x
2024-06-03 13:23
join
50.55
KB
-rwxr-xr-x
2026-01-23 13:30
journalctl
78.91
KB
-rwxr-xr-x
2026-06-05 15:36
js
26.08
KB
-rwxr-xr-x
2024-04-18 19:08
js-yaml
2.67
KB
-rwxr-xr-x
2022-10-26 12:30
jsesc
3.74
KB
-rwxr-xr-x
2022-02-13 07:54
json5
3.51
KB
-rwxr-xr-x
2023-01-25 01:13
json_pp
4.88
KB
-rwxr-xr-x
2026-06-12 13:42
jsonpointer
1.79
KB
-rwxr-xr-x
2020-01-24 03:25
jsonschema
213
B
-rwxr-xr-x
2023-08-14 21:45
kbd_mode
14.66
KB
-rwxr-xr-x
2024-03-31 09:02
kbdinfo
18.37
KB
-rwxr-xr-x
2024-03-31 09:02
kbxutil
62.83
KB
-rwxr-xr-x
2026-01-05 22:01
kernel-install
54.67
KB
-rwxr-xr-x
2026-06-05 15:36
kill
22.38
KB
-rwxr-xr-x
2024-09-26 08:44
killall
31.34
KB
-rwxr-xr-x
2024-03-31 17:02
kmod
170.24
KB
-rwxr-xr-x
2026-04-30 12:32
last
34.38
KB
-rwxr-xr-x
2026-03-06 16:00
lastb
34.38
KB
-rwxr-xr-x
2026-03-06 16:00
lastlog
27.79
KB
-rwxr-xr-x
2024-05-30 14:52
lcf
7.6
KB
-rwxr-xr-x
2023-01-27 13:29
ld
1.3
MB
-rwxr-xr-x
2026-02-09 21:03
ld.bfd
1.3
MB
-rwxr-xr-x
2026-02-09 21:03
ld.gold
3.07
MB
-rwxr-xr-x
2026-02-09 21:03
ld.so
231.07
KB
-rwxr-xr-x
2026-07-23 17:18
ldapadd
66.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldapcompare
66.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldapdelete
66.47
KB
-rwxr-xr-x
2025-09-23 16:26
ldapexop
66.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldapmodify
66.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldapmodrdn
62.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldappasswd
66.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldapsearch
98.48
KB
-rwxr-xr-x
2025-09-23 16:26
ldapurl
14.3
KB
-rwxr-xr-x
2025-09-23 16:26
ldapwhoami
62.45
KB
-rwxr-xr-x
2025-09-23 16:26
ldd
5.26
KB
-rwxr-xr-x
2026-07-23 17:18
less
190.38
KB
-rwxr-xr-x
2024-04-28 11:44
lessecho
14.31
KB
-rwxr-xr-x
2024-04-28 11:44
lessfile
8.83
KB
-rwxr-xr-x
2023-02-12 10:17
lesskey
23.7
KB
-rwxr-xr-x
2024-04-28 11:44
lesspipe
8.83
KB
-rwxr-xr-x
2023-02-12 10:17
letsencrypt
958
B
-rwxr-xr-x
2024-02-09 01:14
lexgrog
99.51
KB
-rwxr-xr-x
2024-04-08 14:45
lft
2.43
KB
-rwxr-xr-x
2023-12-25 07:29
lft.db
2.43
KB
-rwxr-xr-x
2023-12-25 07:29
libnetcfg
15.41
KB
-rwxr-xr-x
2026-06-12 13:42
link
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
linux-check-removal
3.99
KB
-rwxr-xr-x
2026-02-18 06:21
linux-update-symlinks
6.17
KB
-rwxr-xr-x
2026-02-18 06:21
linux-version
2.63
KB
-rwxr-xr-x
2026-02-18 06:21
linux32
26.65
KB
-rwxr-xr-x
2026-03-06 16:00
linux64
26.65
KB
-rwxr-xr-x
2026-03-06 16:00
listres
14.73
KB
-rwxr-xr-x
2024-03-31 17:27
ln
54.51
KB
-rwxr-xr-x
2026-01-23 13:30
lnstat
22.66
KB
-rwxr-xr-x
2026-04-15 06:53
loadkeys
202.9
KB
-rwxr-xr-x
2024-03-31 09:02
loadunimap
34.46
KB
-rwxr-xr-x
2024-03-31 09:02
locale
49.63
KB
-rwxr-xr-x
2026-07-23 17:18
locale-check
14.15
KB
-rwxr-xr-x
2026-02-06 07:23
localectl
26.45
KB
-rwxr-xr-x
2026-06-05 15:36
localedef
319.09
KB
-rwxr-xr-x
2026-07-23 17:18
locate
306.55
KB
-rwxr-sr-x
2024-04-18 17:53
lockfile
18.3
KB
-rwxr-sr-x
2024-04-08 16:16
logger
38.97
KB
-rwxr-xr-x
2026-03-06 16:00
login
51.81
KB
-rwxr-xr-x
2024-05-30 14:52
loginctl
66.58
KB
-rwxr-xr-x
2026-06-05 15:36
logname
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
logresolve
14.31
KB
-rwxr-xr-x
2026-07-06 16:27
look
18.38
KB
-rwxr-xr-x
2026-03-06 16:00
lowntfs-3g
118.98
KB
-rwxr-xr-x
2026-07-11 15:55
ls
138.98
KB
-rwxr-xr-x
2026-01-23 13:30
lsattr
14.31
KB
-rwxr-xr-x
2024-04-28 23:44
lsb_release
2.59
KB
-rwxr-xr-x
2023-07-05 15:34
lsblk
146.38
KB
-rwxr-xr-x
2026-03-06 16:00
lscpu
110.38
KB
-rwxr-xr-x
2026-03-06 16:00
lsdev
1.56
KB
-rwxr-xr-x
2022-11-27 21:34
lsinitramfs
735
B
-rwxr-xr-x
2024-04-22 10:21
lsipc
50.38
KB
-rwxr-xr-x
2026-03-06 16:00
lslocks
30.77
KB
-rwxr-xr-x
2026-03-06 16:00
lslogins
50.38
KB
-rwxr-xr-x
2026-03-06 16:00
lsmem
38.38
KB
-rwxr-xr-x
2026-03-06 16:00
lsmod
170.24
KB
-rwxr-xr-x
2026-04-30 12:32
lsns
42.38
KB
-rwxr-xr-x
2026-03-06 16:00
lsof
171.66
KB
-rwxr-xr-x
2024-03-31 09:13
lspci
100.11
KB
-rwxr-xr-x
2024-04-08 16:15
lspgpot
1.06
KB
-rwxr-xr-x
2023-04-04 08:28
lsusb
246.52
KB
-rwxr-xr-x
2024-04-08 16:21
lto-dump
27.99
MB
-rwxr-xr-x
2025-12-18 20:59
lto-dump-11
24.01
MB
-rwxr-xr-x
2025-12-18 07:26
lto-dump-12
31.09
MB
-rwxr-xr-x
2025-12-18 07:53
lto-dump-13
27.99
MB
-rwxr-xr-x
2025-12-18 20:59
lwp-download
10.05
KB
-rwxr-xr-x
2026-05-22 15:41
lwp-dump
2.65
KB
-rwxr-xr-x
2026-05-22 15:41
lwp-mirror
2.36
KB
-rwxr-xr-x
2026-05-22 15:41
lwp-request
15.87
KB
-rwxr-xr-x
2026-05-22 15:41
lynx
1.91
MB
-rwxr-xr-x
2024-04-01 06:53
lz
2.48
KB
-rwxr-xr-x
2024-04-08 16:13
lzcat
126.47
KB
-rwxr-xr-x
2020-12-27 23:52
lzma
126.47
KB
-rwxr-xr-x
2020-12-27 23:52
lzmainfo
14.38
KB
-rwxr-xr-x
2026-05-28 16:06
lzmp
126.47
KB
-rwxr-xr-x
2020-12-27 23:52
m4
238.37
KB
-rwxr-xr-x
2024-04-08 16:12
mail
110.4
KB
-rwxr-xr-x
2024-04-08 15:54
mailq
1.45
MB
-rwsr-xr-x
2026-07-17 15:24
mailstat
5.67
KB
-rwxr-xr-x
2024-04-08 16:16
mailx
110.4
KB
-rwxr-xr-x
2024-04-08 15:54
make
253.72
KB
-rwxr-xr-x
2024-04-08 16:12
make-first-existing-target
4.79
KB
-rwxr-xr-x
2024-04-08 16:12
man
125.41
KB
-rwxr-xr-x
2024-04-08 14:45
man-recode
35.4
KB
-rwxr-xr-x
2024-04-08 14:45
mandb
143.67
KB
-rwxr-xr-x
2024-04-08 14:45
manpath
26.78
KB
-rwxr-xr-x
2024-04-08 14:45
mapscrn
30.46
KB
-rwxr-xr-x
2024-03-31 09:02
mariadb
5.07
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-access
109.31
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-admin
4.85
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-analyze
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-binlog
5.13
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-check
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-conv
4.56
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-convert-table-format
4.12
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-dump
4.93
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-dumpslow
8.05
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-find-rows
3.21
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-fix-extensions
1.22
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-hotcopy
34.53
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-import
4.83
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-install-db
22.13
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-optimize
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-plugin
4.54
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-repair
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-report
49.02
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-secure-installation
13.49
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-service-convert
2.45
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-setpermission
17.56
KB
-rwxr-xr-x
2025-10-11 02:08
mariadb-show
4.83
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-slap
4.85
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-tzinfo-to-sql
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-upgrade
4.97
MB
-rwxr-xr-x
2025-10-11 02:08
mariadb-waitpid
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
mariadbcheck
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mariadbd-multi
26.69
KB
-rwxr-xr-x
2025-10-11 02:08
mariadbd-safe
30.42
KB
-rwxr-xr-x
2025-10-11 02:08
mariadbd-safe-helper
4.49
MB
-rwxr-xr-x
2025-10-11 02:08
mattrib
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mawk
166.77
KB
-rwxr-xr-x
2024-04-08 16:12
mbadblocks
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mcat
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mcd
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mcheck
1.64
KB
-rwxr-xr-x
2024-04-08 16:13
mcomp
847
B
-rwxr-xr-x
2024-04-08 16:13
mcookie
26.45
KB
-rwxr-xr-x
2026-03-06 16:00
mcopy
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
md5sum
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
md5sum.textutils
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
mdel
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mdeltree
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mdir
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mdu
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mesa-overlay-control.py
5.59
KB
-rwxr-xr-x
2025-12-04 07:30
mesg
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
mformat
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
migrate-pubring-from-classic-gpg
3.02
KB
-rwxr-xr-x
2024-03-01 08:25
mimeopen
9.34
KB
-rwxr-xr-x
2023-12-06 16:32
mimetype
12.76
KB
-rwxr-xr-x
2023-12-06 16:32
minfo
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mk_modmap
15.78
KB
-rwxr-xr-x
2024-03-31 09:02
mkdir
74.51
KB
-rwxr-xr-x
2026-01-23 13:30
mkfifo
42.51
KB
-rwxr-xr-x
2026-01-23 13:30
mkfontdir
65
B
-rwxr-xr-x
2024-04-08 16:22
mkfontscale
42.67
KB
-rwxr-xr-x
2024-04-08 16:22
mkmanifest
14.38
KB
-rwxr-xr-x
2024-04-08 16:13
mknod
42.51
KB
-rwxr-xr-x
2026-01-23 13:30
mkpasswd
26.38
KB
-rwxr-xr-x
2024-04-01 18:14
mksquashfs
286.95
KB
-rwxr-xr-x
2024-04-08 16:20
mktemp
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
mlabel
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mmd
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mmount
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mmove
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
more
46.38
KB
-rwxr-xr-x
2026-03-06 16:00
mount
50.38
KB
-rwsr-xr-x
2026-03-06 16:00
mountpoint
18.38
KB
-rwxr-xr-x
2026-03-06 16:00
mpartition
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mrd
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mren
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
msgattrib
26.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgcat
26.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgcmp
30.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgcomm
26.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgconv
22.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgen
22.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgexec
22.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgfilter
34.38
KB
-rwxr-xr-x
2024-04-08 15:58
msgfmt
82.59
KB
-rwxr-xr-x
2024-04-08 15:58
msggrep
118.46
KB
-rwxr-xr-x
2024-04-08 15:58
msginit
66.39
KB
-rwxr-xr-x
2024-04-08 15:58
msgmerge
74.41
KB
-rwxr-xr-x
2024-04-08 15:58
msgunfmt
38.39
KB
-rwxr-xr-x
2024-04-08 15:58
msguniq
22.38
KB
-rwxr-xr-x
2024-04-08 15:58
mshortname
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mshowfat
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
msql2mysql
1.41
KB
-rwxr-xr-x
2025-10-11 02:08
mt
70.73
KB
-rwxr-xr-x
2024-04-08 15:55
mt-gnu
70.73
KB
-rwxr-xr-x
2024-04-08 15:55
mtools
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mtoolstest
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mtype
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
mv
134.52
KB
-rwxr-xr-x
2026-01-23 13:30
mxtar
784
B
-rwxr-xr-x
2024-04-08 16:13
my_print_defaults
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
myisam_ftdump
4.87
MB
-rwxr-xr-x
2025-10-11 02:08
myisamchk
4.99
MB
-rwxr-xr-x
2025-10-11 02:08
myisamlog
4.85
MB
-rwxr-xr-x
2025-10-11 02:08
myisampack
4.9
MB
-rwxr-xr-x
2025-10-11 02:08
mysql
5.07
MB
-rwxr-xr-x
2025-10-11 02:08
mysql_convert_table_format
4.12
KB
-rwxr-xr-x
2025-10-11 02:08
mysql_find_rows
3.21
KB
-rwxr-xr-x
2025-10-11 02:08
mysql_fix_extensions
1.22
KB
-rwxr-xr-x
2025-10-11 02:08
mysql_install_db
22.13
KB
-rwxr-xr-x
2025-10-11 02:08
mysql_plugin
4.54
MB
-rwxr-xr-x
2025-10-11 02:08
mysql_secure_installation
13.49
KB
-rwxr-xr-x
2025-10-11 02:08
mysql_setpermission
17.56
KB
-rwxr-xr-x
2025-10-11 02:08
mysql_tzinfo_to_sql
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
mysql_upgrade
4.97
MB
-rwxr-xr-x
2025-10-11 02:08
mysql_waitpid
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlaccess
109.31
KB
-rwxr-xr-x
2025-10-11 02:08
mysqladmin
4.85
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlanalyze
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlbinlog
5.13
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlcheck
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mysqld_multi
26.69
KB
-rwxr-xr-x
2025-10-11 02:08
mysqld_safe
30.42
KB
-rwxr-xr-x
2025-10-11 02:08
mysqld_safe_helper
4.49
MB
-rwxr-xr-x
2025-10-11 02:08
mysqldump
4.93
MB
-rwxr-xr-x
2025-10-11 02:08
mysqldumpslow
8.05
KB
-rwxr-xr-x
2025-10-11 02:08
mysqlhotcopy
34.53
KB
-rwxr-xr-x
2025-10-11 02:08
mysqlimport
4.83
MB
-rwxr-xr-x
2025-10-11 02:08
mysqloptimize
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlrepair
4.84
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlreport
49.02
KB
-rwxr-xr-x
2025-10-11 02:08
mysqlshow
4.83
MB
-rwxr-xr-x
2025-10-11 02:08
mysqlslap
4.85
MB
-rwxr-xr-x
2025-10-11 02:08
mytop
71.95
KB
-rwxr-xr-x
2025-10-11 02:08
mzip
205.36
KB
-rwxr-xr-x
2024-04-08 16:13
named-checkconf
38.4
KB
-rwxr-xr-x
2026-05-21 13:51
named-checkzone
30.4
KB
-rwxr-xr-x
2026-05-21 13:51
named-compilezone
30.4
KB
-rwxr-xr-x
2026-05-21 13:51
namei
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
nanoid
1.11
KB
-rwxr-xr-x
2023-10-17 14:47
nawk
722.5
KB
-rwxr-xr-x
2026-07-20 22:38
nc
38.63
KB
-rwxr-xr-x
2024-04-08 16:14
nc.openbsd
38.63
KB
-rwxr-xr-x
2024-04-08 16:14
ncal
36.95
KB
-rwxr-xr-x
2023-02-20 09:19
neqn
913
B
-rwxr-xr-x
2024-03-31 08:54
netcat
38.63
KB
-rwxr-xr-x
2024-04-08 16:14
netstat
154.59
KB
-rwxr-xr-x
2025-05-28 13:23
networkctl
122.58
KB
-rwxr-xr-x
2026-06-05 15:36
newaliases
1.45
MB
-rwsr-xr-x
2026-07-17 15:24
newgrp
39.71
KB
-rwsr-xr-x
2024-05-30 14:52
ngettext
34.38
KB
-rwxr-xr-x
2024-04-08 15:58
nice
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
nisdomainname
22.23
KB
-rwxr-xr-x
2024-04-08 15:59
nl
38.6
KB
-rwxr-xr-x
2026-01-23 13:30
nm
43.5
KB
-rwxr-xr-x
2026-02-09 21:03
node
26.08
KB
-rwxr-xr-x
2024-04-18 19:08
node-coveralls
322
B
-rwxr-xr-x
2023-01-25 01:11
node-gyp
3.37
KB
-rwxr-xr-x
2023-11-23 07:27
nodejs
26.08
KB
-rwxr-xr-x
2024-04-18 19:08
nohup
34.41
KB
-rwxr-xr-x
2026-01-23 13:30
notify-send
26.23
KB
-rwxr-xr-x
2024-03-31 02:08
npm
54
B
-rwxr-xr-x
2023-11-23 07:39
npm-arborist
3.26
KB
-rwxr-xr-x
2023-11-23 07:39
nproc
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
npx
2.85
KB
-rwxr-xr-x
2023-11-23 07:39
nroff
5.58
KB
-rwxr-xr-x
2024-03-31 08:54
nsenter
30.6
KB
-rwxr-xr-x
2026-03-06 16:00
nstat
30.38
KB
-rwxr-xr-x
2026-04-15 06:53
ntfs-3g
159.01
KB
-rwxr-xr-x
2026-07-11 15:55
ntfs-3g.probe
14.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfscat
26.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfscluster
38.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfscmp
30.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsdecrypt
42.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsfallocate
26.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsfix
34.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsinfo
54.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsls
27.45
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsmove
30.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsrecover
102.38
KB
-rwxr-xr-x
2026-07-11 15:55
ntfssecaudit
78.86
KB
-rwxr-xr-x
2026-07-11 15:55
ntfstruncate
26.3
KB
-rwxr-xr-x
2026-07-11 15:55
ntfsusermap
18.3
KB
-rwxr-xr-x
2026-07-11 15:55
ntfswipe
46.91
KB
-rwxr-xr-x
2026-07-11 15:55
numfmt
58.54
KB
-rwxr-xr-x
2026-01-23 13:30
nvidia-detector
270
B
-rwxr-xr-x
2026-03-18 05:59
nyc
3.37
KB
-rwxr-xr-x
2023-08-21 05:40
objcopy
162.63
KB
-rwxr-xr-x
2026-02-09 21:03
objdump
381.69
KB
-rwxr-xr-x
2026-02-09 21:03
od
70.51
KB
-rwxr-xr-x
2026-01-23 13:30
odbcinst
22.15
KB
-rwxr-xr-x
2024-06-03 13:23
oem-getlogs
8.3
KB
-rwxr-xr-x
2026-04-28 17:12
open
25.46
KB
-rwxr-xr-x
2022-08-01 14:14
opener
161
B
-rwxr-xr-x
2021-11-20 16:02
openssl
981.8
KB
-rwxr-xr-x
2026-06-02 19:33
openvt
22.73
KB
-rwxr-xr-x
2024-03-31 09:02
p11-kit
206.7
KB
-rwxr-xr-x
2024-08-09 02:33
pacote
3.89
KB
-rwxr-xr-x
2023-11-23 07:39
pager
190.38
KB
-rwxr-xr-x
2024-04-28 11:44
partx
62.38
KB
-rwxr-xr-x
2026-03-06 16:00
passwd
62.65
KB
-rwsr-xr-x
2024-05-30 14:52
paste
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
patch
182.52
KB
-rwxr-xr-x
2024-04-08 16:15
pathchk
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
pdb2.7
45.02
KB
-rwxr-xr-x
2022-07-01 10:30
pdb3
67.83
KB
-rwxr-xr-x
2026-06-19 12:46
pdb3.12
67.83
KB
-rwxr-xr-x
2026-06-19 12:46
pdf2dsc
698
B
-rwxr-xr-x
2025-09-25 16:37
pdf2ps
909
B
-rwxr-xr-x
2025-09-25 16:37
peekfd
14.3
KB
-rwxr-xr-x
2024-03-31 17:02
perl
3.83
MB
-rwxr-xr-x
2026-06-12 13:42
perl5.38-x86_64-linux-gnu
14.3
KB
-rwxr-xr-x
2026-06-12 13:42
perl5.38.2
3.83
MB
-rwxr-xr-x
2026-06-12 13:42
perlbug
44.52
KB
-rwxr-xr-x
2026-06-12 13:42
perldoc
125
B
-rwxr-xr-x
2024-04-05 19:56
perli11ndoc
58.17
KB
-rwxr-xr-x
2024-03-31 07:49
perlivp
10.61
KB
-rwxr-xr-x
2026-06-12 13:42
perlthanks
44.52
KB
-rwxr-xr-x
2026-06-12 13:42
perror
4.72
MB
-rwxr-xr-x
2025-10-11 02:08
pf2afm
498
B
-rwxr-xr-x
2025-09-25 16:37
pfbtopfa
516
B
-rwxr-xr-x
2025-09-25 16:37
pgrep
34.47
KB
-rwxr-xr-x
2024-09-26 08:44
phar
14.84
KB
-rwxr-xr-x
2026-07-16 18:30
phar.phar
14.84
KB
-rwxr-xr-x
2026-07-16 18:30
phar.phar8.3
14.84
KB
-rwxr-xr-x
2026-07-16 18:30
phar8.3
14.84
KB
-rwxr-xr-x
2026-07-16 18:30
phar8.3.phar
14.84
KB
-rwxr-xr-x
2026-07-16 18:30
php
5.52
MB
-rwxr-xr-x
2026-07-16 18:30
php8.3
5.52
MB
-rwxr-xr-x
2026-07-16 18:30
pic
196.06
KB
-rwxr-xr-x
2024-03-31 08:54
piconv
8.16
KB
-rwxr-xr-x
2026-06-12 13:42
pidof
26.23
KB
-rwxr-xr-x
2024-04-08 16:20
pidwait
34.47
KB
-rwxr-xr-x
2024-09-26 08:44
pigz
130.37
KB
-rwxr-xr-x
2023-08-22 19:47
pinentry
74.66
KB
-rwxr-xr-x
2024-03-31 16:59
pinentry-curses
58.65
KB
-rwxr-xr-x
2024-03-31 16:59
pinentry-gnome3
74.66
KB
-rwxr-xr-x
2024-03-31 16:59
pinentry-x11
74.66
KB
-rwxr-xr-x
2024-03-31 16:59
ping
87.7
KB
-rwxr-xr-x
2025-07-24 11:51
ping4
87.7
KB
-rwxr-xr-x
2025-07-24 11:51
ping6
87.7
KB
-rwxr-xr-x
2025-07-24 11:51
pinky
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
pkaction
18.3
KB
-rwxr-xr-x
2026-04-10 10:57
pkcheck
22.3
KB
-rwxr-xr-x
2026-04-10 10:57
pkcon
54.3
KB
-rwxr-xr-x
2026-04-20 12:20
pkexec
30.23
KB
-rwsr-xr-x
2026-04-10 10:57
pkill
34.47
KB
-rwxr-xr-x
2024-09-26 08:44
pkmon
22.3
KB
-rwxr-xr-x
2026-04-20 12:20
pkttyagent
22.3
KB
-rwxr-xr-x
2026-04-10 10:57
pl2pm
4.43
KB
-rwxr-xr-x
2026-06-12 13:42
pldd
22.44
KB
-rwxr-xr-x
2026-07-23 17:18
plocate
306.55
KB
-rwxr-sr-x
2024-04-18 17:53
pmap
34.4
KB
-rwxr-xr-x
2024-09-26 08:44
pod2html
3.95
KB
-rwxr-xr-x
2026-06-12 13:42
pod2man
18.46
KB
-rwxr-xr-x
2026-06-12 13:42
pod2text
12.8
KB
-rwxr-xr-x
2026-06-12 13:42
pod2usage
4.01
KB
-rwxr-xr-x
2026-06-12 13:42
podchecker
3.57
KB
-rwxr-xr-x
2026-06-12 13:42
popclient
302.7
KB
-rwxr-xr-x
2025-10-08 11:40
pphs
404
B
-rwxr-xr-x
2025-09-25 16:37
pr
70.58
KB
-rwxr-xr-x
2026-01-23 13:30
precat
5.52
KB
-rwxr-xr-x
2024-04-08 15:54
preconv
58.48
KB
-rwxr-xr-x
2024-03-31 08:54
preunzip
5.52
KB
-rwxr-xr-x
2024-04-08 15:54
prezip
5.52
KB
-rwxr-xr-x
2024-04-08 15:54
prezip-bin
14.3
KB
-rwxr-xr-x
2024-04-08 15:54
print
18.06
KB
-rwxr-xr-x
2026-07-02 14:59
printafm
395
B
-rwxr-xr-x
2025-09-25 16:37
printenv
34.38
KB
-rwxr-xr-x
2026-01-23 13:30
printf
54.44
KB
-rwxr-xr-x
2026-01-23 13:30
prlimit
26.89
KB
-rwxr-xr-x
2026-03-06 16:00
pro
1003
B
-rwxr-xr-x
2026-07-06 13:28
procan
42.41
KB
-rwxr-xr-x
2026-07-03 12:45
procinfo
106.2
KB
-rwxr-xr-x
2022-11-27 21:34
procmail
102.77
KB
-rwsr-sr-x
2024-04-08 16:16
prove
13.34
KB
-rwxr-xr-x
2026-06-12 13:42
prtstat
18.38
KB
-rwxr-xr-x
2024-03-31 17:02
ps
142.99
KB
-rwxr-xr-x
2024-09-26 08:44
ps2ascii
631
B
-rwxr-xr-x
2025-09-25 16:37
ps2epsi
1.23
KB
-rwxr-xr-x
2025-09-25 16:37
ps2pdf
272
B
-rwxr-xr-x
2025-09-25 16:37
ps2pdf12
215
B
-rwxr-xr-x
2025-09-25 16:37
ps2pdf13
215
B
-rwxr-xr-x
2025-09-25 16:37
ps2pdf14
215
B
-rwxr-xr-x
2025-09-25 16:37
ps2pdfwr
1.05
KB
-rwxr-xr-x
2025-09-25 16:37
ps2ps
647
B
-rwxr-xr-x
2025-09-25 16:37
ps2ps2
669
B
-rwxr-xr-x
2025-09-25 16:37
ps2txt
631
B
-rwxr-xr-x
2025-09-25 16:37
psbook
18.15
KB
-rwxr-xr-x
2024-02-17 18:37
psfaddtable
22.37
KB
-rwxr-xr-x
2024-03-31 09:02
psfgettable
22.37
KB
-rwxr-xr-x
2024-03-31 09:02
psfstriptable
22.37
KB
-rwxr-xr-x
2024-03-31 09:02
psfxtable
22.37
KB
-rwxr-xr-x
2024-03-31 09:02
psjoin
5
KB
-rwxr-xr-x
2024-02-17 18:37
pslog
14.3
KB
-rwxr-xr-x
2024-03-31 17:02
psmerge
2.64
KB
-rwxr-xr-x
2024-02-17 18:37
psnup
34.82
KB
-rwxr-xr-x
2024-02-17 18:37
psresize
30.82
KB
-rwxr-xr-x
2024-02-17 18:37
psselect
18.15
KB
-rwxr-xr-x
2024-02-17 18:37
pstops
30.82
KB
-rwxr-xr-x
2024-02-17 18:37
pstree
35.32
KB
-rwxr-xr-x
2024-03-31 17:02
pstree.x11
35.32
KB
-rwxr-xr-x
2024-03-31 17:02
ptar
3.48
KB
-rwxr-xr-x
2026-06-12 13:42
ptardiff
2.58
KB
-rwxr-xr-x
2026-06-12 13:42
ptargrep
4.29
KB
-rwxr-xr-x
2026-06-12 13:42
ptx
54.54
KB
-rwxr-xr-x
2026-01-23 13:30
pv
79.41
KB
-rwxr-xr-x
2024-04-08 16:16
pwd
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
pwdx
14.38
KB
-rwxr-xr-x
2024-09-26 08:44
pwgen
34.77
KB
-rwxr-xr-x
2024-04-18 18:03
py3clean
7.63
KB
-rwxr-xr-x
2025-11-12 12:15
py3compile
13
KB
-rwxr-xr-x
2025-11-12 12:15
py3versions
12.52
KB
-rwxr-xr-x
2025-11-12 12:15
pydoc2.7
79
B
-rwxr-xr-x
2022-07-01 10:30
pydoc3
80
B
-rwxr-xr-x
2026-06-19 12:46
pydoc3.12
80
B
-rwxr-xr-x
2026-06-19 12:46
pygettext2.7
21.56
KB
-rwxr-xr-x
2022-07-01 10:30
pygettext3
23.66
KB
-rwxr-xr-x
2026-06-19 12:46
pygettext3.12
23.66
KB
-rwxr-xr-x
2026-06-19 12:46
python-dotenv
974
B
-rwxr-xr-x
2024-01-27 10:21
python2.7
3.43
MB
-rwxr-xr-x
2022-07-01 10:30
python3
7.65
MB
-rwxr-xr-x
2026-06-19 12:46
python3.12
7.65
MB
-rwxr-xr-x
2026-06-19 12:46
pzstd
690.54
KB
-rwxr-xr-x
2024-08-09 02:33
qrcode-terminal
1.79
KB
-rwxr-xr-x
2023-11-23 07:39
quirks-handler
2.4
KB
-rwxr-xr-x
2026-03-18 05:59
quota
79.59
KB
-rwxr-xr-x
2024-04-01 07:31
quotasync
62.88
KB
-rwxr-xr-x
2024-04-01 07:31
ranlib
54.48
KB
-rwxr-xr-x
2026-02-09 21:03
rbash
1.38
MB
-rwxr-xr-x
2024-03-31 08:41
rdma
102.52
KB
-rwxr-xr-x
2026-04-15 06:53
readelf
770.78
KB
-rwxr-xr-x
2026-02-09 21:03
readlink
42.41
KB
-rwxr-xr-x
2026-01-23 13:30
realpath
42.41
KB
-rwxr-xr-x
2026-01-23 13:30
recode-sr-latin
14.38
KB
-rwxr-xr-x
2024-04-08 15:58
red
89
B
-rwxr-xr-x
2024-02-17 11:12
regjsparser
1.74
KB
-rwxr-xr-x
2022-09-16 16:16
rename.ul
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
renice
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
replace
4.51
MB
-rwxr-xr-x
2025-10-11 02:08
reset
26.31
KB
-rwxr-xr-x
2026-06-30 21:25
resizecons
26.46
KB
-rwxr-xr-x
2024-03-31 09:02
resizepart
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
resolve_stack_dump
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
resolvectl
158.67
KB
-rwxr-xr-x
2026-06-05 15:36
resolveip
4.53
MB
-rwxr-xr-x
2025-10-11 02:08
rev
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
rgrep
30
B
-rwxr-xr-x
2023-07-21 14:47
rimraf
1.83
KB
-rwxr-xr-x
2022-04-15 05:15
rm
58.51
KB
-rwxr-xr-x
2026-01-23 13:30
rmdir
46.41
KB
-rwxr-xr-x
2026-01-23 13:30
rootlesskit
12.07
MB
-rwxr-xr-x
2024-06-29 00:02
rootlesskit-docker-proxy
7.54
MB
-rwxr-xr-x
2024-06-29 00:02
rotatelogs
26.38
KB
-rwxr-xr-x
2026-07-06 16:27
routel
1.62
KB
-rwxr-xr-x
2026-04-15 06:53
rpcgen
94.59
KB
-rwxr-xr-x
2024-04-08 16:18
rrsync
12.34
KB
-rwxr-xr-x
2026-06-08 14:10
rsync
522.15
KB
-rwxr-xr-x
2026-06-08 14:10
rsync-ssl
5.02
KB
-rwxr-xr-x
2026-06-08 14:10
rtstat
22.66
KB
-rwxr-xr-x
2026-04-15 06:53
run-mailcap
18.06
KB
-rwxr-xr-x
2026-07-02 14:59
run-parts
26.82
KB
-rwxr-xr-x
2024-03-31 08:47
run-with-aspell
57
B
-rwxr-xr-x
2024-04-08 15:54
runc
9.36
MB
-rwxr-xr-x
2024-06-18 19:00
runcon
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
rview
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
rvim
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
sasl-sample-client
26.47
KB
-rwxr-xr-x
2024-08-09 02:33
savelog
10.24
KB
-rwxr-xr-x
2024-03-31 08:47
scalar
668.94
KB
-rwxr-xr-x
2025-07-02 20:23
scp
134.59
KB
-rwxr-xr-x
2026-07-09 18:16
screen
478.24
KB
-rwxr-xr-x
2026-01-22 19:59
screendump
14.3
KB
-rwxr-xr-x
2024-03-31 09:02
script
54.38
KB
-rwxr-xr-x
2026-03-06 16:00
scriptlive
42.38
KB
-rwxr-xr-x
2026-03-06 16:00
scriptreplay
34.38
KB
-rwxr-xr-x
2026-03-06 16:00
sdiff
50.39
KB
-rwxr-xr-x
2024-04-08 15:55
sed
110.57
KB
-rwxr-xr-x
2026-04-17 18:02
see
18.06
KB
-rwxr-xr-x
2026-07-02 14:59
select-default-iwrap
474
B
-rwxr-xr-x
2023-09-07 08:57
select-editor
2.39
KB
-rwxr-xr-x
2024-02-04 18:05
semver
4.71
KB
-rwxr-xr-x
2023-08-13 05:13
sensible-browser
1.55
KB
-rwxr-xr-x
2024-02-04 18:05
sensible-editor
1.52
KB
-rwxr-xr-x
2024-02-04 18:05
sensible-pager
921
B
-rwxr-xr-x
2024-02-04 18:05
sensible-terminal
1.15
KB
-rwxr-xr-x
2024-02-04 18:05
seq
50.51
KB
-rwxr-xr-x
2026-01-23 13:30
session-migration
22.15
KB
-rwxr-xr-x
2024-03-31 17:12
sessreg
14.31
KB
-rwxr-xr-x
2024-03-31 17:27
setarch
26.65
KB
-rwxr-xr-x
2026-03-06 16:00
setfacl
38.38
KB
-rwxr-xr-x
2024-10-02 12:40
setfont
54.46
KB
-rwxr-xr-x
2024-03-31 09:02
setkeycodes
14.37
KB
-rwxr-xr-x
2024-03-31 09:02
setleds
18.43
KB
-rwxr-xr-x
2024-03-31 09:02
setlogcons
14.37
KB
-rwxr-xr-x
2024-03-31 09:02
setmetamode
14.41
KB
-rwxr-xr-x
2024-03-31 09:02
setpci
30.38
KB
-rwxr-xr-x
2024-04-08 16:15
setpriv
38.38
KB
-rwxr-xr-x
2026-03-06 16:00
setsid
14.38
KB
-rwxr-xr-x
2026-03-06 16:00
setterm
34.38
KB
-rwxr-xr-x
2026-03-06 16:00
setupcon
40.06
KB
-rwxr-xr-x
2024-02-26 12:58
sftp
150.66
KB
-rwxr-xr-x
2026-07-09 18:16
sg
39.71
KB
-rwsr-xr-x
2024-05-30 14:52
sh
126.74
KB
-rwxr-xr-x
2024-03-31 08:47
sha1sum
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
sha224sum
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
sha256sum
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
sha384sum
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
sha512sum
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
shar
137.43
KB
-rwxr-xr-x
2023-02-03 18:10
shasum
9.75
KB
-rwxr-xr-x
2026-06-12 13:42
showchar
2.51
KB
-rwxr-xr-x
2024-02-17 18:37
showconsolefont
18.37
KB
-rwxr-xr-x
2024-03-31 09:02
showkey
18.37
KB
-rwxr-xr-x
2024-03-31 09:02
showrgb
14.31
KB
-rwxr-xr-x
2024-03-31 17:27
shred
54.51
KB
-rwxr-xr-x
2026-01-23 13:30
shuf
46.51
KB
-rwxr-xr-x
2026-01-23 13:30
size
30.45
KB
-rwxr-xr-x
2026-02-09 21:03
skill
26.41
KB
-rwxr-xr-x
2024-09-26 08:44
slabtop
22.44
KB
-rwxr-xr-x
2024-09-26 08:44
sleep
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
slirp4netns
62.93
KB
-rwxr-xr-x
2024-04-01 08:02
slogin
827.04
KB
-rwxr-xr-x
2026-07-09 18:16
snap
21.64
MB
-rwxr-xr-x
2026-07-13 14:38
snapctl
7.58
MB
-rwxr-xr-x
2026-07-13 14:38
snapfuse
38.23
KB
-rwxr-xr-x
2026-07-13 14:38
snice
26.41
KB
-rwxr-xr-x
2024-09-26 08:44
snmp-bridge-mib
29.96
KB
-rwxr-xr-x
2026-01-06 12:41
snmpbulkget
14.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpbulkwalk
14.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpcheck
32.91
KB
-rwxr-xr-x
2026-01-06 12:41
snmpconf
25.44
KB
-rwxr-xr-x
2026-01-06 12:41
snmpdelta
26.4
KB
-rwxr-xr-x
2026-01-06 12:41
snmpdf
18.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpget
14.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpgetnext
14.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpinform
14.57
KB
-rwxr-xr-x
2026-01-06 12:41
snmpnetstat
68.29
KB
-rwxr-xr-x
2026-01-06 12:41
snmpping
22.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpps
18.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpset
14.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmpstatus
19.13
KB
-rwxr-xr-x
2026-01-06 12:41
snmptable
26.33
KB
-rwxr-xr-x
2026-01-06 12:41
snmptest
22.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmptls
18.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmptranslate
22.3
KB
-rwxr-xr-x
2026-01-06 12:41
snmptrap
14.57
KB
-rwxr-xr-x
2026-01-06 12:41
snmpusm
42.51
KB
-rwxr-xr-x
2026-01-06 12:41
snmpvacm
31.39
KB
-rwxr-xr-x
2026-01-06 12:41
snmpwalk
18.3
KB
-rwxr-xr-x
2026-01-06 12:41
socat
447.68
KB
-rwxr-xr-x
2026-07-03 12:45
socat-broker.sh
2.24
KB
-rwxr-xr-x
2026-07-03 12:45
socat-chain.sh
7.86
KB
-rwxr-xr-x
2026-07-03 12:45
socat-mux.sh
3.47
KB
-rwxr-xr-x
2026-07-03 12:45
socat1
447.68
KB
-rwxr-xr-x
2026-07-03 12:45
socklist
3.32
KB
-rwxr-xr-x
2022-11-27 21:34
soelim
34.48
KB
-rwxr-xr-x
2024-03-31 08:54
software-properties-gtk
4.04
KB
-rwxr-xr-x
2026-01-05 16:17
sort
102.8
KB
-rwxr-xr-x
2026-01-23 13:30
splain
18.99
KB
-rwxr-xr-x
2026-06-12 13:42
split
54.94
KB
-rwxr-xr-x
2026-01-23 13:30
splitfont
14.3
KB
-rwxr-xr-x
2024-03-31 09:02
sqfscat
147.9
KB
-rwxr-xr-x
2024-04-08 16:20
sqfstar
286.95
KB
-rwxr-xr-x
2024-04-08 16:20
ss
129.07
KB
-rwxr-xr-x
2026-04-15 06:53
ssh
827.04
KB
-rwxr-xr-x
2026-07-09 18:16
ssh-add
294.42
KB
-rwxr-xr-x
2026-07-09 18:16
ssh-agent
302.43
KB
-rwxr-sr-x
2026-07-09 18:16
ssh-argv0
1.42
KB
-rwxr-xr-x
2026-05-21 15:37
ssh-copy-id
12.77
KB
-rwxr-xr-x
2023-12-18 14:59
ssh-keygen
442.44
KB
-rwxr-xr-x
2026-07-09 18:16
ssh-keyscan
330.44
KB
-rwxr-xr-x
2026-07-09 18:16
stat
86.52
KB
-rwxr-xr-x
2026-01-23 13:30
stdbuf
50.51
KB
-rwxr-xr-x
2026-01-23 13:30
streamzip
7.87
KB
-rwxr-xr-x
2026-06-12 13:42
strings
34.61
KB
-rwxr-xr-x
2026-02-09 21:03
strip
162.66
KB
-rwxr-xr-x
2026-02-09 21:03
stty
78.52
KB
-rwxr-xr-x
2026-01-23 13:30
su
54.38
KB
-rwsr-xr-x
2026-03-06 16:00
sudo
271.42
KB
-rwsr-xr-x
2026-03-02 12:56
sudoedit
271.42
KB
-rwsr-xr-x
2026-03-02 12:56
sudoreplay
95.95
KB
-rwxr-xr-x
2026-03-02 12:56
sum
34.41
KB
-rwxr-xr-x
2026-01-23 13:30
sync
34.41
KB
-rwxr-xr-x
2026-01-23 13:30
syslinux
204.25
KB
-rwxr-xr-x
2024-04-08 16:20
systemctl
1.43
MB
-rwxr-xr-x
2026-06-05 15:36
systemd
98.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-ac-power
14.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-analyze
198.85
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-ask-password
18.58
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-cat
18.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-cgls
22.57
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-cgtop
38.47
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-confext
54.64
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-creds
42.72
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-cryptenroll
70.92
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-cryptsetup
78.95
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-delta
26.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-detect-virt
18.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-escape
22.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-firstboot
58.82
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-hwdb
154.74
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-id128
22.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-inhibit
22.47
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-machine-id-setup
18.63
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-mount
50.78
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-notify
26.66
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-path
18.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-repart
195.23
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-run
66.79
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-socket-activate
30.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-stdio-bridge
22.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-sysext
54.64
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-sysusers
66.63
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-tmpfiles
114.7
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-tty-ask-password-agent
34.45
KB
-rwxr-xr-x
2026-06-05 15:36
systemd-umount
50.78
KB
-rwxr-xr-x
2026-06-05 15:36
tabs
18.3
KB
-rwxr-xr-x
2026-06-30 21:25
tac
38.41
KB
-rwxr-xr-x
2026-01-23 13:30
tail
62.53
KB
-rwxr-xr-x
2026-01-23 13:30
tap
25.77
KB
-rwxr-xr-x
2023-12-12 09:48
tap-mocha-reporter
2.3
KB
-rwxr-xr-x
2022-04-25 07:43
tap-parser
3.95
KB
-rwxr-xr-x
2022-11-25 14:04
tape
2.69
KB
-rwxr-xr-x
2022-11-10 17:20
tar
429.95
KB
-rwxr-xr-x
2026-07-20 14:38
taskset
30.38
KB
-rwxr-xr-x
2026-03-06 16:00
tbl
134.48
KB
-rwxr-xr-x
2024-03-31 08:54
tcsh
455.8
KB
-rwxr-xr-x
2024-04-01 08:23
tee
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
telnet
177.85
KB
-rwxr-xr-x
2026-06-04 13:25
tempfile
14.3
KB
-rwxr-xr-x
2024-03-31 08:47
terser
444
B
-rwxr-xr-x
2023-07-21 12:05
test
46.44
KB
-rwxr-xr-x
2026-01-23 13:30
tgz
2.24
KB
-rwxr-xr-x
2024-04-08 16:13
tic
90.41
KB
-rwxr-xr-x
2026-06-30 21:25
timedatectl
46.45
KB
-rwxr-xr-x
2026-06-05 15:36
timeout
38.95
KB
-rwxr-xr-x
2026-01-23 13:30
tload
22.39
KB
-rwxr-xr-x
2024-09-26 08:44
tnftp
182.9
KB
-rwxr-xr-x
2024-04-08 14:50
todos
18.17
KB
-rwxr-xr-x
2023-01-24 20:47
toe
22.3
KB
-rwxr-xr-x
2026-06-30 21:25
top
131.7
KB
-rwxr-xr-x
2024-09-26 08:44
tor
3.67
MB
-rwxr-xr-x
2024-06-06 14:50
tor-gencert
549.33
KB
-rwxr-xr-x
2024-06-06 14:50
tor-print-ed-signing-cert
473.24
KB
-rwxr-xr-x
2024-06-06 14:50
tor-resolve
182.33
KB
-rwxr-xr-x
2024-06-06 14:50
torify
1.01
KB
-rwxr-xr-x
2024-06-06 13:22
torsocks
11.42
KB
-rwxr-xr-x
2023-02-10 22:03
touch
94.51
KB
-rwxr-xr-x
2026-01-23 13:30
tput
26.34
KB
-rwxr-xr-x
2026-06-30 21:25
tr
46.51
KB
-rwxr-xr-x
2026-01-23 13:30
tracepath
18.15
KB
-rwxr-xr-x
2025-07-24 11:51
traceproto
2.82
KB
-rwxr-xr-x
2023-12-25 07:29
traceproto.db
2.82
KB
-rwxr-xr-x
2023-12-25 07:29
traceroute
79.28
KB
-rwxr-xr-x
2023-12-25 07:29
traceroute-nanog
1.58
KB
-rwxr-xr-x
2023-12-25 07:29
traceroute.db
79.28
KB
-rwxr-xr-x
2023-12-25 07:29
traceroute6
79.28
KB
-rwxr-xr-x
2023-12-25 07:29
traceroute6.db
79.28
KB
-rwxr-xr-x
2023-12-25 07:29
troff
726.62
KB
-rwxr-xr-x
2024-03-31 08:54
true
26.3
KB
-rwxr-xr-x
2026-01-23 13:30
truncate
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
trust
230.7
KB
-rwxr-xr-x
2024-08-09 02:33
tset
26.31
KB
-rwxr-xr-x
2026-06-30 21:25
tsort
46.51
KB
-rwxr-xr-x
2026-01-23 13:30
tty
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
tzselect
15.02
KB
-rwxr-xr-x
2026-07-23 17:18
ua
1003
B
-rwxr-xr-x
2026-07-06 13:28
ubuntu-advantage
1003
B
-rwxr-xr-x
2026-07-06 13:28
ubuntu-bug
2.27
KB
-rwxr-xr-x
2026-04-24 11:18
ubuntu-distro-info
26.89
KB
-rwxr-xr-x
2024-04-08 15:56
ubuntu-drivers
19.31
KB
-rwxr-xr-x
2026-03-18 05:59
ubuntu-security-status
22.25
KB
-rwxr-xr-x
2025-04-25 13:16
ucf
40.68
KB
-rwxr-xr-x
2023-01-27 13:29
ucfq
18.91
KB
-rwxr-xr-x
2023-01-27 13:29
ucfr
10.85
KB
-rwxr-xr-x
2023-01-27 13:29
uclampset
30.38
KB
-rwxr-xr-x
2026-03-06 16:00
ucs2any
26.15
KB
-rwxr-xr-x
2024-04-08 16:22
udevadm
1.38
MB
-rwxr-xr-x
2026-06-05 15:36
udisksctl
62.38
KB
-rwxr-xr-x
2025-08-21 14:16
ul
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
umount
38.38
KB
-rwsr-xr-x
2026-03-06 16:00
uname
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
unattended-upgrade
97.21
KB
-rwxr-xr-x
2024-02-12 17:50
unattended-upgrades
97.21
KB
-rwxr-xr-x
2024-02-12 17:50
uncompress
2.29
KB
-rwxr-xr-x
2026-07-03 11:53
unexpand
38.53
KB
-rwxr-xr-x
2026-01-23 13:30
unicode_start
2.71
KB
-rwxr-xr-x
2024-03-31 09:02
unicode_stop
528
B
-rwxr-xr-x
2024-03-31 09:02
uniq
38.51
KB
-rwxr-xr-x
2026-01-23 13:30
unlink
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
unlzma
126.47
KB
-rwxr-xr-x
2020-12-27 23:52
unmkinitramfs
3.7
KB
-rwxr-xr-x
2026-02-04 17:01
unpigz
130.37
KB
-rwxr-xr-x
2023-08-22 19:47
unshar
80.93
KB
-rwxr-xr-x
2023-02-03 18:10
unshare
42.6
KB
-rwxr-xr-x
2026-03-06 16:00
unsquashfs
147.9
KB
-rwxr-xr-x
2024-04-08 16:20
unxz
86.92
KB
-rwxr-xr-x
2026-05-28 16:06
unzip
174.42
KB
-rwxr-xr-x
2024-10-02 13:29
unzipsfx
74.42
KB
-rwxr-xr-x
2024-10-02 13:29
unzstd
998.79
KB
-rwxr-xr-x
2024-08-09 02:33
update-alternatives
58.38
KB
-rwxr-xr-x
2026-05-06 17:38
update-desktop-database
26.38
KB
-rwxr-xr-x
2024-03-31 08:47
update-manager
4.65
KB
-rwxr-xr-x
2025-04-25 13:16
update-mime-database
74.33
KB
-rwxr-xr-x
2024-04-01 11:58
update-notifier
86.99
KB
-rwxr-xr-x
2025-04-02 09:15
updatedb
106.48
KB
-rwxr-xr-x
2024-04-18 17:53
upower
14.3
KB
-rwxr-xr-x
2024-04-08 07:42
uptime
14.38
KB
-rwxr-xr-x
2024-09-26 08:44
usb-devices
4.83
KB
-rwxr-xr-x
2024-04-08 16:21
usbhid-dump
30.38
KB
-rwxr-xr-x
2024-04-08 16:21
usbreset
14.3
KB
-rwxr-xr-x
2024-04-08 16:21
users
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
utmpdump
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
uudecode
84.49
KB
-rwxr-xr-x
2023-02-03 18:10
uuencode
76.49
KB
-rwxr-xr-x
2023-02-03 18:10
uuidgen
18.38
KB
-rwxr-xr-x
2026-03-06 16:00
uuidparse
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
uz
2.48
KB
-rwxr-xr-x
2024-04-08 16:13
varlinkctl
30.45
KB
-rwxr-xr-x
2026-06-05 15:36
vdir
138.98
KB
-rwxr-xr-x
2026-01-23 13:30
vi
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
view
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
viewres
31.23
KB
-rwxr-xr-x
2024-03-31 17:27
vim
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
vim.basic
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
vimdiff
3.94
MB
-rwxr-xr-x
2026-07-13 17:17
vimtutor
2.1
KB
-rwxr-xr-x
2026-07-13 17:17
vmstat
38.78
KB
-rwxr-xr-x
2024-09-26 08:44
w
26.38
KB
-rwxr-xr-x
2024-09-26 08:44
wall
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
watch
30.84
KB
-rwxr-xr-x
2024-09-26 08:44
watchgnupg
22.3
KB
-rwxr-xr-x
2026-01-05 22:01
wc
54.52
KB
-rwxr-xr-x
2026-01-23 13:30
wdctl
34.4
KB
-rwxr-xr-x
2026-03-06 16:00
webpack
3.81
KB
-rwxr-xr-x
2023-03-14 02:48
webpack-cli
330
B
-rw-r--r--
2023-03-14 02:48
wget
459.02
KB
-rwxr-xr-x
2026-07-16 16:38
whatis
47.28
KB
-rwxr-xr-x
2024-04-08 14:45
whereis
30.84
KB
-rwxr-xr-x
2026-03-06 16:00
which
1.05
KB
-rwxr-xr-x
2024-03-31 08:47
which.debianutils
1.05
KB
-rwxr-xr-x
2024-03-31 08:47
who
58.52
KB
-rwxr-xr-x
2026-01-23 13:30
whoami
34.51
KB
-rwxr-xr-x
2026-01-23 13:30
whois
155.66
KB
-rwxr-xr-x
2024-04-01 18:14
whoopsie
50.91
KB
-rwxr-xr-x
2025-11-25 15:52
whoopsie-preferences
22.23
KB
-rwxr-xr-x
2024-03-31 08:33
word-list-compress
14.3
KB
-rwxr-xr-x
2024-04-08 15:54
write
22.38
KB
-rwxr-xr-x
2026-03-06 16:00
wscat
10.56
KB
-rwxr-xr-x
2023-11-23 07:27
wsdump
983
B
-rwxr-xr-x
2024-02-23 09:19
wsrep_sst_backup
2.39
KB
-rwxr-xr-x
2025-10-11 02:08
wsrep_sst_common
66.86
KB
-rwxr-xr-x
2025-10-11 02:08
wsrep_sst_mariabackup
49.23
KB
-rwxr-xr-x
2025-10-11 02:08
wsrep_sst_mysqldump
8.11
KB
-rwxr-xr-x
2025-10-11 02:08
wsrep_sst_rsync
29.72
KB
-rwxr-xr-x
2025-10-11 02:08
wsrep_sst_rsync_wan
29.72
KB
-rwxr-xr-x
2025-10-11 02:08
www-browser
1.91
MB
-rwxr-xr-x
2024-04-01 06:53
x-session-manager
953
B
-rwxr-xr-x
2024-04-15 15:49
x-terminal-emulator
2.65
KB
-rwxr-xr-x
2024-03-18 17:15
x86_64
26.65
KB
-rwxr-xr-x
2026-03-06 16:00
x86_64-linux-gnu-addr2line
30.7
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-ar
54.48
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-as
728.29
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-c++filt
22.27
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-cpp
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-cpp-11
906.92
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-cpp-12
1.33
MB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-cpp-13
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-cpp-9
766.71
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-dwp
1.87
MB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-elfedit
34.72
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-g++
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-g++-13
1003.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc
999.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-11
906.92
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcc-12
1.33
MB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcc-13
999.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-9
766.71
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gcc-ar
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-ar-11
26.59
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcc-ar-12
34.7
KB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcc-ar-13
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-ar-9
26.52
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gcc-nm
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-nm-11
26.59
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcc-nm-12
34.7
KB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcc-nm-13
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-nm-9
22.51
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gcc-ranlib
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-ranlib-11
26.59
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcc-ranlib-12
34.7
KB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcc-ranlib-13
26.58
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcc-ranlib-9
26.52
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gcov
432.13
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcov-11
400.05
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcov-12
740.37
KB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcov-13
432.13
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcov-9
383.92
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gcov-dump
348.08
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcov-dump-11
251.88
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcov-dump-12
576.2
KB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcov-dump-13
348.08
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcov-dump-9
235.79
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gcov-tool
304.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcov-tool-11
275.97
KB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-gcov-tool-12
600.3
KB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-gcov-tool-13
304.05
KB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-gcov-tool-9
267.86
KB
-rwxr-xr-x
2026-01-12 02:59
x86_64-linux-gnu-gold
3.07
MB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gp-archive
158.53
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gp-collect-app
174.37
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gp-display-html
626.89
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gp-display-src
150.35
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gp-display-text
290.37
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gprof
99.79
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-gprofng
138.35
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-ld
1.3
MB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-ld.bfd
1.3
MB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-ld.gold
3.07
MB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-lto-dump
27.99
MB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-lto-dump-11
24.01
MB
-rwxr-xr-x
2025-12-18 07:26
x86_64-linux-gnu-lto-dump-12
31.09
MB
-rwxr-xr-x
2025-12-18 07:53
x86_64-linux-gnu-lto-dump-13
27.99
MB
-rwxr-xr-x
2025-12-18 20:59
x86_64-linux-gnu-nm
43.5
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-objcopy
162.63
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-objdump
381.69
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-ranlib
54.48
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-readelf
770.78
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-size
30.45
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-strings
34.61
KB
-rwxr-xr-x
2026-02-09 21:03
x86_64-linux-gnu-strip
162.66
KB
-rwxr-xr-x
2026-02-09 21:03
xargs
62.41
KB
-rwxr-xr-x
2024-04-08 15:57
xcmsdb
35.05
KB
-rwxr-xr-x
2024-03-31 17:27
xconv.pl
3.06
KB
-rwxr-xr-x
2024-04-01 08:35
xdg-dbus-proxy
58.15
KB
-rwxr-xr-x
2026-04-10 10:46
xdg-desktop-icon
20.16
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-desktop-menu
42.27
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-email
26.3
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-icon-resource
29.33
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-mime
41.14
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-open
25.46
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-screensaver
37.11
KB
-rwxr-xr-x
2022-08-01 14:14
xdg-settings
37.52
KB
-rwxr-xr-x
2022-08-01 14:14
xdpyinfo
39.05
KB
-rwxr-xr-x
2024-03-31 17:27
xdriinfo
14.3
KB
-rwxr-xr-x
2024-03-31 17:27
xev
34.63
KB
-rwxr-xr-x
2024-03-31 17:27
xfd
40.01
KB
-rwxr-xr-x
2024-03-31 17:27
xfontsel
43.85
KB
-rwxr-xr-x
2024-03-31 17:27
xgamma
14.31
KB
-rwxr-xr-x
2024-03-31 17:27
xgettext
293.01
KB
-rwxr-xr-x
2024-04-08 15:58
xhost
18.31
KB
-rwxr-xr-x
2024-03-31 17:27
xkeystone
16.58
KB
-rwxr-xr-x
2024-03-31 17:27
xkill
14.3
KB
-rwxr-xr-x
2024-03-31 17:27
xlsatoms
14.3
KB
-rwxr-xr-x
2024-03-31 17:27
xlsclients
18.31
KB
-rwxr-xr-x
2024-03-31 17:27
xlsfonts
26.4
KB
-rwxr-xr-x
2024-03-31 17:27
xmessage
23.19
KB
-rwxr-xr-x
2024-03-31 17:27
xmlwf
38.15
KB
-rwxr-xr-x
2026-02-04 15:24
xmodmap
42.68
KB
-rwxr-xr-x
2024-03-31 17:27
xprop
48.61
KB
-rwxr-xr-x
2024-03-31 17:27
xrandr
66.41
KB
-rwxr-xr-x
2024-03-31 17:27
xrdb
34.4
KB
-rwxr-xr-x
2024-03-31 17:27
xrefresh
14.38
KB
-rwxr-xr-x
2024-03-31 17:27
xset
34.31
KB
-rwxr-xr-x
2024-03-31 17:27
xsetmode
14.31
KB
-rwxr-xr-x
2024-03-31 17:27
xsetpointer
14.31
KB
-rwxr-xr-x
2024-03-31 17:27
xsetroot
18.31
KB
-rwxr-xr-x
2024-03-31 17:27
xstdcmap
14.89
KB
-rwxr-xr-x
2024-03-31 17:27
xsubpp
5.05
KB
-rwxr-xr-x
2026-06-12 13:42
xvidtune
43.76
KB
-rwxr-xr-x
2024-03-31 17:27
xvinfo
18.3
KB
-rwxr-xr-x
2024-03-31 17:27
xwininfo
50.38
KB
-rwxr-xr-x
2024-03-31 17:27
xxd
22.28
KB
-rwxr-xr-x
2026-07-13 17:17
xz
86.92
KB
-rwxr-xr-x
2026-05-28 16:06
xzcat
86.92
KB
-rwxr-xr-x
2026-05-28 16:06
xzcmp
7.25
KB
-rwxr-xr-x
2026-05-28 16:06
xzdiff
7.25
KB
-rwxr-xr-x
2026-05-28 16:06
xzegrep
10.09
KB
-rwxr-xr-x
2026-05-28 16:06
xzfgrep
10.09
KB
-rwxr-xr-x
2026-05-28 16:06
xzgrep
10.09
KB
-rwxr-xr-x
2026-05-28 16:06
xzless
1.77
KB
-rwxr-xr-x
2026-05-28 16:06
xzmore
2.14
KB
-rwxr-xr-x
2026-05-28 16:06
yelp
58.23
KB
-rwxr-xr-x
2025-04-17 14:58
yes
34.38
KB
-rwxr-xr-x
2026-01-23 13:30
ypdomainname
22.23
KB
-rwxr-xr-x
2024-04-08 15:59
zcat
1.94
KB
-rwxr-xr-x
2026-07-03 11:53
zcmp
1.64
KB
-rwxr-xr-x
2026-07-03 11:53
zdiff
6.3
KB
-rwxr-xr-x
2026-07-03 11:53
zdump
30.28
KB
-rwxr-xr-x
2026-07-23 17:18
zegrep
29
B
-rwxr-xr-x
2026-07-03 11:53
zfgrep
29
B
-rwxr-xr-x
2026-07-03 11:53
zforce
2.03
KB
-rwxr-xr-x
2026-07-03 11:53
zgrep
7.91
KB
-rwxr-xr-x
2026-07-03 11:53
zipdetails
68.55
KB
-rwxr-xr-x
2026-06-12 13:42
zipgrep
2.89
KB
-rwxr-xr-x
2024-10-02 13:29
zipinfo
174.42
KB
-rwxr-xr-x
2024-10-02 13:29
zless
2.15
KB
-rwxr-xr-x
2026-07-03 11:53
zmore
1.8
KB
-rwxr-xr-x
2026-07-03 11:53
znew
4.47
KB
-rwxr-xr-x
2026-07-03 11:53
zstd
998.79
KB
-rwxr-xr-x
2024-08-09 02:33
zstdcat
998.79
KB
-rwxr-xr-x
2024-08-09 02:33
zstdgrep
3.78
KB
-rwxr-xr-x
2024-08-09 02:33
zstdless
197
B
-rwxr-xr-x
2024-08-09 02:33
zstdmt
998.79
KB
-rwxr-xr-x
2024-08-09 02:33
Save
Rename
#!/usr/bin/perl use strict; use warnings; use v5.10; # for '//' use open qw/:utf8 :std/; use utf8; use Config qw//; use File::Find qw//; use File::Spec qw//; use XML::LibXML qw//; { my $have_display; BEGIN { if (!@ARGV) { local $@; $have_display = eval {use Gtk3; Gtk3::init_check ()}; } } my $parser = GirParser->new; if (!@ARGV && $have_display) { my @girs = find_girs (); my $gui = GirGUI->new ($parser, @girs); $gui->run; exit; } if (!@ARGV) { die 'Usage: perli11ndoc <library name>[::<element name>[::<element name>]]'; } my $pattern = $ARGV[0]; my ($lib_pattern, @element_patterns) = split /::/, $pattern; my $gir = find_gir ($lib_pattern); $parser->open ($gir); if (!@element_patterns) { print $parser->format_namespace; } else { print $parser->format_search_results (@element_patterns); } } # ------------------------------------------------------------------------------ sub find_gir { my ($lib_pattern) = @_; if ($lib_pattern !~ /^([^\d\-]+)-?(\d(?:\.\d)?)?$/) { die "Cannot recognize the library name\n"; } my $name_wanted = $1; my $version_wanted = $2; if (defined $version_wanted && $version_wanted !~ /\./) { $version_wanted .= '.0'; } my $match_func = sub { if (defined $version_wanted) { return $_ eq "$name_wanted-$version_wanted.gir"; } else { return $_ =~ /^\Q$name_wanted\E-\d+\.\d+\.gir$/; } }; my @girs = find_girs ($match_func); if (@girs == 0) { die "Could not find any matching GIR file\n"; } if (@girs > 1) { my $girs_string = join (', ', map { $_->{path} } @girs); die "Found multiple matching GIR files: $girs_string; please be more specific\n"; } return $girs[0]->{path}; } sub find_girs { my ($match_func) = @_; $match_func //= sub { 1 }; my @prefixes = ('/usr'); my @env_vars = ( {name => 'LD_LIBRARY_PATH', extra_depth => 1}, # /<prefix>/lib => /<prefix> {name => 'GI_TYPELIB_PATH', extra_depth => 2}, # /<prefix>/lib/girepository-1.0 => /<prefix> ); foreach my $env_var (@env_vars) { next unless exists $ENV{$env_var->{name}}; my @dirs = split /$Config::Config{path_sep}/, $ENV{$env_var->{name}}; foreach my $dir (@dirs) { my @dir_parts = File::Spec->splitdir ($dir); my $prefix = File::Spec->catdir ( @dir_parts[0 .. ($#dir_parts-$env_var->{extra_depth})]); if (-d $prefix) { push @prefixes, Cwd::abs_path ($prefix); } } } my %seen; my @search_dirs = grep { !$seen{$_}++ && -d $_ } map { $_ . '/share/gir-1.0' } @prefixes; my @girs; File::Find::find (sub { if ($_ =~ m/\.gir$/ && $match_func->($_)) { push @girs, {path => $File::Find::name, dir => $File::Find::dir, file => $_}; } }, @search_dirs); return @girs; } # ------------------------------------------------------------------------------ # --- GirParser ---------------------------------------------------------------- # ------------------------------------------------------------------------------ package GirParser; use strict; use warnings; sub new { my ($class) = @_; return bless {}, $class } sub open { my ($self, $gir) = @_; $self->{gir} = $gir; $self->{parser} = XML::LibXML->new; $self->{dom} = $self->{parser}->load_xml (location => $gir); $self->{xpc} = XML::LibXML::XPathContext->new; $self->{xpc}->registerNs ('core', 'http://www.gtk.org/introspection/core/1.0'); $self->{repository} = $self->{dom}->documentElement; my $namespace_list = $self->{xpc}->find ('core:namespace', $self->{repository}); if ($namespace_list->size != 1) { die 'Can only handle a single namespace'; } $self->{namespace} = $namespace_list->pop; $self->{basename} = $self->construct_basename; } sub construct_basename { my ($self) = @_; my $name = $self->find_attribute ($self->{namespace}, 'name'); my $version = $self->find_attribute ($self->{namespace}, 'version'); $version =~ s/.0$//; $version = '' if $version eq '1'; return $name . $version; } # ------------------------------------------------------------------------------ sub find_attribute { my ($self, $element, $attribute) = @_; my $attribute_list = $element->find ("\@$attribute"); return if $attribute_list->size != 1; return $attribute_list->pop->value; } sub find_full_element_name { my ($self, $element) = @_; my $name = $self->find_attribute ($element, 'name'); return () unless defined $name; if ($name =~ /\./) { die "Unexpected fully qualified name '$name' encountered; aborting\n"; } my $package = ''; my $current_element = $element; while (1) { my $parent = $current_element->parentNode; last unless defined $parent; if ($parent->nodeName eq 'namespace') { $package = $self->{basename} . '::' . $package; last; } $package = $self->find_attribute ($parent, 'name') . '::' . $package; $current_element = $parent; } my $full_name = $package . $name; $package =~ s/::$//; return ($package, $name, $full_name); } sub find_node_by_path { my ($self, $path) = @_; my $match_list = $self->{xpc}->find ($path, $self->{namespace}); if ($match_list->size < 1) { die "Cannot find a matching element for the path $path\n"; } if ($match_list->size > 1) { die "Found more than one matching element for the path $path\n"; } return $match_list->pop; } sub find_parameters_and_return_value { my ($self, $element) = @_; my (@in, @out); my $parameter_list = $self->{xpc}->find ('core:parameters/core:parameter', $element); foreach my $parameter ($parameter_list->get_nodelist) { my $direction = $self->find_attribute ($parameter, 'direction') // 'in'; if ($direction eq 'inout' || $direction eq 'out') { push @out, $parameter; } if ($direction eq 'inout' || $direction eq 'in') { push @in, $parameter; } } my $retval = undef; my $retval_list = $self->{xpc}->find ('core:return-value', $element); if ($retval_list->size == 1) { $retval = $retval_list->[0]; if (defined $retval) { if ($self->find_type_name ($retval) eq 'none') { $retval = undef; } } } return (\@in, $retval, \@out); } sub find_type_name { my ($self, $element) = @_; # arrays my $array_list = $self->{xpc}->find ('core:array', $element); if ($array_list->size == 1) { my $array = $array_list->pop; my $prefix = 'reference to array of '; my $child_type_name = $self->find_type_name ($array); return $prefix . $child_type_name; } # callbacks my $callback_list = $self->{xpc}->find ('core:callback', $element); if ($callback_list->size == 1) { my $callback = $callback_list->pop; my ($in, $retval, $out) = $self->find_parameters_and_return_value ($callback); unshift @$out, $retval if defined $retval; my $in_list = join ', ', map { $self->find_type_name ($_) } @$in; my $out_list = join ', ', map { $self->find_type_name ($_) } @$out; my $in_text = $in_list ne '' ? "in: $in_list" : ''; my $out_text = $out_list ne '' ? "; out: $out_list" : ''; return "callback ($in_text$out_text)"; } # bare types my $type_list = $self->{xpc}->find ('core:type', $element); return '[unknown type]' unless $type_list->size == 1; my $type = $type_list->pop; return $self->find_attribute ($type, 'name'); } # ------------------------------------------------------------------------------ sub enumerate_namespace { my ($self, $descend) = @_; $descend //= 0; my @class_and_interface_sub_categories = ( [Constructors => 'core:constructor'], [Methods => 'core:method'], [Functions => 'core:function'], [Signals => 'glib:signal'], [Properties => 'core:property'], [Fields => 'core:field'], ['Virtual methods' => 'core:virtual-method'], ); my @record_sub_categories = ( [Constructors => 'core:constructor'], [Methods => 'core:method'], [Functions => 'core:function'], [Fields => 'core:field'], ); my @enum_and_bitfield_sub_categories = ( [Functions => 'core:function'], ); my @categories = ( [Classes => 'core:class', \@class_and_interface_sub_categories, sub { shift =~ /Accessible$/ }], [Interfaces => 'core:interface', \@class_and_interface_sub_categories], [Records => 'core:record', \@record_sub_categories, sub { shift =~ /(?:Class|Iface|Interface|Private)$/ }], [Enumerations => 'core:enumeration', \@enum_and_bitfield_sub_categories], [Bitfields => 'core:bitfield', \@enum_and_bitfield_sub_categories], [Functions => 'core:function'], [Callbacks => 'core:callback'], [Constants => 'core:constant'], [Aliases => 'core:alias', undef, sub { shift =~ /_autoptr$/ }], ['Classes for accessibility' => 'core:class', \@class_and_interface_sub_categories, sub { shift !~ /Accessible$/ }], ['Records for object classes' => 'core:record', \@record_sub_categories, sub { shift !~ /Class$/ }], ['Records for interfaces' => 'core:record', \@record_sub_categories, sub { shift !~ /(?:Iface|Interface)$/ }], ); my @results; foreach my $category (@categories) { my $heading = $category->[0]; my $path = $category->[1]; my $sub_categories = $category->[2] // undef; my $skip = $category->[3] // sub { 0 }; # accept all by default my $list = $self->{xpc}->find ($path, $self->{namespace}); next if $list->size == 0; my @entries; foreach my $node ($list->get_nodelist) { my $node_path = $node->nodePath; my $name = $self->find_attribute ($node, 'name'); next if $skip->($name); my @sub_results; if ($descend && defined $sub_categories) { foreach my $sub_category (@$sub_categories) { my $sub_heading = $sub_category->[0]; my $sub_path = $sub_category->[1]; my $sub_list = $self->{xpc}->find ($sub_path, $node); next if $sub_list->size == 0; my @sub_entries; foreach my $sub_node ($sub_list->get_nodelist) { my $sub_path = $sub_node->nodePath; my $sub_name = $self->find_attribute ($sub_node, 'name'); push @sub_entries, {path => $sub_path, name => $sub_name}; } push @sub_results, [$sub_heading => \@sub_entries]; } } push @entries, {path => $node_path, name => $name, sub_results => \@sub_results}; } next unless @entries; push @results, [$heading => \@entries]; } return \@results; } sub format_namespace { my ($self) = @_; my $text = ''; my $name = $self->find_attribute ($self->{namespace}, 'name'); my $version = $self->find_attribute ($self->{namespace}, 'version'); $text .= "NAMESPACE\n\n $name $version => " . $self->{basename} . "\n\n"; my $results = $self->enumerate_namespace; foreach my $results (@$results) { my $heading = uc $results->[0]; my $entries = $results->[1]; next unless @$entries; $text .= "$heading\n\n"; foreach my $entry (@$entries) { $text .= sprintf " [%s](%s)\n", $entry->{name}, $entry->{path}; } $text .= "\n"; } $text =~ s/\n\n\Z/\n/; return $text; } # ------------------------------------------------------------------------------ sub format_search_results { my ($self, @search_terms) = @_; die 'Can only handle up to two search terms' if @search_terms > 2; my $query = @search_terms == 1 ? "*[\@name='$search_terms[0]']" : "*[\@name='$search_terms[0]']/*[\@name='$search_terms[1]']"; my $match_list = $self->{xpc}->find ($query, $self->{namespace}); if ($match_list->size == 0) { die "Cannot find a matching element for the search terms @search_terms\n"; } my @matches = $match_list->get_nodelist; if (@matches > 1) { my $matches_string = join (', ', map { $self->format_full_element_name ($_) } @matches); die "Found two many matches: $matches_string; please be more specific\n"; } my $match = $matches[0]; return $self->format_node ($match); } sub format_node_by_path { my ($self, $path) = @_; my $node = $self->find_node_by_path ($path); return $self->format_node ($node); } sub format_node_name_by_path { my ($self, $path) = @_; my $node = $self->find_node_by_path ($path); return $self->format_full_element_name ($node); } sub format_node { my ($self, $node) = @_; my %categories = ( alias => 'format_alias', bitfield => 'format_bitfield', callback => 'format_callback', class => 'format_class', constant => 'format_constant', constructor => 'format_constructor', enumeration => 'format_enumeration', field => 'format_field', function => 'format_function', method => 'format_method', property => 'format_property', interface => 'format_interface', record => 'format_record', 'glib:signal' => 'format_signal', 'virtual-method' => 'format_virtual_method', ); my $type = $node->nodeName; my $handler = $categories{$type}; if (!defined $handler) { die "Unknown node type '$type' encountered; aborting\n"; } return $self->$handler ($node); } # ------------------------------------------------------------------------------ sub format_alias { my ($self, $element) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); my $type_name = $self->find_type_name ($element); my $full_type_name = $self->format_full_type_name ($type_name); $text .= "ALIAS\n\n $full_name = $full_type_name\n"; $text .= $self->format_description ($element); return $text; } # ------------------------------------------------------------------------------ sub format_bitfield { my ($self, $element) = @_; return $self->format_bitfield_and_enumeration ($element, 'BITFIELD'); } sub format_enumeration { my ($self, $element) = @_; return $self->format_bitfield_and_enumeration ($element, 'ENUMERATION'); } sub format_bitfield_and_enumeration { my ($self, $element, $heading) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); $text .= "$heading\n\n $full_name\n"; $text .= $self->format_description ($element); $text .= $self->format_sub_members ($element); $text .= $self->format_sub_functions ($element, 'FUNCTIONS'); return $text; } # ------------------------------------------------------------------------------ sub format_callable { my ($self, $element, $heading, $synopsis_format, $flags_formatter) = @_; $flags_formatter //= 'format_callable_flags'; my $text = ''; my ($package, $name, $full_name) = $self->find_full_element_name ($element); my $flags = $self->$flags_formatter ($element); $text .= "$heading\n\n $full_name$flags\n"; my ($in, $retval, $out) = $self->find_parameters_and_return_value ($element); # --- synopsis --- my @in_names = map { '$' . $self->find_attribute ($_, 'name') } @$in; my @out_names = map { '$' . $self->find_attribute ($_, 'name') } @$out; if (defined $retval) { unshift @out_names, '$retval'; } my $in_list = join ', ', @in_names; my $in_list_pre_comma = @in_names > 0 ? ", $in_list" : ''; my $in_list_post_comma = @in_names > 0 ? "$in_list, " : ''; my $out_list = join ', ', @out_names; my $out_list_parens = @out_names > 1 ? "($out_list)" : $out_list; my $out_list_assign = @out_names > 0 ? "$out_list_parens = " : ''; my $synopsis = $synopsis_format; $synopsis =~ s/\[\[PACKAGE\]\]/$package/g; $synopsis =~ s/\[\[NAME\]\]/$name/g; $synopsis =~ s/\[\[NAME_UC\]\]/uc $name/ge; $synopsis =~ s/\[\[FULL_NAME\]\]/$full_name/g; $synopsis =~ s/\[\[IN_LIST\]\]/$in_list/g; $synopsis =~ s/\[\[IN_LIST_PRE_COMMA\]\]/$in_list_pre_comma/g; $synopsis =~ s/\[\[IN_LIST_POST_COMMA\]\]/$in_list_post_comma/g; $synopsis =~ s/\[\[OUT_LIST\]\]/$out_list/g; $synopsis =~ s/\[\[OUT_LIST_PARENS\]\]/$out_list_parens/g; $synopsis =~ s/\[\[OUT_LIST_ASSIGN\]\]/$out_list_assign/g; $text .= "\nSYNOPSIS\n\n $synopsis\n"; # --- description --- $text .= $self->format_description ($element); # --- in --- if (@$in) { $text .= "\nPARAMETERS\n\n"; foreach my $parameter (@$in) { my $name = $self->find_attribute ($parameter, 'name'); my $type_name = $self->find_type_name ($parameter); my $full_type_name = $self->format_full_type_name ($type_name); $text .= " • $name: $full_type_name\n"; my $doc = $self->format_docs ($parameter, ' '); if (defined $doc) { $text .= "$doc\n"; } $text .= "\n"; } $text =~ s/\n\n\Z/\n/; } # --- retval & out --- my $retval_type_name = 'none'; if (defined $retval) { $retval_type_name = $self->find_type_name ($retval); } if ($retval_type_name ne 'none' || @$out) { $text .= "\nRETURN VALUES\n\n"; if ($retval_type_name ne 'none') { my $full_retval_type_name = $self->format_full_type_name ($retval_type_name); $text .= " • $full_retval_type_name\n"; my $doc = $self->format_docs ($retval, ' '); if (defined $doc) { $text .= "$doc\n\n"; } } if (@$out) { foreach my $parameter (@$out) { my $name = $self->find_attribute ($parameter, 'name'); my $type_name = $self->find_type_name ($parameter); my $full_type_name = $self->format_full_type_name ($type_name); $text .= " • $name: $full_type_name\n"; my $doc = $self->format_docs ($parameter, ' '); if (defined $doc) { $text .= "$doc\n\n"; } } } $text =~ s/\n\n\Z/\n/; } return $text; } sub format_callback { my ($self, $element) = @_; my $synopsis_format = <<'__EOS__'; sub { my ([[IN_LIST]]) = @_; ... return [[OUT_LIST_PARENS]]; } __EOS__ return $self->format_callable ($element, 'CALLBACK', $synopsis_format); } sub format_constructor { my ($self, $element) = @_; my $synopsis_format = '$object = [[PACKAGE]]->[[NAME]] ([[IN_LIST]])'; return $self->format_callable ($element, 'CONSTRUCTOR', $synopsis_format); } sub format_function { my ($self, $element) = @_; my $synopsis_format = '[[OUT_LIST_ASSIGN]][[FULL_NAME]] ([[IN_LIST]])'; return $self->format_callable ($element, 'FUNCTION', $synopsis_format); } sub format_method { my ($self, $element) = @_; my $synopsis_format = '[[OUT_LIST_ASSIGN]]$object->[[NAME]] ([[IN_LIST]])'; # Treat methods of class structs as functions. { my $parent = $element->parentNode; if ($parent->nodeName eq 'record' && defined $self->find_attribute ($parent, 'glib:is-gtype-struct-for')) { $synopsis_format = '[[OUT_LIST_ASSIGN]][[FULL_NAME]] ($package[[IN_LIST_PRE_COMMA]])'; } } return $self->format_callable ($element, 'METHOD', $synopsis_format); } sub format_signal { my ($self, $element) = @_; my $synopsis_format = <<'__EOS__'; $object->signal_connect ('[[NAME]]' => sub { my ($object, [[IN_LIST_POST_COMMA]]$data) = @_; ... return [[OUT_LIST_PARENS]]; }, $data); __EOS__ return $self->format_callable ($element, 'SIGNAL', $synopsis_format, 'format_signal_flags'); } sub format_virtual_method { my ($self, $element) = @_; my $synopsis_format = <<'__EOS__'; sub [[NAME_UC]] { my ($object[[IN_LIST_PRE_COMMA]]) = @_; ... return [[OUT_LIST_PARENS]]; } __EOS__ return $self->format_callable ($element, 'VIRTUAL METHOD', $synopsis_format, 'format_virtual_method_flags'); } # ------------------------------------------------------------------------------ sub format_class { my ($self, $element) = @_; my $format_hierarchy_and_interfaces = sub { my @parents; my $current_element = $element; while (1) { my $parent_name = $self->find_attribute ($current_element, 'parent'); last unless defined $parent_name; unshift @parents, $self->format_full_type_name ($parent_name); # Stop if the parent is fully qualified, i.e., if it points elsewhere. last if $parent_name =~ /\./; my $parent_list = $self->{xpc}->find ("core:class[\@name='$parent_name']", $self->{namespace}); if ($parent_list->size != 1) { die "Found no or too many classes with name '$parent_name'\n"; } $current_element = $parent_list->pop; } my @children; my $name = $self->find_attribute ($element, 'name'); my $children_list = $self->{xpc}->find ("core:class[\@parent='$name']", $self->{namespace}); foreach my $child ($children_list->get_nodelist) { push @children, $self->format_full_element_name ($child); } my $hierarchy_text = ''; if (@parents || @children) { push @parents, $self->format_full_element_name ($element); $hierarchy_text = "\nHIERARCHY\n\n"; my $hook = '╰── '; # thanks, devhelp my $spacer = ' ' x length $hook; for (my $i = 0; $i < @parents; $i++) { $hierarchy_text .= ' ' . ($i > 0 ? (($spacer x ($i-1)) . $hook) : '') . $parents[$i] . "\n"; } foreach my $child (@children) { $hierarchy_text .= ' ' . $spacer x $#parents . $hook . $child . "\n"; } } my $impl_list = $self->{xpc}->find ('core:implements', $element); my $impl_text = $self->format_full_type_names ($impl_list, 'IMPLEMENTED INTERFACES'); return $hierarchy_text . $impl_text; }; return $self->format_class_and_interface ($element, 'CLASS', $format_hierarchy_and_interfaces); } sub format_interface { my ($self, $element) = @_; my $format_prerequisites_and_implementations = sub { my $prereq_list = $self->{xpc}->find ('core:prerequisite', $element); my $prereq_text = $self->format_full_type_names ($prereq_list, 'PREREQUISITES'); my $name = $self->find_attribute ($element, 'name'); my $impl_list = $self->{xpc}->find ("core:class[./core:implements[\@name='$name']]", $self->{namespace}); my $impl_text = $self->format_full_type_names ($impl_list, 'KNOWN IMPLEMENTATIONS'); return $prereq_text . $impl_text; }; return $self->format_class_and_interface ($element, 'INTERFACE', $format_prerequisites_and_implementations); } sub format_class_and_interface { my ($self, $element, $heading, $intro) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); $text .= "$heading\n\n $full_name\n"; $text .= $intro->(); $text .= $self->format_description ($element); $text .= $self->format_sub_constructors ($element); $text .= $self->format_sub_methods ($element); $text .= $self->format_sub_functions ($element, 'CLASS FUNCTIONS'); $text .= $self->format_sub_signals ($element); $text .= $self->format_sub_properties ($element); $text .= $self->format_sub_fields ($element); $text .= $self->format_sub_virtual_methods ($element); return $text; } # ------------------------------------------------------------------------------ sub format_constant { my ($self, $element) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); my $value = $self->find_attribute ($element, 'value'); my $type_name = $self->find_type_name ($element); my $full_type_name = $self->format_full_type_name ($type_name); $text .= "CONSTANT\n\n $full_name = $value ($full_type_name)\n"; $text .= $self->format_description ($element); return $text; } # ------------------------------------------------------------------------------ sub format_field { my ($self, $element) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); my $type_name = $self->find_type_name ($element); my $full_type_name = $self->format_full_type_name ($type_name); my $flags = $self->format_field_flags ($element); $text .= "FIELD\n\n $full_name: $full_type_name$flags\n"; $text .= $self->format_description ($element); return $text; } # ------------------------------------------------------------------------------ sub format_property { my ($self, $element) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); my $type_name = $self->find_type_name ($element); my $full_type_name = $self->format_full_type_name ($type_name); my $flags = $self->format_property_flags ($element); $text .= "PROPERTY\n\n $full_name: $full_type_name$flags\n"; $text .= $self->format_description ($element); return $text; } # ------------------------------------------------------------------------------ sub format_record { my ($self, $element) = @_; my $text = ''; my $full_name = $self->format_full_element_name ($element); $text .= "RECORD\n\n $full_name\n"; $text .= $self->format_description ($element); $text .= $self->format_sub_fields ($element); $text .= $self->format_sub_constructors ($element); $text .= $self->format_sub_methods ($element); $text .= $self->format_sub_functions ($element, 'FUNCTIONS'); return $text; } # ------------------------------------------------------------------------------ sub format_sub_constructors { my ($self, $element) = @_; my $text = ''; my $ctor_list = $self->{xpc}->find ('core:constructor', $element); if ($ctor_list->size > 0) { $text .= "\nCONSTRUCTORS\n\n"; foreach my $ctor ($ctor_list->get_nodelist) { my $name = $self->find_attribute ($ctor, 'name'); my $path = $ctor->nodePath; my $flags = $self->format_callable_flags ($ctor, qw/introspectable version/); $text .= " • [$name]($path)$flags\n"; } } return $text; } sub format_sub_fields { my ($self, $element) = @_; my $text = ''; my $field_list = $self->{xpc}->find ('core:field', $element); if ($field_list->size > 0) { $text .= "\nFIELDS\n\n"; foreach my $field ($field_list->get_nodelist) { my $name = $self->find_attribute ($field, 'name'); my $path = $field->nodePath; my $type_name = $self->find_type_name ($field); my $full_type_name = $self->format_full_type_name ($type_name); my $flags = $self->format_field_flags ($field, qw/introspectable/); $text .= " • [$name]($path): $full_type_name$flags\n"; } } return $text; } sub format_sub_functions { my ($self, $element, $heading) = @_; my $text = ''; my $function_list = $self->{xpc}->find ('core:function', $element); if ($function_list->size > 0) { $text .= "\n$heading\n\n"; foreach my $function ($function_list->get_nodelist) { my $name = $self->find_attribute ($function, 'name'); my $path = $function->nodePath; my $flags = $self->format_callable_flags ($function, qw/introspectable version/); $text .= " • [$name]($path)$flags\n"; } } return $text; } sub format_sub_members { my ($self, $element) = @_; my $text = ''; my $member_list = $self->{xpc}->find ('core:member', $element); if ($member_list->size > 0) { $text .= "\nMEMBERS\n"; foreach my $member ($member_list->get_nodelist) { my $name = $self->find_attribute ($member, 'name'); my $value = $self->find_attribute ($member, 'value'); $text .= "\n • $name = $value\n"; my $doc = $self->format_docs ($member, ' '); if (defined $doc) { $text .= "$doc\n"; } } } return $text; } sub format_sub_methods { my ($self, $element) = @_; my $text = ''; my $method_list = $self->{xpc}->find ('core:method', $element); if ($method_list->size > 0) { $text .= "\nMETHODS\n\n"; foreach my $method ($method_list->get_nodelist) { my $name = $self->find_attribute ($method, 'name'); my $path = $method->nodePath; my $flags = $self->format_callable_flags ($method, qw/introspectable version/); $text .= " • [$name]($path)$flags\n"; } } return $text; } sub format_sub_properties { my ($self, $element) = @_; my $text = ''; my $property_list = $self->{xpc}->find ('core:property', $element); if ($property_list->size > 0) { $text .= "\nPROPERTIES\n\n"; foreach my $property ($property_list->get_nodelist) { my $name = $self->find_attribute ($property, 'name'); my $path = $property->nodePath; my $type_name = $self->find_type_name ($property); my $full_type_name = $self->format_full_type_name ($type_name); my $flags = $self->format_property_flags ($property, qw/version/); $text .= " • [$name]($path): $full_type_name$flags\n"; } } return $text; } sub format_sub_signals { my ($self, $element) = @_; my $text = ''; my $signal_list = $self->{xpc}->find ('glib:signal', $element); if ($signal_list->size > 0) { $text .= "\nSIGNALS\n\n"; foreach my $signal ($signal_list->get_nodelist) { my $name = $self->find_attribute ($signal, 'name'); my $path = $signal->nodePath; my $flags = $self->format_signal_flags ($signal, qw/version/); $text .= " • [$name]($path)$flags\n"; } } return $text; } sub format_sub_virtual_methods { my ($self, $element) = @_; my $text = ''; my $vfunc_list = $self->{xpc}->find ('core:virtual-method', $element); if ($vfunc_list->size > 0) { $text .= "\nVIRTUAL METHODS\n\n"; foreach my $vfunc ($vfunc_list->get_nodelist) { my $name = $self->find_attribute ($vfunc, 'name'); my $path = $vfunc->nodePath; my $flags = $self->format_virtual_method_flags ($vfunc); $text .= " • [$name]($path)$flags\n"; } } return $text; } # ------------------------------------------------------------------------------ sub format_deprecation_docs { my ($self, $element) = @_; my $deprecated = $self->find_attribute ($element, 'deprecated') // 0; return unless $deprecated; my $text = ''; my $version = $self->find_attribute ($element, 'deprecated-version'); if (defined $version) { $text .= "Deprecated since: $version."; } my $doc_dep_list = $self->{xpc}->find ('core:doc-deprecated', $element); if ($doc_dep_list->size == 1) { $text .= ' ' . $doc_dep_list->pop->textContent; } return if $text eq ''; return $text; } sub format_description { my ($self, $element) = @_; my $docs = $self->format_docs ($element); return defined $docs ? "\nDESCRIPTION\n\n$docs\n" : ''; } sub format_docs { my ($self, $element, $indent) = @_; $indent //= ' '; my $text = ''; # The normal docs. my $docs_list = $self->{xpc}->find ('core:doc', $element); if ($docs_list->size == 1) { $text .= $docs_list->pop->textContent; } # The version constraint. my $ver = $self->format_version_constraint ($element); $text .= "\n\n$ver\n" if defined $ver; # The deprecation docs. my $dep = $self->format_deprecation_docs ($element); $text .= "\n\n$dep\n" if defined $dep; return if $text eq ''; # Extract code blocks so that they are not wrapped. my $code_block_pattern = qr/\|\[\n?(.*?)\n?\]\|/s; my $empty_code_block = '|[]|'; my $empty_code_block_pattern = qr/\|\[\]\|/; my @code_blocks = $text =~ m/$code_block_pattern/g; $text =~ s/$code_block_pattern/$empty_code_block/g; # Remove leading white space as fill() otherwise takes it for starting a new # paragraph. Do this after the code block extraction to preserve their # indentation. $text =~ s/^[ \t]+//mg; require Text::Wrap; my $formatted_text = Text::Wrap::fill ($indent, $indent, $text); while ($formatted_text =~ m/$empty_code_block_pattern/g) { my $code_block = shift @code_blocks; $code_block =~ s/^/$indent/mg; my $divider = '-' x (76-length($indent)); my $formatted_code_block = "\n$indent$divider\n$code_block\n$indent$divider"; $formatted_text =~ s/(?:\n)?(?:$indent)?$empty_code_block_pattern/$formatted_code_block/; } return $formatted_text; } sub format_full_element_name { my ($self, $element) = @_; my (undef, undef, $full_name) = $self->find_full_element_name ($element); return $full_name; } sub format_full_type_name { my ($self, $name) = @_; if ($name =~ /\./) { # fully qualified $name =~ s/\./::/g; return $name; } if ($name =~ /^[A-Z]/) { # local return $self->{basename} . '::' . $name; } return $name; # global } sub format_full_type_names { my ($self, $list, $heading) = @_; my $text = ''; if ($list->size > 0) { $text .= "\n$heading\n\n"; foreach my $node ($list->get_nodelist) { my $type_name = $self->find_attribute ($node, 'name'); my $full_type_name = $self->format_full_type_name ($type_name); $text .= " • $full_type_name\n"; } } return $text; } sub format_version_constraint { my ($self, $element) = @_; my $version = $self->find_attribute ($element, 'version'); return if !defined $version; return "Since: $version."; } # ------------------------------------------------------------------------------ sub format_flags { my ($self, $element, $available, $wanted) = @_; $wanted //= []; my @texts; foreach my $flag (@$available) { my $name = $flag->[0]; my $default = $flag->[1]; my $formatter = $flag->[2]; if (@$wanted) { next unless grep { $_ eq $name } @$wanted; } my $value = $self->find_attribute ($element, $name) // $default; my $text = $formatter->($value); push @texts, $text if defined $text; } return '' unless @texts; return ' [' . join (', ', @texts) . ']'; } sub format_callable_flags { my ($self, $element, @wanted) = @_; # name, default, formatter my @available = ( ['introspectable', 1, sub { !$_[0] ? 'NOT INTROSPECTABLE' : undef }], ['deprecated', 0, sub { $_[0] ? "deprecated" : undef }], ['moved-to', undef, sub { defined $_[0] ? "moved to $_[0]" : undef }], ['shadowed-by', undef, sub { defined $_[0] ? "shadowed by $_[0]" : undef }], # FIXME: Format $_[0] properly. ['throws', 0, sub { $_[0] ? "throws" : undef }], ['version', undef, sub { defined $_[0] ? "available since $_[0]" : undef }], ['shadows', undef, sub { defined $_[0] ? "shadows $_[0]" : undef }], # FIXME: Format $_[0] properly. ); return $self->format_flags ($element, \@available, \@wanted); } sub format_field_flags { my ($self, $element, @wanted) = @_; # name, default, formatter my @available = ( ['introspectable', 1, sub { !$_[0] ? 'NOT INTROSPECTABLE' : undef }], ['readable', 1, sub { $_[0] ? 'readable' : undef }], ['writable', 1, sub { $_[0] ? 'writable' : undef }], ); return $self->format_flags ($element, \@available, \@wanted); } sub format_property_flags { my ($self, $element, @wanted) = @_; my @available = ( ['deprecated', 0, sub { $_[0] ? "deprecated" : undef }], ['version', undef, sub { defined $_[0] ? "available since $_[0]" : undef }], ['readable', 1, sub { $_[0] ? 'readable' : undef }], ['writable', 0, sub { $_[0] ? 'writable' : undef }], ); return $self->format_flags ($element, \@available, \@wanted); } sub format_signal_flags { my ($self, $element, @wanted) = @_; # name, default, formatter my @available = ( ['deprecated', 0, sub { $_[0] ? "deprecated" : undef }], ['version', undef, sub { defined $_[0] ? "available since $_[0]" : undef }], ['when', undef, sub { defined $_[0] ? "$_[0]" : undef }], ['no-recurse', 0, sub { $_[0] ? "no recurse" : undef }], ['detailed', 0, sub { $_[0] ? "detailed" : undef }], ); return $self->format_flags ($element, \@available, \@wanted); } sub format_virtual_method_flags { my ($self, $element, @wanted) = @_; my $name = $self->find_attribute ($element, 'name'); my @available = ( ['introspectable', 1, sub { !$_[0] ? 'NOT INTROSPECTABLE' : undef }], ['invoker', undef, sub { defined $_[0] && $_[0] ne $name ? "invoked by $_[0]" : undef }], ['version', undef, sub { defined $_[0] ? "available since $_[0]" : undef }], ); return $self->format_flags ($element, \@available, \@wanted); } # ------------------------------------------------------------------------------ # --- GirGUI ---------------------------------------------------------------- # ------------------------------------------------------------------------------ package GirGUI; use strict; use warnings; use File::Basename qw//; sub TRUE () {1} sub FALSE () {0} sub FILE_MENU_COL_TEXT () { 0 } sub FILE_MENU_COL_FILE () { 1 } sub FILE_MENU_COL_DIR () { 2 } sub FILE_MENU_COL_PATH () { 3 } sub FILE_MENU_COL_IS_SENSITIVE () { 4 } sub GIR_VIEW_COL_TEXT () { 0 } sub GIR_VIEW_COL_PATH () { 1 } sub GIR_VIEW_COL_IS_CATEGORY () { 2 } sub GIR_VIEW_COL_IS_VISIBLE () { 3 } sub new { my ($class, $parser, @girs) = @_; if (!Gtk3::CHECK_VERSION (3, 10, 0)) { die "Need gtk+ >= 3.10 for the GUI\n"; } my $self = bless { parser => $parser, }, $class; my $window = Gtk3::Window->new; $self->setup_file_menu (@girs); $self->setup_gir_view; $self->setup_search_entry; $self->setup_path_bar; $self->setup_result_view; my $gir_view_window = Gtk3::ScrolledWindow->new; $gir_view_window->add ($self->{gir_view}); my $result_view_window = Gtk3::ScrolledWindow->new; $result_view_window->add ($self->{result_view}); my $side_box = Gtk3::Box->new ('vertical', 2); $side_box->pack_start ($self->{file_menu}, FALSE, FALSE, 0); $side_box->pack_start ($gir_view_window, TRUE, TRUE, 0); $side_box->pack_start ($self->{search_entry}, FALSE, FALSE, 0); $side_box->set (margin => 2); my $result_box = Gtk3::Box->new ('vertical', 0); $result_box->pack_start ($self->{path_bar}, FALSE, FALSE, 0); $result_box->pack_start ($result_view_window, TRUE, TRUE, 0); my $paned = Gtk3::Paned->new ('horizontal'); $paned->pack1 ($side_box, TRUE, TRUE); $paned->pack2 ($result_box, TRUE, TRUE); $paned->set_position (300); $window->add ($paned); $window->signal_connect (delete_event => sub { $self->quit; }); $window->set_default_geometry (900, 800); my $accel_group = Gtk3::AccelGroup->new; $accel_group->connect (Gtk3::Gdk::KEY_q (), qw/control-mask/, [], sub { $self->quit; return Gtk3::EVENT_STOP (); }); $accel_group->connect (Gtk3::Gdk::KEY_k (), qw/control-mask/, [], sub { $self->{search_entry}->grab_focus; return Gtk3::EVENT_STOP (); }); $window->add_accel_group ($accel_group); $self->{window} = $window; return $self; } sub filter_gir_view { my ($self, $criterion) = @_; my $view = $self->{gir_view}; my $model = $self->{gir_model}; my $filter_model = $self->{gir_filter_model}; if (!defined $criterion || $criterion eq '') { # Make everything visible. $model->foreach (sub { my (undef, undef, $iter) = @_; $model->set ($iter, GIR_VIEW_COL_IS_VISIBLE, TRUE); return FALSE; # continue }); # Scroll to selected element. my $selection = $view->get_selection; my ($selected_model, $selected_iter) = $selection->get_selected; if (defined $selected_iter) { my $selected_path = $selected_model->get_path ($selected_iter); $view->scroll_to_cell ($selected_path, undef, FALSE, 0.5, 0.5); } } else { my $re; if ($criterion =~ m|\A/.+/\z|) { $criterion =~ s|\A/(.+)/\z|$1|; $re = qr/$criterion/; } else { $re = qr/\Q$criterion\E/i; } my $check_tree; $check_tree = sub { my ($iter) = @_; my @children = map { $model->iter_nth_child ($iter, $_) } 0..$model->iter_n_children ($iter); foreach my $child (@children) { my ($text, $is_cat) = $model->get ($child, GIR_VIEW_COL_TEXT, GIR_VIEW_COL_IS_CATEGORY); if ($is_cat || $text !~ $re) { # no match $model->set ($child, GIR_VIEW_COL_IS_VISIBLE, FALSE); $check_tree->($child); # descend } else { # match # Make the element and all its parents visible. my $cur = $child; do { $model->set ($cur, GIR_VIEW_COL_IS_VISIBLE, TRUE); } while (defined ($cur = $model->iter_parent ($cur))); # Expand the matching element and all its parents. $view->expand_to_path ( $filter_model->convert_child_path_to_path ( $model->get_path ($child))); # No need to descend as we want all children of matching elements to # be visible. (All elements are visible by default.) } } }; $check_tree->(undef); # start with the virtual root node } } sub display_results { my ($self, $results) = @_; my $b = $self->{result_buffer}; $b->delete ($b->get_start_iter (), $b->get_end_iter ()); my $iter = $b->get_start_iter (); my $insert_part = sub { my ($start, $end) = @_; $b->insert ($iter, substr ($results, $start, $end - $start)); }; my ($prev_match_start, $prev_match_end) = (0, 0); while ($results =~ m/\[([^\n\]]+)\]\(([^\n\)]+)\)/g) { my ($link_text, $link_target) = ($1, $2); my ($match_start, $match_end) = ($-[0], $+[0]); if ($match_start != $prev_match_end) { $insert_part->($prev_match_end, $match_start); } my $tag = $b->create_tag (undef, foreground => 'blue'); $tag->{__target} = $link_target; $b->insert_with_tags ($iter, $link_text, $tag); ($prev_match_start, $prev_match_end) = ($match_start, $match_end); } my $end_offset = length ($results); if ($prev_match_end != $end_offset) { $insert_part->($prev_match_end, $end_offset); } } sub run { my ($self) = @_; $self->{window}->show_all; Gtk3::main (); } sub setup_file_menu { my ($self, @girs) = @_; my $file_model = Gtk3::TreeStore->new (qw/Glib::String Glib::String Glib::String Glib::String Glib::Boolean/); my $file_menu = Gtk3::ComboBox->new_with_model ($file_model); my $renderer = Gtk3::CellRendererText->new; $file_menu->pack_start ($renderer, TRUE); $file_menu->set_attributes ($renderer, text => FILE_MENU_COL_TEXT, sensitive => FILE_MENU_COL_IS_SENSITIVE); $file_menu->set_id_column (FILE_MENU_COL_PATH); my $prompt = '<Select GIR>'; $file_model->set ($file_model->append, FILE_MENU_COL_TEXT, $prompt, FILE_MENU_COL_IS_SENSITIVE, FALSE); $file_menu->set_active (0); my %dirs; $dirs{$_->{dir}}++ for @girs; my $n_dirs = scalar keys %dirs; foreach my $gir (sort { $a->{file} cmp $b->{file} } @girs) { my $text = File::Basename::fileparse ($gir->{file}, qr/\.gir$/); if ($n_dirs > 1) { my $dir = $gir->{dir}; $dir =~ s|/share/gir-1\.0$||; $text .= ' (' . $dir . ')'; } $file_model->set ($file_model->append, FILE_MENU_COL_TEXT, $text, FILE_MENU_COL_FILE, $gir->{file}, FILE_MENU_COL_DIR, $gir->{dir}, FILE_MENU_COL_PATH, $gir->{path}, FILE_MENU_COL_IS_SENSITIVE, TRUE); } $file_menu->signal_connect (changed => sub { my (undef, $iter) = $file_menu->get_active_iter; $self->{parser}->open ($file_model->get ($iter, FILE_MENU_COL_PATH)); $self->update_gir_view; }); $self->{file_menu} = $file_menu; } sub setup_gir_view { my ($self) = @_; my $gir_model = Gtk3::TreeStore->new (qw/Glib::String Glib::String Glib::Boolean Glib::Boolean/); my $gir_filter_model = Gtk3::TreeModelFilter->new ($gir_model); $gir_filter_model->set_visible_column (GIR_VIEW_COL_IS_VISIBLE); my $gir_view = Gtk3::TreeView->new_with_model ($gir_filter_model); $gir_view->insert_column_with_attributes ( GIR_VIEW_COL_TEXT, 'Element', Gtk3::CellRendererText->new, text => GIR_VIEW_COL_TEXT); $gir_view->set_headers_visible (FALSE); $gir_view->signal_connect (key_press_event => sub { my (undef, $event) = @_; if ($event->keyval == Gtk3::Gdk::KEY_Left () || $event->keyval == Gtk3::Gdk::KEY_Right ()) { my $selection = $gir_view->get_selection; my ($model, $iter) = $selection->get_selected; if (defined $iter) { my $path = $model->get_path ($iter); if ($event->keyval == Gtk3::Gdk::KEY_Left ()) { $gir_view->collapse_row ($path); } else { $gir_view->expand_row ($path, FALSE); } } return Gtk3::EVENT_STOP (); } return Gtk3::EVENT_PROPAGATE (); }); $gir_view->get_selection->signal_connect (changed => sub { $self->go_to_selection unless $self->{suppress_gir_view_selection_changes}; }); $self->{gir_model} = $gir_model; $self->{gir_filter_model} = $gir_filter_model; $self->{gir_view} = $gir_view; } sub setup_path_bar { my ($self) = @_; my $path_bar = PathBar->new (orientation => 'horizontal', spacing => 2); $path_bar->set_update_func (sub { my ($name, $path) = @_; $self->update_results ($path); }); $self->{path_bar} = $path_bar; } sub setup_search_entry { my ($self) = @_; my $wait_time_ms = 500; my $search_entry = Gtk3::SearchEntry->new; $search_entry->signal_connect (search_changed => sub { # Use a timeout which is reset when the search text changes so that we do # not filter the view too often. if (defined $search_entry->{__timer_id}) { Glib::Source->remove ($search_entry->{__timer_id}); } $search_entry->{__timer_id} = Glib::Timeout->add ($wait_time_ms, sub { $self->filter_gir_view ($search_entry->get_text); $search_entry->{__timer_id} = undef; return Glib::SOURCE_REMOVE (); }); }); $self->{search_entry} = $search_entry; } sub setup_result_view { my ($self) = @_; my $result_buffer = Gtk3::TextBuffer->new (undef); my $result_view = Gtk3::TextView->new_with_buffer ($result_buffer); $result_view->set (editable => FALSE, margin => 2); my $display = $result_view->get_display (); $result_view->{__hand_cursor} = Gtk3::Gdk::Cursor->new_from_name ($display, 'pointer'); $result_view->{__regular_cursor} = Gtk3::Gdk::Cursor->new_from_name ($display, 'text'); my $hovering_over_link = sub { my ($event) = @_; my ($x, $y) = $result_view->window_to_buffer_coords ('widget', $event->x, $event->y); my $iter = $result_view->get_iter_at_location ($x, $y); if (!$iter) { return; } my $tags = $iter->get_tags (); foreach my $tag (@$tags) { if (defined $tag->{__target}) { return $tag; } } return; }; $result_view->{__hovering} = FALSE; $result_view->signal_connect (motion_notify_event => sub { my ($result_view, $event) = @_; my $hovering = defined $hovering_over_link->($event); if ($result_view->{__hovering} != $hovering) { $result_view->{__hovering} = $hovering; $result_view->get_window ('text')->set_cursor ( $hovering ? $result_view->{__hand_cursor} : $result_view->{__regular_cursor}); } return Gtk3::EVENT_PROPAGATE (); }); my $handle_button = sub { my ($event, $cb) = @_; if ($event->button == Gtk3::Gdk::BUTTON_PRIMARY ()) { my $tag = $hovering_over_link->($event); if (defined $tag) { if (defined $cb) { $cb->($tag); } return Gtk3::EVENT_STOP (); } } return Gtk3::EVENT_PROPAGATE (); }; $result_view->signal_connect (button_press_event => sub { my ($result_view, $event) = @_; return $handle_button->($event); }); $result_view->signal_connect (button_release_event => sub { my ($result_view, $event) = @_; return $handle_button->($event, sub { $self->go_to_path ($_[0]->{__target}); }); }); $self->{result_buffer} = $result_buffer; $self->{result_view} = $result_view; } sub update_gir_view { my ($self) = @_; $self->{suppress_gir_view_selection_changes} = TRUE; $self->{gir_model}->clear; $self->{search_entry}->set_text (''); $self->{path_bar}->clear; my $inserter = sub { my ($iter, $text, $path, $is_cat, $is_vis) = @_; $self->{gir_model}->set ($iter, GIR_VIEW_COL_TEXT, $text, GIR_VIEW_COL_PATH, $path, GIR_VIEW_COL_IS_CATEGORY, $is_cat, GIR_VIEW_COL_IS_VISIBLE, $is_vis); }; my $results = $self->{parser}->enumerate_namespace (TRUE); foreach my $result (@$results) { my $heading = $result->[0]; my $entries = $result->[1]; my $heading_iter = $self->{gir_model}->append; $inserter->($heading_iter, $heading, undef, TRUE, TRUE); next unless defined $entries; foreach my $entry (@$entries) { my $iter = $self->{gir_model}->append ($heading_iter); $inserter->($iter, $entry->{name}, $entry->{path}, FALSE, TRUE); next unless defined $entry->{sub_results}; foreach my $sub_result (@{$entry->{sub_results}}) { my $sub_heading = $sub_result->[0]; my $sub_entries = $sub_result->[1]; my $sub_heading_iter = $self->{gir_model}->append ($iter); $inserter->($sub_heading_iter, $sub_heading, undef, TRUE, TRUE); next unless defined $sub_entries; foreach my $sub_entry (@$sub_entries) { my $sub_iter = $self->{gir_model}->append ($sub_heading_iter); $inserter->($sub_iter, $sub_entry->{name}, $sub_entry->{path}, FALSE, TRUE); } } } } $self->{suppress_gir_view_selection_changes} = FALSE; $self->display_results ($self->{parser}->format_namespace); } sub go_to_selection { my ($self) = @_; my $selection = $self->{gir_view}->get_selection; my ($model, $iter) = $selection->get_selected; if (!defined $iter) { $self->display_results ($self->{parser}->format_namespace); } elsif (!$model->get ($iter, GIR_VIEW_COL_IS_CATEGORY)) { my $path = $model->get ($iter, GIR_VIEW_COL_PATH); $self->go_to_path ($path); } } sub go_to_path { my ($self, $path) = @_; my $name = $self->{parser}->format_node_name_by_path ($path); $self->{path_bar}->append ($name, $path); # indirectly calls update_results } sub update_results { my ($self, $path) = @_; $self->display_results ($self->{parser}->format_node_by_path ($path)); # Show and select the correponding tree entry. $self->{gir_model}->foreach (sub { my ($model, $tree_path, $iter) = @_; my $this_path = $model->get ($iter, GIR_VIEW_COL_PATH); if (defined $this_path && $this_path eq $path) { $self->{gir_view}->expand_to_path ($tree_path); $self->{gir_view}->scroll_to_cell ($tree_path, undef, FALSE, 0.0, 0.0); $self->{suppress_gir_view_selection_changes} = TRUE; { $self->{gir_view}->get_selection ()->select_path ($tree_path); } $self->{suppress_gir_view_selection_changes} = FALSE; return TRUE; # stop } return FALSE; # continue }); } sub quit { my ($self) = @_; Gtk3::main_quit (); } package PathBar; # The BEGIN { eval } dance is to support not loading Gtk3 in text mode. BEGIN { eval {use Glib::Object::Subclass qw/Gtk3::Box/;} } sub TRUE () {1} sub FALSE () {0} sub INIT_INSTANCE { my ($self) = @_; my $back_button = Gtk3::Button->new; $back_button->set_image ( Gtk3::Image->new_from_icon_name ('go-previous-symbolic', 'button')); $back_button->set_sensitive (FALSE); $back_button->signal_connect (clicked => sub { $self->{path_label}->go_back }); my $forward_button = Gtk3::Button->new; $forward_button->set_image ( Gtk3::Image->new_from_icon_name ('go-next-symbolic', 'button')); $forward_button->set_sensitive (FALSE); $forward_button->signal_connect (clicked => sub { $self->{path_label}->go_forward }); my $nav_box = Gtk3::Box->new ('horizontal', 2); $nav_box->pack_start ($back_button, FALSE, FALSE, 0); $nav_box->pack_start ($forward_button, FALSE, FALSE, 0); $nav_box->get_style_context->add_class ('linked'); my $path_label = PathLabel->new; $path_label->set_update_func (sub { my ($name, $path) = @_; $self->update_buttons; if (defined $self->{update_func}) { $self->{update_func}->($name, $path); } }); $self->pack_start ($nav_box, FALSE, FALSE, 0); $self->pack_start (Gtk3::VSeparator->new, FALSE, FALSE, 0); $self->pack_start ($path_label, TRUE, TRUE, 0); $self->set (margin => 2); $self->{back_button} = $back_button; $self->{forward_button} = $forward_button; $self->{path_label} = $path_label; return $self; } sub clear { my ($self) = @_; $self->{path_label}->clear (); $self->update_buttons (); } sub append { my ($self, $name, $path) = @_; $self->{path_label}->append ($name, $path); } sub set_update_func { my ($self, $func) = @_; $self->{update_func} = $func; } sub update_buttons { my ($self) = @_; $self->{back_button}->set_sensitive ($self->{path_label}->can_go_back); $self->{forward_button}->set_sensitive ($self->{path_label}->can_go_forward); } package PathLabel; # The BEGIN { eval } dance is to support not loading Gtk3 in text mode. BEGIN { eval {use Glib::Object::Subclass qw/Gtk3::Label/;} } sub TRUE () {1} sub FALSE () {0} sub INIT_INSTANCE { my ($self) = @_; $self->signal_connect (activate_link => sub { my (undef, $index) = @_; $self->{current_child} = $index; $self->update; return Gtk3::EVENT_STOP (); }); $self->set_track_visited_links (FALSE); $self->clear (); } sub clear { my ($self) = @_; $self->{children} = []; $self->{current_child} = undef; $self->{natural_width} = 0; $self->update (); } sub append { my ($self, $name, $path) = @_; my $cur = $self->{current_child}; # If the new entry is equal to the current entry, do nothing. if (defined $cur) { my $child = $self->{children}->[$cur]; if ($child->{name} eq $name && $child->{path} eq $path) { return; } } # If the current entry is not the last entry, remove all entries after the # current one before appending the new entry. if (defined $cur && $cur < $#{$self->{children}}) { splice @{$self->{children}}, $cur+1; } push @{$self->{children}}, {name => $name, path => $path}; $self->{current_child} = $#{$self->{children}}; $self->update; } sub can_go_back { my ($self) = @_; return defined $self->{current_child} && $self->{current_child} > 0; } sub can_go_forward { my ($self) = @_; return defined $self->{current_child} && $self->{current_child} < $#{$self->{children}}; } sub go_back { my ($self) = @_; return unless $self->{current_child} > 0; $self->{current_child}--; $self->update; } sub go_forward { my ($self) = @_; return unless $self->{current_child} < $#{$self->{children}}; $self->{current_child}++; $self->update; } sub set_update_func { my ($self, $func) = @_; $self->{update_func} = $func; } sub update { my ($self) = @_; $self->set_markup ($self->_format_children); if (defined $self->{current_child} && defined $self->{update_func}) { my $child = $self->{children}->[$self->{current_child}]; $self->{update_func}->($child->{name}, $child->{path}); } } sub GET_PREFERRED_WIDTH { #say 'GET_PREFERRED_WIDTH'; my ($self) = @_; (undef, $self->{natural_width}) = $self->SUPER::GET_PREFERRED_WIDTH; return (0, 0); } sub SIZE_ALLOCATE { #say 'SIZE_ALLOCATE'; my ($self, $allocation) = @_; if ($self->{natural_width} > $allocation->{width}) { my @selected = ($self->{current_child}); while (1) { my @candidates = @selected; if ($selected[0] > 0) { unshift @candidates, $selected[0]-1; } if ($selected[-1] < $#{$self->{children}}) { push @candidates, $selected[-1]+1; } $self->set_markup ($self->_format_children (@candidates)); my ($ink_rect, $logical_rect) = $self->get_layout->get_extents; my $text_width = $logical_rect->{width}/Pango::SCALE (); if ($text_width > $allocation->{width}) { last; } else { @selected = @candidates; } } $self->set_markup ($self->_format_children (@selected)); } $self->SUPER::SIZE_ALLOCATE ($allocation); } # Use undef as an indicator for left-out children. sub _add_omission_markers { my ($self, @indices) = @_; if (!@indices) { return @indices; } if ($indices[0] > 0) { unshift @indices, undef; } if ($indices[-1] < $#{$self->{children}}) { push @indices, undef; } return @indices; } sub _format_child { my ($self, $index) = @_; return '…' unless defined $index; my $name = $self->{children}->[$index]->{name}; my $markup = $index == $self->{current_child} ? "<b>$name</b>" : "<a href='$index'>$name</a>"; return $markup; } sub _format_children { my ($self, @indices) = @_; if (!@indices) { @indices = 0..$#{$self->{children}}; } @indices = $self->_add_omission_markers (@indices); return join ' ▸ ', map { $self->_format_child ($_) } @indices; } __END__ =encoding utf8 =head1 NAME perli11ndoc - view documentation of installed libraries bound using Glib::Object::Introspection =head1 ABSTRACT perli11ndoc allows you to view Perl documentation for Glib libraries bound to Perl using Glib::Object::Introspection. Glib::Object::Introspection uses the gobject-introspection and libffi projects to dynamically create Perl bindings for a wide variety of libraries. Examples include gtk+, webkit, libsoup and many more. All libraries currently installed will be shown with Perl-specific documentation and examples. Where Glib::Object::Introspection differs from the C library, differences are pointed out and the Perl-specific interface is defined. =head1 DEPENDENCIES perli11ndoc requires that XML::LibXML be installed to run. It also requires that the corresponding C library headers be installed on the system to provide documentation. For instance, on a Debian-based system you would need libgtk-3-dev to see the Perl introspected documentation for Gtk3. =head1 SEE ALSO =over =item perl-Glib: L<Glib> =item gobject-introspection: L<http://live.gnome.org/GObjectIntrospection> =item libffi: L<http://sourceware.org/libffi/> =item Glib::Object::Introspection: L<https://metacpan.org/pod/Glib::Object::Introspection> =back =head1 AUTHORS =over =item Emmanuele Bassi <ebassi at linux intel com> =item muppet <scott asofyet org> =item Torsten Schönfeld <kaffeetisch at gmx de> =back =head1 LICENSE This utility is free software; you can redistribute it and/or modify it under the terms of the Lesser General Public License (LGPL). For more information, see http://www.fsf.org/licenses/lgpl.txt =cut