Latar Belakang
Saya menjalankan server SSH dan memiliki pengguna ini yang ingin saya hapus. Saya tidak dapat menghapus pengguna ini karena dia sedang menjalankan beberapa proses yang harus saya bunuh terlebih dahulu.
Ini adalah saluran pipa yang saya gunakan saat ini untuk mengetahui semua id proses dari pengguna yang saya gunakan saat ini:
ps -u user | awk '{print $1;}'
Outputnya terlihat seperti ini:
PID
2121
2122
2124
2125
2369
2370
Saya ingin mem-pipe ini untuk kill -9
mematikan semua proses sehingga saya bisa menghapus pengguna bodoh ini seperti ini:
ps -u user | awk '{print $1;}' | sudo xargs kill -9
Tetapi ini tidak berfungsi karena PID
tajuk:
kill: failed to parse argument: 'PID'
Pertanyaan
Saya berpikir bahwa harus ada perintah Unix sederhana untuk menghapus baris input pertama.
Saya sadar bahwa saya dapat menggunakan tail
ini, tetapi saya tidak ingin menghitung berapa banyak baris input berisi untuk mencari tahu persis berapa banyak yang ingin saya tampilkan.
Saya mencari sesuatu seperti head
atau tail
tetapi terbalik (bukan hanya menampilkan bagian pertama / terakhir dari aliran itu menampilkan semuanya kecuali awal / akhir aliran).
Catatan
Saya berhasil memecahkan masalah yang saya miliki dengan hanya menambahkan | grep [[:digit:]]
setelah awk
perintah saya, tetapi saya masih mencari cara untuk menghapus baris pertama file karena saya pikir akan sangat berguna dalam skenario lain.
NR
misawk 'NR>1 {print $1;}'
. Lebih baik lagi - gunakanpgrep -u
ataupkill -u
awk
perintah).Jawaban:
CATATAN: jika sistem Anda sudah memiliki
pgrep
/pkill
maka Anda menciptakan kembali roda di sini. Jika sistem Anda tidak memiliki utilitas ini, maka Anda harus dapat memformat outputps
untuk mendapatkan daftar PID yang tidak terbebani secara langsung mis.ps -u user -opid=
Jika Anda sudah menggunakan
awk
, tidak perlu menyalurkan melalui proses tambahan untuk menghapus baris pertama (catatan): cukup tambahkan kondisi pada nomor catatanNR
Karena Anda menyebutkan
head
dantail
, rumus yang mungkin Anda inginkan dalam kasus ini adalahtail -n +2
sumber
tail -n +2
persis apa yang saya cari!ps
agar tidak mencetak tajuk-opid=
, karena mencegah keluaran agar tidak pernah muncul. Jika pengguna di masa depan pernah memutuskan untuk mengurutkanps
output di tengah pipa, asumsi awk / sed / tail mungkin rusak.Saat saya menulis pertanyaan ini saya menemukan solusi menggunakan
sed
.Hapus satu baris di awal input
Untuk menghapus satu baris gunakan
sed 1d
.Hapus beberapa baris di awal input
Untuk menghapus
N
jumlah baris, gunakansed 1,Nd
Untuk menghapus 5 baris pertama gunakan
sed 1,5d
Untuk menghapus 10 baris pertama gunakan
sed 1,10d
Untuk menghapus 25 baris pertama gunakan
sed 1,25d
Pipa
Jadi pipa menjadi dalam skenario menjadi:
sumber