Содержание статьи
- Настройка системы
- Смотрим и (не) меняем параметры ядра
- Запускаем всё на свете
- Работаем с Gatekeeper
- Меняем файлы конфигурации
- Настраиваем основные параметры системы
- Задаем сетевые настройки
- Управляем Wi-Fi
- Сбор диагностики
- Смотрим полную сводку о компьютере и программах
- Обращаемся к службе каталогов
- Рулим кешами Directory Services и смотрим список пользователей
- Читаем и (не) сбрасываем значения в NVRAM
- Изучаем статистику оперативной памяти
- Сбрасываем дисковый кеш в памяти
- Отслеживаем обращения к файловой системе, чтобы выявить проблемы
- Пользовательские утилиты
- Совершаем открытия
- Работаем с разделами диска
- Создаем и монтируем образы дисков, пишем CD и DVD
- Ищем файлы и смотрим метаданные
- Перехватываем трафик айфонов
- Конвертируем текст
- Воспроизводим и конвертируем аудио
- Работаем с изображениями
- Копируем каталоги по-маковски и пользуемся архиватором
- Используем синтезатор речи
- Делаем скриншоты
- Одной строкой
Настройка системы
Смотрим и (не) меняем параметры ядра
Команда 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»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»