Знание утилит, которые помогают работать с системой, — это, считай, гиковский аналог владения боевым искусством. В прошлой статье я собрал советы по настройке скрытых параметров и выбору программ для macOS, а в этой мы пойдем глубже и познакомимся с утилитами командной строки, большая часть которых уникальна для «мака». Одни помогут в диагностике системы, другие пригодятся при написании скриптов, третьи облегчат работу с терминалом.
Команда sysctl относится скорее к древней магии Unix, чем к macOS. Она отвечает за вывод и изменение параметров ядра. Набрав sysctl -ah
, ты увидишь более 1200 переменных. Считать одно значение можно, если ввести после команды его название, а с ключом -n
будет выведено только значение. Например, команда sysctl -n machdep.cpu.brand_string
выдает модель процессора.
Менять параметры можно, вводя команды вида sysctl kern.maxprocperuid=1000
(эта команда ограничит тысячей максимальное количество процессов, запущенных от одного пользователя), но, если не знаешь, что делаешь, рекомендую не баловаться с рабочей системой. В man ты найдешь таблицу, где перечислены основные параметры. Также мне попадалась интересная статья, в которой автор пишет обертку для sysctl
на Swift.
По каждой утилите есть подробнейшая справка в 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 как сервис.
Буквы sp в названии утилиты spctl происходят от слов system policy. Это интерфейс командной строки для Gatekeeper, механизма, который изо всех сил мешает запускать неподписанные приложения. Этим он спасает от шифровальщиков неопытных пользователей и, увы, немало раздражает опытных.
Чтобы посмотреть, работает ли Gatekeeper, пиши spctl --status
, пафосный ответ assessments enabled будет означать, что все под контролем. Если думаешь, что пора ослабить гайки, пиши sudo spctl --master-disable
, и Gatekeeper отключится. Когда закончишь с экспериментами, рекомендую вернуть все как было — для этого замени параметр на --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
задать метку или номер из предоставленного списка.
Команду 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 статей в месяц |
Уже подписан?
Читайте также
Последние новости