/usr/sbin
NameSizeModeActions
accessdb128880755editdlrm
accton140160755editdlrm
addgnupghome30750755editdlrm
addpart254560755editdlrm
adduser1517200755editdlrm
agetty638880755editdlrm
alternatives375360755editdlrm
anacron419760755editdlrm
apachectl48040755editdlrm
applygnupgdefaults22170755editdlrm
arp662640755editdlrm
arpd1121520755editdlrm
arping294320755editdlrm
atd334080755editdlrm
atrun670755editdlrm
authconfig220570755editdlrm
avcstat167920755editdlrm
badblocks333680755editdlrm
blkdeactivate163510555editdlrm
blkdiscard297520755editdlrm
blkid1010240755editdlrm
blkmapd547520755editdlrm
blkzone509440755editdlrm
blockdev422960755editdlrm
bridge1620480755editdlrm
build-locale-archive8612480700editdlrm
capsh332240755editdlrm
cfdisk1007680755editdlrm
chcpu295200755editdlrm
chgpasswd713600755editdlrm
chkconfig461920755editdlrm
chpasswd628960755editdlrm
chroot424480755editdlrm
clock667840755editdlrm
clockdiff209200755editdlrm
consoletype121440755editdlrm
convertquota805680755editdlrm
cracklib-check133600755editdlrm
cracklib-format2510755editdlrm
cracklib-packer133680755editdlrm
cracklib-unpacker92480755editdlrm
create-cracklib-dict9900755editdlrm
crond757120755editdlrm
csf2509790700editdlrm
ctrlaltdel253840755editdlrm
ctstat259360755editdlrm
dcb1587600755editdlrm
ddns-confgen209520755editdlrm
debugfs2371840755editdlrm
delpart254560755editdlrm
depmod1637840755editdlrm
devlink2210480755editdlrm
dhclient4645680755editdlrm
dhclient-script336460755editdlrm
dmfilemapd251360555editdlrm
dmsetup1624480555editdlrm
dmstats1624480555editdlrm
dnssec-checkds9360755editdlrm
dnssec-coverage9380755editdlrm
dnssec-dsfromkey623040755editdlrm
dnssec-importkey622960755editdlrm
dnssec-keyfromlabel663120755editdlrm
dnssec-keygen745840755editdlrm
dnssec-keymgr9340755editdlrm
dnssec-revoke581040755editdlrm
dnssec-settime623040755editdlrm
dnssec-signzone1200160755editdlrm
dnssec-verify541120755editdlrm
dovecot1660720755editdlrm
dovecot_cpshutdown33440755editdlrm
dpkg-fsys-usrunmess123990755editdlrm
dump-acct298480755editdlrm
dump-utmp256160755editdlrm
dumpe2fs332960755editdlrm
e2freefrag168160755editdlrm
e2fsck3364000755editdlrm
e2image374880755editdlrm
e2label1132800755editdlrm
e2mmpstatus332960755editdlrm
e2undo208640755editdlrm
e4crypt251360755editdlrm
e4defrag291760755editdlrm
edquota934320755editdlrm
ether-wake757680755editdlrm
ethtool5711760755editdlrm
exicyclog113650755editdlrm
exigrep117100755editdlrm
exim17050964755editdlrm
eximstats1525460755editdlrm
exim_checkaccess49430755editdlrm
exim_dbmbuild246880755editdlrm
exim_dumpdb601120755editdlrm
exim_fixdb656560755editdlrm
exim_lock272240755editdlrm
exim_tidydb561200755editdlrm
exinext82170755editdlrm
exiqgrep67390755editdlrm
exiqsumm64430755editdlrm
exiwhat45240755editdlrm
exportfs843520755editdlrm
faillock210160755editdlrm
fcgistarter175200755editdlrm
fdformat339680755editdlrm
fdisk1340480755editdlrm
filefrag168560755editdlrm
findfs126720755editdlrm
fix-info-dir80330755editdlrm
fixfiles107270755editdlrm
fsck547520755editdlrm
fsck.cramfs424080755editdlrm
fsck.ext23364000755editdlrm
fsck.ext33364000755editdlrm
fsck.ext43364000755editdlrm
fsck.minix1011200755editdlrm
fsfreeze167760755editdlrm
fstrim507920755editdlrm
fuse2fs720800755editdlrm
fuser390560755editdlrm
g13-syshelp1943120755editdlrm
genhomedircon299760755editdlrm
genhostid121440755editdlrm
genl1243200755editdlrm
genrandom126720755editdlrm
getcap126480755editdlrm
getenforce80240755editdlrm
getpcaps125680755editdlrm
getsebool121520755editdlrm
groupadd976320755editdlrm
groupdel932800755editdlrm
groupmems629600755editdlrm
groupmod1017600755editdlrm
grpck629440755editdlrm
grpconv586400755editdlrm
grpunconv586320755editdlrm
grub2-bios-setup12139840755editdlrm
grub2-get-kernel-settings27420755editdlrm
grub2-install15114640755editdlrm
grub2-mkconfig88880755editdlrm
grub2-probe12139280755editdlrm
grub2-reboot40850755editdlrm
grub2-rpm-sort2899360755editdlrm
grub2-set-bootflag167444755editdlrm
grub2-set-default35350755editdlrm
grub2-set-password31190755editdlrm
grub2-setpassword31190755editdlrm
grub2-switch-to-blscfg88090755editdlrm
grubby2600755editdlrm
gss-server252000755editdlrm
gssproxy1352480755editdlrm
halt2236960755editdlrm
hardlink174960755editdlrm
htcacheclean454240755editdlrm
httpd10152560755editdlrm
hwclock667840755editdlrm
iconvconfig338400755editdlrm
ifconfig828000755editdlrm
ifdown21230755editdlrm
ifenslave255440755editdlrm
ifstat1204960755editdlrm
ifup54630755editdlrm
init16136240755editdlrm
insmod1637840755editdlrm
install-info514320755editdlrm
installkernel3230755editdlrm
ip7099440755editdlrm
ip6tables943920755editdlrm
ip6tables-legacy943920755editdlrm
ip6tables-legacy-restore943920755editdlrm
ip6tables-legacy-save943920755editdlrm
ip6tables-restore943920755editdlrm
ip6tables-save943920755editdlrm
ipmaddr215040755editdlrm
ipset92240755editdlrm
iptables943920755editdlrm
iptables-legacy943920755editdlrm
iptables-legacy-restore943920755editdlrm
iptables-legacy-save943920755editdlrm
iptables-restore943920755editdlrm
iptables-save943920755editdlrm
iptraf-ng1891040755editdlrm
iptunnel256000755editdlrm
isc-hmac-fixup121440755editdlrm
key.dns_resolver251040755editdlrm
kpartx502320755editdlrm
lchage168000755editdlrm
ldattach337840755editdlrm
ldconfig10097680755editdlrm
lfd3916290700editdlrm
lgroupadd121600755editdlrm
lgroupdel121600755editdlrm
lgroupmod203520755editdlrm
lid166640755editdlrm
lnewusers203440755editdlrm
lnstat259360755editdlrm
load_policy125760755editdlrm
logrotate952640755editdlrm
logsave168000755editdlrm
losetup927680755editdlrm
lpasswd208400755editdlrm
lsmod1637840755editdlrm
luseradd203520755editdlrm
luserdel162560755editdlrm
lusermod203600755editdlrm
lwresd8611200755editdlrm
mariadbd254524800755editdlrm
matchpathcon126640755editdlrm
mii-diag260080755editdlrm
mii-tool215360755editdlrm
mkdict2510755editdlrm
mke2fs1417680755editdlrm
mkfs168720755editdlrm
mkfs.cramfs422560755editdlrm
mkfs.ext21417680755editdlrm
mkfs.ext31417680755editdlrm
mkfs.ext41417680755editdlrm
mkfs.minix886400755editdlrm
mkhomedir_helper250240755editdlrm
mklost+found121440755editdlrm
mkswap885520755editdlrm
modinfo1637840755editdlrm
modprobe1637840755editdlrm
modsec-sdbm-util264480750editdlrm
mount.nfs2019764755editdlrm
mount.nfs42019764755editdlrm
mountstats432370755editdlrm
mysqld254524800755editdlrm
named8611200755editdlrm
named-checkconf417680755editdlrm
named-checkzone375120755editdlrm
named-compilezone375120755editdlrm
named-journalprint121360755editdlrm
nameif173840755editdlrm
newusers1098000755editdlrm
nfsconf383760755editdlrm
nfsconvert133470755editdlrm
nfsdcld674480755editdlrm
nfsdclddb102420755editdlrm
nfsdclnts92330755editdlrm
nfsdcltrack509760755editdlrm
nfsidmap464480755editdlrm
nfsiostat239220755editdlrm
nfsref673760755editdlrm
nfsstat363680755editdlrm
nft249920755editdlrm
nologin121520755editdlrm
nscd1604480755editdlrm
nsec3hash125840755editdlrm
nstat1162960755editdlrm
ntsysv419520755editdlrm
oddjobd794960755editdlrm
packer133680755editdlrm
pam_console_apply462800755editdlrm
pam_timestamp_check121524755editdlrm
paperconfig41700755editdlrm
partx967680755editdlrm
pidof170960755editdlrm
ping677120755editdlrm
ping6677120755editdlrm
pivot_root126800755editdlrm
plipconfig130160755editdlrm
pluginviewer210640755editdlrm
poweroff2236960755editdlrm
pure-authd196960755editdlrm
pure-certd196000755editdlrm
pure-config.pl47550755editdlrm
pure-ftpd1864400755editdlrm
pure-ftpwho274720755editdlrm
pure-mrtginfo114320755editdlrm
pure-quotacheck192720755editdlrm
pure-uploadscript195360755editdlrm
pwck586400755editdlrm
pwconv543760755editdlrm
pwhistory_helper209200755editdlrm
pwunconv544000755editdlrm
quot805600755editdlrm
quotacheck1185280755editdlrm
quotaoff851520755editdlrm
quotaon851520755editdlrm
quotastats169360755editdlrm
rcmysql-0editdlrm
rdisc251360755editdlrm
rdma1918800755editdlrm
readprofile210400755editdlrm
reboot2236960755editdlrm
repquota852400755editdlrm
request-key249680755editdlrm
resize2fs664720755editdlrm
resizepart425680755editdlrm
resolvconf2004480755editdlrm
restorecon210240755editdlrm
restorecon_xattr168080755editdlrm
rfkill547440755editdlrm
rmmod1637840755editdlrm
rndc374080755editdlrm
rndc-confgen209360755editdlrm
rotatelogs312400755editdlrm
route692480755editdlrm
rpc.gssd1090960755editdlrm
rpc.idmapd632160755editdlrm
rpc.mountd1669520755editdlrm
rpc.nfsd511200755editdlrm
rpc.statd1057760755editdlrm
rpcbind630240755editdlrm
rpcctl96310755editdlrm
rpcdebug198400755editdlrm
rpcinfo334240755editdlrm
rsyslogd7421200755editdlrm
rtacct480640755editdlrm
rtcwake504880755editdlrm
rtmon1200800755editdlrm
rtstat259360755editdlrm
runlevel2236960755editdlrm
runq17050964755editdlrm
runuser501680755editdlrm
sa477360755editdlrm
safe_finger128800755editdlrm
saslauthd966880755editdlrm
sasldblistusers2212640755editdlrm
saslpasswd2168160755editdlrm
sefcontext_compile669200755editdlrm
selabel_digest125760755editdlrm
selabel_lookup125680755editdlrm
selabel_lookup_best_match121760755editdlrm
selabel_partial_match121680755editdlrm
selinuxconlist121600755editdlrm
selinuxdefcon121600755editdlrm
selinuxenabled80240755editdlrm
selinuxexeccon121440755editdlrm
selinux_check_access126560755editdlrm
semanage421710755editdlrm
semodule299760755editdlrm
sendmail173202755editdlrm
service37290755editdlrm
sestatus209040755editdlrm
setcap166640755editdlrm
setenforce125600755editdlrm
setfiles210240755editdlrm
setquota935680755editdlrm
setsebool167680755editdlrm
sfdisk1213520755editdlrm
showmount215680755editdlrm
shutdown2236960755editdlrm
sim_server121520755editdlrm
slattach448080755editdlrm
sm-notify800080755editdlrm
smartctl9241200755editdlrm
smartd7419840755editdlrm
snmpd332320755editdlrm
snmptrapd333840755editdlrm
ss1958880755editdlrm
sshd8905680755editdlrm
start-statd8380755editdlrm
start-stop-daemon470880755editdlrm
suexec259044755editdlrm
sulogin504240755editdlrm
suphp68817604750editdlrm
swaplabel168960755editdlrm
swapoff212480755editdlrm
swapon505920755editdlrm
switch_root168880755editdlrm
sysctl295680755editdlrm
t1libconfig39210755editdlrm
tcpd432560755editdlrm
tcpdmatch475760755editdlrm
tcpdump10570720755editdlrm
tcpslice334160755editdlrm
tcsd3171520755editdlrm
telinit2236960755editdlrm
testsaslauthd170560755editdlrm
tipc1669840755editdlrm
tmpwatch363200755editdlrm
tracepath209280755editdlrm
tracepath6209280755editdlrm
try-from256320755editdlrm
tsig-keygen209520755editdlrm
tune2fs1132800755editdlrm
udevadm4347520755editdlrm
umount.nfs2019764755editdlrm
umount.nfs42019764755editdlrm
unbound-anchor587120755editdlrm
unix_chkpwd377444755editdlrm
unix_update377440700editdlrm
update-alternatives375360755editdlrm
update-smart-drivedb147820755editdlrm
useradd1517200755editdlrm
userdel1098640755editdlrm
userhelper459364711editdlrm
usermod1475680755editdlrm
usernetctl127044755editdlrm
uuserver162560755editdlrm
vdpa1208720755editdlrm
vigr696880755editdlrm
vipw696880755editdlrm
visudo2450240755editdlrm
weak-modules344100755editdlrm
whmapi034969120755editdlrm
whmapi134969120755editdlrm
whmlogin23900755editdlrm
wipefs421040755editdlrm
xinetd1804000755editdlrm
xqmstats168480755editdlrm
xtables-legacy-multi943920755editdlrm
zdump210560755editdlrm
zic540960755editdlrm
zramctl1015040755editdlrm
Edit: /usr/sbin/nfsdclnts (9233B)
#!/usr/libexec/platform-python # -*- python-mode -*- ''' Copyright (C) 2020 Authors: Achilles Gaikwad Kenneth D'souza This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ''' import multiprocessing as mp import os import signal import sys try: import argparse except ImportError: print('%s: Failed to import argparse - make sure argparse is installed!' % sys.argv[0]) sys.exit(1) try: import yaml except ImportError: print('%s: Failed to import yaml - make sure python3-pyyaml is installed!' % sys.argv[0]) sys.exit(1) BBOLD = '\033[1;30;47m' #Bold black text with white background. ENDC = '\033[m' #Rest to defaults def init_worker(): signal.signal(signal.SIGINT, signal.SIG_IGN) # this function converts the info file to a dictionary format, sorta. def file_to_dict(path): client_info = {} try: with open(path) as f: for line in f: try: (key, val) = line.split(':', 1) client_info[key] = val.strip() # FIXME: There has to be a better way of converting the info file to a dictionary. except ValueError as reason: if verbose: print('Exception occured, %s' % reason) if len(client_info) == 0 and verbose: print("Provided %s file is not valid" %path) return client_info except OSError as reason: if verbose: print('%s' % reason) # this function gets the paths from /proc/fs/nfsd/clients/ # returns a list of paths for each client which has nfs-share mounted. def getpaths(): path = [] try: dirs = os.listdir('/proc/fs/nfsd/clients/') except OSError as reason: exit('%s' % reason) if len(dirs) !=0: for i in dirs: path.append('/proc/fs/nfsd/clients/' + i + '/states') return (path) else: exit('Nothing to process') # A single function to rule them all, in this function we gather all the data # from already populated data_list and client_info. def printer(data_list, argument): client_info_path = data_list.pop() client_info = file_to_dict(client_info_path) for i in data_list: for key in i: inode = i[key]['superblock'].split(':')[-1] # The ip address is quoted, so we dequote it. try: client_ip = client_info['address'][1:-1] except: client_ip = "N/A" try: # if the nfs-server reboots while the nfs-client holds the files open, # the nfs-server would print the filename as '/'. For such instaces we # print the output as disconnected dentry instead of '/'. if(i[key]['filename']=='/'): fname = 'disconnected dentry' else: fname = i[key]['filename'].split('/')[-1] except KeyError: # for older kernels which do not have the fname patch in kernel, they # won't be able to see the fname field. Therefore post it as N/A. fname = "N/A" otype = i[key]['type'] try: access = i[key]['access'] except: access = '' try: deny = i[key]['deny'] except: deny = '' try: hostname = client_info['name'].split()[-1].split('"')[0] hostname = hostname.split('.')[0] # if the hostname is too long, it messes up with the output being in columns, # therefore we truncate the hostname followed by two '..' as suffix. if len(hostname) > 20: hostname = hostname[0:20] + '..' except: hostname = "N/A" try: clientid = client_info['clientid'] except: clientid = "N/A" try: minorversion = "4." + client_info['minor version'] except: minorversion = "N/A" otype = i[key]['type'] # since some fields do not have deny column, we drop those if -t is either # layout or lock. drop = ['layout', 'lock'] # Printing the output this way instead of a single string which is concatenated # this makes it better to quickly add more columns in future. if(otype == argument.type or argument.type == 'all'): print('%-13s' %inode, end='| ') print('%-7s' %otype, end='| ') if (argument.type not in drop): print('%-7s' %access, end='| ') if (argument.type not in drop and argument.type !='deleg'): print('%-5s' %deny, end='| ') if (argument.hostname == True): print('%-22s' %hostname, end='| ') else: print('%-22s' %client_ip, end='| ') if (argument.clientinfo == True) : print('%-20s' %clientid, end='| ') print('%-5s' %minorversion, end='| ') print(fname) def opener(path): try: with open(path, 'r') as nfsdata: try: data = yaml.load(nfsdata, Loader = yaml.BaseLoader) if data is not None: clientinfo = path.rsplit('/', 1)[0] + '/info' data.append(clientinfo) return data except: if verbose: print("Exception occurred, Please make sure %s is a YAML file" %path) except OSError as reason: if verbose: print('%s' % reason) def print_cols(argument): title_inode = 'Inode number' title_otype = 'Type' title_access = 'Access' title_deny = 'Deny' title_fname = 'Filename' title_clientID = 'Client ID' title_hostname = 'Hostname' title_ip = 'ip address' title_nfsvers = 'vers' drop = ['lock', 'layout'] print(BBOLD, end='') print('%-13s' %title_inode, end='| ') print('%-7s' %title_otype, end='| ') if (argument.type not in drop): print('%-7s' %title_access, end='| ') if (argument.type not in drop and argument.type !='deleg'): print('%-5s' %title_deny, end='| ') if (argument.hostname == True): print('%-22s' %title_hostname, end='| ') else: print('%-22s' %title_ip, end='| ') if (argument.clientinfo == True): print('%-20s' %title_clientID, end='| ') print('%-5s' %title_nfsvers, end='| ') print(title_fname, end='') print(ENDC) def nfsd4_show(): parser = argparse.ArgumentParser(description = 'Parse the nfsd states and clientinfo files.') parser.add_argument('-t', '--type', metavar = 'type', type = str, choices = ['open', 'deleg', 'lock', 'layout', 'all'], default = 'all', help = 'Input the type that you want to be printed: open, lock, deleg, layout, all') parser.add_argument('--clientinfo', action = 'store_true', help = 'output clients information, --hostname is implied.') parser.add_argument('--hostname', action = 'store_true', help = 'print hostname of client instead of its ip address. Longer hostnames are truncated.') parser.add_argument('-v', '--verbose', action = 'store_true', help = 'Verbose operation, show debug messages.') parser.add_argument('-f', '--file', nargs='+', type = str, metavar='', help = 'pass client states file, provided that info file resides in the same directory.') parser.add_argument('-q', '--quiet', action = 'store_true', help = 'don\'t print the header information') args = parser.parse_args() global verbose verbose = False if args.verbose: verbose = True if args.file: paths = args.file else: paths = getpaths() p = mp.Pool(mp.cpu_count(), init_worker) try: result = p.map(opener, paths) ### Drop None entries from list final_result = list(filter(None, result)) p.close() p.join() if len(final_result) !=0 and not args.quiet: print_cols(args) for item in final_result: printer(item, args) except KeyboardInterrupt: print('Caught KeyboardInterrupt, terminating workers') p.terminate() p.join() if __name__ == "__main__": nfsd4_show()