Linux-Einsteiger-Kurs – Teil 4 (Umgang mit Dateien)
Im letzten Teil haben wir die ersten Gehversuche im Dateisystem gemacht und es gab ein wenig Theorie.
Heute werden wir uns weiter mit dem Dateisystem befassen, weitere Befehle lernen und vor allem mit Dateien befassen.
Eine Übersicht der Kursinhalte findest Du hier
Starte schon mal Dein virtuelles Debian und logge Dich als normaler User ein.
Dateien anlegen und verschieben
Im dritten Teil haben wir Verzeichnisse angelegt und gelöscht, jetzt werden wir das mit Dateien kombinieren.
Du solltest Dich in Deinem Home-Verzeichniss befinden, ansonsten mit cd ~ reingehen. Dort sollte es auch noch das Verzeichnis “test” geben. Wenn nicht mit mkdir ~/test das Verzeichnis erstellen und wechseln wir in das Verzeichnis mit cd ~/test.
Nun wollen wir eine Datei anlegen:
touch hallo.txt
Der Befehl touch hat zwei Funktionen. Falls keine Datei vorhanden ist, dann wird diese mit Deinen derzeitigen Benutzerrechten erstellt. Falls die Datei schon vorhanden ist, dann wird diese mit der aktuellen Zeit aktualisiert (touch = berührt).
Der Dateiname “hallo.txt” ist kein üblicher Name für ein Unix-File. Denn bei Unix, Linux und Mac gibt es keine Erweiterung mit drei Buchstaben. Deshalb werden wir die Datei umbenennen:
mv hallo.txt hallo
Damit wird die Datei “hallo.txt” in “hallo” umbenannt bzw. verschoben. Der Move-Befehl mv hat auch zwei Funktionen. Er kann durch das Verschieben am selben Ort zum umbenennen verwendet werden oder mit Angabe eines neuen Zieles auch zum Verschieben (und bei Bedarf gleichzeitigen Umbenennen). Verschieben wir mal die Datei und benennen sie dabei gleich mal um:
mv hallo ../hello
Und auf etwas andere Weise mal wieder zurück:
mv ~/hello .
Durch den Punkt “.” wird das derzeitige Verzeichnis angegeben. Wir verschieben also das “hello” wieder zu uns (ohne es umzubenennen).
Natürlich können wir das Verzeichnis mit dem Befehl mv umbenennen oder auch den gesamten Verzeichnisbaum (also mit Daten die darunter liegen verschieben). mv unterscheidet sich von Arbeitsweise hier nicht zwischen Dateien oder Verzeichnissen.
Löschen
cd ~/test mkdir -p 1/2/3
Damit wird ein Verzeichnis “1″, darunter “2″ und dann eines mit dem Namen “3″ erstellt. Zuständig ist dafür der Parameter -p.
Nun versuchen wir mit dem Befehl, den wir im dritten Teil gelernt haben, dieses Verzeichnis zu löschen:
rmdir 1
Wir bekommen eine Fehlermeldung:
rmdir: failed to remove `1': Directory not empty
Der Befehl rmdir entfernt nur Verzeichnisse, die leer sind und auch keine Dateien. Dafür gibt es den (wenn auch gefährlicheren) Befehl rm:
rm -r 1
Ohne den Parameter -r würden wir auch eine Fehlermeldung bekommen. Er steht für “recursive”, also auch alle Inhalte zu löschen.
Je nach Linux Distribution kommt ein Warnhinweis zur Löschbestätigung. Bei Debian kommt dieser nicht. Falls eine Meldung kommt und man möchte diese nicht haben, dann rm -fr verzeichnisname eingeben. Das -f steht für “force”. Natürlich kann mit rm -r sehr viel kaputt gemacht werden. Deshalb sollte er sehr man sehr aufpassen, was man damit macht. Deshalb kann man mit rm -ir eine Sicherheitsabfrage vor dem löschen anzeigen lassen.
Man könnte auch folgenden Befehl verwenden, um die drei Verzeichnisse zu löschen:
rmdir -p 1/2/3
Dann wird aber nichts gelöscht, wenn Dateien enthalten sind und man muss die Pfade genauer angeben. Dafür ist es sicherer.
Wildcards und Kopieren
Zuerst legen wir ein paar Dateien in unseren Test-Verzeichnis an:
cd ~/test touch test1.txt touch test2.txt touch Test1.txt touch Tom1.txt touch test1.foo touch test2.foo touch txt.txt touch txt.foo touch testtxt touch testfoo
Mit dem bekannten Befehl ls oder ls -l können wir uns diese Liste nun genauer ansehen. Hier sieht man auch nochmals, dass “test.txt” und “Test.txt” zwei unterschiedliche Dateien sind. Dies ist immer wieder wichtig zu wissen, da man als Windows-Anwender darauf unter Unix/Linux öfter hereinfällt.
Nun wollen wir etwas mit Wildcards spielen.
Anzeigen aller Dateien mit “.txt”:
ls *.txt
Dies ist nicht so spannend, da es unter Windows auch so ist. Man könnte nun auch eingeben:
ls *txt
Hier wird nun auch die Datei “testtxt” angezeigt.
Oder man gibt es so ein:
ls *txt*
Damit kann “txt” irgendwo im Dateinamen vorkommen.
Nun wollen wir es etwas schwieriger machen:
ls ?e*.t*
Hiermit wird folgende Ausgabe erzeugt:
test1.txt Test1.txt test2.txt
Das Fragezeichen “?” steht für einen freies Zeichen an dieser Stelle. Darauf soll ein “e” folgen, alle weiteren Zeichen bis zum Punkt sind egal, danach kommt ein “t” und der Rest ist auch egal.
Nun kommen wir zur Unterscheidung der Groß- und Kleinschreibung:
ls [Tt]est*
Die eckige Klammer bietet gewisse Alternativen zu verwenden. Im oberen Beispiel kann der Dateiname also mit einem großen oder auch kleinen “T” anfangen.
Dies kann bei fast allen Befehlen angewendet werden.
Kopieren mit Wildecards und die TAB-Taste
Der Befehl cp steht für “copy”. Hier gibt es auch den Parameter -r, wie z.B. bei mkdir. Er funktioniert natürlich auch mit Wildcards:
mkdir ziel cp *.foo ziel ls -l ziel
Nun versuchen wir das Verzeichnis “ziel” nach “ziel2″ zu kopieren:
cp ziel ziel2
Wir bekommen eine Fehlermeldung. Denn hier wird wieder der Parameter -r benötigt:
cp -r ziel ziel2
Nun möchten wir aus dem Verzeichnis “ziel” eine bestimme Datei kopieren, deren Namen wir gerade genau wissen. Sie fängt mit einem “te” an. Bevor wir hier mit ls ziel/te* nachsehen, können wir auch die “TAB-Taste” verwenden.
cp ziel/te nun die “TAB-Taste” drücken. Nun sollte am Bildschirm stehen cp ziel/test. Wenn man nun nochmals die “TAB-Taste” drückt, hört man nur einen Piepston. Nochmals “TAB” drücken und es werden alle Dateien angezeigt, die der Eingabe entsprechen. Wir möchten “test1″ haben und geben nun noch eine 1 ein und drücken nochmals “TAB”. Nun sieht man folgende Zeile cp ziel/test1.foo. Du kannst nun mir der “TAB-Taste” weiter spielen. Sie funktioniert auch bei Befehlen! rm und 2x “TAB” zeigt “rm” und “rmdir” an.
Sonderzeichen und Leerzeichen
Möchte man ein Verzeichnis mit dem Namen “Das ist ein Test” erstellen, dann kann man die nicht so tun:
mkdir Das ist ein Test
Wir würden vier Verzeichnisse erstellen! Richtig wäre:
mkdir "Das ist ein Test"
Eine Alternative wäre:
mkdir Das\ ist\ ein\ Test
Der Backslash “\” wird bei Sonderzeichen verwendet. Hier wäre es auch möglich ein “?” oder “*” im Namen zu verwenden. Die würde mit \? bzw. \* gemacht.
Bei Linux ist alles eine Datei
Mit cat kann man Dateien zur Standardausgabe schicken. Die Standardausgabe ist in unserem Fall die Console.
cat /etc/hosts
Dies gibt in meinem Fall diesen Inhalt auf der Console aus:
127.0.0.1 localhost 192.168.178.11 debian.schimana.lan debian # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
Nun könnte man auch die Datei in eine anderen Datei umleiten:
cat /etc/hosts >hoststest
Jetzt wird der Inhalt in die Datei “hoststest” geschickt.
Nun ist es interessant zu wissen, dass unsere Console auch nur eine Datei ist:
tty
Mit tty> wird die derzeitige Console angezeigt. In meinem Fall /dev/tty1.
cat /etc/hosts >/dev/tty1
Nun haben wir die Datei einfach am Bildschirm angezeigt. Nah super. Warum der Aufwand?
Nun drücke doch einfach mal “ALT + F2″ (also die ALT-Taste zusammen mit der F2-Taste). Die kommst an eine weitere Console und mit “ALT + F1″ kommst Du wieder zurück.
Jetzt könntest Du auf die Idee kommen, den Text auf eine andere Console zu schicken:
cat /etc/hosts >/dev/tty2
Dieser Versuch wird mit einer Fehlermeldung quittiert, da wir unzureichende Rechte haben.
Gehe mit “ALT+F2″ auf die zweite Console und logge Dich dort mit dem gleichen Benutzer, wie an der ersten Console, an. Danach wechsle an wieder mit “ALT+F1″ und wiederhole den Befehl:
cat /etc/hosts >/dev/tty2
Wenn Du nun auf die zweite Console gehst, wirst Du den Text sehen.
Der Root-User
Mit dem Benutzer Root kann man dies auch ohne weitere Anmeldung tun. Dazu musst Du Dich nun entweder an ein der Consolen (Debian hat 6 Stück als Standard) als Benutzer root anmelden oder Deinen normalen User zu root hochschalten:
su root
Es wird nach dem Kennwort von root gefragt.
Jetzt schicken wir mal ein freundlichen Hallo an die dritte Console (an der wir noch nicht angemeldet sind):
echo "Hallo" >/dev/tty3
Der Befehl echo entspricht dem gleichen Befehl unter Windows und gibt einen Text aus. Wir haben den Text an die dritte Console geschickt. Schalte dort mal hin und schaue Dir das Ergebnis an.
Gib exit ein, um wieder vom Root-User zu Deinem normalen User umzuschalten.
Ohne Angabe eines Benutzers, wird automatisch root verwendet su.
Wir waren nach dem “su root” im gleichen Verzeichnis, denn es wurde nicht die Umgebung geladen.
su -
Nun sind wir an einem anderen Ort und zwar im Home von root:
pwd
Damit sehen wir unser aktuelles Verzeichnis. Dieses ist /root. Nun ist es so, als wären wir wirklich als root eingeloggt.
Gehen wir wieder raus, damit wir am Anfang keinen Unsinn treiben:
exit
Bist Du Dir nun teilweise unsicher, wer Du gerade bist? Zum einen wird root mit einem “#” am Prompt-Ende angezeigt und dann kannst Du auch noch einen Befehl eingeben, um zu prüfen wer Du bist:
whoami
Aufräumen
Nun ein etwas gefährlicher Befehl zum aufräumen (DIESEN NICHT AUSFÜHREN!):
cd ~/test rm -rf *
Durch den Stern “*” in Kombination mit -rf könnte man als Benutzer “root” am falschen Ort z.B. alle Dateien der Platte löschen!
Deshalb sollte der Befehl besser so aussehen:
cd ~ rm -rf ~/test mkdir ~/test
Einen Befehl lernen wir heute doch noch:
su - shutdown --help
Mit --help wird bei jedem Befehl eine Kurzhilfe angezeigt (eine ausführliche Hilfe mit man shutdown).
Wir fahren unser System nun mit folgenden Befehl runter:
shutdown -H now
Dies entspricht dem Befehl halt und funktioniert sogar auf den ältesten Unix-System so. Der Parameter -H steht dabei für “Halt” und das “now” gibt die Zeit an.
Im nächsten Beitrag werde ich auf das Rechtesystem von Linux eingehen.
Eine Übersicht der Kursinhalte findest Du hier
Interessante Beiträge zu diesem Thema
- sysvconfig – Runlevel Editor
- Update auf Debian 5.0 (Lenny)
- Linux-Einsteiger-Kurs mittels Debian Linux – Teil 1
- Linux-Einsteiger-Kurs – Teil 2 (Debian Grundinstallation)
- Interessante Links

Hi Tom,
zu rmdir:
Wenn man “rmdir -p 1/2/3″ aufrufen würde, würden alle drei Verzeichnisse (1/2/3, 1/2, 1) gelöscht. Gut wenn man keine Dateien mitlöschen will, da würde rmdir dann meckern (im Gegensatz zu “rm -rf”).
Kleiner Tippfehler: “cp ziel/tx”
Noch einer (” am Schluss weg!):
mkdir Das ist ein Test”
Schöne Anleitungen!
Das war aber eine schnelle Rückmeldung.
Das mir rmdir ist eine gute Idee. Habe ich gleich mal mit eingebaut.
Tippfehler hab ich auch alle entfernt.
Das sieht man selbst immer alles nicht…
Interessant finde ich allerdings, dass immer nur Profis ein Kommentar schreiben. Scheinbar lesen keine Anfänger den Kurs. Da musst Du aber noch einige 100 Folgen waren, bis was für Fortgeschrittene kommt! ;-)
Danke!
Tom
[...] einiger Zeit habe ich einen Linux-Einsteiger-Kurs auf meinem Blog veröffentlich. Nach dem vierten Teil habe ich allerdings gestoppt. Scheinbar war das Interesse nicht all zu [...]
[...] Übersicht der Kursinhalte findest Du hier. Im vierten Teil geht es dann um den Umgang mit Dateien. SHARETHIS.addEntry({ title: "Linux-Einsteiger-Kurs – [...]