Как узнать, какой интерфейс я использую для соединения с Интернетом?

В Вашем примере Вы не должны использовать xargs вообще с тех пор find сделает точно и безопасно что Вы хотите сделать.

Точно, что Вы хотите использовать find :

find -maxdepth 1 -name '*Cases*' -exec touch {} +

В этом примере -maxdepth 1 средства только ищут в текущем каталоге, не убывайте ни в какие подкаталоги; по умолчанию находка посмотрит во всех подкаталогах (который часто является, что Вы хотите), если Вы ограничение это с maxdepth. {} название файла, которым заменят в его месте и + один из двух маркеров конца команды, другого существа ;. Различие между ними - это ; должностное лицо средств команда на каждом файле по одному, тогда как + должностное лицо средств команда на всех файлах сразу. Обратите внимание, однако, что Ваша оболочка, вероятно, попытается интерпретировать ; с самостоятельно, таким образом, необходимо будет выйти из него также \; или ';'. Да, find имеет много небольших раздражений как это, но его питание больше, чем восполняет его.

Оба find и xargs хитры для изучения сначала. Помочь Вам учиться xargs попытайтесь использовать -p или --interactive опция, которая покажет Вам команду, она собирается выполнить и предложить Вам, действительно ли Вы хотите выполнить ее.

Так же с find можно использовать -ok вместо -exec предлагать Вам, хотите ли Вы выполнить команду.

Существуют времена, тем не менее, когда find не сможет сделать все, что Вы хотите, и это то, где xargs входит. -exec команда только примет один экземпляр {} появление, поэтому если Вы получили бы ошибку с find -type f -exec cp {} {}.bak \; таким образом, Вы могли вместо этого сделать это как так: find -type f -print0 | xargs -0 -l1 -IX cp X X.bak

Можно узнать больше о Командах выполнения в руководстве Findutils GNU.

Кроме того, я упомянул это find безопасно делает то, что Вы хотите, потому что, когда Вы имеете дело с файлами, Вы собираетесь встретиться с пробелами и другими символами, которые вызовут проблемы с xargs если Вы не используете -0 или --null опция наряду с чем-то, что генерирует входные параметры, завершенные нулевым символом вместо пробела.

51
28.12.2019, 10:22
11 ответов

Можно использовать route найти Ваш маршрут по умолчанию:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

Iface столбец в соответствии с местом назначения default говорит Вам, какой интерфейс используется.

50
27.01.2020, 19:33
  • 1
    @Job в случае, если у нас есть IP-адрес, как мы можем найти, какой интерфейс он использует. –  Bionix1441 30.11.2017, 11:51

Выполнение ifconfig даст Вам информацию, в которой Вы нуждаетесь.

Активный интерфейс будет иметь inet addr и покажет запись переданных данных, как так:

RX bytes:1930741 (1.8 Mb)  TX bytes:204768 (199.9 Kb)

Можно также использовать ip addr команда и любые неактивные интерфейсы будут определяться как наличие: NO-CARRIER.

6
27.01.2020, 19:33
  • 1
    Так как OP не хочет быть корнем, возможно, необходимо ли дать полный путь исполняемому файлу? –  tshepang 14.06.2011, 10:21
  • 2
    Никакая команда не требует поднятых полномочий. –  jasonwryan 14.06.2011, 10:24
  • 3
    Ubuntu и Arch: оба выполненных с нормальными полномочиями (хотя на Ubuntu это-/sbin) –  jasonwryan 14.06.2011, 10:50
  • 4
    @Shadur Не на моей установке Ubuntu 10.10 и согласно help.ubuntu.com/community/EnvironmentVariables $PATH по умолчанию /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: –  jasonwryan 14.06.2011, 21:32
  • 5
    Это не обязательно поможет на системе с несколькими интерфейсами, поскольку плакат указал на наличие. Лучший ответ использует route управляйте, хотя это не обязательно было бы надежным любой из-за маршрутизации. Маршрут по умолчанию не должен быть тем для получения до Интернета, хотя это может часто быть. –  user1801810 10.08.2016, 21:36

Команда ip route ls даст список активных маршрутов и их источников:

caleburn: ~/ >ip route ls
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.7 
default via 192.168.10.254 dev eth0 
2
27.01.2020, 19:33

На системах GNU / Linux:

#!/bin/sh

# host we want to "reach"
host=google.com

# get the ip of that host (works with dns and /etc/hosts. In case we get  
# multiple IP addresses, we just want one of them
host_ip=$(getent ahosts "$host" | awk '{print $1; exit}')

# only list the interface used to reach a specific host/IP. We only want the part
# between dev and src (use grep for that)
ip route get "$host_ip" | grep -Po '(?<=(dev )).*(?= src| proto)'
10
27.01.2020, 19:33

Получите сетевой интерфейс по умолчанию, обычно используемый для маршрутизации к " остающийся "Интернет в противоположность DMZ, частной сети, хосту виртуальной машины и т. д., которые обычно маршрутизируются явно.

$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0
6
27.01.2020, 19:33

Используйте эту команду:

$ route | grep default | awk '{print $8}'
enp0s3
1
27.01.2020, 19:33

Моя версия, которая в основном основана на это и это :

route | grep '^default' | grep -o '[^ ]*$'

И это, экспериментально , для macOS:

route -n get default | grep 'interface:' | grep -o '[^ ]*$'
29
27.01.2020, 19:33

Если ваша машина имеет несколько интерфейсов (, что я предполагаю ), нет ни одного интерфейса, который будет использоваться для подключения к Интернету.

В зависимости от пункта назначения, к которому вы подключаетесь, ваша система сверится с таблицей IP-адресов (, показанной при выполнении команды route), чтобы найти следующую точку/маршрутизатор. будет использовать связанный с ним интерфейс.

Тем не менее, пожалуйста, обратитесь к ответу @torgeir , так как он делает именно это:

  1. Учитывая домен (, жестко запрограммированный как google.com, что является единственным недостатком в ответе)
  2. Разрешает IP-адрес
  3. Просматривает таблицу IP-адресов для использования маршрута (и, следовательно, интерфейса ).
0
27.01.2020, 19:33

используйте приведенный ниже:

ip r | grep default
0
27.01.2020, 19:33

Различные дистрибутивы Linux, Unix, некоторые версии Microsoft Windows и многие другие операционные системы не ограничиваются использованием только одного сетевого интерфейса для выхода в Интернет. Многие операционные системы обнаруживают более одного допустимого интерфейса, способного подключаться к Интернету, и настраивают каждый из них для передачи трафика в Интернет (, в частности шлюзы, которые в конечном итоге подключаются к Интернету ). Если ОС попытается подключиться к внешней сети и успешно использует eth0, она добавит этот интерфейс в таблицу маршрутизации и привяжет его к этой сети.Если ОС пытается подключиться к той же внешней сети и успешно использует eth1, она также добавит этот интерфейс(eth1)в таблицу маршрутизации в качестве дополнительного способа доступа к той же сети. Другие авторы до сих пор не рассматривали важность значений метрик в таблице маршрутизации. В приведенной ниже таблице маршрутизации показаны два разных интерфейса: eth0и wlan0. Оба работают, оба были автоматически установлены операционной системой в качестве маршрутов по умолчанию к шлюзу 192.168.1.1, и оба имеют маршрут, созданный операционной системой автоматически к сети 192.168.1.X. Вся эта таблица маршрутизации была написана ОС автоматически. Никакие правки в него мной не вносились. Разница, показанная здесь, заключается в том, что проводной интерфейс Ethernet(eth0)имеет более низкую метрику (202 ), и, таким образом, большая часть моего трафика к узлам за пределами моего собственного будет направляться через этот интерфейс (, который предпочтительнее для более низкая метрика ), в то время как остальная часть моего трафика к узлам за пределами моего собственного будет маршрутизироваться через беспроводной интерфейс(wlan0)(у него более высокая метрика 303, и поэтому ОС менее предпочтительна ).

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.1     0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

Оба интерфейса используются для доступа к «Интернету», и их использование взвешивается значениями «Метрики», как видно из статистики байтов и пакетов для eth0 и wlan0 ниже:

pi@raspberrypi:~ $ ip -s address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:31:a2:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.195/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
       valid_lft 80787sec preferred_lft 69987sec
    inet6 fe80::2f3f:3f1d:8c35:a05e/64 scope link 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    14341060   22393    0       0       0       971     
    TX: bytes  packets  errors  dropped carrier collsns 
    1190274    10745    0       0       0       0       
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:31:a2:c8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.193/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
       valid_lft 80787sec preferred_lft 69987sec
    inet6 fe80::4f31:5fcf:8f70:b5ca/64 scope link 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    4963408    7954     0       0       0       929     
    TX: bytes  packets  errors  dropped carrier collsns 
    49371      235      0       0       0       0       

Легко заметить, что eth0 получает больше трафика от ОС. Многие операционные системы дают более низкую метрику проводному интерфейсу с более быстрым соединением и более высокую метрику проводному интерфейсу с более медленным соединением. Например, если eth0и eth1оба подключаются к одному и тому же узлу, но eth0согласовал соединение на 100 МБ, а eth1согласовал только соединение на 10 МБ, eth0будет присвоена более низкая метрика, чем eth1. Точно так же многие операционные системы дают более низкую метрику проводному интерфейсу и более высокую метрику беспроводному интерфейсу.

Несколько интерфейсов могут быть настроены автоматически (в зависимости от ОС )или вручную для доступа к одному и тому же внешнему узлу путем создания/редактирования записей в таблице маршрутизации.

4
23.02.2020, 22:57

То, что он просит, больше похоже на автоматический способ выполнения ping -I. Вы можете использовать ping -I. Он хочет, чтобы это делалось автоматически и показывало сетевой интерфейс, который он принимает. Разрешение должно давать вывод, подобный этому:

PING 8.8.8.8 (8.8.8.8) from 10.11.12.13 via enp192: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=18.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=17.3 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=17.7 ms*

Честно говоря, я ищу то же самое.

0
16.06.2020, 17:55

Теги

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