Linux 1

Aus wiki@ANOnet
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

LPI-EXAM 101

  1. Hardware Settings
  2. System Boot
  3. Runlevels
  4. Harddisk Layout
  5. Bootmanager
  6. Shared Lib
  7. Package Management
  8. Unix-Commands
  9. Process streams
  10. Basic File Management
  11. pipes
  12. Processmanagement
  13. Prozesspriorität
  14. regular expressions
  15. VI
  16. Filesystem Management
  17. Quotas
  18. Berechtigungen
  19. Suchen/Finden

Grundlagen

Der Kernel "beschützt" die Hardware, er ist der Einzige, der auf Hardware zugreifen darf. Im Kernel stehen die Treiber Die nächste Schicht wäre die "shell", in der nächsten Schicht erst befinden sich die Applications

Jedes installierte Paket legt Dokumentation nach /usr/share/doc/


Installation

Partitionierung

swap  1x Hauptspeicher
/boot  read-only
/usr  2-20 g
/home
/var  >10g
/tmp 1g
/ 1g

Formatierung

ISOFS -->ro
UDFS -->ro
EXT2 --> Nachfolger von UFS, unterstützt kein Journaling
EXT3
EXT4



mke2fs -j -L data /dev/sda6

(mkfs.ext3, mkfs -t ext3 hätten die selbe funktion)


Ändern des Hostnamens

editieren der Datei

/etc/hostname

und

/etc/init.d/hostname.sh start

ausführen

Mounten

Mointpoint erstellen und mounten:

mkdir /data
mount /dev/sda6 /data bzw mount -L data /data

mit

df -h

kann das Ergebnis wiederum überprüft werden

Mounten mittels NFS

showmount -e 192.168.0.254

würde die freigegebenen Ordner der Zielmaschine liefern, welche wie folgt eingehängt werden können:

mount 192.168.0.254:/var/ftp/pub /mnt


Mounten einer Windowsfreigabe

Benötigt werden die "samba-Clients"

mount -t cifs -o username=user,password=pass //[IP_WIN-Server]/[Freigabe] /ir/gend/ein/ordner


mittels

nmblookup -A [IP_WIN-Server]

werden Workgroup und andere netBIOS-Ausgaben geliefert

cmbclient -L [IP_WIN-Server] -U [user]

zeigt die Freigaben an

Mounten eines ISOS

mount -o loop /qu/ell/iso /mnt

USB einghängen

im Kernellog unter

dmesg 

können die letzten Meldungen ausgelesen werden, so auch das Anstecken eines USB-Gerätes. Hier werden danach die Partitionen, Devicenamen u.a. angezeigt. mit

mount /dev/sdb1 /mnt

würde auch der Stick gemountet

umount

falls ein Device nicht abgehängt werden kann, weil ein Prozess darauf zugreift, schafft folgendes Abhilfe:

fuser -v /mnt

würde das gemountete wieder frei geben

fuser -vb /mnt

terminiert den Prozess


lsof /mnt

würde ebenso alle Zugriffe anzeigen, und der Prozess kann mittels kill (und ggf Optionen) gelöscht werden

fstab

Die Datei /etc/fstab besteht aus 6 Spalten:

  1. was gemountet werden soll
  2. mountpoint, wohin gemountet werden soll
  3. Filesystem
  4. Optionen (auto, async, rw, nouser, dev, exec, suid)
  5. 0 backup nein, 1 backup ja
  6. soll beim booten wenn nötig ein FS-check gemacht werden

Sie sorgt dafür, dass gleich nach dem booten gemountet wird


Sollte in der FSTAB ein fehler sein, kann ebendiese mittels des emergency-modes wieder hergestellt werden. Dazu muss allerdings die root-Partition auf rw gesetzt werden.

mount -o rw,remount /

nun kann die fstab berichtigt werden

Optionen:

  • auto: beim booten automatisch gemountet
  • async: der schreibvorgang läuft über buffer
  • user: ein "normaler" user darf mounten
  • exec: ob Dateien ausgeführt werden dürfen

Umlegen eines Mountpoints

Dazu wird auf einer anderen Platte eibe neue Partition angelegt und formatiert Danach wird dieses in einen tempörären Mountpoint gemountet

mount /dev/sda8 /mnt

Danach wird alles von Quelle nach Ziel kopiert, unter Beibehalt der Berechtigungen

(cp -a)
(cpio)
rsync -avP /home/ANOther /mnt

(ein h bei den optionen wäre für "richtiges" syncronisieren, es würden nur veränderungen übertragen)

mv /home/ANOther /home/ANOther.old
mkdir /home/ANOther

Danach kann der Mountpunkt umgelegt werden

umount /mnt
mount /dev/sda8 /home/ANOther

danach werden Berechtigungen und Owner nachgezogen

chmod 700 /home/ANOther
chmod ANOther:ANOther /home/ANOther

zum Schluss sollte die fstab berichtigt werden

Dies funktioniert eventuell nur im init-s

System Boot

  • Power-On --- BIOS/UEFI boot up --- int Hardware
  • Disk Boot => MBR/BGT Bootloader -> 1st stage
  • Bootloader (grub) => 1.5 stage load (Filesystem-Knowledge)
  • Bootloader stage2 und init /boot/grub/grub.conf --> grub-bootmenu
  • Der Bootloader entpackt den Kernel, lädt ihn in den phys. Speicher
  • Danach mountet der Kernel die RAM-Disk (initrd.img). In dieser befinden sich die notwendigen Module
  • Nun werden die Dateisysteme gemountet, als erstes die Root-Partition

Nach dem erfolgreichen mounten der Root-Partition wird /sbin/init gestartet, der Prozess mit der PID1. Der weitere Bootvorgang wird dann von init ausgeführt

  • init arbeitet nun seine Konfigurationsdatei /etc/inittab bzw /etc/init ab

Danach wird

/etc/rc.d/rc.sysinit

ausgeführt. Hier werden Filesysteme gecheckt, und Filesysteme gemountet, der Hostname wird gesetzt, die Hardware-Clock ausgelesen und der systemclock übergeben. Kexboard, Sprachen, ... werden aktiviert. Dieses Script bietet auch den Emergency-Mode an, damit kann sich root noch einloggen

als letztes wird noch die /etc/rc.local gestartet


Runlevels

In den Runlevels wird bestimmt, was auf dem System ausgeführt werden kann.

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#


in /etc/rc5.d (und auch den anderen Runlevel-Verzeichnissen) finden sich die für den jeweiligen RL aktiven, möglichen Dienste Services, welche mit "k" beginnen, sind gestoppt, die mit "s" sind aktiv. Zum aktivieren/deaktivieren reicht ein Umbenennen, die Auswirkungen sind beim nächsten RL-Wechsel aktiv. Die Nummer hinter den Buchstaben liefert die Start-Priorität. Auch diese kann durch umbenennen verändert werden. Die Dateien, die hier zu finden sind, verweisen alle nach init.d, von woaus dann die eigentlichen scripts gestartet werden

Auch existieren Tools dafür

chkconfig --level 5 crond on

würde in l5 chron einschalten (dieses wäre für RedHat)

lilo

Lilo ist ein älterer Bootloader. Nach jeder Änderung in der /etc/lilo.conf muss das Kommando "lilo" ausgeführt werden

grub

mit grub-install /dev/sda würde der MBR, die Parttable und der Bootloader repariert der Loader kommt aus /boot/grub

Im Gegensatz zum LILO kann GRUB das Filesystem lesen. Dies ermöglicht das online-bearbeiten des Bootloaders

Es werden verschiedene Stages abgearbeitet. Die Konfiguration für grub heisst "menu.lst", bzw unter RedHat grub.conf. In Dieser Datei können die verschiedenen Bootoptionen mitgegeben werden, auch ein Multi-Bootsystem kann so verwaltet werden

Absichern von GRUB

  • ein Passwort erstellen:
[root@station20 ~]# grub-md5-crypt 
Password: 
Retype password: 
$1$PwHgT/$/dL5dIo5BmLPUNfPQCR40.
  • das Passwort in die grub.conf eintragen
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
       password --md5 $1$PwHgT/$/dL5dIo5BmLPUNfPQCR40.
title Red Hat Enterprise Linux Server (2.6.18-164.2.1.el5)
       root (hd0,0)
       kernel /vmlinuz-2.6.18-164.2.1.el5 ro root=/dev/vol0/root
       initrd /initrd-2.6.18-164.2.1.el5.img
title Red Hat Single
       root (hd0,0)
       kernel /vmlinuz-2.6.18-164.2.1.el5 ro root=/dev/vol0/root s
       initrd /initrd-2.6.18-164.2.1.el5.img
       password --md5 $1$PwHgT/$/dL5dIo5BmLPUNfPQCR40.

ggf kann SElinux eine kernelpanik auslösen, selinux=0 würde hier SElinux abschalten. init=/bin/bash würde die Konsole starten

Prozessverwaltung

Die ProzessID der Shell kann mit

$$

angezeigt werden

nice

mit Hilfe von Nice können Prozesse beim Start priorisiert werden. renice würde die Prio eines laufenden Prozess verändern

top

bringt Informationen zur Auslastung des Rechners, aktualisierend mit + kann zwischen den CPUs gewechselt werden

[strg Z]

schickt einen Prozess in den Hintergrund, und gibt die Shell wieder frei. Ein & hinter einem ausgeführten Befell lässt diesen von Beginn an im Hintergrund agieren.

bg

lässt ihn im Hintergrund weiterarbeiten

fg

holt ihn wieder vor

jobs

zeigt an, was alles im Hintergrund aktiv ist

pgrep xeyes

schreibt die PID

kill

sendet Befehle an den Prozess. lill -l liefert eine Liste der Funktionen

pkill xeyes


ps

Mit

ps

werden die Prozesse der jeweiligen Shell angezeigt

ps l
ps -l

liefern unterschiedliche Ergebnisse, da dies der Tribut an die beiden Unixe V und BSD war.

ps l

liefert den Long-output des ps. Unter anderem wird die ProzessID, die ParentID und die UserID angezeigt.

pstree

würde die Prozessstruktur in Baumform anzeigen

ps la

zeigt die Prozesse, die auf Terminals initiiert wurden. ps lax würde alle Prozesse anzeigen, auch die im Hintergrund

ps waux

ähnliches

ps -ef | grep Z

findet Zombies. Bei diesen muss der Parent-Prozess gekillt werden

ps -eouser,pid,cmd

wäre die ps-Ausgabe mit User, ProzessID und Kommando

ps -ef | grep sshd

findet, in Verbindung mit grep sshd, alle per ssh zu stande gekommenen Sessions

Dateien verwalten

Die BASH unterstützt den Humanoiden durch farbliche Markierung

in verzeichnis bin befinden sich Dateien, welche jeder User ausführen kann, im Unterschied zu sbin, dieses ist für root-Kommandos reserviert das boot-verzeichnis ist eine LINUX-Eigenheit das dev ist das Verzeichnis, indem die Links hinterlegt werden, die auf die Treiber zeigen. Das entstand daher, weil jedes Gerät als Datei dargestellt werden sollte


so kann mit

mkvfat /dev/hda1 

die erste Platte formatiert werden


das /etc/ entspricht am ehesten einer Windows-Registry in /home/ sind die homedirs der User angelegt (eigene Partition!)

/lib/ ist wieder ein typisches unix-Verzeichnis. Hier finden sich die dynamisch ladbaren Module

/lost+found/ findet sich in jedem Haupt-Verzeichnis. Dies ist interessant, wenn der Rechner abstürzt. Wenn das Sytem nun nicht sauber runtergefahren wird, wird nach dem Neustart auf fehlerhafte Segmente überprüft, und Dateifragmente werden ins l+f geschoben

/media/ hier werden USB-Sticks u.a. hineingemountet

/misc/ wird manchmal für automount verwendet

/net/ ebenso

/mnt/ ist ein temporärer Mountpoint. Wird für kurzfristiges mounten verwendet

/opt/ wird von 3rd-Party-Software verwendet, um sich zu installieren.

/proc/ ist ein virtuelles Filesystem, in das der Kernel hineingemountet wird (linux-eigen!). meminfo, cpuinfo und weitere Hardwareabfragen spielen sich dort ab

/sys/ ebenso, werden beim booten erstellt

/root/ ist das Heimverzeichnis des root-Users

/selinux/ ist ein IPS, um lokale Sicherheit am System zu erhöhen

/srv/ in der Linuxwelt für Serverdienste

/tmp/ ist auch ein Standard-Unix-Verzeichnis, ist für temporäre Daten. So schreibt zb die GUI nach /tmp/

/usr/ unix system ressources: hier steckt der Hauptteil des Betriebssystems, hier sind dann erneut bin/sbin vorhanden (eigene Partition wäre empfehlenswert)

/usr/local/ hier wird software, welche nicht mit rpms installiert werden, installiert


/var/ Hier werden logs und ähnliches abgelegt (eigene Partition!)


"sticky bit" bedeutet, dass ein angelegtes File nur der Eigentümer und Root löschen

Dateitypen

Es gibt in der Unix-Welt 7 Dateitypen:

-

für regular-File

d

für Verzeichins


l

für symb. Link


b

für Block-Device

/dev/hda1

Der Unterschied zwischen b und c ist die Schreibweise. Hier wird auf einen 64.k-Block gewartet (für Filesysteme wie Platten, USB-Stick, ...)

c

für Character Device

/dev/ttyS0

Hier wird Zeichenweise gearbeitet

p

Pipe File

mkfifo mypipe
echo "zeas" > mypipe

würde nun in

cat mypipe

"zeas" erscheinen lassen

Diese Datei kann nicht befüllt werden. Sie wird verwendet, um 2 Prozesse miteinander sprechen zu lassen.

ps -ef | more

lässt nun zu, dass die ps-eingabe seitenweise abgerufen werden kann


s

Socket File

das selbe, nur wird hier über ein Netzwerk gearbeitet


~ zeigt das Homeverzeichnis an
pwd - print working directory

Dateinamen

Der Name einer Datei kann 255 Zeichen lang sein, darf nur nicht mit / starten. Grundsätzlich sollten sie aber so wenig Sonderzeichen wie möglich enthalten. Es können beinahe alle Zeichen verwendet werden, wenn man den Namen in "" setzt


Verzeichnisnavigation

cd /
cd -
cd ../


File Name Generation

"Wildcarding"

* kein, ein oder beliebig viele
? ein beliebiges Zeichen
[ ] genau ein zeichen, welches in der Klammer definiert ist. Kann auch summiert werden. Hier kann auch "von-bis" im ASCII ($LANG=C) bzw UTF-8 verwendet werden
! negiert (die BASH versteht auch ^)
~ 


zb

find / -name "*txt"

würde nun alle Dateien suchen, die auf txt enden. Zu beachten wäre das Hochkomma, denn nur so wertet die Shell das * nicht aus, was in diesem Falle zu Fehlern führen würde

mv *[x] test

würde alle dateien, die mit "x" enden, in das Verzeichnis test verschieben

ls a[123][456] 

würde die Dateien anzeigen, deren Namen

  • genau 3 Zeichen lang ist
  • an der zweiten Stelle 1, 2, 3 UND
  • an der dritten Stelle 4, 5, 6 hat


Filenavigation

cp

kopiert, benötigt mindestens zwei Argumente, Quelle und Ziel. Es gilt: beim cp wird eine Datei neu angelegt, das bedeutet, auch die Berechtigungen werden neu erstellt. Wenn mehr als 2 src-Files sind, muss als letzten Argument ein Zielverzeichnis gebastelt

cp -a: Mit der Option -a werden, soferne MEINE Rechte passen, Rechte, Gruppenzugehörigkeiten u.ä. mitübernommen.
cp -i: wenn die Zieldatei existiert, wird gefragt, ob die Zieldatei überschrieben werden soll. 
Dies ist in Linux bei Root als alias bei cp gesetzt. Wird eine Zieldatei überschrieben, gelten die ursprünglichen Rechte der Zieldatei, 
nicht der Quelldatei (Ausnahme: -a)

mv

Verschiebt eine Datei, oder eine Ordner, wobei die ursprünglichen Berechtigungen erhalten bleiben. Jede Datei, jeder Ordner, haben eine inode-nummer. Mittels

ls -ia

kann diese angezeigt werden.

Wird jetzt die Datei aufgerufen

cat foo

wird über die Inode, in der Inodetabelle, mit der inode-nummer der Datenblock ausfindig gemacht, indem die Info auf der Platte abgelegt ist

Wird nun

mv foo bar

ausgeführt, wird nur der Name in der Verzeichnistabelle umgedreht, das bedeutet, dass alle Rechte gleich bleiben

Bei

mv foo ../user2/

wird die Datei aus der eigenen Verzeichnistabelle in die des User2 gelegt, wieder ohne die Berechtigungen anzurühren

Beim Verschieben über Filesystemgrenzen passiert wieder eigentlich ein cp und rm, das bedeutet, es werden neue Berechtigungen gesetzt. Daher sollte beim Verschieben über FS-Grenzen mit cp statt mv arbeiten


Links

ln foo bar

erstellt einen neuen Eintrag in der Inodetabelle, mit der gleichen Inodenummer, das bedeutet, es gibt 2 Namen zu einer Datei. In der Inodetabelle wird auch ein Referenzzähler gesetzt, das bedeutet, dass die Datenblöcke erst dann gelöscht werden, wenn keine "links" mehr auf die Inodenumemr verweisen Dies funktioniert nur im eigenen Filesystem, und nur für reguläre Dateien

sybmolischer Link
ln -s bar wert

legt zusätzlich einen Eintrag in der Inodetabelle an. Hier geht es nur um einen Namen, es geht auch über FS-Grenzen, und für alle Dateiarten


rm

rm löscht den betreffenden Eintrag in der Inodetable, das heisst, wenn die Inodenummer einer Datei bekannt ist, kann sie auch wiederhergestellt werden

Berechtigungen

Das Sicherheitssystem ist relativ einfach gestrickt. Jeder Datei wird ein User und eine Gruppe zugeordnet

Die User werden zentral in einer zentralen User-Liste abgelegt. Ein User ist auch immer Mitglied einer Gruppe. Bei den Berechtigungen können dann 9 Berechtigungsstufen gelesen werden

drwxr-xr-x 2 user1 users  1024 Feb 23 13:30 Manip

Im Aufbau User-Gruppe-Rest

r read w write x execute

Das Regelwerk zieht von fein nach grob, dH wenn der User weniger Rechte hat als seine Gruppe, hat zieht die Einschränkung


Um eine Datei auszuführen, reicht x. read-Rechte braucht man dann, wenn die Datei "gelesen" werden muss, wie zb. eine Textdatei

Bei einem Verzeichnis benötigt man lesen, um das Verzeichnis aufrufen zu können. um Dateien löschen, umbenennen und löschen zu können, muss w gesetzt zu sein. Mit x kann man ins Verzeichnis einsteigen.

2^0 --- 1 ---- x

2^1 --- 2 ---- w

2^3 --- 4 ---- r


modifizieren

drwxr-xr-x

chmod [datei] o-r

würde "others" "r" wegnehmen


  • umask würde die Standardberechtigungen "modifizieren". Dies gilt auch beim Kopiervorgang! Eine berechtigung von 777 würde durch die umask 002 zu 775

Spezialberechtigungen

sstrwxrwxrwx die ersten drei;)

t--->sticky-Bit, für directorys oder binary

s--->SGID, für directorys oder binary

s--->SUID, nur für .bin


Da ein User, dank der Verzeichnisberechtigungen, eine Datei aus einem Gemeinschaftsverzeichnis löschen kann, kann das "sticky-bit" gesetzt werden. Dieses bedeutet, dass ein User nicht die datei eines anderen Users löschen kann. SEHEN kann man dies am T oder t

-rwxrwx--T   --- wenn KEIN x drunter gesetzt, 
-rwxrwxrwt   --- wenn ein x gesetzt ist
-rwsr-xr-x 1 root root 22960 Jul 17  2006 /usr/bin/passwd

das s bedeutet hier, dass das Ausführen des Befehls mit den Rechten des Eigners laufen, hier unter root (-->SUID) Dies gilt analog auch für SGID

Input/Output/Redirection

Es können 10 Kanäle verwendet werden, 0-2 sind verwendet: StandardInput 0 StandardOutput 1 StandardError 2

Die anderen Kanäle wären für zb Kommunikation in Scripts. Der StandardInput schreibt die Datei, als wären die Parameter per Keyboard eingegeben werden


Verschiedene Kommandos, wie zB cat, erwarten sich einen StandardInput

cat file.txt

hier wird cat ein Argument mitgegeben

cat 0< file.txt

hier löst die shell file.txt auf, und schickt dies an cat

tr 'a-z' 'A-Z' < file.txt

schreibt nun den im file.txt geschriebenen Text in Großbuchstaben zurück


sort < files.txt

würde die Zeilen in file.txt sortieren


Redirection mit Pipes

ls -l | more

lässt eine seitenweise Betrachtung zu

Nicht alle Prozesse lassen Pipes zu, im Prinzip aber jedes Kommando, welches STI verwenden kann


Anpassen der Arbeitsumgebung

Shell

In der passwd steht nebem dem Home-Dir unter anderem auch die gestartete shell. Diese kann auch geändert werden

chsh

Startupscripts

werden in der Reihenfolge

  1. /etc/profile
  2. ~/.bash-profile
  3. ~/bashrc
  4. /etc/bashrc

abgearbeitet

1-4 gilt für login-shells, 3, 4 für Login-shells

Plattenmanagement

[root@station20 ~]# cat /proc/partitions
major minor  #blocks  name
  8     0  311427072 sda
  8     1     104391 sda1
  8     2   18434587 sda2
  8     3     522112 sda3
253     0    8388608 dm-0
253     1     491520 dm-1


sd -- SCSI, SATA, USB hd -- IDE (auch cd/dvd!)

hda -- Primary Master hdb -- Primary Slave hdc -- Secondary Master ... dm -- DeviceMapper: Die


Anders bei SCSI.

scd -- SATA CD/DVD


mittels

cat /proc/scsi/scsi

werden die SCSI-Laufwerke angezeigt

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
 Vendor: ATA      Model: WDC WD1602ABKS-1 Rev: 3B04
 Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi0 Channel: 00 Id: 01 Lun: 00
 Vendor: ATA      Model: WDC WD1602ABKS-1 Rev: 3B04
 Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi0 Channel: 01 Id: 00 Lun: 00
 Vendor: Dell     Model: VIRTUAL DISK     Rev: 1028
 Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
 Vendor: PLDS     Model: DVD-ROM DH-16D3S Rev: SD11
 Type:   CD-ROM                           ANSI SCSI revision: 05

Der Name des CD-Laufwerks wird mit

[root@station20 ~]# ls -l /dev/cdrom

angezeigt:

lrwxrwxrwx 1 root root 4 Mar  8 08:56 /dev/cdrom -> scd0

Da sich der Devicename nach dem anstecken einer weiteren Disk ändern kann, wird mit LABELS gearbeitet, welche beim Erstellen des Dateisystems angelegt werden. So kann weiter auf die Platten und deren Partitionen zugegriffen werden, auch wenn sich der Name ändert.

Andere Systeme arbeiten mit der UID

blkid
/dev/mapper/vol0-home: UUID="8ecb4304-7135-4350-ab85-25246fa90eaa" TYPE="ext3" 
/dev/mapper/vol0-root: UUID="9118a09a-7fb4-4791-a42d-89c954021776" TYPE="ext3" 

Die UUID bleibt immer die gleiche...

Partitionen

Im ersten Sektor , im Block0, im MBR, liegt der Bootloader und die Partitiontabelle. Aufgrund der Größe des Blocks (512Byte) können nur 4 Partitionen (->Primäre!) angelegt werden. Von den 4 Partitionen kann eine als "Erweitert" erstellt werden. In dieser erweiterten Partition können dann 15 (SCSI) oder 63 (IDE) Partitionen erstellt werden


fdisk

beim fdisk-Kommando muss die komplette Platte angegeben werden

[root@station20 mapper]# fdisk /dev/sda 

The number of cylinders for this disk is set to 38770.
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): p

Disk /dev/sda: 318.9 GB, 318901321728 bytes
255 heads, 63 sectors/track, 38770 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        2308    18434587+  8e  Linux LVM
/dev/sda3            2309        2373      522112+  82  Linux swap / Solaris

Aufgrund der Start- und Endzylinder und der Information, 38770 Zylinder, kann gesehen werden, dass noch Platz auf der Platte frei ist. Diese Partitiontabelle sollte (!) bei der Serverdoku mitabgelegt werden, mit Hilfe dieser könnten Systemwiederherstellungen im Fehlerfalle erfolgreich sein. Jede Partition bekommt eine Partition-ID zugewiesen. Mit dieser ID wird dem Kernel die Funktion dieser Platte mitgeliefert, so kann er die entsprechenden Module laden. Mit fdisk erstellte IDs ersetzen nicht das Formatieren...

Mittels

partprobe

wird die neue Tabelle übernommen (die neue Tabelle wird dem Kernel mitgeteilt)

Partprobe ist Teil des Paketes "Parted", in Debian installierbar:

apt-get install parted

LVM

Logical Volume Manager Ähnlich den dynamischen Datenträgern in Win. Die zur Verfügung stehenden Platten werden einer Gruppe zugeordnet. Es werden pro Platte eine Partition erstellt, diese werden in einen Container geworfen. Nun kann die Größe der dort dann in weiterer Folge erstellten Partitions im laufenden Betrieb verändert werden (online vergrößern, zum verkleinern muss die Partition unmounted werden)

Diverses

Module

um die in System vorhandenen Disks anzuzeigen, kann folgendes verwendet werden:

fdisk -l

Wenn eine Platte nicht erkannt wird, kann wieder

dmsg

zu Hilfe genommen werden. Ein Boot wird an

 Command line: ro root=/dev/vol0/root rhgb quiet

erkannt. Weiter unten werden Indormationen zu den Disks angezeigt

SCSI subsystem initialized

Sollte hier die Disk nicht aufscheinen, kann es ein Problem mit dem Plattentreiber geben

unter /lib/modules/[kernel] liegen die Module, welche geladen werden können. In den unterverzeichnissen /drivers/scsi wären die Treibermidule zu finden


modinfo

unter

modinfo

kann die Info zu den jeweiligen Modulen ausgelesen werden

Sollten nun Module benötigt werden, welche vom Kernel trotz der neuester Version nicht unterstützt werden, muss nachinstalliert werden, entweder durch .rpm oder via sources

Im /boot-Verzeichnis, neben dem Kernel, liegt auch eine Config-Datei. In dieser sind alle Treiber zu finden, welche für diesen Kernel kompiliert worden sind

-rw-r--r-- 1 root root   65941 Sep 21 10:42 config-2.6.18-164.2.1.el5

In diesem File bedeutet y "fix", ein "m" bedeutet hingegen, dass es ein Modul dafür gibt So gibt es zB. für UDFS ein Modul.


lsmod

Stellt fest, welche Module im laufenden Betrieb geladen wurden

lspci

zeigt an, welche Geräte erkannt werden


modprobe

mit

modprobe

können Module hinzugefügt, mit modprobe -r wieder entfernt werden. Der Vorteil von modprobe zu ismod ist das Auflösen der Abhängigkeiten. modprobe konsulitiert auch eine config-Datei (modprobe.conf)


mkinitrd

Module beim Starten werden mit

mkinitrd -f -v --with=[modul] ...

geladen

/proc/sys

hier kann das System etwas "getuned" werden. So kann zB

/proc/sys/net/icmp_echo_ignore_all 

bearbeitet werden. Diese Dateien werden befüllt

Mit

sysctl -A

werden alle möglichen Werte ausgelesen. Dieses Tool hat eine Configdatei, die

/etc/sysctl.conf

Diese wird am Ende des Systemstarts abgearbeitet, das heisst, Änderungen in dieser Datei überstehen auch einen Neustart.

/dev

Hier liegen die Devices. Mittels

mknod

könnten Geräte erstellt werden (IDR nur mehr im Wiederherstellungsfall via Band)

udevd

Dieser Daemon generiert die Devs bei Bedarf, das Regelwerk dahinter liegt in

/etc/udev/rules.d/

/etc/init.d

Hier liegen die Services. Daemons sollten nur über das Script gestartet werden, zb

/etc/init.d/vsftpd start

So würden sie Configs mitgeladen

shell

es gibt verschiedene Arten:

  • sh --> Bourne-Shell (aus SV)
  • csh --> C-Shell (aus BSD)
  • ksh --> Kornshell
  • bash --> Bourne-Again Shell (Weiterentwicklung aus Obrigem)
  • tcsh --> TC-Shell
  • uvm


echo $SHELL

liefert die verwendete Shell


Die shell erwartet Befehle im Aufbau

command options arguments

also

  1. WAS soll getan werden
  2. WIE soll es getan werden
  3. WO soll es angewendet werden

wobei in der Linux-Welt die Reihenfolge egal ist, es können auch Argumente zwischen Optionen gebaut werden


Mit der Option wird das Kommando gesteuert, dh -a bei ls würde die versteckten Dateien mitanzeigen. Als Argument /tmp nachgebaut würde eine Liste der Dateien, inklusive der versteckten, im Verzeichnis /tmp liefern


so ist

ls /tmp --all /boot -l

das selbe wie

ls -all -l /tmp /boot

Optionen beginnen IMMER mit einem Bindestrich Sogenannte "Longoptions" beginnen mit einem doppelten Bindestrich

mit

--help

werden sämtliche möglichen Optionen aufgelistet


bei

ls --all -l /tmp

wäre nun /tmp die Option, die in dieser Befehlskette den Inhalt des /tmp-Verzeichnisses auflistet

Variablen

  • Variablen werden in "" gesetzt, damit sie als ein Ausdruck auftreten

Da die Shell die "" auswertet, kann das Hochkomma in Hochkomma gesetzt werden. Weiters kann der \ verwendet werden, der besagt, dass das nachfolgende Zeichen NNICHT von der shell ausgeführt werden soll

Im "" werden \ $ ! ` mit aufgelöst, im einfachen nicht


Anzeigen von Variablen in der aktiven shell:

set

Wird von der shell ein weiterer Subprozess aufgerufen, muss "export" angeführt werden, damit die in der Quell.shell definierten Variablen mitgenommen werden. Ansonsten sind die Variablen wieder leer

Befehle

Befehle können nur ausgeführt werden, wenn der User den Pfad dazu angegeben hat. Dies kann angezeigt werden mit

[student@station17 doc]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/student/bin

Stimmt allerdings nur bedingt, denn mit einer genauen Pfadangabe kann das kommando trotzdem ausgeführt werden


/etc/rc.local

hier könnten mit "modprobe" Module nachgelanden werden. rc.local ist eine Art "autoexec.bat"



echo $?

hier kann UNMITTELBAR nach dem Absetzen eines Befehls der Exitcode angeschaut. War das Kommando erfolgreich, ist die Zahl "0"

Bsp:

[user1@station17 ~]$ touch  vf.r
[user1@station17 ~]$ mv vf.r rr.l
[user1@station17 ~]$ echo $?
0

zu

[user1@station17 ~]$ mv vf.r rr.l
mv: cannot stat `vf.r': No such file or directory
[user1@station17 ~]$ echo $?
1

lsof

listet alle offenen Files des gesamten Systems

df

liefert Informationen über das Filesystem, wie auch die Mountpoints df -k liefert Informationen über das Filesystem, wie auch die Mountpoints df -i zeigt die mögliche Anzahl der Inodes

cat

dieser Befehl gibt den Inhalt einer Datei aus

cat /etc/motd

mit cat kann allerdings eine Datei auch befüllt werden:

cat > /etc/motd
Verschwinde!!

(Ausstieg mit [Strg-D])

nun kann der Erfolg wieder an der neuen MotD überprüft werden:

cat /etc/motd

liefert nun

Verschwinde!!

su -

so wird, im Unterschied zum "su" ein richtiger Login vollzogen, das bedeutet, dass alle root-Scripts geladen werden


ls

ls -a

listet auch versteckte Dateien auf (in Verzeichnissen!!)

ls .*

würde eine versteckte Datei anzeigen

ls -l

listet mit Rechten, Gruppen und Datum aus

ls -F

kennzeichnet bei ls den Filetyp, praktisch, wenn die Farbfunktionen nicht vorhanden sind

ls -R

zeigt auch den Inhalt von Unterverzeichnissen

ls -d

zeigt das Verzeichnis, aber nicht den Inhalt

id

bringt

uid=500(student) gid=500(student) groups=500(student) context=user_u:system_r:unconfined_t

also die Gruppe, den User und die IDs dazu

whoami

bringt meinen Usernamen

who am i

hingegen liefert auch die Art der Anmeldung, so auch, ob remote angemeldet wurde

w

liefert eine Übersicht über die aktiven Sessions, ebenso auch die verwendete shell:

[student@station17 ~]$ w
13:44:10 up  1:36,  4 users,  load average: 0.29, 0.10, 0.03
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                12:10    1:33m  0.02s  0.02s -bash
student  :0       -                12:10   ?xdm?   2:19   0.16s /usr/bin/gnome-session
student  pts/1    :0.0             12:11    0.00s  0.18s  0.13s ssh 127.0.0.1
student  pts/2    localhost.locald 13:43    0.00s  0.03s  0.01s w


[ctrl] r

sucht kürzlich verwendete Befehle, die zB eine bestimmte Zeichenfolge enthalten (aus bash)

history

liefert eine Liste der abgesetzten Befehle, per def die letzten 1000

[student@station17 doc]$ history

   1  ping 4.2.2.2
   2  ping 4.2.2.2
   3  ping 4.2.2.2
   4  ping 4.2.2.2
   5  su
   6  su -
   7  ifconfig
   8  iflist
   9  su
  10  su -
  11  who am i
  12  w
  13  uname
  14  uname -a
  15  free
  16  uptime
  17  uptime
  18  info man
  19  ll
  20  cd /log
  21  cd /usr/share/doc
  22  ll
  23  hist
  24  history 
!2

würde nun das Kommando mit der Nummer 2 wieder ausführen

[student@station17 ~]$ !2
ping 4.2.2.2
PING 4.2.2.2 (4.2.2.2) 56(84) bytes of data.
64 bytes from 4.2.2.2: icmp_seq=1 ttl=245 time=16.7 ms
64 bytes from 4.2.2.2: icmp_seq=2 ttl=245 time=18.6 ms

whatis ls

würde anzeigen, was der Befehl "ls" macht

man ls

ruft die Manual-pages für ls auf. Mit q kann aus den MAN-Pages wieder ausgestiegen werden. Mit /[Wort] kann in den MAN-Pages eben dieses Wort gesucht werden, es wird dann im Text Hervorgehoben. Die Manpages sind in Sektionen aufgeteilt:

             1 Commands
                       Those commands that can be executed by the user from within a shell.
             2 System calls
                       Those functions which must be performed by the kernel.
             3 Library calls
                       Most of the libc functions, such as qsort(3).
             4 Special files
                       Files found in /dev.
             5 File formats and conventions
                       The format for /etc/passwd and other human-readable files.
             6 Games
             7 Conventions and miscellaneous
                       A description of the standard file system layout,  network  protocols,  ASCII  and
                       other character codes, this man page, and other things.
             8 System management commands
                       Commands like mount(8), many of which only root can execute.
             9 Kernel routines
                       This  is  an obsolete manual section.  Once it was thought a good idea to document
                       the Linux kernel here, but in fact very little has been documented, and the  docu-
                       mentation that exists is outdated already. There are better sources of information
                       for kernel developers.





man 5 shadow

liefert nun die Konfig-Datei zu "shadow". Per def wird die erste gefundene angezeigt. mit

whereis shadow

bekommt man nun die Information

 /etc/shadow /usr/include/shadow.h /usr/share/man/man3/shadow.3.gz /usr/share/man/man5/shadow.5.gz

was bedeutet, dass zusätzlich zum Kommando MAN-PAges aus den Sektionen 3 und 8

which

Findet ebenso Befehle

ANOsrv01:/home/another# which tee
/usr/bin/tee

apropos list

liefert eine Liste an Kommandos, in denen "list" vorkommt. Ist ein Link auf "man -k"

uname -a

zeigt das Betriebssystem (Linux), den Hostname, den verwendeten Kernel

Linux station17.example.com 2.6.18-164.el5PAE #1 SMP Tue Aug 18 15:59:11 EDT 2009 i686 i686 i386 GNU/Linux

free

liefert eine Statusinformation zum verwendeten Speicher

uptime

bringt die uptime und die durchschnittliche prozessorlast

 13:51:28 up  1:43,  4 users,  load average: 0.04, 0.06, 0.02

info

Sind ein Ersatz zur MAN-Page, mit dem Vorteil, dass eine Art Menü verwendet werden kann. Der Menüpunkt kann mit den Cursortasten angesteuert werden, und mit "Enter" ausgewählt werden


du

du -sh /*

würde die Größe der Partitionen angeben


touch

gibt der nachfolgenden Datei einen aktuellen Zeitstempel mit


head

Liefert die ersten Zeilen eines befehls am Bildschirm


tee

damit kann der Standardoutput in ein File geleitet und gleichzeitig am Bildschirm anzeigen

renice

mit diesem Befehl kann man die Prozesspriorität verandern. Die Priorität kann sich von -20 bis 19 bewegen, wobei -20 die höchste, 19 die niedrigste Priorität hat. Der Befehl

/usr/bin/renice -20 9985

setzt also den Prozess mit der ID 9985 auf die höchste Priorität

Herunterfahren/Neustarten

[student@station17 ~]$ halt -p
[student@station17 ~]$ reboot

darf auch als lokal angemeldeter User ausgeführt werden

Gut zu wissen

USB-Unterstützung

Linux unterstützt USB ab Kernel 2.2.9 standardmäßig, allerdings ist auch dort die USB-Unterstützung noch im Status "experimentell"

Alias einrichten

sollten aliases eingerichtet werden, die auf allen Terminals für alle User gilt, muss das Alias in der Datei

/etc/.bashrc

geändert werden. Die .bashrc ist auch in den jeweiligen User-Homeverzeichnissen zu finden, Aliases, die in

/home/student/.bashrc

eingetragen werden, gelten dann nur für den jeweiligen User

Dateien leeren

> error.log

Somit ist die Datei leer, besitzt auch noch die alte Inodenummer


`

touch file-`date '+%d'`.log

somit wird die Ausgabe eines Kommandos als Option eines anderen verwendet

touch file-$(date '+%d').log

wäre das gleiche ergebnis, eine etwas "neuere" schreibweise

date '+%d' | xargs echo Heute ist der

VI

VI Befehlsreferenz

Der VI arbeitet in einer 3-Fenster-Technik

  • INSERT/INPUT/REPLACE-Mode
  • COMMAND-Mode
  • LINE-Mode



Die ~ im Kommandomodus weisen auf nichtvorhandene Zeilen hin M.H. von H, J, K, L oder den Cursortasten kann in dem File navigiert werden


Durch den Start gelangt man direkt in den COMMAND-Mode Durch i gelangt man in den Insert-Mode, und kann eine Eingabe machen, mit esc oder strg3 kann wieder auf den COMMAND-Mode gestiegen werden. Mit ZZ wird gespeichert ind VI beendet

mit : steigt man in den Line-Mode mit :q! lässt sich beenden, ohne zu speichern

:x, :wq wäre auch speichern und beenden
dd wäre zeile löschen
dw wort löschen
yy Zeile kopieren (6yy würde 6 zeilen nach oben kopieren)
yw wort kopieren
p,P fügt das in der Zwischenablage gehaltene unterhalb/oberhalb ein
:help
u, U für Undo, das U macht die Änderungen in der ganze Zeile rückgängig
/ im KommandMode, um zu suchen
R bringt in einen Replace-Mode, das bedeutet, jeglicher Text kann überschrieben werden. esc beendet diesen Mode
d$ leert eine Zeile, von der akruellen Cursorposition bis zum Ende der Zeile
:set number  schalzet die Zeilennummerierung ein
:3,10w FILE speichert die Zeilen 3 bis 10 nach FILE
:r FILE fügt FILE an der Cursorposition ein


.exrc wäre eine Startup-Datei, die, erstellt und angepasst, den VI eben angepasst starten lässt. Hier kann "set number" gesetzt werden

VirtManager

Der VirtManager ist eine Virtualisierungssoftware

* yum install virt-manager
* yum install kernel-xen
* yum install kvm
* virtmanager starten, mittels virsh via Konsole

libvirtd muss ebenso aktiviert werden


setenforce 0

Regular Expressions

. ein beliebiges Zeichen
[^] negation
* sagt aus, dass das davorstehende Zeichen einmal, keinmal oder mehrmals vorkommt :
 grep 'ro*t' passwd findet rot, root, ... und alle worte, die rt beinhalten
.* würde sinngemäß für alles stehen...
^ steht für "am Anfang der Zeile"
$ am Ende der Zeile
\ das Sonderzeichen wird nicht ausgewertet


grep '[0-9][0-9]*' passwd

durch diese Kombination wird das "keinmal" umgangen...

grep -v '^#' squid.conf | grep -v '^$'

-v wäre hier negieren
'^$' filtert leere Zeilen raus
grep '^[^#]' squid.conf

ein Zeichen am Zeilenanfang, aber kein #

FNG <> RegE

* eines, keines oder viele .*
? eines .
[] eines von dazwischen []
[!] [^] nicht von denen dazwischen [^]
[-] von - bis [-]
~ home n/a
n/a eines, keines oder mehrere *
n/a am anfang der Zeile ^ 
n/a $ am Ende der Zeile

Dateien suchen und packen

locate greift nicht auf das aktuelle Datensystem zu, sondern sucht in einer des Nächtens erstellten Datenbank

find

IDR wird nach Dateien mit einem gewissen Namen gesucht, es kann aber auch nach Datum (modify, create, access, change), Rechte, UID/GID, Dateityp, Größe, Inode-Nummer ... gesucht werden (Einträge in der Inode-Table)

funktioniert etwas anders als ein std-Unixkommando:

find [arg] [-longoption]

time find / -name '*.pdf' -exec echo Datei {} gefunden \; 2> /dev/null

sucht alle pdf, schmeisst Fehler weg und schreibt die Zeit für den Suchvorgang. Es werden die gefundenen Dateinamen zwischen den {} ausgegeben. Der find-Befehl kann ein Kommando mit starten (hier exec)). Er startet diese Datei nach jedem Fund

-ok statt -exec würde nachfragen, wenn ein Zielobjekt gefunden wurde. Diese Frage kommt allerdings auf 2, als standard-Error raus, daher wäre die Umleitung nach /dev/null zu entfernen

-o wäre eine oder-Verknüpfung


find / -name 'pdf' -size '+1M'

würde nun alle Dateien. welche mit pdf enden, und >1MB sind liefern

find / -perm -002 -ls 2> /dev/null | wc -l

liefert alle Dateien, welch bei "others" ein "w" gesetzt haben, die Fehler wandern nach d0, und er Wordcount wäre mitgeliefert

find / -perm -002 \( -type f -o -type d \) -ls 2> /dev/null | wc -l

sucht nach Dateien und Ordnern, auf die die Berechtigung von oben zutrifft

find -type f | xargs echo "Datei gefunden: "

fügt den Standardoutput hinter dem Kommando nach (hier echo)

find -type f -exec echo "Datei gefunden: "{} \;

Liefert eine Liste der gefundenen

echo "Datei gefunden: " $(find -type f)

hier wird ein Kommando ausgeführt, wobei das Input für dieses Kommandos aus der Argumentliste $() kommt. Diese Liste arbeitet die shell ab

for X in $(find -type f); do echo $X wird kopiert; cp $X /tmp; done

würde eine Schleife erstellen, in der jedes Ergebnis des $() in die Variable X übergeben wird, welche dann mit der Ausgabe "wird kopiert" kopiert wird

find / type f -exec grep -il Entschuldigung {} \;

würde die Files von / weg auf den Inhalt "Entschuldigung" durchsuchen

grep

mit grep werden Textzeilen in einer Textdatei gesucht

grep user /etc/passwd

würde aus der passwd alle Zeilen suchen, in denen "user" steht

grep user -c /etc/passwd

würde die Summe der Funde schreiben

grep 'user.:' /etc/passwd

würde nach allen Usern suchen, die nur eine Buchstaben/Ziffer hinter user stehen haben

egrep

extended grep



fgrep

fast grep unterstützt keine regular expressions, daher können keine filter verwendet werden

Packen

cpio

ein "paralleles" Tool zu tar, heute eher selten verwendet

cpio erwartet sich eine liste der Files, die gesichert werden sollen

find . | cpio -ov > /tmp/home.cpio
cpio -it < /tmp/home.cpio

liest wieder das Verzeichnis ein (Anzeigen)

cpio -i < /tmp/home.cpio

stellt das Verzeichnis wieder her

tar

tar -c --- erstellen
tar -x --- entpacken
tar -t --- betrachten
z|j|J --- compress in gzip|bzip2|xy-Format
-l beschränkt tar am lokalen Filesystem, ansonsten würde es den gesamten Baum, auch Netzlaufwerke, mitsichern
-f wäre der Filename

Beim Sichern sollte mit relativen Pfadangabe gesichert werden:

tar clvzf /tmp/myhome.tar.gz .

Hier würde das aktuelle Verzeichnis (.) nach /tmp gesichert, und komprimiert

tar -xpvf /tmp/myhome.tar.gz . Würde auch Spezialberechtigungen wieder herstellen
Installation mittels Quellcode
  • nach /usr/local/src legen
  • tar -xvzf [tar.gz], nun ist ein Verzeichnis angelegt
  • in dieses einsteigen, ./configure mit "echo $?" kann auch hier der Erfolg überprüft werden
  • make
  • make install, dieses kann nur von root durchgeführt werden

Komprimieren

gzip--->gunzip
bzip2--->bunzip2
zip (kann packen und komprimieren) --->unzip

PacketManager

RPM

-i install

-v verbose
-h Statusanzeige bei der Installation
rpm -ivh [file]

wobei das File auch auf einem entfernten ftp/http-Server liegen kann

-e erase

rpm -e [paketname]


-U update

rpm -Uvh [File]

es wird das alte Paket deinstalliert, die Konfigfiles bleiben erhalten, migriert die config in die neue Version.


Kernel update

Es wird ein neuer Kernel DAZUinstalliert, im Bootmanager wird der neue vorgereiht daher

rpm -ivh kernel-2.6.18-164.1.gls.el5.i686.rpm

-F fresh

wie U, nur, es installiert nur die Pakete, die installiert sind (wenn dem rpm mehr Pakete mitgegeben würden als installiert)

-q Abfragen

rpm -qa | sort | less   anzeigen aller installierten Pakete
-qi  bringt die Info zum Paket
-ql  zeigt die Dateien, die im RPM enthalten sind
-qp --scripts überprüft das Script, welches vor Installation/Deinstallation ausgeführt wird
-qf zeigt, aus welchem Paket die Datei kommt
-q --c zeigt die Konfigurationsdateien

-K Signaturcheck

-V Überprüfen

JUM

Dies ist ein Frontendtool zur Verwaltung von Abhängigkeiten

cd /etc/yum.repos.d

Hier liegt eine edetierbare Beispieldatei. Nach dem Anpassen dieser wird die Datenbank neu aufgebaut, mit

yum list
yum install [Paketname]

würde dieses nun, inklisive aller Abhängigkeiten erfüllen



Nun kann auch nach nicht installierten Befehlen gesucht werden:

yum provides '*iostat'


yum remove 

würde Pakete wieder sauber entfernen


yum check-update
yum update

würde ein Update veranlassen

Anlegen eines Rep

Im Serververzeichnis der DVD dindet sich ein Verzeichnis "repodata". In diesem Verzeichnis liegt eine Datenbank, welche yum benötigt Mittels

createrepo

würde eine solche DB erstellt werden

In

/etc/Yum/repo.d/

wird eine neue repo angelegt, in der die folgenden Einträge zu setzen sind

baseurl=file:///rep/Server
enabled=1

wobei 'rep' im Pfad der Mountpoint des Repos wäre

ein anschließendes

yum clean all

würde die neue Einstellung übernehmen

Tools

aptitude

DNSutils

apt-get install dnsutils

ermöglicht host, nslookup und dig [domain]


dump2fs

dumpe2fs /dev/sda6 | less

zeigt u.a. an, für wann ein Filesystem-Check vorgesehen ist


sed

ermöglicht, eine Datei zu editieren, ohne sie zu öffnen. Damit könnte zB im laufenden Betrieb eine Squid-Konfigdatei ändern. sed würde sich nur auf den standard-Output ausgeben, die Ausgabe kännte allerdings mit >datei2.txt umgeleitet werden


sed -p '1,4' datei.txt

würde aus der Datei die Zeilen 1-4 anzeigen

sed -1,4d' datei.txt

würde die Zeilen 1-4 löschen

sed 's/mars/venus/' planeten.txt 

tauscht mars durch venus aus um in einer Zeile Zwei Argumente auszutauschen (2x mars durch venus), müsste die Kolge so heissen, um ein d erweitert:

sed 's/mars/venus/' planeten.txt 

-e erlaubt Kommandos anzufügen

sed -e '2asonne' -e 's/mars/venus/' planeten.txt

sed kann nicht nur nach Zeilennummern, auch nach Ziffernfolgen suchen. So kann nun

sed '/start/,/stop/s/mars/pluto/' planeten.txt

Hier kann auch ein File mit den Argumenten angegeben werden. Bei der Reihenfolge der in den Files angewendeten Befehle wird immer von der Originaldatei ausgegangen, somit kommen sich die einzelnen Befehle nicht in die Quere

sed -f sedargs.txt planeten.txt


-i verändert die Originaldatei#


2iTEST

würde an die 2. Zeile TEST einfügen


Um nun in einer squid.conf ein "allow" durch ein "deny" auszutauschen, könnte nun folgendes verwendet werden:

sed -i '/network2/s/allow/deny/' squid.conf
sed -i '/^http_access.*network2$/s/deny/allow/' squid.conf


Um in einer Datei rund um die dort enthaltenen Zahlen eine eckige Klammer zu setzen kann folgendes verwendet werden

sed 's/[0-9][0-9]*/[&]/g' hosts.txt

wobei & der Inhalt der vorher gefundenen Variable wäre

sed 's/\(example\).\(com\)/\2.\1/ hosts.new

würde "example" mit "com" vertauschen, wobei die beiden "Werte" durch die () als Variablen mit Nummern definiert werden, auf die danach beim zusammensetzen wieder zurückgegriffen wird

rsync

"spiegelt" Verzeichnisse, überträgt nur Änderungen

rsync -avH /home/user1 /tmp/user1

rsync via ssh

rsync -av --delete -e ssh [user]@[host]:/[entferntes Verzeichnis]/ /[lokales verzeichnis]/

das "--delete" sorgt dafür, dass Dateien, welche am Quellrechenr gelöscht wurden, ebenso am Zielrechner gelöscht werden


dd

dd if=/dev/sda1 of=myusbstick.img

macht ein img des Sticks, direkt über die Platte. Das Filesystem ist hier völlig uninteressant, es wird Block für Block verwenden

(mit dvdrecord ksnn dies nun das img auf eine DVD gebrannt werden)

dd if=/dev/zero of=/tmp/dummy.iso bs=1024 count=100000

würde eine leere .img erstellen, 100MB groß

mkfs.vfat /tmp/dummy.img

erstellt nun ein Filesystem in die Datei

mount -o loop /tmp/dummy.iso /mnt

mountet die Datei nun nach /mnt

mit fdisk -s /dev/sda1 würde sich die Blockanzahl für die Erstellung eines .img eines USB-Sticks feststellen lassen

Quotas

Mit Quotas wird Plattenplatz für User beschränkt. Diese Quotas können pro Filesystem eingesetzt werden. Allerdings kann der User auch auf Inodes und Blocks beschränkt werden. Auch kann so eine Übersicht gewonnen werden, wer wieviele Inodes/Blöcke verwendet, wenn die Quotas nur passiv eingesetzt werden.

Es können Hard- und Softlimits gesetzt werden, wobei das Softlimit nach einer Zeit zu einem Hardlimit werden kann

quotas werden in der fstab gesetzt


/dev/vol0/home          /home                   ext3    defaults,usrquota               1 2
LABEL=data              /data                   ext3    defaults,usrquota,grpquote      1 3

die Konfig muss noch übernommen werden:

mount -o remount /data
mount -o remount /home

Nun muss die Quota-Datenbank (Blöcke, Inodes) angelegt werden, um den IST-Stand zu übernehmen

quotacheck -umc /home && quotaon /home
quotacheck -ugmc /data && quotaon /data

Nach dem Ausführen findet sich im jew. Verzeichnis aquota.user. Die Quotas müssen sofort mitgegeben/übernommen werden, damit es zu keinen Datenschiefständen kommen kann.

Zu diesem Zeitpunkt wird nur reportet. Mittels

repquota /home

kann der Report angeschaut werden

[root@station20 home]# repquota /home

*** Report for user quotas on device /dev/mapper/vol0-home
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   10547       0       0              5     0     0       
student   --   42378       0       0            238     0     0       


mit

edquota [user]

wird das File des Users geöffnet, und es können die Soft- bzw Hardlimits gesetzt werden

User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   10547       0       0              5     0     0       
student   +-   92585   50000 2000000  7days     247   260   700        

würde nun bedeuten, dass der User "student" über das Softlimit gestoßen ist. Er kann allerdings noch bis zum Hardlimit weiterarbeiten, muss allerdings in der festgelegten Zeit das SL wieder unterschreiten


edquota -t

ließe die Veränderung der Zeit (Std: 7d) zu

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
 Filesystem             Block grace period     Inode grace period
 /dev/mapper/vol0-home                  7days                  7days
 /dev/sda6                     7days                  7days
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Werkzeuge