Следующая новость
Предыдущая новость

Кунг-фу для маковода. Изучаем уникальные утилиты командной строки macOS

16.11.2017 13:26
Кунг-фу для маковода. Изучаем уникальные утилиты командной строки macOS

Содержание статьи

  • Настройка системы
  • Смотрим и (не) меняем параметры ядра
  • Запускаем всё на свете
  • Работаем с Gatekeeper
  • Меняем файлы конфигурации
  • Настраиваем основные параметры системы
  • Задаем сетевые настройки
  • Управляем Wi-Fi
  • Сбор диагностики
  • Смотрим полную сводку о компьютере и программах
  • Обращаемся к службе каталогов
  • Рулим кешами Directory Services и смотрим список пользователей
  • Читаем и (не) сбрасываем значения в NVRAM
  • Изучаем статистику оперативной памяти
  • Сбрасываем дисковый кеш в памяти
  • Отслеживаем обращения к файловой системе, чтобы выявить проблемы
  • Пользовательские утилиты
  • Совершаем открытия
  • Работаем с разделами диска
  • Создаем и монтируем образы дисков, пишем CD и DVD
  • Ищем файлы и смотрим метаданные
  • Перехватываем трафик айфонов
  • Конвертируем текст
  • Воспроизводим и конвертируем аудио
  • Работаем с изображениями
  • Копируем каталоги по-маковски и пользуемся архиватором
  • Используем синтезатор речи
  • Делаем скриншоты
  • Одной строкой

Знание утилит, которые помогают работать с системой, — это, считай, гиковский аналог владения боевым искусством. В прошлой статье я собрал советы по настройке скрытых параметров и выбору программ для macOS, а в этой мы пойдем глубже и познакомимся с утилитами командной строки, большая часть которых уникальна для «мака». Одни помогут в диагностике системы, другие пригодятся при написании скриптов, третьи облегчат работу с терминалом.

Настройка системы

Смотрим и (не) меняем параметры ядра

Команда sysctl относится скорее к древней магии Unix, чем к macOS. Она отвечает за вывод и изменение параметров ядра. Набрав sysctl -ah, ты увидишь более 1200 переменных. Считать одно значение можно, если ввести после команды его название, а с ключом -n будет выведено только значение. Например, команда sysctl -n machdep.cpu.brand_string выдает модель процессора.

И это только самый-самый конец списка

Менять параметры можно, вводя команды вида sysctl kern.maxprocperuid=1000 (эта команда ограничит тысячей максимальное количество процессов, запущенных от одного пользователя), но, если не знаешь, что делаешь, рекомендую не баловаться с рабочей системой. В man ты найдешь таблицу, где перечислены основные параметры. Также мне попадалась интересная статья, в которой автор пишет обертку для sysctl на Swift.

Кунг-фу для маковода. Изучаем уникальные утилиты командной строки macOS

INFO

По каждой утилите есть подробнейшая справка в man. Тебе нужны версии из разделов (1) или (8) для использования из командной строки и (3) — для вызова в качестве функций. Кстати, man удобно читать, если написать название команды в поисковой строке Help в стандартном «Терминале», — вывод man откроется в новом окне с приятным желтым фоном.

Запускаем всё на свете

Если ты достаточно долго имел дело с «маками», то наверняка сталкивался с launchctl. Это интерфейс к системе launchd, которая начиная с Mac OS X 10.4 (Tiger) пришла на смену длинному списку утилит, позаимствованных из FreeBSD (среди них — init, rc, cron и другие). Примечательно, что launchd теперь есть и в BSD, а для Linux был разработан схожий лаунчер — systemd, который вошел во многие современные дистрибутивы.

На первый взгляд launchd делает очень простую вещь — запускает и останавливает процессы, руководствуясь условиями, описанными в конфигурационных файлах. Ты найдешь их в ~/Library/LaunchAgents, /Library/LaunchAgents и /Library/LaunchDaemons (такие же папки есть в /System/Library/, скрипты в них отвечают за работу частей самой macOS). Отличие демонов от агентов в том, что демоны запускаются от имени системы, а агенты — от имени пользователя.

В перечисленных папках лежат файлы .plist — то есть XML с описаниями условий запуска. Эти условия могут быть очень разными, что делает launchd крайне гибкой системой. Например, процессы можно запускать и останавливать по времени подобно cron, при определенных изменениях в файловой системе (например, когда в каталоге появляется новый файл или когда монтируется носитель), в ответ на сетевой вызов и так далее.

При помощи launchtl enable <название_сервиса> и launchtl disable <название_сервиса> ты можешь активировать и деактивировать запуск системных или собственных скриптов. В руководствах также попадается старый вариант — load и unload, он тоже работает. Еще полезно знать о командах launchctl list (вывод названий всех сервисов) и launchctl kickstart — немедленный запуск, независимо от настроек.

Кунг-фу для маковода. Изучаем уникальные утилиты командной строки macOS

Подробнее о launchd читай в официальной документации, на сайте launchd.info или вкратце — в блоге Пола Ансли. Для создания конфигурационных файлов есть пара графических оболочек — LaunchControl и Lingon (обе платные). Еще есть утилита командной строки lunchy, которая слегка упрощает управление.

Если тебе лень ковыряться со всем этим добром, можешь использовать старый добрый cron. Занятный факт: когда ты создашь файл crontab командой crontab -e, launchd запустит cron как сервис.

Работаем с Gatekeeper

Буквы sp в названии утилиты spctl происходят от слов system policy. Это интерфейс командной строки для Gatekeeper, механизма, который изо всех сил мешает запускать неподписанные приложения. Этим он спасает от шифровальщиков неопытных пользователей и, увы, немало раздражает опытных.

Чтобы посмотреть, работает ли Gatekeeper, пиши spctl --status, пафосный ответ assessments enabled будет означать, что все под контролем. Если думаешь, что пора ослабить гайки, пиши sudo spctl --master-disable, и Gatekeeper отключится. Когда закончишь с экспериментами, рекомендую вернуть все как было — для этого замени параметр на --master-enable.

Посмотреть список разрешенных приложений можешь командой spctl --list, а чтобы не листать стену текста и видеть только то, что сам разрешил в диалоговом окне, можешь пофильтровать по отсутствию метки: spctl --list | grep UNLABELED.

Кунг-фу для маковода. Изучаем уникальные утилиты командной строки macOS

Собственно, для ручного добавления приложений в список существует хитрая двухступенчатая схема с метками. Сначала добавляешь приложение и задаешь ему метку:

spctl --add --label "Approved" <файл приложения> 

А затем разрешаешь все приложения с этой меткой:

spctl --enable --label "Approved" 

После этого можно добавлять метки к новым программам, и они автоматически будут занесены в белый список. Точно так же можно разом отозвать разрешение. Подробнее об этом читай на сайте The Instructional, откуда я брал примеры.

Меняем файлы конфигурации

Об утилите defaults я подробно писал в статье «Обвес macOS». Если вкратце, то она отвечает за чтение и изменение конфигурационных файлов, которые лежат в папках Preferences в системной, общей и частных Library.

Кунг-фу для маковода. Изучаем уникальные утилиты командной строки macOS

С точки зрения defaults настройки разделены на домены — посмотреть их список ты можешь командой defaults domains, а вывести переменные в домене — defaults read <название_домена>. Значения переменных можно менять командой

defaults write <домен> <переменная> -<тип> <значение> 

Примеры переменных опять же смотри в прошлой статье или в коллекции Кевина Саттла, на которую я уже не раз ссылался.

Настраиваем основные параметры системы

Утилита systemsetup предназначена для настройки самых базовых вещей вроде даты и времени или таймера режима сна. Если вызывать systemsetup без параметров, то она войдет в интерактивный режим. Ничего особенно полезного здесь нет. Отдельного упоминания заслуживает разве что параметр для активации демона SSH:

sudo systemsetup -setremotelogin on 

А еще systemsetup побеждает в номинации «самый длинный параметр» — это -setdisablekeyboardwhenenclosurelockisengaged, он разрешает блокировать клавиатуру сервера, когда тот находится в стойке. А что, не так уж сложно запомнить!

Задаем сетевые настройки

В паре с systemsetup идет networksetup, менеджер сетевых настроек. Интерактивного режима у него нет, поскольку для пользователя он не несет никакой ценности: все то же самое можно настроить в разделе «Сеть» из «Системных настроек». Зато дергать networksetup из скриптов или удаленно — самое то. Например, команда networksetup -listnetworkserviceorder выведет список конфигураций. Да, похоже, параметры придумывал тот же весельчак, что поработал над systemsetup.

Кстати, за выбор конфигурации отвечает другая утилита — scselect. Без параметров она выведет список, а для выбора можно после scselect задать метку или номер из предоставленного списка.

Управляем Wi-Fi

Команду airport можно по праву считать секретной — если ты попытаешься просто вызвать ее из терминала, то ничего не выйдет. Дело в том, что она скрыта глубоко в системе, и сначала нужно вытащить ее на свет божий. Сделать это можно командой

sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport 

Теперь ты можешь в любой момент набрать airport -s, и встроенный адаптер Wi-Fi проведет быстрое сканирование и выдаст список сетей с указанием BSSID, способа шифрования и прочих характеристик. Подробности о текущем подключении ты можешь узнать, набрав airport -I, а sudo airport -z разорвет его.

Продолжение статьи доступно только подписчикам

Cтатьи из последних выпусков журнала можно покупать отдельно только через два месяца после публикации. Чтобы читать эту статью, необходимо купить подписку.

Подпишись на журнал «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

4790 р.

Экономия 1400 рублей!

1 месяц

515 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости