Tag Archives: bash

Konsolen-Logo

Kurztipp: lokalen offenen Port finden (bash)

Habe soeben folgende Funktionen zu meinen dotfiles hinzugefügt, um einen freien lokalen Port zu finden. Diese werden wiederum verwendet, um z.B. die “phpserver“-Funktion auszuführen.

# -------------------------------------------------------------------
# netstat_used_local_ports: get used tcp-ports
netstat_used_local_ports()
{
  netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$' | sort -n | uniq
}

# -------------------------------------------------------------------
# netstat_free_local_port: get one free tcp-port
netstat_free_local_port()
{
  read lowerPort upperPort < /proc/sys/net/ipv4/ip_local_port_range
 
  # create a local array of used ports 
  local all_used_ports=($(netstat_used_local_ports))

  for port in $(seq $lowerPort $upperPort); do
    for used_port in "${all_used_ports[@]}"; do
      if [ $used_port -eq $port ]; then
        continue
      else
        echo $port
        return 0
      fi
    done
  done 
}

 

Konsolen-Logo

Prompt › Bash

Ich habe schon vor einiger Zeit über die “.bashrc” berichtet und hier die Installation meiner dotfiles [~/.*] vorgestellt.

Heute möchte ich an einigen Bildern zeigen wie die Bash aussieht nachdem man die bereits erwähnten dotfiles installiert und wie man diese nach seinen Wünschen anpasst.

bash_prompt

1.) der Code

.bashrc: Dies ist die Konfigurationsdatei der Bash, diese wird bei jedem Aufruf einer interaktiven Shell ausgeführt. In meiner .bashrc stehen zunächst einmal ein paar Informationen, wovon ich hier nur die entsprechenden Links nennen möchte, welche man sich einmal anschauen sollte:

– http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming/
– www.commandlinefu.com/commands/browse/sort-by-votes
– https://twitter.com/climagic

.bash_profile: Diese Datei hat die selbe Aufgabe wie die .bashrc, wird jedoch “eigentlich” nur für Login-Shells aufgerufen. In diesem Fall wird die Datei jedoch auch für interaktive Shells verwende, da wir diese in der .bashrc inkludiert haben.

for file in ~/.{path,colors,icons,exports,aliases,bash_complete,functions,extra,bash_prompt}; 
do [ -r "$file" ] && [ -f "$file" ] && source"$file" 
done 
unset file

In dieser Datei werden wiederum andere Shell-Konfigurationen geladen (siehe vorheriges Code-Beispiel), welche auch von anderen Shells (z.B.: der zsh) genutzt werden können.

Desweiteren werden einige Einstellungen in einer zweiten for-Schleife ausgeführt. Andere Einstellungen sind näher beschrieben bzw. nur für nicht root-User geeignet und werden daher einzeln ausgeführt.

 .bash_prompt: Wie wir im vorherigem Code-Ausschnitt sehen konnten, wird diese Datei zum Schluss geladen, so dass wir zuvor definierte Funktionen und Variablen verwenden können.

# Local or SSH session?
local remote=""
[ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] && remote=1

Wir prüfen, ob es sich hier um ein lokales Terminal oder um eine SSH Verbindung handelt, so dass wir den Hostnamen nur anzeigen, wenn dieser auch benötigt wird.

# set the user-color
local user_color=$COLOR_LIGHT_GREEN           # user's color
[ $UID -eq "0" ] && user_color=$COLOR_RED     # root's color

Root-User bekommen in der Prompt einen Roten-Usernamen angezeigt.

PS: die User-ID (UID) ist in der passwd zu finden: “cat /etc/passwd”

# set the user
local user="\u"

Die Zeichenkette “\u” wird beim Aufruf der Bash-Prompt in den entsprechenden Usernamen umgewandelt.

PS: hier gibt es eine Übersicht über weiter Zeichenketten, welche von der Bash-Prompt verarbeitet werden können z.B. die Uhrzeit

# set the hostname inside SSH session
local host=""
[ -n "$remote" ] && host="\[$COLOR_LIGHT_GREEN\]${ICON_FOR_AT}\h"

Wie bereits erwähnt zeigen wir den Hostnamen (“\h”) nur an, wenn es sich um eine Remote-Verbindung handelt.

if [[ -n $remote ]] && [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
  export TERM='gnome-256color'
elif infocmp xterm-256color >/dev/null 2>&1; then
  export TERM='xterm-256color'
fi

256 Farben in der lokalen Shell verwenden.

# INFO:   Text (commands) inside \[...\] does not impact line length calculation which fixes stange bug when looking through the history
#         $? is a status of last command, should be processed every time prompt prints

Da der Bash-Prompt bestemmte Zeichen nicht mag und wir davon einige in der bereits inkludierten “.colors“-Datei verwendet haben, müssen wir diese Variablen nun hier escapen.

# Format prompt
export PS1="\`if [ \$? -eq 0 ]; then echo -e \[\$COLOR_GREEN\]\${ICON_FOR_TRUE}; else echo -e \[\$COLOR_RED\]\${ICON_FOR_FALSE}; fi\` \[$user_color\]${user}${host}\[$user_color\]:\[$COLOR_LIGHT_BLUE\]\w\[$COLOR_LIGHT_RED\]${ICON_FOR_ARROW_RIGHT}\$(__git_branch)\$(__svn_branch)\$(__git_dirty)\[$COLOR_NO_COLOUR\] "

Der Prompt wird in der Variable PS1 (“echo $PS1″) gespeichert und nach jedem Befehl auf der Kommandozeile neu aufgerufen / ausgeführt, daher rufen wir in der Variable wiederum Funktionen auf, so dass diese Funktionen ebenfalls erneut ausgeführt werden.

PS: “$?” muss als erstes ausgeführt werden, da dieser Befehl den Rückgabewert des letzten Kommandos zurückliefert

2.) Beispiele

bash_prompt_false

– Root-User wird rot gekennzeichnet

– “” anzeigen, wenn der letzte Befehl nicht korrekte funktioniert hat

 

bash_prompt_remote

– Anzeigen des Hostnamens nur bei Remoteverbindungen

– Repository-Branch (git, svn) anzeigen

–  Repository-Status anzeigen (! anfügen, wenn etwas nicht eingecheckt ist)

 

Links & Quellen:

http://wiki.ubuntuusers.de/Bash/Prompt
https://wiki.archlinux.de/title/Bash-Prompt_anpassen
http://ezprompt.net/

grep, ack, find, locate, sed, diff, wc …

An dieser Stelle wollte ich einmal notieren wie ich in der täglichen Arbeit mit z.B. “grep” oder “find” etc. umgehe, um möglichst schnell in Verzeichnissen und Dateien zu suchen oder Text zu ersetzten.

Ich werde hier nicht alle Möglichkeiten der entsprechenden Befehle nennen können, daher beschränke ich mich auf das, was ich wirklich verwende. Falls du dich weiter in der Thematik einlesen möchtest, empfehle ich gerne den “man”-Befehl oder wie andere es ausdrücken RTFM!

Falls dir die Begriffe tail, cat, less nicht viel sagen, dann klick hier!!!

 

grep: 

global regular expression print -> durchsucht Dateien und Verzeichnisse via RegEx bzw. nach Strings

Kurzform Langform Beschreibung
-H
--with-filename
gibt den Dateinamen vor jedem Treffer aus.
-i
--ignore-case
unterscheide nicht zwischen Groß- und Kleinschreibung.
-n
--line-number
gibt die Zeilennummer vor jedem Treffer aus.
-R
-r
--recursive
liest alle Dateien unter jedem Verzeichnis rekursiv.
-v
--invert-match
Invertiert die Suche und liefert alle Zeilen die nicht auf das gesuchte Muster passen.

z.B.:

grep -rHn test ~/php/

-> sucht im Verzeichnis “php”, welches sich wiederum im Home-Verzeichnis [~] befindet nach dem String “test”

PS: hier der selbe Befehl, jedoch eingeschränkt auf php-Dateien

grep -Hn test ~/php/**/*.php

Info: wenn man “git” im Einsatz hat, sollte man “git grep” verwenden ;)

 

ack:

Ack hat die selbe Aufgabe wie “grep” ist jedoch auf Entwickler zugeschnitten, so sucht “ack” im Standardmäßig rekursiv, ignoriert Binärdaten und Verzeichnisse von Versionkontrollsystemen (.svn, .git, etc.)

PS: unter Debian / Ubuntu findet man das entsprechende Paket unter “ack-grep”

 

find:

ist bei der Suche nach Dateien behilflich (“Alles ist eine Datei”)

Suchkriterien für find
Kriterium Beschreibung
-name Datei
Es wird nach Dateien mit dem Namen “Datei” gesucht. Sollen bei der Suche Platzhalter Verwendung finden, so muss der ganze Ausdruck in Anführungszeichen gestellt werden, zum Beispiel

-name "*.txt"
-iname Datei
Es wird nach Dateien mit dem Namen “Datei” – ohne Beachtung der Groß und Kleinschreibung – gesucht.
-type f
Es wird nur nach regulären Dateien gesucht.
-type d
Es wird nur nach Verzeichnissen gesucht.
find -size +10M -20M -exec ls -lah {} \;

-> sucht alle Dateien welche eine Dateigröße zwischen 10 – 20 MB haben und zeigt diese an

WARNING: der “exec”-Parameter kann auch für jeden anderen Befehl auf die Ergebnismenge von “find” ausführen, dabei sollte man jedoch bei dem “rm”-Befehl besonders vorsichtig sein. Und ggf. kann man sich safe-rm anschauen. ;)

PS: hier sind noch ein paar Beispiel

 

locate:

“sudo updatedb” nicht vergessen und schon kann man sehr schnell nach Dateien suchen, da die Dateien nicht im Filesystem, sondern in einer Datenbank (updatedb) gesucht werden.

z.B.:

locate Download | grep home

 

sed:

Es handelt sich hier um einen “nicht-interaktiver Texteditor” was eigentlich nur bedeutet, dass man damit String verarbeite kann. Zum Bespiel kann man ein bestimmtes Wort in einer Datei durch ein anderes ersetzten.

https://github.com/voku/dotfiles/blob/master/.functions

# WARNING -> replace: changes multiple files at once
replace()
{
  if [ $3 ]; then
    find $1 -type f -exec sed -i 's/$2/$3/g' {} \;
  else
    echo "Missing argument"
  fi
}
replace *.php alt neu

-> dieser Befehl such im aktuellen (+ Unterverzeichnisse) nach Dateien, welche auf “.php” enden und ersetzt darin “alt” gegen “neu”

PS: hier findet man ein paar nützliche Beispiele

Dabei ist besonders praktisch, dass man diese Funktionalität auch im “vim” verwenden kann indem man z.B. folgendes eingibt …

 :%s/alt/neu/g

 

diff:

Wie der Name schon vermuten lässt, kann man hiermit Dateien vergleichen. z.B.:

diff -u --ignore-all-space -r old/ new/

-> vergleicht alle Dateien rekursiv (-r) vom Verzeichnis “old/” und “new/” und ignoriert dabei Änderungen vom Leerräumen z.B. Leerzeichen oder Zeilenumbrüche (\r <-> \r\n)

Info: wenn man “git” im Einsatz hat, sollte man “git diff” verwenden ;)

 

wc:

word count kann Wörtern, Zeichen und Bytes (man ahnt es bereits) zählen. z.B.:

cat /proc/cpuinfo | grep processor | wc -l

-> zählt die Anzahl der CPU-Kerne

 

Quellen:
http://beyondgrep.com/ – ack
http://wiki.ubuntuusers.de/grep
http://wiki.ubuntuusers.de/find
http://wiki.ubuntuusers.de/locate
http://wiki.ubuntuusers.de/wc
http://suckup.de/linux/find-linux/
http://suckup.de/linux/streameditor-sed/

Konsolen-Logo

my dotfiles

Habe meine dotfiles (Dateien im Home-Verzeichnis, welche mit einem “.” beginnen) mit anderen Quellen angereichert und diese auf github veröffentlicht. Wer möchte kann diese Einstellungen, Aliase, Funktionen für die “Linux-Shell” verwenden oder auch verbessern, indem man einen entsprechenden Fork von dem Projekt erstellt.

dotfiles_vimdotfiles

https://github.com/voku/dotfiles

Installation:

cd ~ && git clone https://github.com/voku/dotfiles.git && cd dotfiles && source bootstrap.sh

… wenn gewünscht kann man mit diesem kleinen Skript entsprechende ggf. benötigte Pakete nachinstallieren:

bash ~/dotfiles/firstInstall.sh

 

Update:

source bootstrap.sh

 

Anpassungen:

Wenn die Datei “~/.extra” existiert, wird diese zusammen mit den anderen Dateien verarbeitet. Man kann diese nutzen, um benutzerdefinierte Befehle ausführen zu lassen.

z.B.: “cat ~/.extra”

# Git credentials
# Not in the repository, to prevent people from accidentally committing under my name
GIT_AUTHOR_NAME = " Lars Moelleken "
GIT_COMMITTER_NAME = "$ GIT_AUTHOR_NAME "
git config - global user.name "$ GIT_AUTHOR_NAME "
GIT_AUTHOR_EMAIL = " lars@moelleken.org "
GIT_COMMITTER_EMAIL = "$ GIT_AUTHOR_EMAIL "
git config - global user.email "$ GIT_AUTHOR_EMAIL "

 

Erklärungen / Quellen:

http://suckup.de/linux/bashrc/
http://wiki.ubuntuusers.de/Bash/bashrc
http://suckup.de/linux/vi-howto/
http://vim.wikia.com/wiki/Example_vimrc
http://dotfiles.org/

Bildschirmfoto

Ubuntu 11.04 Tweak-Skript

In diesem Blog-Post stelle ich kurz mein kleines Shell-Skript vor, mit dem man sein Ubuntu 11.04 einrichten bzw. optimieren kann. Wenn jemandem noch ein Feature fehlt, kann dies angepasst werden. Zudem habe ich im Quelltext an den meisten Stellen Kommentare hinterlassen, sodass man gleich noch etwas über die shell lernen kann … :-)

Über konstruktive Kritik und / oder Verbesserungen würde ich mich freuen.

Download

 

wget http://suckup.de/ubuntu-11.04-tweak.txt
mv ubuntu-11.04-tweak.txt ubuntu-11.04-tweak
chmod +x ubuntu-11.04-tweak
sudo ./ubuntu-11.04-tweak

 

Funktionen:

- neue Repositories (Quellen) eintragen /  Programme installieren (Java, Flash, Chromium, …)

- Ubuntu / Gnome / Unity anpassen

konsole

Erste Schritte in der Shell

Ich habe schon einige kleine Blog-Beiträge zum Thema “Shell / Bash” geschrieben und werde versuchen diese Blog-Beiträge zu einer hoffentlich umfassenden Einführung in das Thema Shell zusammenfassen…  :-)

Was ist eine Shell?

Die Shell ist die Eingabe-Schnittstelle zwischen Computer und Benutzer, welche bei normaler Systemkonfiguration nach dem erfolgreichem Login eines Benutzers gestartet wird, so dass man auf dieser Kommandozeile die Möglichkeit hat weitere Programme zu starten. Die Shell könnte man somit aus Arbeitsumgebung bezeichnen, von wo aus der PC gesteuert werden kann bzw. Dateien bearbeitet werden können. Es gibt unterschiedliche Arten von Shell’s, wer ein modernes Linux-Betriebssystem (Debian, Ubuntu…) installiert, landet meistens in der sogenannten “bash“, darauf gehe ich jedoch gleich genauer ein. Die eingegebenen Texteingaben werden von der Shell interpretiert und ausgeführt, daher spricht man bei der Shell auch von einem Kommandozeileninterpreter (command-line interpreter, CLI).

 

Begrifflichkeiten!?

In Verbindung mit dem Begriff Shell hört man auch immer wieder folgendes …

 

  • Konsole: In ihrem ursprünglicher Definition war die Konsole ein Terminal, mit dem der Systemoperator die Systemfunktionen steuern konnte… heute wird der Begriff jedoch ebenfalls für “Terminalemulation” verwendet, zudem heißt die grafischen Terminalemulationen unter KDE “Konsole“.
  • Virtuelle Konsole: Die meisten Linux-Systeme kommen standardmäßig mit einigen virtuellen Konsolen daher, welche man über <Strg> + <Alt> + <F1> bis <F6> erreichen kann. Mittels <Strg> + <Alt> + <F7> wird der Desktop und somit die graphischen Oberfläche wieder angezeigt.
  • Terminal: Ein Terminal ist ein Computer, der den Zugriff auf einen entfernten Rechner erhält und die meisten Rechenoperationen somit nicht selber durchführt. (Terminal-PCs) Der Begriff “Terminal” wird heute jedoch auch als Abkürzung für “Terminalemulation” verwendet.
  • Terminalemulation: Mit einer Terminalemulation wird eine textorientierte Ein- und Ausgabeschnittstelle, ein Terminal emuliert, so dass man mehrer Instanzen eines Terminals auf dem Desktop zur Verfügung hat.
shell <---> Terminalemulation <---> grafische Oberfläche
bash  <--->       xterm       <--->         X11

 

Wie komme ich in die Shell?

Wie bereits erwähnt kann man zum einen die virtuelle Konsolen, die mit tty bezeichnet werden per Tastenkombination erreichen. Die Abkürzung tty stammt von dem englischen Wort Teletype und wurde historisch bedingt von Unix übernommen. Mittels …

<Strg> + <Alt> + <F1>

… gelangt man in die erste der tty-Konsolen, in diesem Fall tty1.

 

 

 

Hinweis: Hat man eine  grafische Oberfläche (Desktop) installiert, so befindet sich dieser standardmäßig auf tty7. Dieser Wert ist jedoch Variabel und kann umverlegt werden. Wer die Maus in einer solchen virtuellen Konsole verwenden will, sollte sich das Programm “gpm” anschauen / installieren.

 

Hat man sich einmal an die Desktop-Oberfläche gewöhnt, erscheinen einem diese virtuelle Konsolen meist wenig komfortabel, daher gibt es einige Programme (Terminalemulation) welche den Funktionsumfang erheblich erweitern.

 

KDE – Konsole

KDE-Nutzern steht das bereits erwähnte Programm “Konsole” zur Verfügung, wobei sich der Kreis der Begrifflichkeiten hier schließt und die Verwirrung bei so manchen gerade erst einsetzt. ;-) Lässt man dies außer Acht ist dieses Terminal(emulation) sehr gut. Das Programm unterstützt Tabs, Transparenz, verschiedenste Farbschema, unterschiedliche Schriften und man kann Profile anlegen.

 

konsole
konsole

 

Gnome – Terminal

Gnome-Nutzer verfügen von Haus aus über ein Programm mit dem Namen “Gnome-Terminal”. Ich persönlich bevorzuge dieses Programm, wobei dies wahrscheinlich eine Übungssache ist…

 

TASTENKÜRZEL BEDEUTUNG
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span>&lt;Strg&gt; + &lt;Umschalttaste&gt; + t</span></strong>
öffnet einen neuen Tab
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span><strong><span>&lt;Strg&gt; + d</span></strong></span></strong>
schließt einen Tab
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span><strong><span>&lt;Strg&gt; + Bild rauf</span></strong></span></strong>
öffnet nächsten Tab (rechts) bzw. den ersten
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span><strong><span><strong><span>&lt;Strg&gt; + Bild runter</span></strong></span></strong></span></strong>
öffnet vorherigen Tab (links) bzw. den letzen
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span><strong><span><strong><span><strong><span>&lt;Strg&gt; + &lt;Umschalttaste&gt; + Bild rauf</span></strong></span></strong></span></strong></span></strong>
verschiebt einen Tab nach rechts
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span><strong><span><strong><span><strong><span><strong><span>&lt;Strg&gt; + &lt;Umschalttaste&gt; + Bild unter</span></strong></span></strong></span></strong></span></strong></span></strong>
verschiebt einen Tab nach links

 

Hinweis: Wer das Terminal immer Griffbereit haben möchte, sollte sich einmal “guake” anschauen … ;-)

 

gnome_terminal
gnome_terminal

 

Xterm

Xterm ist Bestandteil des X.org Projekts und war lange Zeit das Standardterminal für Linuxsysteme mit grafischer Oberfläche.

 

CLI Companion

Wer die Linux-Befehle noch lernen möchte oder sich einige komplizierte Behle öfter benötigt, kann sich auch dieses Terminal anschauen. -> cli-companion-die-gui-in-der-konsole

 

CLICompanion
CLICompanion

 

Terminator

“Terminator ist ein in Python geschriebener Terminal-Emulator für die Desktop-Umgebung GNOME, der es ermöglicht mehrere Terminals innerhalb eines Fensters bzw. einzelner Tabs zu benutzen und mittels Tastatur-Kürzeln zwischen diesen zu wechseln. So kann man ohne Tabs und ohne weitere Terminalfenster mehrere Shells zur selben Zeit offen haben.” – http://wiki.ubuntuusers.de/Terminator

 

terminator_split_example
terminator_split_example

 

Wenn man seine Standard-Terminal ändern möchte, kann man dies mit dem Alternativen-System bewerkstelligen…

sudo update-alternatives --config x-terminal-emulator

 

Was für Shells gibt es?

Wenn man sich ein wenig näher mit dem Thema beschäftigt, stellt man schnell fest, dass es eine Menge Alternative Shells gibt. Ich beschränke mich einfach mal auf die (heutige) Standard-Shell die bash und einer Alternative der zsh (Z-Shell)

 

Bourne Again Shell (bash)

Die Bourne Again Shell ist die Standard-Shell der meisten Linux-Distributionen. Die Shell beherrscht die Features der Borune- Korn- und C-Shell. Redet jemand von einer Shell, spricht man meistens von Bash. Um das volle Potenzial der Bash zu nutzen sollte man sich “.bashrc“-Datei anschauen und an seine Bedürfnisse anpassen, für den Anfang sollte meine Datei als Vorlage genügen. -> bashrc

 

Z-Shell (zsh)

Die Zsh kann man als eine Zusammenstellung aller Verbesserungen und Features aus der bash, der csh und der tcsh betrachten.

Zu einigen ihrer Features zählen:

  • eine frei programmierbare Wortvervollständigung (TAB-Completion)
  • die Möglichkeit, die History aus anderen – gleichzeitig laufenden – Shells zu nutzen
  • Rechtschreibüberprüfung
  • nahezu vollständige Kompatibilität zur bash, ksh und tcsh

-> Quelle: http://de.wikipedia.org/wiki/Unix-Shell#Die_Z-Shell

Bei der Z-Shell kann hat man noch viel mehr Einstellungsmöglichkeiten, welche einem Anfangs ggf. überfordern können, daher auch hier meine “.zshrc“-Datei als Vorlage. -> zshrc

 

Z-Shell installieren:

sudo aptitude install zsh

Z-Shell ausprobieren:

zsh

Standardmäßig die Z-Shell verwenden:

sudo chsh -s /usr/bin/zsh `whoami`

 

Probieren geht über studieren…

… was ist damit sagen will, wer einmal die Vorteile der Shell erkannt hat und einige Befehle kennt, wird die Shell lieben lernen!

 

Linux-Dateipfade einigermaßen kennen

Auch wenn in der Shell meist angezeigt wird in welchem Verzeichnis man sich gerade befindet, kann es seht hilfreich sein, wenn man ungefähr weiß wo sich was bei Linux befindet! -> http://wiki.ubuntuusers.de/Verzeichnisstruktur

 

Verzeichnis Bedeutung ~ Windows
/
Wurzelverzeichnis
C:\
/boot
Bootloader
C:\
/etc
Systemkonfiguration registry

C:\WINDOWS\*.ini
/bin
Systemprogramme für Benutzer
C:\WINDOWS\,C:\WINDOWS\COMMAND\
/sbin
Systemprogramme und -dienste für Admins  
/lib
Systembibliotheken und Treiber
C:\WINDOWS\SYSTEM32\
/tmp
Temporäre Dateien
C:\WINDOWS\TEMP\
/usr
(“Unix System Resources”)  
/usr/bin
Programme für Benutzer
C:\Programme\*\
/usr/sbin
Programme und Dienste für Admins  
/usr/lib
Bibliotheken  
/home
Heimatverzeichnisse
C:\Dokumente und Einstellungen\
/home/user
Heimatverzeichnis des Benutzers user  
/root
Heimatverzeichnis des Benutzers root  
/var
Daten von Diensten  
/var/log
Systemprotokolle  
/media
Wechseldatenträger, z.B. USB-Stick  
/media/cdrom
CD-ROM
A:\, D:\, E:\,...

 

Beim Login in die Shell, landet man meistens in seinem eigenen home-Verzeichnis (z.B.: /home/lars/). Im “Prompt” (dem Text vor der Eingabeaufforderung, in der Shell) könnte nun so etwas angezeigt werden “lars@ubuntu:~$“.

lars ist hier der User-Name, ubuntu der Name des PCs und das ~ (Tilde-Zeichen) steht als Abkürzung und Synonym für das Homeverzeichnis, in welchem wir uns gerade befinden, dies kannst du gleich durch die Eingabe des Befehl “pwd” (print working directory) überprüfen. ;-)

 

Groß- und Kleinschreibung beachten

Anders als bei Windows unterscheidet Linux Groß- und Kleinschreibung, hier einige Beispiele zur Verdeutlichung …

mkdir lall

(mkdir – make directories)

mkdir Lall
touch lall

(touch – erstellt eine leere Datei)

touch Lall

 

Nun können wir uns mittels “ls” (ls – list directory contents) bzw. …

ls -latrF --color=auto

… anzeigen lassen, welche Dateien / Verzeichnisse im aktuellen Verzeichnis erstellt wurden. Mittels “rm” bzw. “rmdir” kannst du diese Dateien wieder löschen. Falls du versehentlich z.B.: “touch ./–help” ausführst und somit eine leere Datei mit dem Namen-“–help” erstellt hast, kannst du diese mittels “rm ./–help” wieder entfernen.

 

Der Befehl “man” (z.B.: man mkdir) zeigt eine ausführliche Hilfe zum angegebenen Befehl an und “apropos” (z.B.: apropos mkdir) zeigt dessen Funktion schnell an… zudem kann man hinter den Befehlen auch “–help” (mkdir –help) schreiben

 

Achtung
Achtung: Vorsicht der Befehl “rm -r” löscht rekursiv, am Anfang sollte man diesen Parameter ggf. mit -i kombinieren, so dass vor dem löschen einer Datei noch einmal nachgefragt wird, ob diese wirklich gelöscht werden soll. (z.B.: rm -ri lall/) -> safe-rm can save your life

 

Die Navigation

Ebenfalls ein sehr großes Themenfeld ist die Navigation in der Shell, angefangen von der Navigation durch die Verzeichnisse / Dateien … über die Verwendung der History (bereits eingegebene Befehle in der Shell) … bis hin zur Navigation innerhalb der Shell.

 

Navigation in Verzeichnissen

Befehl BEDEUTUNG
cd ..
wechselt ein Verzeichnis nach oben
cd ../..
wechselt zwei Verzeichnise nach oben
cd ~
wechselt in dein home-Verzeichnis
TAB
durch das drücken der Tabulator-Taste, wird deine Eingabe vervollständigt -> ggf. 2x hintereinander TAB drücken !!!
».«
jedes Verzeichnis enthält eine Referenz auf sich selbst, diesen Punkt benötigt man vor allem,

wenn man eine ausführbare Datei starten möchte… (z.b: cd /bin/; ./bash;)

pwd
zeigt an wo du dich befindest

 

Durch das drücken der TAB-Taste kann man sich viel Tipparbeit ersparen… :-)

 

Navigation in der Shell

BEFEHL / Tastenkürzel BEDEUTUNG
<Strg> + d
Logout aus der Shell (logout bzw. exit)
<Strg> + c
laufender Prozesse (im Vordergrund) wird beendet
<Strg> + l
räumt die Ausgabe auf (clear)
fc -l
zeigt die letzten Befehle in einer Liste an
Pfeiltasten (noch oben / unten)
letzte Befehle durchblättern
Pfeiltasten (noch rechts / links)
Cursor auf der Konsole (rechts / links) bewegen
<Strg> + r
sucht einen Befehl in der Bash-History (mehrmaliges drücken von Strg+r geht weiter in der History zurück)
Alt + .
schreibt den letzten Parameter des letzen Befehls auf die Konsole
!$
schreibt den letzten Parameter des letzen Befehls auf die Konsole (Alt + .)
!!
führt den letzten Befehl noch einmal aus
!string
startet den letzten Befehl, der mit sting anfängt
!?string
startet den letzten Befehl, der string enthält
^sting1^string2
wiederholt den letzten Befehl, wobei sting1 doch string2 ersetzt wird
<Strg> + a
Cursor am Anfang der Zeile
<Strg> + e
Cursor am Ende der Zeile
<Strg> + w
schneidet das letzte Wort aus
<Strg> + u
scheidet alles vor dem Cursor aus
<Strg> + k
scheidet alles hinter dem Cursor aus
<Strg> + y
fügt die zuletzt ausgeschnittenen Daten ein

 

PS: wie bereits erwähnt entfaltet die Shell ihr volles Potenzial erst, wenn man diese ein wenig an seine Wünsche anpasst, daher hier noch einmal der Verweiß auf die .bashrc und .zshrc

 

Kommandos hintereinander ausführen

Wie bereits kurz zuvor gezeigt, kann man Befehle auch hintereinander ausführen… z.B.:

cd /bin/; ./bash;

Hier werden die Befehle “cd /bin/” und “./bash” einfach nacheinander ausgeführt. Wenn man den zweiten Befehl jedoch nur ausführen möchte, wenn der erste Befehl ohne Probleme funktioniert hat, kann man && zwischen den beiden Befehlen verwenden… z.B.:

cd /bin_lall/ && ./bash;

Und wenn man den zweiten Befehl nur ausführen möchte, wenn der erste Befehl nicht funktioniert hat, nimmt man “||“… z.B.:

cd /bin_lall/ || echo "ggf. existiert /bin_lall nicht";

 

PS: Natürlich muss man nicht jedesmal in das Verzeichnis /bin wechseln, wenn man ein Programm aus diesem Verzeichnis öffnen möchte, dazu wird in der Shell die Variable “$PATH” verwendet. z.B.:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

 

Mehrzeilige Kommandos

Wenn man ein Kommando / Befehl über mehrere Zeilen aufteilen möchte, kann man dies mithilfe von “\” machen… z.B.:

find /etc/ \
-iname "pass*"
Hier gibt es weitere Infos zum “find”-Befehl und hier noch eine Befehlsübersicht für alle die gerade Ihre ersten Schritte auf der Shell wagen…

 

Syntax Name Beschreibung ~ Windows
pwd
present working directory Anzeige des aktuellen Arbeitsverz.  
cd Zielverzeichnis
change directory Verzeichniswechsel
CD
ls Verzeichnis
list Verzeichnisinhalt anzeigen
DIR
file Datei
% Dateiformat oder -typ  
echo Zeichenkette
% Zeichenkette ausgeben  
cat Datei
concatenate Dateiinhalt ausgeben
TYPE
more Datei
% dito, seitenweise
MORE
less Datei
% dito, blättern und suchen  
touch Datei
% Leere Datei anlegen  
cp Quelle Ziel
copy kopieren
COPY
mv Quelle Ziel
move verschieben, umbenennen
MOVE, REN
rm Datei
remove löscht eine Datei
DEL, ERASE
mkdir Verzeichnis
make directory neues Verzeichnis anlegen
MD
rmdir Verzeichnis
remove directory (leeres) Verzeichnis löschen
RD

-> linux-kommandos-als-hintergrundbild ;-)

 

Dateien bearbeiten

Wer direkt in der Shell Dateien verändern möchte, sollte sich den “vim”-Editor anschauen, wie die Shell ist dieser Editor gewöhnungsbedürftig aber man gewinnt Ihn mit der Zeit lieb… ;-) In diesem HowTo habe ich versucht die wichtigsten Funktionen von vim zusammenzufassen. Und hier noch eine Schnellübersicht:

 

BEFEHL / TASTENKÜRZEL BEDEUTUNG
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;">i</strong>
Text einfügen, vor dem Cursor
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;">R</strong>
Text ab Cursor-Position überschreiben
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;">&lt;Strg&gt; + v</strong>
Bereich markieren
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span>&lt;ESC&gt;</span></strong>
Bearbeitungsmodus beenden
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span>y</span></strong>
kopieren
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span>p</span></strong>
einfügen
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span>:q</span></strong>
vi/vim beenden
<strong style="font-family: Verdana, Arial, Helvetica, sans-serif; padding: 0px; margin: 0px;"><span style="font-weight: normal;"><strong>:w</strong></span></strong>
Datei speichern

 

 

vi-vim-cheat-sheet_de_layout
vi-vim-cheat-sheet_de_layout

 

Es gibt unter Linux noch etliche Programme, welche einem beim bearbeiten von Dateien hilfreich sein können z.B.: sed

sed -i 's/Ubuntu/Windows/g' test.txt

Dieser Befehl ersetzt das Wort “Ubuntu” durch “Windows” in der ganzen Datei “test.txt” im aktuellen Verzeichnis. Weitere Infos zu sed findest du hier -> streameditor-sed und hier noch ein alter Beitrag zum Thema -> Dateien-in-der-shell-bearbeiten

 

Programme im Hintergrund verschieben

Man kann Programme und Befehle auch im Hintergrund ausführen bzw. diese in den Hintergrund verschieben…

 

lars@ubuntu ~$ kommando1 & 
[1] 5520
lars@ubuntu ~$ kommando2 & 
[2] 5521
lars@ubuntu ~$ fg %2 
kommando2

 

kommando1 und kommando2 wurden beide im Hintergrund ausgeführt, dann wurde kommando2 mittels dem Befehl “fg” wieder in den Vordergrund geholt. Wenn man kommando2 wieder in den Hintergrund verschieben möchte drücken wir: <Strg> + z

[2]+  Stopped kommando2
lars@ubuntu ~$ bg 
[2]+ kommando2 &

Mit Hilfe des Befehls “

bg"

wird eine angehaltener Job der Shell in den Hintergrund verschoben und wieder gestartet:

Hier gibt es diesbezüglich weitere Infos: Prozess-anhalten

 

StdIn & StdOut

Sehr hilfreich sind folgende kleine Helfer in der Shell -> Pipezeichen (|) Größer-als-Zeichen (>) und Kleiner-als-Zeichen (<)

mithilfe dieser Zeichen kann man Programm bzw. dessen Ausgaben umleiten. z.B.:

ls -l /usr/bin > /tmp/Alle_Benutzerprogramme.txt

-> schreibt die Ausgabe von “ls” des Verzeichnisses /usr/bin/ in die Textdatei /tmp/Alle_Benutzerprogramme.txt

grep http /etc/services | wc -l

-> zählt alle Zeilen in der Textdatei /etc/services, die die Zeichenkette http enthalten

 

Der Befehl “grep” kann Verzeichnisse, Dateien oder Ausgaben durchsuchen bzw. filtern, daher solle man sich diesen Befehl noch mal genauer ansehen!!!

 

 

Zum Schluss verlinke ich noch einige alte Blog-Post welche weitere Informationen zur Shell beinhalten, viel Spaß beim testen… :D

 

Dateien verschieben in der Shell -> http://suckup.de/blog/2010/01/31/mv-linux/

- reguläre Ausdrücke (wildcards) in der Shell -> http://suckup.de/blog/2010/02/09/wildcards-in-der-shell/

Shell-Programmierung: Schleifen -> http://suckup.de/blog/2010/02/09/nice-try/http://suckup.de/blog/2010/01/31/bash-programmierung-schleifen/

Bedingungen in der Shell -> http://suckup.de/blog/2010/01/31/bedingungen-in-der-shell-linux/

crontab -> http://suckup.de/blog/2010/02/08/crontab/

ps – prozessstatus -> http://suckup.de/blog/2010/09/14/shell-ps-prozessstatus/

Rechnen in der Shell -> http://suckup.de/blog/2010/01/31/rechnen-in-der-shell/

HTML-Umlaute in der Shell korrigieren -> http://suckup.de/blog/2010/02/13/html-umlaute-korrigieren/

cdrecord – ISO erstellen und CD brennen -> http://suckup.de/blog/2010/01/31/cdrecord-iso-erstellen-und-brennen/

aptitude & dpkg -> http://suckup.de/blog/2010/02/13/aptitude-dpkg/

- Unix-Dateiattribute (Zugriffsrechte) verändern -> http://suckup.de/blog/2010/01/31/chmod-howto/

su & sudo & Setuid-Bit -> http://suckup.de/blog/2010/02/08/su-sudo-setuid-bit/

Systeminfos anzeigen -> http://suckup.de/blog/2010/02/08/systeminfos-anzeigen-lassen/

Speicherverbrauch anzeigen -> http://suckup.de/blog/2010/02/08/speicherverbrauch-anzeigen-lassen/

mount über SSH -> http://suckup.de/blog/2010/02/07/mount-ueber-ssh/

Ports via ssh weiterleiten -http://suckup.de/blog/2010/03/29/ports-via-ssh-weiterleiten/

SSH – Hostnamen vervollständigen -> http://suckup.de/blog/2010/09/14/ssh-hostnamen-vervollstaendigen/

Desktop Firewall – iptables -> http://suckup.de/blog/2010/01/31/desktop-firewall-iptables/

deine öffentliche IP-Adresse in der Shell -> http://suckup.de/blog/2010/01/31/deine-oeffentliche-ip-adresse/

offene Ports analysieren -> http://suckup.de/blog/2010/03/28/offene-ports-analysieren/

TCPdump – HowTo -> http://suckup.de/blog/2010/08/02/tcpdump-howto/

netstat + ss + lsof -> http://suckup.de/blog/2010/01/31/netstat-ss-lsof/

nethogs und iftop – Traffic analysieren -> http://suckup.de/blog/2010/01/31/nethogs-und-iftop-traffic-analysieren/

lsof – list open files -> http://suckup.de/blog/2010/02/22/lsof-list-open-files/

CLICompanion

CLI Companion – die GUI in der Konsole

CLI Companion ist ein Terminal mit integrierter GUI oder sollte ich besser sagen ein GUI mit integriertem Terminal? Egal. Du kannst Shell-Kommandos (mit Beschreibung) abspeichern, so dass du diese mit der Zeit lernen kannst.


Installation:

sudo add-apt-repository ppa:clicompanion-devs/clicompanion-nightlies
sudo apt-get update
sudo apt-get install clicompanion


Beispiel:

CLICompanion
CLI Companion


Quelle:
launchpad.net/clicompanion

top + 1

Linux-Server analysieren

Dieser Blog-Post ist als Antwort auf die Frage “Nun würde mich mal interessieren, welche Tools euch zum Administrieren eines Linux Servers helfen und speziell auch welchen Taskmanager ihr verwendet.”, aus dem folgendem Blog gedacht. -> infoblog.li/besserer-taskmanager-fuer-den-linux-server-htop/

 

1.) Überblick verschaffen

Wenn man nicht genau weiß, wo das Problem liegt, muss man sich erst-einmal einen groben Überblick über die Situation verschaffen, dabei helfen die folgenden Befehle:

 

1.1) top – CPU- und Arbeitsspeicher-Auslastung analysieren

top

Es folgen einige wichtige Tastenkürzel:

1 -> zeigt die Auslastung der einzelnen CPUs an
b / B -> hebt die aktiven Prozesse hervor
z -> wie “b oder B” nur mit Farbe ;-)
i -> zeigt nur aktive Prozesse an
M -> zeigt die Prozesse sortiert nach dem Speicherverbrauch an
P -> zeigt die Prozesse sortiert nach der CPU-Last an
d -> gibt die Aktualisierungszeit an
k -> kill – tötet einen Prozess

(alternativ kann man sich auch mal “htop” anschauen)

 

1.2) df / du – Festplattenverbrauch analysieren

df -h

-h -> auch für Menschen lesbar (–human-readable)

df -h
df -h

 

Wenn wir den Speicherverbrauch nun weiter analysieren müssen, weil z.B. ein Verzeichnis unter /var zu groß ist, können wir dies mit “du” machen.

du -h | grep "^[0-9,]*[MG]" | sort -hr | less

 

Erklärung: “du” gibt die Größe von Dateien und Verzeichnissen aus “-h” zeigt dies leserlich an, “|” der Pipe leitet die Ausgabe weiter, “grep” ist universal einsetzbar, um etwas (Dateien / Ausgaben…) zu durchsuchen und wir suchen alle Zeilen, in denen “^” am Anfang eine Zahl  “0 1 2 3 4 5 6 7 8 9″ oder / und “,” in beliebiger Häufigkeit “*” gefolgt von einem großen “M” oder einem “G”. Diese Ausgabe wird per Pipe “|” an “sort” weitergegeben, wo diese Ausgabe nach sortiert wird und “|” schließlich mit “less” angezeigt wird. (mit q kann man less wieder beenden) Wer mehr über Reguläre Ausdrücken lernen möchte, kann sich dies hier antun ;-) -> http://linuxwiki.de/

Wer will kann dich solche “Funktionen” einfach in die .bashrc eintragen…

alias du_suckup='du -h | grep "^[0-9,]*[MG]" | sort -hr | less'

 

1.3) iotop – Festplattenauslastung  analysieren

iotop

Der Befehl “iotop” kann die aktuellen I/O Transferraten für die laufenden Prozesse/Threads anzeigen und greift dazu direkt auf die Informationen vom Kernel zu ( >= v2.6.20 ).

Es folgen wieder einige wichtige Tastenkürzel:

Pfeiltasten – link & rechte -> ändern die Sortierung der Ausgabe, je nach Kategorie
r -> dreht die Sortierung um (reverse)
o -> Zeigt nur noch Prozesse/Threads an, welche auch I/O-Last produzieren
p-> zeigt nur noch Prozesse an (keine Threads )
a -> zeigt nicht mehr die Last in Sekunden an, sondern addiert die I/O fortlaufen (solange iotop läuft)

1.4) lsof – Beziehung zwischen Dateien & Prozessen analysieren

Der Befehl “lsof” kann eingesetzt werden, um z.B. zu analysieren, welcher Prozess oder Anwender momentan eine bestimmte Datei verwendet oder auch welcher User, welchen Port offen hält + die dazugehörige PID (ProzessID)…

lsof -a -i -u www-data

 

lsof - Beispiel
lsof – Beispiel

 

Wer mehr zu dem Thema erfahren möchte, kann in einen alten Blog-Beitrag weiter lesen -> suckup.de/blog/2010/02/22/lsof-list-open-files


2.) Prozesse analysieren

Hier verweise ich einfach mal auf zwei alte Blog-Beiträge.:

2.1) der Befehl “ps”, um bestimmte Prozesse aufzuspüren -> suckup.de/blog/2010/09/14/shell-ps-prozessstatus

2.2) und noch einige Programm, um den verbrauchten Arbeitsspeicher zu analysieren -> suckup.de/blog/2010/02/08/speicherverbrauch-anzeigen-lassen

 

3.) Hardware analysieren

Auch hier verweise ich auf einen alten Beitrag.:

3.1) hier noch eine Sammlung von Befehlen mit denen man z.B. die Festplatte auf Fehler prüfen kann ->  http://suckup.de/blog/2010/02/08/systeminfos-anzeigen-lassen/

 

4.) Netzwerk analysieren

Und auch hier verweise ich auf ein paar alte Beiträge.:

4.1) mit “TCPdump” kannst du den Netztraffik analysieren (sniffen) ähnlich wie Wireshark, nur auf der Konsole. :-) -> suckup.de/blog/2010/08/02/tcpdump-howto

4.2) offene Ports analysieren mit “nmap” + “fuser” -> suckup.de/blog/2010/03/28/offene-ports-analysieren

 

weitere Schritte

Mit Hilfe dieser Befehl sollte man einige Problem bereits eingrenzen können, ich würde parallel unter /var/log/ nachschauen, ob irgendetwas auffälliges in den Logfiles steht …

ls -altr /var/log/

-> Dateien rekursiv nach ihrer letzten Änderung anzeigen (neuste Datei steht nun unten)

tail -f test.log

-> das Logfile wird nun kontinuierlich mit-gelesen, so dass man neu auftretende Fehler bemerkt

Konsolen-Logo

Ubuntu aufräumen

Wer Ubuntu einmal aufräumen möchte, kann folgendes Skript dafür verwenden, außerdem kann man mit dem Programm localpurge überflüssige Sprach-Dateien löschen.


Nutzung auf eigene Gefahr und wie immer gilt, erst verstehen dann per “Copy&Past” kopieren!


#!/bin/bash

OLDCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')
CURKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')
LINUXPKG="linux-(image|headers|ubuntu-modules|restricted-modules)"
METALINUXPKG="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"
OLDKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
GELB="\033[1;33m"
ROT="\033[0;31m"
FARBLOS="\033[0m"

if [ $USER != root ]; then
  echo -e $ROT"Error: du bist nicht root"
  echo -e $GELB"Ende..."$FARBLOS
  exit 0
fi

echo -e $GELB"APT-Cache aufraumen..."$FARBLOS
aptitude autoclean

echo -e $GELB"nicht mehr benoetigte Abhaengigkeiten aufraumen..."$FARBLOS
apt-get autoremove

echo -e $GELB"alte Config-Dateien loeschen..."$FARBLOS
aptitude purge $OLDCONF

echo -e $GELB"alte Kernels loeschen..."$FARBLOS
aptitude purge $OLDKERNELS

echo -e $GELB"alle Trashes löschen..."$FARBLOS
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
rm -rf /root/.local/share/Trash/*/** &> /dev/null

echo -e $GELB"Alles sauber...!"$FARBLOS
Konsolen-Logo

.zshrc

Die Z-Shell ist eine alternative Shell, welche voll konfigurierbar ist. In erster Linie habe ich die Einstellungen in der “~/.zshrc”-Datei vorgenommen. Wer lieber die Bash verwendet, kann hier meine .bashrc finden.

 

Z-Shell installieren:

sudo aptitude install zsh

 

Z-Shell ausprobieren:

zsh

 

Standardmäßig die Z-Shell verwenden:

sudo chsh -s /usr/bin/zsh `whoami`

 

Download:

https://github.com/voku/dotfiles/blob/master/.zshrc

 

Wenn du einige Funktionen und Einstellungen von meiner .zshrc übernehmen möchtest, musst du ggf. vorher folgende Befehle ausführen.

mkdir -p ~/.zsh/cache

 

Und falls du deine alte History verwenden möchtest, auch noch diese Befehle.
cp -pv ~/.bash_history ~/.zsh_history

 

Um einige Funktionen der Zsh zu zeigen, habe ich ein kleines Video per “recordmydesktop” aufgenommen. Die Zsh hat eine sehr ausgeprägte Autovervollständigung (einfach mal <TAB> drücken), welche man bis ins kleinste per .zshrc einstellen kann.

 

Zum Schluss noch zwei hilfreiche Links zum Thema: zsh

burnachurch.com/318/zsh-die-bessere-shell

wiki.ubuntuusers.de/zsh