3

Homebrewでパーミッションの問題が発生しました。これにより、RubyPathname.writable?Pathname.writable_real?.

マシン・ワン

このマシンでは、許可の問題はありません。Dir/usr/localadminグループのメンバーによって書き込み可能です:

$ ls -ld /usr/local/
drwxrwxr-x  18 root  admin  612 25 Jun 09:24 /usr/local/

私はadminグループにいます:

$ whoami
martin
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root martin

writable?また、Ruby は、 orを使用するかどうかに関係なく、次のように報告しますwritable_real?

$ irb
>> require "Pathname"
=> true
>> Pathname('/usr/local').writable?
=> true
>> Pathname('/usr/local').writable_real?
=> true

マシン 2

ただし、このマシンでは、グループ/usr/localのメンバーが書き込み可能であるにもかかわらず、次のような問題があります。admin

$ ls -ld /usr/local/
drwxrwxr-x  18 root  admin  612 24 Jun 23:12 /usr/local/

そして私はadminグループにいます:

$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd sgd

書き込み不可の Ruby のレポートPathname.writable?:/usr/local

$ irb
>> require "Pathname"
=> true
>> Pathname('/usr/local').writable?
=> false
>> Pathname('/usr/local').writable_real?
=> true

なんで?

誰でも違いを説明できますか?

ドキュメントによると、2 つの関数の違いは次のとおりです。

  • writable?: パスは、呼び出しプロセスの実効ユーザー ID によって書き込み可能ですか?
  • writable_real?: パスは、呼び出しプロセスの実ユーザー ID によって書き込み可能ですか?

Pathname.writable?(明らかに) 等しい条件下で異なる動作をする理由はまだわかりません。

4

0 に答える 0