LPIC101/103.1 Auf der Kommandozeile arbeiten: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „  “ durch „ “
 
(37 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Wichtigste Wissensgebiete=
=Wichtigste Wissensgebiete=
*Einzelne Shell-Kommandos und einzeilige Kommandofolgen verwenden, um einfache Aufgaben auf der Kommandozeile zu lösen.<br>
*Einzelne Shell-Kommandos und einzeilige Kommandofolgen verwenden, um einfache Aufgaben auf der Kommandozeile zu lösen<br>


*Die Shell-Umgebung verwenden und anpassen, etwa um Umgebungsvariablen zu definieren, zu verwenden und zu exportieren.<br>
*Die Shell-Umgebung verwenden und anpassen, etwa um Umgebungsvariablen zu definieren, zu verwenden und zu exportieren<br>


*Die command-history verwenden und ändern.<br>
*Die command-history verwenden und ändern<br>


*Kommandos innerhalb und außerhalb des definierten Suchpfads aufrufen.
*Kommandos innerhalb und außerhalb des definierten Suchpfads aufrufen
=Wichtiger Dateien, Verzeichnisse und Anwendungen=
=Wichtiger Dateien, Verzeichnisse und Anwendungen=
<code>[[Bash, echo, export, unset|bash]]</code>      <code>[[Which#Befehl type|type]]</code>
<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">
<code>[[Bash, echo, export, unset|echo]]</code>      <code>[[which]]</code>
*<code>[[bash, echo, export, unset|bash]]</code>       
<code>[[env]]</code>        <code>[[man]]</code>
*<code>[[which, type#type|type]]</code>
<code>[[Bash, echo, export, unset|export]]</code>    <code>[[uname]]</code>
*<code>[[bash, echo, export, unset|echo]]</code>       
<code>[[103.1 Auf der Kommandozeile arbeiten#PATH-Variable|pwd]]</code>        <code>[[set]]</code>
*<code>[[which, type|which]]</code>
<code>[[Bash, echo, export, unset|unset]]</code>    <code>[[Bash-History|history]]</code>
*<code>[[env|env]]</code>         
<code>'''[[Bash-History|.bash_history]]'''</code>      <code>'''[[Quoting]]'''</code>
*<code>[[man|man]]</code>
*<code>[[bash, echo, export, unset|export]]</code>     
*<code>[[uname|uname]]</code>
*<code>[[#PATH-Variable|pwd]]</code>         
*<code>[[set|set]]</code>
*<code>[[bash, echo, export, unset|unset]]</code>     
*<code>[[Bash-History|history]]</code>
*<code>'''[[Bash-History|.bash_history]]'''</code>       
*<code>'''[[Quoting]]'''</code>
</div>
 
=Allgemeines=
=Allgemeines=
Damit  Sie im  Textmodus  mit  dem  Computer  kommunizieren  können, benötigen Sie eine Shell.
*Damit  man im  Textmodus  mit  dem  Computer  kommunizieren  kann, benötigt man eine Shell. Man kann über diese Shell mit dem Kern(el) Informationen austauschen<br>
Der Begriff ''Shell'' bedeutet in der englischen Sprache Schale, was genau den Punkt trifft, weil man über  
 
diese ''Schale'' mit dem Kern(el) Informationen austauschen kann.<br>
*Unter Linux wird standardmäßig die Bash als Shell verwendet. Hierbei handelt es sich um eine Weiterentwicklung  der ursprünglichen  Unix-Shell ''sh''<br>


Unter Linux wird standardmäßig die Bash als Shell verwendet. Hierbei handelt es sich um eine Weiterentwicklung  der ursprünglichen  Unix-Shell ''sh''. Die Shell ''sh'' ist immer noch Bestandteil von Linux, wird aber zumindest als Login-Shell  nicht  mehr  so  oft  verwendet.
*Die Shell ''sh'' ist immer noch Bestandteil von Linux, wird aber zumindest als Login-Shell  nicht  mehr  so  oft  verwendet
=Aufbau eines Shell-Kommandos=
==Aufbau eines Shell-Kommandos==
Ein Kommando besteht aus bis zu drei verschiedenen Komponenten. Die erste Komponente  ist  das  Kommando  selbst,  also  eine ausführbare  Datei,  ein  Skript  oder  ein Shell-interner  BefehlEin  Kommando  kann  auch  für  sich  allein  stehen  und ohne Optionen oder Argumente funktionieren:
*Ein Kommando besteht aus bis zu drei verschiedenen Komponenten. Die erste Komponente  ist  das  Kommando  selbst,  also  eine ausführbare  Datei,  ein  Skript  oder  ein Shell-interner  Befehl<br>
  archangel:~ # mount
*Ein  Kommando  kann  auch  für  sich  allein  stehen  und ohne Optionen oder Argumente funktionieren:
Wenn das Kommando <code>mount</code> ohne Optionen oder Argumente ausgeführt wird, zeigt es aktuell eingehängte Dateisysteme an. Es gibt aber auch Konstellationen, in denen ein Kommando mit einer oder mehreren Optionen ausgeführt wird:
  # mount
  archangel:~ # mount -a
*Wenn das Kommando <code>mount</code> ohne Optionen oder Argumente ausgeführt wird, zeigt es aktuell eingehängte Dateisysteme an Es gibt aber auch Konstellationen, in denen ein Kommando mit einer oder mehreren Optionen ausgeführt wird:
In diesem Beispiel wurde <code>mount</code> mit der Option <code>-a</code>  ausgeführt.  Das  Programm  <code>mount</code> würde mit dieser Option alle in der Datei ''/etc/fstab'' aufgeführten Dateisysteme einhängen.
  # mount -a
Es ist aber auch möglich, <code>mount</code> ausschließlich mit Argumenten zu versehen:
*In diesem Beispiel wurde <code>mount</code> mit der Option <code>-a</code>  ausgeführt.  Das  Programm  <code>mount</code> würde mit dieser Option alle in der Datei ''/etc/fstab'' aufgeführten Dateisysteme einhängen<br>
  archangel:~ # mount /dev/sda1 /boot
*Es ist aber auch möglich, <code>mount</code> ausschließlich mit Argumenten zu versehen:
Argumente  unterscheiden  sich  von  Optionen.  Eine  Option  sagt  einem  Programm, wie es sich verhalten soll. Argumente teilen einem Programm mit, was es verarbeiten sollEs  ist  möglich,  einem  Programm  sowohl  mehrere  Optionen  als  auch mehrere Argumente zu übergeben. Bei vielen Programmen ist die Reihenfolge sogar variabel:
  # mount /dev/sda1 /boot
*Argumente  unterscheiden  sich  von  Optionen.  Eine  Option  sagt  einem  Programm, wie es sich verhalten soll. Argumente teilen einem Programm mit, was es verarbeiten soll<br>
*Es  ist  möglich,  einem  Programm  sowohl  mehrere  Optionen  als  auch mehrere Argumente zu übergeben. Bei vielen Programmen ist die Reihenfolge sogar variabel:
  mount -o username=antje,password=xy //fs1/data /mnt/ -t smbfs
  mount -o username=antje,password=xy //fs1/data /mnt/ -t smbfs
Das Beispiel zeigt eine Mischung mit einer Option vorn, einer Option hinten und den Argumenten in der Mitte. Der <code>mount</code>-Befehl baut in diesem Fall eine Netzwerkverbindung zu einem Windows-Computer auf.
*Das Beispiel zeigt eine Mischung mit einer Option vorn, einer Option hinten und den Argumenten in der Mitte. Der <code>mount</code>-Befehl baut in diesem Fall eine Netzwerkverbindung zu einem Windows-Computer auf
=Übergabe der Optionen=
==Übergabe der Optionen==
Bei der Übergabe von Optionen gibt es mehrere gängige Methoden. Einige Kommandos verlangen, dass den Optionen ein Bindestrich vorangestellt wird, andere arbeiten auch ohne einleitenden Bindestrich. Außerdem sehen viele Programme vor, dass ganze Wörter als Optionen verwendet werden. Diesen werden in der Regel zwei Bindestriche vorangestellt. Das folgende Beispiel kennen Sie sinngemäß schon aus dem vorangegangenen Kapitel:
*Bei der Übergabe von Optionen gibt es mehrere gängige Methoden<br>
  archangel:~ # rpm --install -vh /i586/fortune-1.0-860.i586.rpm
 
*Einige Kommandos verlangen, dass den Optionen ein Bindestrich vorangestellt wird, andere arbeiten auch ohne einleitenden Bindestrich<br>
 
*Viele Programme sehen vor, dass ganze Wörter als Optionen verwendet werden. Diesen werden in der Regel zwei Bindestriche vorangestellt. Das folgende Beispiel kennen Sie sinngemäß schon aus dem vorangegangenen Kapitel:
  # rpm --install -vh /i586/fortune-1.0-860.i586.rpm
  Preparing.. ########################################### [100 %]
  Preparing.. ########################################### [100 %]
Ein weiterer prominenter Vertreter der flexiblen Programme ist <code>tar</code> . Sie können <code>tar</code> mit normalen Optionen oder Optionswörtern verwenden. Außerdem kann <code>tar</code> auch Optionen ohne vorangestellte Bindestriche übernehmen. Die folgenden vier Kommandos führen bei <code>tar</code> zum selben Ergebnis:
*Ein weiterer prominenter Vertreter der flexiblen Programme ist <code>tar</code> . Man kann <code>tar</code> mit normalen Optionen oder Optionswörtern verwenden. Außerdem kann <code>tar</code> auch Optionen ohne vorangestellte Bindestriche übernehmen. Die folgenden vier Kommandos führen bei <code>tar</code> zum selben Ergebnis:
  # tar -x -z -v -f xmbmon205.tar.gz
  # tar -x -z -v -f xmbmon205.tar.gz
  # tar -xzvf xmbmon205.tar.gz
  # tar -xzvf xmbmon205.tar.gz
  # tar xvzf xmbmon205.tar.gz
  # tar xvzf xmbmon205.tar.gz
  # tar --extract --gzip --verbose --file=xmbmon205.tar.gz
  # tar --extract --gzip --verbose --file=xmbmon205.tar.gz
=Umgebungsvariablen und Shellvariablen=
==Umgebungsvariablen und Shellvariablen==
*'''Umgebungsvariablen'''  gelten für  alle  Shells,  die  ein  Benutzer  verwendetDie Inhalte  dieser  Variablen  werden  an  Subshells  vererbt.  Das  bedeutet,  dass  beim Aufruf  einer  Subshell  ein  automatischer  Export  der  Variablen  in  diese Subshell stattfindetBei  Umgebungsvariablen  werden  normalerweise  Großbuchstaben verwendet.<br>
*Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits drin.
*Durch welche Konfigurationsdateien sie deklariert werden
*Und demzufolge wann und durch welches Programm sie ausgewertet werden
*Und andererseits in ihrem Wirkungsbereich:
**'''Umgebungsvariablen:'''   
***Gelten für  alle  Shells,  die  ein  Benutzer  verwendet
***Die Inhalte  dieser  Variablen  werden  an  Subshells  vererbt.  Das  bedeutet,  dass  beim Aufruf  einer  Subshell  ein  automatischer  Export  der  Variablen  in  diese Subshell stattfindet
***Bei  Umgebungsvariablen  werden  normalerweise  Großbuchstaben verwendet
**'''Shellvariablen:'''
***Müssen  in  jeder  Subshell, die  durch  den  Benutzer  oder  ein  Skript gestartet  wird,  neu  deklariert werden
***Es findet  standardmäßig  keine  Vererbung statt<br>
***Für Shellvariablen verwendet man üblicherweise Kleinbuchstaben


*'''Shellvariablen'''  müssen  in  jeder  Subshell, die  durch  den  Benutzer  oder  ein  Skript gestartet  wird,  neu  deklariert werden.  Es findet  standardmäßig  keine  Vererbung statt. Für Shellvariablen verwendet man üblicherweise Kleinbuchstaben.
==PATH-Variable==
=PATH-Variable=
*Wenn  man ein  Programm  ausführen  will,  das  sich  nicht  in  einem  in  Ihrer  PATH-Variablen enthaltenen Verzeichnis befindet, muss man den kompletten Pfad zu diesem Programm auf der Kommandozeile mit angeben<br>
Wenn  Sie ein  Programm  ausführen  wollen,  das  sich  nicht  in  einem  in  Ihrer  PATH-Variablen enthaltenen Verzeichnis befindet, müssen Sie den kompletten Pfad zu diesem Programm auf der Kommandozeile mit angeben.<br>


Wenn Sie ein Programm ohne Angabe eines Pfades starten, prüft die Shell zunächst, ob es sich um ein internes Kommando  der  Shell  handelt.  Dazu  zählen:  <code>echo, bg, fg,jobs, kill, pwd, set, unset</code> und viele mehr.<br>
*Wenn man ein Programm ohne Angabe eines Pfades startet, prüft die Shell zunächst, ob es sich um ein internes Kommando  der  Shell  handelt.  Dazu  zählen:  <code>echo, bg, fg,jobs, kill, pwd, set, unset</code> und viele mehr<br>


Falls  kein  passendes  Kommando  gefunden wird,  sucht  die  Shell  das  Programm  inallen Verzeichnissen, die in der PATH-Variablen enthalten sind. Sollten mehrere Programme mit dem gleichen Namen vorhanden sein, wird das zuerst gefundene ausgeführt.  Sie  können  in  einem  solchen  Fall  das  Kommando  <code>which</code> verwenden,  um festzustellen, welches Programm die Shell automatisch ausführt:
*Falls  kein  passendes  Kommando  gefunden wird,  sucht  die  Shell  das  Programm  inallen Verzeichnissen, die in der PATH-Variablen enthalten sind<br>
  archangel:~ # which less
 
*Sollten mehrere Programme mit dem gleichen Namen vorhanden sein, wird das zuerst gefundene ausgeführt.  Man kann in  einem  solchen  Fall  das  Kommando  <code>which</code> verwenden,  um festzustellen, welches Programm die Shell automatisch ausführt:
  # which less
  /usr/bin/less
  /usr/bin/less
Es ist zu beachten, dass ein Programm auch dann nicht ohne Pfadangabe ausgeführt wird, wenn man sich aktuell in dessen Verzeichnis befindet. Dieses Verhalten gibt esunter DOS, aber nicht bei Linux. Sie können ein Programm, das sich im aktuellen Verzeichnis  befindet,  aber  auch  starten,  indem  Sie  ''./''  dem  Programm voranstellen.  Die Zeichen ''./'' repräsentieren  das  aktuelle  Verzeichnis.  Sie  können  z. B. Konfigurationsskripte  von  Tar-Balls  im  aktuellen  Verzeichnis  ausführen,  indem  Sie  folgende Syntax verwenden:
*Es ist zu beachten, dass ein Programm auch dann nicht ohne Pfadangabe ausgeführt wird, wenn man sich aktuell in dessen Verzeichnis befindet. Dieses Verhalten gibt esunter DOS, aber nicht bei Linux<br>
 
*Man kann ein Programm, das sich im aktuellen Verzeichnis  befindet,  aber  auch  starten,  indem  Sie  ''./''  dem  Programm voranstellen.  Die Zeichen ''./'' repräsentieren  das  aktuelle  Verzeichnis.  Sie  können  z.&nbsp;B.&nbsp; Konfigurationsskripte  von  Tar-Balls  im  aktuellen  Verzeichnis  ausführen,  indem  Sie  folgende Syntax verwenden:
  archangel:/usr/src/xmbmon205 # ./configure
  archangel:/usr/src/xmbmon205 # ./configure
Wenn Sie einen Prompt verwenden, der Ihnen nicht anzeigt, in welchem Verzeichnis Sie sich gerade befinden, verwenden Sie das Kommando <code>pwd</code> ''(Path of Working Directory)'' ohne Optionen. Der Pfad wird Ihnen dann angezeigt:
*Wenn man einen Prompt verwendet, der ihn nicht anzeigt, in welchem Verzeichnis man sich gerade befindet, verwendet man das Kommando <code>pwd</code> ''(Path of Working Directory)'' ohne Optionen. Der Pfad wird Ihnen dann angezeigt:
  archangel:/usr/src/xmbmon205 # pwd
  archangel:/usr/src/xmbmon205 # pwd
  /usr/src/xmbmon205
  /usr/src/xmbmon205
Sie können sich den Inhalt Ihrer PATH-Variablen, genau wie den anderer Variablen, anzeigen lassen:
*Man kann sich den Inhalt Ihrer PATH-Variablen, genau wie den anderer Variablen, anzeigen lassen:
  archangel:/ # echo $PATH
  archangel:/ # echo $PATH
  /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/
  /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/
  bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin
  bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin
=Beliebte Variablen für Prüfungen=
==Beliebte Variablen für Prüfungen==
Manche  Variablen  werden  in  der  Prüfung  immer  wieder  abgefragt.  Dazu  gehören besonders die folgenden:
Manche  Variablen  werden  in  der  Prüfung  immer  wieder  abgefragt.  Dazu  gehören besonders die folgenden:
*<code>$HISTSIZE</code> definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden. Diese Variable wird normalerweise in der Datei ''/etc/profile'' festgelegt.
*<code>$HISTSIZE</code> definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden. Diese Variable wird normalerweise in der Datei ''/etc/profile'' festgelegt<br>
 
*<code>$PS1</code> bestimmt das Aussehen der Eingabeaufforderung (Prompt). Beispiel:
*<code>$PS1</code> bestimmt das Aussehen der Eingabeaufforderung (Prompt). Beispiel:
  root@archangel:~# echo $PS1
  root@archangel:~# echo $PS1
  \u@\h:\w$
  \u@\h:\w$
Die Zeichen ''\u'' stehen für Username. Das ''@'' wird normal ausgegeben. Die Zeichen ''\h'' werden mit dem Host-Namen ersetzt. Es folgt ein Doppelpunkt. Anschließend zeigt ''\w'' für  Working  Directory  das  aktuelle  Verzeichnis  anDie  Tilde ''~'' repräsentiert hierbei das Heimatverzeichnis des Benutzers. Es folgt ein ''>''. Der Prompt kann durch  Änderung  der  Variablen ''PS1'' den  eigenen  Wünschen angepasst  werdenEs empfiehlt sich dann eine Konfiguration in der Datei ''/etc/bashrc''.
*Die Zeichen ''\u'' stehen für Username
*Das ''@'' wird normal ausgegeben
*Die Zeichen ''\h'' werden mit dem Host-Namen ersetzt
*Es folgt ein Doppelpunkt
*Anschließend zeigt ''\w'' für  Working  Directory  das  aktuelle  Verzeichnis  an
*Die  Tilde ''~'' repräsentiert hierbei das Heimatverzeichnis des Benutzers
*Es folgt ein ''>''
*Der Prompt kann durch  Änderung  der  Variablen ''PS1'' den  eigenen  Wünschen angepasst  werden
*Es empfiehlt sich dann eine Konfiguration in der Datei ''/etc/bashrc''<br>
 
*<code>$?</code> enthält das Errorlevel des zuletzt ausgeführten Kommandos. In der Regel bedeutet der Wert 0 in dieser Variablen, dass das letzte Programm erfolgreich ausgeführt wurde. Die Fehlerwerte variieren von Programm zu Programm. Beliebte Werte sind 1 und 127. Beispiel:
*<code>$?</code> enthält das Errorlevel des zuletzt ausgeführten Kommandos. In der Regel bedeutet der Wert 0 in dieser Variablen, dass das letzte Programm erfolgreich ausgeführt wurde. Die Fehlerwerte variieren von Programm zu Programm. Beliebte Werte sind 1 und 127. Beispiel:
  archangel:~ # Kommando, das es nicht gibt
  # Kommando, das es nicht gibt
  bash: Kommando: command not found
  bash: Kommando: command not found
  archangel:~ # echo $?
  # echo $?
  127
  127
Das »Kommando, das es nicht gibt« hat ein Errorlevel von 127 zur Folge.<br>
*Das »Kommando, das es nicht gibt« hat ein Errorlevel von 127 zur Folge<br>
 
*<code>$1 , $2</code> usw. enthalten die Optionen und Argumente, die an ein Programm übergeben werden. Sie werden im Normalfall vom gestarteten Programm oder Skript selbst ausgewertet
 


*<code>$1 , $2</code> usw. enthalten die Optionen und Argumente, die an ein Programm übergeben werden. Sie werden im Normalfall vom gestarteten Programm oder Skript selbst ausgewertet. Mehr über dieses Thema erfahren Sie im zweiten Teil dieses Buches.
=Kontrollfragen=
=Kontrollfragen=
<div class="toccolours mw-collapsible mw-collapsed">
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
''Welcher Befehl zeigt den vollständigen Pfad eines Kommandos an?''
<div class="mw-collapsible-content">'''Was ist der Unterschied zwischen Umgebungsvariablen und Shellvariablen?'''</div>
<div class="mw-collapsible-content">'''which'''</div>
</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
''Welche Variable definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden?''
<div class="mw-collapsible-content">'''Was ist der Unterschied zwischen dem Befehl <code>printenv</code> und <code>env</code>?'''</div>
<div class="mw-collapsible-content">'''$HISTSIZE'''</div>
</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
''Welches Kommando wird als Bang-Bang bezeichnet und führt den letzten Befehl der History noch einmal aus?''
<div class="mw-collapsible-content">'''Was sind die PATH-Variable und wozu werden sie verwendet?'''</div>
<div class="mw-collapsible-content">'''!!'''</div>
</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
''Mit welchem Befehl werden die Shellvariablen löscht?''
<div class="mw-collapsible-content">'''keine'''</div>
<div class="mw-collapsible-content">'''unset'''</div>
</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
''Welcher Befehl zeigt die Versionsnummer des laufenden Kernels?''
<div class="mw-collapsible-content">'''keine'''</div>
<div class="mw-collapsible-content">'''uname -r'''</div>
</div>
</div>




[[Category:Linux]]
[[Kategorie:Linux/LPIC/101]]
[[Category:Linux:LPIC:101]]

Aktuelle Version vom 28. Mai 2023, 07:48 Uhr

Wichtigste Wissensgebiete

  • Einzelne Shell-Kommandos und einzeilige Kommandofolgen verwenden, um einfache Aufgaben auf der Kommandozeile zu lösen
  • Die Shell-Umgebung verwenden und anpassen, etwa um Umgebungsvariablen zu definieren, zu verwenden und zu exportieren
  • Die command-history verwenden und ändern
  • Kommandos innerhalb und außerhalb des definierten Suchpfads aufrufen

Wichtiger Dateien, Verzeichnisse und Anwendungen

Allgemeines

  • Damit man im Textmodus mit dem Computer kommunizieren kann, benötigt man eine Shell. Man kann über diese Shell mit dem Kern(el) Informationen austauschen
  • Unter Linux wird standardmäßig die Bash als Shell verwendet. Hierbei handelt es sich um eine Weiterentwicklung der ursprünglichen Unix-Shell sh
  • Die Shell sh ist immer noch Bestandteil von Linux, wird aber zumindest als Login-Shell nicht mehr so oft verwendet

Aufbau eines Shell-Kommandos

  • Ein Kommando besteht aus bis zu drei verschiedenen Komponenten. Die erste Komponente ist das Kommando selbst, also eine ausführbare Datei, ein Skript oder ein Shell-interner Befehl
  • Ein Kommando kann auch für sich allein stehen und ohne Optionen oder Argumente funktionieren:
# mount
  • Wenn das Kommando mount ohne Optionen oder Argumente ausgeführt wird, zeigt es aktuell eingehängte Dateisysteme an Es gibt aber auch Konstellationen, in denen ein Kommando mit einer oder mehreren Optionen ausgeführt wird:
# mount -a
  • In diesem Beispiel wurde mount mit der Option -a ausgeführt. Das Programm mount würde mit dieser Option alle in der Datei /etc/fstab aufgeführten Dateisysteme einhängen
  • Es ist aber auch möglich, mount ausschließlich mit Argumenten zu versehen:
# mount /dev/sda1 /boot
  • Argumente unterscheiden sich von Optionen. Eine Option sagt einem Programm, wie es sich verhalten soll. Argumente teilen einem Programm mit, was es verarbeiten soll
  • Es ist möglich, einem Programm sowohl mehrere Optionen als auch mehrere Argumente zu übergeben. Bei vielen Programmen ist die Reihenfolge sogar variabel:
mount -o username=antje,password=xy //fs1/data /mnt/ -t smbfs
  • Das Beispiel zeigt eine Mischung mit einer Option vorn, einer Option hinten und den Argumenten in der Mitte. Der mount-Befehl baut in diesem Fall eine Netzwerkverbindung zu einem Windows-Computer auf

Übergabe der Optionen

  • Bei der Übergabe von Optionen gibt es mehrere gängige Methoden
  • Einige Kommandos verlangen, dass den Optionen ein Bindestrich vorangestellt wird, andere arbeiten auch ohne einleitenden Bindestrich
  • Viele Programme sehen vor, dass ganze Wörter als Optionen verwendet werden. Diesen werden in der Regel zwei Bindestriche vorangestellt. Das folgende Beispiel kennen Sie sinngemäß schon aus dem vorangegangenen Kapitel:
# rpm --install -vh /i586/fortune-1.0-860.i586.rpm
Preparing.. ########################################### [100 %]
  • Ein weiterer prominenter Vertreter der flexiblen Programme ist tar . Man kann tar mit normalen Optionen oder Optionswörtern verwenden. Außerdem kann tar auch Optionen ohne vorangestellte Bindestriche übernehmen. Die folgenden vier Kommandos führen bei tar zum selben Ergebnis:
# tar -x -z -v -f xmbmon205.tar.gz
# tar -xzvf xmbmon205.tar.gz
# tar xvzf xmbmon205.tar.gz
# tar --extract --gzip --verbose --file=xmbmon205.tar.gz

Umgebungsvariablen und Shellvariablen

  • Die Unterschiede zwischen diesen beiden Variablentypen liegen einerseits drin.
  • Durch welche Konfigurationsdateien sie deklariert werden
  • Und demzufolge wann und durch welches Programm sie ausgewertet werden
  • Und andererseits in ihrem Wirkungsbereich:
    • Umgebungsvariablen:
      • Gelten für alle Shells, die ein Benutzer verwendet
      • Die Inhalte dieser Variablen werden an Subshells vererbt. Das bedeutet, dass beim Aufruf einer Subshell ein automatischer Export der Variablen in diese Subshell stattfindet
      • Bei Umgebungsvariablen werden normalerweise Großbuchstaben verwendet
    • Shellvariablen:
      • Müssen in jeder Subshell, die durch den Benutzer oder ein Skript gestartet wird, neu deklariert werden
      • Es findet standardmäßig keine Vererbung statt
      • Für Shellvariablen verwendet man üblicherweise Kleinbuchstaben

PATH-Variable

  • Wenn man ein Programm ausführen will, das sich nicht in einem in Ihrer PATH-Variablen enthaltenen Verzeichnis befindet, muss man den kompletten Pfad zu diesem Programm auf der Kommandozeile mit angeben
  • Wenn man ein Programm ohne Angabe eines Pfades startet, prüft die Shell zunächst, ob es sich um ein internes Kommando der Shell handelt. Dazu zählen: echo, bg, fg,jobs, kill, pwd, set, unset und viele mehr
  • Falls kein passendes Kommando gefunden wird, sucht die Shell das Programm inallen Verzeichnissen, die in der PATH-Variablen enthalten sind
  • Sollten mehrere Programme mit dem gleichen Namen vorhanden sein, wird das zuerst gefundene ausgeführt. Man kann in einem solchen Fall das Kommando which verwenden, um festzustellen, welches Programm die Shell automatisch ausführt:
# which less
/usr/bin/less
  • Es ist zu beachten, dass ein Programm auch dann nicht ohne Pfadangabe ausgeführt wird, wenn man sich aktuell in dessen Verzeichnis befindet. Dieses Verhalten gibt esunter DOS, aber nicht bei Linux
  • Man kann ein Programm, das sich im aktuellen Verzeichnis befindet, aber auch starten, indem Sie ./ dem Programm voranstellen. Die Zeichen ./ repräsentieren das aktuelle Verzeichnis. Sie können z. B.  Konfigurationsskripte von Tar-Balls im aktuellen Verzeichnis ausführen, indem Sie folgende Syntax verwenden:
archangel:/usr/src/xmbmon205 # ./configure
  • Wenn man einen Prompt verwendet, der ihn nicht anzeigt, in welchem Verzeichnis man sich gerade befindet, verwendet man das Kommando pwd (Path of Working Directory) ohne Optionen. Der Pfad wird Ihnen dann angezeigt:
archangel:/usr/src/xmbmon205 # pwd
/usr/src/xmbmon205
  • Man kann sich den Inhalt Ihrer PATH-Variablen, genau wie den anderer Variablen, anzeigen lassen:
archangel:/ # echo $PATH
/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/
bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin

Beliebte Variablen für Prüfungen

Manche Variablen werden in der Prüfung immer wieder abgefragt. Dazu gehören besonders die folgenden:

  • $HISTSIZE definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden. Diese Variable wird normalerweise in der Datei /etc/profile festgelegt
  • $PS1 bestimmt das Aussehen der Eingabeaufforderung (Prompt). Beispiel:
root@archangel:~# echo $PS1
\u@\h:\w$
  • Die Zeichen \u stehen für Username
  • Das @ wird normal ausgegeben
  • Die Zeichen \h werden mit dem Host-Namen ersetzt
  • Es folgt ein Doppelpunkt
  • Anschließend zeigt \w für Working Directory das aktuelle Verzeichnis an
  • Die Tilde ~ repräsentiert hierbei das Heimatverzeichnis des Benutzers
  • Es folgt ein >
  • Der Prompt kann durch Änderung der Variablen PS1 den eigenen Wünschen angepasst werden
  • Es empfiehlt sich dann eine Konfiguration in der Datei /etc/bashrc
  • $? enthält das Errorlevel des zuletzt ausgeführten Kommandos. In der Regel bedeutet der Wert 0 in dieser Variablen, dass das letzte Programm erfolgreich ausgeführt wurde. Die Fehlerwerte variieren von Programm zu Programm. Beliebte Werte sind 1 und 127. Beispiel:
# Kommando, das es nicht gibt
bash: Kommando: command not found
# echo $?
127
  • Das »Kommando, das es nicht gibt« hat ein Errorlevel von 127 zur Folge
  • $1 , $2 usw. enthalten die Optionen und Argumente, die an ein Programm übergeben werden. Sie werden im Normalfall vom gestarteten Programm oder Skript selbst ausgewertet


Kontrollfragen

Welcher Befehl zeigt den vollständigen Pfad eines Kommandos an?

which

Welche Variable definiert die Anzahl der Kommandos, die in der Befehls-History aufbewahrt werden?

$HISTSIZE

Welches Kommando wird als Bang-Bang bezeichnet und führt den letzten Befehl der History noch einmal aus?

!!

Mit welchem Befehl werden die Shellvariablen löscht?

unset

Welcher Befehl zeigt die Versionsnummer des laufenden Kernels?

uname -r