現在のユーザー ID を含む仮想ファイルを見つけようとしています。procディレクトリで見つけることができると言われましたが、どのファイルかはよくわかりません。
7 に答える
実際には が必要です/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/
は逆効果です。
「 」だけを使用しないのはなぜid -u
ですか?
私の知る限り、これ/proc
は Linux に固有のものであり、一般に UNIX にはありません。本当に現在の UID が必要な場合は、getuid()
またはgeteuid()
関数を使用します。
Linux のみを使用することがわかっている場合は、 の下の階層を調べることができます。階層に/proc/self/*
は、現在のプロセスに関するさまざまな情報が含まれています。これは「魔法」であることを忘れないでください。これ/proc
はカーネルが提供する仮想ファイルシステムであり、コンテンツは要求した時点で動的に生成されます。したがって、現在のプロセスに固有の情報を返すことができます。
たとえば、次のコマンドを試してください。cat /proc/self/status
で見つかるかどうかわかりません/proc
。getuid()
関数または$USER
環境変数を使用してみてください。
(少なくとも Linux では) 次のような行があります。/proc/process_id/status
ユーザー ID: 1000 1000 1000 1000
これにより、プロセスが実行されているアカウントのユーザーの uid がわかります。
ただし、現在のプロセスのプロセス ID を調べるには、システム コールが必要です。それから、システム コールを呼び出しgetuid
て直接 uid を取得することもできます。
編集:ああ、/proc/self/status
...毎日何か新しいことを学んでいます!
ほとんどの場合、$USER
環境変数を確認する必要があります。その他のオプションにはgetuid
とid -u
がありますが、検索/proc
は確かに最善の方法ではありません。
あなたが探しているものは、環境変数にあるかもしれません。環境変数を確認するときは、使用しているシェルに注意する必要があります。bash は「UID」を使用しますが、tcsh は「uid」を使用します*nix
。tcsh が「gid」を設定することもわかりましたが、bash で一致する変数を見つけることができませんでした。