Как мне найти расположение всех файлов с определенным именем, содержимое которых содержит определенную строку?

После прочтения вашего комментария кажется, что эти 2 ПК являются частью одной и той же Локальной сети (LAN). По этой причине вы не можете видеть трафик с вашего Linux Box.

Этот учебникнаучит вас основам работы в локальной сети, но сделает его простым:

  • Эти компьютеры будут узнавать друг друга через ARP;
  • Они «увидят», что принадлежат к одной и той же локальной сети, и будут говорить напрямую.
  • Если ваш Linux-сервер является шлюзом, он будет использоваться только для маршрутизации трафика, НЕ принадлежащего этой локальной сети (из 10.0.2.0/24или любую другую маску, которую вы определили)

tl,dr: эти компьютеры находятся в одной локальной сети, поэтому, чтобы увидеть некоторый трафик с вашего компьютера с Linux (и вы не сможете для «перехвата/исправления», просто посмотрите»), вам нужно будет перевести свой сетевой адаптер Linux в режим promisc: ip link set dev eth0 promisc on

Хорошо.Пропуская все эти теоретические вещи, когда вы создаете DNATвнутри той же локальной сети, вам придется «принудительно» вернуть пакет обратно к его происхождению, используя SNAT. Это особый случай, когда у вас есть 2 компьютера в одной локальной сети при выполнении NAT.

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.0.2.188:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.188 --dport 3389 -j SNAT --to-source 10.0.2.122

Таким образом, вы обеспечите, чтобы, когда пакет возвращается на вашу Linux-систему, исходный nat выполнялся для 10.0.2.122

Другие альтернативы:

Создайте RDP-прокси с HA-proxyи разместите эти хосты в отдельных сетях. Это излишество (создание баланса прокси-сервера rdp для одного члена), но это альтернатива.

1
22.08.2017, 20:26
5 ответов

Используйте grepследующим образом в команде find:

find -type f -name "index.php" -exec grep -q 'hello' '{}' \; -exec echo '{}' \;
3
27.01.2020, 23:10

Использование grepсfind:

find /top-dir -type f -name index.php -exec grep -l 'hello' {} +

где /top-dir— это путь к -самому верхнему каталогу, в котором вы хотите выполнить поиск.

С -type fмы просматриваем только обычные файлы с find, а с -name index.phpмы ограничиваем поиск файлами с именем index.php.

-exec grep -l 'hello' {} +запустит grepдля найденных файлов и выведет пути ко всем файлам, которые соответствуют шаблону ('hello'). Это -lс grep, которые вызывают вывод путей.

С +в конце, findбудет предоставлять как можно больше файлов при каждом вызове grep. Изменение этого параметра на ';'или \;приведет к тому, что grepбудет вызываться с одним файлом за раз, что может быть медленным, если файлов много.

9
27.01.2020, 23:10

Если вы используете оболочку bash, включите опцию globstar, чтобы **соответствовало внутри подкаталогов, а затем просто используйте grepкак обычно:

shopt -s globstar
grep -l hello **/index.php

(Вам нужно shopt -s globstarтолько один раз в оболочке, если вы не отключите эту опцию с помощью shopt -u globstar.)

2
27.01.2020, 23:10

Еще 2 способа командой find:

find -type f -name "index.php" -exec grep -l 'hello' {} \;

find -type f -name "index.php" -exec grep -q 'hello' {} \; -print
0
27.01.2020, 23:10

Здесь представлен только подход GNU grep, который возвращает относительный путь совпадающих файлов в текущем рабочем каталоге и рекурсивно, и только имя файла — 'index.php'.

grep -rl --include="index.php" "hello".

Здесь также можно получить абсолютный путь для совпадающих файлов, заменив .на ${PWD}вместо:

grep -rl --include="index.php" "hello" "${PWD}"
1
27.01.2020, 23:10

Теги

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