SSHサーバーを実行していて、このユーザーを削除したいのですが。このユーザーは現在、最初に強制終了する必要があるいくつかのプロセスを実行しているため、削除できません。
これは、私が現在使用しているユーザーのすべてのプロセスIDを見つけるために現在使用しているパイプラインです。
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
のようなものを探していますが、反転表示されます(表示されるストリームの最初/最後の部分onlyの代わりにすべてのもの)ストリームの開始/終了)。
awk
コマンドの後に| grep [[:digit:]]
を追加するだけでこの問題を解決できましたが、他のシナリオでは非常に役立つと思われるため、ファイルの最初の行を削除する方法を探しています。
注:システムにpgrep
/pkill
がすでにある場合は、ここでホイールを再発明しています。システムにこれらのユーティリティがない場合は、次のことができるはずです。 ps
の出力をフォーマットして、妨害されていないPIDリストを直接取得します。例:ps -u user -opid=
すでにawk
を使用している場合、最初の行(レコード)を削除するために追加のプロセスをパイプする必要はありません。レコード番号NR
に条件を追加するだけです。
ps -u user | awk 'NR>1{print $1;}'
head
とtail
について言及しているので、この場合におそらく必要な式はtail -n +2
この質問を書いているときに、sed
を使用した解決策を見つけました。
1行を削除するには、sed 1d
を使用します。
N
行数を削除するには、sed 1,Nd
を使用します
最初の5行を削除するには、sed 1,5d
を使用します
最初の10行を削除するには、sed 1,10d
を使用します
最初の25行を削除するには、sed 1,25d
を使用します
したがって、シナリオのパイプラインは次のようになります。
ps -u user | awk '{print $1;}' | sed 1d | Sudo xargs kill -9
^ removes the PID header