「userdelを実行したら "currently used by process" とエラーが出て削除できない」
Linuxサーバーを運用していると、不要になったユーザーアカウントの削除は避けて通れない作業です。しかし、手順を誤ると、必要なデータを消してしまったり、逆にゴミファイルが残り続けたりと、思わぬトラブルにつながります。
この記事では、userdelコマンドでLinuxユーザーを安全に削除する方法を解説します。基本的な使い方から、-rオプションによるホームディレクトリの同時削除、削除前の確認手順、トラブル対処法まで、実務で必要な知識をまとめました。
・userdel はデフォルトではホームディレクトリを削除しない。-r オプションで一緒に削除する
・削除前に id・ps -u・crontab -l でユーザー情報・プロセス・定期ジョブを必ず確認する
・安全な手順は「usermod -L でロック → プロセス終了 → バックアップ → userdel -r」
・-f オプションはログイン中でも強制削除する最終手段で、通常は使わない
・userdel 後は find / -nouser で孤立ファイルを検索して片付ける
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
userdelコマンドとは?~ユーザー削除の仕組みを理解する
userdel は、Linuxシステムからユーザーアカウントを削除するコマンドです。実行すると、以下のファイルからそのユーザーの情報が削除されます。・/etc/passwd:ユーザーの基本情報(ユーザー名、UID、ホームディレクトリ、ログインシェルなど)
・/etc/shadow:パスワードのハッシュと有効期限の情報
・/etc/group:そのユーザーが所属していたグループの情報
・/etc/gshadow:グループパスワードの情報
※userdelの実行にはroot権限(またはsudo)が必要です。一般ユーザーでは実行できません。
重要な注意点:デフォルトの
userdel は、ユーザーのホームディレクトリやメールスプールを削除しません。これらも含めて削除したい場合は -r オプションを使います(後述)。削除前の確認手順(必ず実施すること)
ユーザーを削除する前に、以下の情報を必ず確認してください。確認なしにいきなりuserdel を実行するのは、現場では厳禁です。1. ユーザー情報を確認する(id・grep)
まず、削除対象のユーザーが存在するか、どのグループに所属しているかを確認します。# ユーザーのUID・GID・所属グループを確認 # id testuser uid=1001(testuser) gid=1001(testuser) groups=1001(testuser),10(wheel) # /etc/passwdでユーザー情報を確認 # grep testuser /etc/passwd testuser:x:1001:1001::/home/testuser:/bin/bash
2. ユーザーのプロセスを確認する(ps -u)
削除対象のユーザーがプロセスを実行中だと、userdelがエラーになります。必ず事前に確認しましょう。# 対象ユーザーのプロセスを確認 # ps -u testuser PID TTY TIME CMD 2345 pts/1 00:00:00 bash 2367 pts/1 00:00:00 vim
3. ホームディレクトリの中身を確認する
ホームディレクトリに重要なファイルがないか確認します。必要なデータがあれば、削除前にバックアップを取っておきましょう。# ホームディレクトリの使用量を確認 # du -sh /home/testuser 245M /home/testuser # 必要に応じてバックアップ # tar czf /backup/testuser_home_backup.tar.gz /home/testuser
userdelの基本的な使い方
確認が終わったら、実際にユーザーを削除します。1. ユーザーアカウントのみ削除する(デフォルト)
# ユーザーを削除(ホームディレクトリは残る) # userdel testuser
2. ホームディレクトリごと削除する(-r オプション)
# ユーザーとホームディレクトリ・メールスプールを一括削除 # userdel -r testuser
-r オプションを付けると、ホームディレクトリとメールスプール(/var/mail/ユーザー名)も同時に削除されます。実務では -r を付けるのが基本です。-r なしで削除すると、ホームディレクトリがオーナー不明のまま残り続け、ディスク容量を圧迫したり、セキュリティリスクになります。
3. 強制的に削除する(-f オプション)
# ユーザーがログイン中でも強制削除 # userdel -rf testuser
-f オプションは、以下の状況でも強制的にユーザーを削除します。・ユーザーがログイン中でも削除を実行
・ホームディレクトリが他ユーザーと共有されていても削除
・メールスプールが存在しなくてもエラーにしない
【注意】
-f は最後の手段です。ログイン中のユーザーを強制削除すると、実行中のプロセスが予期しない動作をする可能性があります。通常は後述の「安全な削除手順」に従ってください。削除後の確認方法
ユーザーを削除したら、正しく削除されたことを必ず確認します。1. ユーザーが存在しないことを確認する
# idコマンドで確認 # id testuser id: 'testuser': no such user # /etc/passwdを確認 # grep testuser /etc/passwd # (何も表示されなければ削除済み)
2. ホームディレクトリが削除されたことを確認する
# ホームディレクトリの存在を確認 # ls -la /home/testuser ls: cannot access '/home/testuser': No such file or directory
3. /etc/shadow・/etc/groupも確認する
# shadowファイルを確認 # grep testuser /etc/shadow # (何も表示されなければOK) # グループファイルを確認 # grep testuser /etc/group # (何も表示されなければOK)
【実務Tips】安全なユーザー削除の手順
本番サーバーでユーザーを削除する場合は、いきなりuserdel を実行するのではなく、以下の手順で進めるのが安全です。1. まずアカウントをロックする(usermod -L)
削除前にアカウントをロックして、ログインできない状態にします。これにより、削除作業中に対象ユーザーが新たにログインしてくるのを防げます。# アカウントをロック # usermod -L testuser # ロックされたことを確認(パスワードの先頭に ! が付く) # grep testuser /etc/shadow testuser:!$6$xxxx...:19500:0:99999:7:::
2. 実行中のプロセスを終了する
# 対象ユーザーの全プロセスを確認 # ps -u testuser # 対象ユーザーの全プロセスを終了 # killall -u testuser # プロセスが終了したことを確認 # ps -u testuser # (何も表示されなければOK)
3. crontabを確認・削除する
対象ユーザーのcrontabが残っていると、ユーザー削除後にジョブが実行できずエラーログが出続ける場合があります。# 対象ユーザーのcrontabを確認 # crontab -l -u testuser # crontabを削除 # crontab -r -u testuser
4. バックアップを取得してから削除する
# ホームディレクトリをバックアップ # tar czf /backup/testuser_$(date +%Y%m%d).tar.gz /home/testuser # ユーザーを削除(ホームディレクトリ・メールスプールも削除) # userdel -r testuser
トラブルシュート・エラー対処
userdelで削除されないもの~孤立ファイルの対処
userdel -r で削除されるのは、ホームディレクトリとメールスプールだけです。それ以外の場所(/tmp、/var/log、/opt など)に対象ユーザーが作成したファイルがあっても、自動では削除されません。これらは「孤立ファイル」(オーナーが存在しないファイル)としてシステムに残り続けます。
# オーナーが存在しないファイルを検索 # find / -nouser -ls 2>/dev/null # 特定のUIDが所有していたファイルを検索 # find / -uid 1001 -ls 2>/dev/null
「userdel: user xxx is currently used by process」の対処法
# userdel testuser userdel: user testuser is currently used by process 2345
対処法:対象ユーザーのプロセスを特定して終了させてから、再度
userdel を実行します。# プロセスを確認 # ps -u testuser PID TTY TIME CMD 2345 pts/1 00:00:00 bash # プロセスを終了 # kill 2345 # または対象ユーザーの全プロセスを一括終了 # killall -u testuser # 再度削除を実行 # userdel -r testuser
「userdel: cannot lock /etc/passwd」の対処法
# userdel testuser userdel: cannot lock /etc/passwd; try again later.
対処法:
# ロックファイルが残っていないか確認 # ls -la /etc/.pwd.lock # ロックファイルが残っている場合は削除(他にuseradd等が動いていないことを確認してから) # rm /etc/.pwd.lock # 再度削除を実行 # userdel -r testuser
/etc/.pwd.lock を削除する前に、必ず他のユーザー管理コマンドが実行中でないことを確認してください。確認せずに削除すると、/etc/passwd の整合性が壊れる危険があります。ログイン中のユーザーを削除する方法
ログイン中のユーザーをどうしても削除しなければならない場合は、以下の手順で進めます。# ログイン中のユーザーを確認 # who | grep testuser testuser pts/1 2025-03-20 10:00 (192.168.1.100) # 対象ユーザーの全プロセスを終了(ログインセッションも含む) # killall -u testuser # 少し待ってからユーザーを削除 # userdel -r testuser
-f オプションで強制削除することもできますが、前述のとおりリスクがあるため、まずはプロセスを終了させる方法を試してください。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ユーザーアカウントのみ削除 | userdel ユーザー名 |
| ホームディレクトリごと削除 | userdel -r ユーザー名 |
| 強制削除(ログイン中でも) | userdel -rf ユーザー名 |
| 削除前にユーザー情報を確認 | id ユーザー名 |
| 削除前にプロセスを確認 | ps -u ユーザー名 |
| 削除前にアカウントをロック | usermod -L ユーザー名 |
| 対象ユーザーのcrontabを削除 | crontab -r -u ユーザー名 |
| 対象ユーザーの全プロセスを終了 | killall -u ユーザー名 |
| オーナー不明の孤立ファイルを検索 | find / -nouser -ls |
| 削除されたことを確認 | id ユーザー名 |
ユーザー削除でホームディレクトリの取り扱いを間違えていませんか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:usermodコマンドでユーザー設定を変更する方法|グループ追加・シェル変更・ロックも
- 前のページへ:useraddコマンドでユーザーを追加する方法|オプションやsudo権限の付与も
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドU-Z・ユーザ・グループ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます