Bash-Grundlagen

Abgeschlossen

Ein Verstehen von Bash beginnt mit dem Verstehen der Bash-Syntax. Nachdem Sie jetzt die Syntax kennen, können Sie diese auf jeden Bash-Befehl anwenden, den Sie ausführen.

Die vollständige Syntax eines Bash-Befehl sieht wie folgt aus:

command [options] [arguments]

Bash behandelt die erste gefundene Zeichenfolge als einen Befehl. Im folgenden Befehl wird der Bash-Befehl ls (für „list“) verwendet, um den Inhalt des aktuellen Arbeitsverzeichnisses anzuzeigen:

ls

Argumente begleiten häufig Bash-Befehle. Beispielsweise können Sie einen Pfadnamen in einen ls-Befehl einschließen, um den Inhalt eines anderen Verzeichnisses aufzulisten:

ls /etc

Die meisten Bash-Befehle haben Optionen, mit denen ihre Funktionsweise geändert werden kann. Optionen, auch als Flags bezeichnet, geben einem Befehl genauere Anweisungen. Beispielsweise werden Dateien und Verzeichnisse, deren Namen mit einem Punkt beginnen, für den Benutzer ausgeblendet und nicht von ls angezeigt. Sie können aber das Flag -a(für „all“) in einen ls-Befehl einschließen und alle Elemente im Zielverzeichnis sehen:

ls -a /etc

Sie können Flags sogar kombinieren, um einen möglichst kurzen Befehle zu erhalten. Statt beispielsweise ls -a -l /etc einzugeben, um alle Dateien und Verzeichnisse im Linux-Verzeichnis /etc in langer Form anzuzeigen, können Sie Folgendes eingeben:

ls -al /etc

Bash ist übersichtlich. Es ist manchmal bemerkenswert (und ein Punkt, auf den Bash-Liebhaber stolz sind), wie viel Sie mit einem einzigen Befehl erreichen können.

Abrufen von Hilfe

Welche Optionen und Argumente verwendet werden können oder müssen, ist von Befehl zu Befehl unterschiedlich. Glücklicherweise ist die Bash-Dokumentation in das Betriebssystem integriert. Hilfe ist nie weiter als einen Befehl entfernt. Wenn Sie mehr über die Optionen für einen Befehl erfahren möchten, verwenden Sie den Befehl man (für „manual“). Wenn Sie beispielsweise alle Optionen für den Befehl mkdir („make directory“) anzeigen möchten, geben Sie Folgendes ein:

man mkdir

man ist Ihre beste Quelle, wenn Sie Bash erlernen. man ist der Weg, Informationen zu finden, die Sie benötigen, um die Funktionsweise eines Befehls zu verstehen.

Die meisten Bash- und Linux-Befehle unterstützen die Option --help. Hiermit wird eine Beschreibung der Syntax und der Optionen des Befehls angezeigt. Um dies zu veranschaulichen, geben Sie mkdir --help ein. Die Ausgabe sieht in etwa folgendermaßen aus:

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

Hilfe, die auf diese Weise abgerufen wurde, ist in der Regel präziser als Hilfe, die mit man abgerufen wurde.

Verwenden von Platzhaltern

Platzhalterzeichen sind Symbole, die ein oder mehrere Zeichen in Bash-Befehlen darstellen. Das am häufigsten verwendete Platzhalterzeichen ist das Sternchen. Es entspricht null Zeichen oder einer Reihe von Zeichen. Angenommen, Ihr aktuelles Verzeichnis enthält Hunderte von Bilddateien, aber Sie möchten nur die PNG-Dateien anzeigen, also diejenigen, deren Dateinamen mit .png enden. Der Befehl zum Auflisten nur dieser Dateien sieht wie folgt aus:

ls *.png

Hinweis

Linux hat im Gegensatz zu anderen Betriebssystemen kein formales Konzept einer Dateinamenerweiterung. Dies bedeutet aber nicht, dass PNG-Dateien keine .png-Erweiterung haben. Es bedeutet einfach, dass in Linux der Tatsache, dass die Dateinamen mit .png enden, keine besondere Beachtung geschenkt wird.

Nehmen Sie nun an, dass das aktuelle Verzeichnis auch JPEG-Dateien enthält. Einige enden mit .jpg, andere mit .jpeg. Auf diese Weise könne Sie alle JPEG-Dateien auflisten:

ls *.jpg *.jpeg

Hier ist die nächste:

ls *.jp*g

Das Platzhalterzeichen * entspricht null oder mehr Zeichen, wogegen das Platzhalterzeichen ? einem einzelnen Zeichen entspricht. Wenn das aktuelle Verzeichnis Dateien enthält, die die Namen 0001.jpg, 0002.jpg usw. bis 0009.jpg haben, listet der folgende Befehl diese Dateien alle auf:

ls 000?.jpg

Eine weitere Möglichkeit, mit Platzhalterzeichen Ausgabe zu filtern, ist die Verwendung von eckigen Klammern, die Zeichengruppen kennzeichnen. Der folgende Befehl listet alle Dateien im aktuellen Verzeichnis auf, deren Namen einen Punkt enthalten, der unmittelbar auf ein kleingeschriebenes J oder P folgt. Er listet alle .jpg-, .jpeg- und .png-Dateien, aber keine .gif-Dateien auf:

ls *.[jp]*

In Linux wird für Dateinamen und die Befehle, die Dateinamen verarbeiten, die Groß-/Kleinschreibung beachtet. Um also alle Dateien im aktuellen Verzeichnis aufzulisten, deren Namen Punkte enthalten, auf die ein groß oder klein geschriebenes J oder P folgt, könnten Sie Folgendes eingeben:

ls *.[jpJP]*

Ausdrücke in eckigen Klammern können Zeichenbereiche darstellen. Der folgende Befehl listet z. B. alle Dateien im aktuellen Verzeichnis auf, deren Namen mit einem Kleinbuchstaben beginnen:

ls [a-z]*

Dieser Befehl hingegen listet alle Dateien im aktuellen Verzeichnis auf, deren Namen mit einem Großbuchstaben beginnen:

ls [A-Z]*

Und dieser Befehl listet alle Dateien im aktuellen Verzeichnis auf, deren Namen mit einem Klein- oder Großbuchstaben beginnen:

ls [a-zA-Z]*

Können Sie anhand dieser Informationen erraten, wie die Ergebnisse der folgenden Befehle aussehen?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Wenn Sie eines der Platzhalterzeichen als normales Zeichen verwenden müssen, machen Sie es zu einem Literalzeichen oder „escapen Sie es“, indem Sie ihm einen umgekehrten Schrägstrich voranstellen. Wenn Sie also aus irgendeinem Grund ein Sternchen als Teil eines Dateinamens haben – etwas, das Sie niemals absichtlich tun sollten –, könnten Sie mit einem Befehl nach diesem Sternchen suchen, der so aussieht:

$ ls *\**