Как я могу использовать два, избивают команды - должностное лицо команды находки?

Это относится к ядру Linux; я не уверен, как любое ядро Unix обрабатывает это.

Верхняя память является сегментом памяти, к которой могут обратиться программы пространства пользователя. Это не может коснуться Низкой Памяти.

Низкая Память является сегментом памяти, к которой ядро Linux может обратиться непосредственно. Если ядро должно получить доступ к Верхней памяти, оно должно отобразить его в свое собственное адресное пространство сначала.

Был патч, представленный недавно, который позволяет Вам управлять, где сегмент. Компромисс - то, что можно устранить адресуемую память из пространства пользователя так, чтобы ядро могло иметь больше памяти, перед использованием которой это не должно отображаться.

Дополнительные ресурсы:

32
04.08.2011, 23:38
3 ответа

Что касается find команда, можно также просто добавить больше -exec команды подряд:

find . -name "*" -exec chgrp -v new_group '{}' \; -exec chmod -v 770 '{}' \;

Обратите внимание, что эта команда, в ее результате, эквивалентном из использования

chgrp-v new_group файл && chmod-v 770 файла

на каждом файле.

Весь findпараметры такой как -name, -exec, -size и так далее, на самом деле тесты: find продолжит выполнять их один за другим, пока вся цепочка до сих пор оценила к истинному. Так каждый последовательный -exec команда выполняется, только если предыдущие возвратили true (т.е. 0 статус выхода команд). Но find также понимает логические операторы такой как или (-o) и не (!). Поэтому использовать цепочку -exec тесты независимо от предыдущих результатов, нужно было бы использовать что-то вроде этого:

find . -name "*" \( -exec chgrp -v new_group {} \; -o -exec chmod -v 770 {} \; \)
46
27.01.2020, 19:37
  • 1
    +1: Да, это - самый изящный способ сделать это. Если можно объяснить, почему Вы используете'{}' (апострофы вокруг фигурных скобок), посетите: unix.stackexchange.com/q/8647/4485 –  user unknown 05.08.2011, 01:37
  • 2
    @user, К сожалению, я не знаю, необходимо ли это все еще. Я сделал некоторый тест сейчас и не столкнулся с ситуацией, где он изменил бы что-либо. Я предполагаю, что это - просто "хорошая практика", которая вымрет. –  rozcietrzewiacz 05.08.2011, 11:04
  • 3
    Кавычки важны для файлов с пробелами на их имена. –  naught101 27.09.2016, 05:19
find . -name "*" -exec sh -c 'chgrp -v new_group "$0" ; chmod -v 770 "$0"' {} \;
17
27.01.2020, 19:37
  • 1
    @Gilles: чудеса -cнечетная обработка 0$ заставляет меня думать, что это неправильно каждый раз, когда я гляжу на нее, но его определенно корректный. –  derobert 24.08.2012, 19:52
  • 2
    мне нравится явная оболочка, определяемая... –  djangofan 24.08.2012, 22:05

Ваша команда сначала анализируется оболочкой в две команды, разделенные a ;, который эквивалентен новой строке:

find . -name "*" -exec chgrp -v new_group {}
chmod -v 770 {} \;

Если Вы хотите выполнить команду оболочки, вызовите оболочку явно с bash -c (или sh -c если Вы не заботитесь, что оболочка является конкретно ударом):

find . -name "*" -exec sh -c 'chgrp -v new_group "$0"; chmod -v 770 "$0"' {} \;

Отметьте использование {} как аргумент оболочке; это - нулевой аргумент (который обычно является названием оболочки или сценария, но это не имеет значения здесь), следовательно ссылаемый как "$0".

Можно передать несколько имен файлов оболочке за один раз и заставить оболочку выполнить итерации через них, это будет быстрее. Здесь я передаю _ поскольку название сценария и следующие аргументы являются именами файлов, который for x (ярлык для for x in "$@") выполняет итерации.

find . -name "*" -exec sh -c 'for x; do chgrp -v new_group "$x"; chmod -v 770 "$x"; done' _ {} +

Обратите внимание, что начиная с удара 4, или в zsh, Вы не должны находить вообще здесь. В ударе, выполненном shopt -s globstar (вставьте его Ваш ~/.bashrc) активироваться **/ положение рекурсивного шарика каталога. (В zsh это активно все время.) Затем

chgrp -v new_group -- **/*; chmod -v 770 -- **/*

или если Вы хотите, чтобы файлы были выполнены с помощью итераций на в порядке

for x in **/*; do
  chgrp -v new_group -- "$x"
  chmod -v 770 -- "$x"
done

Одно различие с find команда состоит в том, что оболочка игнорирует точечные файлы (файлы, имя которых начинается с a .). Включать их, в ударе, сначала набор GLOBIGNORE=.:..; в zsh использовать **/*(D) как шаблон шарика.

14
27.01.2020, 19:37

Теги

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