Terminál a automatizace v macOS

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 setenv nebo 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žijte brew services pro 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ím xattr.
  • ACL a oprávnění: kombinace POSIX práv a Access Control Lists. Audit proveďte přes ls -le, správu pomocí chmod +a a chmod -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), mdls a mdfind (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 setenv nebo je uložte do LaunchAgent.
  • Alternativa k cron: cron existuje, 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 notification v 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 script a 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 log pro 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řes mdls.

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í launchctl vzdá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 nebo profiles.

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žívejte caffeinate k 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 defaults validujte 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 plist a TCC chování v různých verzích OS.

Správa konfigurací a IaC v uživatelském prostoru

Pro op