Questions tagged «open-files»

处理程序中当前打开的文件

3
为什么在Linux中限制打开文件的数量?
现在,我知道如何: 查找每个进程的打开文件限制: ulimit -n 计算所有进程中所有打开的文件: lsof | wc -l 获取允许的最大打开文件数: cat /proc/sys/fs/file-max 我的问题是:为什么Linux中的打开文件有限制?
136 open-files  limit 

3
查找并删除已打开但已删除的大文件
如何找到已删除但仍在应用程序中打开的大文件?即使进程已打开,如何删除该文件? 情况是,我们正在运行一个进程,该进程正在以惊人的速度填充日志文件。我知道原因,并且可以解决。在此之前,我想在不关闭进程的情况下rm或清空日志文件。 简单地执行rm output.log操作只会删除对文件的引用,但是它将继续占用磁盘上的空间,直到进程终止。更糟糕:rming 之后,我现在无法找到文件的位置或文件的大小!有什么方法可以找到文件,甚至可以在另一个进程中打开它,也可以清空它? 我专门指的是基于Linux的操作系统,例如Debian或RHEL。



7
谁有这个unix套接字对的另一端?
我想确定哪个进程具有UNIX套接字的另一端。 具体来说,我要问的是使用创建的一个socketpair(),尽管问题对于任何UNIX套接字都是相同的。 我有一个程序parent创建一个socketpair(AF_UNIX, SOCK_STREAM, 0, fds)和fork()。父进程关闭fds[1]并保持fds[0]通信。孩子做相反的事情close(fds[0]); s=fds[1]。然后孩子exec()的另一个程序child1。两者可以通过此套接字对来回通信。 现在,假设我知道谁parent是谁,但我想弄清楚谁child1是谁。我该怎么做呢? 我可以使用几种工具,但是没有一个可以告诉我哪个过程在套接字的另一端。我努力了: lsof -c progname lsof -c parent -c child1 ls -l /proc/$(pidof server)/fd cat /proc/net/unix 基本上,我可以看到两个插座以及有关它们的所有内容,但无法确定它们已连接。我正在尝试确定父级中的哪个FD与哪个子进程进行通信。

1
如何实时监视进程的打开文件?
我知道我可以lsof 及时在Linux机器上使用来查看进程的打开文件。但是,进程可以如此快速地打开,更改和关闭文件,以致在使用标准外壳脚本(例如watch)监视文件时,我无法看到它,如“在Linux上监视打开的进程文件(实时)”中所述。。 因此,我认为我正在寻找一种简单的方法来审核流程,并查看经过一段时间后所做的工作。如果还可以查看(尝试)建立了哪些网络连接并在没有时间开始审核之前有时间运行审核,则可以开始审核。 理想情况下,我想这样做: sh $ audit-lsof /path/to/executable 4530.848254 OPEN read /etc/myconfig 4530.848260 OPEN write /var/log/mylog.log 4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious 4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 | [...] 4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed 4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling 使用strace和一些标志看不到每个系统调用是否可能?

2
为什么进程替换会导致一个名为/ dev / fd / 63的文件,这是一个管道?
我试图在此特定示例的上下文中了解命名管道。 我输入<(ls -l)我的终端,并输出为bash: /dev/fd/63: Permission denied。 如果输入cat <(ls -l),我可以看到目录内容。如果我更换cat用echo,我觉得我得到的终端名称(或者是什么呢?)。 echo <(ls -l)将输出给出为/dev/fd/63。 另外,这个示例输出对我来说还不清楚。 ls -l <(echo "Whatever") lr-x------ 1 root root 64 Sep 17 13:18 /dev/fd/63 -> pipe:[48078752] 但是,如果我给出,ls -l <()它将列出目录内容。 如果命名管道发生了什么情况?

2
/ proc / PID / fd / X链接号
在Linux中,在中/proc/PID/fd/X,管道或套接字的文件描述符的链接具有数字,例如: l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839] l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839] lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925] lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926] lr-x------ 1 user user 64 …


3
如何“追踪并跟踪”文件?
正在按顺序下载文件wget。 如果我开始使用cat myfile.tar.bz2 | tar -xj来解包,它可能会正确解包,或者失败,并显示“意外的EOF”,具体取决于哪种速度更快。 如何“跟踪和跟踪”文件,即将文件内容输出到stdout,但不退出EOF,而是继续订阅该文件并继续输出数据的新部分,仅当文件被关闭时退出作家,并且在N秒内未重新打开。 我已经基于@arielCo的答案创建了一个脚本cat_and_follow,当不再打开该文件以进行写入时,该脚本也会终止。tail
31 files  pipe  cat  tail  open-files 

2
移动要附加的文件是否安全?
我有一个node.js流程,用于fs.appendFile向添加行file.log。仅附加每行约40个字符的完整行,例如,调用为like fs.appendFile("start-end"),而不是2个调用为fs.appendFile("start-")and fs.appendFile("end")。如果我将此文件移到,file2.log可以确定没有任何行丢失或部分复制吗?

6
从保持打开状态的已删除文件中释放磁盘空间的最佳方法
嗨,我有许多文件已被删除,但是由于某种原因,与删除的文件相关联的磁盘空间无法利用,直到我明确杀死占用磁盘空间的文件的过程为止 $ lsof /tmp/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted) 上面已删除的文件占用的磁盘空间会引起问题,例如尝试使用Tab键自动完成文件路径时出现错误 bash: cannot create temp file for here-document: No space left on device 但是,在我运行kill -9 1623该PID的空间后,就不再释放该错误。 我的问题是: 为什么第一次删除文件时没有立即释放此空间? 找回与已删除文件关联的文件空间的最佳方法是什么? 并且请让我知道我使用的任何错误术语或有关此情况的其他任何相关信息。

3
我们怎么知道谁在伪终端设备的另一端?
如果我这样做: echo foo > /dev/pts/12 某些进程foo\n将从其文件描述符读取该消息到主端。 有没有办法找出那个过程是什么? 换句话说,我如何找出哪个xterm / sshd / script / screen / tmux / expect / socat ...位于另一端/dev/pts/12? lsof /dev/ptmx会告诉我在任何pty的主端都有文件描述符的进程。进程本身可以使用ptsname()(TIOCGPTNioctl)根据自身对主端的fd查找从属设备,因此我可以使用: gdb --batch --pid "$the_pid" -ex "print ptsname($the_fd)" 对于lsof建立该映射所返回的每个pid / fd ,但是是否有更直接,可靠和较不麻烦的方式来获取该信息?



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.