Составленный список команд оболочки и инструментов, специфичных для macOS.
“Вам не нужно знать все. Вам просто нужно знать, где найти это, когда это необходимо.” (Джон Браннер)
Не вся информация, представленная в этом списке, всегда актуальна для последних версий операционных систем. Apple действительно поддерживает устройства в продолжительный период времени, но их покупка также обходится дорого. В настоящее время у меня нет возможности заменить свой ноутбук MacBook Pro Mid-2014 15", и он не поддерживает версию Monterey и выше. С одной стороны, факт того, что этот аппарат до сих пор работает в основном безупречно, свидетельствует о качестве его аппаратной и сборочной составляющей. С другой стороны, тот факт, что моя старая версия ОС скоро перестанет получать обновления безопасности и исправления ошибок, вызывает некоторую тревогу. И это непосредственно влияет на мою способность предоставлять своевременные обновления.
Так что, возможно, кто-то из Apple прочитает это и сможет что-то сделать с этой ситуацией.
Кроме того, глядя на почти 26 тысяч звездочек на GitHub для этого репозитория, если только около 14% людей, для которых эти ресурсы полезны, поддержат меня одноразовым взносом в размере одного евро, я смогу приобрести новое устройство, которое, возможно, прослужит еще восемь лет. Это не то, на что я ожидаю или думаю, что мне полагается. Это полностью моя проблема. Все равно, стоит об этом подумать.
Кроме того, в настоящее время у меня нет работы, у меня мало перспектив, мало денег, и я прохожу через тяжелое время. Чтобы помочь мне, самый легкий способ - спонсировать меня через GitHub, как регулярно, так и разово. Каждая маленькая помощь важна. Благодарю за ваше рассмотрение.
https://github.com/herrbischoff
Вы всегда можете присылать мне патчи с изменениями и дополнениями по электронной почте. Если вы не знакомы с процессом работы git am
, вы можете найти простое введение в него здесь: https://git-send-email.io
Здесь действительно есть только одна вещь, которую я хотел бы отметить: man
pages. Man
pages. Man
pages. Хорошо, три вещи. Но одна из них кажется настолько важной, что я должен упомянуть её несколько раз. Если вы ещё этого не делаете, стоит привыкнуть консультироваться с страницами справки (man pages) перед тем, как искать информацию где-либо ещё. Страницы справки в стиле Unix - отличный источник документации. Даже для команды man
есть своя страница справки:
man man
Это также объясняет, на что указывают числа в страницах руководства, например, как man(1)
.
# Разрешено
defaults write -g NSAlertMetricsGatheringEnabled -bool false
# Запрещено (По умолчанию)
defaults delete -g NSAlertMetricsGatheringEnabled
Это полезно для старых приложений, которые работают нормально, но не были обновлены для правильной работы в темном режиме. Замените имя приложения Notes
на фактическое приложение, которое вы хотите настроить.
# Разрешено
defaults write $(osascript -e 'id of app "Notes"') NSRequiresAquaSystemAppearance -bool true
# Запрещено (По умолчанию)
defaults delete $(osascript -e 'id of app "Notes"') NSRequiresAquaSystemAppearance
В macOS 11 (Big Sur) прокси-иконка документа была скрыта по умолчанию. Это восстанавливает прежнее всегда видимое состояние.
# Разрешено
defaults write -g NSToolbarTitleViewRolloverDelay -float 0
# Запрещено (По умолчанию)
defaults delete -g NSToolbarTitleViewRolloverDelay
Также, вы можете установить флаг доступности.
# Разрешено
defaults write com.apple.universalaccess showWindowTitlebarIcons -bool true
# Запрещено (По умолчанию)
defaults write com.apple.universalaccess showWindowTitlebarIcons -bool true
Настройка присутствует с версии macOS 10.14 (Mojave).
# Разрешено
defaults write -g CGFontRenderingFontSmoothingDisabled -bool false
# Запрещено (По умолчанию)
defaults write -g CGFontRenderingFontSmoothingDisabled -bool true
# Для конкретного приложения
defaults write com.apple.textedit CGFontRenderingFontSmoothingDisabled -bool false
# Запретить для конкретного приложения
defaults delete com.apple.textedit CGFontRenderingFontSmoothingDisabled
# Уменьшить прозрачность
defaults write com.apple.universalaccess reduceTransparency -bool true
# Восстановить прозрачность по умолчанию
defaults write com.apple.universalaccess reduceTransparency -bool false
# До версии OS X 10.8 (Mountain Lion)
osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/path/to/picture.jpg"'
# Начиная с OS X 10.9 (Mavericks)
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/path/to/picture.jpg'" && killall Dock
# Через find
find /Applications -path '*Contents/_MASReceipt/receipt' -maxdepth 4 -print |\sed 's#.app/Contents/_MASReceipt/receipt#.app#g; s#/Applications/##'
# Через Spotlight
mdfind kMDItemAppStoreHasReceipt=1
Работает до ОС X 10.10 (Yosemite).
# Разрешено
defaults write com.apple.appstore ShowDebugMenu -bool true
# Запрещено (По умолчанию)
defaults write com.apple.appstore ShowDebugMenu -bool false
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -help
# Активация и перезапуск агента ARD и помощника ARD
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -restart -agent -console
# Отключение и остановка службы удаленного управления.
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -stop
# Разрешить доступ для всех пользователей и предоставить всем пользователям полный доступ
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -configure -allowAccessFor -allUsers -privs -all
# Запрещение ARD Agent и удаление прав доступа для всех пользователей. (По умолчанию)
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -configure -access -off
sudo rm -rf /var/db/RemoteManagement ; \
sudo defaults delete /Library/Preferences/com.apple.RemoteDesktop.plist ; \
defaults delete ~/Library/Preferences/com.apple.RemoteDesktop.plist ; \
sudo rm -r /Library/Application\ Support/Apple/Remote\ Desktop/ ; \
rm -r ~/Library/Application\ Support/Remote\ Desktop/ ; \
rm -r ~/Library/Containers/com.apple.RemoteDesktop
# Разрешено
defaults write com.apple.addressbook ABShowDebugMenu -bool true
# Запрещено (По умолчанию)
defaults write com.apple.addressbook ABShowDebugMenu -bool false
~/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/ksinstall --nuke
Работает до версии OS X 10.10 (Yosemite). Версия OS X 10.11 (El Capitan) ввела Защиту системной целостности (System Integrity Protection), которая предотвращает выгрузку системных агентов запуска.
# Прекратить реагирование на нажатия мультимедийных клавиш
launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist
# Реагировать на нажатия мультимедийных клавиш (по умолчанию)
launchctl load -w /System/Library/LaunchAgents/com.apple.rcd.plist
Начиная с OS X 10.11 (El Capitan), вы можете либо отключить SIP, либо воспользоваться своеобразным хаком, который сделает iTunes недоступным для любого пользователя, эффективно предотвращая его запуск или запуск его помощников. Обратите внимание, что на практике это повредит вашу установку iTunes и может конфликтовать с обновлениями операционной системы в будущем.
sudo chmod 0000 /Applications/iTunes.app
defaults write com.apple.mail DisableInlineAttachmentViewing -bool true
Приведенный ниже код AppleScript закроет приложение “Почта”, выполнит вакуумирование индекса SQLite, а затем снова откроет “Почту”. На большой базе данных электронной почты, которая давно не оптимизировалась, это может значительно улучшить отзывчивость и скорость работы.
(*
Ускорьте работу Mail.app, выполнив вакуумирование Envelope Index
Код взят с сайта: http://web.archive.org/web/20071008123746/http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/
Первоначально создан "pmbuko" с модификациями от Romulo
Обновлен Brett Terpstra 2012
Обновлен Mathias Törnblom 2015 для поддержки V3 в El Capitan и сохранения обратной совместимости
Обновлен Andrei Miclaus 2017 для поддержки V4 в Sierra
*)
tell application "Mail" to quit
set os_version to do shell script "sw_vers -productVersion"
set mail_version to "V2"
considering numeric strings
if "10.10" <= os_version then set mail_version to "V3"
if "10.12" <= os_version then set mail_version to "V4"
if "10.13" <= os_version then set mail_version to "V5"
if "10.14" <= os_version then set mail_version to "V6"
if "10.15" <= os_version then set mail_version to "V7"
if "11" <= os_version then set mail_version to "V8"
end considering
set sizeBefore to do shell script "ls -lnah ~/Library/Mail/" & mail_version & "/MailData | grep -E 'Envelope Index$' | awk {'print $5'}"
do shell script "/usr/bin/sqlite3 ~/Library/Mail/" & mail_version & "/MailData/Envelope\\ Index vacuum"
set sizeAfter to do shell script "ls -lnah ~/Library/Mail/" & mail_version & "/MailData | grep -E 'Envelope Index$' | awk {'print $5'}"
display dialog ("Mail index before: " & sizeBefore & return & "Mail index after: " & sizeAfter & return & return & "Enjoy the new speed!")
tell application "Mail" to activate
Так как вышеуказанный AppleScript в основном все равно использует команды оболочки, вот версия того же функционала в виде скрипта оболочки. Он может использоваться с Big Sur и более новыми версиями. Вы можете прислать патч для более новых систем. У меня в настоящее время нет денег на машину, способную работать под macOS 12+.
#!/bin/zsh
#
# Ускорьте работу Mail.app, выполнив вакуумирование индекса конвертов
# Написано Марселем Бисхоффом
# Оригинальный AppleScript от "pmbuko" с модификациями от Ромуло
#
OS_VERSION=$(sw_vers -productVersion | cut -d. -f 1,2)
MAIL_RUNNING=$(ps aux | grep -v grep | grep -c "Mail\$")
MAIL_VERSION="V2"
if [ $MAIL_RUNNING -gt 0 ]; then osascript -e 'tell application "Mail" to quit'; fi
if [ 1 -eq "$(echo "11 <= ${OS_VERSION}" | bc)" ]; then MAIL_VERSION="V8"; fi
SIZE_BEFORE=$(ls -lnah ~/Library/Mail/${MAIL_VERSION}/MailData | grep -E 'Envelope Index$' | awk {'print $5'})
/usr/bin/sqlite3 ~/Library/Mail/${MAIL_VERSION}/MailData/Envelope\ Index vacuum
SIZE_AFTER=$(ls -lnah ~/Library/Mail/${MAIL_VERSION}/MailData | grep -E 'Envelope Index$' | awk {'print $5'})
printf "Mail index before: %s\nMail index after: %s\n" $SIZE_BEFORE $SIZE_AFTER
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2StandardFontFamily Georgia
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultFontSize 16
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2FixedFontFamily Menlo
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DefaultFixedFontSize 14
# Разрешено
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true && \
defaults write com.apple.Safari IncludeDevelopMenu -bool true && \
defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true && \
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true && \
defaults write -g WebKitDeveloperExtras -bool true
# Запрещено (По умолчанию)
defaults delete com.apple.Safari IncludeInternalDebugMenu && \
defaults delete com.apple.Safari IncludeDevelopMenu && \
defaults delete com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey && \
defaults delete com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled && \
defaults delete -g WebKitDeveloperExtras
Другие варианты: get source
, get text
.
osascript -e 'tell application "Safari" to get URL of current tab of front window'
# Разрешено
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool true
# Запрещено (По умолчанию)
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool false
defaults write com.bohemiancoding.sketch3 exportCompactSVG -bool true
Убирает диалоговое окно и устанавливает автоматическую перезагрузку по умолчанию.
defaults write -app Skim SKAutoReloadFileUpdate -boolean true
# Разрешено
defaults write com.apple.Terminal FocusFollowsMouse -string true
# Запрещено (По умолчанию)
defaults write com.apple.Terminal FocusFollowsMouse -string false
defaults write com.apple.TextEdit NSShowAppCentricOpenPanelInsteadOfUntitledFile -bool false
defaults write com.apple.TextEdit RichText -int 0
# Разрешено
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
# Запрещено (По умолчанию)
defaults delete com.microsoft.VSCode ApplePressAndHoldEnabled
Настройка, присутствующая с версии macOS 10.14 (Mojave). См. также системную настройку: Субпиксельное сглаживание
# Разрешено
defaults write com.microsoft.VSCode CGFontRenderingFontSmoothingDisabled -bool false && \
defaults write com.microsoft.VSCode.helper CGFontRenderingFontSmoothingDisabled -bool false && \
defaults write com.microsoft.VSCode.helper.EH CGFontRenderingFontSmoothingDisabled -bool false && \
defaults write com.microsoft.VSCode.helper.NP CGFontRenderingFontSmoothingDisabled -bool false
# Запрещено (По умолчанию)
defaults delete com.microsoft.VSCode CGFontRenderingFontSmoothingDisabled && \
defaults delete com.microsoft.VSCode.helper CGFontRenderingFontSmoothingDisabled && \
defaults delete com.microsoft.VSCode.helper.EH CGFontRenderingFontSmoothingDisabled && \
defaults delete com.microsoft.VSCode.helper.NP CGFontRenderingFontSmoothingDisabled
# Разрешено
sudo tmutil enable
# Запрещено
sudo tmutil disable
# Начать резервное копирование немедленно
tmutil startbackup
# Остановить резервное копирование немедленно
tmutil stopbackup
Это изменяет интервал на 30 минут. Целочисленное значение представляет время в секундах.
sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int 1800
sudo tmutil addexclusion /path/to/file/or/folder
Создает ли Time Machine локальные резервные копии, когда том резервных копий Time Machine недоступен.
# Статус
defaults read /Library/Preferences/com.apple.TimeMachine MobileBackups
# Разрешено (По умолчанию)
sudo tmutil enablelocal
# Запрещено
sudo tmutil disablelocal
Начиная с macOS 10.13 (High Sierra), вы не можете отключить локальные снимки. Теперь Time Machine всегда создает локальный снимок APFS и использует этот снимок в качестве источника данных для создания обычной резервной копии, вместо использования живого диска в качестве источника, как это происходит с дисками в формате HFS.
# Информация
tmutil destinationinfo
# Удалить текущий пункт назначения
tmutil removedestination
# Установить физический диск в качестве пункта назначения
tmutil setdestination /path/to/volume/or/volume/name
# Установить сетевой пункт назначения
tmutil setdestination -p smb://10.20.30.40/share
sudo defaults write /Library/Preferences/com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
Этот небольшой скрипт выведет последние 12 часов активности Time Machine, за которыми последует текущая активность.
#!/bin/sh
filter='processImagePath contains "backupd" and subsystem beginswith "com.apple.TimeMachine"'
# show the last 12 hours
start="$(date -j -v-12H +'%Y-%m-%d %H:%M:%S')"
echo ""
echo "[History (from $start)]"
echo ""
log show --style syslog --info --start "$start" --predicate "$filter"
echo ""
echo "[Following]"
echo ""
log stream --style syslog --info --predicate "$filter"
# Статус
sudo defaults read /Library/Preferences/com.apple.TimeMachine RequiresACPower
# Разрешено (По умолчанию)
sudo defaults write /Library/Preferences/com.apple.TimeMachine RequiresACPower -bool true
# Запрещено
sudo defaults write /Library/Preferences/com.apple.TimeMachine RequiresACPower -bool false
# Список всех резервных копий
tmutil listbackups
# Показать различия
tmutil calculatedrift /path/to/backup/folder/plus/machine/name/folder
С версии OS X 10.11 Time Machine записывает контрольные суммы файлов, скопированных в снимки. Контрольные суммы не вычисляются в обратном порядке для файлов, скопированных ранее версиями OS X.
sudo tmutil verifychecksums /path/to/backup
xcode-select --install
xcrun simctl delete unavailable
Устарело с macOS 10.14 (Mojave). См. Показать последние приложения.
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }' && \
killall Dock
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = {}; "tile-type"="small-spacer-tile"; }' && \
killall Dock
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}' && \
killall Dock
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="small-spacer-tile";}' && \
killall Dock
# Разрешено (по умолчанию)
defaults write com.apple.dock mru-spaces -bool true && \
killall Dock
# Запрещено
defaults write com.apple.dock mru-spaces -bool false && \
killall Dock
# Разрешено
defaults write com.apple.dock autohide -bool true && \
killall Dock
# Запрещено (по умолчанию)
defaults write com.apple.dock autohide -bool false && \
killall Dock
Глобальная настройка, указывающая, должны ли значки на панели задач дергаться, когда соответствующее приложение требует вашего внимания.
# Разрешено (по умолчанию)
defaults write com.apple.dock no-bouncing -bool true && \
killall Dock
# Запрещено
defaults write com.apple.dock no-bouncing -bool false && \
killall Dock
# Разрешено
defaults write com.apple.Dock size-immutable -bool true && \
killall Dock
# Запрещено (по умолчанию)
defaults write com.apple.Dock size-immutable -bool false && \
killall Dock
defaults delete com.apple.dock && \
killall Dock
Полностью измените размер панели задач. Чтобы изменить размер, замените значение 0
на целое число.
defaults write com.apple.dock tilesize -int 0 && \
killall Dock
Используйте свой сенсорный пад или колесо мыши для взаимодействия с элементами на панели задач. Это позволяет использовать жест прокрутки вверх для открытия стеков. Тот же жест на работающие приложения вызывает Exposé/Mission Control.
# Разрешено
defaults write com.apple.dock scroll-to-open -bool true && \
killall Dock
# Запрещено (по умолчанию)
defaults write com.apple.dock scroll-to-open -bool false && \
killall Dock
Десятичное число задает задержку показа/скрытия в мс.
# Настройка на показ реакции на малейший толчок
defaults write com.apple.dock autohide-time-modifier -float 0.4 && \
defaults write com.apple.dock autohide-delay -float 0 && \
killall Dock
# Восстановление по умолчанию
defaults delete com.apple.dock autohide-time-modifier && \
defaults delete com.apple.dock autohide-delay && \
killall Dock
# Разрешено
defaults write com.apple.dock showhidden -bool true && \
killall Dock
# Запрещено (по умолчанию)
defaults write com.apple.dock showhidden -bool false && \
killall Dock
# Разрешено
defaults write com.apple.dock static-only -bool true && \
killall Dock
# Запрещено (по
умолчанию)
defaults write com.apple.dock static-only -bool false && \
killall Dock
Настройка присутствует с macOS 10.14 (Mojave).
# Запрещено
defaults write com.apple.dock show-recents -bool false && \
killall Dock
# Разрешено (по умолчанию)
defaults write com.apple.dock show-recents -bool true && \
killall Dock
При щелчке по значку приложения на панели задач соответствующие окна будут переведены на передний план, но все окна других приложений будут скрыты.
# Разрешено
defaults write com.apple.dock single-app -bool true && \
killall Dock
# Запрещено (по умолчанию)
defaults write com.apple.dock single-app -bool false && \
killall Dock
Поддерживаются форматы: обычный текст, формат RTF (rich text) и Microsoft Word (doc/docx).
textutil -convert html file.ext
Создает пустой тестовый файл объемом 10 гигабайт.
mkfile 10g /path/to/file
Оставлять это включенным бессмысленно, когда вы используете SSD-накопители.
sudo pmset -a sms 0
Единственный надежный способ сделать это - отправить команду AppleScript в Finder.
osascript -e 'tell application "Finder" to eject (every disk whose ejectable is true)'
Для этого не обязательно использовать графический интерфейс Дисковой Утилиты.
sudo diskutil repairPermissions /
Начиная с OS X 10.11 (El Capitan), разрешения на системные файлы автоматически защищены. Больше не требуется проверять или восстанавливать разрешения с помощью Дисковой Утилиты. (Источник)
# До OS X 10.10 (Yosemite)
bless --mount "/path/to/mounted/volume" --setBoot
# Начиная с OS X 10.11 (El Capitan)
sudo systemsetup -setstartupdisk /System/Library/CoreServices
diskutil list
Непрерывный поток информации о доступе к файловой системе.
sudo fs_usage
Присутствует с macOS 10.13 (High Sierra). Нет центральной утилиты, и использование несогласовано, так как большая часть функциональности включена в tmutil
.
/System/Library/Filesystems/apfs.fs/Contents/Resources/hfs_convert /путь/к/файловой/системе
/System/Library/Filesystems/apfs.fs/Contents/Resources/newfs_apfs /путь/к/устройству
tmutil localsnapshot
tmutil deletelocalsnapshots com.apple.TimeMachine.2018-01-26-044042
tmutil listlocalsnapshots /
Снимки доступны только для чтения.
mkdir ~/mnt
/System/Library/Filesystems/apfs.fs/Contents/Resources/mount_apfs -s com.apple.TimeMachine.2018-01-26-044042 / ~/mnt
hdiutil create -volname "Имя тома" -srcfolder /путь/к/папке -ov diskimage.dmg
Если вы хотите зашифровать образ диска:
hdiutil create -encryption -stdinpass -volname "Имя тома" -srcfolder /путь/к/папке -ov encrypted.dmg
По умолчанию вы будете приглашены ввести пароль. Вы можете автоматизировать это, передавая пароль в поток:
echo -n YourPassword | hdiutil create -encryption -stdinpass -volname "Имя тома" -srcfolder /путь/к/папке -ov encrypted.dmg
Эта команда применяется к образам .iso, .img и .dmg.
hdiutil burn /путь/к/файлу_образа
Диск поддерживается физической оперативной памятью и будет работать в несколько раз быстрее, чем SSD. Содержимое диска не может быть восстановлено после его извлечения. Пример ниже для 500 MiB оперативного диска, настройте по необходимости.
# Для macOS 10.14 (Mojave)
let DISKSIZE=500*2048 && \
diskutil erasevolume HFS+ "RAM Disk" `hdiutil attach -nomount ram://$DISKSIZE`
# Для macOS 10.15 (Catalina) и выше
let "DISKSIZE = 500*2048" && \
diskutil erasevolume HFS+ "RAM Disk" `hdiutil attach -nomount ram://$DISKSIZE`
defaults write com.apple.frameworks.diskimages skip-verify -bool true && \
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true && \
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
bless --folder "/путь/к/подключенному/тому/System/Library/CoreServices" --bootinfo --bootefi
hdiutil attach /путь/к/образу_диска.dmg
hdiutil detach /dev/disk2s1
Аналог функции “Восстановить” в Утилите диска.
sudo asr -restore -noverify -
source /путь/к/образу_диска.dmg -target /Volumes/ТомДляВосстановления
Внешние жесткие диски, флеш-накопители и т. д.
# Разрешено
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true && \
killall Finder
# Запрещено (по умолчанию)
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool false && \
killall Finder
Встроенные жесткие диски или твердотельные накопители.
# Разрешено
defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true && \
killall Finder
# Запрещено (по умолчанию)
defaults write com.apple.finder ShowHardDrivesOnDesktop -bool false && \
killall Finder
CD, DVD, iPod и т. д.
# Разрешено
defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true && \
killall Finder
# Запрещено (по умолчанию)
defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool false && \
killall Finder
AFP, SMB, NFS, WebDAV и т. д.
# Разрешено
defaults write com.apple.finder ShowMountedServersOnDesktop -bool true && \
killall Finder
# Запрещено (по умолчанию)
defaults write com.apple.finder ShowMountedServersOnDesktop -bool false && \
killall Finder
sudo chmod -RN /путь/к/папке
defaults write -g NSNavRecentPlacesLimit -int 10 && \
killall Finder
defaults write -g AppleShowAllExtensions -bool true
Это эквивалентно статусу “Заблокировано” в Finder.
# Запрещено (по умолчанию)
sudo chflags -R nouchg /путь/к/файлу/или/папке
# Разрешено
sudo chflags -R uchg /путь/к/файлу/или/папке
# Показать все
defaults write com.apple.finder AppleShowAllFiles true
# Восстановить видимость файлов по умолчанию
defaults write com.apple.finder AppleShowAllFiles false
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
По умолчанию папка ~/Library
скрыта. Вы можете легко снова показать ее. Тот же метод работает с другими папками.
# Скрыто (по умолчанию)
chflags hidden ~/Library
# Видимо
chflags nohidden ~/Library
Делает возможным отображение пункта меню “Завершить Finder” с использованием стандартной комбинации клавиш Cmd + Q
# Разрешено
defaults write com.apple.finder QuitMenuItem -bool true && \
killall Finder
# Запрещено (по умолчанию)
defaults write com.apple.finder QuitMenuItem -bool false && \
killall Finder
Полезно, если вы используете старый компьютер, который нарушает анимацию.
# Запрещено
defaults write -g NSScrollAnimationEnabled -bool false
# Разрешено (по умолчанию)
defaults write -g NSScrollAnimationEnabled -bool true
# Запрещено
defaults write -g NSScrollViewRubberbanding -bool false
# Разрешено (по умолчанию)
defaults write -g NSScrollViewRubberbanding -bool true
defaults write -g NSNavPanelExpandedStateForSaveMode -bool true && \
defaults write -g NSNavPanelExpandedStateForSaveMode2 -bool true
# Скрыть значки
defaults write com.apple.finder CreateDesktop -bool false && \
killall Finder
# Показать значки (по умолчанию)
defaults write com.apple.finder CreateDesktop -bool true && \
killall Finder
# Показать
defaults write com.apple.finder ShowPathbar -bool true
# Скрыть (по умолчанию)
defaults write com.apple.finder ShowPathbar -bool false
Возможные значения: WhenScrolling
, Automatic
и Always
.
defaults write -g AppleShowScrollBars -string "Always"
# Показать
defaults write com.apple.finder ShowStatusBar -bool true
# Скрыть (по умолчанию)
defaults write com.apple.finder ShowStatusBar -bool false
Устанавливает локальный диск в качестве целевой папки сохранения по умолчанию, а не iCloud.
defaults write -g NSDocumentSaveNewDocumentsToCloud -bool false
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"
defaults write com.apple.finder NewWindowTarget -string "PfLo" && \
defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}"
Устанавливает размер ‘medium’.
defaults write -g NSTableViewDefaultSizeMode -int 2
Избегает создания файлов .DS_Store
и AppleDouble.
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
Избегает создания файлов .DS_Store
и AppleDouble.
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
Если открыто несколько окон, выбирается верхнее.
cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')"
open https://herrbischoff.com
open README.md
Вы можете открывать приложения с использованием -a
.
open -a "Google Chrome" https://herrbischoff.com
open /путь/к/папке/
open .
Для очистки кеша шрифтов для всех пользователей, добавьте sudo
перед этими командами.
atsutil databases -removeUser && \
atsutil server -shutdown && \
atsutil server -ping
Начиная с macOS 10.15 (Catalina), приложения Utilities (включая Terminal.app)
теперь находятся в папке /System
.
cp -v /Applications/Xcode-beta.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources/Fonts/SFMono-* ~/Library/Fonts
С macOS 10.12 (Sierra) они включены в Terminal.app.
cp -v /Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SFMono-* ~/Library/Fonts
В более старых версиях ОС вам нужно скачать и установить Xcode 8 beta для этой операции. После этого они должны быть доступны во всех приложениях.
cp -v /System/Applications/Utilities/Terminal.app/Contents/Resources/Fonts/SFMono-* ~/Library/Fonts
Пожалуйста, см. этот файл.
До macOS 10.12 (Sierra) демон Bluetooth называется blued
, а не
bluetoothd
. Вам необходимо соответствующим образом настроить команду killall
.
# Статус
defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState
# Разрешено (по умолчанию)
sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1
# Запрещено
sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0 && \
sudo killall -HUP bluetoothd
Включить очистку для не-Apple SSD. Эта команда присутствует с версии macOS 10.10 (Yosemite).
trimforce
networksetup -listallhardwareports
pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f1 -d';'
pmset -g batt | egrep "([0-9]+\%).*" -o --colour=auto | cut -f3 -d';'
system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p'
system_profiler SPDisplaysDataType | grep Resolution
sysctl -n machdep.cpu.brand_string
# Статус
defaults read /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled
# Разрешено (по умолчанию)
defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -int 1
# Запрещено
defaults write /Library/Preferences/com.apple.driver.AppleIRController DeviceEnabled -int 0
Предотвращение перехода в спящий режим на 1 час:
caffeinate -u -t 3600
sudo pmset -g
sudo pmset displaysleep 15
sudo pmset sleep 30
sudo systemsetup -getcomputersleep
sudo systemsetup -setcomputersleep 60
sudo systemsetup -setcomputersleep Never
sudo systemsetup -setrestartfreeze on
Воспроизводить звуковой сигнал зарядки iOS при подключении MagSafe.
## До macOS 10.12 (Sierra)
# Разрешено
defaults write com.apple.PowerChime ChimeOnAllHardware -bool true && \
open /System/Library/CoreServices/PowerChime.app
# Запрещено (по умолчанию)
defaults write com.apple.PowerChime ChimeOnAllHardware -bool false && \
killall PowerChime
## От macOS 10.13 (High Sierra) и далее
# Разрешено (по умолчанию)
defaults write com.apple.PowerChime ChimeOnNoHardware -bool false && \
open /System/Library/CoreServices/PowerChime.app
# Запрещено
defaults write com.apple.PowerChime ChimeOnNoHardware -bool true && \
killall PowerChime
# Запрещено
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false
# Разрешено (по умолчанию)
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool true
# Показать статус
defaults read -g NSAutomaticSpellingCorrectionEnabled
Включение клавиши Tab в модальных диалоговых окнах.
# Только текстовые поля и списки (по умолчанию)
defaults write NSGlobalDomain AppleKeyboardUIMode -int 0
# Все элементы управления
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
Изменение поведения “нажмите и удерживайте”.
# Запрещено
defaults write -g ApplePressAndHoldEnabled -bool false
# Разрешено (по умолчанию)
defaults write -g ApplePressAndHoldEnabled -bool true
Установка очень быстрой скорости повтора, настраивайте по вкусу.
defaults write -g KeyRepeat -int 0.02
Вы должны перезапустить Dock
, так как Launchpad связан с ним.
# Для OS X 10.10 (Yosemite) и ниже
rm ~/Library/Application\ Support/Dock/*.db && \
killall Dock
# Для OS X 10.11 (El Capitan) и выше
defaults write com.apple.dock ResetLaunchPad -bool true && \
killall Dock
afconvert input.mp3 ringtone.m4r -f m4af
Использует голос “Alex”, обычный файл с UTF-8 кодировкой в качестве ввода и AAC в качестве вывода.
say -v Alex -f file.txt -o "output.m4a"
sudo nvram SystemAudioVolume=" "
osascript -e 'set volume output muted true'
osascript -e 'set volume 4'
Вы можете проигрывать все аудиоформаты, поддерживаемые нативно QuickTime.
afplay -q 1 filename.mp3
say 'All your base are belong to us!'
Для старых Mac:
# Разрешено (по умолчанию)
sudo nvram BootAudio=%01
# Запрещено
sudo nvram BootAudio=%00
Для моделей 2016 года и новее:
# Разрешено
sudo nvram StartupMute=%00
# Запрещено (по умолчанию)
sudo nvram StartupMute=%01
defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 1
# Запрещено
sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "-NoMulticastAdvertisements"
# Разрешено (по умолчанию)
sudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array "/usr/sbin/mDNSResponder" "-launchd"
sudo ipconfig set en0 DHCP
ipconfig getpacket en0
sudo dscacheutil -flushcache && \
sudo killall -HUP mDNSResponder
sudo scutil --set ComputerName "newhostname" && \
sudo scutil --set HostName "newhostname" && \
sudo scutil --set LocalHostName "newhostname" && \
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "newhostname"
Переключение между созданными в панели настроек сети местоположениями сети.
# Статус
scselect
# Переключить местоположение сети
scselect LocationNameFromStatus
networksetup -setmanual "Ethernet" 192.168.2.100 255.255.255.0 192.168.2.1
ping -o herrbischoff.com
traceroute herrbischoff.com
До macOS 10.12 (Sierra) команда ssh выводила диалоговое окно с запросом парольной фразы и предлагала вариант сохранения ее в цепочке ключей. Этот пользовательский интерфейс был устаревшим и давно убран.
Вместо этого в macOS 10.12 (Sierra) был добавлен новый параметр UseKeychain,
который позволяет пользователям указать, хотели бы они, чтобы парольная фраза сохранялась в цепочке ключей. Этот параметр был включен по умолчанию в macOS 10.12 (Sierra), что вызвало сохранение всех парольных фраз в цепочке ключей.
Это не было намеренным поведением по умолчанию, и это было изменено в macOS 10.12.2. (Источник)
ssh-add -K /path/to/private_key
Затем добавьте в ~/.ssh/config
:
Host server.example.com
IdentityFile /path/to/private_key
UseKeychain yes
# Разрешено
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
# Запрещено (по умолчанию)
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
Это выводит все приложения, в настоящее время использующие порт 80.
sudo lsof -i :80
Работает, если ваш провайдер интернет-услуг не заменяет DNS-запросы (что и не должен делать).
dig +short myip.opendns.com @resolver1.opendns.com
Альтернативный способ, работающий во всех сетях.
curl -s https://api.ipify.org && echo
Не документированный флаг команды scutil
.
scutil --nwi
Файлы будут предоставляться из /private/tftpboot
.
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist && \
sudo launchctl start com.apple.tftpd
networksetup -setairportnetwork en0 WIFI_SSID WIFI_PASSWORD
Создайте символическую ссылку на команду airport
для удобства доступа:
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport
Выполните беспроводное сканирование:
airport -s
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | awk '/ SSID/ {print substr($0, index($0, $2))}'
ipconfig getifaddr en0
defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep LastConnected -A 7
Замените SSID на имя точки доступа, пароль которой вы хотите узнать.
security find-generic-password -D "AirPort network password" -a "SSID" -gw
networksetup -setairportpower en0 on
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
cancel -a -
defaults write -g PMPrintingExpandedStateForPrint -bool true && \
defaults write -g PMPrintingExpandedStateForPrint2 -bool true
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true
# Показать статус
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# Разрешено
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
# Запрещено (по умолчанию)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /path/to/file
spctl --add /path/to/Application.app
spctl --remove /path/to/Application.app
Особенно полезно с раздражающим всплывающим окном системы macOS 10.15 (Catalina), блокирующим выполнение неподписанных приложений.
# Статус
spctl --status
# Разрешено (по умолчанию)
sudo spctl --master-enable
# Запрещено
sudo spctl --master-disable
LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c 20 | pbcopy
# Для macOS 10.12 (Sierra)
open /System/Library/Frameworks/ScreenSaver.framework/Versions/A/Resources/ScreenSaverEngine.app
# Начиная с macOS 10.13 (High Sierra)
/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
# Статус
defaults read com.apple.screensaver askForPasswordDelay
# Разрешено (по умолчанию)
defaults write com.apple.screensaver askForPasswordDelay -int 0
# Запрещено (Целое число = задержка блокировки в секундах)
defaults write com.apple.screensaver askForPasswordDelay -int 10
# Статус
defaults read com.apple.screensaver askForPassword
# Разрешено
defaults write com.apple.screensaver askForPassword -int 1
# Запрещено (по умолчанию)
defaults write com.apple.screensaver askForPassword -int 0
Команда tccutil
управляет базой данных конфиденциальности, которая хранит решения
пользователя о том, могут ли приложения иметь доступ к личным данным. Перед выполнением
этих команд необходимо закрыть все приложения, кроме Терминала.
# Полный сброс для всех приложений
sudo tccutil reset All
# Сброс доступа к адресной книге
sudo tccutil reset AddressBook
# Сброс всех разрешений для Terminal.app
sudo tccutil reset All com.apple.Terminal
Примечание: Кажется, что команда srm
была удалена из MacOS после версии 10.9. Есть
заметка на странице поддержки Apple, которая намекает на причину:
С диском SSD, Secure Erase и Erasing Free Space не доступны в Дисковой утилите. Эти опции не требуются для диска SSD, потому что стандартное стирание затрудняет восстановление данных с SSD.
srm /path/to/file
srm -r /path/to/folder/
srm -rf /path/to/complete/destruction
find . -type f -name '.DS_Store' -ls -delete
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Модификатор -i
делает поиск регистронезависимым.
locate -i *.jpg
# Разрешено
defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true && \
defaults remove com.apple.NetworkBrowser DisableAirDrop
# Запрещено (По умолчанию)
defaults delete com.apple.NetworkBrowser BrowseAllInterfaces && \
defaults write com.apple.NetworkBrowser DisableAirDrop -bool true
osascript /путь/к/скрипту.scpt
diff -qr /путь/к/папке1 /путь/к/папке2
Убедитесь, что у вас установлен pv
, и замените /dev/rdisk2
на соответствующее устройство записи или файл.
FILE=/путь/к/файлу.iso pv -s $(du -h $FILE | awk '/.*/ {print $1}') $FILE | sudo dd of=/dev/rdisk2 bs=1m
В случае, если ваша сеанс оболочки стал ненормальным (какой-либо сценарий или приложение сделали его неразборчивым).
stty sane
sudo reboot
sudo poweroff
sw_vers
Сколько времени прошло с момента последней перезагрузки.
uptime
cat whatever.txt | pbcopy
pbpaste | textutil -convert txt -stdin -stdout -encoding 30 | pbcopy
pbpaste | expand | pbcopy
pbpaste > whatever.txt
pbpaste | sort | uniq | pbcopy
Если FileVault включен на текущем томе, он перезагружает систему, обходя начальную разблокировку. Эта команда может не работать на всех системах.
sudo fdesetup authrestart
# Состояние
sudo fdesetup status
# Разрешено
sudo fdesetup enable
# Запрещено (По умолчанию)
sudo fdesetup disable
defaults delete MobileMeAccounts
sudo sysdiagnose -f ~/Desktop/
# macOS 13 (Ventura)
sudo /Applications/Install\ macOS\ Ventura.app/Contents/Resources/createinstallmedia --volume /Volumes
/MyVolume
# macOS 13 (Ventura)
sudo /путь/к/образу/Install\ macOS\ Ventura.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume
sudo systemsetup -settimezone Europe/Moscow
date
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo nvram SystemAudioVolume=%80
sudo nvram -d SystemAudioVolume
sudo mdutil -E /
sudo mdutil -i off /Volumes/VolumeName
sudo mdutil -i on /Volumes/VolumeName
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
sudo log show --predicate 'processImagePath CONTAINS "appname"'
sudo log show --predicate 'senderImagePath == "/Applications/YourApp.app/Contents/MacOS/YourApp"' --info
sudo log show --pid 123
sudo log show --predicate 'processImagePath CONTAINS "appname"' --level=debug
sudo softwareupdate --schedule off
sudo softwareupdate --schedule on
rm -rf ~/Library/Caches/*
sudo rm -rf /Library/Caches/*
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
sudo atsutil databases -remove
sudo lsregister -kill -seed -r -domain local -domain system -domain user
sudo killall -KILL Dock Finder SystemUIServer
sudo rm /private/var/vm/swapfile*
ffmpeg -f avfoundation -i "1" -vf "fps=10,scale=320:-1:flags=lanczos" output.gif
ffmpeg -f avfoundation -i ":0.0" -f avfoundation -i ":1" output.mp4
brew install packageName
brew update
brew upgrade
clear
printf '\33[H\33[2J'
Ctrl + C
sudo !!
otool -L /путь/к/исполняемому/файлу
Ctrl + `
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
sudo dscl . -create /Groups/mygroup
sudo dscl . -delete /Groups/mygroup
sudo dscl . -create /Users/myuser
sudo dscl . -create /Users/myuser UserShell /bin/bash
sudo dscl . -create /Users/myuser RealName "My User"
sudo dscl . -create /Users/myuser UniqueID "501"
sudo dscl . -create /Users/myuser PrimaryGroupID 20
sudo dscl . -create /Users/myuser NFSHomeDirectory /Users/myuser
sudo dscl . -delete /Users/myuser
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
sudo installer -pkg /путь/к/пакету.pkg -target /
sudo installer -pkg /путь/к/пакету.pkg -target / -delete
sudo profiles -I -F /путь/к/profile.mobileconfig
sudo profiles -R -p com.example.profileidentifier
Это лишь небольшой набор полезных команд для работы в терминале macOS. На практике, использование команд может потребовать дополнительных знаний о системе и осторожности, чтобы избежать нежелательных последствий. Всегда имейте в виду, что неправильное использование команд может повредить вашу операционную систему.
Версия | Кодовое имя | Дата выпуска | Наиболее поздняя версия |
---|---|---|---|
Rhapsody Developer Release | Grail1Z4 / Titan1U | August 31, 1997 | DR2 (May 14, 1998) |
Mac OS X Server 1.0 | Hera | March 16, 1999 | 1.2v3 (October 27, 2000) |
Mac OS X Developer Preview | n/a | March 16, 1999 | DP4 (April 5, 2000) |
Mac OS X Public Beta | Kodiak | September 13, 2000 | n/a |
Mac OS X 10.0 | Cheetah | March 24, 2001 | 10.0.4 (June 22, 2001) |
Mac OS X 10.1 | Puma | September 25, 2001 | 10.1.5 (June 6, 2002) |
Mac OS X 10.2 | Jaguar | August 24, 2002 | 10.2.8 (October 3, 2003) |
Mac OS X 10.3 | Panther | October 24, 2003 | 10.3.9 (April 15, 2005) |
Mac OS X 10.4 | Tiger | April 29, 2005 | 10.4.11 (November 14, 2007) |
Mac OS X 10.5 | Leopard | October 26, 2007 | 10.5.8 (August 5, 2009) |
Mac OS X 10.6 | Snow Leopard | August 28, 2009 | 10.6.8 v1.1 (July 25, 2011) |
Mac OS X 10.7 | Lion | July 20, 2011 | 10.7.5 (September 19, 2012) |
OS X 10.8 | Mountain Lion | July 25, 2012 | 10.8.5 (12F2560) (August 13, 2015) |
OS X 10.9 | Mavericks | October 22, 2013 | 10.9.5 (13F1911) (July 18, 2016) |
OS X 10.10 | Yosemite | October 16, 2014 | 10.10.5 (14F2511) (July 19, 2017) |
OS X 10.11 | El Capitan | September 30, 2015 | 10.11.6 (15G22010) (July 9, 2018) |
macOS 10.12 | Sierra | September 20, 2016 | 10.12.6 (16G2136) (September 26, 2019) |
macOS 10.13 | High Sierra | September 25, 2017 | 10.13.6 (17G14042) (November 12, 2020) |
macOS 10.14 | Mojave | September 24, 2018 | 10.14.6 (18G9323) (July 21, 2021) |
macOS 10.15 | Catalina | October 7, 2019 | 10.15.7 (19H2026) (July 20, 2022) |
macOS 11 | Big Sur | November 12, 2020 | 11.7.1 (20G918) (October 24, 2022) |
macOS 12 | Monterey | October 25, 2021 | 12.6.1 (21G217) (October 24, 2022) |
macOS 13 | Ventura | October 24, 2022 | 13.0.1 (22A400) (November 9, 2022) |
Этот материал лицензирован в соответствии с Лицензией Creative Commons Attribution-ShareAlike 4.0 International.