web-dev-qa-db-ja.com

lsof-iのWeb \ x20Coとは

lsof -iの最後の2行を以下に示します。それらは何ですか? OpenSuse LEAP42.2を使用しています。

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

最初の列の\x20文字列は、ASCII文字(この場合はスペース文字)の16進値です。lsofで使用される出力フォーマットについては、lsofのmanページで説明されています。

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
Chris Hill

\x20はスペースです。

\x20はスペース ""です。
16進プレフィックス\xは、lsof印刷不可能な文字を印刷する3つの方法の1つです。
ASCIIテーブルのスペースは10進法で値32、20inhexおよび040oct

原則として、8進数のASCII値が040および176以内の文字のみがisprintによって "印刷可能"と見なされます。 [ isprint ] (表を参照)。 [32-126]内の文字は10進数で含まれています。

スペースはisprintの印刷可能な文字であることに注意してください。[ isprintisprint C++ ]、グラフィック表現がない場合でも[*] また、フィールド区切り文字としてよく使用されます。

したがって、男性には、スペースのためだけの補足行があります [ 1 ] およびCOMMAND列:

Lsofはprintableのみを出力します( isprint(3) )8ビット文字で宣言されています
印刷できない文字は、次の3つの形式のいずれかで印刷されます。

  • c '\ [bfrnt]'形式;
  • 制御文字の `^ '形式(例:` `^ @' ');
  • またはhexadecimalleading '\ x'form(eg、 ``\xab '')。

スペースはCOMMAND列( ``\x20 '')に印刷できず、他の場所に印刷できます。

(インデントと太字は私のものです)

スペースが印刷できない文字であるのはなぜですか?

ここで興味深いのは、なぜそれが「印刷不可」と見なされるのかを知ることです。
FAQから読むことができるように、セキュリティ上の理由のようです[ 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.

もっといくつかの言葉

この出力に悩まされている場合は、lsofmanおよび-Fオプション仕様の 他のプログラムの出力 セクションを読むことを検討してください。

-Fオプションが指定されている場合、lsofは、別のプログラム(awkまたはPerlスクリプト、またはCプログラムなど)による処理に適した出力を生成します。
.。


[*]注:isgraphという名前の別の関数が存在します[ isgraph C++ ] これは、cがグラフィック表現の文字であるかどうかをチェックしますが、スペース文字を除いて(isprintのように)印刷できるすべての文字に対して実際にtrueと答えます。

1
Hastur