0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StylezAdvent Calendar 2024

Day 8

useraddとadduserの呪い

Last updated at Posted at 2024-12-07

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

いつもユーザーを追加するときに間違えてコマンドを打ってしまって「あちゃー」と思うのがuseraddではないでしょうか。

adduserと打ちたいのにuseraddの方が頭に残っていてユーザーを追加すると思い出すのが、useraddですよね(そうです、これを読んだあなたも、もうuseraddの呪縛から離れられません。オレと同じに呪われるが良い)

1. とはいえいつもいつも失敗するのも恥ずかしいので対策を考えた

まずは、ChatGPT-4に話を聞いてもらいます(なぜ??)

Linuxで、よくいつもuseraddとadduserを間違えてしまうのですが、何かいい方法はありませんか?

ChatGPT-4の答え(いつもお世話になっております)

Linuxで `useradd` と `adduser` を混同されるとのことですね。両者の違いを理解し、混乱を避ける方法をご紹介します。

1. **コマンドの違いを理解する**:
   - **`useradd`**: 低レベルのシステムコマンドで、ユーザーを追加するための基本的な機能を提供します。しかし、ホームディレクトリの作成や初期設定ファイルのコピーなど、一部の設定は自動的に行われません。
   - **`adduser`**: 高レベルのスクリプトで、`useradd` を内部で使用し、対話的にユーザーを作成します。ホームディレクトリの作成、シェルの設定、パスワードの設定などを自動的に行います。

2. **覚えやすい方法を使う**:
   - **名称の順序で覚える**: `adduser` は「ユーザーを追加する」という英語の順序そのままです。一方、`useradd` は逆になっています。
   - **語呂合わせ**: 「ユーザーを追加する」だから `adduser` と覚える。

3. **エイリアスを設定する**:
   - シェルの設定ファイル(例: `~/.bashrc`)に以下を追加して、よく使うコマンドに統一します。
     ```bash
     alias useradd='adduser'
     ```
     これで `useradd` を入力しても `adduser` が実行されます。

4. **使うコマンドを統一する**:
   - 常に `adduser` を使用するように習慣づけると、混乱が減ります。

5. **ヘルプやマニュアルを活用する**:
   - コマンドを使用する前に `man useradd` や `man adduser` で確認する習慣をつける。

これらの方法を試してみて、混乱を減らせるか確認してみてください。何か他にご質問やお手伝いできることがあれば、お知らせください。

なるほどですね。useraddの方が古い歴史をもっているので私がミスってしまうのも当然ということです。

2. Aliasを作る

ChatGPTさんにオススメされた .bashrcにaliasを書くことにしましょう。

.bashrc
alias useradd='adduser'

ログインし直して、sudo useraddしてみます。

image.png

あれ?adduserでは聞かれるはずのインタラクティブなUIが聞かれません。

こういうのが出るはず。。

image.png

※アカウントは登録されていました。

3. ChatGPTさんに解決を求める

alias useradd='adduser' 
を追加してみましたが、通常のadduserで表示されるインタラクティブなパスワード設定画面などが出てきません。

3.2 以下、ChatGPTさんの回答


.bashrcにエイリアスを追加した場合、そのエイリアスはそのユーザーのシェルセッションにのみ適用されます。sudoを使用すると、多くの設定で環境変数やエイリアスが引き継がれないため、新しく作成されたエイリアスが認識されません。

ご不便をおかけして申し訳ありません。alias useradd='adduser' を設定しても、期待通りのインタラクティブなパスワード設定画面が表示されないとのことですね。これはいくつかの理由が考えられます。

問題の原因

  1. エイリアスの適用範囲の制限:

    • sudo コマンド使用時のエイリアスの非適用: sudo useradd と入力した場合、エイリアスは適用されません。これは、sudo は新しいシェル環境でコマンドを実行するため、現在のユーザーのエイリアスが引き継がれないためです。
  2. エイリアスよりもフルパスが優先される:

    • システムによっては、/usr/sbin/useradd のようにフルパスでコマンドが呼び出される場合があり、その場合エイリアスは無視されます。
  3. シェルスクリプト内でのエイリアスの非適用:

    • エイリアスは対話型シェルでのみ有効で、シェルスクリプト内ではデフォルトでは有効になりません。

解決策

以下の方法を試してみてください。

1. シェル関数を使用する

エイリアスの代わりに、シェル関数を定義すると問題が解決する場合があります。

# ~/.bashrc または ~/.zshrc に追加
useradd() {
   sudo bash -c 'adduser "$@"'
}

この関数は useradd コマンドを呼び出すと、自動的に adduser を実行します。関数はエイリアスよりも柔軟で、sudo を使用する場合でも機能する可能性があります。

3. 採用した方法

以下を.bashrcに追加しました。

# ~/.bashrc または ~/.zshrc に追加
useradd() {
   sudo bash -c 'adduser "$@"'
}

4. まとめ

ホント困るわ。。

5. 参考

Ubuntuユーザ追加とsudo権限付与。ユーザ/グループ操作まとめ | WWWクリエイターズ
https://www-creators.com/archives/241

useradd / adduser #UNIX - Qiita
https://qiita.com/amedama/items/f45677cd944c42cde839

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?