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