- Allein mit dem Terminal lassen sich macOS-spezifische Funktionen wie Energiesparen, Zwischenablage, Finder, Spotlight und Updates steuern, wodurch sich wiederkehrende GUI-Aufgaben reduzieren lassen
caffeinate,pmsetundtaskpolicybeeinflussen das Systemverhalten direkt, etwa beim Verhindern des Ruhezustands, beim Prüfen des Energiezustands oder beim Anpassen der Ausführungspriorität von Prozessen- Mit
pbcopy,pbpaste,open,screencaptureundsaylassen sich alltägliche Aufgaben wie Zwischenablage, Dateiend öffnen, Screenshots und Sprachausgabe leicht in Skripte einbauen sips,textutil,mdfindundmdlsdienen als Werkzeuge zur Dateiverarbeitung, um Bild- und Dokumentkonvertierung, Spotlight-basierte Suche und Metadatenprüfung zu automatisierennetworkQuality,networksetup,softwareupdateundsystem_profilerhelfen dabei, Netzwerkqualität, Wi‑Fi/DNS, OS-Updates sowie Hardware- und Softwareinformationen schnell zu prüfen
Umfang macOS-spezifischer Befehle
- macOS enthält neben den standardmäßigen Unix-Werkzeugen auch eigene Kommandozeilen-Tools, die Zugriff auf Betriebssystemfunktionen bieten
- Die genaue Verwendung jedes Befehls lässt sich mit
man <command>nachschlagen - Referenzumgebung ist macOS Sonoma
Energie, Ruhezustand und Prozesssteuerung
-
caffeinate- Verhindert, dass der Mac in den Ruhezustand wechselt- Wenn
caffeinateohne Flags oder Argumente ausgeführt wird, wechselt der Mac während der Laufzeit des Befehls nicht in den Ruhezustand caffeinate -u -t <seconds>wendet den Schutz vor Ruhezustand für die angegebene Anzahl Sekunden an- Mit dem Flag
-dwird zusätzlich verhindert, dass das Display in den Ruhezustand geht - Mit
-w <pid>kann ein bestehender Prozess angegeben werden;caffeinateendet dann ebenfalls, sobald dieser Prozess beendet wird caffeinate <command>startet den angegebenen Befehl als neuen Prozess und verhindert den Ruhezustand, bis dieser Prozess beendet ist
- Wenn
-
pmset- Energieverwaltungsstatus prüfen und steuernpmset -ggibt verfügbare Energieeinstellungen auspmset -g assertionszeigt energiebezogene Assertions anderer Prozesse an und ist nützlich, um Prozesse zu finden, die den Mac am Ruhezustand hindernpmset -g thermlogzeigt Informationen zu gedrosselten Prozessen an und kann beim Ausführen von Benchmarks hilfreich seinpmset displaysleepnowversetzt nur das Display sofort in den Ruhezustand, ohne das gesamte System schlafen zu legenpmset sleepnowversetzt das gesamte System sofort in den Ruhezustand
-
taskpolicy- Prozess-Scheduling steuerntaskpolicy -b <command>führt den angegebenen Befehl im Hintergrund aus; auf Apple-silicon-Macs läuft er dabei nur auf Effizienzkernentaskpolicy -b -p <pid>stuft einen bestehenden Prozess auf Hintergrundausführung herabtaskpolicy -B -p <pid>entfernt den Hintergrundstatus des angegebenen Prozesses- Auf Apple-silicon-Macs kann er danach auf Effizienz- oder Performance-Kernen laufen
- Dieses Verhalten gilt nur für Prozesse, die nachträglich in den Hintergrund versetzt wurden, nicht für Prozesse, die von Anfang an im Hintergrund gestartet wurden
taskpolicy -s <command>startet den angegebenen Befehl im angehaltenen Zustand, sodass sich zum Startzeitpunkt ein Debugger anhängen lässt
Zwischenablage, App-Start, Screenshots und Sprachausgabe
-
pbcopy,pbpaste- System-Zwischenablage verwenden<command> | pbcopykopiert die Ausgabe eines Befehls in die Zwischenablagepbpastegibt den Inhalt der Zwischenablage auf der Standardausgabe aus
-
open- Dateien und Anwendungen öffnenopen -a <app> <file>öffnet die angegebene Datei mit einer bestimmten Anwendung- Mit dem Flag
-gwird die Datei im Hintergrund geöffnet, ohne den Fokus der aktuellen Anwendung zu ändern open .öffnet das aktuelle Verzeichnis in einem neuen Finder-Fensteropen -R <file>zeigt die angegebene Datei in einem neuen Finder-Fenster an
-
screencapture- Screenshots aufnehmenscreencapture -cerstellt einen Screenshot und kopiert ihn in die Zwischenablagescreencapture <file>speichert einen Screenshot in der angegebenen Datei- Mit dem Flag
-T <seconds>wird erst nach der angegebenen Anzahl Sekunden aufgenommen
-
say- Text in Sprache umwandelnsay <message>gibt die angegebene Nachricht per Sprache aussay -f input.txt -o output.aifferzeugt aus der angegebenen Textdatei ein Hörbuch
Bilder, Dokumente, Suche und Metadaten
-
sips- Bildbearbeitungsips -z <height> <width> <image>skaliert ein Bild auf die angegebene Größe und ignoriert dabei das ursprüngliche Seitenverhältnissips -Z <size> <image>passt bei beibehaltenem Seitenverhältnis die längere Seite auf die angegebene Größe ansips -c <height> <width> <image>beschneidet das Bild zentriert auf die angegebene Größesips -r <degrees> <image>dreht das Bild um den angegebenen Winkel- Standardmäßig wird das Eingabebild destruktiv überschrieben; wenn ein anderer Ausgabepfad benötigt wird, sollte das Flag
-overwendet werden - Die Ausgabedatei muss dieselbe Dateiendung wie das Eingabebild haben
-
textutil- Dokumentdateien konvertierentextutilkann Dateien zwischen Microsoft Word, Plain Text, Rich Text und HTML konvertierentextutil -convert html journal.dockonvertiertjournal.docinjournal.html- Für
-convertsind die Wertetxt,html,rtf,rtfd,docunddocxmöglich
-
mdfind,mdls- Spotlight-Suche und Metadatenmdfind <query>führt eine Spotlight-Stichwortsuche mit der angegebenen Abfrage ausmdfind kMDItemAppStoreHasReceipt=1findet alle Apps, die über den Mac App Store installiert wurdenmdfind -name <name>sucht nach allen Dateien, deren Name dem angegebenen Wert entspricht- Mit dem Flag
-onlyin <dir>lässt sich der Suchbereich auf ein bestimmtes Verzeichnis beschränken mdls <file-path>gibt alle mit der angegebenen Datei verknüpften Spotlight-Metadaten aus
Netzwerk, Updates und Systeminformationen
-
networkQuality- Internetgeschwindigkeit messennetworkQualityführt auf dem Mac einen Internet-Geschwindigkeitstest aus- Mit dem Flag
-vlassen sich ausführlichere Informationen anzeigen - Das Flag
-Iführt den Test auf einer bestimmten Netzwerkschnittstelle aus
-
networksetup- Netzwerkeinstellungen prüfen und konfigurierennetworksetup -listnetworkserviceordergibt eine Liste der verfügbaren Netzwerkdienste ausnetworksetup -getinfo <networkservice>zeigt Informationen zum angegebenen Netzwerkdienst annetworksetup -getdnsservers <networkservice>gibt die DNS-Server des angegebenen Netzwerkdienstes ausnetworksetup -setairportnetwork <device> <network> [password]verbindet mit dem angegebenen Wi‑Fi-Netzwerk- In den meisten Fällen ist das Argument
<device>"en0"
-
softwareupdate- OS-Updates verwaltensoftwareupdate --listgibt verfügbare Software-Updates aussudo softwareupdate -iainstalliert alle verfügbaren Updatessoftwareupdate --fetch-full-installer --full-installer-version <version>versucht, das vollständige Installationsprogramm der angegebenen macOS-Version nach/Applicationsherunterzuladen
-
system_profiler- Systeminformationen abfragensystem_profilergibt standardmäßig alle verfügbaren Systeminformationen aus; die Ausgabemenge ist meist sehr großsystem_profiler <datatype>gibt nur Informationen zum angegebenen Teilsystem aussystem_profiler -listDataTypeszeigt alle Teilsysteme an, für die Informationen abgerufen werden können- Nützliche Datentypen sind unter anderem
system_profiler SPHardwareDataType: gibt die aktuelle Hardware-Übersicht des Macs, den Modellnamen und die Seriennummer aussystem_profiler SPSoftwareDataType: gibt die aktuelle Software-Übersicht des Macs und die genaue macOS-Versionsnummer aussystem_profiler SPPowerDataType: gibt Energie- und Batterieinformationen aus, einschließlich aktueller AC-Leistung und Batterieladezyklensystem_profiler SPDeveloperToolsDataType: gibt die aktuell aktivierten Xcode-Entwicklungswerkzeuge und SDK-Versionen aus
5 Kommentare
Nützliche fortgeschrittene Terminal-Befehle für das MacBook (für normale Nutzer)
https://www.youtube.com/watch?v=EhiqpFtmjig
Fortgeschrittene CLI-Befehle unter macOS
Ich habe denselben Artikel vor 7 Monaten schon einmal zusammengefasst und gepostet, aber diese Zusammenfassung hier ist sehenswerter.. schnief
Ich finde es sogar besser, weil man es problemlos versteht, selbst wenn man es ungefähr auf das von Ihnen zusammengefasste Maß kürzt, haha
Nein, stimmt nicht ... haha
Hacker-News-Kommentare
Mit sips und iconutil zusammen kann man aus einer einzigen 1024×1024-PNG-Datei eine
.icns-Datei für Apps erstellen, ganz ohne Third-Party-ToolsMit
mkdir MyIcon.iconseterstellt man das Icon-Set, erzeugt dann mitsips -zdie Größen 16/32/128/256/512 sowie die@2x-Dateien und führt anschließendiconutil -c icns MyIcon.iconsetausAls Bonus kann man mit
ffmpeg -i MyIcon.iconset/icon_256x256.png icon.icoauch eine.ico-Datei erzeugenAllerdings frage ich mich, ob es wegen der Art, wie
sipsPNGs herunterskaliert, besser ist, die 16px-Version direkt aus 1024px zu erzeugen oder sie schrittweise von 32px herunterzuskalierencpzuerst qlmanage verwenden, um eine 1024×1024-PNG-Datei zu erzeugenqlmanage -t -s 1024x1024 -o MyIcon.iconset/Icon1024.png icon.svgWenn man sich allerdings die System-Icons von macOS ansieht, scheint das heute nicht mehr von Hand gemacht zu werden
Aus der Liste mag ich besonders pbcopy und pbpaste
Wenn ich mit komprimiertem JSON arbeite, wechsle ich in iTerm und führe
pbpaste | json_pp | pbcopyaus; dann landet die formatierte Ausgabe im Clipboard, was sehr praktisch istpbpaste | something | pbcopyoft benutze, lohnt es sich, dafür eine Shell-Funktion anzulegenMan kann sie dann etwa als
pbfilter json_pp,pbfilter base64 -doderpbfilter sed 's/this/that/'verwendenFührt man einfach nur
pbfilterohne Argumente aus, kann es auch als Filter dienen, der die Formatierung aus dem Clipboard entfernt und nur reinen Text übrig lässtAllerdings funktioniert das nicht mit Aliases, Pipelines oder komplexen Ausdrücken; der Filterbefehl muss ein normaler Befehl oder eine Funktion samt Argumenten sein
Doppelte Leerzeilen, wie sie etwa durch Windows-artiges Copy-and-Paste entstehen, lassen sich zum Beispiel mit
alias winlines="sed '/^$/{$!{N;s/\n//;};}'"undalias pbw="pbpaste | winlines | pbcopy"bereinigenAuch unter Linux kann man macOS-ähnliches Verhalten mit
alias pbcopy='xsel --clipboard --input',alias pbpaste='xsel --clipboard --output'nachbildenFür X11 gibt es
xclip[0], für Waylandwl-clipboard[1], und beide unterstützen über Header-Parsing oder explizites Setzen von MIME-Typen auch binäre DateiformateDadurch kann man im Terminal Bilder kopieren und in GUI-Programme wie Browser oder Chat-Clients einfügen oder umgekehrt, und das ist auch für Shell-Skripte zur Desktop-Automatisierung nützlich
Unter macOS braucht man dafür als Umweg
osascript, um AppleScript aufzurufen undset the clipboard to...zu verwenden[0] https://github.com/astrand/xclip
[1] https://github.com/bugaevc/wl-clipboard
Wenn man auf dem Handy Text kopiert, kann man ihn auf der Mac-Kommandozeile direkt mit
pbpasteabrufenpbpaste | vipe | pbcopyvipe ist dabei ein Utility, das mitten in eine Pipe einen Editor, normalerweise vim, einschleift, und ist unter https://joeyh.name/code/moreutils/ zu finden
Kein Kommandozeilen-Tool, aber Network Link Conditioner ist ebenfalls richtig gut
Man kann damit Latenz, Bandbreite, Paketverlust und Ähnliches einfügen, um ein wirklich schlechtes Netzwerk zu simulieren, was für Tests nützlich ist
Sogar in Meetings, in denen die Kamera unbedingt eingeschaltet sein soll, kann man die Verbindung absichtlich ruinieren, sodass blockiges Video und Roboterstimme auftreten, und wenn dann alle bitten, das Video auszuschalten, wird alles „wie durch Magie“ wieder normal
https://developer.apple.com/download/all/
https://tldp.org/HOWTO/Traffic-Control-HOWTO/components.html
Sie setzt je nach Profil Regeln, die Paketverzögerung einfügen oder einen bestimmten Anteil an Paketen verwerfen
Unter macOS kann man mit
dnctlundpfctlähnliche Dinge tun, und noch mehr darüber hinausafplay für die Audiowiedergabe muss man ebenfalls unbedingt erwähnen
Damit lässt sich einfach ein MP3-Player für die Kommandozeile bauen
Es gibt auch das
say-Utility zur Sprachsynthese, das das TUNE-Format unterstützt, sodass man die gesamte Melodie und das Timing einer Äußerung steuern und sie so klingen lassen kann, als stecke Emotion darinApples Speech Synthesis Programming Guide gibt es unter https://josh8.com/blog/img/speech-synthesis.pdf, und ein passender Artikel ist hier zusammengefasst: https://josh8.com/blog/commandline-audio-mac.html
Die letzte Generation der Sprachsynthese, die es unterstützte, war die 2007 eingeführte Stimme Alex, und es ist sehr unwahrscheinlich, dass wir so etwas noch einmal sehen werden
Feingranulare Kontrolle über die Synthese und Natürlichkeit stehen grundsätzlich in einem Spannungsverhältnis, und Letztere ist deutlich wertvoller
say -v '?'Wenn ich produktiver sein will oder eine Präsentation halte, blende ich alle Symbole und Ordner auf dem Desktop aus
Mit
defaults write com.apple.finder CreateDesktop 0und anschließendkillall Finderwerden sie ausgeblendet, mit dem Wert1wieder eingeblendetIch habe mir dafür auch einen Bash-Alias gebaut; das Gist ist hier: https://gist.github.com/berndverst/6f58c0d6aedddb6c06c23e57d...
Trotzdem nutze ich
~/Desktophäufig, deshalb ist es einer der zwei Ordner in meinem Dock; der andere ist~/DownloadsAndererseits war es großartig, dass macOS Stacks auf dem Desktop eingeführt hat, und ich zeige diese Funktion immer Leuten, deren Desktop im Dateichaos versinkt
Es lohnt sich, sie mit anderen Einstellungen zu bündeln, die in Präsentationssituationen nützlich sein können
Gute Liste, und es gibt auch hidutil
https://developer.apple.com/library/archive/technotes/tn2450...
Man kann zum Beispiel auf einer PC-Tastatur die unter macOS fast nutzlose
Ins-Taste auf etwas wiePC Executeumlegen und sie dann in Keyboard Maestro abfangen und erneut zuordnenhidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}'kann man bei einer europäischen Tastatur dieparagraph-Taste links oben in eine nützlichere Backtick-Taste verwandelnhttps://hidutil-generator.netlify.app/
Mit
hdiutil detach /Volumes/some-usb-drivekann man zum Beispiel ein USB-Laufwerk aushängen oder mithdiutil makehybrid -joliet -o foo.iso ./srcfolder/ein ISO erzeugenVor ein paar Jahren habe ich beim Schreiben eines Skripts, das in einem großen Datenblock nach etwas suchte und nach Abschluss Bescheid geben sollte, am Ende den Befehl say eingebaut
Dann habe ich das vergessen und bin eingeschlafen, nur um ein paar Stunden später im Homeoffice durch eine Stimme hochzuschrecken, die klang, als würde ein „Eindringling“ mit einem Komplizen sprechen; erst als ich begriff, was los war, war ich sehr erleichtert
pushgeschrieben, das einen Titel und optional einen Textkörper entgegennimmtEs war praktisch für Dinge wie
./longRunningCommand && push "Task Done" "Here is a body", und wenn ich am Rechner saß, habe ich es auch zusammen mit einembeep-Skript verwendet, das nur einen Ton zur Abschlussmeldung abspieltesayausführtIch habe das in freier Wildbahn noch nie gesehen, aber ich hoffe auf einen zukünftigen Twitter-Thread, der mit „Ich habe ein msf-Modul benutzt, das auf dem Laptop des Kunden
sayaufgerufen hat“ beginntDeshalb habe ich ein Fish-Skript für den Abschluss von Befehlen hinzugefügt, das mit
afplayeinen Piepton abspielt, wenn die Aufgabe länger als 5 Sekunden gedauert hatDas hilft dabei, die Konzentration bei Aufgaben wiederzufinden, die „gerade lang genug dauern, um sie zu vergessen“
Das Kommandozeilen-Utility diskutil unter macOS verdient ebenfalls Lob
Heute hatte ich ein Problem mit einem bestimmten Slice auf der Festplatte, das sich mit dem grafischen Festplattendienstprogramm von macOS nicht beheben ließ; es war ein Überbleibsel von früheren Experimenten mit Asahi Linux
Ich dachte mir, dass sich das wahrscheinlich mit der
diskutil-CLI lösen ließe, und habe im folgenden Thread die Lösung gefundenhttps://apple.stackexchange.com/questions/411544/cant-reclai...
Jetzt kann ich die gesamte Platte wieder vollständig unter macOS nutzen
diskutilist großartig, aber dass Disk Utility.app in diesen Zustand geraten ist, ist unerquicklichSeit der Umstellung auf APFS wurde es nicht ordentlich gepflegt, und es gibt Fälle, in denen
diskutilfunktioniert, die GUI-App aber vollständig scheitertVor dem Redesign der Oberfläche war es ein robustes Werkzeug, das einem zumindest sagte, warum etwas fehlgeschlagen ist; jetzt ist es zu einer LEGO-Duplo-Oberfläche für Kleinkinder verkommen, die gerade noch so einen USB-Stick formatieren kann
Wenn man sich nicht an einen Befehl oder Parameter erinnern kann, lohnt sich auch ein Blick auf um
https://github.com/promptops/cli
Wenn man zum Beispiel
um prevent my mac from sleeping for 30meingibt, erhält man ein Ergebnis wiecaffeinate -u -t 1800open ist ein einfacher, guter Befehl, den ich ständig benutze
Ich habe mir etwa
alias tab='open . -a iterm',alias phpstorm='open -a "PhpStorm"'undalias smerge='open -a "Sublime Merge"'angelegt und nutze sie häufiger als die Open-/Recents-Dialoge der jeweiligen Appsopen -a ...fühlt sich die Tab-Autovervollständigung seit Jahren furchtbar an, weil Apple die Completion-Definition nicht aktualisiertIch habe in dieser Stack-Overflow-Antwort einen Workaround hinterlassen: https://stackoverflow.com/a/63097652
-nDamit lässt sich dieselbe Anwendung in mehreren Instanzen starten; früher war das für mich persönlich eines der meistgenutzten Utilities
Heute nutze ich es seltener, weil es weniger Apps mit derart gravierenden Designproblemen gibt
Man kann
/Applications/Sublime Merge.app/Contents/SharedSupport/bin/smergeund/Applications/Sublime Text.app/Contents/SharedSupport/bin/sublverwendenhttps://github.com/davatorium/rofi
Es sieht so aus: https://i.imgur.com/Hm9TGeV.jpg
Im VS-Code-Terminal öffnet es mit dem Alias
ovom aktuellen Ort aus, und dort kann man Dateien suchen und sie im Editor öffnenalias finder='open .'verwenden