Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[Golang][Linux]-如何按当前用户获取所有打开的文件_Linux_Go - Fatal编程技术网

[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