Tar также сохраняет имя пользователя и группы в файле. Вы можете убедиться в этом, взглянув на сам tar-файл с помощью таких инструментов, как hexdump
. Причина в том, что одно и то же имя может использоваться в разных системах, но с разными номерами.
Во втором случае исходная система не знает имени пользователя 33, поэтому она не может предоставить имя, только номер. Извлекающий tar использует этот номер, и поскольку система знает этот номер, она отображает имя пользователя для этого номера.
См. также
--numeric-owner
Always use numbers for user/group names.
Хоть и тупо, но можно попробовать:
$ netstat -natp 2> /dev/null | awk 'NR==2 {printf("%s\t%s %s\t%s %s\t%s %s\n",$1,$4,$5,$6,$7,$9,$10)}
NR>=3 {OFS="\t";print($1,$4,$5,$7)}'
РЕДАКТИРОВАТЬ
... и, для завершения, если вам нужно, чтобы столбец порта был отделен от его IP-направления в вашем окончательном выводе, вы можете ввести более мелкое форматирование в awk
, например:
$ netstat -natp 2>/dev/null | awk '
NR==2 {printf("%s\t%8s %s\tPort\t%8s %s\tPort\t%s\n",$1,$4,$5,$6,$7,$9)}
NR>=3 {$8=$7;
idx=match($5,":[^:]+$");
$7=substr($5,idx+1);
$6=substr($5,1,idx-1);
idx=match($4,":[^:]+$");
$5=substr($4,idx+1);
$4=substr($4,1,idx-1);
printf("%s\t%16s\t%s\t%16s\t%s\t%s\n",$1,$4,$5,$6,$7,$8)}
'
Proto Local Address Port Foreign Address Port PID/Program
tcp 0.0.0.0 22 0.0.0.0 * -
tcp 127.0.0.1 631 0.0.0.0 * -
tcp 127.0.0.1 25 0.0.0.0 * -
tcp 0.0.0.0 445 0.0.0.0 * -
tcp 127.0.0.1 12150 0.0.0.0 * -
tcp 0.0.0.0 139 0.0.0.0 * -
tcp 127.0.0.1 37580 127.0.0.1 12150 2962/firefox
tcp 127.0.0.1 12150 127.0.0.1 40684 -
[...]
tcp 127.0.0.1 12150 127.0.0.1 47646 -
tcp 127.0.0.1 12150 127.0.0.1 48982 -
tcp 127.0.0.1 12150 127.0.0.1 1414 -
tcp6 :: 22 :: * -
tcp6 ::1 631 :: * -
tcp6 :: 445 :: * -
tcp6 :: 139 :: * -
Протестировано с помощью Gawk (GNU Awk )v5.1.0, где приведенный выше образец вывода взят из случайного ящика, лежащего рядом со мной.
Отличия от моего предыдущего ответа:
idx
)последнего символа :
в строке. Что бы ни последовало за этим, это порт. Начало строки — это IP. Это относится как к IP-строкам IPv4, так и к IPv6. Это полезно для разделения IP-адреса и номера порта, например, в 127.0.0.1:12345
, а также в ::1:432
. OFS="\t"
, чтобы указать разделитель полей вывода во втором блоке awk
и добавьте целочисленную ширину в соответствующих местах между %
и s
в строках форматирования printf
в оба блока awk
. Не идеальная картинка, но для начала:
perl -ae 'printf("%-6s%16s%7s%16s%7s %7s %s\n", $F[0], $F[3] =~ /(.*):(.*)/,
$F[4] =~ /(.*):(.*)/, $F[6] =~ /(\d*)\/?(.*)/) if $. > 2'
Out (Заголовок добавлен постфактум):
Proto Local-Address Port Remote-Address Port PID Program-name
tcp 192.168.122.100 53 0.0.0.0 * -
tcp 10.0.0.8 53 0.0.0.0 * -
tcp 127.0.0.1 9321 127.0.0.1 45396 -
tcp 10.0.0.8 45454 123.123.123.25 443 484 firefox
tcp 127.0.0.1 36363 127.0.0.1 3639 23018 weechat
tcp 10.0.0.8 23232 123.232.123.25 443 484 firefox
tcp 10.0.0.8 13131 22.123.123.33 6667 23415 irssi
tcp 10.0.0.8 45586 52.42.50.123 443 20538 firefox
tcp6 :: 80 :: * -
tcp6 :: 22 :: * -
tcp6 ::1 631 :: * -
tcp6 :: 25 :: * -
tcp6 :: 443 :: * -
tcp6 127.0.0.1 80 127.0.0.1 46922 -