Tipps zu Linux

Tipps rund um Linux

Alle hier gezeigten Tipps, Tricks, Anregungen, Codebeispiele usw. sind ohne Gewähr. Wer Fehler findet, kann sie entweder behalten oder an uns melden.

Logfiles durchsuchen

Die meisten Logfiles unter Linux liegen unter /var/log. Oftmals werden sie vom Cron in regelmäßigen Abständen geschloßen, umbenannt und eventuell kopiert. Dann wird eine neue leere Version erzeugt. Zum Beispiel gibt es vom Systemlogfile in Red Hat basierten Linuxen die Versionen: messages, messages.1, messages.2, messages.3 und messages.4. Gepackte Versionen heißen z.B. messages.1.gz und sind somit im GZip-Format gespeichert. Bei Debian basierten Systemen wären das syslog, syslog.1, syslog.2.gz usw.

Beispiele - Suchen nach Datum und Einträgen zu USB:

# grep "^Apr 14" /var/log/messages | grep -i usb

# zgrep "^Apr 14" /var/log/messages.gz | grep -i usb
# (zgrep bei gepackter Version)


Suchen von Text in bestimmten Dateien

Mit der Kombination aus find und grep kann man zuerst einen Bereich an Dateien definieren und dann diese nach einem Suchtext durchsuchen. Mit dem folgenden Ausdruck wird der Text 'suchtext' in den Dateien txt, csv und html im homedir gesucht und die Dateinamen ausgegeben wenn dieser Text gefunden wurde.

# find ~/.* -type f \( -iregex "^.*\(txt\|csv\|html\)$" \) -exec grep -i suchtext {} \; -print

Will man in allen Dateien suchen jedoch in bestimmten Dateien nicht, muß ein '-not' hinzu gefügt werden.

# find ~/.* -type f -not \( -iregex "^.*....(s.o.)....

Will man all diese Dateien auch löschen, so geht das wie folgt (Aber Achtung, dieser Befehl löscht wirklich alle gefunden Dateien, *.tmp im Beispiel!).

# find ~/.* -iname *.tmp -print0 | xargs -0r rm

* -print0 bedeutet das auch Dateinamen mit Leerstellen und usw. auch funktionieren.
* Beim xargs muss dann der Parameter -0r und erst dann der Befehl folgen.


Bildschirmschoner für die Console ausschalten

Wenn man nur die Ubuntu-Server Edition auf einem Rechner hat und vermeiden will das der Bildschirm in der Console schwarz wird, kann man dies mit diesen paar Zeilen in der Datei /etc/rc.local machen. Wenn dann z.B. irgendwelche Fehlermeldungen auf der Console erscheinen und der Rechner bleibt hängen, kann man diese dann noch lesen.

 for index in $(seq 1 6)
  do
      /usr/bin/setterm -blank 0 -powerdown 0 -powersave off > /dev/tty${index}

  done


Initramdisk neu bauen

Nach einem Hardwaretausch, insbesondere nach der Änderungen des ATA-Chipsatzes, kann eine Maschine beim Laden des Kernels scheitern und in der Shell der initial ramdisk hängen bleiben. So geschehen nach einem recht brutalen ,,dd-Backup„ aus dem laufenden System. In der Initrd-Shell kann man nicht viel machen, der ATA-Treiber wird nicht auf magische Weise entstehen und ohne ihn kann man nicht auf die Festplatte zugreifen.

Also bootet man von einem Live-System, zum Beispiel grml [1] und probiert im changeroot den Neubau der Initrd. Das tote Zielsystem sei auf /dev/sda1, alles auf / (also /boot/, /usr/, etc. nicht auf eigenen Partitionen, Swap ist irrelevant):

# mount /dev/sda1 /mnt
# mount -t proc none /mnt/proc
# mount -t sysfs none /mnt/sys
# mount --bind /dev /mnt/dev
# chroot /mnt /bin/bash

Man hat / und die virtuellen Dateisystem proc und sysfs gemountet und /dev gebunden, um hinterher auf die physikalischen Platten schreiben zu können. Danach hat man eine Shell, in der man fast genau so wie im geklonten System arbeiten kann – mit dem Unterschied, dass der Kernel des Live-Systems läuft.

Hier wollen wir die Initrd neu bauen und GRUB updaten:

# update-initramfs -u
# update-grub

Das funktioniert unter Debian GNU/Linux und verwandten Systemen. Andere Distris haben andere Tools dafür. Nun kann man neu booten und bei Erfolg nochmal dmesg und das Syslog beobachten.

[1] https://grml.org/


Grub2 neu bauen bzw. hängt in der minishell

Wenn z.B. nach einem Kernel Update oder einem Systemneustart der Grub2 den Kernel nicht mehr bootet und in der minishell hängt, kann man mit den folgenden Befehlen das System manuell starten.

Zuerst gugggge wir uns die Partitionen an mit:

# ls -l

und dann fange mer an mit:

# insmod gzio
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos1)'
# linux   /boot/vmlinuz-X.X.X-X-generic-pae root=/dev/sd??
# initrd  /boot/initrd.img-X.X.X-X-generic-pae
# boot


Tastaturlayout unter Ubuntu Server einstellen

Wenn bei der Ubuntu-Serverinstallation das Tastaturlayout noch auf englisch steht, kann mit

 # dpkg-reconfigure keyboard-configuration

das Layout und die Sprachbelegung eingestellt werden. Mit dpkg-reconfigure lassen sich alle installierten und dafür geeigneten Pakete konfigurieren.


Zeitzone falsch eingestellt?

Wenn die Zeitzone falsch eingestellt ist, dann:

### Auf debian und ubuntu kompatiblen Systemen:
# dpkg-reconfigure tzdata

### Auf redhat basierten Systemen:
# tzselect


Linux Passwort reset

Wenn man das Root Passwort seines Linux Rechners vergessen hat, kann man dies z.B. auf zwei Arten lösen: 1. via Grub ein Notsystem starten oder 2. mit einer Rettungs- oder Live-CD starten.

Variante 1: Hierzu muß im Grub-Menü beim Booten die Parameterübergabe für den Kernel geändert werden.

Variante 2: Mit einer sogenannten Rettungs-CD oder auch einer Live-CD startet man ein eigenständiges Linuxsystem, von dem aus man das System auf der Platte manipulieren kann.

Hinweis: Manch einer wird jetzt denken: Das ist aber eine gewaltige Sicherheitslücke! Nein, das ist eine wichtige Funktion, falls man mal sein Passwort vergessen hat. Sichern muss man seinen Rechner gegen physikalischen Zugriff. Wer den Rechner hat, kann auch die Platte ausbauen und in einem anderen Rechner lesen.


Linux File System Check

Wenn bei einem Rechner die Spannung ausfällt bzw. dieser nicht richtig runter gefahren wird, kann es zu einem Filesystem-Error kommen, den man nur via Console beseitigen kann. Zum Beispiel bei embedded Rechner.

Dies ist schlecht, wenn der Rechner keine Console hat oder nur via Remote gewartet werden kann.

Um den File System Check beim Starten ohne Interaktion bzw. mit „Auto repair“ durchzuführen, kann man in der Datei "/etc/default/rcS" die Variable FSCKFIX auf yes schalten.

Hinweis: Hilft natürlich nicht wenn notwendige Files defekt oder verschwunden sind.


Shell Tasten-Tipps


Taste(n) Funktion

Alt+. Parameter des letzten Befehls einfügen
Alt+d Wort vor dem Cursor löschen
Alt+f Ein Wort nach vorne überspringen
Alt+b Ein Wort rückwärts überspringen
Ctl+a An den Zeilenanfang springen
Ctl+e Ans Ende springen


Scrollen im Screen

Wenn man unseren Klaus fragt, kann man in der ~/.screenrc das folgende eingeben „termcapinfo xterm ti@:te@“, dann geht auch Shift+Cursor. :-)

Im Screen-Standard tippt man zum Scrollen erst „C-a“ (Control+a) und dann ESC. Dann kann man mit mit PAGE/Cursor UP/DOWN im screen scrollen.

C-a S splits into two regions
C-a tab switches input focus to the next region
C-a X kills the current region
C-a :resize numlines resizes the current region to numlines lines.

Custom key bindings for scrolling

If you don't want to hit C-a ESC PGUP everytime to page up, you can create keyboard shortcuts. I use CTRL+K to scroll up one line and META+K to scroll up one page (I know these are kind of weird key combinations). To create these shortcuts, I put the following in my .screenrc.

bindkey „^[k“ eval „copy“ „stuff ^b“ # enter copy mode and move up one page
bindkey „^k“ eval „copy“ „stuff k“ # enter copy mode and move up one line
bindkey -m „^[k“ stuff ^b # move up one page
bindkey -m „^k“ stuff k # move up one line

Now, when I'm in screen and press M-k, screen enters copy mode and scrolls up one page. Likewise, C-k enters copy mode and scrolls up one line. As before, to exit copy mode, hit ESC.

How to copy and paste in screen (added 2010-02-03)

Enter scrollback mode using C-a [ or C-a ESC
Press the space bar to begin selecting text.
Move the cursor using h,j,k,l,C-b,C-f or arrow keys/PGUP/PGDOWN
Hit the space bar again to copy the selected text.
Hit ESC to exit scrollback mode.
Press C-a ] to paste.

How to open 2 terminals connected to the same session (Multi display mode) (updated 2012-04-05)

The -x option can be used to attach multiple terminals to the same screen session. Pretty cool! Open a terminal and create a screen session named „local“

$ screen -S local
# Now start a second terminal, then attach it to the existing session:
$ screen -x local


Bedienung des vi Editors

Eine kurze Befehlsübersicht:

Speichern & Schließen:

:q vi beenden
:q! vi beenden, nicht gespeicherte Änderungen gehen verloren
:w Datei speichern
:w! Speichern der Datei erzwingen
:wq (oder) ZZ Datei speichern und vi beenden
<Strg> + z Shell starten; vi wird in Hintergrund geschoben; Rückkehr durch Eingabe von "fg"

Navigation:

G an das Ende des Dokuments springen
1G in die erste Zeile des Dokuments springen
0 (null) an den Anfang der Zeile springen
^ an den Anfang der Zeile springen
$ an das Ende der Zeile springen
b an den Anfang des letzten Wortes springen
w an den Anfang des nächsten Wortes springen
e an das Ende des nächsten Wortes springen
h ein Zeichen nach links
j ein Zeile nach unten
k eine Zeile nach oben
l ein Zeichen nach rechts
<Strg> + u nach oben blättern
<Strg> + d nach unten blättern
L in die letzte Zeile der Bildschirmausgabe springen

Löschen:

x Zeichen unter Cursor-Position löschen
r Zeichen unter Cursor-Position ersetzen
s Zeichen unter Cursor-Position ersetzen und in den Bearbeitungsmodus wechseln
dd aktuelle Zeile ausschneiden (in Zwischenablage kopieren & löschen)
[ZAHL]dd die nächsten [ZAHL] Zeilen ausschneiden
C Zeile ab aktueller Cursor-Position löschen
V Zeile markieren
v Zeichen markieren
y Markierte Zeichen in Zwischenablage kopieren
d markierte Textstellen löschen
cw aktuelles Wort ersetzen
dw aktuelles Wort löschen (incl. angehängtem Leerzeichen)
de aktuelles Wort löschen (über Zeile hinaus)
dl Zeichen unter Cursor-Position löschen
dj zwei Zeilen löschen (Cursor-Position ist 1. Zeile)
dk zwei Zeilen löschen (Cursor-Position ist 2. Zeile)
:5,10d Zeilen 5 bis 10 löschen
:.,$d alle Zeilen löschen ("." = Anfang der Datei, "$" = Ende der Datei)

Einfügen:

p Zwischenablage nach aktueller Zeile einfügen
P Zwischenablage vor aktueller Zeile einfügen
R Text ab Cursor-Position überschreiben
J aktuelle Zeile an das Ende der vorhergehenden Zeile anhängen
o eine Zeile nach der aktuellen einfügen und in den Bearbeitungsmodus wechseln
O eine Zeile vor der aktuellen einfügen und in den Bearbeitungsmodus wechseln
a ein Leerzeichen einfügen und in den Bearbeitungsmodus wechseln
A zum Ende der Zeile springen und in den Bearbeitungsmodus wechseln
i in den Bearbeitungsmodus wechseln
I an den Anfang der Zeile springen und in den Bearbeitungsmodus wechseln

Suchen & Ersetzen:

/Linux nach "Linux" suchen
/ letzte Suche wiederholen
n letzte Suche wiederholen
:s/Suchen_nach/Ersetzen_durch/
in aktueller Zeile suchen & ersetzen
:1,7s/Suchen_nach/Ersetzen_durch/
in Zeile 1 bis 7 suchen & ersetzen
:%s/Suchen_nach/Ersetzen_durch/
in allen Zeilen suchen & ersetzen

Sonstiges:

u UNDO der letzten Befehle
U alle Änderungen der aktuellen Zeile rückgängig machen


Alle Dateinamen mit Kleinbuchstaben umwandeln

Hier ein kleines Script durch das alle Dateinamen auf Kleinbuchstaben (lower case) umgestellt werden.

#! /bin/sh
for filename in `ls *`
do
  echo "Filename:"$filename" wird geaendert"
  mv $filename  `echo $filename | tr "A-Z" "a-z"`
done

So gehts auch in einer Zeile als Befehl in einer Shell

for f in `ls *`;do mv $f `echo $f | tr "A-Z" "a-z"`;done


Grub auf Serial-Port umleiten

Auszug grub.conf bei einem CentOS:

#boot=/dev/hdc
default=0
timeout=10
#splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=38400
terminal serial
title CentOS (2.6.18-348.12.1.el5)
      root (hd0,0)
      kernel /vmlinuz-2.6.18-348.12.1.el5 ro root=/dev/VolGroup01/LogVol00 connsole=ttyS0,38400

      initrd /initrd-2.6.18-348.12.1.el5.img


Scripte direkt via Desktop ausführen

Hallo, hier mal wieder was zum ausrasten, unter Unity bzw. Ubuntu kann man keine Skripte mehr mit doppelklick ausführen obwohl das exec. Bit gesetzt ist, is ja logisch oder? Wer hat sich diesen Müll nur wieder ausgedacht.

gsettings set org.gnome.nautilus.preferences executable-text-activation launch (oder ask)

Damit wird das script gleich gestartet oder vorher nochmal gefragt.


Zuletzt geänderte Dateien suchen

Liste alle Datein auf, die in den letzten 5 Minuten im aktuellen Verzeichnis geändert wurden.

find . -cmin -5

Will man das gesamte Dateinsystem prüfen ohne die System Verzeichnisse, so geht das so:

find / \( -path /proc -o -path /dev -o -path /sys \) -prune -o -cmin -5 


Mit touch unter Linux Dateidatum ändern

Manchmal muss man unter Linux den Datums- und Zeitstempel einer Datei auf den aktuellen Wert ändern. Das geht am einfachsten mit touch:

touch –time=modify dateiname

Dadurch bekommt die Datei das aktuelle Datum und die aktuelle Zeit. Will man nicht das aktuelle Datum (Zeit), kann man auch beliebige Werte manuell eingeben:

touch -t MMDDhhmm[[CC]YY][.ss] dateiname

Die Werte in den eckigen Klammern sind optional. Beispiel:

touch -t 10261230 beispiel.txt

→ die Datei beispiel.txt hat jetzt das Datum 26.10. mit aktuellem Jahr und die Zeit 12:30 Uhr.


Festplatten Verbrauch prüfen mit ncdu

Mit dem Tool ncdu kann man den Festplatten Verbrauch prüfen.


Festplatten Überprüfung/Check erzwingen beim reboot

Eigentlich ganz einfach, ins Stammverzeichnis der Partition die geprüft werden soll einfach die Datei ablegen ohne Inhalt.

touch /forcefsck

Wichtig! Die Partition muss in der FSTAB stehen damit das ganze funktioniert. Linux prüft im Endeffekt auf diese Datei während es die FSTAB parsed und macht dann den fsck noch vor dem Mount.


In der Console Filesystem farbig anzeigen

Will man in der Console beim ls Befehl z.B. die ausführbare Dateien oder Ordner in einer anderen Farbe sehen, kann man in die Datei /etc/bash.bashrc die folgenden drei Zeilen hinzufügen.

PS1='\[\033[01;31m\]\u\[\033[01;33m\]@\[\033[01;36m\]\h \[\033[01;33m\]\w \[\033[01;35m\]\$ \[\033[00m\]'
alias lsa="ls -ahl"
alias ls="ls --color"