簡體   English   中英

使用Ruby讀取UNIX文件權限

[英]Reading unix file permissions with Ruby

是Ruby的新手,我已經在這個問題上困擾了好幾天。 我有一個目錄數組,在該目錄下,我僅想獲取其下面所有文件/目錄的3-4位文件許可權位(0744)。

問題似乎出在File :: Stat類拋出將文件轉換成整數的錯誤。

關於此問題的任何見解或文檔都將提供很大的幫助。 這是分解和轉換文件的初始代碼:

%w(/etc /bin /usr/lbin /sbin).each do |dir|
  Dir.glob("#{dir}/**/*").each do |c|
   m = File.stat("#{c}").world_readable?
   sprintf("%o", m)
   end
 end

這是我的錯誤:

jtest.rb:4:in `sprintf': can't convert File::Stat into Integer (TypeError)
from jtest.rb:4
from jtest.rb:2:in `each'
from jtest.rb:2
from jtest.rb:1:in `each'
from jtest.rb:1

這不會給您您想要的嗎?

File.stat("#{c}").mode.to_s(8)

請注意,.mode給您的文件權限就像整數一樣,我想您會感到困惑,因為整數表示是以10為底的,而您在控制台中看到的權限卻顯示為8。

這應該接近您想要的:

%w(/etc /bin /usr/bin /usr/lbin /usr/usb /sbin /usr/sbin).each do |dir|
  Dir.glob("#{dir}/**/*", File::FNM_DOTMATCH).each do |c| # include hidden files
    unless File.symlink?(c)
      puts c + " - " + File.stat(c).mode.to_s(8)
    end
  end
end
%w(/etc /bin /usr/bin /usr/lbin /usr/usb /sbin /usr/sbin).each do |dir|
  Dir.glob("#{dir}/**/*", File::FNM_DOTMATCH).each do |file|
    begin
      m = File.stat(file).mode
      puts "File #{file} has a permission #{File.stat(file).mode.to_s(8)}" \
        if (m%512 - m%64) / 64 < m%8
    rescue => e
      puts "[ERR] Unable to handle #{file}. Message: #{e.message}"
    end
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM