lsof will show a table with the first column being the command name and each row, an open file. So to only show rows from a specific command, say "java", it would make sense to try
lsof | grep ^java. This works, but I understand lsof has it's own flag to limit the output to only specific commands -
-c. But when i try
lsof -c java the output is totally different. The
-c method only outputs about 10 lines whereas the
grep method outputs several thousand lines.
So my question is -- what else does
lsof -c filter out?
Since the question got a downvote, I will elaborate. The reason for the question is that the grep method
lsof | grep ^java should theoretically be the same output as
lsof -c java. My reasoning is this --
lsof | grep ^java will only show lines that start with the letters "java" and the beginning of each line of lsof output is the name of the command that opened the file.
lsof -c java is supposed to only show files that are opened by the command that starts with the letters "java". The command name is at the beginning of each line of lsof output.
I don't know how to explain it any clearer than that.
To answer the comment from yoonix, this is what the lsof man page says about the -c flag. You should actually read it before suggesting that I read it for an answer:
-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.