Diese Seite ist optimiert für eine Auflösung von min. 1280x1024.

facebook   google   twitter   digg   email  





Linux-Befehle



Hier eine Auflistung und Erläuterungen der Befehle, mit denen alles beginnt

ls - Verzeichnisinhalte betrachten

Ein "ls" gibt ein Verzeichnislisting aus. Die wichtigsten Optionen hierbei sind:
-h - Human readable (Grössen in MB, GB etc. anstatt in byte
-a - zeigt versteckte Dateien an
-l - line - gibt jede Datei/Ordner in einer eigenen Zeile aus
-r - reverse - sortiert Rückwär
-S - Size - sortiert nach Grösse
-n - numeric - die UIDs/GIDs anstatt der Namen aus /etc/passwd anzeigen.
-c - ctime - Sortiert nach Zeit der letzten Veränderung der Datei-Status-Informationen (mit -l: ctime anzeigen und nach Namen sortieren)
Erklärung einer (gekürzten) Ausgabe (ich will nicht mein komplettes Home-Verzeichnis hier posten)
pux@onkelpeter:~$ ls -al
insgesamt 1969768
drwxr-xr-x 67 pux pux       4096 14. Apr 11:23 .
drwxr-xr-x  5 root     root           4096 24. Mär 18:10 ..
-rw-------  1 pux pux      33056 14. Apr 09:57 .bash_history
-rw-r--r--  1 pux pux        220 10. Sep 2008  .bash_logout
lrwxrwxrwx  1 pux pux          7 24. Mär 18:11 .bash_profile -> .bashrc
-rw-r--r--  1 pux pux       3033 25. Mär 11:21 .bashrc
drwxr-xr-x  5 pux pux       4096  8. Apr 08:01 bin
-rw-r--r--  1 pux pux     128216 14. Jan 15:38 logo.jpg
drwxr-xr-x  2 pux pux       4096 17. Okt 11:03 logs
[...]
drwx------  4 pux pux       4096 10. Sep 2008  .mozilla
-rw-r--r--  1 pux pux      13793 14. Apr 11:05 .xsession-errors
pux@onkelpeter:~$ 
Die Ausgabe ist in 6 Bereiche gegliedert (von links nach Rechts):
Berechtigungen (siehe chmod)
Verweise
Eigentümer/Gruppenzugehörigkeit (siehe chown)
Grösse
Datum
Datei-/Ordnernamen
Verweise geben an, wie viele Dateien in dem Ordner Enthalten sind. Bei Dateien kann nichts enthalten sein, weswegen hier immer eine 1 steht. Grösse gibt die eigene Grösse an (also bei Ordnern wird hier nicht die Grösse des Inhalts mit angegeben!). Datum gibt per default die Änderungszeit aus (Zeitpunkt der letzten Änderung). Datei-/Ordnernamen sollte dabei selbstklärend sein.

cd - Verzeichnisse wechseln

Mit "cd" kann man das aktuelle Arbeitsverzeichnis wechseln. Man kann dazu den relativen oder absoluten Pfad angeben:
pux@onkelpeter:~$ cd Desktop/
pux@onkelpeter:~/Desktop$ 
bzw.:
pux@onkelpeter:~$ cd /home/pux/Desktop/
pux@onkelpeter:~/Desktop$ 
Ein paar Kniffe, die man kennen sollte:
pux@onkelpeter:/var/log$ cd ~
pux@onkelpeter:~$ 
pux@onkelpeter:~$ cd ~root
pux@onkelpeter:/root$ 
Mit "~" kommt man in sein eigenes Heimatverzeichnis. Mit "~usernamen" in das Heimatverzeichnis des entsprechenden Users.
pux@onkelpeter:/var/log$ echo $OLDPWD
/home/pux
pux@onkelpeter:/var/log$ cd -
/home/pux
pux@onkelpeter:~$ 
Mit "cd -" kommt man ins letzte Verzeichnis, in dem man war (wird in $OLDPWD gespeichert).
pux@onkelpeter:/$ cd /home/*/onkelpeter
pux@onkelpeter:~/onkelpeter$ 
Man kann auch Wildcards nutzen. Besonders gut bei Aufrufen dieser Art, wenn man den Ordner nicht kennt:
root@server23:/home# cd */test
root@server23:/home/pux/test# 
chown/chgrp - Eigentümer/Gruppe einer Datei/eines Ordners ändern
Mittels chown/chgrp kann man den Eigentümer/die Gruppe einer Datei/eines Ordners ändern.
root@server23:/home/pux# ls -al
total 28
drwxr-xr-x    6 root       root         4096 Apr 15 01:04 .
drwxr-xr-x  115 root       root         4096 Nov  6 03:10 ..
drwx---r-t    4 pux        ftpusers       60 Mar 18  2007 htdocs
root@server23:/home/pux# 
Der Ordner htdocs z.B. gehört im obigen Beispiel dem Benutzer pux und der Gruppe pux. Ändern kann man den Eigentümer mittels "chown neuer-user htdocs". Die Gruppe kann man mit "chgrp neue-gruppe Datei" ändern. Will man beides ändern, kann das "chown: chown user:gruppe Datei". Schreibt man nur "chown user: Datei", so wird die Gruppe, in der der angegebene User Mitglied ist als Gruppe gesetzt. Wichtigste Option ist dabei "-R", was Änderungen rekursiv (auf Unterordner und darin enthaltene Dateien) anwendet.

chmod - Berechtigungen einer Datei/eines Ordners ändern

Mit chmod kann man die Rechte einer Datei ändern. chmod kennt dabei numerische und nicht-numerische Argumente. Eine Datei kann 3 Zustände plus "Sonder-Zustände" besitzen. Ich gehe zuerst auf die gebräuchlichen "normalen" Zustände ein. Eine Datei kann zum lesen, schreiben oder ausführen freigegeben sein. Dabei unterscheidet man nochmals 3 Arten: Rechte für den Besitze (Eigenümer) der Datei, die Gruppe (Mitglieder der Gruppe) und alle anderen (der grosse Rest :-)).
Bei Dateilistings sieht man immer einen kryptisch wirkenden Zeichensalat wie hier z.B. "drwxrwx---":
drwxrwx---    2 root       root            6 May 17  2006 Ordner
Von links nach rechts gelesen gibt diese Codierung folgendes an:
Mögliche Werte	Dateityp	Eigentümer 	Gruppe			Alle anderen	  	  
Bedeutung				read	write	execute	read    write   execute	read    write   execute
Gesetzt	 		*1)		r	w	x	r	w	x	r	w	x	
Nicht gesetzt	 	-	 	-	-	-	-	-	-	-	-	-
Beschreibung:
Nicht gesetzt bei Dateityp bedeutet, dass es sich um eine "normale" Datei handelt.
*1) Als Dateityp kommen folgende Werte in Betracht:
d - Directory (Verzeichnis)
l - link (Verknüpfung mit einer anderen Datei/Ordner - Softlink)
b - blockdevice (Festplatten z.B.)
c - charakterdevice (Konsolen z.B.)
p - pipe (Fifo-Datei - first in, first out)
s - socket (z.B. MySQL benutzt Sockets)
f - file (eine normale Datei) - taucht aber beim Dateilisting als "-" auf
Mit chmod kann man nun die (nicht) gesetzte Werte numerisch ändern. Die Syntax lautet "chmod Wert Datei". Die verfügbaren Werte kann man der folgenden Tabelle entnehmen:
Beschreibung	vierter Wert (Spezial-Werte)	dritter Wert	zweiter Wert	erster Wert
nichts setzen	0	 			0	 	0	 	0
lesen	 	1 (Sticky-Bit)	 		1	 	1	 	1
schreiben	2 (Group-ID-Bit)	 	2	 	2	 	2
ausführen	 4 User-ID-Bit)			 4	 	4	 	4
Diese Werte kann man auch kombinieren durch addieren um einem Eigentümer z.B. lese- und schreibrechte zu geben:
Beschreibung				vierter Wert (Spezial-Werte)			dritter Wert	zweiter Wert	erster Wert
nichts setzen				0	 					0	 	0	 	0
lesen	 				1 (Sticky-Bit)	 				1	 	1	 	1
schreiben				2 (Group-ID-Bit)	 			2	 	2	 	2
lesen und schreiben			3 (Sticky und Group-ID-Bit)			3	 	3	 	3
ausführen				4 (U-ID-Bit)	 				4	 	4	 	4
lesen und ausführen			5 (Sticky-Bit und U-ID-Bit)			5	 	5	 	5
schreiben und ausführen		6 (Group-ID-Bit und U-ID-Bit)			6		6	 	6
lesen und schreiben und ausführen	 7 (U-ID-Bit und Group-ID-Bit und Sticky-Bit)	 7		 7	 	7
Wichtig ist, dass chmod von rechts nach links liest. Ein "chmod 755 Datei" ergibt "-rwxr-xr-x", ein chmod 7 Datei ergibt "-------rwx".
Beispiele dazu was die Special-Bits angeht:
pux@onkelpeter:~/testordner/sv$ for i in `seq 1 7`; do echo "chmod $i000 Datei"; chmod $i\000 Datei; ls -l; done;
chmod  Datei
insgesamt 0
---------T 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
------S--- 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
------S--T 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
---S------ 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
---S-----T 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
---S--S--- 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
---S--S--T 1 pux pux 0 15. Apr 12:46 Datei
pux@onkelpeter:~/testordner/sv$ 
Ist nun noch ein normales Bit an der gleichen Stelle wie ein "Special"-Bit gesetzt, so wird der Buchstabe klein geschrieben. Beispiel:
pux@onkelpeter:~/testordner/sv$ for i in `seq 1 7`; do echo "chmod $i777 Datei"; chmod $i\777 Datei; ls -l; done;
chmod  Datei
insgesamt 0
-rwxrwxrwt 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
-rwxrwsrwx 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
-rwxrwsrwt 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
-rwsrwxrwx 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
-rwsrwxrwt 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
-rwsrwsrwx 1 pux pux 0 15. Apr 12:46 Datei
chmod  Datei
insgesamt 0
-rwsrwsrwt 1 pux pux 0 15. Apr 12:46 Datei
pux@onkelpeter:~/testordner/sv$ 
Was machen diese "Special"-Bits?
U-ID-Bit: Führt Dateien mit der Berechtigung des Eigentümers der Datei aus anstatt des eingeloggten Benutzers
GID-Bit: Führt Dateien mit der Berechtigung der Gruppe der Datei aus anstatt der des eingeloggten Benutzers
Sticky-Bit: Save-Text-Mode: Bei Verzeichnissen können nur die Inhaber einer Datei diese selbst löschen, nicht aber die Dateien anderer Benutzer (Beispiel: /tmp-Ordner). Bei Dateien werden diese nach der Ausführung im Arbeitsspeicher gehalten, was heute aber kaum noch Verwendung findet.

mount und /etc/fstab bzw. /etc/mtab - Ein-/Aushängen von Verzeichnissen sowie anzeigen von gemounteten Dateisystemen

Mittels mount kann man Ordner, ja sogar Dateien (CD-Images z.B.) in einem Ordner bereitstellen. Ohne eine Option zeigt mount was gerade wohin gemounted ist:
root@onkelpeter:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda6 on /home type ext3 (rw)
/dev/sda3 on /usr type ext3 (rw)
/dev/sda5 on /var type ext3 (rw)
root@onkelpeter:~# 
Dazu gibt man an was gemounted werden soll und wohin es gemounted werden soll:
root@onkelpeter:~# mount /dev/sdb1 /mnt/
root@onkelpeter:~# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda6 on /home type ext3 (rw)
/dev/sda3 on /usr type ext3 (rw)
/dev/sda5 on /var type ext3 (rw)
/dev/sdb1 on /mnt type ext3 (rw)
root@onkelpeter:~# 
Eine wichtige option ist noch die Option -a. Diese mounted nicht "alles" (wie oft angenommen) sondern alles, was in der Datei /etc/fstab hinterlegt ist. Ein Ausschnitt aus dieser Datei kann so aussehen:
pux@onkelpeter:~$ cat /etc/fstab 
# /etc/fstab: static file system information.
#
#                
proc            /proc           proc    defaults        0       0
/dev/sda1       /               ext3    errors=remount-ro 0       1
/dev/sda6       /home           ext3    defaults        0       2
/dev/sda3       /usr            ext3    defaults        0       2
/dev/sda5       /var            ext3    defaults        0       2
/dev/sda2       none            swap    sw              0       0
/dev/sdb2       none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
pux@onkelpeter:~$ 
Alles was dort hinterlegt ist, wird beim Starten des Systems an die entsprechenden Punkte gemounted. In der Datei /etc/mtab hingegen steht, was gerade wohin gemounted ist. Da muss man aber eigentlich nicht nachschauen, da man mittels dem Befehl "mount" dies auch sieht:
pux@onkelpeter:~$ cat /etc/mtab 
/dev/sda1 / ext3 rw,errors=remount-ro 0 0
tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0
sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0
procbususb /proc/bus/usb usbfs rw 0 0
udev /dev tmpfs rw,mode=0755 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
/dev/sda6 /home ext3 rw 0 0
/dev/sda3 /usr ext3 rw 0 0
/dev/sda5 /var ext3 rw 0 0
/dev/sdb1 /mnt ext3 rw 0 0
pux@onkelpeter:~$ 
Aber es kann vorkommen, dass etwas als gemounted gelistet wird, es aber in wirklichkeit nicht ist. Dann kann man hier nachschauen.

lsattr/chattr - Attribute anzeigen/ändern

Man kann unter Linux auf dem ext2/3-Dateisystem (xfs unterstützt dies nicht!) den Dateien/Verzeichnissen Attribute mitgeben. Ob ein Attribut gesetzt ist, sieht man mit lsattr, Attribute setzen/entfernen kann man hingegen mit chattr. Dabei gilt: Ein "+" fügt ein Attribut hinzu, ein "-" entfernt es. Das von uns am meisten benutzte ist wohl das "i"-Attribut (immunisieren - IMMUTABLE). Wenn dieses Flag gesetzt ist, kann man Dateien nicht mehr verändern oder löschen. Wir benutzen das in der Regel bei gehackten Kunden um ihre Scripte vor Veränderung zu schützen (auf den server-Servern gibt es das Script "tacker", welches ein chmod 000 $1 && chown root: $1 && chattr +i $1 macht und somit gehackte Scripte unausführbar macht). Es gibt aber noch einige Attribute mehr, von denen man bei 1&1 allerdings kaum welchen begegnet (man chattr für mehr davon ;-)). Ein Beispiel zu dem "i"-Flag:
root@onkelpeter:~/testordner# lsattr 
------------------- ./Datei2
------------------- ./Datei1
root@onkelpeter:~/testordner# touch date2
root@onkelpeter:~/testordner# lsattr 
------------------- ./Datei2
------------------- ./Datei1
root@onkelpeter:~/testordner# chattr +i Datei1 
root@onkelpeter:~/testordner# lsattr 
------------------- ./Datei2
----i-------------- ./Datei1
root@onkelpeter:~/testordner# rm Datei1 
rm: Entfernen von „Datei1“ nicht möglich: Die Operation ist nicht erlaubt
root@onkelpeter:~/testordner# chattr -i Datei1 
root@onkelpeter:~/testordner# lsattr 
------------------- ./Datei2
------------------- ./Datei1
root@onkelpeter:~/testordner# rm Datei1 
root@onkelpeter:~/testordner# l
insgesamt 8,0K
drwxr-xr-x  2 root root 4,0K 17. Apr 09:18 ./
drwxr-xr-x 15 root root 4,0K 17. Apr 09:17 ../
-rw-r--r--  1 root root    0 17. Apr 09:17 Datei2
root@onkelpeter:~/testordner# 
Allgemeines zum partitionieren
Fesplatten können 2 Arten von Partitionen enthalten: primäre Partitionen und erweiterte Partitionen welche wiederrum logische Laufwerke enthalten können. Eine Festplatte kann bis zu 4 (und nein, es gehen wirklich nicht mehr) primäre oder erweiterte Partitionen enthalten. Braucht man mehr als 4 Partitionen, so muss man eine erweiterte Partition (quasi als Container) erstellen und in dieser erweiterten Partition kann man dann logische Laufwerke anlegen soviele man braucht. Die erweiterte Partition an sich lässt sich nicht mounten und beinhaltet auch keine Daten an sich, sondern nur die darin gebauten logischen Laufwerke:
root@onkelpeter:~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00f1c7d0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        2432    19535008+  83  Linux
/dev/sda2            2433        3405     7815622+  82  Linux swap / Solaris
/dev/sda3            3406        5837    19535040   83  Linux
/dev/sda4            5838       60801   441498330    5  Extended
/dev/sda5            5838        8269    19535008+  83  Linux
/dev/sda6            8270       60801   421963258+  83  Linux
root@onkelpeter:~# mount /dev/sda4 /mnt/
mount: you must specify the filesystem type
root@onkelpeter:~# 

fdisk/sfdisk - Festplatten partitionieren

Wenn man eine Festplatte zu partitionieren hat benutzt man in der Regel fdisk. fdisk kann Partitionen bis zu 2 TB anlegen. Für alles was darüber geht, benutzt man parted. fdisk ist recht einfach zu benutzen und zu verstehen. Man braucht eigentlich nur eine Option: "-l" (zum Anzeigen) und ggf. eine bestimmte Festplatte (ohne Angabe der Festplatte listet fdisk alle eingebauten Festplatten auf):
root@onkelpeter:~# fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00f1c7d0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        2432    19535008+  83  Linux
/dev/sda2            2433        3405     7815622+  82  Linux swap / Solaris
/dev/sda3            3406        5837    19535040   83  Linux
/dev/sda4            5838       60801   441498330    5  Extended
/dev/sda5            5838        8269    19535008+  83  Linux
/dev/sda6            8270       60801   421963258+  83  Linux
root@onkelpeter:~# 
Für alles andere ruft man fdisk direkt auf. Ein Beispiel:
root@onkelpeter:~# fdisk /dev/sdc

The number of cylinders for this disk is set to 48641.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): p

Disk /dev/sdc: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7c4671be

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       48641   390708801   83  Linux

Command (m for help): d
Selected partition 1

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-48641, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-48641, default 48641): +60G

Command (m for help): p

Disk /dev/sdc: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7c4671be

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        7296    58605088+  83  Linux

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (7297-48641, default 7297): 
Using default value 7297
Last cylinder or +size or +sizeM or +sizeK (7297-48641, default 48641): +500M

Command (m for help): p

Disk /dev/sdc: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7c4671be

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        7296    58605088+  83  Linux
/dev/sdc2            7297        7358      498015   83  Linux

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): L

 0  Empty           1e  Hidden W95 FAT1 80  Old Minix       be  Solaris boot   
 1  FAT12           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 5  Extended        41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 6  FAT16           42  SFS             86  NTFS volume set da  Non-FS data    
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e1  DOS access     
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor      
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT        
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fd  Linux raid auto
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fe  LANstep        
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid ff  BBT            
1c  Hidden W95 FAT3 75  PC/IX          
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sdc: 400.0 GB, 400088457216 bytes
255 heads, 63 sectors/track, 48641 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x7c4671be

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        7296    58605088+  83  Linux
/dev/sdc2            7297        7358      498015   82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
root@onkelpeter:~# 
Wenn man Installationsscripte schreibt und die Festplatte automatisch partitionieren will benutzt man sfdisk. Ein Beispiel dazu:
root@onkelpeter:~# sfdisk -d /dev/sda > sda.out
root@onkelpeter:~# cat sda.out 
# partition table of /dev/sda
unit: sectors

/dev/sda1 : start=       63, size= 39070017, Id=83
/dev/sda2 : start= 39070080, size= 15631245, Id=82
/dev/sda3 : start= 54701325, size= 39070080, Id=83
/dev/sda4 : start= 93771405, size=882996660, Id= 5
/dev/sda5 : start= 93771468, size= 39070017, Id=83
/dev/sda6 : start=132841548, size=843926517, Id=83
root@onkelpeter:~# 

Einen Dump dann zurückspielen tut man so hier (nur die Syntax dazu, ich brauche meine Daten noch ;-)):
sfdisk /dev/sda < sda.out
parted - Partitionen grösser als 2 TB erstellen
Kommt bei einem "fdisk -l" so etwas hier raus:
root@server810:~# fdisk -l /dev/sdb 
You must set cylinders.
You can do this from the extra functions menu.

Disk /dev/sdb: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267350  2147483647+  ee  EFI GPT
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(0, 0, 1) logical=(0, 0, 2)
Partition 1 has different physical/logical endings:
     phys=(1023, 254, 63) logical=(267349, 89, 4)
root@server810:~# 
Dann wurde die Platte sehr wahrscheinlich mit "parted" angelegt und ist grösser als 2 TB.

mkfs/mkswap - ein Dateisystem/swap erstellen

Dateisysteme unter Linux erstellt man mittels mkfs. Auf den meisten Systemen sind die optionen direkt als Befehl verlinkt. Z.B. gibt es auf meinem System neben mkfs noch mkfs.bfs, mkfs.cramfs, mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.ext4dev, mkfs.minix. Um ein ext3-Dateisystem zu erstellen benutzt man also etweder mkfs.ext3 oder mkfs -t ext3 (man mkfs für mehr Optionen). Swap erstellt man ganz einfach mittels mkswap.

swapon/swapoff - Swap-Space in Betrieb nehmen

Um eine Swap-Partition (vergleichbar mit einer AuslagerungsDatei unter Windows) in Betrieb zu nehmen benutzt man das Kommando swapon, zum deaktivieren swapoff. Zum anzeigen der benutzten Swap-Partitionen kann man swapon -s oder swapoff -s benutzen (beides gibt das gleiche aus). Um alle verfügbaren Swap-Partitionen zu benutzen gibt man swapon -a ein. Ein Beispiel dazu:
root@onkelpeter:/sbin# swapon -s
Filename            Type      Size   Used   Priority
/dev/sda2                               partition   7815612   2384   -1
/dev/sdb2                               partition   3911816   0   -2
root@onkelpeter:/sbin# swapoff /dev/sdb2
root@onkelpeter:/sbin# swapon -s
Filename            Type      Size   Used   Priority
/dev/sda2                               partition   7815612   2384   -1
root@onkelpeter:/sbin# swapoff /dev/sda2
root@onkelpeter:/sbin# swapon -s
Filename            Type      Size   Used   Priority
root@onkelpeter:/sbin# swapon -a
root@onkelpeter:/sbin# swapon -s
Filename            Type      Size   Used   Priority
/dev/sda2                               partition   7815612   0   -3
/dev/sdb2                               partition   3911816   0   -4
root@onkelpeter:/sbin# swapoff /dev/sda2
root@onkelpeter:/sbin# swapon -s
Filename            Type      Size   Used   Priority
/dev/sdb2                               partition   3911816   0   -4
root@onkelpeter:/sbin# swapon /dev/sda2
root@onkelpeter:/sbin# swapon -s
Filename            Type      Size   Used   Priority
/dev/sda2                               partition   7815612   0   -5
/dev/sdb2                               partition   3911816   0   -4
root@onkelpeter:/sbin# 

tune2fs - Dateisysteme (ext2/3) aufbohren

Um vorgegebene Werte eines ext2/3-Dateisystems ändern zu können erfand man tune2fs. Um zu sehen, was man damit alles ändern kann, gibt es hier erstmal eine Übersicht:
root@onkelpeter:~# tune2fs -l /dev/sda1
tune2fs 1.41.3 (12-Oct-2008)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          c5c34f35-cb24-4efd-8d51-9f6e514d982a
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              1221600
Block count:              4883752
Reserved block count:     244187
Free blocks:              4678617
Free inodes:              1213905
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1022
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8144
Inode blocks per group:   509
Filesystem created:       Tue Mar 24 17:40:33 2009
Last mount time:          Tue Apr 14 09:57:41 2009
Last write time:          Tue Apr 14 09:57:41 2009
Mount count:              6
Maximum mount count:      37
Last checked:             Tue Mar 24 17:40:33 2009
Check interval:           15552000 (6 months)
Next check after:         Sun Sep 20 18:40:33 2009
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:             256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       895852
Default directory hash:   half_md4
Directory Hash Seed:      72f8b897-2e51-4dfe-9615-05c1301c2ec9
Journal backup:           inode blocks
root@onkelpeter:~# 
Interessant sind hauptsächlich 5 Werte, nämlich wann eine Dateisystemüberprüfung fällig sein wird. Dies ist abhängig davon, wie oft ein Dateisystem gemounted wurde (Mount count), wie oft es gemounted werden darf ohne einen Check (Maximum mount count), wann der letzte Check war (Last checked) bzw. wann der nächste Check sein wird (Next check after) sowie der Zyklus, in dem ein Check erfolgen soll (Check interval). Alle diese Werte kann tune2fs ändern. Um diese checks komplett auszuschalten setzt man übrigens den Intervall sowie den Maximum mount count einfach auf "0". Die Optionen hierzu lauten:
-c max-mount-counts
-C mount-count
-i interval-between-checks[d|m|w]
-T time-last-checked
Mehr dazu in der man-page.

fsck - ext2/ext3-Dateisysteme überprüfen

Um ein ext2/3-Dateisystem auf Fehler zu prüfen verwendet man fsck. Wichtig ist dabei, dass die Partition nicht gemounted sein darf! Die Optionen der Stunde sind hier y (sonst muss man für jeden zu behebenden Fehler Enter drücken), C um eine Fortschrittsanzeige zu sehen (compress-bar) und f (force) damit ein "gründlicher" fsck durchgeführt wird:
root@onkelpeter:~# fsck -yCf /dev/sdc1
fsck 1.41.3 (12-Oct-2008)
e2fsck 1.41.3 (12-Oct-2008)
Durchgang 1: Prüfe Inodes, Blocks, und Grössen
/dev/sdc1: |===================                                     | 34.0%   
[...nach einiger Zeit kommt dann das hier...]
Durchgang 3: Prüfe Verzeichnis Verknüpfungen                                   
/lost+found nicht gefunden.  Erstelle? ja

Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe Gruppe Zusammenfassung                                  
                                                                               
/dev/sdc1: ***** DATEISYSTEM WURDE VERÄNDERT *****
/dev/sdc1: 71/24420352 Dateien (12.7% nicht zusammenhängend), 35264647/97677200 Blöcke
root@onkelpeter:~#
Ein fsck für eine grosse Server-Partition kann übrigens schon mal an die 2 Stunden dauern (je nach Grösse und vorhandenen Daten).

xfs_repair - ein xfs-Dateisystem überprüfen

Ein xfs_repair geht wesentlich schneller als ein fsck. Optionen braucht man dazu eigentlich keine.
onkelpeter:~# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - agno = 6
        - agno = 7
        - agno = 8
        - agno = 9
        - agno = 10
        - agno = 11
        - agno = 12
        - agno = 13
        - agno = 14
        - agno = 15
        - agno = 16
        - agno = 17
        - agno = 18
        - agno = 19
        - agno = 20
        - agno = 21
        - agno = 22
        - agno = 23
        - agno = 24
        - agno = 25
        - agno = 26
        - agno = 27
        - agno = 28
        - agno = 29
        - agno = 30
        - agno = 31
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - clear lost+found (if it exists) ...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - agno = 6
        - agno = 7
        - agno = 8
        - agno = 9
        - agno = 10
        - agno = 11
        - agno = 12
        - agno = 13
        - agno = 14
        - agno = 15
        - agno = 16
        - agno = 17
        - agno = 18
        - agno = 19
        - agno = 20
        - agno = 21
        - agno = 22
        - agno = 23
        - agno = 24
        - agno = 25
        - agno = 26
        - agno = 27
        - agno = 28
        - agno = 29
        - agno = 30
        - agno = 31
Phase 5 - rebuild AG headers and trees...
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - ensuring existence of lost+found directory
        - traversing filesystem starting at / ... 
        - traversal finished ... 
        - traversing all unattached subtrees ... 
        - traversals finished ... 
        - moving disconnected inodes to lost+found ... 
Phase 7 - verify and correct link counts...
done
onkelpeter:~# 
Auch hier gilt: Das Dateisystem darf dazu nicht gemounted sein!


Befehle, die man für die tägliche Arbeit braucht


tr - Ausgabe manipulieren

Um in einem Ausgabestring buchstaben zu ändern/löschen benutzt man tr. Die Syntax ist recht simpel: tr . Achtung: das geht nur mit einzelnen Zeichen oder regulären Ausdrücken!
pux@onkelpeter:~$ tr x y
ersetze x durch y in einem text
ersetze y durch y in einem teyt
pux@onkelpeter:~$ tr -d x
loesche alle x aus einem text
loesche alle  aus einem tet
pux@onkelpeter:~$ 

awk - Scriptsprache

Mittels awk kann man Ausgaben von Befehlen manipulieren. awk nimmt dabei jede Zeichenkette als Argument, getrennt durch Whitespaces. Man kann auch angeben, was ein Feldtrenner sein soll (Option -F). Brauchbar ist das z.B. da man mit "cut" nach Leerzeichen trennen kann, aber nicht nach Whitespaces und wenn ein Befehl z.B. mit tab trennt, kommt man mit cut nicht sehr weit. Ein Beispiel dazu:
pux@onkelpeter:~$ pinky | cut -d\  -f3

pux
pux
pux
pux
pux@onkelpeter:~$ pinky | cut -d\  -f4





pux@onkelpeter:~$ pinky | awk '{print $4}'
Untätig
tty7
pts/2
pts/4
pts/5
pux@onkelpeter:~$ 
Ausser "print" kann awk auch "system" um z.B. mit den Übergebenen Argumenten Befehle auszuführen:
pux@onkelpeter:~$ cat mooh
server2 uptime
server5 w
server7 uname
pux@onkelpeter:~$ cat mooh | awk 'system("ssh "$1" "$2)'
 13:45:13 up 52 days, 10:17,  0 users,  load average: 0.50, 1.02, 0.96
 13:45:15 up 18 days,  1:39,  0 users,  load average: 5.70, 4.85, 4.75
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
Linux
pux@onkelpeter:~$ 

sed - Stream-Editor

sed kann die Ausgabe aus einem Stream verändern. Die Syntax ist dabei ähnlich dem vi(m). Geändert wird dabei aber nur der Stream, nicht die Original-Datei:
pux@onkelpeter:~$ cat mooh 
server2 uptime
server5 w
server7 uname -a
pux@onkelpeter:~$ cat mooh | sed s/info/mooh-/
mooh-ng2 uptime
mooh-ng5 w
mooh-ng7 uname -a
pux@onkelpeter:~$ cat mooh 
server2 uptime
server5 w
server7 uname -a
pux@onkelpeter:~$ 

file - Dateiinformationen anzeigen

Mittels dem Befehl "file" kann man sich Informationen zu einer Datei anzeigen lassen. Praktisch, wenn man die Endung der Datei nicht mehr weiss und es mal was binäres sein sollte - gepackte Sachen oder Windows-Files etc.
pux@onkelpeter:/bin$ file zless
zless: POSIX shell script text executable
pux@onkelpeter:/bin$ cd /etc/
pux@onkelpeter:/etc$ file inittab 
inittab: ASCII English text
pux@onkelpeter:/etc$ 

seq - Erzeugen von Zahlensequenzen

Um fortlaufende Zahlenfolgen zu erzeugen benutzt man seq. Bei Scripten braucht man das recht häufig. Gibt man 3 Werte an, so gibt der 2. Wert an, in welche Zahl immer addiert wird, mit 2 Werten ist es 1 (immer + 1):
pux@onkelpeter:~$ seq 1 2 10
1
3
5
7
9
pux@onkelpeter:~$ seq 1 3 10
1
4
7
10
pux@onkelpeter:~$ seq 1 10
1
2
3
4
5
6
7
8
9
10
pux@onkelpeter:~$ 

tail - Zeigt die letzten Zeilen einer Datei an

tail zeigt standartmässig die letzten 10 Zeilen einer Datei an. Mit tail -n50 Dateiname die letzten 50. tail -f Dateiname zeigt das Ende einer Datei an und wenn sich etwas ändert das geänderte dazu. Interessant, wenn man Logfiles schaut.

head - Zeigt den Anfang einer Datei an

Funktioniert genauso wie tail, ausser dass es den Anfang einer Datei anzeigt und deswegen auch die Option "-f" natürlich nicht funktioniert :-).

gzip - Dateien mit zip Packen

Um Dateien (als zip) zu packen benutzt man gzip. Die Syntax ist recht einfach: gzip Datei und es fällt eine Datei.gz hinten raus. In manchen Fällen benötigt man aber noch das original, in diesem Fall benutzt man gzip -c Datei > Dateiname.gz.

gunzip - Gezippte Dateien entpacken

Simple Syntax: gunzip Datei.gz und die Datei ist entpackt.

tar - Um mehrere Dateien in ein Archiv zu packen (und gleichzeitig zu komprimieren)

Mittels tar kann man Ordner oder mehrere Dateien in ein Dateiarchiv zusammenpacken. Es ist auch möglich, diese Dateien direkt zu packen. Am einfachsten ist das packen mit zip, es sind aber auch andere Möglichkeiten gegeben (man tar, siehe --use-compress-program). Ein paar Beispiele zum packen und entpacken:
pux@onkelpeter:~/testordner/sv$ du -sch ordner/
301M   ordner/
301M   insgesamt
pux@onkelpeter:~/testordner/sv$ tar cz ordner > ordner.tar.gz
pux@onkelpeter:~/testordner/sv$ l
insgesamt 316K
drwxr-xr-x 3 pux pux 4,0K 17. Apr 15:49 ./
drwxr-xr-x 7 pux pux 4,0K 15. Apr 12:46 ../
drwxr-xr-x 2 pux pux 4,0K 17. Apr 15:48 ordner/
-rw-r--r-- 1 pux pux 299K 17. Apr 15:49 ordner.tar.gz
pux@onkelpeter:~/testordner/sv$ rm -rf ordner
pux@onkelpeter:~/testordner/sv$ tar xzf ordner.tar.gz 
pux@onkelpeter:~/testordner/sv$ l
insgesamt 316K
drwxr-xr-x 3 pux pux 4,0K 17. Apr 15:49 ./
drwxr-xr-x 7 pux pux 4,0K 15. Apr 12:46 ../
drwxr-xr-x 2 pux pux 4,0K 17. Apr 15:48 ordner/
-rw-r--r-- 1 pux pux 299K 17. Apr 15:49 ordner.tar.gz
pux@onkelpeter:~/testordner/sv$ 

tar kennt ziemlich viele Optionen. Mehr dazu in der man-Page.

lzop - Gepack-Programm

Mit lzop gepackte Dateien kann man so hier entpacken (unsere server's werden so auf den safe-Servern gesichert):
cat lzop-file_level1 | lzop -d | tar --incremental -C ./ -xvp

tee - Ausgabe auf stdout anzeigen und in eine Datei umleiten

Ohne Erklärung:
cat Datei | tee Datei
Ein tee -a (append) hängt übrigens an eine Datei an (ohne "-a" wie > mit "-a" wie >>)

cat - Gibt den Inhalt einer Datei komplett aus

Gibt den Inhalt einer Datei aus. Kann auch von stdin lesen.
pux@onkelpeter:~$ cat > mooh 
testeingabe
noch mehr text
blahdiblah
pux@onkelpeter:~$ cat mooh 
testeingabe
noch mehr text
blahdiblah
pux@onkelpeter:~$ 

cut - zerteilen eines Strings

cut kann einen String anhand eines "Seperators" zerteilen und die (gewünschten) Felder in anderer Reihenfolge ausgeben. Z.B. aus /etc/passwd Benutzernamen anzeigen. Beispielzeile:
cut -d\: -f1,4, 6-8 /etc/passwd
Gibt das 1., 4., 6., 7. und 8. Feld aus, wobei die Felder durch ein ":" getrennt sind.

grep - Suchen nach Zeichenketten/regulären Ausdrücken

Wichtigste Optionen:
-i invert (scheiss auf gross/kleinschreibung)
-r rekursiv (in unterordnern suchen)
-v (nach allem suchen, was dem suchbegriff NICHT entspricht)
-o nur gefundene strings ausgeben
-e reguläre ausdrücke benutzen
pux@onkelpeter:~$ cat mooh 
testeingabe
noch mehr text
blahdiblah
pux@onkelpeter:~$ grep text mooh 
noch mehr text
pux@onkelpeter:~$ grep ein mooh 
testeingabe
pux@onkelpeter:~$ 

egrep - Suchen nach mehreren Zeichenketten/regulären Ausdrücken

Funktioniert fast wie grep, nur zum suchen nach mehreren Strings. Z.B. nach peter und paul in der Datei mooh greppen: egrep "peter|paul" mooh.

z-tools (zgrep, zcat, zless,...)

Viele Tools kann man auf gezippte Inhalte anwenden. Für cat gibt es z.B. zcat und für grep zgrep. Auf meinem System existiert z.B.:
zcat
zdiff
zegrep
zgrep
zless
zmore

touch - Zeitstempel aktualisieren

Dateien (be-)tatschen. Mit touch wird der Zeitstempel einer Datei aktualisiert. Existiert die Datei nicht, wird sie angelegt:
pux@onkelpeter:~/testordner/sv$ l
insgesamt 316K
drwxr-xr-x 3 pux pux 4,0K 17. Apr 15:49 ./
drwxr-xr-x 7 pux pux 4,0K 15. Apr 12:46 ../
drwxr-xr-x 2 pux pux 4,0K 17. Apr 15:48 ordner/
-rw-r--r-- 1 pux pux 299K 17. Apr 15:49 ordner.tar.gz
pux@onkelpeter:~/testordner/sv$ date
Fr 17. Apr 16:08:43 CEST 2009
pux@onkelpeter:~/testordner/sv$ touch ordner.tar.gz 
pux@onkelpeter:~/testordner/sv$ l
insgesamt 316K
drwxr-xr-x 3 pux pux 4,0K 17. Apr 15:49 ./
drwxr-xr-x 7 pux pux 4,0K 15. Apr 12:46 ../
drwxr-xr-x 2 pux pux 4,0K 17. Apr 15:48 ordner/
-rw-r--r-- 1 pux pux 299K 17. Apr 16:08 ordner.tar.gz
pux@onkelpeter:~/testordner/sv$ 

more - Den Inhalt einer Datei seitenweise ausgeben

Den Inhalt einer Datei seitenweise ausgeben. Mit "Enter" eine Zeile vor, mit "Space" eine Bildschirmseite vor:
pux@onkelpeter:~/bin$ more ids.txt 

|         1 | blah                                              
|
+-----------+--------------------------------------------------------------
+
|         2 | blah                       
|
+-----------+--------------------------------------------------------------
+
|         3 | blah 
|
|           | blubb                                                         
|
+-----------+--------------------------------------------------------------
+
|         4 | blah                        
|
+-----------+--------------------------------------------------------------
+
|         5 | blah                                                     
|
--More--(11%)
Strg + C zum abbrechen.

less - Dateien anzeigen

Ein Anzeigetool für Dateien. Einfach less Datei eingeben zum betrachten. Die Syntax ist ähnlich dem vi. "/suchbegriff" zum suchen eingeben, "n" drücken um zum nächsten Ergebnis zu springen, "ESC + : + q" zum verlassen eingeben. Mit Shift + G springt man übrigens ans Ende einer Datei.

diff - Unterschiede von Dateien anzeigen

Um den Unterschied von 2 Dateien anzuzeigen, verwendet man diff (oder alternativ vi -d ).
pux@onkelpeter:~/bin$ diff ids.txt ids.txt_copy
178d177
< +-----------+------------------------------------------+
367c366
< |         1 | blah                                     |
---
> |         2 | blah                                     |
pux@onkelpeter:~/bin$ 
Eine Zeile ist zuviel, eine andere hat unterschiedlichen Inhalt.

md5sum - md5-hash generieren zum vergleichen von 2 Dateien

Wenn man 2 Dateien auf gleichheit überprüfen will erstellt man eine Prüfsumme und vergleicht diese. Ein Beispiel:
pux@onkelpeter:~/bin$ md5sum ids.txt
146de1cb18038d2e5b18713b32cfc5fb  ids.txt
pux@onkelpeter:~/bin$ md5sum ids.txt_copy
215dfd614b76246476cd9ea2aba64636  ids.txt_copy
pux@onkelpeter:~/bin$ md5sum ids.txt > ids.txt.md5
pux@onkelpeter:~/bin$ md5sum ids.txt_copy > ids.txt_copy.md5
pux@onkelpeter:~/bin$ diff ids.txt.md5 ids.txt_copy.md5 
1c1
< 146de1cb18038d2e5b18713b32cfc5fb  ids.txt
---
> 215dfd614b76246476cd9ea2aba64636  ids.txt_copy
pux@onkelpeter:~/bin$ 
Man kann sich also den hash anzeigen lassen und "von Hand" vergleichen oder in jeweils eine Datei schreiben und diese Dateien dann vergleichen.


Netzwerkbefehle


ip - Tool um IP-Einstellungen zu ändern/anzuzeigen

Mit ip a hochgefahrene ip-Adressen anzeigen lassen, die man mit ifconfig z.B. nicht sieht. Mit ip kann man auch Einstellungen vornehmen.

route - Die lokal gesetzten routen anzeigen lassen

Welche route, bzw. welches (Default)-Gateway gesetzt ist etc. Zusätzlich kann man auch damit routen setzen, löschen usw.

ifconfig - Infos zu den Netzwerkkarten ausgeben

Gibt Informationen zu der/den Netzwerkkarte/en aus. Kann auch Einstellungen vornehmen.

host - Nameserver abfragen

Wirft z.B. den "Domain-Namen" einer IP-Adresse raus.

dig - Nameserver abfragen

Tool um Nameserver abzufragen. dig @nameserver onkelpeter.de ns um einen Nameserver direkt nach einer Domain nach dem NS-Record zu befragen.

traceroute - Die route (einzelnen hops) zu einem Server anzeigen lassen

Gibt die Route zu einem Host aus.

mtr - my trace route (traceroute auf "udp-basis")

Benutzen, falls traceroute nix ausgibt, da traceroute auf TCP/IP basiert und mtr auf UDP.

ssh - Sich per ssh mit einem Server verbinden

Sich per ssh zu einem Server verbinden oder mit ssh user@server 'befehl' einen Befehl direkt auf einem Server absetzen.

telnet - sich per telnet auf einen port verbinden

telnet servernamen port zum Verbinden angeben, "Strg + 5" und dann "quit" eingeben zum beenden.

mii-tool - Hat meine Netzwerkkarte link?

root@onkelpeter:~# mii-tool 
SIOCGMIIREG on eth0 failed: Input/output error
SIOCGMIIREG on eth0 failed: Input/output error
eth0: negotiated 100baseTx-FD, link ok
root@onkelpeter:~# 

ethtool - Infos zu einer Netzwerkkarte anzeigen

root@onkelpeter:~# ethtool eth0
Settings for eth0:
   Supported ports: [ TP ]
   Supported link modes:   10baseT/Half 10baseT/Full 
                           100baseT/Half 100baseT/Full 
                           1000baseT/Full 
   Supports auto-negotiation: Yes
   Advertised link modes:  10baseT/Half 10baseT/Full 
                           100baseT/Half 100baseT/Full 
                           1000baseT/Full 
   Advertised auto-negotiation: Yes
   Speed: 100Mb/s
   Duplex: Full
   Port: Twisted Pair
   PHYAD: 1
   Transceiver: internal
   Auto-negotiation: on
   Supports Wake-on: pumbag
   Wake-on: g
   Current message level: 0x00000001 (1)
   Link detected: yes
root@onkelpeter:~# 

nmap - Portscanner

Mit nmap kann man nach offenen Ports suchen. Beispiel:
root@onkelpeter:~# nmap pux

Starting Nmap 4.62 ( http://nmap.org ) at 2009-04-29 12:26 CEST
Interesting ports on pux (127.0.1.1):
Not shown: 1713 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 7.128 seconds
root@onkelpeter:~# 
nmap kann auch noch Informationen zum Betriebssystem auswerfen:
root@onkelpeter:~# nmap -v -A pux

Starting Nmap 4.62 ( http://nmap.org ) at 2009-04-29 12:27 CEST
Initiating SYN Stealth Scan at 12:27
Scanning pux (127.0.1.1) [1715 ports]
Discovered open port 22/tcp on 127.0.1.1
Discovered open port 111/tcp on 127.0.1.1
Completed SYN Stealth Scan at 12:27, 10.18s elapsed (1715 total ports)
Initiating Service scan at 12:27
Scanning 2 services on onkelpeter.s.schlund.de (127.0.1.1)
Completed Service scan at 12:27, 6.01s elapsed (2 services on 1 host)
Initiating OS detection (try #1) against onkelpeter.s.schlund.de (127.0.1.1)
Retrying OS detection (try #2) against onkelpeter.s.schlund.de (127.0.1.1)
[....]
Host pux (127.0.1.1) appears to be up ... good.
Interesting ports on pux (127.0.1.1):
Not shown: 1713 filtered ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh      (protocol 2.0)
111/tcp open  rpcbind
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port22-TCP:V=4.62%I=7%D=4/29%Time=49F82B95%P=x86_64-unknown-linux-gnu%r
SF:(NULL,20,"SSH-2\.0-OpenSSH_5\.1p1\x20Debian-5\r\n");
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|WAP|server appliance
Running (JUST GUESSING) : Linux 2.6.X (95%), Siemens embedded (90%), Netgear embedded (88%), FON Linux 2.4.X (87%), Toshiba Linux 2.4.X (87%), AVM embedded (86%), Linksys embedded (86%)
Aggressive OS guesses: Linux 2.6.17 - 2.6.24 (95%), Linux 2.6.22 (94%), Linux 2.6.22 - 2.6.24 (94%), Linux 2.6.18 (Debian Sid) (91%), Linux 2.6.17 - 2.6.22 (91%), Siemens Gigaset SE515dsl wireless broadband router (90%), Linux 2.6.17 - 2.6.18 (x86) (90%), Linux 2.6.17 - 2.6.20 (90%), Linux 2.6.17 - 2.6.21 (90%), Linux 2.6.17 - 2.6.23 (90%)
No exact OS matches for host (test conditions non-ideal).
Uptime: 15.101 days (since Tue Apr 14 10:02:29 2009)
Network Distance: 0 hops
TCP Sequence Prediction: Difficulty=206 (Good luck!)
IP ID Sequence Generation: All zeros

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.657 seconds
           Raw packets sent: 3503 (157.468KB) | Rcvd: 21 (1780B)
root@onkelpeter:~# 

netstat - offene Netzwerk-Verbindungen anzeigen lassen

netstat gibt offene Verbindungen eines Servers aus. Dabei sind die wichtigsten Optionen n (numeric - ips/ports nicht auflösen), p (prozess-ID anzeigen, welche die Verbindung offen hält), t (nur tcp-Verbindungen anzeigen), l (listen, also Offene Ports, an denen ein Dienst lokal lauscht anzeigen).
root@onkelpeter:~# netstat -nt
Aktive Internetverbindungen (ohne Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 10.1.1.16:41933         64.12.165.90:443        VERBUNDEN  
tcp        0      0 10.1.1.16:50854         205.188.7.147:443       VERBUNDEN  
tcp        0      0 10.1.1.16:42285         64.12.30.80:443         VERBUNDEN  
tcp        0      0 10.1.1.16:53092         205.188.7.140:443       VERBUNDEN  
tcp        0      0 10.1.1.16:56268         212.227.3.14:22         VERBUNDEN  
tcp        1      0 10.1.1.16:36784         62.41.80.88:80          CLOSE_WAIT 
tcp        0      0 10.1.1.16:32934         205.188.2.33:443        VERBUNDEN 
root@onkelpeter:~# netstat -ntl
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:29754         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6600          0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 :::445                  :::*                    LISTEN     
tcp6       0      0 ::1:6600                :::*                    LISTEN     
tcp6       0      0 :::139                  :::*                    LISTEN 
root@onkelpeter:~# 


System-Befehle


screen - Virtuelles Terminal

Mittels Screen kann man eine Virtuelle Konsole öffnen in der dann z.B. ein Befehl laufen kann damit sich den verschiedene Benutzer anschauen können. Wir benutzen das vorwiegend bei Backups, Restores, die "dastool"-Programme laufen auch alle in einem Screen etc. Die Wichtigsten Kommandos sind hierbei:
Laufende Screens anzeigen:
root@server23:~# screen -ls
There is a screen on:
   3382.backup   (Detached)
1 Socket in /var/run/screen/S-root.

root@server23:~# 
Auf einen Screen connecten mittels "screen -x ", wobei beim Namen das erste Zeichen reichen kann (wenn dann eindeutig ist, welcher Screen gemeint ist - ähnlich der Tab-Vervollständigung).
Screen verlassen ohne ihn zu schliessen (detachen) mit "Strg + A + D".
Im Screen scrollen geht mit "Strg + A + ESC".
Anschliessend Enter drücken, um den Scroll-Modus wieder zu verlassen.
Einen Screen mit einem Namen erstellen:
screen -S neuername
Screen auf aktuelle Terminalbreite/höhe resizen:
Strg + A + Shift + F

adduser/useradd - Benutzer anlegen

Um einen Benutzer anzulegen empfiehlt sich adduser. Man wird dabei alles wichtige gefragt:
root@onkelpeter:~# adduser mooh
Lege Benutzer »mooh« an ...
Lege neue Gruppe »mooh« (1001) an ...
Lege neuen Benutzer »mooh« (1001) mit Gruppe »mooh« an ...
Erstelle Home-Verzeichnis »/home/mooh« ...
Kopiere Dateien aus »/etc/skel« ...
Geben Sie ein neues UNIX-Passwort ein: 
Geben Sie das neue UNIX-Passwort erneut ein: 
passwd: Passwort erfolgreich geändert
Ändere Benutzerinformationen für mooh
Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert
   Vollständiger Name []: test
   Raumnummer []: 
   Telefon geschäftlich []: 
   Telefon privat []: 
   Sonstiges []: 
Is the information correct? [Y/n]
Dann wird alles weitere angelegt.
Bei useradd muss/kann man diese Optionen alle als Parameter mitgeben und ist mehr zum automatisierten anlegen geeignet.

deluser - Benutzer löschen

"deluser usernamen" verwenden um einen Benutzer zu löschen.

addgroup/delgroup - Gruppen anlegen/löschen

Syntax gleicht der von adduser/deluser.

usermod - Benutzer modifizieren

Mittels usermod kann man Benutzer in andere Gruppen stecken oder z.B. deren Angaben ändern (Name, Passwort, etc.).

uptime - load/uptime sehen

Gib die aktuelle Zeit, die Dauer wielange das System läuft, die Anzahl der Benutzer und die durchschnittliche Anzahl von lauffähigen Jobs in den latzten 1, 5 und 15 Minuten.

w - load/uptime/eingeloggte User sehen

Zeigt an, wer am System angemeldet ist und was sie/er gerade tut.

pinky - eingeloggte User sehen

Ein Finger-Tool zum anzeigen von Benutzerinformationen.

vmstat - Systemauslastung ansehen in Echtzeit

Mittels vmstat kann man sich die Systemauslastung anzeigen lassen. vmstat 1 gibt dabei sekündlich aus, was das System macht.

init/telinit/shutdown/reboot - runlevel wechseln, Server runterfahren/rebooten

Mit init 5 kann man in den Runlevel 5 wechseln, mit init 6 in den Runlevel 6 (reboot) oder mit init 0 in den Runlevel 0 (System herunterfahren und ausschalten). Mit shutdown -r now kann man ein System rebooten, mit shutdown now kann man ein Systen herrunterfahren oder mit reboot ein System rebooten. Viele Wege führen also nach Rom

ln - hard/softlinks erstellen

Um einen Link zu erstellen (unter Windows würde man sagen "Verknüpfung") benutzt man das Kommando ln. Die Syntax ist dabei ln [OPTION]... ZIEL [VERKNÜPFUNGSNAME]. Man unterscheidet dabei zwischen hard- und softlinks. Softlinks sind tatsächlich eine Verknüpfung im ursprünglichen Sinne und können über PArtitionen/Dateisysteme hinweg gesetzt werden. Hardlinks verweisen auf die gleiche Inode, weswegen Hardlinks nur innerhalb der gleichen Partition möglich sind. Ein Beispiel hierzu:
pux@onkelpeter:~/testordner/mooh$ touch Datei
pux@onkelpeter:~/testordner/mooh$ ln -s Datei link
pux@onkelpeter:~/testordner/mooh$ l
insgesamt 8,0K
drwxr-xr-x 2 pux pux 4,0K 29. Apr 11:00 ./
drwxr-xr-x 8 pux pux 4,0K 29. Apr 10:59 ../
-rw-r--r-- 1 pux pux    0 29. Apr 11:00 Datei
lrwxrwxrwx 1 pux pux    5 29. Apr 11:00 link -> Datei
pux@onkelpeter:~/testordner/mooh$ rm Datei 
pux@onkelpeter:~/testordner/mooh$ l
insgesamt 8,0K
drwxr-xr-x 2 pux pux 4,0K 29. Apr 11:00 ./
drwxr-xr-x 8 pux pux 4,0K 29. Apr 10:59 ../
lrwxrwxrwx 1 pux pux    5 29. Apr 11:00 link -> Datei
Der Link ist nun kaputt und verweist auf eine nich tmehr vorhandene Datei, hat also keinen Inhalt mehr.
pux@onkelpeter:~/testordner/mooh$ l
insgesamt 8,0K
drwxr-xr-x 2 pux pux 4,0K 29. Apr 11:00 ./
drwxr-xr-x 8 pux pux 4,0K 29. Apr 10:59 ../
-rw-r--r-- 1 pux pux    0 29. Apr 11:00 Datei
pux@onkelpeter:~/testordner/mooh$ ln Datei link
pux@onkelpeter:~/testordner/mooh$ l
insgesamt 8,0K
drwxr-xr-x 2 pux pux 4,0K 29. Apr 11:01 ./
drwxr-xr-x 8 pux pux 4,0K 29. Apr 10:59 ../
-rw-r--r-- 2 pux pux    0 29. Apr 11:00 Datei
-rw-r--r-- 2 pux pux    0 29. Apr 11:00 link
pux@onkelpeter:~/testordner/mooh$ rm Datei 
pux@onkelpeter:~/testordner/mooh$ l
insgesamt 8,0K
drwxr-xr-x 2 pux pux 4,0K 29. Apr 11:01 ./
drwxr-xr-x 8 pux pux 4,0K 29. Apr 10:59 ../
-rw-r--r-- 1 pux pux    0 29. Apr 11:00 link
pux@onkelpeter:~/testordner/mooh$
Die Datei ist nun weg, aber der Link zeigt noch auf die "gleiche" Inode, somit ist der Inhalt noch vorhanden.

runlevel - aktiven runlevel anzeigen

Zeigt den aktuellen und vorherigen Runlevel an. Wenn das System firsch gebootet wurde steht beim vorherigen Runlevel "N":
root@onkelpeter:~# runlevel 
N 2
root@onkelpeter:~# 

rm - Dateien/Ordner löschen

rm -rf um Dateien und Ordner ohne Nachfragen zu löschen.

reset - Terminal zurücksetzen

Wenn nur noch wirre Zeichen zu sehen sind, einfach blind "reset" eintippen und enter drücken, dann funktioniert das wieder.

ps - Prozessliste ausgeben

Aktuelle Prozessliste ausgeben lassen. Optionen dabei sund unendlich viele, ich benutze meist die Optionen afx oder alfxw.

dd - Diskdump (blockweises lesen von einem Gerät)

Disk dump, liest von x und schreibt nach y, wobei x und y Geräte sein können. Kopieren einer Festplatte: dd if=/dev/sda1 of=/dev/sdb1, erstellen einer Datei von 10 MB grösse: dd if=/dev/null of=/home/Dateiname bs=1024 count=1000. Auch gut zu wissen: dd if=/dev/sda1 | ssh server 'dd of=/dev/sda1' um z.B. eine Platte übers Netz auf eine andere Kiste zu kopieren.

uname - geladene Kernelversion anzeigen

uname -a um die vollständige Kernelversion anzuzeigen. In /proc/cmdline findet man übrigens die beim Booten übergebenen Optionen an den Kernel:
pux@onkelpeter:~$ cat /proc/cmdline 
root=/dev/sda1 ro quiet
pux@onkelpeter:~$ 

date - Datum ausgeben lassen

Formatieren nach Tag, Monat, Jahr (im Format dd-mm-yyyy): date +%d-m-Y

bc - Taschenrechner der von stdin liest

Einfach bc eingeben und mit "quit" beenden. Man kann auch Aufgaben "hinschieben":
pux@onkelpeter:~$ echo "5 + 15" | bc
20
pux@onkelpeter:~$ 

echo - Text ausgeben

echo kann dabei auch noch einige Zeichen besonders interpretieren und Text farbig ausgeben:
echo -e "\033[1;31mDu wolltest dich auf ein externes Raid per ssh verbinden, nutze serielle Console!\033[0m";

dmesg - Kernelmeldungen ausgeben

dmesg gibt die letzten Meldungen des Kernels aus. Diese werden im Ram gehalten. dmesg -c um den "benutzten RAM" zu leeren.

sleep - Warten

Mittels "sleep 5" 5 Sekunden warten. Braucht man hin und wieder beim scripten.

man - Hilfe unter Linux

Hilfeseiten 2 und 8 für Befehle aufrufen mit man 2 befehl oder man 8 befehl.

crontab - Zeitlich gesteuerte Abläufe

Anschauen/ändern von cronjobs mit crontab -l [user] oder crontab -e [user]. Die Syntax dabei lautet:
pux@onkelpeter:~$ crontab -l
#minute   stunde   tag_im_monat   monat   wochentag   befehl
3    *    *       *    *      /home/pux/dp/getdp.sh
*/3    *    *       *    *      /home/pux/bin/signatur.sh
0    0    1       1    *      /home/pux/cron/sylvester.sh
pux@onkelpeter:~$ 
3 * * * * bedeudet dabei immer um 3 Minuten nach der vollen Stunde ausführen.
*/3 * * * * wird alle 3 Minuten ausgeführt.
0 0 1 1 * wird um 0:00 Uhr am 1.1. ausgeführt, also zum Jahreswechsel.

history - Anschauen der letzten abgesetzten Befehle

history gibt die letzten "x" eingegebenen Befehle aus. Dabei kann man mit den Variabeln $HISTSIZE, $HISTCONTROL, etc. definieren, wie viele Befehle gespeichert werden und in welchem Format. In der man-Page findet man mehr dazu.

env - Enviroment-Variabeln anzeigen lassen

Gibt alle Enviroment-Variabeln aus.

alias - Shortcuts definieren

Shortcuts/Abkürzungen unter Linux definieren. alias ohne eine Option gibt die definierten Aliasse aus, definieren tut man das so hier:
alias p='ping '
alias t='traceroute '
alias ..='cd ..'
alias ...='cd ../..'
alias console='ssh pux@conserv0'
alias home='ssh pux@home'



  logo