home computer study misc politics about

shell for beginners

Basisbefehle
ll und chmod
Sherlocks kleine Brueder: find, locate und grep
wget und curl
top - der Taskmanager
sudo
misc
Fensterposition merken
bless
mount_afp
Einpacken und Auspacken mit tar
Preferences edieren mit defaults
Farbige Directory Listings mit color ls
Telefonbuch basteln
.tcshrc und aliases.mine
ftp mit dem Terminal
vi

Basisbefehle

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 und chmod

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

Sherlocks kleine Brueder: find, locate und grep

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.

wget/curl - der shelleigene Downloadmanager

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 - der Taskmanager

top listet alle laufenden Prozesse auf
kill 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'

sudo - wenn die shell nicht so will, wie ich es will

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 /

misc

mit scutil kann man configd konfigurieren
last zeigt die letzten loginvorgaenge.
osascript kann applescript kommandos aufrufen
chflags oder setfile setzen spezielle mac os x flags von files (z.B. CREATOR oder invisible)

Folgendes gibt eine interessante Liste aus (mal sehen, was man damit noch machen kann)
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

Terminal - Fensterposition merken

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 -info /

bless gibt Auskunft darüber, welche bootfähigen Systemordner sich auf der Platte befinden

mount_afp

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

Einpacken und Auspacken mit tar

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

Preferences edieren mit defaults

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.

Farbige Directory Listings mit color ls

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.

telefonbuch basteln

.tcshrc und aliases.mine

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 mit dem Terminal

komfortabler: ncftp installieren.

vi - ein mitgelieferter Kommandozeilen Texteditor

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

disclaimer

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