В Вашем примере Вы не должны использовать 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
опция наряду с чем-то, что генерирует входные параметры, завершенные нулевым символом вместо пробела.
Можно использовать 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
говорит Вам, какой интерфейс используется.
Выполнение ifconfig
даст Вам информацию, в которой Вы нуждаетесь.
Активный интерфейс будет иметь inet addr
и покажет запись переданных данных, как так:
RX bytes:1930741 (1.8 Mb) TX bytes:204768 (199.9 Kb)
Можно также использовать ip addr
команда и любые неактивные интерфейсы будут определяться как наличие: NO-CARRIER
.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
– jasonwryan
14.06.2011, 21:32
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
На системах 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)'
Получите сетевой интерфейс по умолчанию, обычно используемый для маршрутизации к " остающийся "Интернет в противоположность DMZ, частной сети, хосту виртуальной машины и т. д., которые обычно маршрутизируются явно.
$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0
Используйте эту команду:
$ route | grep default | awk '{print $8}'
enp0s3
Если ваша машина имеет несколько интерфейсов (, что я предполагаю ), нет ни одного интерфейса, который будет использоваться для подключения к Интернету.
В зависимости от пункта назначения, к которому вы подключаетесь, ваша система сверится с таблицей IP-адресов (, показанной при выполнении команды route
), чтобы найти следующую точку/маршрутизатор. будет использовать связанный с ним интерфейс.
Тем не менее, пожалуйста, обратитесь к ответу @torgeir , так как он делает именно это:
Различные дистрибутивы 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
. Точно так же многие операционные системы дают более низкую метрику проводному интерфейсу и более высокую метрику беспроводному интерфейсу.
Несколько интерфейсов могут быть настроены автоматически (в зависимости от ОС )или вручную для доступа к одному и тому же внешнему узлу путем создания/редактирования записей в таблице маршрутизации.
То, что он просит, больше похоже на автоматический способ выполнения 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*
Честно говоря, я ищу то же самое.