fundo
Estou executando um servidor SSH e tenho esse usuário que desejo excluir. Não consigo excluir este usuário porque ele está atualmente executando alguns processos que eu preciso eliminar primeiro.
Este é o pipeline que estou usando atualmente para descobrir todos os IDs de processo do usuário que estou usando:
ps -u user | awk '{print $1;}'
A saída é assim:
PID
2121
2122
2124
2125
2369
2370
Quero canalizar isso para kill -9
matar todos os processos, para que eu possa excluir esse usuário estúpido como este:
ps -u user | awk '{print $1;}' | sudo xargs kill -9
Mas isso não funciona por causa do PID
cabeçalho:
kill: failed to parse argument: 'PID'
A questão
Estou pensando que deve haver um simples comando Unix para remover a primeira linha de entrada.
Estou ciente de que posso usar tail
isso, mas não quero contar quantas linhas a entrada contém para descobrir exatamente quantas eu quero exibir.
Estou procurando algo parecido head
ou tail
invertido (em vez de exibir apenas a primeira / última parte do fluxo, ele exibe tudo, exceto o início / fim do fluxo).
Nota
Consegui resolver esse problema que simplesmente adicionei | grep [[:digit:]]
após o meu awk
comando, mas ainda estou procurando uma maneira de excluir a primeira linha de um arquivo, pois acho que seria bastante útil em outros cenários.
NR
por exemploawk 'NR>1 {print $1;}'
. Melhor ainda - usepgrep -u
orpkill -u
awk
comando) funciona.Respostas:
NOTA: se seu sistema já possui
pgrep
/pkill
, você está reinventando a roda aqui. Se o seu sistema não tiver esses utilitários, você poderá formatar a saídaps
para obter a lista PID não onerada diretamente, por exemplops -u user -opid=
Se você já estiver usando
awk
, não há necessidade de passar por um processo adicional para remover a primeira linha (registro): basta adicionar uma condição ao número do registroNR
Desde que você mencionou
head
etail
, a fórmula que você provavelmente deseja neste caso étail -n +2
fonte
tail -n +2
era exatamente o que eu estava procurando!ps
não imprimir um cabeçalho-opid=
, pois isso impede que a saída apareça. Se um usuário futuro decidir classificar aps
saída no meio do pipeline, a suposição awk / sed / tail poderá quebrar.Enquanto escrevia essa pergunta, descobri uma solução usando
sed
.Excluir uma linha no início da entrada
Para excluir uma linha, use
sed 1d
.Excluir várias linhas no início da entrada
Para excluir o
N
número de linhas, usesed 1,Nd
Para excluir as 5 primeiras linhas, use
sed 1,5d
Para excluir as 10 primeiras linhas, use
sed 1,10d
Para excluir as primeiras 25 linhas, use
sed 1,25d
O gasoduto
Portanto, o pipeline torna-se no cenário:
fonte