Girişteki ilk N satır sayısını kaldırma komutu


11

Arka fon

Bir SSH sunucusu çalıştırıyorum ve silmek istediğim bu kullanıcıya sahibim. Şu anda ilk önce öldürmem gereken birkaç işlem yürüttüğü için bu kullanıcıyı silemiyorum.

Bu şu anda kullanmakta olduğum kullanıcının tüm işlem kimlikleri bulmak için kullandığım boru hattı:

ps -u user | awk '{print $1;}'

Çıktı şöyle görünür:

PID
2121
2122
2124
2125
2369
2370

kill -9Bu gibi aptal kullanıcı silebilir böylece tüm işlemleri öldürmek için bu boru istiyorum :

ps -u user | awk '{print $1;}' | sudo xargs kill -9

Ancak bu PIDbaşlık nedeniyle çalışmaz :

kill: failed to parse argument: 'PID'

Soru

İlk girdi satırını kaldırmak için basit bir Unix komutu olması gerektiğini düşünüyorum.

Bunun tailiçin kullanabileceğimin farkındayım ancak tam olarak kaç tane görüntülemek istediğimi anlamak için girdinin kaç satır içerdiğini saymak istemiyorum.

headVeya tailtersine çevrilmiş bir şey arıyorum ( yalnızca akışın ilk / son bölümünü görüntülemek yerine , akışın başlangıcı / bitişi hariç her şeyi görüntüler ).

Not

Ben sadece | grep [[:digit:]]benim awkkomut sonra ekleyerek vardı bu sorunu çözmek başardı ama hala diğer senaryolarda oldukça yararlı olacağını düşünüyorum gibi bir dosyanın ilk satırını silmek için bir yol arıyorum.


Zaten awk kullandığınız için, başlık kaydını (satırı) NRörn awk 'NR>1 {print $1;}'. Better Betterpgrep -upkill -u
Use

@steeldriver İlginç! Bir cevap verin ve ( awkkomut) nasıl çalıştığını açıklayın .
wefwefa3

Yanıtlar:


14

NOT: sisteminizde zaten varsa pgrep/ pkillburada tekerleği yeniden icat ediyorsunuz. Sisteminizde bu yardımcı programlar yoksa, psdoğrudan numaralandırılmamış PID listesini almak için çıktısını biçimlendirebilmeniz gerekir;ps -u user -opid=

Zaten kullanıyorsanız awk, ilk satırı (kaydı) kaldırmak için ek bir işlemden geçmeye gerek yoktur: sadece kayıt numarasına bir koşul ekleyinNR

ps -u user | awk 'NR>1{print $1;}'

Bahsettiğiniz headve tailmuhtemelen bu durumda istediğiniz formültail -n +2


4
tail -n +2tam olarak aradığım şeydi!
wefwefa3

psÜstbilginin yazdırılmamasını -opid=bildirdiği için +1 , çıktının gösterilmesini engeller. Gelecekteki bir kullanıcı psçıkışı boru hattının ortasında sıralamaya karar verirse , awk / sed / tail varsayımı kırılabilir.
Jeff Schaller

8

Bu soruyu yazarken, kullanarak bir çözüm buldum sed.

Girişin başında bir satır sil

Bir satırı silmek için kullanın sed 1d.

Giriş başlangıcında birden çok satırı silme

NSatır sayısını silmek için şunu kullanın:sed 1,Nd

  • İlk 5 satırı silmek için sed 1,5d

  • İlk 10 satırı silmek için sed 1,10d

  • İlk 25 satırı silmek için sed 1,25d

Boru hattı

Böylece boru hattı senaryoda olur:

ps -u user | awk '{print $1;}' | sed 1d | sudo xargs kill -9
                                     ^ removes the PID header
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.