Die Grundprinzipien des Arbeitens mit der Shell erfährst du in meinem zauberbuch.
ls | listet den Inhalt des aktuellen verzeichnisses auf |
ls -a | listet den kompletten Inhalt auf, auch die unsichtbaren Dateien |
cd verzeichnis | wechselt in ein anderes verzeichnis (change directory) |
cd | wechselt ins Homedirectory ("/Users/xy") |
cd .. | ein Verzeichnis hoeher |
cd - | letzt benutzes Verzeichnis |
cd / | wechselt zu root (oberste Ebene) |
cp datei1 datei2 | kopiert eine Datei |
mv dir1 dir2/ | verschiebt ein Verzeichnis in ein anderes Verzeichnis |
mv datei dir/ | verschiebt eine Datei |
mkdir verzeichnis | legt ein neues Verzeichnis an |
rm file | loescht (unwiederruflich) |
rm -rf verzeichnis | loescht ein Verzeichnis mitsamt Inhalt |
So - damit kann man wohl die meisten Finderoperationen in der Shell nachvollziehen und muss zudem nicht immer erst Teekochen gehen, bis es dem Finder beliebt ein Fenster zu oeffnen *daeumchendreh*
Das Allerallerwichtigste Kommando ist man
(manual). Mit man commandoname
kann man sich eine
Anleitung zu jedem Kommando anzeigen lassen.
Zweitwichtigstes Utensil ist die Tabulatortaste, die Kommandos und
Dateinamen vervollstaendigt.
ll
ist ein abgewandelter ls
, der noch etwas mehr als nur die
Dateinamen anzeigt. Das sieht dann z.B. so aus:
drwxr-xr-x 21 user staff 670 Apr 10 20:22 Library -rwxrwxrwx 1 root wheel 3170162 Jun 14 20:05 Desktop DF lrwxr-xr-x 1 user staff 13 Jun 15 01:30 cores -> private/cores
daraus kann man jetzt folgendes ablesen:
das kryptische drwx...
zeigt die gesetzten Rechte an.
Diese Rechte kann man mit dem Befehl chmod
aendern.
chmod +x dateiname
z.B. macht eine Datei ausfuehrbar (oder gibt die Erlaubnis ein Verzeichnis zu oeffnen)
chmod go-w dateiname
nimmt group und other (dem Rest der
Welt) die Schreibrechte auf eine Datei.
Mit chown
kann man den Eigentümer einer Datei ändern
find sucht nach Dateien
find . -name bla.txt
sucht im aktuellen Verzeichnis und allen
Unterverzeichnissen nach einer Datei namens blabla.txt und gibt deren Pfad aus.
Wenn man nun nicht mehr genau weiss, wie die Datei hiess?
find . -name 'b*.txt'
findet alles was mit b anfaengt und mit .txt aufhoert.
Mit find kann man aber noch sehr viel lustigere Sachen machen:
find . -type f ! -perm 644 -ls
sucht alle files (type f),
die nicht (!) permissions auf 644 (-rw-r--r--) gesetzt haben und
listet (-ls) sie auf.
grep sucht nach Inhalten _in_ Dateien
grep Knubbelmac *.txt
sucht im aktuellen Verzeichnis in
allen Dateien, die auf .txt enden nach dem Wort Knubbelmac und gibt
die gefunden Zeilen aus.
Wem die Syntax von find zu kompliziert ist, der kann auch auf das
anfängerfreundlichere Kommando locate
ausweichen. In /usr/libexec liegt das skript locate.updatedb
, das die
locate datenbank in regelmässigen Abständen updatet.
Damit habe ich noch nicht viel gespielt, man sollte ihn hier aber trotzdem
erwaehnen: mit wget
kann man sich Dateien sehr komfortabel aus dem Netz
ziehen. wget --help
hilft weiter.
Unter macos 10.1 wurde wget durch curl ersetzt. Wer also Wert
darauf legt, wget zu behalten, sollte ihn vor dem update in sein
homeverzeichnis retten, da das update ihn gnadenlos
überschreibt.
top
listet alle laufenden Prozesse aufkill processID
beendet einen laufenden Prozess.
Um das Ganze noch etwas komfortabler zu gestalten, definiere ich
mir in meiner aliases.mine das alias pss. pss Opera
gibt mir direkt
die ProzeßID meines Browser aus.
alias pss 'ps -aux | grep \!* | grep -v grep'
bei der Meldung "permission denied" hilft meist ein sudo
(superuser do) + gewuenschtem Befehl weiter. Dann wird nach dem
Administrator-Passwort gefragt. Man sollte bei Aktionen, die superuser
erfordern, jedoch genau wissen, was man tut, da man damit wirklich viel kaputt
machen kann. z.B. mit (nicht ausprobieren):
sudo rm -rf /
scutil
kann man configd konfigurierenlast
zeigt die letzten loginvorgaenge.osascript
kann applescript kommandos aufrufenchflags oder setfile
setzen spezielle mac os x flags von files
(z.B. CREATOR oder invisible)cd Programm.app/Contents/MacOS/ strings Programmname
Gibt den Wert einer Variable aus:
echo $variablenname
Führt ein shellskript im aktuellen Verzeichnis aus
./skriptname.sh
Listet alle derzeit aktiven Internetverbindungen auf
netstat -f inet
erneuert die Anzeige alle n sekunden
netstat -w n
Mit ping stelle ich fest, ob und wie schnell eine bestimmte IP-Adresse oder Domain erreichbar ist. Ping gibt bei Domainnamen netterweise zusätzlich auch gleich die IP-Adresse aus.
ping www.hostname.de
Wer herausfinden möchte, wer sich hinter einer IP-Adresse
verbirgt, braucht nslookup
. Um herauszufinden, welche
Adresse man mit dem schwarzen Kleinbus anfahren soll, um
$Möchtegernadmin zu erklären, wie er das offene Mailrelay auf seinem
Server abschaltet, eignet sich whois
(Angabe eines
whois-servers mit whois -h whois.thur.de
zum Bleistift)
Auch sehr praktisch: den Festplatteninhalt sortiert nach Dateigröße auszugeben
cd / du | sort -n
Um dafür zu sorgen, dass das Terminal sich seine Fensterposition merkt, zieht man sein Shellfenster in die gewünschte Position und Größe und sichert es (mit einem Kreuzchen bei "Diese Datei beim Start des Terminals öffnen").
bless gibt Auskunft darüber, welche bootfähigen Systemordner sich auf der Platte befinden
Ein Ersatz für das lästige Apfel-K (mit Server verbinden) im Finder.
cd /Volumes mkdir bla mount_afp afp://username:password@hostadresse/shareverzeichnis bla ls /Volumes/bla
Unixkrempel kommt meist in einem tar-Archiv verpackt, das auf .tgz oder .tar.gz endet. Auspacken klappt mit:
tar xzvf dudeldidu.tgz
Und wer selbst solche netten, komprimierten Archive anlegen will, beispielsweise um sie per Mail zu verschicken, hackt folgendes in seine Shell:
tar czvf mein-archiv.tgz archivverzeichnis
Dazu gibt es das Kommando defaults
. Mit defaults
read
kann man sie anzeigen lassen, mit defaults write
setzen. Zum Beispiel:
defaults read com.apple.Terminal defaults write com.apple.Terminal "TerminalOpaqueness" '0.6'
Die erste Zeile gibt die Userpräferenzen für die Terminal.app aus, die zweite setzt die Fenstertransparenz auf 60 prozent.
download der Datei colorls.tar.gz von http://www.10k.org/~jake/
entpacken, umbenennen, ausführbar machen und in ein passendes Verzeichnis kopieren:
tar xzvf colorls.tar.gz mv colorls ls2 chmod +x ls2 cp ls2 /usr/local/bin/
dann muss man noch ein Alias in aliases.mine setzen:
alias ls '/usr/local/bin/ls2 --color -a'
Farben ändern kann man mit fileutils (ftp://www.macosxhints.com/fileutils.tar.gz). Datei auspacken, ausführbar machen und ebenfalls in /usr/local/bin/kopieren. Dann schreibt man die derzeitige Farbzuordnung in ein Textfile:
dircolors --print-database > .mycolors
In .mycolors kann man mit dem Texteditor seiner Wahl die Farben nach persönlichem Gusto ändern. Dann muss man noch dafü r sorgen, dass dircolors bei jedem Start der shell ausgeführt wird. Dazu schreibt man in seine .tcshrc:
eval 'dircolors .mycolors'
Zugegeben, es gibt auch andere Methoden, aber diese erschien mir bei meinen Anfängerspielen mit der Shell als die einfachste.
alias tel 'grep -n 1 \!* /Users/xy/Documents/tel.txt'
tel Name
aufrufen
In .tcshrc definiert man seine persönlichen Einstellungen für die Shell. Sie befindet sich im Homedirectory. (Alternativ hat Apple auch vorgesehen, Benutzereinstellungen für die Shell in $HOME/Library/init/tcsh/environment.mine zu speichern. Ich habe mich stattdessen für die klassische, auf anderen Unices übliche Variante entschieden.) Man kann dort z.B. die Variable PATH um eigene Verzeichnisse erweitern, z.B. Developer/Tools zur Variable PATH hinzufügen. Dadurch kann man die dort liegenden Kommandos wie SetFile u.a. benutzen. Meine .tcshrc sieht - gekürzt - so aus:
setenv APPDIR /Applications # fuer fink source /sw/bin/init.csh #java und pfad-kram setenv JDIR ${APPDIR}/jakarta setenv PATH ${PATH}:/Developer/Tools:${JDIR}/jakarta-tomcat-3.2.1/bin:${JDIR}/jakarta-ant-1.3/bin setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.3/Home setenv CLASSPATH ${JDIR}/jakarta-tomcat-3.2.1/webapps/symposion/WEB-INF/lib/cos.jar setenv MANPATH ${MANPATH}:/usr/local/man:/usr/X11R6/man:/sw/man:/sw/share/man setenv INFOPATH /usr/local/info ### shell verschoenerung eval `dircolors .dircolors` setenv PAGER less set prompt = "[%~]%# " ### fuer lynx # setenv http_proxy "http://10.0.0.1:3128" setenv LYNX_CFG ~/lynx.cfg
In $HOME/Library/init/tcsh/aliases.mine kann man Aliase definieren, z.B. um Dateien mit einem bestimmten Programm zu öffnen. Beispiele:
alias pss 'ps -aux | grep \!* | grep -v grep' alias ls '/usr/bin/ls2 --color' alias cls 'clear;ls' alias tel 'grep -i -A 1 \!* /Users/user/Documents/tel.txt' # mac in unixlinefeeds umwandeln und umgekehrt alias m2u 'perl -i -l012p015e 1' alias u2m 'perl -i -l015p012e 1' alias gnus 'emacs -f gnus-unplugged' alias PV 'open -a /Applications/graphic/Preview.app 2>/dev/null' alias jedit 'java -jar /Applications/text/jedit/jedit.jar &'
ftp servername
ftp-Verbindung oeffnen
?
alle Kommandos auflisten
pass
schaltet in den passive mode
get, put
download, upload
ls
Verzeichnisinhalt anzeigen
cd
Verzeichnis wechseln
lcd
lokales Verzeichnis anzeigen/wechseln
bye
Verbindung beenden
komfortabler: ncftp installieren.
Vi ist eVIl, sagen manche Leute und empfehlen den Wechsel zu einem
vernünftigen Editor wie emacs. Diese Leute trifft man in der Regel in
alt.religion.emacs an. Andere nennen ihn "den Editor, der beept". Das kommt
daher, daß Vi zwei Modi hat, den Befehlsmodus und den Eingabemodus. Wenn man im
Befehlsmodus texteingaben versucht, beept er. Die wichtigste Regel für Vi ist:
dreimal ESC drücken, danach befindet man sich auf jeden Fall im
Befehlsmodus. Ich finde Vi praktisch, weil er sehr schnell startet und benütze
ihn in der Regel, um schnell Textschnipsel irgendwo abzuspeichern:
Apfel-C, vi tip.txt, Apfel-V, ESC ZZ - fertig.
Eine Alternative zu vi stellt pico dar, der wesentlich einfacher zu
bedienen ist. Hier aber auf alle Fälle mal die wichtigsten Kommandos für vi:
vi filename | oeffnet oder erzeugt ein neues file |
<esc>:q! | beenden ohne zu sichern |
<esc>:wq oder <esc>ZZ | sichern und beenden |
<esc> | schaltet in den Befehlsmodus |
i,I,a,A,o,O | schalten in den Eingabemodus |
Befehlsmodus: | |
w | wort vorwaerts |
b | wort zurueck |
x, X | loeschen (vorwaerts - rueckwaerts) |
nx | loesche n Buchstaben |
ndd | loesche n Zeilen |
nD | loesche bis zum Zeilenende |
/regex | suche vorwaerts nach regex |
?regex | suche rueckwaerts |
n | wiederhole Suche |
Alle angaben nach besten Wissen und Gewissen. Im Zweifel sollte man immer besser noch mal die entsprechende manpage studieren.
elian@djini.de | Last modified: Sun Dec 8 05:34:39 CET 2002 |