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
最初の列の\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列(出力例の左側に表示)の場合、スペース文字は印刷不可として扱われると説明されています。
\x20
はスペースです。\x20
はスペース ""です。
16進プレフィックス\x
は、lsof
が印刷不可能な文字を印刷する3つの方法の1つです。
ASCIIテーブルのスペースは10進法で値32、20inhexおよび040oct。
原則として、8進数のASCII値が040および176以内の文字のみがisprintによって "印刷可能"と見なされます。 [ isprint ] (表を参照)。 [32-126]内の文字は10進数で含まれています。
スペースはisprint
の印刷可能な文字であることに注意してください。[ isprint 、 isprint 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.
この出力に悩まされている場合は、lsof
manおよび-F
オプション仕様の 他のプログラムの出力 セクションを読むことを検討してください。
-Fオプションが指定されている場合、lsofは、別のプログラム(awkまたはPerlスクリプト、またはCプログラムなど)による処理に適した出力を生成します。
.。
[*]注:isgraph
という名前の別の関数が存在します[ isgraph C++ ] これは、cがグラフィック表現の文字であるかどうかをチェックしますが、スペース文字を除いて(isprintのように)印刷できるすべての文字に対して実際にtrueと答えます。