助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)
問題ID : 3682
問題を開く
現在実行中のプロセスから、rootユーザーが実行したプロセスのプロセスIDを検索したい。適切なコマンドは次のうちどれか。(2つ選択)

正解

pgrep -U 0

pgrep -U root

解説

pgrepコマンドで実行中のプロセスから特定の名前を持つプロセスIDを検索することができます。

pgrepコマンドの書式は以下のとおりです。

pgrep [ オプション ] 検索パターン

特定のユーザーや権限が実行したプロセスのみを検索対象とすることもできます。
-Uオプションにユーザー名やユーザー識別子(UID)を指定すると、そのユーザーが実行したプロセスを検索できます。
-uオプションに実効ユーザー(実際の権限)名や実効ユーザー識別子(EUID)を指定すると、その権限で動作しているプロセスを検索できます。
rootユーザーのUIDは0です。

したがって正解は
・pgrep -U 0
・pgrep -U root
です。

以下は-Uオプションと-uオプションの実行例です。


その他の選択肢については以下のとおりです。

・pgrep -U 1
rootユーザのUIDは0なので誤りです。

・pfind root
・pfind -U root
pfindというコマンドはありません。

参考

プロセスとは、システム上で動作しているプログラムの最小単位のことです。PID(プロセスID)およびプロセス名(コマンド名)はpsコマンドで調べることができます。


また、pgrepコマンドで実行中のプロセスから特定の名前を持つプロセスIDを検索することができます。
pgrepコマンドの書式は以下のとおりです。

pgrep [ オプション ] 検索パターン

実行例:


検索パターンには拡張正規表現が指定できます。-lオプションを使うと、検索パターンにマッチしたプロセス名も表示されます。


特定のユーザーや権限が実行したプロセスのみを検索対象とすることもできます。
-Uオプションにユーザー名やユーザー識別子(UID)を指定すると、そのユーザーが実行したプロセスを検索できます。
-uオプションに実効ユーザー(実際の権限)名や実効ユーザー識別子(EUID)を指定すると、その権限で動作しているプロセスを検索できます。

以下はプログラムのパーミッションなどによって実ユーザーや実効ユーザーが変わる例です。


kill、killall、pkillコマンドで、プロセスに終了や再起動などのシグナル(命令)を送ることができます。kill、killall、pkillコマンドの書式と主なシグナル名およびシグナル番号は以下のとおりです。

kill [-シグナル名または-シグナル番号] プロセスID
または
kill -s [シグナル名またはシグナル番号] プロセスID

killall [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
killall -s [シグナル名またはシグナル番号] プロセス名(コマンド名)

pkill [-シグナル名または-シグナル番号] プロセス名(コマンド名)
または
pkill --signal [-シグナル名または-シグナル番号] プロセス名(コマンド名)


killコマンドはプロセスID(PID)を使用して単一のプロセスにシグナルを送りますが、killallコマンドはプロセス名(コマンド名)を使用して、同じプロセス名の全てのプロセスに対してシグナルを送ります。

例) kill -SIGHUP 1133
例) killall -SIGHUP mycommand

また、pkillコマンド、もしくはkillallの-rオプションを使うことで、プロセス名を拡張正規表現で指定してシグナルを送ることができます。

例)


また、killコマンドはジョブ番号を指定し、ジョブにシグナルを送る事もできます。ジョブ番号は「%ジョブ番号」と指定します。

例) kill %2

ジョブ番号はjobsコマンドで確認することができます。先頭の[ ]内の数値がジョブ番号です。
上に戻る

-Uと-uの違いについて、使い分け、問題の見抜き方における明確なチェックポイント

投稿日 2023/04/22

解説を読む限り、「実行」や「実効」という日本語の違いで使い分けをするように見えてしまいます。
私の日本語力に起因するところだとしたら申し訳ないことですが、何かこうもっと明確に「こういう違いがある」というようなものというのはありますか?
日本語覚えたての子供や外国人に説明するとしたら、この両者の違いはどのように説明したらいいのでしょうか?
どなたかお力添え願えませんでしょうか?

2023/04/22 12:07

ChatGPTに聞いてみました。どうでしょうか。

質問:
pgrep の-Uオプションと-uオプションの違いを分かりやすく教えてください。

回答:
pgrep は、UNIX系のオペレーティングシステムで使われるコマンドラインユーティリティで、特定の条件に一致するプロセスを検索するために使用されます。-U オプションと -u オプションは、どちらもユーザーを指定するためのオプションですが、違いがあります。

-U オプション(実行ユーザー):
-U オプションは、プロセスの実行ユーザーを指定します。これにより、特定のユーザーが実行しているプロセスを検索できます。ユーザーは、ユーザーID (UID) で指定します。例えば、UID が 1000 のユーザーが実行しているプロセスを検索するには、次のように実行します。

pgrep -U 1000

-u オプション(有効ユーザー):
-u オプションは、プロセスの有効ユーザー(通常は実行ユーザーと同じですが、異なる場合もあります)を指定します。これにより、特定の有効ユーザーが実行しているプロセスを検索できます。ユーザーは、ユーザーID (UID) で指定します。例えば、UID が 1000 の有効ユーザーが実行しているプロセスを検索するには、次のように実行します。

pgrep -u 1000

要するに、-U は実行ユーザーを指定し、-u は有効ユーザーを指定するために使用されます。通常、実行ユーザーと有効ユーザーは同じですが、セキュリティ上の理由や特定の機能を実行するために一時的にユーザー権限を変更する場合、異なる場合があります。

質問:
有効ユーザとは何ですか。分かりやすく教えてください。

回答:
有効ユーザー(effective user)は、UNIX系のオペレーティングシステムにおいて、現在実行中のプロセスがアクセスやリソースを要求する際に使用されるユーザーID(UID)です。有効ユーザーは、プロセスがシステム上のリソースへのアクセス権限をどのように持っているかを決定します。

通常、実行ユーザー(実際にプロセスを開始したユーザー)と有効ユーザーは同じです。しかし、場合によっては、プロセスが一時的に異なる権限で動作する必要がある場合があります。これは、プログラムが特定の操作を実行するために特権を一時的に昇格させる必要がある場合や、セキュリティ上の理由から、あるユーザーが別のユーザーの権限で動作する必要がある場合などです。

例えば、sudo コマンドは、通常のユーザーが管理者(root)の権限でコマンドを実行できるようにするものです。sudo を使用すると、実行ユーザーは通常のユーザーのままですが、有効ユーザーが root になります。これにより、プロセスは root 権限で実行されるため、通常のユーザーでは実行できない操作が可能になります。

簡単に言うと、有効ユーザーは、プロセスがシステム上のリソースへのアクセス権限をどのように持っているかを決定するユーザーIDです。実行ユーザーと異なる場合がありますが、通常は同じです。


コメント

j jeronimmo521

2023/04/22 15:03

こんな使い方もできるんですね! 理解が進みました。 GPTる方法も今後活用したいです。

j jeronimmo521

2023/04/22 15:04

お礼を言うのを忘れておりました。 ありがとうございます!

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?