Terminál a automatizace macOS

Terminál a automatizace 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í 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 setenv nebo 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ěj­te 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žijte brew services pro 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řes xattr.
  • ACL a oprávnění: kombinace POSIX práv a Access Control Lists. Auditujte přes ls -le, spravujte chmod +a a chmod -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), 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 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 setenv nebo uložte do LaunchAgent.
  • Alternativa k cron: cron existuje, 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 notification v 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 script a 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 log pro 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, dotazujte mdfind, kontrolujte pole mdls.

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í 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 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žívejte caffeinate k 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 defaults validujte 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 plist a 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 pipefail tam, 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.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *