Я пытаюсь проверить принадлежность файла к каждому файлу в каждом домашнем каталоге на компьютере Linux в качестве теста Inspec, написанного на рубине, используя команды Linux. У меня есть массив владельцев домашних каталогов, называемый ownerArray (содержащий пользователей, такие как bin, root, daemon, ...), и я пытаюсь использовать класс Dir.glob для получения каждого файла в каждом каталоге для каждого владельца, содержащегося в моем массив, но когда я запускаю свой код, он только петлиет через бит. Есть около 15 владельцев всех из/etc/passwd, которые я бы хотел пропустить, но следующие только проверки bin (я могу сказать, когда я печатаю имя каждого файла по мере его цикла). Является ли это проблемой с разрешениями, или существует ли другой способ использования Dir.glob для получения каждого файла каждого владельца домашнего каталога на моей машине. Спасибо за ваше время и помощь.Ruby Loop, чтобы получить все файлы во всех домашних каталогах на машине Linux (работа Inspec/Chef)
ownerArray = %w()
command("cut -d : -f1 /etc/passwd").stdout.each_line do |line|
if (command("echo ~#{line}").stdout != "/\n")
user = "/" + line.chomp()
ownerArray.push user
end
end
ownerArray.each do |owner|
Dir.glob("#{owner}/**/*", File::FNM_DOTMATCH).each do |file|
next if File.basename(file) == '.' || File.basename(file) == '..'
group = command("stat -c %G #{file}").stdout
describe command("id -Gn #{owner} | grep -c '\b{group}\b'") do
its ('stdout') {should_not match "0\n"}
end
end
end
См. OwnerArray, добавленный выше. Он просто захватывает пользователей из/etc/passwd. Для вывода я ожидаю, что тест будет терпеть неудачу каждый раз, когда файлы существуют в домашнем каталоге, для которого группа, владеющая этими файлами, не является группой, членом которой является владелец домашнего каталога. Grep возвращает 0, если владелец домашнего каталога не является членом группы, владеющей данным файлом в домашнем каталоге пользователей.
Не могли бы вы быть более конкретными? Что значит быть «только петлями через« bin »? Что означает 'ownerArray'? Какие файлы вы зацикливаете; какой результат вы ожидаете увидеть? –
Я бы предположил, что ваша спецификация выполнена на вашем локальном хосте. В этом случае 'Dir.glob' возвращает только папки на вашем локальном, а не удаленном хосте. – slowjack2k
Зачем использовать команды, в которых существуют ресурсы? 'описать файл (файл) {it {shoud_not be_owned_by 'root'}}' См. [документация] (https://github.com/chef/inspec/blob/master/docs/resources.rst#file) – Tensibai