268 lines
11 KiB
TeX
Executable File
268 lines
11 KiB
TeX
Executable File
\section{Shell Ged"achnis}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Allgemein
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Allgemein}
|
|
\begin{justify}
|
|
Die bereits eingegebenen Befehle werden in der {\ttfamily ~/.bash\_history} gespeichert. Standardm"assig werden die letzten 500 Befehle eingetragen. Die Suchfunktion schaltet man mit {\ttfamily [strg+R]} oder {\ttfamily [strg+s]} ein. Der Prompt ver"andert sich nun und den zu suchenden Befehl kann eingegebn werden. Die Bash vervollst"andigt die Eingabe Automatisch. Um weiter zu suchen, einfach die Tastenkombination noch einmal machen. Der gefundene Befehl wird dann mit einem {\ttfamily Enter} abgeschickt oder mit dem dr"ucken der {\ttfamily Esc-Taste} kann man den Befehl noch editieren.
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Konfiguration
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Konfiguration}
|
|
Für die Bash History gibt es mehrere Variablen, einige sind in der nächsten Tabelle aufgeführt.
|
|
\begin{longtable}[l]{p{3cm}p{13cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Variable}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{Bash History Variablen} \\
|
|
\endlastfoot
|
|
HISTFILE & Name und Pfad der Bash History Datei\\
|
|
HISTFILESIZE & Angabe der maximalen Einträge in der Datei\\
|
|
HISTSIZE & Angabe der Einträge im History Buffer\\
|
|
HISTCONTROL & Hiermit kann man steuern, was in der History gespeichert werden soll\\
|
|
HISTIGNORE & Befehle von der Speicherung ausnehmen\\
|
|
HISTTIMEFORMAT & Angabe des Datums Formats\\
|
|
\end{longtable}
|
|
\begin{justify}
|
|
Für die Vatiable HISTCONTROL gibt es folgende Werte:
|
|
\end{justify}
|
|
\begin{itemize}
|
|
\item ignorespace - Ignorieren von Befehlen die am Anfang ein Leerzeichen haben
|
|
\item ignoredups - Ignorieren von doppelten Kommandos
|
|
\item ignoreboth - Beide Werte
|
|
\end{itemize}
|
|
Bei der Angabe des Datum Formats kann man alle {\ttfamily strftime-kompatiblen} Wert nehmen.
|
|
\begin{itemize}
|
|
\item \verb|%|F - Datum
|
|
\item \verb|%|T - Uhrzeit
|
|
\item \verb|%|Y - Jahr 4-stellig
|
|
\item \verb|%|m - Monat 2-stellig
|
|
\item \verb|%|d - Tag
|
|
\item \verb|%|H - Stunde (24)
|
|
\item \verb|%|M - Minuten
|
|
\item \verb|%|S - Sekunden
|
|
\end{itemize}
|
|
Die Liste für {\ttfamily HISTIGNORE} wird durch Doppelpunkte voneinander getrennt. Die Syntax für {\ttfamily HISTIGNORE} ist: \\
|
|
export HISTIGNORE="pattern1:pattern2:pattern3" \\
|
|
Die wichtigsten Patzhalter sind:
|
|
\begin{itemize}
|
|
\item * - Platzhalter für beliebigen Text
|
|
\item \verb|&| - Platzhalter für den vorherigen History Eintrag
|
|
\item \verb|[ \t]*| - Ignoriert Befehle, die am Anfang mit einem Leerzeichen oder Tab beginnen
|
|
\end{itemize}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=HISTIGNORE]
|
|
export HISTIGNORE="&:[ \t]*:ls:ls *:sudo rm *:rm *:shutdown *:reboot *:halt *"
|
|
\end{lstlisting}
|
|
Ebenso gibt es drei Schalter. die man zusätzlich setzen kann. Mit den beiden letzen Schaltern wird der Eintrag zwar aus der History geholt, aber er wird nicht sofort gestartet. Man hat die Möglichkeit, den Befehl zu ändern oder auch sich den Befehl genau anzuschauen.
|
|
\begin{itemize}
|
|
\item histappend
|
|
\item histreedit - Schlägt die Historienerweiterung fehl, wird die eingegebene Zeile erneut angezeigt und kann korrigiert werden.
|
|
\item histverify - Vor der Ausführung sehen Sie, was nach der Historienerweiterung tatsächlich ausgeführt wird.
|
|
\end{itemize}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Schalter]
|
|
shopt -s histappend
|
|
shopt -s histreedit
|
|
shopt -s histverify
|
|
|
|
uws@tux>shopt | grep hist
|
|
cmdhist on
|
|
histappend on
|
|
histreedit on
|
|
histverify on
|
|
lithist off
|
|
\end{lstlisting}
|
|
Hier ein paar Beispiele.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiele Variablen]
|
|
uws@tux>grep HIST .bashrc
|
|
export HISTTIMEFORMAT="%Y.%m%d %H:%M:%S - "
|
|
|
|
export HISTCONTROL=ignoreboth
|
|
|
|
export HISTSIZE=10000
|
|
export HISTFILESIZE=10000
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Alle Befehle speichern
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Alle Befehle speichern}
|
|
Es werden in der Bash History nur die Einträge der aktuellen Sitzung gespeichert. Möchte man aus allen Sitzungen die Befehle speichern, so muss die Variabe PROMPT\verb|_|COMMAND gesetzt werden.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Alle Commands]
|
|
export PROMPT_COMMAND='history -a'
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Navigation
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Navigation}
|
|
Um mit der Bash History Arbeiten zu können, gibt es folgende Shortcuts dafür.
|
|
\begin{longtable}[l]{p{5cm}p{11cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Shortcuts}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Shortcuts}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{Bash History Shortcuts} \\
|
|
\endlastfoot
|
|
\verb|[Strg]+[P]| & Ein Kommndo zurück (analog zu [Pfeil-oben])\\
|
|
\verb|[Strg]+[N]| & Ein Kommando weiter (analog zu [Pfeil-unten])\\
|
|
\verb|[Strg]+[R]| & Rückwärtssuche\\
|
|
\verb|[Strg]+[S]| & Vorwärtssuche\\
|
|
\verb|[Strg]+[O]| & Führt das gefundene Kommando aus\\
|
|
\verb|[Strg]+[G]| & Abbruch der Suche\\
|
|
\verb|[Alt]+[<]| & Zum Anfang der History springen\\
|
|
\verb|[Alt]+[Umschalt]+[<]| & Zum Ende der History gehen\\
|
|
\end{longtable}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Bash History expansion
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Bash History Erweiterung}
|
|
In der nachfolgenden Tabelle sind die Bash History expamsion commands aufgelistet.
|
|
\begin{longtable}[l]{p{2cm}p{14cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Expansion}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Expansion}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{Bash History expansion commands} \\
|
|
\endlastfoot
|
|
\verb|!!| & Ausführen des letzten Befehls, wie !-1\\
|
|
\verb|!N| & Ausführen des N-te Befehls\\
|
|
\verb|!-N| & Ausführen des neusten N Befehls\\
|
|
\verb|!:^| & Verwendet das erste Argument des aktuellsten Befehls in dem Bash-Verlauf\\
|
|
\verb|!:N| & Verwendet das N-te Argument des aktuellsten Befehls in dem Bash-Verlauf\\
|
|
\verb|!:$| & Verwendet das letzte Argument des aktuellsten Befehls in dem Bash-Verlauf\\
|
|
\verb|!:*| & Verwendet alle Argumente des letzten Befehls in dem Bash-Verlauf\\
|
|
\end{longtable}
|
|
Hier ein paar Beispiele zu den Expansions.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiele Expansion Commands]
|
|
uws@tux>history
|
|
1 echo "eins"
|
|
2 echo "zwei"
|
|
3 echo "drei"
|
|
4 echo "vier"
|
|
5 echo "fuenf"
|
|
6 echo "sechs"
|
|
|
|
uws@tux># Man kann auch einen Befehl vor der Expansion setzten
|
|
uws@tux># wie z.B. sudo !!
|
|
uws@tux>!!
|
|
echo "sechs"
|
|
sechs
|
|
|
|
uws@tux>!3
|
|
echo "drei"
|
|
drei
|
|
|
|
uws@tux>!-2
|
|
echo "fuenf"
|
|
fuenf
|
|
|
|
uws@tux>mkdir uws
|
|
uws@tux>cd !:^
|
|
cd uws
|
|
|
|
uws@tux>mv backup.tar backupold.tar
|
|
uws@tux>tar -xf !:2
|
|
tar -xf backupold.tar
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Bash History Modifier
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Bash History Modifier}
|
|
Bash-Verlaufsmodifikatoren ergänzen Bezeichner, indem sie den Inhalt oder die Ausführung des Befehls ändern
|
|
\begin{longtable}[l]{p{2cm}p{14cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Modifier}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
%\multicolumn{2}{c}{{\bfseries \tablename \thetable{} continued from previous page.}} \\
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Modifier}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
%\multicolumn{2}{r}{{\bfseries \tablename \thetable{} Continued on next page}} \\
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{Bash History modifiers} \\
|
|
\endlastfoot
|
|
\verb|:h| & Entfernt den nachgestellten Pfad aus einem Befehl. Nützlich, um einen Pfad ohne Dateinamen zu erhalten\\
|
|
\verb|:t| & Entfernt den führenden Pfad aus einem Befehl. Nützlich, um einen Dateinamen ohne Pfad zu erhalten\\
|
|
\verb|:r| & Entfernt die Extension vom Dateinamen\\
|
|
\verb|:s| & Ermöglicht eine String-Ersetzung, vergleichbar mit dem Befehl sed.\\
|
|
\end{longtable}
|
|
Hier ein Beispiel für das ersetzen.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Modifier]
|
|
uws@tux>ls /tmp/*.txt
|
|
Readme.txt
|
|
|
|
uws@tux>!:s/txt/log
|
|
uws@tux>ls /tmp/*.log
|
|
Datei1.log
|
|
Datei2.log
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: History Einträge löschen
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{History Einträge löschen}
|
|
Um alle Einträge aus der History zu entfernen, so gibt man den Parameter \verb|-|c an.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Clear History]
|
|
uws@tux>history -c
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Beispiele
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Beispiele}
|
|
Hier sind einige Beispiele für die Bash History.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiele]
|
|
uws@tux>fc -l 24 26
|
|
24 pveam available --section system
|
|
25 pveam download local debian-12-standard_12.7-1_amd64.tar.zst
|
|
26 pveam download local debian-12-standard_12.7-1_amd64.tar.zst
|
|
|
|
uws@tux>fc -l -5
|
|
3 echo $PROMPT_COMMAND
|
|
44 shopt | grep hist
|
|
45 fc -l 1-4
|
|
46 fc -l 1 4
|
|
47 history 2
|
|
|
|
uws@tux>history 2
|
|
33 2026.03.07 18:17:10 - fc -l 24 26
|
|
34 2026.03.07 18:17:30 - history 2
|
|
\end{lstlisting}
|
|
\end{justify}
|