5

現在のユーザー ID を含む仮想ファイルを見つけようとしています。procディレクトリで見つけることができると言われましたが、どのファイルかはよくわかりません。

4

7 に答える 7

8

実際には が必要です/proc/self/status。これにより、現在実行されているプロセスに関する情報が得られます。

以下に例を示します。

$ cat /proc/self/status
Name:   cat
State:  R (running)
Tgid:   17618
Pid:    17618
PPid:   3083
TracerPid:      0
Uid:    500 500 500 500
Gid:    500 500 500 500
FDSize: 32
Groups: 10 488 500 
VmPeak:     4792 kB
VmSize:     4792 kB
VmLck:         0 kB
VmHWM:       432 kB
VmRSS:       432 kB
VmData:      156 kB
VmStk:        84 kB
VmExe:        32 kB
VmLib:      1532 kB
VmPTE:        24 kB
Threads:    1
SigQ:   0/32268
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed:   00000003
Mems_allowed:   1
voluntary_ctxt_switches:    0
nonvoluntary_ctxt_switches: 3

おそらく、Uid 行と Gid 行の最初の数字を見たいと思うでしょう。どの uid 番号がどのユーザー名にマップされているかを調べるには/etc/passwd、 を参照するか、使用している言語で uid をユーザー名にマップする関連関数を呼び出します。

理想的には、システム コールgetuid()を呼び出してこの情報を検索するだけです。見ながら行うの/proc/は逆効果です。

于 2008-09-18T03:41:03.047 に答える
5

「 」だけを使用しないのはなぜid -uですか?

于 2008-09-18T03:32:52.410 に答える
3

私の知る限り、これ/procは Linux に固有のものであり、一般に UNIX にはありません。本当に現在の UID が必要な場合は、getuid()またはgeteuid()関数を使用します。

Linux のみを使用することがわかっている場合は、 の下の階層を調べることができます。階層に/proc/self/*は、現在のプロセスに関するさまざまな情報が含まれています。これは「魔法」であることを忘れないでください。これ/procはカーネルが提供する仮想ファイルシステムであり、コンテンツは要求した時点で動的に生成されます。したがって、現在のプロセスに固有の情報を返すことができます。

たとえば、次のコマンドを試してください。cat /proc/self/status

于 2008-09-18T03:38:20.573 に答える
3

で見つかるかどうかわかりません/procgetuid()関数または$USER環境変数を使用してみてください。

于 2008-09-18T03:32:28.403 に答える
1

(少なくとも Linux では) 次のような行があります。/proc/process_id/status

ユーザー ID: 1000 1000 1000 1000

これにより、プロセスが実行されているアカウントのユーザーの uid がわかります。

ただし、現在のプロセスのプロセス ID を調べるには、システム コールが必要です。それから、システム コールを呼び出しgetuidて直接 uid を取得することもできます。

編集:ああ、/proc/self/status...毎日何か新しいことを学んでいます!

于 2008-09-18T03:40:06.137 に答える
1

ほとんどの場合、$USER環境変数を確認する必要があります。その他のオプションにはgetuidid -uがありますが、検索/procは確かに最善の方法ではありません。

于 2008-09-18T03:36:06.927 に答える
0

あなたが探しているものは、環境変数にあるかもしれません。環境変数を確認するときは、使用しているシェルに注意する必要があります。bash は「UID」を使用しますが、tcsh は「uid」を使用します*nix。tcsh が「gid」を設定することもわかりましたが、bash で一致する変数を見つけることができませんでした。

于 2008-09-18T14:40:39.950 に答える