Dienstag, 28. Januar 2014

Performance Probleme beim Booten mit resume

Performance Probleme beim Booten mit resume

Nach einem Umzug auf eine neue SSD ist mir aufgefallen, dass meine Boot-Zeit von Ubuntu 12.04 um etwa 5 Sekunden länger gedauert hat als sonst. Daraufhin begab ich mich auf die Suche nach dem Problem. Die Syslog Datei brachte nur einen kleinen Hinweis zu Tage, dem ich vorerst durch googlen versucht habe nachzugehen. Das Ergebnis war aber nicht zufriedenstellend, da mir nur Informationen mitgeteilt wurden, dass das Root-System unsauber gemountet wurde. Auch nach einem sauberen umount trat das Problem allerdings auf.

In der Zeitausgabe vom Kernel als Log in der Syslog Datei erschien ein Timeout von etwa 5 Sekunden.

Jan 28 22:53:41 desktop kernel: [    4.530862] usb 1-3.4.3: New USB device found, idVendor=0a12, idProduct=0001
Jan 28 22:53:41 desktop kernel: [    4.530868] usb 1-3.4.3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Jan 28 22:53:41 desktop kernel: [    8.783308] EXT4-fs (sda2): INFO: recovery required on readonly filesystem
Jan 28 22:53:41 desktop kernel: [    8.783310] EXT4-fs (sda2): write access will be enabled during recovery
Jan 28 22:53:41 desktop kernel: [    8.943384] EXT4-fs (sda2): recovery complete
Jan 28 22:53:41 desktop kernel: [    8.952596] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
Jan 28 22:53:41 desktop kernel: [    9.414274] EXT4-fs (sda2): re-mounted. Opts: errors=remount-ro,user_xattr,discard
Jan 28 22:53:41 desktop kernel: [   10.845742] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: errors=remount-ro,discard

Jan 28 22:53:41 desktop kernel: [   10.855497] EXT4-fs (dm-1): mounted filesystem with ordered data mode. Opts: errors=remount-ro

In den Logs tauchten folgende Infos nicht auf, welche ich aber auf dem Boot-Screen gesehen habe, nachdem ich die quiet und splash Parameter aus der /etc/default/grub Konfigurationsdatei entfernt habe.

Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... done.
Begin: Running /scripts/local-bottom ... done.
done.
Begin: Running /scripts/init-bottom ... done.

Danach habe ich die initrd auf dem System entpackt und bin den Boot-Prozess Step-by-Step durchgegangen.

[Desktop /]# mkdir /tmp/initrd↵
[Desktop /]# cd /tmp/initrd↵
[Desktop /tmp/initrd]# cp /boot/initrd.img-3.8.0-35-generic /tmp/initrd/initrd.gz↵
[Desktop /tmp/initrd]# gunzip initrd.gz↵
[Desktop /tmp/initrd]# cat initrd | cpio -id↵
[Desktop /tmp/initrd]# less init↵


Dabei ist bin ich auf das Script scripts/local-premount/resume gestossen, welches versucht hat das System von einer Swap-Partition herzustellen die nicht mehr existiert hat.

Den entsprechenden Parameter habe ich auf dem Desktop-System in der Datei /etc/initramfs-tools/conf.d/resume gefunden und komplett entfernt. Die Initrd habe ich danach mit dem Befehl:
[Desktop /root]# update-initramfs -u↵
neu erstellt. Danach bootete das System die vorhin genannten 5 Sec schneller.


Legende

Benutzer Root
[<Servername> <Pfad>]# <Befehl> <Dateiname>↵
Ausgabe

Benutzer
[<user>@<Servername>]$ <Befehl> <Dateiname>↵
Ausgabe

Tastenkombinationen:
Strg+a

Einzelne Tasten:


a

Dienstag, 18. Juni 2013

SLES 11 SP2 SMT Server - Howto

SLES 11 SP2 SMT Server - Howto

Einleitung

Der SMT Server ist eine freie Software zur einfachen Systemverwaltung von SUSE Linux Enterprise Servern (SLES10, SLES11). Er dient primär zur lokalen Verwaltung von den von SUSE zur Verfügung gestellten Reposiories um Netzwerktraffic zu sparen und einen besseren Überblick über seine Systemlandschaft zu gelangen. Neben den von SUSE zur Verfügung gestellten Repositorys können aber auch noch eigene hinzugefügt werden. 
Ein weiterer Vorteil des SMT ist die Möglichkeit ein Stageing von z.B. Test und Produktivumgebungen in der eigenen Serverlandschaft darzustellen. 
Neben diesen Funktionen bietet er auch die Möglichkeit Scripte zentral vom SMT aus auf den Clients auszuführen.

In diesem Howto beschreibe ich, wie ich den SMT nutze und wie am Ende die Ausgaben auszusehen haben. Bei der Installation verweise ich dabei auf die recht gute und ausgearbeitet SUSE Dokumentation.

Voraussetzung

NCC Zugang (Novell Customer Center)

Mindestens 3 Aktive Subscriptions für SLES 11 SP2

Einen Server

Name: server-smt
Betriebssystem: SLES 11
Netzwerkadapter:
eth0: 192.168.1.200
LVM Volume:
/dev/VolGroup00/smt 80 GB -> /var/lib/smt

Pakete:
SLES: smt

Anzahl Clients

Name: client1
Betriebssystem: SLES 11
Netzwerkadapter: eth0: 192.168.1.201

Name: client2
Betriebssystem: SLES 11
Netzwerkadapter: eth0: 192.168.1.202


Installation/Konfiguration

Das Subscription Management Tool steht frei zur Verfügung und kann bei SUSE https://download.suse.com/index.jsp in der Suche unter dem gleichnamigen Begriff runtergeladen werden. Die Installation läuft unter einer normal installierten SLES Instanz.

Unter der SLES Installation kann das runtergeladene Addon in YaST2 unter dem Punkt "Software" - "Add-On Product" hinzugefügt werden. Hierbei wird als Installationquelle die CD ausgewählt und die Installation nach Bestätigung der Lizenzvereinbarungen gestartet.

Eine ausführliche Installationsanleitung gibt es von SUSE unter dem folgenden Link:
Bei der Konfiguration ist drauf zu achten, dass der Domainname incl. Domain (FQND)  im ganzen Netzwerk erreichbar ist, da es sonst zu Problemen mit den vom SMT erstellten SSL Zertifikaten kommt.

Sobald die Server Konfiguration durchgeführt wurde geht es daran die Clients an das System anzubinden. Mit der folgenden Befehlsreihenfolge bin ich bisher immer gut gefahren:


Kopieren des Scripts clientSetup4SMT.sh auf die Clients:
[root@<server-smt> ~]# scp -rp /usr/lib/suseRegister/bin/clientSetup4SMT.sh root@client01: ↵
[root@<server-smt> ~]# scp -rp /usr/lib/suseRegister/bin/clientSetup4SMT.sh root@client02: ↵

Löschen der vorhandenen Repositories, dies verhindert, dass der Server noch auf die lokal Konfigurierten CD/DVSs zugreift, die häufig nicht mehr eingebunden sind:
[root@<client1> ~]# rm -rf /etc/zypp/repos.d/* ↵

Konfiguration des Clients:
[root@<client1> ~]# ./clientSetup4SMT.sh https://server-smt.bludau.home/center/regsvc ↵

Sollten eigene nicht zertifizierte Repositories mit eingebunden werden helfen noch folgende Befehle weiter, welche noch einmal nachfragen, ob nicht zertifizierte Pakete zugelassen werden.
[root@<client1> ~]# suse_register --restore-repos
[root@<client1> ~]# zypper ref

Anwendung

Im folgenden Absatz werden die wichtigen Befehle gelistet um den SMT Server zu benutzen.

Eine Liste aller angebundenen Clients und deren aktuellen Status gibt der Befehl smt-client aus. Der Status sollte möglichst auf Up-to-date sein, dies ist aber nicht immer realsierbar.


[root@server-smt ~]# smt-client ↵
.-----------------------------------------------------------------------------------------------.
| GUID                             | Hostname              | Patch Status | Patch Status Date   |
+----------------------------------+-----------------------+--------------+---------------------+
| 12345678901234567890123456789012 | client1               | Up-to-date      | 2013-06-17 12:17:31 |

| 12345678901234567890123456789013 | client2               | Critical     | 2013-06-17 12:15:07 |
'----------------------------------+-----------------------+--------------+---------------------'
[root@server-smt ~]#

Der SMT Server bietet die Möglichkeit einen Report zu generieren, in dem dargestellt wird, wie viele Subscription man aktuell hat und wie lange diese noch gültig sind.
[root@server-smt ~]# smt-report

Um den SMT Mirror auf den aktuellen Stand zu bringen reicht es aus den folgenden Befehl auszuführen. Sollen die Updates ständig eingespielt werden, kann dieser Befehl auch als Cronjob gestartet werden.
[root@server-smt ~]# smt-mirror


Sonntag, 16. Juni 2013

iscsi Basis - Howto

iscsi Basis - Howto

Einleitung

In diesem Howto beschreibe ich den Grundaufbau einer minimalen iscsi Umgebung. Hierbei handelt es sich um den Aufbau eines iscsi Servers und die Anbindung von einem Client an den zur Verfügung gestellten Pfad.

Vorraussetzungen

Einen Server

Name: server

Zwei Netzwerkadapter
eth0: 192.168.1.200
eth1: 192.168.201.200

LVM Volume:
/dev/VolGroup00/iscsi 1 GB

Pakete:
RedHat: scsi-target-utils

Zwei Clients

Name: client1

Zwei Netzwerkadapter
eth0: 192.168.1.201
eth1: 192.168.201.201

Pakete:
RedHat: iscsi-initiator-utils.x86, sg3_utils-1.28-4.el6.x86_64, lsscsi-0.23-2.el6.x86_64

Howto

Konfiguration Server

Auf dem Server wird nach der Installation der benötigen Pakete die Konfigurationsdatei target.conf angepasst. In Ihr werden als target Name ein eindeutiger iqn (iSCSI Qualified Name) benötigt. dieser befindet sich in dem <target> Tag. 
Der zur Verfügung stehenden Speicherplatz wird mit dem Parameter backing-store festgelegt. Hier bietet es sich an ein freies Blockdevice zu nehmen. Im Fall des Howtos ein frisch angelegtes LVM Device.
Mit dem Parameter initiator-address werden die definierten IP Adressen freigegeben und der Parameter scsi_sn legt die SCSI Seriennummer fest, welche später über udev ausgelesen werden kann.

[server ~]# cat /etc/tgt/targets.conf ↵
default-driver iscsi
# Target ist ein eindeutiger Name
<target iqn.2013-06-01.home.bludau:iscsi>

  backing-store /dev/VolGroup00/iscsi # LUN1

  initiator-address 192.168.1.200     # server
  initiator-address 192.168.201.201     # client1
  scsi_sn iscsi-seriennummer # SCSI Seriennummer

</target>
[server ~]#

Nach dieser Konfiguration muss der Dienst tgtd gestartet und als Service eingetragen werden.

[server ~]# service tgtd start ↵
[server ~]# chkconfig tgtd on ↵

Nach dieser Konfiguration kann mit dem folgenden Befehl überprüft werden, ob auch alle Konfigurationen wie gewünscht übernommen wurden.


[server ~]# tgt-admin -s ↵
Target 1: iqn.2013-06-01.home.bludau:iscsi
 ...
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: iscsi-seriennummer
            Size: 1074 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/VolGroup00/iscsi
            Backing store flags: 
    Account information:
    ACL information:
        192.168.1.200
        192.168.201.201
[server ~]# 

Hinter dem Target-Namen ist die iqn gelistet unter welcher das iscsi Device zur Verfügung steht. Backing Store gibt den auf dem Server genutzten Pfad aus und die ACL Informationen geben die IP Adressen zurück, für welche die iSCSI Targets freigegeben sind.

Konfiguration Clients

Um einen Client anzubinden ist die Konfiguration vom iscsi Daemon notwendig. Dieser kann mit folgenden Befehlen automatisch gestartet werden:
[client1 ~]# chkconfig iscsid on ↵
[client1 ~]# service iscsid start ↵

Danach ist die Anbindung vom Client an das iscsi Target vom Server notwendig. Um sich alle Freigaben anzeigen zu lassen hilft das Programm iscsiadm weiter, welches mit den Parametern "-m discovery -t sendtargets -p 192.168.201.200" vom Server her alle Targets gelistet bekommt.

Diese Freigabe wird dann genutzt um das Target an das System zu binden.

Anbinden des iscsi Targets bei dem Client client1:

[client1 ~]# lsscsi ↵
...
[client1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.201.200 ↵
192.168.201.200:3260,1 iqn.2013-06-01.home.bludau:iscsi
[client1 ~]# iscsiadm -m node -T iqn.2013-06.home.bludau:iscsi -p 192.168.201.200 --login ↵
[client1 ~]# lsscsi ↵
...
[6:0:0:0]    storage IET      Controller       0001  -       
[6:0:0:1]    disk    IET      VIRTUAL-DISK     0001  /dev/sda 
...
[client1 ~]#

Ausgabe aller Informationen die unter UDEV ausgelesen werden können, dazu gehören unter anderem auch die Seriennummer:
[client1 ~]# udevadm info -q all -n /dev/sda ↵
...

Das ganze funktioniert auch um das Device wieder zu entfernen. Hierbei ist bei dem zweiten Commando aber darauf zu achten, dass anstelle des login Parameters logout angegeben wird. Zusäztlich sollte man vorher unbedingt darauf achten, dass die darauf erstellen Filesysteme ausgehängt wurden.

Entfernen von des iscsi Device von dem Client client1:

[client1 ~]# lsscsi ↵
...
[6:0:0:0]    storage IET      Controller       0001  -       
[6:0:0:1]    disk    IET      VIRTUAL-DISK     0001  /dev/sda 
...
[client1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.201.200 ↵
192.168.201.200:3260,1 iqn.2013-06-01.home.bludau:iscsi
[client1 ~]# iscsiadm -m node -T iqn.2013-06.home.bludau:iscsi -p 192.168.201.200 --logout ↵
[client1 ~]# lsscsi ↵

Legende

Benutzer Root
[<Servername> <Pfad>]# <Befehl> <Dateiname> ↵
Ausgabe

Benutzer
[<user>@<Servername>]$ <Befehl> <Dateiname> ↵
Ausgabe

Tastenkombinationen:
Strg+a

Einzelne Tasten:
a

Samstag, 4. Mai 2013

Datenrettung von CD/DVDs mithilfe von PhotoRec/TestDisk

In meinem Blogeintrag "Datenrettung bei I/O Fehlern mit ddrescue" habe ich bereits geschrieben wie man Daten von einer Festplatte sichern kann.

Heute habe ich eine CD bekommen, welche mit I/O Fehlermeldungen Meldungen unter Linux und Windows ausgestiegen ist. Leider konnte ich sie nicht mal öffnen, da mir mitgeteilt wurde, dass das Filesystem beschädigt war.

Da ich wusste, das die Daten (Bilder) auf der CD vorhanden sind, habe ich nach einer Lösung gesucht um diese wieder herzustellen.

Über ein ddrescure habe ich den Großteil der CD auf meiner Platte gespeichert. (dd if=/dev/sr0 of=/home/thomas/sr0.img) und dann versucht darüber zu mounten. 


mount: wrong fs type, bad option, bad superblock on /dev/sr0,
       missing codepage or helper program, or other error
       Manchmal liefert das Syslog wertvolle Informationen – versuchen
       Sie  dmesg | tail  oder so

Leider hat dieser Versuch auch mit der gleichen Fehlermeldung geendet wie bei dem Versuch die CD direkt einzubinden.

Über einige Suche nach UDF Restore bin ich dann über den Befehl photorec gestossen, welcher ein Teil des Ubuntu-Packges testdisk ist.

Über eine menügesteuerte Übersicht konnte ich einen Großteil der Daten von meinem zuvor erstellten dd Image sichern.

Die Optionszeile lautet wie folgt:
photorec [/log] [/debug] [/d recup_dir] [device|image.dd|image.e01]

Durch die Eingabe des folgenden Befehls konnte ich meine Daten über das Menü wieder herstellen. Die Bilder befanden sich danach in dem Verzeichnis daten.1 :

# photorec /d daten sr0.img

In den folgenden Bildern werden die von mir durchgeführten Schritte noch im Programm grafisch dargestellt:


Als Auswahl des Filesystem hat es hier völlig ausgereicht Others auszuwählen.


Mittwoch, 27. Februar 2013

chgrp - Howto Grundlegende Systembefehle


Heute habe ich mich nach mehrmonatiger Abstinenz mal wieder die Zeit für einen neuen Eintrag in meinem Blog gefunden.

Weiter mache ich mit dem mehrteiligen Teil der "Grundlegenden Systembefehle". Durch die alphabetische Abarbeitung ist diesmal der Befehl chgrp an der Reihe.


chgrp

chgrp ändert die Gruppenberechtigungen für Dateien. Der Befehl setzt sich aus dem englischen "change group" zusammen.

Wichtig zur Benutzung:

Über den Befehl chgrp kann der Gruppenbesitzer einer Datei geändert werden. Dies ist im einfachsten Fall zur Änderung einer Datei oder Ordnerberechtigung wie folgt möglich:
chgrp <Gruppe> <Dateiname/Pfad>


Beispiel:
# chgrp users /home/thomas

Wir gehen hierbei davon aus, dass die Gruppe "users" eine Gruppe für alle Anwender ist und die Gruppe "meinegruppe" eine Gruppe nur für den Benutzer "thomas" ist. Gesetzt ist im Vorfeld die Gruppe "meinegruppe"

Das Ergebnis sieht nach dem Ausführen des Befehls oben wie folgt aus:
root@desktop:/home# ls -lah
...
drwxr-xr-x 63 thomas   users    16K Feb 26 22:59 thomas
root@desktop:/home# 

Um die Gruppberechtigung wieder nur dem ursprünglichen Benutzer zuzuweisen wird der Befehl wieder wie folgt ausgeführt:
# chgrp meinegruppe /home/thomas

Ergebnis:

root@desktop:/home# ls -lah
...
drwxr-xr-x 63 thomas   meinegruppe  16K Feb 26 22:59 thomas
root@desktop:/home#


Bisher haben wir nur dein Ordner ohne die Inhalte geändert. Um rekursive Änderungen über ganze Verzeichnisbäume durchzuführen hilft der Parameter -R weiter.

Achtung: Der folgende Befehl ändert die Gruppenzugehörigkeit aller Dateien und Unterordner im Verzeichnis /home/thomas auf den Gruppenbenutzer "users"
# chgrp -R users /home/thomas

Nice to Know

Die Parameter -v & -c zeigen beim Ausführen an, welche Dateien geändert wurden. Bei -v werden alle Dateien angezeigt, welche von chgrp benutzt werden. -c zeigt nur die Dateien an, welche auch wirklich geändert werden.

Besteht der Bedarf bei einer Rekursiven Änderung auch alle Ordner welche in dem Verzeichnis verlinkt sind zu verändern helfen der Parameter -L oder -H weiter. 

-L Ändert nur die Berechtigung für das Verzeichnis.
-H Ändert auch alle Dateien in dem unterliegendem Verzeichnis.


Hier ist allerdings Vorsicht angebracht, wenn man im Vorfeld nicht überprüft hat, wohin die Links führen. Standardmäßig werden die Dateien und Ordner hinter Links über den chgrp Befehl nicht mehr beachtet.



cat chgrp chmod chown cp date dd df dmesg echo false
hostname kill ln login ls mkdir mknod more mount mv ps
pwd rm rmdir sed sh stty su sync true umount uname

Weitere Informationen zum Thema grundlegende Systembefehle:

http://goo.gl/HxZ1N

Mittwoch, 7. November 2012

vi Mikro-Referenz

vi Mikro-Referenz

Diese "vi Mikro-Referenz", habe ich erstellt, um eine knappe Übersicht der grundsätzlichen vi Befehle einfach darzustellen. In diesem Beitrag sind alle Befehle beschrieben um den vi Unfallfrei zu bedienen und um damit Dateien zu Öffnen, Inhalte zu speichern und die Texte zu editieren (Hinzufügen von Text, Löschen von Text, Zeilen kopieren und löschen).

Zu diesem Eintrag habe ich mich entschieden, da ich während der letzten Monaten häufiger nach bestimmten Befehlen bzw. der grundsätzlichen Bedienung von vi gefragt wurde. 

Bedienung


Im Vorfeld ist es wichtig zu wissen, dass es drei Moden gibt. Dabei handelt es sich um den Kommandomodus, den Eingabemodus und den Befehlszeilenmodus.

vi startet immer im Kommandomodus, welcher auch der Modus ist, in den wir durch das drücken von  ESC  immer wieder zurück kommen. Von diesem Modus aus können wir den Eingabemodus und den Befehlszeilenmodus starten.

Wichtig: Wenn man nicht weiter kommt, zwei mal ESC drücken! 

Der Kommandomodus ist erst gestartet, wenn -- INSERT --, -- REPLACE --, oder andere Bezeichnungen wie z.B: :" nicht mehr in der letzten Zeile stehen.

Datei öffnen / Datei neu anlegen
desktop:~ # vi <Dateiname>

Insert-Modus starten
Bitte im vi nach während des Kommandomodus folgendes eintippen:
i  
In der letzten Zeile des vi erscheint der Begriff: -- INSERT --. Danach kann nach Auswahl des Cursors ein beliebiger Text eingegeben werden.

Zeichen löschen
Kommandomodus durch aufrufen von ESC öffnen.
Den Cursor mit den Pfeiltasten zur auf das zu entfernende Zeichen bewegen:
x oder ENTF drücken um das ausgewählte Zeichen zu löschen.

Datei Speichern
Kommandomodus starten. Die aktuell geöffnete Datei wird durch starten des Befehlszeilenmodus durch den Doppelpunkt und Eingabe von w für write gepeichert.
:w Enter 

Kommt es zu Problemen mit der Schreibberechtigung im Dateisystem kann ein Ausrufezeichen dem entgegenwirken:

:w! Enter 


Datei schliessen
Solange eine Datei nicht editiert wurde, kann der vi durch den folgenden Befehl beendet werden. q steht hierbei für Quit.
:q Enter 

Sollte die Datei bearbeitet worden sein und man möchte sie ohne Änderung schliessen, hilft auch hier wieder ein Ausrufezeichen weiter:
:q! Enter


Nice to Know


Zeile löschen
Will man eine ganze Zeile löschen kann man dies im Kommandomodus nach Auswahl der Zeile mit dem Cursor wie folgt durchführen:
dd 

Mehrere Zeilen löscht man mit der Folgenden Eingabe:
<Anzahl der Zeilen> dd 

Zeile Kopieren und Einfügen
Eine komplette Zeile kann unter vi nach Auswahl der Zeile mit dem Cursor im Kommandomodus wie folgt kopiert werden. 
yy 

Möchte man mehrere Zeilen kopieren funktioniert dies wie folgt:
<Anzahl der Zeilen>yy 

Bsp: 3yy  kopiert 3 Zeilen.

Um die kopierte Zeile wieder einzufügen reicht die Eingabe des folgendes Befehls im Kommandomodus:
p 

Freitag, 2. November 2012

cat - Howto Grundlegende Systembefehle

Nachdem ich mir heute den Filesystem Hierarchy Standard angeschaut habe um mir den Unterschied zwischen /bin und /sbin anzueignen sind mir die folgenden, auf allen Unix-System vorhandenen Befehle ins Auge gefallen. Diese sind über die Linux Standard Base (lsb), welches den FHS beinhaltet vorgegeben.

In diesem mehrteiligem Howto möchte ich diese grundlegenden Befehle einmal beschreiben und fange der Einfachheit halber alphabetisch mit dem Befehl cat an.


cat

cat ist ein Programm zur Ausgabe von Inhalten von Dateien. 

Wichtig zur Benutzung:

Dateien können wie folgt ausgegeben werden:
cat <Dateiname>

Beispiel:
# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash 
bin:x:1:1:bin:/bin:/bin/bash 
daemon:x:2:2:Daemon:/sbin:/bin/bash 
lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash 
...

Um Dateien besser analysieren zu können gibt es noch weitere Möglichkeiten sich zusätzliche Inhalte der Datei anzeigen zu lassen. Um nicht auf alle Parameter einzugehen gibt es einen umfassenden Parameter, welcher einen Großteil zusammenfasst. Dieser lautet, wie häufig unter Linux "-A".

Der Vorteil hierbei ist, dass wir sehen können ob eine Datei einen korrekten Inhalt hat. Sinnvoll ist dies, wenn z.B. Dateien von einem Windows System kopiert wurden und diese eine inkompatible Formatierung haben, welche aber über vi oder dem normalen cat Befehl nicht sichtbar ist. Häufig liegt die Fehlerursache an einem anderen nicht sichtbaren Zeilenende.

Über diesen Parameter kann man überprüfen ob die Datei im richtigen Format gespeichert ist. 
# cat -A /etc/hosts

127.0.0.1^Ilocalhost.localdomain^Ilocalhost$
::1^Idesktop^Ilocalhost6.localdomain6^Ilocalhost6$
127.0.1.1^Idesktop$
$
#


Zum Vergleich gibt cat ohne den Parameter folgendes aus:
# cat /etc/hosts

127.0.0.1       localhost.localdomain   localhost
::1             desktop  localhost6.localdomain6 localhost6
127.0.1.1       desktop

#

Nice to Know

Bei einigen Systemen bin ich auf Probleme gestoßen, welche erst nach intensiver Suche auf ein falsches Datei-Format hinwiesen. Eine normale Ausgabe von cat zeigt die fehlerhaften Steuerzeichen in einer Datei nicht an.

Sollte z.B. eine Datei unter Windows erstellt oder editiert worden sein, kann es bei einigen Programmen zu Problemen wegen des falschen Zeilenumbruchs kommen. Dieser verrät sich durch ein Zusätzliches ^M vor dem Zeilenende.


127.0.0.1^Ilocalhost.localdomain^Ilocalhost^M$
$
::1^I^Idesktop^Ilocalhost6.localdomain6^Ilocalhost6$
^M$
127.0.1.1^Idesktop^M$
^M$
$
$

Sollte die Datei wie oben gezeigt aussehen gibt es zwei Möglichkeiten. Entweder die Datei wird neu unter Linux erstellt oder, nicht ganz so schlimm, ein Programm zum Ändern des Formats wird genutzt. Hierbei hat mir recode immer gute Dienste erwiesen.



cat chgrp chmod chown cp date dd df dmesg echo false
hostname kill ln login ls mkdir mknod more mount mv ps
pwd rm rmdir sed sh stty su sync true umount uname

Weitere Informationen zum Thema grundlegende Systembefehle:

http://goo.gl/HxZ1N