ファイルのユーザー名とグループ名を取得する

| | トラックバック(0)

カテゴリ:

前回の記事の派生で、今度はユーザー名とグループ名を取得してみます。

my ($user, $group) = (stat $file)[4,5];
 
# $user は user id
# $group は group id
# ID番号から名前を取得
 
print 'user: ', [getpwuid($user)]->[0], "¥n";
print 'group: ',  [getgrgid($group)]->[0];

getpwuid はユーザIDに対する情報を返します。
参考:getpwuid - Perlリファレンス
getgrgid はグループ名に対する情報を返します。
参考:getgrgid - Perlリファレンス

[ getpwuid( $user ) ]->[0]

( getpwuid( $user ) )[0]

とやっても一向に構いませんし、一旦、配列で受けてから値を取り出してもいいです。

また、スカラーコンテキストだとユーザー名を返すので、
強制的にスカラーコンテキストにするスカラー擬似関数を用いて、

my ($user, $group) = (stat $file)[4,5];
 
# $user は user id
# $group は group id
# ID番号から名前を取得
 
print 'user: ', scalar getpwuid($user) , "¥n";
print 'group: ',  scalar getgrgid($group);

としてもいいです。
(この記事を書きながらscalarがスカラー擬似関数という名前だってはじめて知った)

参考:Perl5編 第14章 コンテキスト

さらに、今プログラムを実行しているのが誰なのかも知ることができます。
Perlの特殊変数に $> と $) がありこれはそれぞれ、プロセスの実効UIDと実効GIDです。
$) はgidを複数返す場合があるので、その場合は単一のものを抜き出す
処理が必要です。

print 'user: ', scalar getpwuid($>);  #実行しているプロセスの実効ユーザー名
print 'group: ',  scalar getgrgid($)); #実行しているプロセスの実効グループ名

参考:特殊変数 - Perlでいいよ
(実UIDと実効UIDって何が違うんだろう・・・)

こうやってユーザー名やグループ名を取得すれば、
いま実行しているユーザーがそのファイルを操作する権限をもっているかどうかが
チェックできますね。
(あ、でもユーザーやグループが一致するかどうかはIDの数字の比較だけでいいのか)

トラックバック(0)

このブログ記事を参照しているブログ一覧: ファイルのユーザー名とグループ名を取得する

このブログ記事に対するトラックバックURL: https://nozawashinichi.sakura.ne.jp/MT-4.25/mt-tb.cgi/1086

comments powered by Disqus

このブログ記事について

このページは、Shinichi Nozawaが2013年4月25日 14:02に書いたブログ記事です。

ひとつ前のブログ記事は「指定したファイルのパーミションを取得する」です。

次のブログ記事は「CGI.pmのメモ1」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。