[Golang][Linux]-如何按当前用户获取所有打开的文件
当日志大小超过配额时,我想删除一些日志,但在删除之前,我需要检查日志是否处于打开状态[Golang][Linux]-如何按当前用户获取所有打开的文件,linux,go,Linux,Go,当日志大小超过配额时,我想删除一些日志,但在删除之前,我需要检查日志是否处于打开状态 如何按当前用户获取所有打开的文件?如果您正在编写bash脚本,lsof可能适合您的需要。如果您对用户名为X的用户感兴趣,lsof-uX应该可以做到这一点。解析/proc(请参阅…)可能是最有效的方法,也是lsof可以做到的 您可以首先扫描所有(数字)目录以查找用户运行的进程,而不是在所有此类目录中使用/proc/pid/fd目录 顺便说一句,你可能不在乎,只是删除这些日志文件。如果内核被打开,它将正常运行 但也
如何按当前用户获取所有打开的文件?如果您正在编写bash脚本,
lsof
可能适合您的需要。如果您对用户名为X的用户感兴趣,lsof-uX
应该可以做到这一点。解析/proc(请参阅…)可能是最有效的方法,也是lsof
可以做到的
您可以首先扫描所有(数字)目录以查找用户运行的进程,而不是在所有此类目录中使用/proc/
pid/fd
目录
顺便说一句,你可能不在乎,只是删除这些日志文件。如果内核被打开,它将正常运行
但也许您应该让系统管理员进行设置。见&
也许使用和配置就足够了。通过解析“/proc”获取所有打开的文件:
func getOpenfiles() (openfiles map[string]bool) {
files, _ := ioutil.ReadDir("/proc")
openfiles = make(map[string]bool)
for _, f := range files {
m, _ := filepath.Match("[0-9]*", f.Name())
if f.IsDir() && m {
fdpath := filepath.Join("/proc", f.Name(), "fd")
ffiles, _ := ioutil.ReadDir(fdpath)
for _, f := range ffiles {
fpath, err := os.Readlink(filepath.Join(fdpath, f.Name()))
if err != nil {
continue
}
openfiles[fpath] = true
}
}
}
return openfiles
}
通过解析“/proc”,我可以得到所有打开的文件。我想知道是否有更好的方法只要检查我的第一条评论,这里是和顺便说一句,你可以使用自动压缩和归档日志,然后删除它(可能是一个脚本)感谢bansi,我想实现一个代理,它将运行在docker容器环境,它不能有太多的进程,另一个选项是,如果您的环境有
sed
或tail