标签: open-files

为什么在 Linux 中限制打开文件的数量?

现在,我知道如何:

  • 查找每个进程的打开文件限制: ulimit -n
  • 计算所有进程打开的所有文件: lsof | wc -l
  • 获取允许的最大打开文件数: cat /proc/sys/fs/file-max

我的问题是:为什么在 Linux 中有打开文件的限制?

limit open-files

158
推荐指数
3
解决办法
23万
查看次数

查找并删除打开但已被删除的大文件

如何找到已被删除但仍在应用程序中打开的大文件?即使进程打开了这样的文件,如何删除它?

情况是我们正在运行一个正在以极快的速度填充日志文件的进程。我知道原因,我可以解决它。在那之前,我想在不关闭进程的情况下 rm 或清空日志文件。

简单地执行rm output.log仅删除对文件的引用,但它会继续占用磁盘空间,直到进程终止。更糟糕的是:在rming之后我现在无法找到文件在哪里或有多大!有没有办法找到该文件,并可能清空它,即使它仍然在另一个进程中打开?

我特指基于 Linux 的操作系统,例如 Debian 或 RHEL。

process logs disk-usage open-files files

142
推荐指数
2
解决办法
29万
查看次数

如何找出哪些进程阻止卸载设备?

有时候,我想卸载USB设备使用umount /run/media/theDrive,但我得到一个drive is busy错误。

如何找出哪些进程或程序正在访问设备?

process unmounting open-files

106
推荐指数
5
解决办法
15万
查看次数

ulimit:硬限制和软限制之间的区别

ulimit 中的硬限制和软限制有什么区别?

对于打开文件的数量,我的软限制为 1024,硬限制为 10240。可以运行打开超过 1024 个文件的程序。什么是软限制?

open-files ulimit

104
推荐指数
1
解决办法
11万
查看次数

谁有这个unix socketpair的另一端?

我想确定哪个进程具有 UNIX 套接字的另一端。

具体来说,我问的是用 来创建的socketpair(),尽管任何 UNIX 套接字的问题都是一样的。

我有一个程序parent可以创建一个socketpair(AF_UNIX, SOCK_STREAM, 0, fds), 和fork()s。父进程关闭fds[1]并保持fds[0]通信。孩子反其道而行之,close(fds[0]); s=fds[1]。然后孩子exec()的另一个程序,child1。两者可以通过这个 socketpair 来回通信。

现在,假设我知道parent是谁,但我想弄清楚是谁child1。我该怎么做呢?

有几种工具可供我使用,但没有一个可以告诉我套接字的另一端是哪个进程。我试过了:

  • lsof -c progname
  • lsof -c parent -c child1
  • ls -l /proc/$(pidof server)/fd
  • cat /proc/net/unix

基本上,我可以看到两个套接字以及关于它们的所有内容,但无法判断它们是否已连接。我试图确定父进程中的哪个 FD 正在与哪个子进程通信。

process lsof open-files socket

68
推荐指数
5
解决办法
4万
查看次数

如何实时监控进程打开的文件?

我知道我可以查看使用过程中打开文件lsof 的时间在那一刻,我的Linux机器上。但是,进程可以如此快速地打开、更改和关闭文件,以至于我在使用标准 shell 脚本(例如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
Run Code Online (Sandbox Code Playgroud)

这是否可以使用strace某些标志来看不到每个系统调用?

process lsof open-files audit

50
推荐指数
1
解决办法
4万
查看次数

如何在我当前的 bash 会话中列出打开的文件描述符(以及它们引用的文件)

我正在交互式 bash 会话中运行。我已经使用 exec 创建了一些文件描述符,我想列出我的 bash 会话的当前状态。

有没有办法列出当前打开的文件描述符?

linux bash file-descriptors open-files

50
推荐指数
4
解决办法
12万
查看次数

为什么进程替换会产生一个名为 /dev/fd/63 的文件,它是一个管道?

我试图在这个特定示例的上下文中理解命名管道。

我输入<(ls -l)我的终端并得到输出,bash: /dev/fd/63: Permission denied.

如果我输入cat <(ls -l),我可以看到目录内容。如果我更换catecho,我觉得我得到的终端名称(或者是什么呢?)。

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]
Run Code Online (Sandbox Code Playgroud)

但是,如果我给出,ls -l <()它会列出目录内容。

在命名管道的情况下会发生什么?

process pipe open-files process-substitution

49
推荐指数
1
解决办法
3万
查看次数

如何告诉脚本等待进程开始接受端口上的请求?

我需要一个命令来等待进程开始接受特定端口上的请求。

linux中有没有这样做的东西?

while (checkAlive -host localhost -port 13000 == false)
  do some waiting

...
Run Code Online (Sandbox Code Playgroud)

shell networking process open-files

39
推荐指数
3
解决办法
5万
查看次数

/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 Mar 24 00:05 5 -> pipe:[3142927]
l-wx------ 1 user user 64 Mar 24 00:05 6 -> pipe:[3142927]
lrwx------ 1 user user 64 Mar 24 00:05 7 …
Run Code Online (Sandbox Code Playgroud)

linux pipe open-files proc socket

39
推荐指数
2
解决办法
4万
查看次数