Terminál a automatizace v macOS
macOS je unixový systém s certifikací POSIX, který kombinuje grafické rozhraní s robustním shellovým ekosystémem. Terminál (aplikace Terminal) a nástroje kolem něj (zsh, launchd, AppleScript/JXA, Automator, Zkratky, Homebrew) umožňují vytvářet opakovatelné, auditovatelné a bezpečné automatizace od údržby systému až po komplexní integrační workflow.
Shell v macOS: zsh a struktura konfiguračních souborů
- Výchozí shell: od macOS Catalina je výchozí zsh. Bash zůstává dostupný pro kompatibilitu, ale ve starší verzi.
- Konfigurační vrstvy:
/etc/zshenv(globální prostředí),~/.zprofile(login),~/.zshrc(interaktivní),~/.zlogin(po loginu),~/.zshenv(vždy). Proměnné prostředí, aliasy a funkce nastavujte cíleně podle kontextu, abyste předešli nežádoucím efektům u neinteraktivních skriptů. - Ovlivnění GUI aplikací: grafické aplikace dědí prostředí z launchd, nikoli z interaktivního shellu. Pro globální proměnné použijte
launchctl setenvnebo per-uživatelskéLaunchAgents. - Rozšíření shellu: modulární správa doplňků (např. přes frameworky typu oh-myzsh/antidote), fzf, doplňování, prompt (git status, exit kód), mějte však na paměti dopad na startovací čas shellu.
Terminál vs. alternativy
Vestavěný Terminal.app je spolehlivý a rychlý. Alternativy jako iTerm2 přidávají rozšířené profily, spouštění triggerů, klávesové mapy, vyhledávání, notifikace a integraci se tmux. Pro dlouhé úlohy zvažte multiplexery (tmux) a perzistenci relací.
Správa balíčků a dev nástrojů
- Xcode Command Line Tools: poskytují
clang,make,git,svn, hlavičky a SDK. - Homebrew: de-facto standard pro instalaci CLI nástrojů a služeb; prefix na Apple Silicon je běžně
/opt/homebrew. Využijtebrew servicespro správu démonů uživatele. - Python/Node/Ruby: preferujte userland runtime (pyenv, uv/rye, nvm/volta, rbenv/asdf) před systémovým interpretem; minimalizuje konflikty s nástroji macOS.
Souborový systém a atributy: APFS, xattrs a ACL
- APFS: snapshoty, klonování souborů, šifrování na úrovni svazku; vhodné pro bezpečné aktualizace a rychlé zálohy.
- Extended Attributes (xattrs): metadata jako karanténa stažených souborů (
com.apple.quarantine), kódová stránka, označení zdroje. Práce přesxattr. - ACL a oprávnění: kombinace POSIX práv a Access Control Lists. Auditujte přes
ls -le, spravujtechmod +aachmod -N.
Bezpečnostní model a TCC
macOS vynucuje ochrany Gatekeeper, SIP, Notarization a Transparency, Consent, and Control (TCC). Automatizace, které přistupují k Disku, Kamerám, Mikrofonu, Kalendáři či ovládání UI, vyžadují explicitní oprávnění (Full Disk Access, Accessibility). Konfigurace se děje interaktivně nebo přes MDM. U skriptů a pomocných nástrojů preferujte podepsání (codesign) a notářství (spctl kontrola), zejména pro distribuci.
Základní CLI nástroje pro macOS automatizaci
- Správa systému:
systemsetup,pmset,softwareupdate,diskutil,tmutil,profiles(MDM profily),scutil,networksetup. - Integrace UI a aplikací:
open(spouštění aplikací/URL/dokumentů),osascript(AppleScript/JXA),shortcuts(spouštění Zkratek). - Konfigurace a metadata:
defaults(plist),plutil(validace/konverze),sips(obrázky),mdlsamdfind(Spotlight),log(Unified Logging). - Bezpečnost a klíče:
security(Keychain a certifikáty),spctl(Gatekeeper),codesign(podpis binárek).
Automatizace přes launchd: LaunchAgents a LaunchDaemons
launchd je init/démon správce macOS. Automatizace se definují jako .plist v ~/Library/LaunchAgents (uživatel) nebo /Library/LaunchDaemons (systém). Plány prací, spouštění po přihlášení, reakce na podmínky (KeepAlive, path watching) a řízení prostředí se řeší přes klíče jako ProgramArguments, StartInterval, StartCalendarInterval, KeepAlive, EnvironmentVariables.
- Správa: načítání a řízení přes
launchctl bootstrap,kickstart,enable/disable,print. - Prostředí a dědičnost: pamatujte, že GUI aplikace dědí proměnné z per-user launchd. Pro trvalé proměnné použijte
launchctl setenvnebo uložte doLaunchAgent. - Alternativa k cron:
cronexistuje, ale Apple doporučuje launchd kvůli lepší integraci s energií, loginem a sandboxem.
AppleScript a JXA (JavaScript for Automation)
AppleScript a JXA zprostředkují Apple Events k ovládání aplikací a systému. osascript -e spouští jednorázové příkazy; pro větší skripty použijte uložené soubory. JXA má syntaxi podobnou prohlížečovému JavaScriptu a přístup k objektovým modelům aplikací.
- Scénáře použití: hromadné operace v Finderu, exporty v Pages/Numbers, ovládání Safari, automatizace v Mailu, generování notifikací (
display notificationv AppleScriptu). - UI Scripting: pro aplikace bez skriptovatelného rozhraní lze s oprávněním Accessibility automatizovat kliky a formuláře přes System Events; preferujte však nativní API aplikace.
- Kombinace s shell skripty: AppleScript může volat
do shell scripta opačně lze spouštět AppleScript z CLI.
Automator vs. Zkratky (Shortcuts)
Automator historicky poskytuje workflow z předpřipravených akcí; lze jej volat z Finderu, Kalendáře i jako službu. Moderní nástupce Zkratky sjednocuje automatizace mezi macOS, iOS a iPadOS a nabízí přímé volání přes CLI shortcuts run. Pro distribuovatelné automatizace preferujte Zkratky (sdílení, sandboxing, souhlas uživatele), pro komplexní back-end úlohy kombinujte launchd, shell a JXA.
Klíčenka (Keychain) a správa tajemství
Keychain integruje bezpečné ukládání tajemství pro uživatele i systém. Z CLI pracujte přes security (vyhledání, vytvoření, import certifikátů, přístupová pravidla). Pro automatizace definujte přístupové řízení tak, aby skriptované procesy měly potřebná oprávnění bez interaktivních výzev, ale v souladu s principem least privilege.
Jednotné logování a diagnostika
- Unified Logging: nástroj
logpro stream a dotazy; konfigurovatelné subsystémy a kategorie. Při vývoji skriptů logujte srozumitelně a s kontextem. - Profilování:
time,fs_usage,powermetrics,vm_stat, Activity Monitor, Instruments. - Spotlight index a metadata: odstraňujte anomálie přes
mdutil, dotazujtemdfind, kontrolujte polemdls.
Síť a vzdálená správa
- SSH a agenti klíčů: nativní integrace s Keychain pro uložení passphrase; správa známých hostitelů, kontrola algoritmů a zásad pro FIPS.
- Vzdálené akce: spouštění skriptů přes SSH, použití
launchctlvzdáleně, přenos souborů (scp,rsync), AirDrop pro rychlé lokální sdílení. - Proxy a rozhraní: skriptovatelné přes
networksetup; VPN a Wi-Fi profily lze nasadit přes MDM neboprofiles.
Notifikace, připomínky a integrace s GUI
Pro lidsky-centrické automatizace používejte nativní notifikace. AppleScript (display notification) nebo Zkratky zajistí jednotné chování s Centrem oznámení. Pro plánované úlohy oznamujte výsledek, logujte do Unified Logging a v případě selhání vytvořte výzvu k akci.
Energetická efektivita a spolehlivost úloh
- Napájení a spánek: dlouhé úlohy koordinujte s
pmset(prevent spindown) nebo používejtecaffeinatek dočasnému zabránění uspání. - Idempotence a retry: skripty navrhujte idempotentně; implementujte opakování s exponenciálním zpožděním a kontrolou návratového kódu.
- Transakční operace: pro úpravy konfigurací používejte dočasné soubory a atomické přesuny; u
defaultsvalidujte pomocíplutil.
Distribuce skriptů a bezpečné spouštění
- Podpis a notářství: distribuované binárky a aplikace podepisujte; pro interní skripty zvažte podpis i pro vyšší důvěru Gatekeeperu.
- Shebang a kompatibilita: používejte explicitní shebangy, na Apple Silicon zohledněte cesty k interpretrům (
/opt/homebrew/bin). Avoid hard-coding. - Konfigurace přes profily: v enterprise prostředí spravujte TCC, omezení a konfigurační payloady přes MDM profily; minimalizuje manuální kroky.
Přehled častých úloh a vhodných nástrojů
| Úloha | Nástroje | Poznámka |
|---|---|---|
| Plánovaný skript | LaunchAgent, launchctl |
Lepší než cron, integrace s loginem a energií |
| Úprava preferencí | defaults, plutil |
Preferujte API aplikace, killall cfprefsd jen výjimečně |
| Ovládání aplikací | AppleScript, JXA, osascript |
Vyžaduje oprávnění TCC pro některé akce |
| Workflow pro uživatele | Zkratky, Automator | Snadná distribuce, spustitelné z Docku a klávesou |
| Služby na pozadí | brew services, LaunchDaemons |
Databáze, cache, agenty |
| Obrazové operace | sips |
Resampling, formáty, metadata |
| Index/metadata | mdfind, mdls, mdutil |
Práce se Spotlight indexem |
| Klíče a certifikáty | security, codesign, spctl |
Keychain, podpisy, Gatekeeper |
Testování a kvalita skriptů
- Lint a styl: shellcheck, shfmt pro sh/bash/zsh; pro JXA ESLint s přizpůsobením prostředí.
- Jednotkové testy: pro skriptovací jazyky využijte unit test frameworky (např. bats pro bash). Izolujte vedlejší efekty a ověřujte výstupy.
- CI na macOS: využijte běhová prostředí s macOS pro automatizované testy; validujte
plista TCC chování v různých verzích OS.
Správa konfigurací a IaC v uživatelském prostoru
Pro opakovatelné prostředí zajistěte dotfiles v repozitáři, instalaci balíčků přes Homebrew Bundle, profily Zkratek a LaunchAgents jako kód. Používejte idempotentní provisioning (Ansible s community.general.osx, Nix/Darwin, Chef) a verzujte změny.
Typické scénáře automatizace
- Denní údržba: aktualizace balíčků, čištění cache, snapshot záloh, rotace logů, notifikace o stavu.
- Workstation onboarding: jedním příkazem instalace CLI nástrojů, profilů, Zkratek a přihlášení do služeb.
- Media pipeline: dávkové konverze obrázků a videí, tagování metadat, přesuny do knihoven s pravidly.
- Produktivita: klávesové Zkratky pro často opakované kroky v GUI aplikacích, zpracování šablon dokumentů.
Good practices pro bezpečné a udržitelné skripty
- Princip nejmenších oprávnění: nevyžadujte
sudo, pokud to není nutné. Pro citlivé akce využijte samostatného pomocníka. - Ošetření chyb: kontrolujte návratové kódy, používejte
set -euo pipefailtam, kde dává smysl, a poskytujte jednoznačné chybové zprávy. - Kompatibilita verzí: uvádějte minimální verze macOS a závislostí, podmíněné větve pro Intel/Apple Silicon.
- Dokumentace: stručný README s požadavky, postupem instalace, potřebnými oprávněními TCC a známými omezeními.
Závěr
Terminál a automatizace v macOS umožňují spojit sílu Unixu s nativními schopnostmi platformy. Kombinací launchd plánovače, shellových skriptů, AppleScript/JXA, Zkratek a správně nastavených bezpečnostních oprávnění lze budovat spolehlivé, auditovatelné a ergonomické workflow. Důraz na idempotenci, testování, bezpečnost TCC a verzování konfigurace zajišťuje dlouhodobě udržitelný provoz automatizací napříč verzemi macOS i typy hardware.