スクリプトで生成された何百人ものユーザーを削除する方法は?

スクリプトで生成された何百人ものユーザーを削除する方法は?

私は以前、パスワードジェネレータの出力をユーザー名として100人以上のユーザーを生成するbashスクリプトを作成しました。これまでに見た最も近い解決策は、削除するユーザーのリストを作成し、そのリストを実行するスクリプトを作成することです。

不要なユーザーをすべて手動で一覧表示しなくても、これらのユーザーをすべて削除する方法やクイックオプションがあるかどうか疑問に思います。

ベストアンサー1

コメントに投稿されたものは実際に最も簡単な解決策です。

お気に入りのテキストエディタを使って、、を開き、/etc/passwd削除します。/etc/shadow/etc/group

私が追加すべき唯一のことは、本当に(しなければならない自明ですが、そうではありません)は次のとおりです。そのファイルを編集する前にバックアップしてください。

だからあなたは次のようなものを得るでしょう:

sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/group /etc/group.bak
sudo -e /etc/passwd /etc/shadow /etc/group

もちろん今、返品これらのユーザーのホームディレクトリを削除する必要がありますが、問題は解決しません。ただし、ユーザー自体を削除するだけです。それがすべてです。


もしあなたならするホームディレクトリを削除する最も簡単な方法は、/etc/passwdバックアップコピーと変更されたコピーの違いをフィルタリングすることです。

comm -2 -3 /etc/passwd.bak /etc/passwd | cut -d: -f6,6 > /tmp/dirs-to-delete

それから(あなたはいつ非常にリストに必要なファイルのみが含まれていることを確認してください。リストを繰り返して、そのファイルをすべて削除します。

実際には、まず空白やその他の奇妙な条件を確認するために追加の完全性チェックを実行します。

awk 'NF > 1 { printf "Problem with entry <%s> on line %d\n", $0, NR }' /tmp/dirs-to-delete

そして、ディレクトリがすべて実際に存在することを確認してください。

for d in $(cat /tmp/dirs-to-delete); do
  [ -d "$d" ] ||
    printf 'Supposed directory <%s> is not a directory\n' "$d"
done

そして、どの文字もワイルドカードとして解釈されないようにする必要があります(特殊文字を使用して行の行番号を印刷します)。

sed -n '/[][*?]/=' /tmp/dirs-to-delete

しかし、本当に満足したら、次のようにしてください。

rm -rf $(cat /tmp/dirs-to-delete)

(参考に命令はジョンナは危険です。知らないなら正確にファイルに何が含まれていますか?注意しないと、ハードドライブが消去される可能性があります。 )

おすすめ記事