"отображение $DISPLAY на C в $DISPLAY на B" что это значит?
Очевидно, grep
что-то у вас на C отсутствует, поэтому вы видите только сокеты на C, которые включают «номер порта = 6010». Другое соединение или сокет прослушивания на C отключены grep
.
Раньше вы не видели никаких подключений, потому что не было запущено ни одного X-клиента, подключенного к sshd (номер порта = 6010 ), и дополнительная информация после того, как вы теперь запускаете X-клиент, который подключен к вашему sshd (порту num=6010 ).
При использовании туннеля SSH необходимо знать топологию сети. Сервер SSH на C открывает новый сокет, который прослушивает порт 6010, потому что его запросил клиент SSH на B. Туннель ssh по-прежнему установлен между клиентом SSH на B и сервером SSH на C (, порт num=22, если sshd специально не настроен ), вы не видите это туннельное соединение, так как вы grep
его отключили. X-клиенты на C подключаются к sshd (номер порта = 6010 ), затем sshd мультиплексирует эти соединения с помощью ssh-туннеля и перенаправляет эти соединения на X-сервер на B.
«Соединение между $DISPLAY на C и $DISPLAY на B» на самом деле не существует, туннель ssh создается между C :22 и адресом _из __SSH _клиент _на _B. И поскольку это соединение, это невозможно в состоянии ПРОСЛУШИВАНИЯ.
используйте netstat -ap
без grep
для просмотра дополнительной информации.
Все соединения, упомянутые в этом ответе, означают настоящее TCP-соединение с точки зрения ядра, а не «соединения» с точки зрения конечных -пользователей.
Чтобы найти 2 строки в строке:
Использование GNU grep с Perl -совместимыми регулярными выражениями:
grep -RinP '^(?=.*\bMiami\b)(?=.*\bNew York City\b)' dir/
Регексы Perl используют \b
в качестве границы слова.
С GNU awk:
gawk -v IGNORECASE=1 '
/\<Miami\>/ && /\<New York City\>/ {
print FILENAME ":" NR ":" $0
}
' file
Расширенные регулярные выражения используют \<
и \>
в качестве границ слов.
Однако в awk нет эквивалента -R
. Вы можете использовать find:
find dir/ -type f -exec gawk -v IGNORECASE=1 '...' '{}' +
Следующее решение доступно в связанной публикации @steeldriver, любезно предоставленной @Campa.
grep -Rinw Miami. | grep -iw "new york city"
Просто добавьте несколько переключателей, чтобы получить рекурсивный поиск и вывод
Использование
Miami banana
Miami New York City
Miami banana
New York City banana
Miami banana
New York City Miami
если у вас большое количество файлов, то избегать P
erl с grep
кажется хорошей идеей
time grep -Rinw Miami. | grep -iw "new york city"
./file:2:Miami New York City
./file:6:New York City Miami
real 0m0.014s
user 0m0.004s
sys 0m0.016s
time grep -RinwP Miami. | grep -iwP "new york city"
./file:2:Miami New York City
./file:6:New York City Miami
real 0m0.059s
user 0m0.060s
sys 0m0.004s
Похоже, time
преимущество вышеизложенного над @glennjackman с P
erl
time grep -RinP '^(?=.*\bMiami\b)(?=.*\bNew York City\b)'.
./file:2:Miami New York City
./file:6:New York City Miami
real 0m0.069s
user 0m0.062s
sys 0m0.007s
И повторяя эти 1000 раз по одному и тому же поиску for i in {1..1000}; do....; done
, похоже, подтверждается
@glennjackman P
Эрлgrep
real 0m49.276s
user 0m47.414s
sys 0m1.790s
@Campa P
эрлgrep
real 0m42.841s
user 0m42.305s
sys 0m3.346s
@Campa простойgrep
real 0m8.813s
user 0m8.837s
sys 0m3.081s
Но победителем в спринте на 1000 повторений стал @glennjackmanawk
real 0m2.975s
user 0m2.259s
sys 0m0.772s