Как проверить, будет ли “sudo” разрешение необходимо для выполнения команды?

Я сделал бы все это в жемчуге:

$ perl -F'\|' -ane '$k{$F[4]}++; print if $k{$F[4]}>1' file1 file2  
Connect|20130320000025|UTC|PPP|test3@test3.co.uk|test1@test1.co.uk|0BCBE578|
  • -a активирует автоматическое полевое разделение на массив @F.
  • -F'\|' устанавливает разделитель полей для -a кому: |.
  • Для каждой обработанной строки сохраните 5-е поле (индексы массива запускаются в 0 в жемчуге) как ключ хеша ($k{$F[4]}++ и увеличьте его значение одним. Во второй раз, когда поле замечено, то значение будет 2.
  • Сценарий обработает каждую строку обоих файлов (file1 прежде file2) и распечатайте строку, если 5-е поле было замечено прежде, т.е. если $k{$F[4]} больше, чем один.

Это предполагает, что никакая пятая колонна не повторяется в том же файле. Если дело обстоит не так и некоторые столбцы может быть дублирован в том же файле, используйте это вместо этого:

perl -e 'open(A,"$ARGV[0]"); while(<A>){@F=split(/\|/);$k{$F[4]}++;}
         open(B,"$ARGV[1]"); while(<B>){@F=split(/\|/); print if $k{$F[4]} 
         }' file1 file2 
2
30.09.2014, 21:22
2 ответа

is_readable /path/to/file написано test -r /path/to/file или [ -r /path/to/file ] или [[ -r /path/to/file ]]. См. , использующую одинарные или двойные скобки - bash, чтобы узнать, чем они отличаются. is_writable использует -w.

Невозможность получить доступ к файлу - не очень хороший индикатор "нуждаемости в sudo". Возможно, вам придется запускаться от имени другого пользователя или группы, а не от имени root. Может случиться так, что на определённой системе способом получения доступа с правами root будет не запуск sudo, а какой-то другой механизм (su, calife, ...). Тестирование доступа к файлу прекрасно на известной системе с известной конфигурацией. Если вы распространяете скрипты, которые это делают, имейте в виду, что это только эвристический, а не надежный тест, и позвольте пользователю легко переопределить ваши решения.

Обратите внимание, что только потому, что файл, прошедший проверку, читается как читаемый, не означает, что вы действительно сможете его прочитать. Разрешения на файл, возможно, за это время изменились. Иногда есть расхождения между тем, что говорят разрешения на файл, и тем, что на самом деле делают проверки доступа: удаленные файловые системы с причудливыми атрибутами, которые локальная файловая система не понимает, фреймворки безопасности, такие как SELinux, и т.д.

1
27.01.2020, 21:52

Вы можете попробовать выключатель -W теста Utillity:

[ -w /path/to/file ] && do_command /path/to/file || sudo do_command /path/to/file

или длинная версия:

if [ -w /path/to/file ]; then
  do_command /path/to/file 
else
  sudo do_command /path/to/file
fi

Из Manpage

-w FILE
              FILE exists and write permission is granted
6
27.01.2020, 21:52

Теги

Похожие вопросы