Terminal Quickies


Aus Macwrench

Wechseln zu: Navigation, Suche
Terminal.png
  Ausbaufaehig.png

Dieser Artikel ist als besonders ausbaufähig gekennzeichnet worden.

Du kannst dem macwrench Team helfen, diese zu kurzen Artikel zu erweitern. Hinweise über besonders ausbaufähige Teile des Artikels sind evtl. auf der Diskussionsseite hinterlegt.
Ausbaufähige Artikel werden in der Kategorie "Ausbaufähig" gesammelt, weitere Informationen zu der Verwendung von Berwerungsbausteinen sind im entsprechenden Hilfeartikel verfügbar.

 

In diesem Artikel findet sich eine Sammlung diverser Terminal-Kommandos, die im Alltag immer wieder nützlich sein können. Falls bereits aus einem dieser Quickies ein eigener Artikel entstand, ist dieser jeweils am Ende der Beschreibung verlinkt.

Inhaltsverzeichnis

Dateien und Verzeichnisse

Zwei Verzeichnisse miteinander vergleichen

Mit dem Manpage.png diff-Kommando lassen sich sehr einfach die Inhalte zweier Verzeichnisse rekursiv miteinander vergleichen (beispielsweise zum nachträglichen Verifizieren eines Backups). Durch Entfernen von "r" im folgenden Beispiel wird der Vergleich nicht-rekursiv durchgeführt:

diff -qr ./old/ ./new/

Beispielausgabe:

Only in ./old/: aDeletedFile.txt
Files ./old/anotherFile.txt and ./new/anotherFile.txt differ
Only in ./new/: aNewFile.txt

Alle .svn Metadaten rekursiv löschen

Folgende Anweisung löscht alle .svn Verzeichnisse innerhalb des aktuellen Verzeichnisses und aller Unterverzeichnisse (rekursiv):

find . -regex '.*.svn' -exec rm -rf "{}" \;

Alle .DS_Store Dateien rekursiv löschen

Folgende Anweisung löscht alle .DS_Store Dateien innerhalb des aktuellen Verzeichnisses und aller Unterverzeichnisse (rekursiv):

sudo find ./ -name ".DS_Store" -depth -exec rm {} \;

Um die Dateien auf dem gesamten System zu löschen, ist ./ durch / zu ersetzen.

.DS_Store Dateien auf Netzwerkvolumes verhindern

Um das Erstellen dieser Dateien auf Netzwerkvolumes dauerhaft zu unterbinden, ist folgendes im Terminal einzugeben:

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

Um dies wieder zu deaktivieren, ist folgende Anweisung einzugeben:

defaults delete com.apple.desktopservices DSDontWriteNetworkStores

Daten sicher löschen

Die Funktion "sicher löschen" des Finder Papierkorbs steht auch im Terminal zur Verfügung und zwar über das Kommando Manpage.png srm:

srm FILE_OR_DIRECTORY
srm -r DIRECTORY_RECURSIVELY

Dabei stehen verschiedene Varianten zur Auswahl, die auch aus dem Disk Utility bekannt sein dürften (zum Löschen von Partitionen):

-n, --nounlink overwrite file, but do not rename or unlink it
-s, --simple only overwrite with a single pass of random data
-m, --medium overwrite the file with 7 US DoD compliant passes (0xF6, 0x00, 0xFF, random, 0x00, 0xFF, random)
-z, --zero after overwriting, zero blocks used by file

Quelle: Manpage.png srm manpage, siehe auch: srm in der Wikipedia (engl.)

Dateien und Verzeichnisse verstecken

Folgende Anweisung bewirkt, dass die jeweiligen Objekte im Finder nicht mehr sichtbar sind, ohne diese umbennen zu müssen (nur auf HFS+ Volumes):

chflags hidden FILE_OR_DIRECTORY

Folgendes Kommando bewirkt genau das Gegenteil:

chflags nohidden FILE_OR_DIRECTORY

Siehe auch: Dateien und Ordner verstecken hier auf Macwrench

.deb Archive entpacken

Die Installationsarchive Debian-basierter Linux-Distributionen lassen sich auch unter Mac OS X mit Bordmitteln entpacken. Dazu wird das Kommandozeilenprogramm Manpage.png ar verwendet, beispielsweise so:

ar vx dateiname.deb

Die eigentlichen Dateien sind im dabei extrahierten Archiv data.tar.gz enthalten, das sich mit jedem handelsüblichen Packprogramm (z.B. The Unarchiver) oder eben auch im Terminal entpacken lässt:

tar xvfz data.tar.gz

Die Dateien control.tar.gz und debian-binary werden zum reinen Extrahieren einzelner Dateie nicht benötigt, sie enthalten lediglich Informationen zur Installation des Paketes (siehe auch: Debian-Paket in der Wikipedia).

Dateilisting mit vollständigen Datumsangaben

Standardmäßig zeit Manpage.png ls das Dateidatum im Format "Tag Monatsname Stunden:Minuten" an. Um zusätzlich die Sekunden- und Jahresangaben anzuzeigen, ist unter OS X lediglich die Option -T (Großschreibung beachten!) anzuhängen, beispielsweise so:

ls -alT

Administration

Aktuelle Arbeitsspeicher-Belegung prüfen

Durch die Eingabe vom vm_stat kann eine detaillierte Übersich der derzeitigen Arbeitsspeicherauslastung angezeigt werden. Zum errechnen der jeweiligen Größe in *byte ist der entsprechende Wert mit der "page size" zu multiplizieren und durch die jeweilige Potenz von 1024 zu teilen:

vm_stat

liefert beispielsweise:

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                        1005031.
Pages active:                       389132.
Pages inactive:                     182756.
Pages speculative:                  219753.
Pages wired down:                   298729.
"Translation faults":            831704131.
Pages copy-on-write:              21865968.
Pages zero filled:               402761914.
Pages reactivated:                 1065664.
Pageins:                           4099764.
Pageouts:                           699567.
Object cache: 181 hits of 1789806 lookups (0% hit rate)

389132 * 4096 / (1024^3) ≅ 1,4844 GB

Siehe auch:

Ungenutzten Arbeitsspeicher freigeben

Mit Manpage.png purge kann derzeit ungenutzter, aber von Programmen noch reservierter Speicher wieder freigegeben werden:

purge

Startzeit von Prozessen ermitteln

Die folgende Anweisung bewirkt die Ausgabe der aktuell laufenden Prozesse inklusive deren Start-Uhrzeit:

ps -ef

PowerPC Applikationen finden

Mit Hilfe des foldenden Terminal-Kommandos lassen sich installierte PowerPC Anwendungen ausfindig machen. Das ist insbesondere vor einem Update auf OSX Lion hilfreich, da diese Anwendungen dann nicht mehr laufen werden (die PowerPC-Unterstützung via Rosetta wurde bekanntlich mit 10.7 entfernt):

system_profiler SPApplicationsDataType

In der dadurch erzeugten Liste lassen sich anhand des Attributs "Kind" PowerPC-Anwendungen identifizieren. Für eine Schnellsuche (ob überhaupt PowerPC Anwendungen existieren) genügt folgender Aufruf:

system_profiler SPApplicationsDataType | grep PowerPC

Siehe auch: Manpage.png system_profiler manpage, System Profiler in der Wikipedia (engl.)

Benutzer remote ausloggen

Hin und wieder kommt es auch unter Mac OS vor, dass die Oberfläche spinnt, keine Benutzeriennahmen annimmt oder der Finder komplett blockiert. Dazu muss man nicht notwendigerweise das komplette System zwangsweise ausschalten (via 4Sek. Powerbutton) sondern es genügt oftmals, entweder den Finder bzw. das Dock zu killen oder den jeweiligen Benutzer zwangsweise abzumelden. Damit werden dann allerdings auch die gestarteten Anwendungen – die ja alle als Kindprozesse von Manpage.png loginwindow laufen – ebenfalls beendet, so dass nicht gespeicherte Daten unwiderbringlich verloren gehen.

Um die Benutzersitzung also zwangsweise zu beenden, sind folgende Schritte notwendig:

Mit folgendem Kommando die Prozessnummer der entsprechenden loginwindow-Instanz herausfinden (sollte am Benutzer zu erkennen sein):

ps -A -j | grep loginwindow

Mit Manpage.png kill den Prozess beenden, z.B.:

sudo kill 123

Hinweis: der Prozess /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow console ist die eigene SSH Session.

Software-Updates nur herunterladen

Vor Mac OS X Snow Leopard (10.6) bot die Software-Update Applikation die Möglichkeit, Updates nur herunterzuladen ohne diese gleich zu installieren. In 10.6 fiel diese Option weg, lässt sich jedoch im Terminal weiterhin mit Hilfe des folgenden Kommandos ausführen:

softwareupdate -d -a

Die heruntergeladenen Installationspakete sind anschließend in folgendem Verzeichnis zu finden:

/Library/Updates/

Weitere Informationen dazu gibt es in der manpage zu Manpage.png softwareupdate

Bluetooth-Assistent deaktivieren

Um das automatische Starten des Bluetooth-Assistenten zu deaktvieren, wenn beispielsweise beim Aufwachen aus dem Ruhezustand gerade keine Tastatur und/oder Maus aktiv ist, können folgende Anweisugnen im Terminal verwendet werden:

sudo defaults write /Library/Preferences/com.apple.Bluetooth BluetoothAutoSeekKeyboard '0'
sudo defaults write /Library/Preferences/com.apple.Bluetooth BluetoothAutoSeekPointingDevice '0'

Sprache im Anmeldebildschirm ändern

Mit Hilfe der folgenden Terminal-Anweisung kann die Systemsprache geändert werden:

sudo languagesetup

Siehe auch: support.apple.com

Netzwerk

DNS-Cache leeren

Terminal.png

Um nach Änderungen an der DNS-Konfiguration oder der lokalen Namensauflösung in Manpage.png /etc/hosts kann man mit folgendem Terminal-Kommando den lokalen DNS-Cache leeren:

OS X Version Terminal-Anweisung
bis Mac OS 10.4 (Tiger) sudo lookupd -flushcache
bis Mac OS 10.6 (Snow Leopard) sudo dscacheutil -flushcache
bis OS X 10.8 (Mountain Lion) sudo killall -HUP mDNSResponder
OS X 10.9 (Mavericks) sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
OS X 10.10 (Yosemite) * bis 10.10.3:
sudo discoveryutil mdnsflushcache; sudo discoveryutil udnsflushcaches
seit 10.10.4:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
seit OS X 10.11 (El Capitan) sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

*) In Version 10.10.0 wurde mDNSResponder durch discoveryd ersetzt, der in Version 10.10.4 wegen anhaltender Probleme wieder entfernt wurde. Somit gleicht das Vorgehen in Version 10.10.4 und neuer wieder dem Vorgehen unter OS X Mavericks.

Alle DNS-Records einer Domain ermitteln

Um alle A-, MX-, SOA- etc. -Records einer Domain zu ermitteln, ist folgende Anweisung im Terminal einzugeben:

dig <HOSTNAME> ANY +nocmd +nostats +noquestion

TXT-Records können mit folgenden Anweidungen ausgelesen werden:

dig -t txt <HOSTNAME>
dig TXT <HOSTNAME>
host -t txt <HOSTNAME>

Sicherheit

Sandbox-Informationen anzeigen

Um die Sandbox-Konfiguration (entitlements) aus dem Mac App Store heruntergeladener Apps anzuzeigen, sind folgende Anweisungen im Terminal einzugeben:

Gültigkeit der Codesignatur überprüfen
spctl -a -v /Pfad/zum/Appbundle.app
Anzeige diverser Informationen über die App
codesign -d -v /Pfad/zum/Appbundle.app

liefert beispielsweise (Apple Configurator):

Identifier=com.apple.configurator
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=18631 flags=0x200(kill) hashes=923+5 location=embedded
Signature size=4169
Info.plist entries=31
Sealed Resources rules=12 files=158
Internal requirements count=2 size=1228
Anzeige der XML-entitlements im Klartext
codesign -d --entitlements - /Pfad/zum/Appbundle.app

liefert beispielsweise (Apple Configurator):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.app-sandbox</key>
	<true/>
	<key>com.apple.security.device.usb</key>
	<true/>
	<key>com.apple.security.files.user-selected.read-write</key>
	<true/>
	<key>com.apple.security.network.client</key>
	<true/>
	<key>com.apple.security.temporary-exception.files.absolute-path.read-only</key>
	<array>
		<string>/Library/Preferences/com.apple.usbmuxd.plist</string>
	</array>
	<key>com.apple.security.temporary-exception.files.absolute-path.read-write</key>
	<array>
		<string>/private/var/db/lockdown/</string>
		<string>/private/tmp/</string>
	</array>
	<key>com.apple.security.temporary-exception.sbpl</key>
	<array>
		<string>(allow file-read-data (regex #".+\.iosdevicebackup$"))</string>
		<string>(allow mach-lookup (global-name #"com.apple.syncservices.SyncServer"))</string>
		<string>(allow network-outbound (literal "/private/var/run/usbmuxd"))</string>
		<string>(allow mach-lookup (global-name-regex #"^com\.apple\.DeviceLink\.AppleMobileBackup\..+"))</string>
		<string>(allow mach-lookup (global-name #"com.apple.storeagent-xpc"))</string>
		<string>(allow file-read-data (regex #".+\.ipsw$"))</string>
		<string>(allow distributed-notification-post)</string>
	</array>
</dict>
</plist>
Siehe auch

Entwicklung

iOS Simulator - Screenshot erstellen

Mit Hilfe der folgenden Anweisung lässt sich ein Screenshot des derzeit vom iOS Simulator angezeigten Bildschirminhaltes anfertigen, der dann im aktuellen Verzeichnis (pwd) abgelegt wird:

xcrun simctl io booted screenshot

Alternativ kann ein Zielpfad angegeben werden:

xcrun simctl io booted screenshot <pfad-zur-zieldatei>

iOS Simulator - Video aufzeichnen

Mit Hilfe der folgenden Anweisung lassen sich Interaktionen im iOS Simulator als Videodatei aufzeichnen:

xcrun simctl io booted recordVideo <pfad-zur-zieldatei>

Sonstiges

System-Icons finden

Mit dem folgenden Kommando lassen sich sämtliche vom System verwendeten .icns Dateien auffinden:

find /System/Library /Library -iname \*.icns -print

Apps vom MAS erneut installieren

Es kommt des öfteren mal vor, dass die Mac App Store App deinstallierte Apps nicht als deinstalliert registriert und sich dann standhaft weigert, solche Apps erneut zu installieren. Es erscheint lediglich ein Hinweis, die App sei bereits installiert.

In diesem Fall sollte folgende Terminal-Anweisung dem App Store wieder auf die Sprünge helfen:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

Doppelte Einträge im "Öffnen mit ..." Finder-Menü beseitigen

Hin und wieder kommt es vor, das Programme im Finder-Kontextmenü "Öffnen mit ..." mehrfach gelistet sind. Um diesen Fehler zu bereinigen, ist folgendes im Terminal einzugeben:

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain user

Anschließend ist der Finder mit folgender Anweisung neu zu starten

killall Finder
Alternativ kann das auch über das Dock-Menü erfolgen, in dem während des Klicks auf den Finder-Eintrag die folgenden Tasten gedrückt werden:
+
  Info.png
Hinweis: dadurch werden auch die Warnhinweise für aus dem Internet heruntergeladenen Programme zurückgesetzt, so dass beim nächsten Start eines solchen Programms OS X erneut nachfragt, ob man ein aus dem Internet geladenes Programm wirklich öffnen möchte.
 

Siehe auch

Ansichten