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