В разработке программного обеспечения все меняется с невероятной скоростью — в том числе инструменты, которые мы используем. Это происходит в результате совершенствования аппаратной части, инфраструктурных сред. Иногда старые инструменты плохо адаптируются к реалиям, поэтому они в конечном итоге исчезают, и на замену им приходят новые утилиты.
"Все новое — лучше, чем старое" — девиз, который не всегда применим для утилит в Linux. Но все же исключения есть.
В статье под катом разработчик Хосе Висенте Нуньес* рассказывает о нескольких устаревших инструментах, которые вы, возможно, все еще используете. А также о том, чем их можно заменить. Автор объясняет, почему вам следует переключиться на эти улучшенные альтернативы, которые обеспечивают ту же — а в некоторых случаях даже большую — функциональность. Список составлен в произвольном порядке.
*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.
egrep и fgrep: используйте взамен этих команд флаги
Уважаемая многими команда grep — один из лучших примеров философии операционной системы Unix:
Пишите программы, которые выполняют одну задачу и делают это хорошо. Пишите программы для совместной работы. Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.
Инструмент egrep (extended grep) использует регулярные выражения для сопоставления строки. Однако egrep устарел, и теперь его имеет смысл заменять обычным grep с флагом grep -E.
Например:
$ egrep '^[fj]' /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
josevnz:x:1000:1000:josevnz:/home/josevnz:/bin/bash
$ grep -E '^[fj]' /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
josevnz:x:1000:3000:josevnz:/home/josevnz:/bin/bash
Оба примера выведут соответствующие строки, которые начинаются с буквы j или f в файле /etc/passwd.
Чтобы получить больше примеров, скачайте эту шпаргалку: Linux grep command cheat sheet.
Другой пример, добавление нового флага — fgrep. Команда fixed grep использует фиксированную строку для сопоставления (без оптимизации, поэтому она быстрее, чем регулярное выражение). Утилита fgrep легко заменяется на grep -F.
Посмотрим в сравнении:
$ fgrep 'josevnz' /etc/passwd
josevnz:x:1000:3000:josevnz:/home/josevnz:/bin/bash
$ grep -F 'josevnz' /etc/passwd
josevnz:x:1000:3000:josevnz:/home/josevnz:/bin/bash
Почему egrep и fgrep были заменены?
Для инструмента, обеспечивающего аналогичное поведение, использовать флаги более естественно. Нам нужно знать, что grep с флагом может использовать регулярные выражения или выполнять точный поиск.
nslookup: "I’ll be back"
Введите «Y», если вы когда-либо пытались получить IP-адрес сервера следующим образом:
$ nslookup kodegeek.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: kodegeek.com
Address: 50.63.7.206
Альтернативой nslookup является dig. Вот пример, аналогичный приведённому выше:
$ dig @192.168.1.1 kodegeek.com A +noall +answer +nocmd
kodegeek.com. 600 IN A 50.63.7.206
Еще один пример. Ниже в интерактивном режиме показано, как получить запись указателя (PTR) того же сервера:
> set type=ptr
> 50.63.7.206
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
206.7.63.50.in-addr.arpa name = ip-50-63-7-206.ip.secureserver.net.
Authoritative answers can be found from:
Аналог команды dig выглядит так:
$ dig -x @192.168.1.1 kodegeek.com +noall +answer +nocmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22696
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;1.1.168.\@192.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
in-addr.arpa. 3549 IN SOA b.in-addr-servers.arpa. nstld.iana.org. 2022033331 1800 900 604800 3600
;; Query time: 24 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue May 17 05:08:21 EDT 2022
;; MSG SIZE rcvd: 122
kodegeek.com. 600 IN A 50.63.7.206
Команда dig может делать то, чего не может nslookup. Например, с ее помощью вы можете запросить передачу доменной зоны в формате файла зоны (включая все типы записей), чтобы сделать резервную копию зоны вашего домена:
$ dig +short ns kodegeek.com
ns51.domaincontrol.com.
ns52.domaincontrol.com.
$ dig axfr kodegeek.com @ns51.domaincontrol.com.
# *Note:* In this case it won't work because kodegeek.com has a domain protection. But the domain in your intranet may work.
Но и nslookup может делать то, чего не может dig, например, дружественный интерактивный режим, который очень полезен при изучении доменных зон DNS. Также nslookup может работать в неинтерактивном режиме.
В чем же разница? Утилита dig использует системные библиотеки операционной системы для разрешения имен (local Domain Name System resolver library), а nslookup — нет. В результате они могут вести себя по-разному при выполнении запросов.
Почему был заменен nslookup?
На самом деле nslookup планировался к выводу, но не был заменен на dig (или host). Обратимся к "Википедии":
nslookup — программное обеспечение сервера имен BIND. В начале... при разработке BIND 9 Internet Systems Consortium (ISC) планировал отказаться от nslookup в пользу host и dig. Это решение было отменено в 2004 году с выпуском BIND 9.3, и с тех пор остается неизменным.
Так что, зная особенности, вполне логично использовать оба инструмента.
ifconfig, netstat, route: попробуйте ip
Вы можете использовать ifconfig для получения информации о сетевых интерфейсах и изменения их настроек.
Например:
$ /sbin/ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:43:f9:d0:b4 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp1s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:1f:f3:46:38:96 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 30 bytes 1170 (1.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30 bytes 1170 (1.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wls1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.16 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::ac00:48ea:c7a6:1488 prefixlen 64 scopeid 0x20<link>
inet6 fd22:4e39:e630:1:6688:3ffd:ea5b:d9e9 prefixlen 64 scopeid 0x0<global>
ether 00:23:6c:7b:db:ac txqueuelen 1000 (Ethernet)
RX packets 1115786 bytes 107099421 (102.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 548530 bytes 359598134 (342.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Однако ifconfig был заменен на ip. Вот как сообщается список сетевых интерфейсов с помощью ip:
$ ip 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
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 00:1f:f3:46:38:96 brd ff:ff:ff:ff:ff:ff
3: wls1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:23:6c:7b:db:ac brd ff:ff:ff:ff:ff:ff
inet 192.168.1.16/24 brd 192.168.1.255 scope global noprefixroute wls1
valid_lft forever preferred_lft forever
inet6 fd22:4e39:e630:1:6688:3ffd:ea5b:d9e9/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::ac00:48ea:c7a6:1488/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:43:f9:d0:b4 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
Еще один полезный инструмент — route. Используйте следующую команду, чтобы проверить таблицу маршрутизации:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 wls1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wls1
Команда ip также может отображать таблицу маршрутизации. В следующем примере показано, почему этот инструмент взял верх (думаю, помимо прочего, дело в формате его вывода):
$ ip route list
default via 192.168.1.1 dev wls1 proto static metric 600
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.1.0/24 dev wls1 proto kernel scope link src 192.168.1.16 metric 600
Еще одна утилита, которая была заменена, это netstat. С помощью netstat вы, среди прочего, можете увидеть список активных подключений. Например, чтобы просмотреть список активных TCP-соединений (listening) на вашем сервере без разрешения имен, введите:
$ /usr/bin/netstat --numeric --tcp --listen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 :::9323 :::* LISTEN
tcp6 0 0 :::5355 :::* LISTEN
tcp6 0 0 :::9100 :::* LISTEN
В этом случае заменой является команда ss:
$ ss --numeric --tcp --listen
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 32 192.168.122.1:53 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 127.0.0.1:631 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 [::1]:631 [::]:*
LISTEN 0 4096 *:9323 *:*
LISTEN 0 4096 [::]:5355 [::]:*
LISTEN 0 4096 *:9100 *:*
Почему ifconfig, route и netstat устарели?
Отсутствие технического сопровождения стало причиной вывода этих инструментов. Согласно той же "Википедии", их место заняли более новые утилиты:
Многие дистрибутивы Linux (например, ArchLinux, RHEL 7 и выше) отказались от использования ifconfig и route в пользу программного пакета iproute2, который включает поддержку всех общих функций ifconfig(8), route(8), arp(8) и netstat(1). Он также включает в себя поддержку multicast-конфигурации, управление туннелями и виртуальными ссылками, контроль трафика, низкоуровневую настройку IPsec и другие функции.
Подводим итоги
Важно следить за новейшими инструментами, поскольку разработчики исправляют ошибки и добавляют полезные функции, которых может не быть в старых версиях. Это помогает нам повышать продуктивность.
Старое программное обеспечение, как правило, не получает исправления багов. Ваша система может оказаться под угрозой.
Как мы убедились на примере nslookup, не каждое заявление о том, что инструмент устарел, верно. В рамках домашнего задания советую вам убедиться, что ваши утилиты находятся в актуальном состоянии.
***
Делитесь в комментариях своим мнением об альтернативных инструментах Linux, вариантах их применения и эффективности по сравнению с устаревшими аналогами. А чтобы получать больше интересного контента, подписывайтесь на наш хабр-блог: мы регулярно переводим статьи зарубежных авторов и делимся экспертизой наших сотрудников.
Комментарии (42)
polar_yogi
17.11.2022 13:51+9Попробуйте
cat `which egrep`
узнаете что-то новое.
Про iproute2 даже на хабре была статья https://habr.com/ru/post/320278/
И net-tools устарели не потому, что их перестали поддерживать, а их перестали поддерживать, потому что они используют устаревшие системные вызовы и не поддерживают новые возможности ядра linux.CrazyOpossum
17.11.2022 14:00+2$ which egrep
egrep: aliased to egrep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}Впрочем, никогда егрепом не пользовался, а на домашних машинах давно на ag перешёл. Btw, I use Arch.
polar_yogi
17.11.2022 14:13+4$ cat /bin/egrep
#!/bin/sh
exec /bin/grep -E "$@"
Имелось в виду вот что, и так уже лет 10 точно, а то и все 20.CrazyOpossum
17.11.2022 23:02А, точно, cat не посмотрел. Да, у меня то же, плюс предупрежние что egrep устарел.
vadimr
17.11.2022 15:23Попробуйте
cat `which egrep`
узнаете что-то новое.Попробовал в SUSE – увидел содержимое бинарника. Попробовал в Astra Linux – увидел содержимое бинарника. Даже попробовал в macOS – увидел содержимое бинарника.
Догадываюсь, на что вы намекаете, но это наблюдение не носит универсального характера. У вас, небось, и /bin/true через пустой скрипт сделано.
polar_yogi
17.11.2022 18:05+1Чего там намекать, в gnu grep, который используется в т.ч. в астре и сюзи написано в мейкфайле как получаются egrep и fgrep, вы-ж разработчик, посмотрите.
Астра Орел есть под рукой, распаковал .deb, там бинарник grep и два скрипта для egrep/fgrep по 28 байт. Возможно, вам стоит разобраться, что за бинарники у вас вместо них.
omaxx
17.11.2022 18:24для masOS:
> ls -li /usr/bin/grep 1152921500312779382 -rwxr-xr-x 9 root wheel 202816 Feb 26 2022 /usr/bin/grep > ls -li /usr/bin/egrep 1152921500312779382 -rwxr-xr-x 9 root wheel 202816 Feb 26 2022 /usr/bin/egrep > ls -li /usr/bin/fgrep 1152921500312779382 -rwxr-xr-x 9 root wheel 202816 Feb 26 2022 /usr/bin/fgrep
для Debian:
$ cat /usr/bin/egrep #!/bin/sh exec grep -E "$@" $ cat /usr/bin/fgrep #!/bin/sh exec grep -F "$@"
Реализации разные, а суть одна.... А вот печатать
egrep
удобнее, чем `grep -E`vadimr
17.11.2022 18:52Вентура:
$ ls -li /usr/bin/grep
1152921500312422599 -rwxr-xr-x 4 root wheel 186512 28 окт 11:43 /usr/bin/grep
$ ls -li /usr/bin/egrep
1152921500312422597 -rwxr-xr-x 5 root wheel 186512 28 окт 11:43 /usr/bin/egrep
$ diff /usr/bin/grep /usr/bin/egrep
Binary files /usr/bin/grep and /usr/bin/egrep differ
R(1);
$ uname -a
Darwin . 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct 9 20:14:54 PDT 2022; root:xnu-8792.41.9~2/RELEASE_X86_64 x86_64
Слес:
$ ls -li /usr/bin/grep
60032 -rwxr-xr-x 1 root root 150920 сен 16 2015 /usr/bin/grep
$ ls -li /usr/bin/egrep
60030 -rwxr-xr-x 1 root root 146760 сен 16 2015 /usr/bin/egrep
$ diff /usr/bin/grep /usr/bin/egrep
Binary files /usr/bin/grep and /usr/bin/egrep differ
$ uname -a
Linux . 4.12.14-122.26-default #1 SMP Wed Jun 17 11:17:05 UTC 2020 (5c515dc) x86_64 x86_64 x86_64 GNU/Linux
polar_yogi
18.11.2022 11:32И о чем эти простыни, сказать-то вы что хотели?
На https://ftp.gnu.org/gnu/grep/ в grep 2.0, которая 96-го года (27 лет назад) egrep/fgrep получались из grep c помощью ln grep e/fgrep. Т.е. в 96 году egrep/fgrep уже были deprecated и отдельных исходников не было. Отдельный вопрос - были ли они когда нибудь вообще и с чего вдруг автор статьи начал об этом вспоминать. Ну, т.е. на самом деле понятно, корп.блог/нужна палка/сосать палец.
В grep 2.20 (2014 год) уже были скрипты типа egrep -> exec grep -E $@
Где-то в между эту разницу хардкодили в e/f/grep.c ~10-20 строк кода, main был общим. И это универсальное наблюдение и носит общий характер.
А в /bin/true у меня небось то что туда мантейнеры пакета положили:#!/usr/bin/coreutils --coreutils-prog-shebang=true.
Или на что вы намекаете?vadimr
18.11.2022 11:43Намекаю на то, что везде по-разному. И далеко не везде системные утилиты взяты из GNU.
polar_yogi
18.11.2022 12:10Ну вот я написал выше в чем разница.
Если уж прям далеко - назовите 3 линукс дистрибутива где grep не GNU.Zolg
20.11.2022 02:46назовите 3 линукс дистрибутива где grep не GNU.
Как минимум OpenWRT, Tiny Core, LTSP, thinSTATION и куча других, использующих busybox
iig
17.11.2022 22:29А вот печатать
egrep
удобнее, чемgrep -E
С fgrep то же самое. 8 нажатий на клавиши вместо 4 - офигительно удобное усовершенствование.
GeXoGeN
18.11.2022 13:43Попробовал. Узнал, что не умею в уме интерпретировать бинарники
????@Y@ ??X@????H? H__PAGEZERO(__TEXT??__text__TEXT FA/ F?__stubs__TEXTNu?N?__stub_helper__TEXT?v??v?__const__TEXT?y??y__cstring__TEXTz0z__unwind_info__TEXTL?L?__DATA_CONST?@?@__got__DATA_CONST?H?B__const__DATA_CONSTP?0P??__DATA???@__la_symbol_ptr__DATA??K__data__DATA?h?__bss__DATA?? ?__common__DATA?C?H__LINKEDIT??@Y"?0??X? hMp 8 PK8 ? /usr/lib/dyld%h???4??"?`?(c2 ?*0?(??L /usr/lib/libbz2.1.0.dylib 8/usr/lib/liblzma.5.dylib 0 /usr/lib/libz.1.dylib 8x/usr/lib/libSystem.B.dylib&8)P??IUH??AWAVAUATSH??H?u?H?}?H?T|H????L?%L|H????0L??H????/H????I??I??L??L)?L?{H?=|L9=?|s L???*H??H?|L?=?|L?%?{L??H???/H)?{L?-?{H?E?H??H??{??xH?}??~???!H?E?Hǀ1??QE1?I??H??PH?=?{H9;|s H???#*H??H?o{H? |L?%Y{L?L??L)?L??? /H?M??8??H?}?????u?H?{H????L?%{H?[??0L??H???.L?M??H???`???I??I??L??L)?N?4;I??H?=?zL95?{s L???w)H??H??zL?5t{L?%?zN?4;L?L??H???].H)?zL?-?zM???/H?yzH???%???H?E?HǀH?bz?L)=QzH?E?L??H?OzB?8H??[A\A]A^A_]?UH??AWAVATSH??H?)??1?????I??H?5.z1?H??Eʃ?E?H? zH??yH??y?Q???r-???????NH?=?yH?ƺ??7-H??CH??yL?5dzA??H??yH?=?yu0L?5?yA????L???Z-H???u?zH??y?z?4@H????,??????H??yH??t??t H?y?$??H)?H?yH? yH?IyL?%Jy1?H???????W????H?]??H??H?¹??+H?? ??tW??tS???upH?5?xH?}??q+H??xA??1?1?? ,H???t1A??H?5?x??? A????H???S,H??x H?Sx1???????H??[A\A^A_]?H????????UH??AVSH??H???&I??H?H??tH??1?1???+A????u?H?Z??A?1?H????;u|H?Hc?H???A?>H?5?.?*H?)w?A?>H?5?.??)H?wH??uS?H?=wH???????s*?H?=?vH???????R*??ulH??vH??v??QwH?=?vt9H????8tLH????8t@H?=pvH?av1??*H??t&A?F?L???????t?A?>?>)L???x)E1?L??H?Đ[A^]? ???!???A???[???UH??SP???)H???8H?=vuH?5v?)H??u1?H?=?u1?H??uH?=?u?)H??uH?uvH?[]Ð?UH??AWAVAUATSH???I??A??H?5-1??)??(??w??bt-????S?xzuM???8??xt#??zu7???"?xzu%????xzu???*?H????rt??ft+??eu0??t?$???t??? ??t? ? B2E1???'A??A?D$=???D?0E???D??H?E??E?E1??A?H?}?M??L??H?I.H? ?? ?1?D?=u1??H?<?H????????H? H9??H??A?L$?H?AH??H???d?=?su ?s?(????H?G1H?H???????H?*1H?8??"?????H? 1L?8H?=?,L???l'??t9H?=?,L???Y'??t5H?=?,L???F'???? ? ?????w???hH??H??0L?8M????H?=L,L????&????H?=:,L????&????H?=',L???&????H?=',L???&????H?=,L???&????H?=,L???q&????H?=?+L???Z&????H?=?+L???C&????H?=?+L???,&???s?* ????j?)?H??/H?8???????*??<????0?a??H?R/H?H?5?*H???%???H?5?*H???%???????l????]??H??.H?8???$?H??.H?8H?u?? ?X%I????#?8"????#?8??H?E??8??M????A??B??A??AtL?=??L?=???3??p?$??p??????????????????????????=p??????k???????R???????"?H??-H?8H?u?? ?8$H?a?H?j???"?8"uH????????H9?????"?8uH?='???H?E??8??N?????????fo???Wo?????H?-H?81?? ?H??,L?8H?=e(L???L#????H?=:(L???5#????H?=((L???#???????^H??,H?8?2H?????H?H?5(?#H??t1H??H????"H??H??? H?5?'H???????"H??H??u?H???????!??H? ,H?H?54(H???"???H?5?%H???{!I??H??????????n??????H?H??+H?81?? ?mL?=??aH?=s'?J!H?ÿ?a!H??t;??t7H?5V'H????!??t$H?=?)?!H??t?8uH?2'H????%nm??????????l????=Umu ?Im?~??`??H??*L?8L???U H????????k ??????????%?=@to1?H?u?H?H?}?H?L???a H???t%H?}????t1Ҁ? HD?H???>H?}?H?u???H?}???L???????>H?5n&H???? ??L????E?H?6*?1?D9???E??A??M????????x???L?}?L?e?H??? E1??H??t/1?A?? @??H??t??1??< @???????H9?w???H???H??H?5?$H?}??2 H??t5E1?L?%?$L?}??8tH???.D??A??H??L??L????H??u?L?u?C?<.??GI??L?E?IHD??E??t1?H?4?I?tH??H9?u?E?A??L?m??????D??I?<??1I?<?H??H9?u??????*??$??H?5%$????"?1?1??H??j?H?D$H??H??1???1???H??(Hc?=?ju N!???m?A?i?=??? ?H????=w????=:?tH?i'H?8??A??w?=??u???'???E????????H?=M#1?? L?%?#L?????H???H??H???L??L???vH??H??u?H??????fM??A??I?Hc?iH????H? ??H?1??hH?????ucA? E1?I?ċ??I9?? 4????H?5-#?H??1??]H?5?hH?p"?H?5?hH??"?H?5?hH?b"?1??)H? ???H?=~?H?H?d?J?4p??h?I?H?? ??t????uKL??A???E1?I??L%4?L?55????L??L???yH?57"?L???????E??uE1??FE??1?A?E1??? I?<?????tI?<?1??? E???EE?H??A9?u?A???Z?D:%/?u <????1???u??1??=??@?????H?5zgH??!????f?????N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???N???u???u???u???u???u???u???u???u???u???u???N???N???N???N???N???N???N???????????x?????????e??????????????Z???N???t???i???N???@???N???N???????O???N???????????N???????N???%???N???N???N???N???N???N???????????????{???????E???N???????????N???N???"???????5???4???????A???????????N?????????????M???????O???N???N???N???N???N???[???????N???;7?u"H?=???4?Ɖ5#?H???H???C?|>?UH??AWAVSPH????I??I??? ?;{?u"H?=???4?Ɖ5g?H???DH???H?????H??? ?????H??H?H???D????[A^]?UH??AVSA??H?????;?u"H?=u??4?Ɖ5??H????H?Z?H???h K??M?H??H?H?6?D??3?[A^]?UH??AWAVSPL?=e!I?L?5{c?@H??L??H??1???I?7H?=dc??I?7H?=]c??I?7H?=Vc????UH??SPH???H?;?0?H?6?H?7?H?8?H? H? IH??H?H???H?'?H?[]?UH???HD?H???H???H?5?H?6H9?}H? H??H????,H9?u'H???H?r0H9?HD?H?5??H?{??A??E1?I?H???'H?CI?OH?KA?O(?K(AI?WI?wH???7H?CI?OI?G H?C D??H?[A^A_]?UH??SPH?.?H?{tBH?߾-??H?{?gH?CH9 ??u?H?o?H?p?H?u?H?[]Ð?UH??AWAVAUATSH??H??H???D?0?yH????A??H?E?H???(H?E?H????8t]E1?L?-n?E1?I?EJ?<8H??1??/??tI?EJ?<8H?u?1????uI?EB?|A??I??H?.??I??I9?r?H?}??A??D??H??[A\A]A^A_]??fUH??AWAVAUATSH??(H?H?H?E?(i$)E?H?b`???t??t????A??A??A?H??H?E?HE?H??D??1??H????I?????L???iH???$I??H?l?E?D?}?L?m?A?FX??f?? ????Hc?H???H??D? H???????A??H????8??M?~h1?E1?H???H?H?<L??1????uH???H??A??I??H????H??I9?r?D?}?L?m??H????H????8?L???'? H? _???????u fA?~V??H?F@?H? ??D?)A????tSM?f0E1?1?M??t0H???H?J?<8L??1????uH???H?B?|A??H??H????I??H9?r?A??D?}?L?m?uL??L????~H?????L???^I??H??? ?????v0H?=01??4???E???8u1L???H?N?H;E?u?E?$H??([A\A]A^A_]??x?????????????????I???????????I???????????????????y???p???UH??AWAVAUATSH???H??I??H??L??????I??MD?H?5??K??tmH????H??LE?A?F%?H???9u]1?????????=???=???1H??L? M??u 4??9?E???H?D?H?;???L?e????8??H????8??H?N??8u?:uzH???HH???H?H??H??t?E?H??uH??uH?"??8uE?H?E?(??p???A?G?E??E?W?)E?????H? H?&??8t<?E??6H????H?+??8??H?=51?L??1????E?H???H?L?5??I?E1?L?m?H??p???E??tH????$H? H?;??8t6H?b??8u*E??t%H?>?1ɀ8?^?H?8~?]???L??????H?O??8L?u?L?-??t;H????8u/H?]??8uH?u?H?=a1?????H???8tI?>H?}?H??1??????3????'H???H? A?}t6H?%??8u*E??u%H??1ɀ8? E????tSH?v??8uGH????8u;A?}u4H?4??8u(A?t!H????8uH??XH?x8L??1??? H?}??4 L???, ????????H?}?? L??? 1ۉ?H???[A\A]A^A_]?= t?=`t??#???UH???? H??t]??? UH??AWAVAUATSPH??I??L?-??A?}L?%??t4I?<$-H??H?߾-?I?A??D??H?[A\A]A^A_]?A?F ??????tB?=!?uA?~tA?~ H?=??? t\H???H??8 r6L?=p?Hǃ8H????A???8?uH???uH??8wѰ???A?FA?A?A?}?+???I?$H?H?I? H??H?8~????H??H?I?A?~ $H??????I?>???A???????I?>~2H??H?߾-??I?H?G?H?8??????B????????H?,?H?8t?????H?????9??I??$0I;?$v1?H?E?H?E?I??$8H?E?$?1?H?E?L?-??H?E?H?E?1?H??tI??$?D?1?H?9?:??A??A?}?/H?u?H?}?E1?1?H?E??E?H?E?H?E?D?u?A??$Dt1?H?5C? H?E?H?E?I??$H?E?L??H??H??H8I??$?H?M?E???a ??A??$Dt1?H?5? ????}ą?uH??_tCH?M?H??H?E????D?H;M?H?E?vPH?A?H??H?M?I;H?u?I??$H)?t+I?$H??HcH9?HB?H?}???????}?H??wH???D?<?!?? ? ?EĉE?H?E?H??tSH? }tH?U?D?u?L?-F??{?UЉЋM???9?B?I9?$0DщU?D?u?L?-??A???H?AH??E?A H?M?1?H9M???H?H?U?H?E?D?u?L?-???1u???9?????=H????8?-H?D??8?H?}? ??H?E??~????E?H?u?u<H?}??M?? ?Q?H??I??$H9?vdI??$0H??H?U?H?U?H??H??I;?$?????????H?U?I??$0H??H?}??M???????H?5???>?Ä????? ??????H? ???? ?H??H??X[A\A]A^A_]???UH???H??t]???UH???PH??t]???UH???7H??t]???UH??SPH???1H?sH?{H??H??qH?V??8H?[]??UH??AVSA??H??H?B??8u%H?c??8H?s tuH?=? 1??yH????8t+D???k??=] n??9??????H??H?:?ʀ??vL??8M???f??u??@uH???:????H??H?E?H?]?L?1?I?^?I?I??I)???H? ??8H?M?tH?}?H??:?l????%H??H)?H?E?H?H?? H??H?h?H?H??L?-? tI?}H?5? 1??IH?E?H?I?M?H??L???ZH?!?H?8tI?M??H?=r ?3H?T??8t ? ?H?}?I??I??????H?-??8H?]?uDH??H)?t?H? H???? ?I?H???:??????@H??[A\A]A^A_]?UH??H?5* j_1??.UH??H?5R j_1??UH??H?5s j_1??UH??SPH?_0?8?H?=# ???H??1????UH??H?5?H?=? j_1??UH??H?=7 2?5? H? ???RUH??H?5? j_1??gUH??H?5? j_1??RUH??H?5? j_1??=??%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%?J?%K?%K?%K?%K?K?% K?% K?%K?%K?%K?%K?%K?%K?%K?%K?%K?% K?%"K?%$K?%&K?%(K?%*K?%,K?%.KL?-KAS?%U ?h?????h?????h)?????hV?????hq????h?????h????h*????h<????hP????h_????hq?x???h??n???h??d???h??Z???h??P???h??F???h??<???h??2???h??(???h?????h????h? ???h????h/?????h=?????hJ?????h`?????hz?????h??????h?????h?????h?????h?????h?????h????h9?~???hH?t???h??j???h??`???h??V???h??L???h??B???h??8???h??.???h?$???h????h#????h3????h@?????hM?????h]?????hm?????h~?????h??????h??????h?????h?????h?????h?????h?????h ????h?z???h(?p???h8?f???hE?\???@(#)PROGRAM:grep PROJECT:text_cmds-138.100.3 33333Ca@$FreeBSD$$FreeBSD$$FreeBSD$????????$FreeBSD$r(standard input)unknown %s optionusage: %s [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] Binary file %s matches %s (BSD grep, GNU compatible) %s GREP_OPTIONS context argument must be non-negativeskipread--devicesrecurse--directories 2.6.0-FreeBSDbinarywithout-matchtext--binary-filesautottyif-ttyTERMdumb01;31alwaysyesforcenevernoneno--color%s-0123456789A:B:C:D:EFGHIJLMOSRUVXZabcd:e:f:hilm:nopqrsuvwxyzbinary-fileshelpmmapline-bufferedlabelnullcolorcolourexcludeincludeexclude-dirinclude-dirafter-contextbefore-contextbyte-offsetcontextcountdevicesdirectoriesextended-regexpregexpfixed-stringsfilebasic-regexpno-filenamewith-filenameignore-casebz2decompressfiles-with-matchesfiles-without-matchmax-countlzmaline-numberonly-matchingquietsilentrecursiveno-messagesunix-byte-offsetsinvert-matchversionword-regexpline-regexpxznull-datadecompressGREP_COLORstrdup.grep_treeutil.c0 && "Unreachable segment reached"fts_open%s: %swarning: %s: recursive directory loopfts_read%s:%u %s%cmalloccallocreallocmCproclinenst > st%d%lld--00?X!a FHHNuH `I@d?????L#?#+C+?+P,;.z.?. ?|??|??|??|??|??|??|??|??|??|??|??|??|A?{a?|B}b}C"}c(}D0}d<}EL}eS}Fa}ff}Gs}h}H?}i?}J?}l?}L?}m?}M?}n?}o?}q?}q~r~s?{U~u,~v9~VA~wM~xY~X\~zf~Z?~?v?vw<wFwPwZwdwnwxw?w?w?w?w?w?w?w?w?w?w?w?w?wxxx"x,x6x@xJx(w2wTx^x wwwhxrx|x?x?x?x?x?x?x?x?x?x?x?x?x?yyy&y0y:yDyNyXybylyvyzz.z@z?z?z{2{J{ "P?/p8Q#`BBY@__DefaultRuneLocaleQr?@___mb_cur_max?@___stack_chk_guard?@___stderrp?@___stdinp?@___stdoutp?@_optarg?@_optind?@dyld_stub_binder?s@_BZ2_bzRead?@_BZ2_bzReadClose?s@_BZ2_bzdopen?s@___assert_rtn?s @___error?s(@___maskrune?s0@___stack_chk_fail?s8@_basename?s@@_calloc?sH@_close?sP@_err?sX@_errx?s`@_exit?sh@_fclose?sp@_ferror?sx@_fileno?s?@_fnmatch?s?@_fopen?s?@_fprintf?s?@_fputs?s?@_free?s?@_fstat$INODE64?s?@_fts_close$INODE64?s?@_fts_open$INODE64?s?@_fts_read$INODE64?s?@_fts_set$INODE64?s?@_fwrite?s?@_getenv?s?@_getline?s?@_getopt_long?s?@_getprogname?s?@_gzdopen?s?@_gzread?s?@_isatty?s?@_lseek?s?@_lzma_alone_decoder?s?@_lzma_code?s?@_lzma_stream_decoder?s?@_madvise?s?@_malloc?s?@_mbtowc?s?@_memchr?s?@_memcpy?s?@_mmap?s?@_munmap?s?@_open?s?@_printf?s?@_putchar?s?@_puts?s?@_read?s?@_realloc?s?@_regcomp?s?@_regerror?s?@_regexec?s?@_setlinebuf?s?@_setlocale?s?@_stat$INODE64?s?@_strcasecmp?s?@_strcmp?s?@_strdup?s?@_strerror?s?@_strlen?s?@_strsep?s?@_strtoll?s?@_warn?s?@_warnx?__mh_execute_header?????l? ?qqgO?}b??? ?? ???-##`L?Z0?d4#<BEa$5BVdmy?????????????'.4CVhz????????????3;AIOW_gpv|????????????? !"#$%&'()*+,-./01234589:;<=>?@ABCDEFGHIJK 67L !"#$%&'()*+,-./01234589:;<=>?@ABCDEFGHIJK__mh_execute_header_BZ2_bzRead_BZ2_bzReadClose_BZ2_bzdopen__DefaultRuneLocale___assert_rtn___error___maskrune___mb_cur_max___stack_chk_fail___stack_chk_guard___stderrp___stdinp___stdoutp_basename_calloc_close_err_errx_exit_fclose_ferror_fileno_fnmatch_fopen_fprintf_fputs_free_fstat$INODE64_fts_close$INODE64_fts_open$INODE64_fts_read$INODE64_fts_set$INODE64_fwrite_getenv_getline_getopt_long_getprogname_gzdopen_gzread_isatty_lseek_lzma_alone_decoder_lzma_code_lzma_stream_decoder_madvise_malloc_mbtowc_memchr_memcpy_mmap_munmap_open_optarg_optind_printf_putchar_puts_read_realloc_regcomp_regerror_regexec_setlinebuf_setlocale_stat$INODE64_strcasecmp_strcmp_strdup_strerror_strlen_strsep_strtoll_warn_warnxdyld_stub_binderradr://5614542?? ??$?2?? ??X? ?com.apple.bzfgrep??ŀ?b???r???JI?????$)???'\nVG-Ӿ^??'?|8?M13'Tk????Ry???Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,??+??6M??b4?oFA?',??yo[??$??gk?9Ya?/D????RK?N'9E?R?<???????摝y/?:D!f?p?&? ??3??[?w?r?k?u??Z<?{ ???????{%YK??}?jR?mLY??be???=Jmc?&??<4e?r???Xo??f?O{`?\O鏭??Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,???r??s?Zׂ}?(?t??I????nƇ??-???? D?? 0com.apple.bzfgrep?? b0? *?H0b10???!*?H??? *?H?? 0 UUS10U Apple Inc.1&0$U 261024173941Z01Apple Certification Authority10U 0 UUS10U Apple Inc.1&0$U Apple Certification Authority1301U ?0? *?H?? *Apple Code Signing Certification Authority0?"0 ???q?? ??]kY?Z?????9?#59H?!?'?? ?dk ???P??[?]?Te?s/b?8?drm|iGa?&???,$?j????̬)L?Iy?uv???? ?LSx??v????2ʑ?????9????j??f? K?;-???Ɉ-i¤*a/ۇ?!?L????-?r?n????̣@??Q????-???YN]e3'?g??$?LJy?]????>?H?$?m?0????ȧ???#?8?_a?????0??0U??0U% 0 ?ps??Rj?ީ*ѝv??i?????+??]p??<ZHG?9l??s?b:ʣZ??%J???s?s]???~??????Xn????O??????r2??'ިә?j??a?O??g?0??pleca/root.crl0 ??D?????yA???kg|?lI?L??jn??\8?0??0?g(??yڟ?;Qb;"?~S| 01 *?H?? ??M?ID??:[??鲷[R???X?r??̳?P???j?8?{y1?c?????m????/?oR????D?p??&w?0??0??d????9?0 0 UUS10U Apple Inc.1&0$U Apple Certification Authority1301U 261024173941Z0V1 *Apple Code Signing Certification Authority0 0 UUS10U Apple Inc.10U Apple Software10U ?0? *?H?? Software Signing0?"0 ??0?t?O? ??n1Tm ?<??9???`"]?䄢@A?d?`=?a?R?E'?,d???$ R:???Ax????x%???A??5?Q\??ѝq{?ɪK??ڏ?)?/?o??e??j?=hm?x¥/?2?~?]\?> ^????MA?J?k?EP?L??j'????<??R9????TR??/#Ve??*?Q?#?????՚??_??Glu?????z??bAt??4??Ztd9??9_0???[0?W0_ U?00U#0??i??wBN?VB?Q??? ? 0??U ??0??0?? *?H??cd0{0+0m kThis certificate is to be used exclusively for functions internal to Apple Products and/or Apple processes.0U%? 0 ?????6??f?s?#s????Z^?0O?%`?I1le.R6??nJfW?U?????u?[?e??(??iJɩ?? ??~?bA?????H?q????>??>??g??؝:????I???:?M},?}Č?[d??o\5?^O??Nף??}????_7?$E??????L4??0b1X3`o?*?H??H??kM??T15?9Hk??U?xN???Xo?Q??UA?iUܣ???4?Lڂ??B?2?7??????5?rV?0??0???0 0 UUS10U Apple Inc.1&0$U 350209214036Z0b1pple Certification Authority10U 0 UUS10U Apple Inc.1&0$U ?0?le Ro*?H??0?"0ple Certification Authority10U ?䑩 ??GP??^y?-?6?WLU????Kl??"0?>?P ?A?????f?$kУ????z ?d5#KY???????P??XPg? ?ˬ, op??0??C??=?+I(??ε??^??=?:??? ?G?[?73??M?i??r?]?_??%?U?M] ?b??q?GSU??/A????p??LE~LkP?A??tb ?!.t?< ?A?3???0X?Z2?h???es?g^e?I?v?3e?w??-??z0?v0U?0U?0?0U+?iG?v ??k?.@??G^0U#0?+?iG?v ??k?.@??G^0?U 0?0? *?H??cd0??0+https://www.apple.com/appleca/0?+0????Reliance on this certificate by any party assumes acceptance of the then applicable standard terms a?\6?L-x?팛??w??v?w0O????=G7?@?,Ա?ؾ?s???d?yO4آ>?x?k??}9??S ?8ı??Oice statements.0 ????/?Sj[d?c3w?:,V??!ںsO??6??U٧??2B???q?~?R??B$*??M?^c?K?P??????????DH?`7?uu!1??0??0??01 0 UUS10U Apple Inc.1&0$U Apple Certification Authority1301U 1?He???0 *?H?? *Apple Code Signing Certification Authoritd????9?0 L???I?Ô?,0?)???[*?H??cdi1??<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>cdhashes</key> <array> <data> zaqvkAXAAKEeW98RJGNK4jXkaTM= </data> </array> </dict> </plist> 0 *?H?? ??)??p.D?Hy???7??&0?곐?E?ܲ߷?˱?O ??r+??X?s1a???)q????;0?!\??;"???E ???N??FO??|??K??F?w+W?????????I <S??& T??C!K ????Ր ?V]B??H????y}r+??c4?ڑ??8?46?elj?I?:a?AŒ?0??q?????e?? ?l^b.?&~?Ȕ???B8?z??N?k<ԧh?y??#-]?D??????? ??? H__PAGEZERO?__TEXT??__text__TEXTPB3PB?__auth_stubs__TEXT`u `?__const__TEXT?y??y__cstring__TEXT z0 z__unwind_info__TEXT<?<8__DATA_CONST?@?@__auth_got__DATA_CONST??B__got__DATA_CONST?@??__const__DATA_CONSTP?0P?8__DATA???@__data__DATA?X?__bss__DATAX? ?__common__DATAD H__LINKEDIT??@X4?`3?` ?L? ? PJ? ? /usr/lib/dyldz]??K8o??)?q??2 ?*0?(??I /usr/lib/libbz2.1.0.dylib 8/usr/lib/liblzma.5.dylib 0 /usr/lib/libz.1.dylib 8x/P?`??t˖?Y?(?@?W??6@???T??z?@)???I#?????o??g??_??W??O??{???????? ???X??X?3@?? ?I?(-@?(-?3?T ??6?6??3@?????E ??6@?h48X????]?4???@? ?P????[?Y ????B?h?@? 7@???T??U ????? ????t˚?V?h?@? 7@???T??3? ? 7?v??3@?????? ? 7?v??3@??@??????? ?I?(-@?(-?3??? ?6?X?@?v???_ ? ???X I?(-@?(-??@?? q?T@?h78qaF??OE??WD??_C??gB??oA?????_?#?????o??g??_??W??O??{???? ? ?H?qa?Rq??T??F@??? Cz?? ?b?XI?"1?V??.? Q? q?T T ??X???R? ?|@? ??UX?H?U?? ??R[?|?R?? ?Y?? O@???H?I?`@????R? ????`?(?Rhc9O?hcD9q????{ ?q?T([@??Az?T??.? ???X?j??.@?R ?q???T%???3??R? ?|@??@?q?T?41?T?F@??3?? ??F?`@????RN ???T`@? ???X`@????R? ????R?.?????????{F??OE??WD??_C??gB??oA?????_?#????W ??O ??{ ???????Rj ????????RQ ?`?1?T? ?)?R 9??? Ո@?U?q?T?o??????????????=`@???? ?1 T? !@q?T?3@?H?9?d@???"?RC??R??" @y ??>?? T?3@?H?-? ?1?B?R ????>@??T?R+ ??>??@? Qq?T????? ?0z??0??`@??P ?? ?H?A???4`@??P ?S ?H?E???,@? ????R? ??5`? ???? ?H?a9T??.@?h? ? ?????P ?)@9 q$@z@T ???X?.@??R? ?? ?? ?R ???(?Rh9 ?????????4`@?> ???h ??????{K??OJ??WI????_? ,Lh#??O???{??C?@?+ ? ? ը?S?`>@?q?T ?A?X? ???>?H?1? ?-?S?`6@?D ??g??_??W??O??{?????????{A??O¨?_?#?????o ??? ??R? ?U @9?qLT?q?T?qA@9?q?T??R?q`T?q!TH?R)?R @9?qaTh?@9?q?T??RI?R??H? ?9\??q T?q?T?q?TH?RI?(Q? ?(?R ?(?9H?Q?H?R??(9@? ? H?R?W???( ???????@9v5??A??? ?`?R߂q???@TI?R*?R?jj8_??? *@)?)H???}?L ?????0 ??c?x ??R???0 @9?4H??Z7???c???l ????? ??R> ?h@??4?* ?ʆ@?*????T? qKT?*h"?)?? ?@? X*?J)???T???R9?R?? ?:?R;?R?? ???????????? ?(?R??(?9?(?R??(U9H??0??I@?)2?(?R? ?@???(-??(?R??(9 ??X@?!?R??9? ??X@??rp ???? ??4?rP ???? ?`4`r ???? ?`E5H?R????(?R??(????_? ?H?X@?x'??p ???? ??&4p0 ???? ? &4?o0 ???? ??%4?o ???? ??&4 op ???? ??%4?np ???? ?@%4@n0 ???? ??%4?mp ???? ? %4`m ???? (9$4L(?R ?șX@?d0 ???u ?(?X@?!?R????9(?R??(Q9S(?R??(?9O(?R??( ?? 4?cP ???p ?@85?? ?;h?Rr??Rp ?H?@?H?? ?? Ո?X@??C?B?Rt ???? @??q@'T? @?Yq?&T? @@9?$58%??? ????q`T??H?R(?RI?(Q????9(?Ri?(?9 (?Ri?(9(?Ri?(Q9(?Ri?((9?(?Ri?(?9?(?Q??h??9(?Ri?(?9???R'(?Ri?(?9?(?Ri?(?9C ?? ?X@??C?B?R( ?x?7?h?=?7 @??q?7B? ? ??T/ @?Yqa7B?(?? @@9H4?H?Ri?(??(?Ri?( 9(?RU?W??(?Ri?(9 ը?X@??Re?? ??X@??Q0 ???? ??4?P0 ???? ??4PP ???????? ?(?X@????aOp ????? ???????? ??????Np ????? ?????????# ?? ?X@??o??????????=?OP ???? ?@ 4?=P ??? ?????(?Ri?((9lH?R?W(9?q$?Jh9J4???????RR, ըu????!8p ?r?H??@?R??? ճ]X?H90 ??#?????R? ըl???W@???Ri?( ?:H?RZ???W@? qbT?" ?(yh?5?J@?*?J?w???D??R??t??N??D?h5h?Q9?4 ՈcX@???q?Th?P9?5(?Ri?(Q9?? Ոp5"? q?T?1P ???R??|???a0p ?@?R?? ՁNX?*p ? ??MXh,0 ? ?AM*0 ???@?R??xGB?@??J@????5?RR9??D??B??T?NBGB?iz??J@??ZC?{?????4?NB??? ???@?R???*p ???? q?T??-????5h?P9H4hQ9???4hQR9q??yS???Ru?w??Q?Q9?Q9 *?4`@????4`@?????*s"?v??5h?P9q???k??ThQ9q(?R??? ?!B#p է??? ? ? ? ? ? ? ? ? ? ? ? ? ??????d?? ?? ?? ? p?? X? ? ?? ? ? ? ? ? P?\?? t?? ? ?0??(?p? ?4????? ? ? ? ?t? ???D??DT#??W???O??{??????????u?D?i?*)A?v? kT?FB?*?R y3*)?A?|Ә??F???ijh8?)q???????FB???D?)?|?i)??FB?ii?????Y??FB???D? ?4 ???D?)?|ii?i48??D???(?Ri?(?9?{B??OA??Wè?_?#??W???O??{????????u?RD?i?*-A?v? kT?&B?*?R y3*-?A?|?a??&???V??&B??RD?*?|?i*??&B? ? ??RD?R??{B??OA??Wè?_?#??W???O??{????????u?BD?i?*1A?v? kT?B?*?R y3*1?A?|?<?????1??B??BD?*?|?i*??B?? ??BD?B??{B??OA??Wè?_?#????W??O??{???? ??/X?@? ??@????????????@??@????@?? @????@??@???@?Rh?#??O???{??C?3< ?`@??R?R??h??? ??? ???h@??i?(???{A??O¨?_?#??W???O??{??????j?U?@? ?H"X ?I!X????+??K?? ?K?@? ? ?,7X aTj?K?@?l?? ?T?Rh?H?? ?(??H???@?L?4?R?Rh @??????hA?? ?h*@??*?`?=??=b @????@?i @?i)8h@??????{B??OA??Wè?_?#??W???O??{????t?@?v?u?h@?????R??`@?#??ɪ@???@?j????????@? ?!??T??@?i?(?????h????{B??OA??Wè?_?#??W???O??{????s?t?@?u?v??@??????@?Ȟ@????????i?@?? ????Ti?(??h??h????{B??OA??Wè?_?#??g???_??W??O??{?????H*p ?@9?????????q???) ??@??4??????z( ?H@?ix????R???4H@?ix????RqT??R??R??@??C?? ????Ҟ????O???????????R? ?? ?Z ?y0 ?5?R?J0 ???Ȳ@yQ2qH??O????? ը@??? ? ՀC???= ? ?(q?T q?T T2????1 ?0z??0???@9h0 @9*?r? Tq?? @?I 4???ע?H@?i{????RN??5H@? @?q???@?{C??#??T? ??@?6I0 ?)@9?q???4????@???H@?i{????R0??5H@? @?q???@?{C????T ??@??6*59?@9H5????' ? Ո? q@Tq?TȮ?yq? @9?p ?)@9 *?4?@?%???@4{7?2@????@???* q?T??????R5?R?;0 ?????????@???@????0 լ?????R?@?h5?????@? ???X)@??T`?{H??OG??WF??_E??gD??oC??C??_?G?L???`? ?PP PPPP?(#??o???g??_??W??O??{??C?? ??????o??????????????????????? ??? ??? ??? ????????????? ? ?I??qaT@q?!T ? ?I??q?T?R@q?!T@q` T @q T ? ?3?X?? ? ?3?X???????`??4?????????????????k?)??c? ???ீ=?@9?? 9?? 9? ?)?R?9?? ??@??q @z??p ?V? ?y?0 ?)?0 ժ? ?<? ?!@9?5?@9?5(@9h5(@9(5 ? Չ?XH@??j?*?R?9 ????@9?5?? @9H4(?R?? ?0 ?)?R 9h"0 @9(5????p ??????9R ? Ո?X?? ?????5?P ??4(@9?@9)*?5?[?_?_??cA??_A? ??_??????????g???cA??? hh8?@9? ??????P @Rk??{?????????? ? ?X?KT????????????p ?H@9?@9q @z??0 ??? @9?5?kA???? ?;????? ?7?(@9?4?@9qd @z`?0 @9qH????#??? ?'@9?4?@9q` @za?0 @9qH????#??? ??q??[4H@5(@9?@9?5?@?H5?@4?@9?5 ? ?`?X????kA????????8????kA????????R??? ??{E??OD??WC??_B??gA??oƨ?_????T1@q???T??#??{?????`??{???_??#??_???W??O??{?????????? ??@9? թ@?q @??Th2@94w??4?E9q!Th:@9?4h @?q?T ?p ??? ? ը?X?KT"??? ? ը?Xh?h6@4??9??A????TP ՟???B@Rk?T??+??A?}???T(?R?9h:9 ? ?X????T??????4h?R??h@?h????4h@???T???R??h@?h? ? ???X????? @h ? ?R?{C??OB??WA??_Ĩ?_?#?????o??g??_??W????{ ??C??????/? ? ??+?ԫA?(?P @9?4?? @9?4i A? *???p ?)@9?q?? ? ?h?h5J??p ?)@9)(4 ?R ? ?*??'4|A?h A??T??z??@?9?? ?Ҹ? ?Vt ?y? ՛? ???\?hA??_8??P ?)@9 k??@?????????'??@?hI9?4?RA?p ?6?h A??#?(@??aA????"?R??%???hI9?4?R??'??4?@?????T?h@9?4?????@?i A? ???T????H?p @9? ?R?#)???? ??X)?? ?;???? ?iA???8?R????????1?T??????TG?@?h A? ?TjA?A ? Չ?X)?? ?"1??????1T?/@??q(T ?ȦX =@? ??R ?4-??R????/@5|q?T?+@??q(T Ո?X =@? ??R ?4?R????+@??5|q?T_????@?_ ??TI?i ?+@???_ ??T?@?????Y? ?{? ?+?'@?? *iA??3@?K k$!H????'?????Y? ?{? ?????=`z?<Z??'C?_ ?)?????????? ջ? ?_ ???T,@??@? ?????? ?;? ??T??= ?=_ ?i?????@? *?? ? ը?XI?P ?)@9?q @?H? @9@z? ?0 @9 5_??T(?R??G???@??@?(6??p @9?5 ?R?@??'@?? ?hA?A)?bT? **??p @9???5(?R?? ? ??X????J?P ?J@9_q??) ??7 ? ?)@9 ?0 ?J@9??0 ?k@9?q@ @z` @z!???7? @9H6l A???Tl?? ?? ?h A?????????T????@?h???'@????(?Rq??( ?{I??OH??WG??_F??gE??oD?????_??#??{??????`??{???_? ?#??{????N?`??{???_??#??{??????`??{???_??#??O???{??C????aA? ??X@?"?R~?șP ??9?{A??O¨?#???P? ?8??#?????O??{????????(? @9??0 @9?@?H4??Vp հ??R???? @9?4?*@???@lp ե???P @9?4??????P @9h4?"@????@jP Ք????{B??OA?????#???P? ?8ԏ ??X@?Ȓ @9???4????????{B??OA?????_?#?????o??g??_??W??O??{????X?P @9?P ?)@9q$@z? T??A?:? ?I@??? @z$??T?A?R????E?5hBB??5?A?R??????|"? ?X?????T @9?4????A?R????iA???c@?"?R??H@???`@????]p ???hA??c@???"?R??H@???c@??\ ???R"?R?@9h4@?R-????C?9???T @9i5i A???TiA??c@?"?R??@?R?hBBhB??{F??OE??WD??_C??gB??oA?????_?@?R??P? ?8?y#??{????R ?????#??{????!S0 ?????#??{????Tp ?????#?????O??{????@?8@?'??? QP ?7??{B??OA?????_?#??{????N0 ?Np ?NP ?B?R0?#??{????aL ?????#??{???? Q0 ??Kp ??PP ?b]?R?#??{?????N0 ո???#??{????N ղ???#??{????aMp լ????1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ??1?0@? ??1"?0@? ??1B?0@? ??1b?0@? ??1??0@? ??1??0@? ??1??0@? ??1??0@? ???0@? ??1?0@? ?@(#)PROGRAM:grep PROJECT:text_cmds-138.100.3 33333Ca@$FreeBSD$$FreeBSD$$FreeBSD$????????$FreeBSD$r(standard input)unknown %s optionusage: %s [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [--binary-files=value] [--color=when] [--context[=num]] [--directories=action] [--label] [--line-buffered] [--null] [pattern] [file ...] Binary file %s matches %s (BSD grep, GNU compatible) %s GREP_OPTIONS context argument must be non-negativeskipread--devicesrecurse--directories 2.6.0-FreeBSDbinarywithout-matchtext--binary-filesautottyif-ttyTERMdumb01;31alwaysyesforcenevernoneno--color%s-0123456789A:B:C:D:EFGHIJLMOSRUVXZabcd:e:f:hilm:nopqrsuvwxyzbinary-fileshelpmmapline-bufferedlabelnullcolorcolourexcludeincludeexclude-dirinclude-dirafter-contextbefore-contextbyte-offsetcontextcountdevicesdirectoriesextended-regexpregexpfixed-stringsfilebasic-regexpno-filenamewith-filenameignore-casebz2decompressfiles-with-matchesfiles-without-matchmax-countlzmaline-numberonly-matchingquietsilentrecursiveno-messagesunix-byte-offsetsinvert-matchversionword-regexpline-regexpxznull-datadecompressGREP_COLORstrdup.grep_treeutil.c0 && "Unreachable segment reached"fts_open%s: %swarning: %s: recursive directory loopfts_read%s:%u %s%cmalloccallocreallocmCproclinenst > st%d%lld--00PBHHauH hd??\??4??t? !L&l&H(,.?.0?1?12X2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?! ?" ?# ?$ ?% ?& ?' ?( ?) ?* ?+ ?, ?- ?. ?/ ?0 ?1 ?2 ?3?4 ?5 ?6 ?7 ?8 ?9 ?: ?; ?< ?= ?> ?? ?@ ?A ?@@@@@@@@|| ??| ??| ??| ??| ??| ??| ??| ??| ??| ??| ??| ??| A?{ a?| B?| b } C} c} D } d,} E<} eC} FQ} fV} Gc} ho} H}} i?} J?} l?} L?} m?} M?} n?} o?} q?} q?} r?} s?{ U ~ u~ v)~ V1~ w=~ xI~ XL~ zV~@Zs~ 0|?":{ z h?J0@ ?@ ?<Vr??????$4DVdv???????? :Tfv?????.>NZjv????????(4L\l???????6L`v?_BZ2_bzRead_BZ2_bzReadClose_BZ2_bzdopen___assert_rtn___error___maskrune___stack_chk_fail_basename_calloc_close_err_errx_exit_fclose_ferror_fileno_fnmatch_fopen_fprintf_fputs_free_fstat_fts_close_fts_open_fts_read_fts_set_fwrite_getenv_getline_getopt_long_getprogname_gzdopen_gzread_isatty_lseek_lzma_alone_decoder_lzma_code_lzma_stream_decoder_madvise_malloc_mbtowc_memchr_memcpy_mmap_munmap_open_printf_putchar_puts_read_realloc_regcomp_regerror_regexec_setlinebuf_setlocale_stat_strcasecmp_strcmp_strdup_strerror_strlen_strsep_strtoll_warn_warnx__DefaultRuneLocale___mb_cur_max___stack_chk_guard___stderrp___stdinp___stdoutp_optarg_optind__mh_execute_headerЄ???|?????p`??t??4? ?? X??@,,?<BEa$5BVdmy?????????????'.4;FPZcks|??????????? !'/7?HNT]fpy??????????? !"#$%&'()*+,-./01234589:;<=>?@ABCDEFGHIJK !"#$%&'()*+,-./01234589:;<=>?@ABCDEFGHIJK 67__mh_execute_header_BZ2_bzRead_BZ2_bzReadClose_BZ2_bzdopen__DefaultRuneLocale___assert_rtn___error___maskrune___mb_cur_max___stack_chk_fail___stack_chk_guard___stderrp___stdinp___stdoutp_basename_calloc_close_err_errx_exit_fclose_ferror_fileno_fnmatch_fopen_fprintf_fputs_free_fstat_fts_close_fts_open_fts_read_fts_set_fwrite_getenv_getline_getopt_long_getprogname_gzdopen_gzread_isatty_lseek_lzma_alone_decoder_lzma_code_lzma_stream_decoder_madvise_malloc_mbtowc_memchr_memcpy_mmap_munmap_open_optarg_optind_printf_putchar_puts_read_realloc_regcomp_regerror_regexec_setlinebuf_setlocale_stat_strcasecmp_strcmp_strdup_strerror_strlen_strsep_strtoll_warn_warnxradr://5614542?? ??$?2?? ??X? ?com.apple.bzfgrep??ŀ?b???r???JI?????$)???'?H?G??r??~??L??ٍ??J?z????j????Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,?C???1?PSi?e? ?rCTN?}?w?1Vធ@??xe??ؑ P?;Bh?`?r?;??Nĩ|DO????0')6??j?pϺ?#???KbO&?\???"??Vf#??֫D?#|?aX$Vٗ<(? ??\ ??@?d=?ǐ????%?B????`E㴭??Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,??ἱ??????1"w??B_Om??2?|??o???Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,????Xo??f????kOX?|?|z?ڽ?H?,??)rRE? }?~????{>|3??b????6$?? D?? 0com.apple.bzfgrep?? 0b10???!*?H??? *?H?? b0? *?H?? 0 UUS10U Apple Inc.1&0$U 261024173941Z01Apple Certification Authority10U 0 UUS10U Apple Inc.1&0$U Apple Certification Authority1301U ?0? *?H?? *Apple Code Signing Certification Authority0?"0 ???q?? ??]kY?Z?????9?#59H?!?'?? ?dk ???P??[?]?Te?s/b?8?drm|iGa?&???,$?j????̬)L?Iy?uv???? ?LSx??v????2ʑ?????9????j??f? K?;-???Ɉ-i¤*a/ۇ?!?L????-?r?n????̣@??Q????-???YN]e3'?g??$?LJy?]????>?H?$?m?0????ȧ???#?8?_a?????0??0U??0U% 0 ?ps??Rj?ީ*ѝv??i?????+??]p??<ZHG?9l??s?b:ʣZ??%J???s?s]???~??????Xn????O??????r2??'ިә?j??a?O??g?0??pleca/root.crl0 ??D?????yA???kg|?lI?L??jn??\8?0??0?g(??yڟ?;Qb;"?~S| 01 *?H?? ??M?ID??:[??鲷[R???X?r??̳?P???j?8?{y1?c?????m????/?oR????D?p??&w?0??0??d????9?0 0 UUS10U Apple Inc.1&0$U Apple Certification Authority1301U 261024173941Z0V1 *Apple Code Signing Certification Authority0 0 UUS10U Apple Inc.10U Apple Software10U ?0? *?H?? Software Signing0?"0 ??0?t?O? ??n1Tm ?<??9???`"]?䄢@A?d?`=?a?R?E'?,d???$ R:???Ax????x%???A??5?Q\??ѝq{?ɪK??ڏ?)?/?o??e??j?=hm?x¥/?2?~?]\?> ^????MA?J?k?EP?L??j'????<??R9????TR??/#Ve??*?Q?#?????՚??_??Glu?????z??bAt??4??Ztd9??9_0???[0?W0_ U?00U#0??i??wBN?VB?Q??? ? 0??U ??0??0?? *?H??cd0{0+0m kThis certificate is to be used exclusively for functions internal to Apple Products and/or Apple processes.0U%? 0 ?????6??f?s?#s????Z^?0O?%`?I1le.R6??nJfW?U?????u?[?e??(??iJɩ?? ??~?bA?????H?q????>??>??g??؝:????I???:?M},?}Č?[d??o\5?^O??Nף??}????_7?$E??????L4??0b1X3`o?*?H??H??kM??T15?9Hk??U?xN???Xo?Q??UA?iUܣ???4?Lڂ??B?2?7??????5?rV?0??0???0 0 UUS10U Apple Inc.1&0$U 350209214036Z0b1pple Certification Authority10U 0 UUS10U Apple Inc.1&0$U ?0?le Ro*?H??0?"0ple Certification Authority10U ?䑩 ??GP??^y?-?6?WLU????Kl??"0?>?P ?A?????f?$kУ????z ?d5#KY???????P??XPg? ?ˬ, op??0??C??=?+I(??ε??^??=?:??? ?G?[?73??M?i??r?]?_??%?U?M] ?b??q?GSU??/A????p??LE~LkP?A??tb ?!.t?< ?A?3???0X?Z2?h???es?g^e?I?v?3e?w??-??z0?v0U?0U?0?0U+?iG?v ??k?.@??G^0U#0?+?iG?v ??k?.@??G^0?U 0?0? *?H??cd0??0+https://www.apple.com/appleca/0?+0????Reliance on this certificate by any party assumes acceptance of the then applicable standard terms a?\6?L-x?팛??w??v?w0O????=G7?@?,Ա?ؾ?s???d?yO4آ>?x?k??}9??S ?8ı??Oice statements.0 ????/?Sj[d?c3w?:,V??!ںsO??6??U٧??2B???q?~?R??B$*??M?^c?K?P??????????DH?`7?uu!1??0??0??01 0 UUS10U Apple Inc.1&0$U Apple Certification Authority1301U 1?He???0 *?H?? *Apple Code Signing Certification Authoritd????9?0 220618011" ???̚?T??Q?ʟW?>??L&H??80< *?H??cd 1/0- `?He ???̚?T??Q?ʟW?>??L&H??80?) *?H??cd 1??<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>cdhashes</key> <array> <data> +5ipzJoXjFS91hJR88qfV+Q+8bs= </data> </array> </dict> </plist> 0 *?H?? ?4???a???bJ?Jy?? t.mQ[![?8'????KT ?O?+?[??}V??????=??j5? ? ??<??b??-???C]?Oe?L???3??%?^ɣF?[?w}w??nMx'J???IY????=i*J?g?K%???EP%α?B??5(&X?ZAғ?e?Cm???r??:?Kr?%wF?@?)?$?~?pQ?Y?#k?=:$n?r?F_?Ѩ9?)?j?4????C???V띛g?{?YWK%
polar_yogi
18.11.2022 15:24Скромно, но для начала неплохо. Дальше, чисто теоретически, можно узнать, что у вас ОС не Linux, и, соответственно, grep не GNU.
PS: выше, в посте от 11:32, написал текстом для простоты интерпретации в уме.
danslapman
17.11.2022 15:48+8Заходя в статью ожидал увидеть рекомендацию по использованию ripgrep вместо grep
Nixhibrid
17.11.2022 19:16+1Вот привыкаешь к новому быстро, а потом тебе приходится какой-нибудь древний кластер разгребать, который работал себе полтора десятка лет. Таким тупым себя начинаешь ощущать, а техника такая теплая и ламповая
technomancer
18.11.2022 00:16обратная ситуация. Меняю дистрибутив очень редко. На полевом ноутбуке вообще стоит 12.04. И каждый раз приходится, чертыхаясь, выяснять, что ещё в заботе обо мне у меня отобрали, и как теперь без этого обходиться. Как будто пришёл какой-то умник, переставил все привычные инструменты на полках, часть старых добрых гаечных ключей выкинул, "потому что древние", а вместо них напихал трансклюкаторов с километровыми инструкциями мелким текстом.
vodopad
17.11.2022 22:32+1Мне ss не нравится тем, что он включает выравнивание по ширине. Тем самым читать неудобно, много пустого места. Как-нибудь можно это выключить?
fk0
18.11.2022 00:26+2Как это nslookup не позволяет трансфер зоны? Что за чушь?
sysop@eris:~$ nslookup -query=NS example.com. Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: example.com nameserver = a.iana-servers.net. example.com nameserver = b.iana-servers.net. Authoritative answers can be found from: sysop@eris:~$ nslookup -query=AXFR a.iana-servers.ne. a.iana-servers.net Server: a.iana-servers.net Address: 199.43.135.53#53 ** server can't find a.iana-servers.ne: NOTAUTH ; Transfer failed
Другие типы запросов через -query тоже можно задавать, тот же NS, например. nslookup в первом приближении не хуже, чем dig.
AndreyKolesnikov Автор
18.11.2022 16:43+1Nslookup позволяет трансферы зон. Отличается формат вывода:
dig axfr myoffice-app.ru @ns.myoffice.ru.
... mail-ex.myoffice-app.ru. 300 IN A 10.20.30.40
nslookup -query=AXFR myoffice-app.ru ns.myoffice.ru
... Name: mail-ex.myoffice-app.ru Address: 10.160.101.217
У dig вывод сопоставим с форматом файла зоны BIND.
fk0
18.11.2022 00:31+1ifconfig был заменен на ip
Что значит был заменён? Он никуда не девался. И можно поставить и пользоваться ifconfig. Проблема ip -- что он сделан для роботов или иноплонетян и нормальные люди им пользоваться, в отличии от ifconfig, не могут. Вывод не читаемый, команды не запомнить и т.п.
С route аналогичная история. Он никуда не делся и есть на любом юниксе (а не линуксе).
И netstat -- та же самая история. Зачем нужны ни с чем несовместимые аналоги, которые непонятно как использовать -- не знаю. Всегда устанавливают старые утилиты. Потому, что 1) половина скриптов их всё равно требует, 2) сам руками без них работать не сможешь.
Новое вообще не всегда -- хорошее...
aim
18.11.2022 03:02+3Кирилл, ты чего?! ifconfig на линуксе устарел - он использует устаревшие системные вызовы и ты тупо можешь не увидеть часть информации которые покажет тебе
ip
иss
.
qrick
18.11.2022 16:07На практике замечено, что ss как минимум работает в разы (если не на порядки) быстрее, чем netstat при большом количестве открытых соединений
fk0
18.11.2022 00:35Есть действительно устаревшие программы, вроде which. Или type. Вот это действительно проблемные программы или команды (встроенные в шелл). Ибо у всех работают не пойми как и лучше использовать command -v.
impwx
18.11.2022 13:18+1Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.
Ничего универсального в текстовых потоках нет — наоборот, у каждой программы может быть свой произвольный вывод (таблица, текст, JSON, CSV, или что угодно еще), который нужно прилаживать к входу другой программы с помощью костылей из регулярок. Если программа обновится и будет выводить результаты в ином формате — все развалится.
У некоторых программ есть специальные аргументы, настраивающие формат вывода. Это еще один большой костыль, нарушающий идеологию "одна программа делает одну задачу".
Более перспективным решением, имхо, является взаимодействие между приложениями с помощью объектов или структур, как это делают nushell и powershell: это действительно универсальный интерфейс, форматирование реализовано один раз на уровне системы, можно делать осмысленный автокомплит вместо регулярок. Жаль, что пока они не особо популярны по историческим причинам
Devoter
20.11.2022 10:59Вам, батенька бы вникнуть в попытки решения подобной проблемы в NEXTStep задолго до появления этих ваших PowerShell, что не отменяет верности замечания. Идея использовать текстовый поток родом из 60-х годов прошлого века, не так уж удивительно, что решение неидеально и несколько устарело.
13werwolf13
пока писалась статья
dig
уже устарел и вместо него всё чаще предлагают использоватьdrill
mapnik
Она, вероятно, просто очень долго писалась.
Уже в Демосе админы (tasha@, кто помнит) смотрели в DNS dig'ом, а не nslookup'ом. А год был 94-й.
BTW, кто как смотрит счётчики пакетов и байт на интерфейсах без помощи ifconfig?
zstas
ip -s link show
добавлю от себя что еще есть утилита bridge в составе iproute2, если работаете с бриджами - мастхев (особенно чтобы смотреть bridge fdb).
mapnik
Спасибо!
ip -s a ls
оказалось ещё ближе к привычному.AndreyKolesnikov Автор
Будет интересно послушать о реальном опыте использования drill, в сравнении с dig.
13werwolf13
TLDR: никакой разницы достойной внимания.
skozharinov
А что с
dig
не так? Это же вроде часть BIND, он не заброшен, последний релиз меньше месяца назад, да и еслиdrill -h
иdig -h
сравнить, как-тоdrill
выглядит совсем печально.13werwolf13
А я не говорил что не так, просто часто вижу как в разных местах рекомендуют именно drill как более шустрый гладкий и шелковистый..
skozharinov
В общем я нашёл это и пару обсуждений о сборке dnsutils без BIND. Видимо, основной причиной является отсутствие необходимости собирать целый BIND для получения
dig
и итоговый вес (у меня на Fedora 37 bind-utils с bind-libs занимают 9 МБ, ldns-utils с ldns — чуть больше 1 МБ). И ещё видел утверждение, что ldns больше подходит для дебага BIND'а, т.к. не зависит от него.