Я хочу, чтобы моя сетевая маска на Linux. Он выводится с помощью, ifconfig
но я хочу извлечь строку.
linux
text-processing
ip
michelemarcon
источник
источник
ifconfig
строка маски сети FreeBSD :,inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
так что, хотя ответы можно легко скорректировать, вероятно, нет единого размера для всех (используя только Bash / ifconfig) ,Ответы:
Я должен уточнить, что код здесь работает для Linux (обратите внимание на комментарии и пост о других Unices). ОП попросил решение для Linux, но было бы хорошо изменить вопрос на «как получить маску сети» в целом, и дать ответ, сочетающий лучший способ для большего количества вариантов Unix.
О ifconfig в Linux
Наряду с другими традиционными сетевыми командами, такими как netstat, arp, rarp и route, ifconfig является частью пакета net-tools . Net-tools не разрабатывались активно с очень долгого времени, и есть попытки отказаться от него в пользу более нового пакета iproute2 . Для краткости, если вы хотите получить более подробную информацию об этом фундаментальном переходе, вот несколько соответствующих ссылок:
Пример дела: Debian Linux
Пример дела: Arch Linux
Страница руководства для net-tools ifconfig (см. Раздел «ОШИБКИ»)
Анализ и сравнение структур с точки зрения пользователей
источник
?
источник
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
Интересно, ты действительно хочешь только маску? Может быть, вы действительно хотите, чтобы сеть (или IP) с маской использовалась в файлах конфигурации, с
nmap
или как угодно.В этом случае в Linux вы также можете проанализировать вывод
ip ...
команды.Чтобы перечислить все интерфейсы с их адресом и маской в нотации CIDR:
Или ограничить его интерфейсом по умолчанию:
что дает мне «192.168.1.61/24» на моей машине.
источник
ip -o -f inet addr show scope global
иip route list default
.Если вы используете ОС, которая выводит маску в шестнадцатеричном формате, вы можете сделать что-то вроде:
источник
источник
awk
что не так в реальной жизниifconfig
. Я хотел бы предложить несколько изменений , хотя:ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
.-o
Так , чтоgrep
только возвращает часть строки , а не всей партии (более эффективно). Сопоставьте непробельные символы ([^\s]*
), чтобы найти конец токена сетевой маски. Одинарные кавычки вокруг поля разделителя для безопасности./sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
выводить маску в шестнадцатеричном виде.Если вы ищете маску сети для сетевого устройства по умолчанию, эта команда возвращает устройство по умолчанию, поскольку устройством по умолчанию может быть не eth0
И эта команда возвращает маску:
Благодаря Элии Каган и Пауло Томе, которые помогли мне и упростить, и уточнить ответ. На моем персональном компьютере сетевым устройством по умолчанию было «wlx504654c1a91», которое было слишком сложным для запоминания и точного ввода, отсюда и двухэтапный процесс.
источник
grep 'pattern' | awk '{ action }'
обычно можно уменьшить доawk '/pattern/ { action }'