![Solaris os,系统当前打开的文件数(无超级用户权限)](https://linux22.com/image/163281/Solaris%20os%EF%BC%8C%E7%B3%BB%E7%BB%9F%E5%BD%93%E5%89%8D%E6%89%93%E5%BC%80%E7%9A%84%E6%96%87%E4%BB%B6%E6%95%B0%EF%BC%88%E6%97%A0%E8%B6%85%E7%BA%A7%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%EF%BC%89.png)
我可以使用以下命令获取 Solaris 操作系统中当前活动和分配的文件描述符的总数:
echo ::kmastat | sudo mdb -k| grep file_cache
但mdb需要超级用户权限。
是否有任何命令可以在没有超级用户权限的情况下执行相同的任务?或者说有可能吗?
操作系统信息:Oracle Solaris 11.4 X86
答案1
根据定义,不可能运行添加打开文件的命令,因为普通用户看不到 root 拥有的文件(除非他们具有所需的权限,这会破坏该对象)。
您必须主动破坏 root 隐私,并将用户添加到 sudoers 文件(Solaris > ver 11)以运行 mdb 命令,或者将用户添加到对 root 拥有的文件具有读取访问权限的组。
看为什么 file-nr 和 lsof 对打开文件的计数不同?有关文件处理程序计数与列出打开的“文件”的信息 - 总数有所不同,具体取决于计为文件的文件夹等。
对于 Solaris,您可以按进程对打开的文件进行计数...或者您需要能够查看根文件,然后使用“lsof”:
lsof | wc -l
对于单个进程,您可以针对 PID 运行“pfiles”。看极客日记了解更多。
但是,也许可以尝试使用 ps 然后使用 pfiles:
ps -A | awk '{print $1}' | xargs pfiles
然后用 awk 将总数相加。
我也尝试使用 find,但它很混乱,因为它也列出了套接字等:
find /proc/*/fd/ * -type f | grep -v "Permission denied" | wc -l