{{{#!vorlage Wissen [:Verzeichnisstruktur: Verzeichnisstruktur von Linux] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Beim ersten Kontakt mit der [:Shell:] bzw. dem [:Terminal:] haben viele Menschen erstmal keine Ahnung, was sie nun machen sollen und stellen Fragen wie: \\ \\ * Wofür ist das Terminal gut? * Wie benutze ich es? * Was will es von mir? = Der Beginn: der Prompt = Öffnet man ein Terminalfenster, hat man meist ein schwarzes Fenster vor sich, in dem zwei Wörter stehen, z.B.: {{{#!vorlage Befehl erika@Notebook:~$ }}} ''erika'' ist hier der Benutzername, beschreibt also den jeweils angemeldeten Nutzer. ''Notebook'' ist der [:Rechnername:], der während der Installation vergeben wird. Diese Wörter bedeuten praktisch also: ''erika'' benutzt gerade ihr ''Notebook''. Wenn bei der Installation andere Namen gewählt wurden, stehen hier natürlich die entsprechenden. Aber das Grundprinzip bleibt gleich und wird ab jetzt im Artikel als Beispiel genutzt: {{{#!vorlage Befehl benutzer@Rechner:~$ }}} = Und nun? Befehle eingeben! = {{{#!vorlage Hinweis Unbedingt beachten: Unix/Linux und damit auch Ubuntu unterscheidet streng zwischen Groß- und Kleinschreibung. Tippfehler werden nicht verziehen! }}} Manchmal wird die Shell auch Eingabeaufforderung genannt, was gar nicht so falsch ist. Das Terminal ist genau genommen nur das Wirtsprogramm der Shell. Es nimmt die Eingaben des Benutzers zur Verarbeitung durch die Shell entgegen und stellt ihre Ausgaben und die von Kommandos dar. Die Shell ist ein Werkzeug, welches dem Benutzer die Möglichkeit gibt, Befehle an den Rechner zu geben. Ein einfaches Beispiel: {{{#!vorlage Befehl benutzer@Rechner:~$ ls }}} Der Befehl '''[:ls:]''' bedeutet, dass die Namen der im Verzeichnis vorhandenen Dateien ausgegeben werden sollen. Einfach eingeben und [[Vorlage(Tasten, Enter)]] drücken. Dies führt zu einer Ausgabe, z.B. {{{#!vorlage Befehl benutzer@Rechner:~$ ls Desktop roms doom3 runtime-workspace }}} Im Home-Ordner finden sich also vier Dateien. Die jeweilige Farbe lässt sich in der obigen Ausgabe nicht wiedergeben, sie unterscheidet aber den Ordner [color=#0000FF]'''Desktop'''[/color] vom Skript [color=#00FF00]'''doom3'''[/color]. Ersterer ist typischerweise blau, letzteres grün. Dies hängt von der gewählten [:Shell:] ab. = Moment: Home-Ordner? = Richtig, denn im [:Homeverzeichnis:] befindet man sich normalerweise immer nach dem Öffnen des Terminals. Jeder Benutzer hat ein eigenes, privates Verzeichnis, '''/home/benutzer'''. Statt des langen Pfades kann und wird oft die Abkürzung '''~''' benutzt. Alle Wörter am Anfang der Zeile (auch ''Prompt'' genannt) bedeuteten also noch mehr: ''benutzer'' benutzt gerade den ''Rechner'' und befindet sich im eigenen Homeverzeichnis. = Die Navigation = == Anzeige: vom eigenen Standpunkt aus == Natürlich will man sich auch andere Verzeichnisse angucken. Angenommen, der Inhalt des Ordners '''Desktop''' sei von Interesse. Also gibt man {{{#!vorlage Befehl benutzer@Rechner:~$ ls Desktop }}} ein und schon sieht man den Inhalt des Ordners. In einigen Ordnern liegen manchmal noch weitere Unterordner, z.B. ein Ordner '''Icons'''. Will man nun dessen Inhalt ansehen, muss man ihn einfach anfügen, mit einem '''/''' getrennt: {{{#!vorlage Befehl benutzer@Rechner:~$ ls Desktop/Icons }}} == Verzeichnis wechseln == Oft ist es sinnvoll, Ordner zu betreten bzw. in diese zu wechseln. Dies geht genauso wie den Inhalt ausgeben, der Befehl dazu lautet '''[:cd:]''': {{{#!vorlage Befehl benutzer@Rechner:~$ cd Desktop benutzer@Rechner:~/Desktop$ }}} Nun befindet man sich im Verzeichnis '''/home/benutzer/Desktop'''. Will man nun den Inhalt von '''Icons''' angucken, reicht ein {{{#!vorlage Befehl benutzer@Rechner:~/Desktop$ ls Icons }}} == Anzeige: von überall == Dies stellt uns vor ein Problem: Wie kommt man nun wieder an den Inhalt von '''/home/benutzer'''? Entweder wählt man den langen Weg und gibt den gesamten Pfad an: {{{#!vorlage Befehl benutzer@Rechner:~/Desktop$ cd /home/benutzer benutzer@Rechner:~$ ls Desktop roms doom3 runtime-workspace }}} Oder aber man nimmt die Abkürzung und geht wieder ein Verzeichnis nach oben: {{{#!vorlage Befehl benutzer@Rechner:~/Desktop$ cd .. }}} Die zwei Punkte '''..''' (das Leerzeichen davor nicht vergessen!) stehen immer für das übergeordnete Verzeichnis. Zusätzlich gibt es auch noch einen Punkt '''.''', der immer für das aktuelle Verzeichnis steht. Dazu gleich mehr... Der eleganteste Weg lautet: {{{#!vorlage Befehl benutzer@Rechner:~/Desktop$ cd $HOME }}} und bringt einen von jedem beliebigen Platz zurück in das eigene Homeverzeichnis. Drei Punkte gibt es nicht ;) Stattdessen kann man auch einfach nur {{{#!vorlage Befehl benutzer@Rechner:~/Desktop$ cd }}} eingeben und landet dadurch ebenfalls im Homeverzeichnis. = Programme starten = Nicht nur als Ersatz für einen [:Dateimanager:] ist das Terminal brauchbar, sondern auch, um unabhängig von der grafischen Oberfläche Programme starten zu können. == Allgemeiner Start == Als Beispiel sei hier die Bildverarbeitung [:GIMP:] genannt: um sie zu starten, genügt es, einfach den Namen ins Terminal zu tippen und mit [[Vorlage(Tasten, Enter)]] zu bestätigen: {{{#!vorlage Befehl benutzer@Rechner:~$ gimp }}} Wichtig ist dabei, dass das Programm im Pfad liegt. Im was? Im Pfad, auch ''PATH'' genannt. Es gibt eine [:Umgebungsvariable:], in der bestimmte Ordner stehen. Wenn man jetzt einen Programmnamen eingibt, sucht die Shell automatisch in diesen Ordnern und führt das Programm aus, wenn es vorhanden ist. Wenn ein Programm nicht im Pfad zu finden ist, dann startet es auch nicht. Solche Programme startet man zumeist, indem die Startdatei per Hand ausgeführt wird. Man bewegt sich also wie oben beschrieben mit '''cd''' in das Verzeichnis, in dem die Datei gespeichert ist und startet diese dann mit: {{{#!vorlage Befehl benutzer@Rechner:~$ ./programmname }}} Wie oben beschrieben, steht das '''./''' immer für das aktuelle Verzeichnis, es wird also nicht im Pfad gesucht. Dies betrifft insbesondere auch Programme im eigenen Homeverzeichnis. Diese können nur mit einem führenden Punkt '''./''' gestartet werden: {{{#!vorlage Befehl benutzer@Rechner:~$ ./mein_programm }}} Alternativ dazu kann man ein Programm natürlich immer auch durch den richtigen und kompletten Pfad starten: {{{#!vorlage Befehl benutzer@Rechner:~$ /pfad/zum/programm/programm_name }}} == Übergabe eines Argumentes == Bei praktisch allen Programmen, die Dateien bearbeiten oder wiedergeben, kann man diese Dateien auch gleich mit angeben. Diese Angaben nennt man dann ''Argument''. So kann man Gimp z.B. gleich sagen, welches Bild bearbeitet werden soll: {{{#!vorlage Befehl benutzer@Rechner:~$ gimp /home/user/Bild.png }}} == Programme im Terminal beenden == Die meisten Programme, die man über das Terminal aufgerufen hat, kann man mit der Tastenkombination [[Vorlage(Tasten,strg )]] + [[Vorlage(Tasten,C )]], bei aktiviertem Terminal, wieder beenden. Einige Programme, die nur im Terminal laufen, wie z.B. das Programm [:man:] zum Anzeigen der manpage (Handbuchseite) eines Befehls, werden mit der Taste [[Vorlage(Tasten,q)]] (für Quit) beendet. {{{#!vorlage Warnung Zu beachten ist hierbei, dass keine grafischen Programme gestartet werden können, wenn der [:XServer:] nicht gestartet ist und ergo kein Fenstermanager diese Programme zeichnen könnte. In einem "reinen" Terminal (oder auch Konsole), erreichbar über die Tastenkombination [[Vorlage(Tasten, Strg+Alt+F1)]]-[[Vorlage(Tasten, F6)]] ist man also ausschließlich auf textbasierte Programme wie beispielsweise [:Nano:] oder [:mpg123:] angewiesen. Wer ein Terminalfenster aus seiner Desktop-Umgebung öffnet und dort Befehle eingibt, hat dieses Problem nicht. }}} = Hilfe zu Befehlen und Programmen = Die Shell hat eine eingebaute Hilfefunktion für die von dort aufrufbaren Befehle und Programme. Dabei ist zwischen eingebauten Befehlen der Shell ([wikipedia_en:Shell_builtin:Shell-Builtins]) und externen Kommandos zu unterscheiden. Um bei den oben verwendeten Beispielen zu bleiben: {{{#!vorlage Befehl help cd }}} {{{ cd: cd [-L|-P] [dir] Wechselt das Arbeitsverzeichnis. Wechselt das aktuelle Abeitsverzeichnis zu DIR. Ohne Angabe eines Verzeichnisses wird in das Heimatverzeichnis gewechselt. Die Variable CDPATH enthält den Suchpfad für das in DIR spezifizierte Verzeichnis. Die Pfadnamen werden durch Doppelpunkte (:) getrennt. Ein leerer Pfadname bezeichnet das aktuelle Verzeichnis. Wenn DIR mit einem Schrägsrtich (/) beginnt, wird der CDPATH nicht durchsucht. Wenn kein entsprechendes Verzeichnis gefunden wurde und die Shell Option `cdable_vars' gesetzt ist, dann wird angenommen, dass DIR einen Variablennamen enthält. Wenn dann noch diese Variable ein Wert besitzt, wird dieser als Inhalt von DIR verwendet. Optionen: -L Erzwingt das Folgen symbolischer Verweise. -P Symbolische Verweise werden ignoriert. Standardmäßig wird symbolischen Verweisen gefolgt. Rückgabewert: Wenn das Verzeichnic gewechselt wurde 0; sonst ungleich Null. }}} {{{#!vorlage Befehl gimp -h # bzw. gimp --help }}} {{{ (gimp:5178): GLib-WARNING **: /tmp/buildd/glib2.0-2.28.6/./glib/goption.c:2132: ignoring no-arg, optional-arg or filename flags (8) on option of type 0 Aufruf: gimp [OPTION …] [DATEI|URI...] GNU Image Manipulation Program Hilfeoptionen: -h, --help Hilfeoptionen anzeigen --help-all Alle Hilfeoptionen anzeigen --help-gegl Show GEGL Options --help-gtk GTK+-Optionen anzeigen Anwendungsoptionen: -v, --version Versionsinformationen anzeigen und Programm beenden --license Lizenzinformationen anzeigen und Programm beenden --verbose Ausführlicher verhalten -n, --new-instance Eine neue GIMP-Instanz starten -a, --as-new Bilder als neu öffnen -i, --no-interface Ohne Benutzeroberfläche starten -d, --no-data Keine Pinsel, Muster, Farbverläufe usw. laden -f, --no-fonts Keine Schriften laden -s, --no-splash Kein Startfenster anzeigen --no-shm Keinen gemeinsam genutzten Speicher zwischen GIMP und den Modulen verwenden --no-cpu-accel Keine speziellen Prozessorbeschleunigungen verwenden --session= Ein alternatives Sitzungsprofil verwenden -g, --gimprc= Ein alternatives Benutzerprofil verwenden --system-gimprc= Ein alternatives Systemprofil verwenden -b, --batch= Auszuführender Stapelbefehl (kann mehrfach verwendet werden) --batch-interpreter= Die Prozedur zum Abarbeiten von Befehlsabfolgen -c, --console-messages Warnungen auf der Kommandozeile anstatt in einem Dialogfensters ausgeben --pdb-compat-mode= PDB-Kompatibilitätsmodus (off|on|warn) --stack-trace-mode= Fehlersuche beim Absturz (never|query|always) --debug-handlers Aktiviert Fehlersuchroutinen für nicht-schwerwiegende Signale --g-fatal-warnings Alle Warnungen als kritisch einstufen --dump-gimprc Eine gimprc-Datei mit den Standardeinstellungen ausgeben --display=ANZEIGE X-Anzeige, die verwendet werden soll }}} Im Zweifelsfalle bitte die verschiedenen Hilfeoptionen durchprobieren. Außerdem existieren für die meisten Kommandos noch die sogenannten [wikipedia:Manpage:Manpages], auch [:man:Handbücher für die Kommandozeile] genannt. "man" steht für Manual (Anleitung). Manpages sind meistens ausführlicher als die obigen Hilfetexte. Die Syntax des Aufrufes lautet allgemein: {{{#!vorlage Befehl man [Option] [Thema] # Optionen müssen NICHT immer übergeben werden! }}} oder praktisch: {{{#!vorlage Befehl man name_des_programms # z.B.: man gimp }}} Beendet wird die Anzeige der Manpage mit der Taste [[Vorlage(Tasten,q)]] (für Quit). Eine Liste der eingebauten Shell-Befehle erhält man durch den Aufruf von entweder: {{{#!vorlage Befehl man builtins }}} oder aber: {{{#!vorlage Befehl info builtins }}} = Ein Beispiel = Aber nun genug mit trockener Theorie. Warum schwärmen Fortgeschrittene und Profis immer wieder von der Kommandozeile, deren Vorzüge dem Nichteingeweihten oft verborgen bleibt? Daher noch ein kleines Bonbon bzw. eine Aufgabe zum Abschluß: starte mit 1 Minute Vorbereitungszeit einen eigenen kleinen Webserver. Keine Ahnung? – zur [:Heimnetzwerk#Webserver:Lösung]. Vielleicht lässt sich jetzt erahnen, welches Potential die Nutzung der Kommandozeile bietet. Falls ja, dann weiter im Text. Ansonsten auch egal – früher oder später holt das Thema sowieso jeden Linux-Nutzer ein, ob man will oder nicht ... = Das Ende: geschafft?! = Prima, aber dieser Artikel sollte nur als kleiner Einstieg dienen. Um weitere Aufgaben mit dem Terminal zu lösen, braucht man noch weitere Befehle, die man in der [:Shell/Befehlsübersicht:Befehlsübersicht] samt Erklärungen findet. Dabei aber niemals vergessen: Rom wurde auch nicht an einem Tag erbaut. Die Kommandozeile braucht ihre Zeit... Und nicht vergessen: die Komfortfunktionen im [:Bash:]-Artikel anschauen, so spart z.B. die Autovervollständigung per [[Vorlage(Tasten, tab)]] Zeit und Nerven. = Links = * [:Shell/Bash-Skripting-Guide_für_Anfänger:Bash-Skripting-Guide für Anfänger] # tag: Einsteiger, Shell