Найдите файл частью его содержания

user2 потребности выйти из системы и въехать задним ходом. Полномочия группы прокладывают себе путь:

  • Когда Вы входите в систему, Ваши процессы добираются, чтобы иметь состав группы в Вашей основной группе, упомянутой в /etc/passwd, плюс все группы, где Ваш пользователь упоминается в /etc/group. (Более точно, pw_gid поле в getpw(your_uid), плюс все группы, которых Ваш пользователь является явным членом. Вне /etc/passwd и /etc/group, информация может прибыть из других видов пользовательских баз данных, таких как NIS или LDAP.) Основная группа становится эффективным идентификатором группы процесса, и другие группы становятся его дополнительными идентификаторами группы.
  • Когда процесс выполняет операцию, которая требует членства в определенной группе, такой как доступ к файлу, та группа должна быть или эффективным идентификатором группы или одним из дополнительных идентификаторов группы процесса.

Как Вы видите, Ваше изменение в составе группы пользователя только вступает в силу, когда пользователь входит в систему. Для выполнения процессов слишком поздно. Таким образом, пользователь должен выйти из системы и въехать задним ходом. Если это - слишком много проблемы, пользователь может войти в систему отдельной сессии (например, на другой консоли, или с ssh localhost).

Под капотом процесс может только когда-либо терять полномочия (идентификаторы пользователей, идентификаторы группы, возможности). Ядро запускается init процесс (первый процесс после начальной загрузки) работающий как корень и каждый процесс в конечном счете происходит от того процесса ¹. login процесс (или sshd, или часть Вашей среды рабочего стола, которая регистрирует Вас в), все еще работает как корень. Часть его задания должна отбросить полномочия пользователя root и переключиться на надлежащего пользователя и группы.

Существует одно единственное исключение: выполнение setuid или setgid программы. Та программа получает дополнительные полномочия: это может принять решение действовать под различными подмножествами членств родительского процесса плюс дополнительное членство в пользователе или группе, которая владеет setxid исполняемым файлом. В частности, корневая программа setuid имеет корневые полномочия, следовательно может сделать все ²; это то, как программы как su и sudo может сделать их задание.

¹ иногда существуют процессы, которые не получены из init (initrd, udev), но принцип является тем же: запустите как корень и теряйте полномочия со временем.
² Запрет многоуровневых концепций безопасности, таких как SELinux.

4
04.07.2011, 22:47
4 ответа

Вы могли использовать grep:

grep "text" /path/to/directory/*

Для рекурсивного поиска Вы могли использовать -r опция для grep:

grep -r "text" /path/to/directory/*

или ** в пути:

grep "text" /path/to/directory/**/*

но, доступность ** оператор является зависимым оболочки - поскольку далеко я знаю, что это находится в zsh и bash (4 только?), это не может быть доступно в других оболочках.

5
27.01.2020, 20:48
  • 1
    И что с рекурсивным поиском? –  Christian Ivicevic 04.07.2011, 22:20
  • 2
    Добавленный к ответу. –  pbm 04.07.2011, 22:23
  • 3
    @ChristianIvicevic Или Вы можете работать grep -r "text" /path/to/directory. –  Gilles 'SO- stop being evil' 04.07.2011, 22:48
  • 4
    @Caleb: измененный... –  pbm 05.07.2011, 18:27

Можно использовать инструмент, названный ack. Это - descibed как:

ack является инструментом как grep, разработанный для программистов с большими деревьями неоднородного исходного кода.

В основном это подобно grep, в котором это ищет файлы шаблоны, но с несколькими основными отличиями. А именно, это ищет рекурсивно и игнорирует управление версиями и файлы резервных копий по умолчанию (например, CVS, .svn, нечто ~, #foo#). И так как это создается с Perl, это является межплатформенным. Это также позволяет Вам указывать конкретные типы файлов в рамках каталога для поиска, поэтому если Вы только хотите искать файлы Perl, Вы могли бы ввести

ack --perl pattern

Если заинтересовано существует список "лучших 10 причин использовать ack вместо grep" на ack домашней странице. Плюс, существует плагин Vim.

4
27.01.2020, 20:48
  • 1
    Выглядит интересным, но я не вижу лучших 10 оснований список. Почему бы не связываться с ним непосредственно? –  Faheem Mitha 05.07.2011, 00:27
  • 2
    @Faheem Mitha: Прокрутите вниз до Лучших 10 причин использовать ack вместо grep., где 13 причин перечислены. –  Christian Ivicevic 05.07.2011, 00:55

Если Вы просто хотите найти и перечислить файл, не фактическое содержание, то используйте -l опция с grep:

grep -lr Version.cc.in $(pwd)/*

Который даст Вам список всех файлов и полного пути им (предположение, что файлы находятся в каталогах/подкаталогах Вашего текущего рабочего каталога).

0
27.01.2020, 20:48

Существует другой инструмент, подобный Ack, названному Серебряным Искателем. Разработчик утверждает, что это "похоже на ack, но лучше. Это быстро. Это чертовски быстро. Единственной вещью быстрее является материал, который создает indicies заранее, как Избыточный Ctags".

1
27.01.2020, 20:48

Теги

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