标签: lsof

linux 上用户打开的文件数和 linux 系统范围内打开的文件数是多少?

对不起,这个问题有几个层次,但都处理打开文件的数量。

我在我正在开发的应用程序的应用程序日志中收到“打开的文件太多”消息。有人建议我:

  1. 查找当前正在使用的打开文件数,系统范围和每个用户
  2. 找出系统和用户打开文件的限制。

我跑了ulimit -n,它返回 1024。我还查看了 /etc/limits.conf,该文件中没有任何特殊内容。/etc/sysctl.conf 也没有修改。我将在下面列出文件的内容。我也跑了lsof | wc -l,它返回了 5000+ 行(如果我使用正确的话)。

所以,我的主要问题是:

  1. 如何找到每个用户允许打开的文件数?软限制是在 /etc/limits.conf 中找到/定义的 nofile 设置吗?因为我没有接触 /etc/limits.conf,所以默认值是多少?
  2. 如何找到系统范围内允许的打开文件数?它是limits.conf 中的硬限制吗?如果limits.conf 没有修改,默认数字是多少?
  3. ulimit 为打开的文件返回的数字是多少?它说 1024 但当我运行 lsof 并计算行数时,它超过 5000+,所以我没有点击。我是否应该运行其他 cmds 或查看文件以获得这些限制?在此先感谢您的帮助。

limit.conf 的内容

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard …
Run Code Online (Sandbox Code Playgroud)

unix linux lsof

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

lsof -i输出的含义

我已经运行了命令

 sudo lsof -i tcp:46265
Run Code Online (Sandbox Code Playgroud)

产量

COMMAND   PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
mysqld   4580 mysql   30u  IPv4 70185524      0t0  TCP localhost:mysql->localhost:46265 (ESTABLISHED)
java    53105  root   54u  IPv6 70185523      0t0  TCP localhost:46265->localhost:mysql (ESTABLISHED)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下localhost:mysql-> localhost:46265localhost:46265-> localhost:mysql 是什么意思?

lsof

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

替代lsof - 检测锁定文件

使用fcntl(非阻塞)或某种自定义方式锁定文件.所以我正在使用lsof并检查进程的pid是否在那里.如果lsof返回空白而不是没有使用它.

但是我的脚本中的lsof需要200ms.

在Windows上,当我尝试测试文件是否被锁定时,我只是打开文件,如果错误锁定,则需要5ms.是否有任何替代lsof进行快速测试,看看是否有东西被持有文件?

lsof

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

xargs 不与 lsof 一起使用

当我运行时pgrep vim | xargs echo,它打印93868 91234

当我运行时lsof -p 91234,它打印:

COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
vim     91234 rose  cwd    DIR    1,2      1326 1186863 /Users/rose/spotapi/spotapi/models
vim     91234 rose  txt    REG    1,2   1629296   12231 /usr/bin/vim
vim     91234 rose  txt    REG    1,2   2704416  294199 /System/Library/Frameworks/Python.framework/Versions/2.7/Python
Run Code Online (Sandbox Code Playgroud)

那么为什么呢

pgrep vim | xargs lsof -p 
Run Code Online (Sandbox Code Playgroud)

打印

lsof: status error on 91234: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在 Mac 操作系统上运行。

macos lsof xargs

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

如何检查Linux中是否打开了文件?

问题是,我想跟踪用户是否尝试在共享帐户上打开文件.我正在寻找任何记录/技术,帮助我知道在运行时是否打开了相关文件.

我想创建一个脚本来监视文件是否打开,如果是,我希望它向特定的电子邮件地址发送警报.我正在考虑的文件是一个常规文件.

我试过lsof | grep filename用来检查文件是否在gedit中打开,但命令没有返回任何内容.

实际上,我正在尝试这个宠物项目,因此问题.

linux file gedit lsof

3
推荐指数
3
解决办法
8408
查看次数

仅当Linux中的文件未被其他进程使用时才在Linux中移动文件

使用lsof命令,我可以确定某个进程是否正在使用某个文件,但是我需要自动检查文件以供使用,并且仅在未使用时才移动它.这些文件正由我无法控制的各种其他程序使用,所以我不能使用咨询锁.目的是阻止其他进程修改该文件,因此只需在进程打开时移动该文件就不行了.有解决方案吗

更新:我认为我认为适合我的目的的解决方案.最终目标是在其他程序完成修改后将这些文件处理为最终状态.如果我将文件移动到另一个目录,我可以使用lsof通过其旧路径检查它是否仍在使用中; 如果是这样,我只是稍后再检查,直到它不再使用,然后处理文件.通过将文件移动到另一个目录,它会隐藏用户和程序中的文件.我不希望用户和程序在旧目录中看到该文件,因为这使他们有机会在我使用lsof和处理文件之间打开文件,这意味着我将以修改状态处理文件.

linux file atomic lsof

2
推荐指数
1
解决办法
5062
查看次数

为什么opend打开一个端口,什么在听?

我的路由器指示我运行的应用程序已打开一个TCP端口(6183)(我不知道)

使用lsof(在这里回答)lsof -iTCP:6183 -sTCP:LISTEN,我发现launchd是罪魁祸首.

是否有可能找出launchd的'脚本'中的哪一个负责?

port lsof launchd listener

2
推荐指数
1
解决办法
1876
查看次数

在Mac终端中使用lsof和awk的奇怪行为?

我想在其中找到lsof"Google"中的所有行,所以我尝试了以下内容:

lsof |  awk '/.*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv
Run Code Online (Sandbox Code Playgroud)

这会正确地产生一个以"google"开头的行的输出.

但是,然后我尝试这个,而csv什么都不包含:

lsof |  awk '/\s*google.*/ { print $1 "," $2 "," $3} ' > new_file.csv
Run Code Online (Sandbox Code Playgroud)

但是,我认为这\s*意味着任意数量的空间.这种行为有什么理由吗?谢谢.

regex macos awk lsof

2
推荐指数
1
解决办法
92
查看次数

将 lsof 输出格式化为可解析结构

我正在尝试以更可解析的方式格式化 lsof 输出。

背景:由于并非所有打开句柄的进程都有线程 ID,因此不一定确定由空格(空白 AFAIS)分隔的字段数量。

作为输出字段,我需要 PID、UID/用户名和路径(如果它是一个文件 - 我正在查找路径,因为 +D 非常慢)。

作为字段分隔符,我从 NL 切换到 NUL(并用“|”替换 null 以提高可读性)

所以我尝试了

> /usr/sbin/lsof -F pnuf0 | sed 's/\x0/|/g' | grep "cvmfs" | tail -n 2
 ftxt|n/usr/bin/cvmfs2|
 fmem|n/usr/lib64/libcvmfs_fuse.so.2.3.5|
Run Code Online (Sandbox Code Playgroud)

它只产生文件描述符和名称(不是按照给定的顺序?)而不是 PID 或 UID?

作为旁注,单独选择 PID 和 UID 字段时,它们显然已经是“空”

> /usr/sbin/lsof -F u0 | sed 's/\x0/|/g' | grep "cvmfs" | tail -n 2
> /usr/sbin/lsof -F p0 | sed 's/\x0/|/g' | grep "cvmfs" | tail -n 2
> /usr/sbin/lsof -F n0 | sed 's/\x0/|/g' | …
Run Code Online (Sandbox Code Playgroud)

formatting lsof

2
推荐指数
1
解决办法
4690
查看次数

使用`kill`命令杀死进程后不会死亡

我正在尝试运行rails server以启动本地服务器但出现此错误

...
WARN  TCPServer Error: Address already in use - bind(2)
Exiting
...
Run Code Online (Sandbox Code Playgroud)

所以我去寻找占据港口并杀死它的进程.服务器仍然无法启动.事实证明,lsof仍然显示了这个过程(即使它已被杀死):

$ lsof -P | grep ':3000' 
ruby      52944 user    7u    IPv4 0xffffff800bdafbd8       0t0      TCP *:3000 (LISTEN)
$ kill 52944    <<<<<<< pid 52944 should have died here!
$ lsof -P | grep ':3000' 
ruby      52944 user    7u    IPv4 0xffffff800bdafbd8       0t0      TCP *:3000 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

知道如何真正杀死这个过程吗?

(这是打开的OSX)

macos ruby-on-rails process lsof

1
推荐指数
1
解决办法
403
查看次数

在linux中更改lsof中的输出

我想用lsof获得不同的结果,我的意思是只想显示一些列,是否可能?

COMMAND     PID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init          1       root  cwd       DIR                8,1      4096          2 /
init          1       root  rtd       DIR                8,1      4096          2 /
init          1       root  txt       REG                8,1     36992     139325 /sbin/init
init          1       root  mem       REG                8,1     14696     190970 /lib/libdl-2.11.3.so
init          1       root  mem       REG                8,1   1437064     190958 /lib/libc-2.11.3.so
Run Code Online (Sandbox Code Playgroud)

linux lsof

1
推荐指数
1
解决办法
1143
查看次数

Unix:如何根据 lsof 命令杀死进程列表(PID)?

我想杀死与 tcsh shell 中的进程相关的 PID 列表。我运行了以下命令:

> losf <file> | awk '{print($2)"'
Run Code Online (Sandbox Code Playgroud)

该命令将显示 PID 列表。

PID1

PID2

...

然后我运行以下命令来杀死这些 PID。

> kill -9 `lsof <file> | awk'{print($2)}'`
Run Code Online (Sandbox Code Playgroud)

当执行该kill命令时,终端只是以某种方式挂起,而没有杀死任何 PID。然后我不得不恢复一一杀死那些 PID。

因此,有没有一种方法可以实现我想要做的事情,如上所示?谢谢。

unix kill lsof

1
推荐指数
1
解决办法
4273
查看次数

标签 统计

lsof ×12

linux ×4

macos ×3

file ×2

unix ×2

atomic ×1

awk ×1

formatting ×1

gedit ×1

kill ×1

launchd ×1

listener ×1

port ×1

process ×1

regex ×1

ruby-on-rails ×1

xargs ×1