我希望在日志大小超过配额时删除一些日志,但我需要在删除之前检查日志是否打开。
如何让当前用户获取所有打开的文件?
答案 0 :(得分:1)
解析/ proc(参见proc(5) ...)可能是最有效的方式,也是lsof
会做的。
您可以先扫描所有(数字)目录以查找用户运行的进程,而不是所有此类目录都使用/proc/
pid /fd
目录。
但也许你应该让你的系统管理员设置disk quotas。见quota(1)& quotaon(8)
也许正在使用&配置logrotate就足够了。
答案 1 :(得分:0)
如果你是bash脚本,lsof
可能符合你的需要。如果您对使用用户名X的用户感兴趣,lsof -uX
应该可以解决问题。
答案 2 :(得分:0)
通过解析“/ 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
}