lsof mostrará uma tabela com a primeira coluna sendo o nome do comando e cada linha, um arquivo aberto. Portanto, para mostrar apenas linhas de um comando específico, diga "java", faria sentido tentar lsof | grep ^java
. Isso funciona, mas eu entendo que o lsof tem seu próprio sinalizador para limitar a saída somente a comandos específicos - -c
. Mas quando eu tento lsof -c java
, a saída é totalmente diferente. O método -c
produz apenas cerca de 10 linhas, enquanto o método grep
gera vários milhares de linhas.
Então, minha pergunta é: o que mais o lsof -c
filtrou?
Como a pergunta tem um voto negativo, vou elaborar. A razão para a pergunta é que o método grep lsof | grep ^java
deveria, teoricamente, ser a mesma saída que lsof -c java
. Meu raciocínio é esse -
lsof | grep ^java
mostrará apenas linhas que começam com as letras "java" e o início de cada linha de lsof output é o nome do comando que abriu o arquivo.
lsof -c java
deve mostrar apenas arquivos que são abertos pelo comando que começa com as letras "java". O nome do comando está no início de cada linha de saída lsof.
Eu não sei explicar nada mais claro que isso.
Para responder ao comentário do yoonix, é isso que o lsof man page diz sobre o sinalizador -c. Você deve realmente lê-lo antes de sugerir que eu o leia para uma resposta:
-c c 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.
If c begins with a '^', then the following characters specify a command name whose processes are to be ignored (excluded.)
If c begins and ends with a slash ('/'), the characters between the slashes are interpreted as a regular expression. Shell
meta-characters in the regular expression must be quoted to prevent their interpretation by the shell. The closing slash may be
followed by these modifiers:
b the regular expression is a basic one.
i ignore the case of letters.
x the regular expression is an extended one
(default).
See the lsof FAQ (The FAQ section gives its location.) for more information on basic and extended regular expressions.
The simple command specification is tested first. If that test fails, the command regular expression is applied. If the simple
command test succeeds, the command regular expression test isn't made. This may result in ''no command found for regex:'' mes‐
sages when lsof's -V option is specified.