Skip to main content

Gemütlich machen: was beim Login eingestellt werden kann und was das Arbeiten erleichtert

Jetzt, wo wir zumindest in groben Zügen einen Editor beherschen, können wir uns in den Konfigurationsfiles zur bash Einstellungen bei Variablen und Aliasen machen, die das Arbeiten erleichtern können.

Aufgabe: wie hieß nochmal das Konfiguratiosfile der bash?

Variablen setzen beim Login

Bei der bash gibt es eigentlich zwei Files, die ausgeführt werden: .bash_login für Loginshells und .bashrc für andere. Da diese Unterscheidung aber fürs tägliche Arbeiten irrelevant ist, machen wir da keinen Unterschied und schreiben alles, was wir brauchen ins .bashrc. Ins .bash_login schreiben wir nur:

 source ~/.bashrc

damit das .bashrc beim login ausgeführt wird. Selbstverständlich wird vor den eigenen Files das systemweite Configfile ausgeführt, in diesem Fall ist es das /etc/profile (aus historischen Gründen) und /etc/bash.bashrc.

Wir wollen nun Variablen setzen (wie man sie abfragt s.o.!).

Eine Variable wird gesetzt mit

 NAME=inhalt

Sie ist dann aber nur im aktuellen Prozeß (dazu später) verfügbar. Damit sie auch in allen Kindprozessen gilt, brauchen wir hier immer:

 export NAME=inhalt

Dies gilt für die Kommandozeile wie für das .bashrc.

Wichtig: alles, was wir ins .bashrc schreiben, wird erst beim nächsten login ausgeführt. Um das .bashrc neu einzulesen, führt man auf der Kommandozeile

 source .bashrc

aus.

 

Das TMP-Dir

Viele Programme brauchen ein temporäres Verzeichnis, um Dinge ab- oder zwischenspeichern zu können, daher setzen wir zwei Variablen:

 export TMPDIR=/home/username/tmp
 export TMP=/home/username/tmp

Stelle sicher, daß das Verzeichnis auch angelegt ist.

Der Prompt / die Eingabeaufforderung

Hier kann man durch geschickte Einstellung sich das Arbeiten sehr erleichtern. Der Prompt wird in der Variable PS1 festgelegt (ja es gibt auch PS2, dies kommt bei einfachen Shellscripten auf der Kommandozeile zum Tragen).

Aufgabe: gib den Inhalt von PS1 aus.

Im Prompt kann man username, hostname, aktuelles Verzeichnis und eine laufende Nummer in der bash-history angeben, daher ist eine sinnvolle Einstellung:

 export PS1="\u @ \h:\w \!> "

Häufig will man sich aber anzeigen lassen, wenn man mit root-Rechten unterwegs ist, daher verwendet man lieber:

 if [ -w /etc/passwd ]; then
   PS1="\h:\w \!# "
 else
   PS1="\u @ \h:\w \!> "
 fi
 export PS1

dann wird als root das Doppelkreuz # statt > angezeigt.

Aufgabe: schreibe das erste Beispiel auf der Shell und sieh, was sich sofort ändert. Schreibe das zweite Beispiel ins .bashrc. Verwende gerne Kommentare zu Deinen Eintragungen: kennzeichne diese mit vorangestellten # (vor jeder Kommentarzeile).

Nimm gerne weitere Änderungen anhand der Anleitung zur bash vor.

 


Die Editor-Variable

Gibt den Standard-Editor an. Jede Userin kann diesen für ihre eigene Umgebung selber wählen, aber spätestens als root wird es immer der vi. Daher stellen wir ein:

 EDITOR=/usr/bin/vi;                export EDITOR
 VISUAL=/usr/bin/vi;                export VISUAL

Hier neu: mit dem Semikolon kann man mehrere Kommandos in einer Zeile schreiben und trennen.

 


Die Bash-History

Die bash merkt sich die letzten N Kommandos, wenn man es denn einstellt:

 HISTSIZE=200;                      export HISTSIZE

Nach Beenden der Shell werden die Kommandos aus dem Speicher in das File .bash_history geschrieben.

Möchte man nicht, daß ein Kommando in der History landet, schreibt man ein Leerzeichen vor das entsprechende Kommando.

Um Dubletten zu vermeiden, setzen wir außerdem:

 history_control=ignoredups;                export history_control
 set command_oriented_history;              export command_oriented_history;

Hacker setzen gern die HISTSIZE=0, damit nicht mitprotokolliert wird, was sie tun.

Aufgabe: da das History File erst beim Beenden der Shell geschrieben wird, was muss ein Hacker genau tun, um das zu verhindern oder seine Spuren zu verwischen?

 


Die Path-Variable

..hatten wir schon behandelt. Als root möchte man das aktuelle Verzeichnis (".") nicht dabeihaben, deswegen setzen wir:

 if [ -w /etc/passwd ]; then
    PATH="$HOME/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin"
  else
    PATH="$HOME/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:."
 fi

 


Der Manpath

Ähnlich wie die Pfad-Variable legen wir noch die Pfade fest, wo nach manpages gesucht wird:

 MANPATH=/usr/man:/usr/local/man:/usr/X11R6/man:/usr/openwin/man:/usr/share/man:/usr/share/catman:/usr/catman;       export MANPATH

Aufpassen: alles muss in eine Zeile! Kein Umbruch!

 


Diverse kleine Dinge

  export PAGER=less

(nur dass das klar ist :))

  export LC_COLLATE=C

bestimmt die Sortierreihenfolge bei ls: zuerst "unsichtbare Dateien". Diese beginnen mit einem Punkt und werden nur bei ls -a angezeigt, sodann alphabetisch sortiert. Erst dann kommen die regulären Dateien, die mit Buchstaben oder Zahlen beginnen in der Reihenfolge: Ziffern, Großbuchstaben, Kleinbuchstaben (dies ist eine Empfehlung).

 


 

Sinnvolle Aliase

IdR. gilt: eigene Abkürzungen und Aliase NICHT so nennen wie das Ursprungskommando. Allerdings gibt es Ausnahmen, die auch nicht dramatisch sind: less ist z.B. nur gut nutzbar, wenn der Inhalt der ausgegebenen Datei nicht beim Beenden von less verschwindet.

Daher:

 alias less='less -MeiQX'
 alias les=less

ebenso:

 alias df="df -h"

Aufgabe: finde heraus, was die Optionen im Einzelnen bedeuten

Als weiterhin sinnvoll haben sich ergeben:

 alias 0="sudo $SHELL"
 alias    ls='ls -F'
 alias    ..='cd ..'
 alias pstree='pstree -A -u'
 alias rmi="rm -i"

Wieder zu allen Kommandos die Aufgabe: finde heraus, was sie tun und was die Optionen heißen.

 


Funktionen

Auch einfache Funktionen können definiert werden:

 function ll     () { ls -alFh $* | less -MeiQ ;}
 function l      () { echo $1* ;}

Über Prozesse sprechen wir noch, und auch über grep:

 function psg    () 
 { 
   echo 'UID PID PPID C STIME TTY TIME CMD'
   ps -ef | grep $* | grep -v grep 
 }

Der Phantasie sind kaum Grenzen gesetzt und für komplizierte Kommandos kann man sich immer Abkürzungen bauen.

 


Das .vimrc

Auf älteren Unices benutzt man hier .exrc, also falls Ihr mal das .vimrc nicht vorfindet.

Auch hier sind mannigfaltige Einstellungen möglich! Startet den vi und ruft

 :set 

auf, da wird schon eine Menge angezeigt. Ich erachte als sinnvoll:

 set autoindent       # Einrückungen in der nexten Zeile übernehmen, fürs Programmieren
 set wrapmargin=8     # 8 Zeichen vor Zeilenende in die nächste gehen
 set textwidth=72     # Text nicht breiter als 72 Zeichen machen, das ist der kleinste gem. Nenner

Braucht man einmal Zeilen, die länger sind und weil man Textpassagen mit Einrückungen hereinpasten möchte, setzt man im laufenden Editor:

 :set paste

das überschreibt die Einstellungen mit Zeilenumbrüchen.

Zurückgesetzt wird es mit:

 :set nopaste

Was aber, wenn ich einen Zeilenumbruch habe und den gar nicht will oder der da gar nicht sein darf (s.o.)? Ich gehe in den Bewegungsmodus (ESC) und gehe auf die obere Zeile. Mit J (groß J) füge ich die untere Zeile mit der oberen zusammen.