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ím shellem zsh. Bash zůstává dostupný pro kompatibilitu, ale pouze ve starší verzi.
- Konfigurační vrstvy:
/etc/zshenv(globální prostředí),~/.zprofile(login),~/.zshrc(interaktivní),~/.zlogin(po přihlášení),~/.zshenv(vždy). Proměnné prostředí, aliasy a funkce nastavujte cíleně podle kontextu, aby se předešlo nechtěným efektům u neinteraktivních skriptů. - Vliv na GUI aplikace: 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ř. pomocí frameworků typu oh-my-zsh/antidote), fzf, doplňování, prompt (git status, návratový kód), avšak mějte na paměti dopad na dobu startu shellu.
Terminál vs. alternativy
Vestavěný Terminal.app je spolehlivý a rychlý. Alternativy jako iTerm2 nabízejí rozšířené profily, spouštění triggerů, klávesové mapy, vyhledávání, notifikace a integraci s tmux. Pro dlouhotrvající úlohy zvažte multiplexery (tmux) a perzistenci relací.
Správa balíčků a vývojových 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 uživatelských démonů. - Python/Node/Ruby: preferujte userland runtime (pyenv, uv/rye, nvm/volta, rbenv/asdf) před systémovým interpretem; minimalizuje to 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. Správa prostřednictvímxattr. - ACL a oprávnění: kombinace POSIX práv a Access Control Lists. Audit proveďte přes
ls -le, správu pomocíchmod +aachmod -N.
Bezpečnostní model a TCC
macOS vynucuje ochranu Gatekeeper, SIP, Notarizaci 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 probíhá interaktivně nebo přes MDM. U skriptů a pomocných nástrojů preferujte podepisová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 soubory v ~/Library/LaunchAgents (uživatel) nebo v /Library/LaunchDaemons (systém). Plánování úloh, spouštění po přihlášení uživatele, reakce na podmínky (KeepAlive, sledování cest) a řízení prostředí se provádí přes klíče jako ProgramArguments, StartInterval, StartCalendarInterval, KeepAlive, EnvironmentVariables.
- Správa: načítání a řízení pomocí
launchctl bootstrap,kickstart,enable/disable,print. - Prostředí a dědičnost: mějte na paměti, že GUI aplikace dědí proměnné z per-user launchd. Pro trvalé proměnné používejte
launchctl setenvnebo je uložte doLaunchAgent. - Alternativa k cron:
cronexistuje, ale Apple doporučuje launchd kvůli lepší integraci s napájením, přihlášením a sandboxem.
AppleScript a JXA (JavaScript for Automation)
AppleScript a JXA zprostředkovávají Apple události k ovládání aplikací a systému. osascript -e spouští jednorázové příkazy; pro rozsáhlejší skripty používejte 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 ve Finderu, exporty v Pages/Numbers, ovládání Safari, automatizace v Mailu, generování notifikací (
display notificationv AppleScriptu). - UI Scripting: pro aplikace bez skriptovatelných rozhraní lze s oprávněním Accessibility automatizovat kliknutí a vyplňování formulářů přes System Events; avšak upřednostňujte nativní API aplikace.
- Kombinace se shellovými skripty: AppleScript může volat
do shell scripta opačně lze spouštět AppleScript přes CLI.
Automator vs. Zkratky (Shortcuts)
Automator historicky poskytuje workflow složená z předpřipravených akcí; lze jej spustit 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), u komplexních backendových úloh kombinujte launchd, shell a JXA.
Klíčenka (Keychain) a správa tajemství
Keychain zajišťuje bezpečné ukládání tajemství pro uživatele i systémové účty. Z CLI pracujte přes security (vyhledání, tvorba, import certifikátů, přístupová pravidla). Pro automatizace definujte přístupová oprávnění 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 streamování a dotazy; konfigurovatelné subsystémy a kategorie. Při vývoji skriptů logujte srozumitelně a s dostatečným kontextem. - Profilování:
time,fs_usage,powermetrics,vm_stat, Monitor aktivity, Instruments. - Spotlight index a metadata: odstraňujte anomálie přes
mdutil, dotazujte pomocímdfind, kontrolujte pole přesmdls.
Síť a vzdálená správa
- SSH a agenti klíčů: nativní integrace s Keychain pro uložení přístupových frází; správa známých hostitelů, kontrola algoritmů a zásad pro FIPS.
- Vzdálené akce: spouštění skriptů přes SSH, využ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 uživatelsky orientované automatizace používejte nativní notifikace. AppleScript (display notification) nebo Zkratky zajistí jednotné chování v Centru oznámení. Pro plánované úlohy oznamujte výsledky, logujte do Unified Logging a při selhání vytvářejte výzvu k akci.
Energetická efektivita a spolehlivost úloh
- Napájení a spánek: dlouhotrvající úlohy koordinujte s
pmset(zabránění uspání) nebo používejtecaffeinatek dočasnému zabránění uspání. - Idempotence a retry: navrhujte skripty idempotentně; implementujte opakování s exponenciálním zpožděním a kontrolou návratového kódu.
- Transakční operace: při modifikaci 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; u interních skriptů zvažte podpis pro zvýšení důvěryhodnosti Gatekeeperu.
- Shebang a kompatibilita: používejte explicitní shebangy, na Apple Silicon zohledněte cesty k interpretům (
/opt/homebrew/bin). Vyhněte se tvrdému kódování cest. - Konfigurace přes profily: v podnikových prostředích spravujte TCC, omezení a konfigurační payloady přes MDM profily; minimalizuje to manuální zásahy.
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 přihlášením a napájením |
| Úprava preferencí | defaults, plutil |
Preferujte API aplikace, killall cfprefsd jen výjimečně |
| Ovládání aplikací | AppleScript, JXA, osascript |
Vyžaduje TCC oprávnění pro některé akce |
| Workflow pro uživatele | Zkratky, Automator | Snadná distribuce, spustitelné z Docku a klávesovou zkratkou |
| 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 op



























