Последние 2 строки 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
Строка \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.
Страница man описывает, что для столбца COMMAND (показанного слева в примере вывода) символ пробела обрабатывается как непечатный.
\x20
это пробел.\x20
это пробел " ».
Шестнадцатеричный префикс \x
является одним из 3 способов печати lsof
непечатных символов.
Пробел в таблице ASCII имеет значение 32 в десятичной системе счисления, 20 в шестнадцатеричном и 040 окт.
Как правило, только символы со восьмеричным значением ASCII в пределах 040 и 176 считаются "печатными" для isprint [ isprint ] (см. Таблицу). В десятичном виде включены символы в пределах [32-126].
Интересно отметить, что пробел является печатным символом для isprint
[ isprint, isprint C++ ], даже если он не имеет графического представления [*] и часто используется в качестве разделителя полей.
Следовательно, в человеке мы находим дополнительную строку только для пробела [ 1 ] и в столбце КОМАНДА:
Lsof выводит только печатаемые (объявленные так isprint (3)) 8-битные символы.
Непечатные символы печатаются в одной из трех форм:
- форма C '\[bfrnt]';
- форма управляющего символа `^ '(например,` `^ @' ');
- или шестнадцатеричная ведущая форма '\x' (например, ``\xab '').
Пробел нельзя распечатать в столбце КОМАНДА (`\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 или программой на языке Си.
...
[*] Примечание: существует другая функция с именем isgraph
[ isgraph C++ ], которая проверяет, является ли символ c графическим представлением, но практически отвечает true для всех тех символов, которые могут быть напечатаны (например, isprint), кроме символа пробела.