В разработке программного обеспечения все меняется с невероятной скоростью — в том числе инструменты, которые мы используем. Это происходит в результате совершенствования аппаратной части, инфраструктурных сред. Иногда старые инструменты плохо адаптируются к реалиям, поэтому они в конечном итоге исчезают, и на замену им приходят новые утилиты.

"Все новое — лучше, чем старое" — девиз, который не всегда применим для утилит в 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)


  1. 13werwolf13
    17.11.2022 13:47
    +17

    пока писалась статья dig уже устарел и вместо него всё чаще предлагают использовать drill


    1. mapnik
      17.11.2022 14:17
      +3

      Она, вероятно, просто очень долго писалась.
      Уже в Демосе админы (tasha@, кто помнит) смотрели в DNS dig'ом, а не nslookup'ом. А год был 94-й.

      BTW, кто как смотрит счётчики пакетов и байт на интерфейсах без помощи ifconfig?


      1. zstas
        17.11.2022 14:44
        +4

        ip -s link show

        добавлю от себя что еще есть утилита bridge в составе iproute2, если работаете с бриджами - мастхев (особенно чтобы смотреть bridge fdb).


        1. mapnik
          19.11.2022 04:27

          Спасибо!
          ip -s a ls оказалось ещё ближе к привычному.


    1. AndreyKolesnikov Автор
      18.11.2022 16:14
      +1

      Будет интересно послушать о реальном опыте использования drill, в сравнении с dig.


      1. 13werwolf13
        18.11.2022 16:30
        +1

        TLDR: никакой разницы достойной внимания.


    1. skozharinov
      19.11.2022 17:42

      А что с dig не так? Это же вроде часть BIND, он не заброшен, последний релиз меньше месяца назад, да и если drill -h и dig -h сравнить, как-то drill выглядит совсем печально.


      1. 13werwolf13
        19.11.2022 18:33
        +1

        А я не говорил что не так, просто часто вижу как в разных местах рекомендуют именно drill как более шустрый гладкий и шелковистый..


        1. skozharinov
          19.11.2022 19:02
          +1

          В общем я нашёл это и пару обсуждений о сборке dnsutils без BIND. Видимо, основной причиной является отсутствие необходимости собирать целый BIND для получения dig и итоговый вес (у меня на Fedora 37 bind-utils с bind-libs занимают 9 МБ, ldns-utils с ldns — чуть больше 1 МБ). И ещё видел утверждение, что ldns больше подходит для дебага BIND'а, т.к. не зависит от него.


  1. polar_yogi
    17.11.2022 13:51
    +9

    Попробуйте cat `which egrep` узнаете что-то новое.
    Про iproute2 даже на хабре была статья https://habr.com/ru/post/320278/
    И net-tools устарели не потому, что их перестали поддерживать, а их перестали поддерживать, потому что они используют устаревшие системные вызовы и не поддерживают новые возможности ядра linux.


    1. 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.


      1. polar_yogi
        17.11.2022 14:13
        +4

        $ cat /bin/egrep
        #!/bin/sh
        exec /bin/grep -E "$@"

        Имелось в виду вот что, и так уже лет 10 точно, а то и все 20.


        1. CrazyOpossum
          17.11.2022 23:02

          А, точно, cat не посмотрел. Да, у меня то же, плюс предупрежние что egrep устарел.


      1. GritsanY
        17.11.2022 15:26

        У вас шелл слишком умный, провалитесь в sh или bash


    1. vadimr
      17.11.2022 15:23

      Попробуйте cat `which egrep` узнаете что-то новое.

      Попробовал в SUSE – увидел содержимое бинарника. Попробовал в Astra Linux – увидел содержимое бинарника. Даже попробовал в macOS – увидел содержимое бинарника.

      Догадываюсь, на что вы намекаете, но это наблюдение не носит универсального характера. У вас, небось, и /bin/true через пустой скрипт сделано.


      1. polar_yogi
        17.11.2022 18:05
        +1

        Чего там намекать, в gnu grep, который используется в т.ч. в астре и сюзи написано в мейкфайле как получаются egrep и fgrep, вы-ж разработчик, посмотрите.
        Астра Орел есть под рукой, распаковал .deb, там бинарник grep и два скрипта для egrep/fgrep по 28 байт. Возможно, вам стоит разобраться, что за бинарники у вас вместо них.


      1. Semy
        17.11.2022 18:23
        +2

        Скорее всего, это хардлинки к grep.


      1. 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`


        1. 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


          1. 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. Или на что вы намекаете?


            1. vadimr
              18.11.2022 11:43

              Намекаю на то, что везде по-разному. И далеко не везде системные утилиты взяты из GNU.


              1. polar_yogi
                18.11.2022 12:10

                Ну вот я написал выше в чем разница.
                Если уж прям далеко - назовите 3 линукс дистрибутива где grep не GNU.


                1. Zolg
                  20.11.2022 02:46

                  назовите 3 линукс дистрибутива где grep не GNU.

                  Как минимум OpenWRT, Tiny Core, LTSP, thinSTATION и куча других, использующих busybox


                1. Pinkbyte
                  20.11.2022 10:54

                  Alpine Linux, например


        1. iig
          17.11.2022 22:29

          А вот печатать egrep удобнее, чем grep -E

          С fgrep то же самое. 8 нажатий на клавиши вместо 4 - офигительно удобное усовершенствование.


    1. 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% 


      1. polar_yogi
        18.11.2022 15:24

        Скромно, но для начала неплохо. Дальше, чисто теоретически, можно узнать, что у вас ОС не Linux, и, соответственно, grep не GNU.

        PS: выше, в посте от 11:32, написал текстом для простоты интерпретации в уме.


    1. fanV
      19.11.2022 16:55

      Ваш комментарий устарел :)

      Why is $(...) preferred over `...` (backticks)?


  1. danslapman
    17.11.2022 15:48
    +8

    Заходя в статью ожидал увидеть рекомендацию по использованию ripgrep вместо grep


  1. Anton_Gerasimov
    17.11.2022 18:06
    +10

    тру инженеры парсят /proc глазами :-)


    1. AndreyKolesnikov Автор
      18.11.2022 16:48
      +1

      а потом /dev/hands монтируют (:


  1. Nixhibrid
    17.11.2022 19:16
    +1

    Вот привыкаешь к новому быстро, а потом тебе приходится какой-нибудь древний кластер разгребать, который работал себе полтора десятка лет. Таким тупым себя начинаешь ощущать, а техника такая теплая и ламповая


    1. technomancer
      18.11.2022 00:16

      обратная ситуация. Меняю дистрибутив очень редко. На полевом ноутбуке вообще стоит 12.04. И каждый раз приходится, чертыхаясь, выяснять, что ещё в заботе обо мне у меня отобрали, и как теперь без этого обходиться. Как будто пришёл какой-то умник, переставил все привычные инструменты на полках, часть старых добрых гаечных ключей выкинул, "потому что древние", а вместо них напихал трансклюкаторов с километровыми инструкциями мелким текстом.


  1. vodopad
    17.11.2022 22:32
    +1

    Мне ss не нравится тем, что он включает выравнивание по ширине. Тем самым читать неудобно, много пустого места. Как-нибудь можно это выключить?


  1. 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.


    1. AndreyKolesnikov Автор
      18.11.2022 16:43
      +1

      Nslookup позволяет трансферы зон. Отличается формат вывода:

      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.


  1. fk0
    18.11.2022 00:31
    +1

    ifconfig был заменен на ip

    Что значит был заменён? Он никуда не девался. И можно поставить и пользоваться ifconfig. Проблема ip -- что он сделан для роботов или иноплонетян и нормальные люди им пользоваться, в отличии от ifconfig, не могут. Вывод не читаемый, команды не запомнить и т.п.

    С route аналогичная история. Он никуда не делся и есть на любом юниксе (а не линуксе).

    И netstat -- та же самая история. Зачем нужны ни с чем несовместимые аналоги, которые непонятно как использовать -- не знаю. Всегда устанавливают старые утилиты. Потому, что 1) половина скриптов их всё равно требует, 2) сам руками без них работать не сможешь.

    Новое вообще не всегда -- хорошее...


    1. aim
      18.11.2022 03:02
      +3

      Кирилл, ты чего?! ifconfig на линуксе устарел - он использует устаревшие системные вызовы и ты тупо можешь не увидеть часть информации которые покажет тебе ip и ss.


    1. qrick
      18.11.2022 16:07

      На практике замечено, что ss как минимум работает в разы (если не на порядки) быстрее, чем netstat при большом количестве открытых соединений


  1. fk0
    18.11.2022 00:35

    Есть действительно устаревшие программы, вроде which. Или type. Вот это действительно проблемные программы или команды (встроенные в шелл). Ибо у всех работают не пойми как и лучше использовать command -v.


  1. impwx
    18.11.2022 13:18
    +1

    Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.

    Ничего универсального в текстовых потоках нет — наоборот, у каждой программы может быть свой произвольный вывод (таблица, текст, JSON, CSV, или что угодно еще), который нужно прилаживать к входу другой программы с помощью костылей из регулярок. Если программа обновится и будет выводить результаты в ином формате — все развалится.


    У некоторых программ есть специальные аргументы, настраивающие формат вывода. Это еще один большой костыль, нарушающий идеологию "одна программа делает одну задачу".


    Более перспективным решением, имхо, является взаимодействие между приложениями с помощью объектов или структур, как это делают nushell и powershell: это действительно универсальный интерфейс, форматирование реализовано один раз на уровне системы, можно делать осмысленный автокомплит вместо регулярок. Жаль, что пока они не особо популярны по историческим причинам


    1. Devoter
      20.11.2022 10:59

      Вам, батенька бы вникнуть в попытки решения подобной проблемы в NEXTStep задолго до появления этих ваших PowerShell, что не отменяет верности замечания. Идея использовать текстовый поток родом из 60-х годов прошлого века, не так уж удивительно, что решение неидеально и несколько устарело.