vi中如何查看用户正在编辑的文件

LIN*_*YUS 3 linux vi privacy w

如果我执行 a w,我可以看到用户正在 vi 中编辑某个文件。

但是在不同的目录中有几个同名的文件。

我如何查看哪些文件是用户正在编辑的文件?

Rui*_*iro 9

您可以使用lsof选择用户并搜索vim流程,如下所示:

sudo lsof -u user -a -c vim | grep swp
Run Code Online (Sandbox Code Playgroud)

正如@Fox 指出的那样,经典vi创建了一个临时文件,/var/tmp因此应该(未测试)查看它的替代方法。

sudo lsof -u user -a -c vi | grep '/var/tmp/'
Run Code Online (Sandbox Code Playgroud)

但是,正如@Fox 指出的那样,您将无法将它与经典vi文件与实际文件相关联,然后您将需要我接下来在答案中讨论的工具(对于经典文件vi,因为vim它就足够了lsof);现在通常在 Linux 中,您vim在调用vi.

查看15 个 Linux lsof 命令示例(识别打开的文件)

返回到vim示例,我们将看到使用的交换文件命名file为如下所示.file.swp

如果用户user1正在做vi file

$ sudo lsof -c vi -a -u user1 | grep swp
vi      3615  user1  3u   REG    8,1    12288 265061 /home/user1/.file.swp
Run Code Online (Sandbox Code Playgroud)

man lsof

-a 导致列表选择选项被 AND 运算

-cc 此选项为执行以 c 字符开头的命令的进程选择文件列表。可以使用多个 -c 选项指定多个命令。在参与 AND 选项选择之前,它们被加入到一个 ORed 集合中。

-us 此选项为登录名或用户 ID 号在逗号分隔集 s 中的用户选择文件列表

除了lsof,您还可以以 root 身份使用sysdig,这是一个强大的调试框架:

这将实时显示系统中打开的所有文件,并在打开后立即列出用户、pid 和进程:

sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open"
Run Code Online (Sandbox Code Playgroud)

sysdig:系统级探索和故障排除工具

Sysdig 通过安装到 Linux 内核并捕获系统调用和其他操作系统事件,在操作系统级别检测您的物理机和虚拟机。然后,使用 sysdig 的命令行界面,您可以过滤和解码这些事件以提取有用的信息和统计信息。

Sysdig 可用于实时检查实时系统,或生成可在稍后阶段进行分析的跟踪文件。

作为系统管理员的其他有用工具,您还可以安装snoopy,它会记录所有调用 syslog 的进程调用。如果用户在命令行中调用vi file,您将在系统日志中看到它。

请注意,snoopy安装后,它将通过 execve() 记录所有进程调用,直到您将其卸载(您可能希望或不想一直发生)。

snoopy:execve() 包装器和记录器

snoopy 只是一个共享库,用作 libc 提供的 execve() 函数的包装器,用于记录对 syslog (authpriv) 的每次调用。系统管理员可能会发现 snoopy 在诸如轻/重系统监控、跟踪其他管理员的操作以及对系统中发生的事情(例如 Apache 运行 cgi 脚本)有良好的“感觉”等任务中很有用。

安装snoopysysdig

$sudo apt-get install snoopy sysdig
Run Code Online (Sandbox Code Playgroud)

另请参阅相关问题:了解 Linux 二进制文件在做什么