Linux でユーザーアカウントが存在するかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、いくつかの一般的な方法を使って、Linux システム上にユーザーアカウントが存在するかどうかを確認する方法を学びます。id コマンドでユーザーの存在を照会する方法、/etc/passwd ファイル内でユーザーエントリを検索する方法、および getent passwd コマンドを使ってユーザー情報を検証する方法を調べます。これらの手法は、ユーザーアカウントの存在を迅速かつ効果的に判断するためのさまざまな方法を提供します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/id("User/Group ID Displaying") subgraph Lab Skills linux/cat -.-> lab-558680{{"Linux でユーザーアカウントが存在するかどうかを確認する方法"}} linux/grep -.-> lab-558680{{"Linux でユーザーアカウントが存在するかどうかを確認する方法"}} linux/id -.-> lab-558680{{"Linux でユーザーアカウントが存在するかどうかを確認する方法"}} end

id コマンドでユーザーの存在を照会する

このステップでは、id コマンドを使ってシステム上に特定のユーザーが存在するかどうかを確認する方法を学びます。id コマンドは、現在のユーザーまたは指定されたユーザーのユーザーおよびグループ情報を表示する汎用的なツールです。

すでに id を使って自分自身のユーザーおよびグループ情報を確認しています。では、これを使って別のユーザーに関する情報を照会してみましょう。

特定のユーザーを確認するための基本的な構文は次のとおりです。

id [username]

ユーザーが存在する場合、このコマンドはそのユーザー ID (uid)、グループ ID (gid)、および所属するグループを出力します。ユーザーが存在しない場合、コマンドは通常、ユーザーが不明であることを示すエラーメッセージを返します。

存在するユーザー、たとえば root を確認してみましょう。ターミナルに次のコマンドを入力して Enter キーを押します。

id root

次のような出力が表示されるはずです。

uid=0(root) gid=0(root) groups=0(root)

これにより、root ユーザーが存在することが確認され、そのユーザーおよびグループ ID が表示されます。

では、このシステム上に存在しない可能性の高いユーザー、たとえば nonexistentuser という名前のユーザーを確認してみましょう。次のコマンドを入力して Enter キーを押します。

id nonexistentuser

ユーザーが見つからないことを示すエラーメッセージが次のように表示されるはずです。

id: ‘nonexistentuser’: no such user

これは、id コマンドを使ってシステム上にユーザーアカウントが存在するかどうかを迅速に判断できることを示しています。

id コマンドは、ユーザーとそのグループ所属に関する詳細情報を取得する強力な方法であることを忘れないでください。

続ける をクリックして次のステップに進みます。

/etc/passwd ファイルでユーザーを検索する

このステップでは、/etc/passwd ファイルを調べることでユーザーの存在を確認する別の方法を探ります。このファイルは Linux システムの基本的な構成要素であり、ユーザーアカウントに関する情報を含んでいます。

/etc/passwd ファイルには、各ユーザーの重要な詳細情報が格納されており、ユーザー名、ユーザー ID (UID)、グループ ID (GID)、ホームディレクトリ、およびデフォルトのシェルが含まれます。ファイル内の各行は 1 つのユーザーアカウントを表し、フィールドはコロン (:) で区切られています。

cat コマンドを使って /etc/passwd ファイルの内容を表示し、grep コマンドを使ってその中から特定のユーザー名を検索することができます。

まず、/etc/passwd ファイルの全内容を表示してみましょう。ターミナルに次のコマンドを入力して Enter キーを押します。

cat /etc/passwd

多数の行が表示され、各行がユーザーアカウントを表しています。出力は次のようになります(数行のみ表示)。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
...
labex:x:5000:5000:LabEx user,,,:/home/labex:/bin/zsh
...

では、grep を使って labex のような特定のユーザーを検索してみましょう。cat /etc/passwd の出力を grep labex にパイプします。パイプ記号 (|) は、左側のコマンドの出力を右側のコマンドの入力として送ります。

次のコマンドを入力して Enter キーを押します。

cat /etc/passwd | grep labex

labex ユーザーが存在する場合、/etc/passwd ファイル内の labex ユーザーに対応する行が表示されます。

labex:x:5000:5000:LabEx user,,,:/home/labex:/bin/zsh

ユーザーが存在しない場合、grep は一致するものを見つけず、出力はありません。

nonexistentuser を再度検索してみましょう。

cat /etc/passwd | grep nonexistentuser

このコマンドは出力を生成せず、nonexistentuser ユーザーが /etc/passwd ファイル内に見つからないことを示します。

/etc/passwd ファイルを直接検索することは、特にスクリプトでユーザーの存在を確認する一般的な方法です。ただし、このファイルにはローカルのユーザーアカウントのみが含まれていることに注意する必要があります。ネットワークサービス(LDAP など)を通じて管理されているユーザーはここに表示されない場合があります。

続ける をクリックして次の方法に進みます。

getent passwd コマンドでユーザーを検証する

このステップでは、getent コマンドについて学びます。このコマンドは、パスワードデータベースを含む Name Service Switch (NSS) データベースからエントリを取得する、より堅牢な方法です。getent コマンドは、/etc/passwd のようなローカルファイルだけでなく、LDAP や NIS のようなネットワークベースのソースもクエリできるため、特に便利です。

getent を使ってパスワードデータベースをクエリする基本的な構文は次のとおりです。

getent passwd [username]

ユーザーが構成された NSS ソースのいずれかに存在する場合、getent はパスワードデータベースから対応する行を出力します。これは cat /etc/passwd を使ったときと同様です。ユーザーが存在しない場合、getent は出力を生成せず、非ゼロのステータスで終了します。

getent を使って labex ユーザーを確認してみましょう。ターミナルに次のコマンドを入力して Enter キーを押します。

getent passwd labex

labex ユーザーの行が表示されるはずです。

labex:x:5000:5000:LabEx user,,,:/home/labex:/bin/zsh

では、getent を使って nonexistentuser を再度確認してみましょう。次のコマンドを入力して Enter キーを押します。

getent passwd nonexistentuser

このコマンドは、/etc/passwd に対して grep を使ったときと同様に、出力を生成しません。ただし、getent はシステムの NSS 設定を尊重し、様々なソースからユーザーを見つけることができるため、直接 /etc/passwd を解析するよりも一般的に好まれます。

終了ステータスの違いを確認するには、コマンドを実行した後に $? の値を確認できます。$? には、最後に実行されたコマンドの終了ステータスが格納されます。値が 0 は通常成功を示し、非ゼロの値はエラーを示します。

labex に対して getent コマンドを再度実行し、終了ステータスを確認します。

getent passwd labex
echo $?

ユーザー情報の後に 0 が表示されるはずです。

では、nonexistentuser に対して getent コマンドを実行し、終了ステータスを確認します。

getent passwd nonexistentuser
echo $?

getent からの出力はなく、その後に非ゼロの値(多くの場合 1 または 2)が表示されるはずです。

getent を使い、その終了ステータスを確認することは、ユーザーがローカルで定義されているかネットワークサービスを通じて定義されているかに関係なく、Linux システム上にユーザーが存在するかどうかをプログラム的に判断する信頼性の高い方法です。

これで、Linux でユーザーの存在を確認する 3 つの異なる方法を学びました!

続ける をクリックしてこの実験を完了します。

まとめ

この実験では、Linux でユーザーアカウントが存在するかどうかを確認する 3 つの方法を学びました。まず、id コマンドを使用しました。このコマンドは、ユーザーが存在する場合はユーザーとグループの情報を提供し、存在しない場合はエラーを表示します。これを root ユーザーと存在しないユーザーを確認することで実証しました。

次に、ユーザーアカウントの詳細を含むコアシステムファイルである /etc/passwd ファイルを調べました。このファイルを検索することで、ユーザーのエントリが存在するかどうかを判断できます。最後に、getent passwd コマンドを利用しました。これは /etc/passwd を含む様々なソースからユーザー情報をクエリする、より堅牢な方法であり、スクリプトや自動化に一般的に推奨されます。