Você pode usar lsof
selecionando o usuário e pesquisando o processo vim
como em:
sudo lsof -u user -a -c vim | grep swp
Como @fox aponta, o clássico vi
cria um arquivo temporário em /var/tmp
, então a alternativa para vê-lo deve ser (não testada).
sudo lsof -u user -a -c vi | grep '/var/tmp/'
No entanto, como aponta @Fox, você não será capaz de correlacioná-lo com o vi
clássico para o arquivo real, e então você precisaria das ferramentas que eu falo a seguir na resposta (para o clássico vi
, para vim
bastaria o lsof
); geralmente atualmente no Linux você está usando vim
ao invocar vi
.
Veja 15 Exemplos de comandos Linux lsof (Identify Open Files)
Voltando ao exemplo vim
, veremos então o arquivo de swap sendo usado com o nome de file
é aberto como em .file.swp
Se o usuário user1
estiver fazendo vi file
:
$ sudo lsof -c vi -a -u user1 | grep swp
vi 3615 user1 3u REG 8,1 12288 265061 /home/user1/.file.swp
De man lsof
-a causes list selection options to be ANDed
-cc This option selects the listing of files for processes executing the command that begins with the characters of c. Multiple commands may be specified, using multiple -c options. They are joined in a single ORed set before participating in AND option selection.
-u s This option selects the listing of files for the user whose login names or user ID numbers are in the comma-separated set s
Além de lsof
, você também pode usar como root, sysdig
, que é um poderoso framework de depuração:
Isso mostrará todos os arquivos abertos no sistema em tempo real, listando usuário, pid e processo assim que forem abertos:
sudo sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open"
sysdig: system-level exploration and troubleshooting tool
Sysdig instruments your physical and virtual machines at the OS level by installing into the Linux kernel and capturing system calls and other OS events. Then, using sysdig's command line interface, you can filter and decode these events in order to extract useful information and statistics.
Sysdig can be used to inspect live systems in real-time, or to generate trace files that can be analyzed at a later stage.
Como outra ferramenta útil para administradores de sistema, você também pode instalar o snoopy
, que registra todas as invocações de processos chamados para o syslog. Se o usuário invocar na linha de comando vi file
, você o verá nos registros do sistema.
snoopy
ser instalado, ele irá registar todas as invocações do processo através de execve () até que o desinstale (o que pode querer ou não querer que esteja a acontecer o tempo todo).
snoopy: execve() wrapper and logger
snoopy is merely a shared library that is used as a wrapper to the execve() function provided by libc as to log every call to syslog (authpriv). system administrators may find snoopy useful in tasks such as light/heavy system monitoring, tracking other administrator's actions as well as getting a good 'feel' of what's going on in the system (for example Apache running cgi scripts).
Para instalar snoopy
e sysdig
:
$sudo apt-get install snoopy sysdig
Veja também a questão relacionada: Entendendo o que é um binário do Linux está fazendo