Quanto ao porquê, etc.
ss
, parte da coleção de iproute2 no kernel do Linux, usa uma solicitação ioctl () para obter a largura atual do terminal.
No entanto; a largura inteira é usada para os campos «outros» e o campo do processo é espremido na próxima linha.
Você pode ver isso, por exemplo, (quando tiver um limite com terminal on):
script ss.txt
ss -nlup4
exit
Então amplia sua janela de terminal e cat ss.txt
.
O motivo por que
ss -nulp4 | cat -A
«funciona» é porque o utilitário reconhece se escreve para um tty ou não :
if (isatty(STDOUT_FILENO)) {
}
Como você pode ver a partir da linha anterior no código-fonte, a largura padrão é definida como 80. Assim, se o seu terminal estiver em, digamos, 130 colunas, você faz:
ss -nulp4 | cat
ele reconhece que a saída não é para um tty (mas para um pipe) e os campos outros são amontoados em 80 colunas, enquanto o campo de processo é gravado após estes 80 colunas. Mas como o seu terminal é maior então 80 colunas e tem espaço para a entrada do processo, ele é exibido em uma linha.
O mesmo vale para por exemplo:
ss -nulp4 > ss.txt
Quanto a como «alcançar minha formatação preferida» uma maneira provavelmente inadequada é fazer algo na direção de (dependendo do terminal):
stty cols 100
ss -nlup4