lsof -i 中的 Web_x20Co 是什么

lsof -i 中的 Web_x20Co 是什么

最后两行lsof-i如下所示。这些是什么?我使用 OpenSuse LEAP 42.2。

Web\x20Co 7066 user1   38u  IPv4  76006      0t0  UDP *:43756 
Web\x20Co 7066 user1   39u  IPv6  76008      0t0  UDP *:46834

答案1

第一列中的字符串\x20是 ASCII 字符的十六进制值,在本例中为空格字符。lsof 使用的输出格式在 lsof 手册页中有描述。

Lsof only outputs printable (declared so by isprint(3)) 8 bit characters.  Non-printable characters are printed in one of three forms: the  C  ``\[bfrnt]''  form;  the
   control  character `^' form (e.g., ``^@''); or hexadecimal leading ``\x'' form (e.g., ``\xab'').  Space is non-printable in the COMMAND column (``\x20'') and printable
   elsewhere.

手册页描述了 COMMAND 列(显示在示例输出的左侧),空格字符被视为不可打印。

答案2

\x20一个空格。

\x20空格“ ”。
十六进制前缀是打印的\x三种方式之一lsof不可打印字符。ASCII
表中的空格在十进制数字系统中的值为 32,20十六进制和 040十月

规则是,仅考虑八进制 ASCII 值在 040 至 176 之间的字符“可打印”作者 isprint [印刷](见表)。十进制中包括[32-126]内的字符。

值得注意的是,空格是isprint[的可打印字符印刷打印 C++],即使它没有图形表示[*]并且它经常用作字段分隔符。

因此,在男人身上,我们发现了一条补充线,专门用于空格[1]并在 COMMAND 列中:

Lsof 仅输出可打印的内容(由打印(3))8位 人物.
不可打印字符以以下三种形式之一打印:

  • C '\[bfrnt]' 形式;
  • 控制字符 `^' 形式(例如 ``^@'');
  • 或者十六进制 领导'\X'形式(例如“\xab”)。

空格在 COMMAND 列(“\x20”)中不可打印,但在其他地方可打印。

(缩进和粗体是我的)

为什么空格是不可打印字符?

有趣的是,了解为什么它被认为“不可打印”
这似乎是出于安全原因,正如我们从常见问题解答中看到的那样[2]

14.5.1 为什么在命令名称中空格被视为不可打印字符?

Space is considered an unprintable character in command
names because it is sometimes possible to hide the full
command name from scripts that parse ps(1) output by
embedding a space in the name.

多说几句

如果你对此输出感到烦恼,你可以考虑阅读 其他程序的输出手册部分lsof-F选项规范:

当指定 -F 选项时,lsof 会生成适合其他程序处理的输出 - 例如 awk 或 Perl 脚本或 C 程序
。...


[*]笔记:存在另一个名为isgraph[的函数是图 C++]检查 c 是否是一个具有图形表示的字符,但实际上对于所有可以打印(如通过 isprint)的字符(空格字符除外),答案都是真的。

相关内容