# 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?

## <span class="mw-headline" id="bkmrk-variablen-setzen-bei-0">Variablen setzen beim Login</span>

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.

### <span class="mw-headline" id="bkmrk-das-tmp-dir-0">Das TMP-Dir</span>

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.

### <span id="bkmrk--7"></span><span class="mw-headline" id="bkmrk-der-prompt-%2F-die-ein-0">Der Prompt / die Eingabeaufforderung</span>

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 &gt; 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.

---

### <span class="mw-headline" id="bkmrk-die-editor-variable-0">Die Editor-Variable</span>

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.

---

### <span class="mw-headline" id="bkmrk-die-bash-history-0">Die Bash-History</span>

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?

---

### <span class="mw-headline" id="bkmrk-die-path-variable-0">Die Path-Variable</span>

..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

```

---

### <span class="mw-headline" id="bkmrk-der-manpath-0">Der Manpath</span>

Ä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!

---

### <span class="mw-headline" id="bkmrk-diverse-kleine-dinge-0">Diverse kleine Dinge</span>

```
  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).

---

### <span class="mw-headline" id="bkmrk-sinnvolle-aliase-0">Sinnvolle Aliase</span>

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.

---

### <span class="mw-headline" id="bkmrk-funktionen-0">Funktionen</span>

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.

---

### <span class="mw-headline" id="bkmrk-das-.vimrc-0">Das .vimrc</span>

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.