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

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

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

 

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

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

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

Менять параметры можно, вводя команды вида

sysctl kern.maxprocperuid=1000

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

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 — немедленный запуск, независимо от настроек.


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

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

 

Работаем с Gatekeeper

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

Чтобы посмотреть, работает ли Gatekeeper, пиши

spctl --status

Пафосный ответ assessments enabled будет означать, что все под контролем. Если думаешь, что пора ослабить гайки и отключить Gatekeeper, пиши

sudo spctl --master-disable

Когда закончишь с экспериментами, рекомендую вернуть все как было — для этого замени параметр на --master-enable.

Посмотреть список разрешенных приложений можешь командой

spctl --list

А чтобы не листать стену текста и видеть только то, что сам разрешил в диалоговом окне, можешь пофильтровать по отсутствию метки:

spctl --list | grep UNLABELED

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

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

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

spctl --enable --label "Approved"

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

 

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

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


С точки зрения 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 разорвет его.

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    6 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии