Фон
Я использую сервер SSH, и у меня есть этот пользователь, которого я хочу удалить. Я не могу удалить этого пользователя, потому что в настоящее время он запускает несколько процессов, которые мне нужно убить в первую очередь.
Это конвейер, который я сейчас использую, чтобы узнать все идентификаторы процессов пользователя, которого я сейчас использую:
ps -u user | awk '{print $1;}'
Вывод выглядит так:
PID
2121
2122
2124
2125
2369
2370
Я хочу передать это, чтобы kill -9
убить все процессы, чтобы я мог удалить этого глупого пользователя следующим образом:
ps -u user | awk '{print $1;}' | sudo xargs kill -9
Но это не работает из-за PID
заголовка:
kill: failed to parse argument: 'PID'
Вопрос
Я думаю, что должна быть простая команда Unix, чтобы удалить первую строку ввода.
Я знаю, что могу использовать tail
для этого, но я не хочу подсчитывать, сколько строк содержит вход, чтобы точно определить, сколько я хочу отобразить.
Я ищу что-то вроде head
или tail
но перевернутый (вместо отображения только первой / последней части потока, он отображает все, кроме начала / конца потока).
Заметка
Мне удалось решить эту проблему, просто добавив | grep [[:digit:]]
после моей awk
команды, но я все еще ищу способ удалить первую строку файла, так как я думаю, что было бы весьма полезно в других сценариях.
NR
напримерawk 'NR>1 {print $1;}'
. Еще лучше - используйтеpgrep -u
илиpkill -u
awk
команда) работает.Ответы:
ПРИМЕЧАНИЕ: если ваша система уже имеет
pgrep
/pkill
тогда вы заново изобретаете колесо здесь. Если в вашей системе нет этих утилит, то вы должны иметь возможность отформатировать вывод,ps
чтобы получить список необремененных PID напрямую, напримерps -u user -opid=
Если вы уже используете
awk
, нет необходимости проходить через дополнительный процесс, чтобы удалить первую строку (запись): просто добавьте условие к номеру записиNR
Поскольку вы упоминаете,
head
иtail
формула, которую вы, вероятно, хотите в этом случаеtail -n +2
источник
tail -n +2
было именно то, что я искал!ps
не печатать заголовок-opid=
, так как это предотвращает появление вывода. Если будущий пользователь когда-либо решит отсортироватьps
вывод в середине конвейера, допущение awk / sed / tail может нарушиться.Когда я писал этот вопрос, я нашел решение, используя
sed
.Удалить одну строку в начале ввода
Для удаления одной строки используйте
sed 1d
.Удалить несколько строк в начале ввода
Для удаления
N
количества строк используйтеsed 1,Nd
Для удаления первых 5 строк используйте
sed 1,5d
Для удаления первых 10 строк используйте
sed 1,10d
Для удаления первых 25 строк используйте
sed 1,25d
Трубопровод
Таким образом, конвейер становится в сценарии становится:
источник