Medien & Phantastik > Linux/Unix
[Tipp] Die Befehlszeile
Bitpicker:
Linuxbefehle kommen häufig ziemlich unintuitiv daher. Eine Faustregel, nach der diese Befehle häufig benannt wurden, scheint die zu sein, dass man die ersten beiden Konsonanten des eigentlich gemeinten Befehls verwendet. Deshalb heißt cp copy, rm remove, ls list und ln link (ok, eigentlich 'create symlink', aber wie gesagt, es ist eine Faustregel).
Befehle können Parameter haben. Parameter erfüllen die Aufgabe, die in der grafischen Oberfläche in Einstellungsfenstern und Ankreuzfeldchen zu finden sind: sie sagen dem Befehl, was er eigentlich machen soll. cp alleine kopiert nichts; man muss dem Befehl zumindest mitteilen, was er kopieren soll und wohin.
Parameter kommen meist in zwei Arten vor: solchen, vor denen ein einzelner Bindestrich steht (-f) und solche, vor denen doppelte Bindestriche stehen (--compress). Wie ihr vielleicht schon ahnt, bedeutet ein einzelner Strich 'hier folgen Ein-Zeichen-Parameter', während der Doppelstrich bedeutet 'hier folgt ein Parameter in einer Art Klartext, weil ich mir keine Einzelbuchstaben merken kann und mag'. Hinter einem Einzelstrich ist also jeder Buchstabe ein eigener Parameter für sich.
--- Code: ---tar -cvzf meinarchiv.tgz /home/meinverzeichnis
--- Ende Code ---
bedeutet also das Gleiche wie
--- Code: ---tar -- compress --verbose --use-compress-program gzip --file meinarchiv.tgz /home/meinverzeichnis
--- Ende Code ---
was wiederum so viel heißt wie
--- Zitat ---Liebes tape archive Programm, das nur so heißt, weil man früher Backups auf Bänder machen musste, nimm mein Verzeichnis /home/meinverzeichnis, packe es zusammen, benutze dafür gzip, stopfe es in die Datei meinarchiv.tgz und sag mir genau, was du da tust.
--- Ende Zitat ---
Eine Anmerkung zum letzten Teil (und dem --verbose Parameter): Befehlszeilenprogramme sind viel weniger redselig als ich. Meistens, wenn man sie ausführt, sagen sie nix, wenn das nicht ihre Aufgabe ist. ls, das einen Verzeichnisinhalt ausgeben soll, tut das natürlich, aber auf ökonomischste Weise. Andere Befehle halten einfach die Klappe, wenn sie erfolgreich abgelaufen sind. Das hängt noch mit den ttys von früher zusammen: wer will schon viel Papier und Zeit für 'Jau, das hat mal wieder sauber geklappt, herzlichen Glückwunsch zu dieser gekonnten Eingabe'-Ausgaben verschwenden.
Die meisten Befehle kommen aber mit einem Redeschwall-Parameter oder gleich mehreren von 'nickt'- bis zu 'fängt bei Adam und Eva an'-Qualität daher. Meist geht --verbose.
Genaues darüber, welche Parameter ein Befehl nun kennt, erfährt man auf mehrere Weisen. Die erste ist der Parameter -h oder --help, der meist eine kurze Liste möglicher Parameter für den jeweiligen Befehl ausgibt, also z.B.
--- Code: ---mount -h
--- Ende Code ---
Wenn diese Liste nicht deutlich genug ist, kann man sich die Dokumentation des Befehls ansehen, die sogenannte manpage (Seite des Manuals, also Handbuchs). Dafür gibt es einen Befehl:
--- Code: ---man mount
--- Ende Code ---
gibt die Handbuchseite für den Befehl mount aus.
Leider haben diese Handbuchseiten einen Nachteil: sie sind in der Regel von Gurus für Gurus geschrieben und listen daher Parameter und Funktionen nicht nach Wichtigkeit, sondern nach dem Alphabet auf. Das kann schon mal in fiese Sucherei ausarten. Alle manpages sind übrigens auch im Internet verfügbar, wer sich also eine ansehen will, kann auch auf Google z.B. man mount eingeben. Dabei ist die Formatierung auf HTML-Seiten sogar meist augenfreundlicher.
Bei Befehlen, die zwingend Parameter erwarten, führt übrigens oft auch die Eingabe des Befehlsnamens ohne Parameter zur Ausgabe von Hilfsinformationen.
Es gibt noch weitere Befehle, die wie man Informationen über andere Befehle bereithalten:
--- Code: ---apropos samba
--- Ende Code ---
durchsucht alle Manpages nach Informationen zu samba und gibt eine kommentierte Liste der Manpages aus, die was mit samba zu tun haben.
--- Code: ---info mount
--- Ende Code ---
gibt eine hypertext-formatierte alternative Manpage für mount aus, sofern sie für diesen Befehl auf diesem System existiert, ansonsten bekommt man eine allgemeine Infodatei angezeigt.
--- Code: ---whatis mount
--- Ende Code ---
gibt Kurzbeschreibungen aus den manpages, die mit mount zu tun haben, aus.
Gleich: weitere interessante Befehle.
Bitpicker:
@ Axx: mc ist maussensitiv, wenn ncurses installiert ist.
@ Haukrinn: für Einsteiger ist das Einarbeiten in vim, wenn es darum geht, mal ein Zeichen in eine Textdatei zu packen, m.E. etwas viel. Natürlich ist vim trotzdem komfortabler als der mc-Editor. Ich selbst benutze derzeit meist nano. Jedem das Seine und mir das Meiste! ;)
Robin
Bitpicker:
Hier nun ein paar weitere Befehle ohne Vortäuschung der Vollständigkeit und ohne lange Parameterlisten, wie ihr da dran kommt, habt ihr ja eben gelernt.
--- Code: ---su
--- Ende Code ---
Dieser Befehl heißt, je nachdem, wen man fragt, substitute user, switch user oder superuser. Die ersten beiden sind sachlich richtig: man wechselt damit den Benutzer. Gibt man als Parameter den Namen eines anderen Benutzers an, dann kannn man dieser Benutzer werden, wenn man anschließend dessen Passwort eingeben kann. Gibt man keinen Namen an, dann wird man zu Root (Passwort vorausgesetzt), also dem Systemadministrator, der alles darf, auch zerstören. Daher auch die Interpretation 'superuser' weil das eine häufige Anwendung ist.
Wenn man den Parameter -c verwendet, kann man sich das Hemd des anderen Benutzers für einen Befehl anziehen, der in Anführungsstrichen auf den Parameter folgt. Nach Abarbeitung des Befehls ist man automatisch wieder der alte. Beispiel:
--- Code: ---su -c "shutdown -h now"
--- Ende Code ---
fährt das System herunter, was der normale Benutzer in der Regel nicht darf, jedenfalls nicht von der Komandozeile aus. Die Anführungsstriche sind notwendig, damit su weiß, dass die darin enthaltenen Parameter nicht für su bestimmt sind, sondern in diesem Fall für 'shutdown' (-h steht übrigens für 'Computer anhalten', also abschalten, und die Anweisung now ist wohl deutlich; man kann dem System nämlich auch mitteilen, dass es erst pünktlich zum Abendessen oder nächste Woche runterfahren soll).
Nicht nur für Ubuntu-Benutzer interessant ist in diesem Zusammenhang der Befehl
--- Code: ---sudo
--- Ende Code ---
Dieser Befehl bedeutet 'mach das als Superuser'. 'Das' ist dabei ein Befehl, der im Parameter übergeben wird. Aber nicht jeder User darf mit sudo arbeiten, das dürfen nur User, die in die Gruppe 'wheel' eingetragen sind. Für sudo existiert eine Datei sudoers (meist in /etc), in der genau aufgeschlüsselt werden kann, welcher sudo-Benutzer welche Root-Befehle ausführen darf, ob er dafür ein Passwort eingeben muss oder nicht usw. Interessierte verweise ich auf die manpage.
In Ubuntu braucht man dauernd sudo und nie su, außer als
--- Code: ---sudo su
--- Ende Code ---
welches einem Benutzer für eine gewisse Zeit Root-Rechte einräumt. Das liegt daran, dass der Root-User unter Ubuntu im Gegensatz zu anderen Distris deaktiviert ist und der Erstbenutzer (und später angelegte, sofern sie in wheel stehen) über sudo an die wichtigen Root-Befehle darf.
Wer im Kapitel über mc aufgepasst hat, weiß, dassman viele Dinge mit Dateien in mc anstellen kann, aber eins kann man nicht: neue Dateien erstellen. Außer, man kopiert eine Datei, gibt ihr dabei einen neuen Namen und löscht dann ihren Inhalt. Zum Erstellen einer jungfräulichen Datei aus dem Nichts gibt es folgenden Befehl:
--- Code: ---touch Datei
--- Ende Code ---
was direkt an die Erschaffung Adams durch Gott in der sixtinischen Kapelle erinnert. Touch erstellt im aktuellen Verzeichnis die genannte Datei. Sie ist leer und kann anschließend mit dem Editor eures Vertrauens mit Inhalt gefüllt werden. Natürlich können andere Editoren wie vim, nano usw. auch einfach gestartet und mit Inhalt gefüllt werden und den Inhalt dann in eine neu anzulegende Datei schreiben, das kann der mc-Editor eben kurioserweise nicht.
Der Befehl
--- Code: ---ls
--- Ende Code ---
listet den Inhalt des aktuellen Verzeichnisses oder den Inhalt des im Parameter angegebenen Verzeichnisses auf, ist also die Entsprechung zu 'dir' unter DOS. Nützlich ist der Parameter -l (kleines L), der zusätzliche Infos zu den Dateien ausspuckt.
--- Code: ---mount
--- Ende Code ---
ist der Befehl, mit dem man Laufwerke, USB-Sticks, CD usw. ins Dateisystem einhängt, wenn die Automatik versagt oder man sich die Installation der Automatik versagt. ;) Wenn das Laufwerk aus irgend einem Grund bereits in der Liste der bekannten Laufwerke steht (/etc/fstab), kann es einfach gemeountet werden, indem die Devicedatei oder der Mountpunkt, also das Verzeichnis, wo man den Datenträger hinhaben will, im Parameter angibt, und zwar so, wie diese in der fstab stehen:
--- Code: ---mount /dev/hda1
mount /mnt/win98
--- Ende Code ---
tun auf meinem System dasselbe, sie nehmen nämlich meine Windows 98 Partition und hängen sie im Verzeichnis /mnt/win98 ein (was aber beim Booten sowieso passiert).
Übrigens kann man fstab (Liste der einhängbaren Dateisysteme) und mtab (Liste der eingehängten Dateisysteme) vergleichen, um zu schauen, ob ein Dateisystem nun drin ist oder nicht.
Ist das Dateisystem des einzuhängenden Laufwerks nun nicht in der fstab, muss man genauere Angaben machen. Weiteres dazu steht in der manpage, im Falle des Windows-Laufwerkes wäre z.B.
--- Code: ---mount -t vfat /dev/hda1 /mnt/win98
--- Ende Code ---
notwendig.
Jens:
Ui, ich finde Befehlszeilen immer gut. Weil ich früher immer so gern mit command.com und batch-Dateien gearbeitet habe :)
Und unter der Befehlszeile in Windows gibts auch das eine oder andere Tool, dass sich über das GUI nicht erreichen lässt - cipher zum Beispiel wenns darum geht, Spuren zu verwischen.
Bitpicker:
Verzeichnisse wechselt man wie unter DOS mit
--- Code: ---cd /Pfad
--- Ende Code ---
Der Befehl
--- Code: ---top
--- Ende Code ---
listet alle derzeit laufenden Programme auf. Ich empfehle aber stattdessen die Installation des Programms htop, welches diese Auflistung in bunt in einer mc-ähnlichen Oberfläche mit dauernder Aktualisierung vornimmt. Das Schöne daran ist, dass man in htop auch auf die vielen Optionen des Befehls 'kill' zugreifen kann, ohne sich mit diesem Befehl auseinandersetzen zu müssen.
Den Befehl kill brauche ich also nicht aufzuführen; innerhalb einer funktionsfähigen grafischen Oberfläche gibt es aber die Möglichkeit, über ein Terminal xkill aufzurufen, wenn ein grafisches Programm hängt, ohne dabei die ganze Oberfläche zu blockieren; dann wird der Cursor zum Totenkopf und das Programm, auf dessen Fenster man als nächstes klickt, wird gekillt.
Ähnlich wie top listet
--- Code: ---ps
--- Ende Code ---
alle derzeit laufenden Prozesse auf. Da gibt es viele, viele Parameter...
--- Code: ---reboot
--- Ende Code ---
ist ein Root-Befehl, der genau das ausführt, was er besagt, während
--- Code: ---reset
--- Ende Code ---
das aktuelle Terminal in den Ausgangszustand versetzt. Normale Anwender verwenden zum Löschen des Konsolen- oder Terminalinhalts das dem DOS-Befehl cls entsprechende
--- Code: ---clear
--- Ende Code ---
Eben habe ich Schussel noch
--- Code: ---umount /mnt/win98
--- Ende Code ---
vergessen, welches mein als Beispiel genanntes Windows 98-System wieder aushängen würde. Es ist eines der ungelösten Rätsel der Linuxwelt, warum das Ding nicht einfach unmount heißt. Sparwut kann auch zu weit führen...
Sehr schön ist der Befehl alias. Man gibt ihn allerdings nur selten ein. Er dient dazu, lange Befehlszeilen handlich zu machen. Ich habe beispielsweise ein Befehlszeilenprogramm namens rdiff-backup, welches ich benutze, um von meinem gesamten System ein Backup zu machen; dabei hat dieses Programm eine lange Liste von Parametern mit Verzeichnissen wie /sys, /proc und /tmp, die zu sichern Blödsinn wäre, und die deshalb über diese Parameter ausgeklammert werden. Das jedes Mal einzutippen, wäre viel Arbeit. Stattdessen habe ich in der Datei .bashrc ein Alias definiert, einfach mit:
--- Code: ---alias backup=rdiff-backup und-der-ganze-Rattenschwanz-von-Parametern
--- Ende Code ---
Jetzt muss ich nur noch backup eingeben, und das Ding wird abgearbeitet. Weil die Zuweisung in der .bashrc steht, liegt dieses Alias nach jedem neuen Login wieder vor, wäre ja sonst auch blöd.
Aliasse können sogar andere Aliasse enthalten, so dass bei mir z.B. der Befehl sysup mittlerweile alte Backup-Inkremente löscht, über backup das genannte Backup macht, Gentoo-Overlays aktualisiert, Portage aktualisiert und ein systemweites Upgrade anstößt, das ich nur noch akzeptieren oder verwerfen muss. Nein, das muss euch alles nichts sagen... ;)
Wer aber z.B. vom DOS-Befehl 'dir' nicht loskommt, kann ihn durch ein einfaches
--- Code: ---alias dir=ls
--- Ende Code ---
zum Linuxbefehl machen. In meinem Buch über Konsolenbefehle steht 'dir' sogar drin, aber ich bin ziemlich sicher, dass das kein Standardbefehl ist...
Alias alleine zeigt euch übrigens die Liste der für den aktuellen Benutzer definierten Aliasse an.
Den Inhalt einer Datei ohen Editor recht komfortabel anzeigen kann man mit
--- Code: ---less Dateiname
--- Ende Code ---
wobei das ein Wortspiel auf 'more' ist, einen anderen Befehl, der das Gleiche tut, aber weniger kann. Ja, das Linuxvölkchen besteht schon aus Scherzkeksen.
Eine Konsole oder ein Terminal bzw. eine Identität als anderer Benutzer verlässt man mit dem Befehl
--- Code: ---exit
--- Ende Code ---
Ein Terminal kann man natürlich auch einfach übers X am Fenster schließen. Auch der Befehl 'logout' kann verwendet werden.
Hilfreich ist auch der Befehl 'tail', z.B. in der Form
--- Code: ---tail -f /var/log/messages
--- Ende Code ---
Dieser Befehl zeigt nämlich das Ende (den Schwanz, tail) der genannten Datei an, und dank des Parameters -f (follow) wird diese Anzeige auch aktualisiert. Systemmeldungen bzgl. von Ereignissen, die vor kurzem im Betriebssystem aufgetreten sind oder ab Eingabe dieses Befehls auftreten, kann man so bequem verfolgen, was bei der Fehlersuche hilfreich ist. Man verlässt diese Anzeige wie auch die vieler anderer dauerhaft laufender Befehle mit Strg + C. Manche Befehle wie z.B. 'man' und 'less', die auf Editorfunktionen aufsetzen, beendet man mit q. (Oh je, was für ein Durcheinander das hier wird...)
So, ich würde sagen, dass das alle Befehlszeilenbefehle sind, die ich selbst öfter mal benutze und für allgemein recht wichtig halte, die man aber nicht durch mc umgehen kann. Es gibt natürlich noch sehr viel mehr, und nicht zuletzt gibt es eine Menge von Befehlen und Programmen, Skripten usw., die ebenfalls sehr nützlich sind. Ein Beispiel dafür ist locate, welches man benutzen kann, um blitzschnell (weil es eine Datenbank verwendet) eine Datei im Dateisystem zu suchen.
Robin
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln