Antecedentes
Estoy ejecutando un servidor SSH y tengo este usuario que quiero eliminar. No puedo eliminar a este usuario porque actualmente está ejecutando algunos procesos que primero debo eliminar.
Este es el canal que estoy usando actualmente para encontrar todos los identificadores de proceso del usuario que estoy usando actualmente:
ps -u user | awk '{print $1;}'
El resultado se ve así:
PID
2121
2122
2124
2125
2369
2370
Quiero canalizar esto para kill -9
matar todos los procesos para poder eliminar a este estúpido usuario como este:
ps -u user | awk '{print $1;}' | sudo xargs kill -9
Pero esto no funciona debido al PID
encabezado:
kill: failed to parse argument: 'PID'
La pregunta
Estoy pensando que tiene que haber un simple comando de Unix para eliminar la primera línea de entrada.
Soy consciente de que puedo usar tail
esto, pero no quiero contar cuántas líneas contiene la entrada para determinar exactamente cuántas quiero mostrar.
Estoy buscando algo como head
o tail
invertido (en lugar de mostrar solo la primera / última parte de la transmisión, muestra todo menos el inicio / final de la transmisión).
Nota
Logré resolver este problema que tenía simplemente agregando | grep [[:digit:]]
después de mi awk
comando, pero todavía estoy buscando una forma de eliminar la primera línea de un archivo, ya que creo que sería bastante útil en otros escenarios.
NR
por ejemploawk 'NR>1 {print $1;}'
. Mejor aún: usepgrep -u
opkill -u
awk
comando).Respuestas:
NOTA: si su sistema ya tiene
pgrep
/pkill
entonces está reinventando la rueda aquí. Si su sistema no tiene estas utilidades, entonces debería poder formatear la salidaps
para obtener la lista PID no gravada directamente, por ejemplops -u user -opid=
Si ya está usando
awk
, no es necesario pasar por un proceso adicional para eliminar la primera línea (registro): simplemente agregue una condición en el número de registroNR
Como mencionas
head
ytail
, la fórmula que probablemente quieras en este caso estail -n +2
fuente
tail -n +2
era exactamente lo que estaba buscando!ps
no se imprima un encabezado-opid=
, ya que eso evita que la salida aparezca nunca. Si un usuario futuro decide ordenar laps
salida en el medio de la tubería, la suposición awk / sed / tail puede romperse.Mientras escribía esta pregunta, descubrí una solución usando
sed
.Eliminar una línea al comienzo de la entrada
Para eliminar una línea, use
sed 1d
.Eliminar varias líneas al comienzo de la entrada
Para eliminar el
N
número de líneas, usesed 1,Nd
Para eliminar las primeras 5 líneas, use
sed 1,5d
Para eliminar las primeras 10 líneas, use
sed 1,10d
Para eliminar las primeras 25 líneas, use
sed 1,25d
La tubería
Entonces la tubería se convierte en el escenario se convierte en:
fuente