Выполните данную команду на каждом подпути длинного тракта

Хост имеет полный контроль над гостем. Таким образом, если существует вредоносная работа хоста, гость скомпрометирован также.

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

Однако это может измениться, поскольку виртуальные машины распространены больше. Например, вставка копии сделала бы относительно простой вектор заражения (Вы думаете, что копируете некоторый невинный текст в VM, но вредоносное программное обеспечение заставляет Вас на самом деле вставить команду, которая открывает логические элементы; также, полагайте, что путем шпионажа буфера обмена хоста, вредоносное программное обеспечение имеет доступ к чему-либо Вы вставка копии даже из VM к в VM). И если Вы - жертва целенаправленного нападения, а не некоторого общего вредоносного программного обеспечения, все ставки выключены.

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

4
20.04.2012, 22:56
4 ответа

Добавьте это к Вашему zsh файл конфигурации:

function pathargs {
  local P=$1; local L=${#P}; shift
  local N=1; while [[ $N -le $L ]]; do
    [[ ($N == 1 && ${P[1]} = '/') || \
       ${P[$N]} != '/' && ($N == $L || ${P[$N+1]} == '/') ]] \
    && $@ ${P:0:$N}
    N=$(($N+1))
  done
}

Пример:

% pathargs /abc/def/ghi/jkl echo
/
/abc
/abc/def
/abc/def/ghi
/abc/def/ghi/jkl

Можно использовать его с chmod -R g+x вместо echo. Команду назовут на каталогах самого верхнего уровня сначала.

3
27.01.2020, 20:47
  • 1
    Это смотрит великий Stéphane. Я не уверен, что понимаю различие между использованием -n 1 и не использование его. Как они точно отличаются? –  Amelio Vazquez-Reina 20.04.2012, 23:35
  • 2
    я удалил функцию, это было то же различие как xargs и xargs -n 1. Новое (и инструмент для очистки) функция будет всегда делать последнему: Назовите один экземпляр команды на каждом аргументе. –  Stéphane Gimenez 20.04.2012, 23:47

Что-то как

path=/a/b/c/d/e/f
while test "$path" != "/"; do
    chmod g+x "$path"
    path=$(dirname "$path")
done
4
27.01.2020, 20:47
  • 1
    Был бы хорошим если dirname мог использоваться рекурсивно от командной строки, но я не вижу, что происходят. +1 для самого чистого сценария. –  Bernhard 21.04.2012, 00:14
  • 2
    Вы могли включить эту идею в функцию как Stéphane если Вы, так требуйте. –  augurar 14.08.2013, 22:13

Быстрый для ввода и работы во всех оболочках:

(while [ "$PWD" != / ]; do cmd .; cd ..; done)

Круглые скобки сохраняют изменение каталога локальным. Как Ваш пример, опущен корневой каталог. Если Вы хотите остановиться при выполнении cmd сбои, добавляют set -e; после вводной круглой скобки.

4
27.01.2020, 20:47

Как насчет find start_directory -type d -exec my_cmd {} \;

  • start_directory /a в Вашем примере
  • type d указывает только на каталоги. type f для файлов. Оставьте этот аргумент и в пользу файлов и в пользу каталогов.
  • my_cmd cmd в Вашем примере
  • {} заменяется найденным именем каталога
  • \; не забывайте это, команда не будет работать без него.

Example1: Это распечатает все имена каталогов полного пути под / домой:

find /home -type d -exec echo {} \;

Example2: Это - Ваш вариант использования:

find /a -type d -exec echo chmod g+x {} \;

Это печатает команды, не выполняет их. Можно проверить, действительно ли это, что Вы хотите и если так, можно передать его по каналу для избиения (или zsh, если Вы желаете):

find /a -type d -exec echo chmod g+x {} \; | bash
0
27.01.2020, 20:47
  • 1
    Спасибо @jippie, но каждый из моих подпутей содержит многих, много других папок, на которых я не хочу выполнять свою команду. Я также хотел бы постараться не вводить имя подпутей один за другим (т.е. Я ищу что-то, что может взять /a/b/c/d/e/f/ непосредственно) –  Amelio Vazquez-Reina 20.04.2012, 23:11
  • 2
    Так используйте изменение с ударом, но вместо того, чтобы передать его по каналу для избиения перенаправляют его в файл. Удалите нежелательные строки, затем выполните файл. find /a -type d -exec echo chmod g+x {} \; > /tmp/my_commands.sh сопровождаемый vi /tmp/my_commands или умный grep.... затем . /tmp/my_commands выполнить строки. Просто не забывайте echo или все команды будут выполняться сразу же. –  jippie 20.04.2012, 23:19
  • 3
    Это точно, какой roseck сказал, что он не хотел. –  Gilles 'SO- stop being evil' 21.04.2012, 02:47

Теги

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