Linux – Dateinamen und/oder Verzeichnisse in Groß- oder Kleinschreibung umbenennen

Es gibt ein Kommandozeilen-Tool das Groß- oder Kleinschreibung wie auch in bestimmte Zeichensätze umbenennen bzw. konvertieren kann. Das Tool heißt convmv.

Unter openSUSE 11.x lässt sich das Tool sehr einfach in der Konsole installieren:

zypper in convmv

Wenn man alle Dateien und Verzeichnisse im aktuellen Verzeichnis in Kleinschreibung haben möchte, dann reicht dieser Befehl:

convmv --lower *

Wenn man aber alles in Großschreibung haben möchte, dann nimmt man die Option –upper anstatt –lower. Zur Vereinfachung bleibe ich in diesem kleinen HowTo bei der Kleinschreibung und gehe auf verschiedene Lösungswege ein.

Jedoch wird hier eine Liste mit den Änderungen ausgegeben. Somit kann man wunderbar verfolgen, wie das Tool bei der Umbenennung vorgeht.

Um die Umbenennung auch wirklich auszuführen, gibt man noch die Option –notest an:

convmv --lower --notest *

Wenn das Tool rekursiv durch alle Unterverzeichnisse arbeiten soll, dann fügen wir noch eine Option -r ein:

convmv -r --lower --notest *

Jetzt kommen wir mal zu einem Spezialfall. Wenn wir aber nur Dateinamen rekursiv durch alle Unterverzeichnisse umbenennen möchten, dann hilft uns in diesem Fall weitere Tools wie find und xargs:

find ./ -type f -print0 | xargs -r -0 convmv --lower

Erläuterung für find:
./ = In welchem Verzeichnis soll durchsucht werden (hier nur aktuelles)
-type f = Nur Dateien sollen berücksichtigt werden
-print0 = Jede Datei wird ein NULL-Zeichen als Trennzeichen angehängt, somit lassen sich die Dateiennamen bei der Übergabe an xargs besser auseinander halten

Erläuterung für xargs:
-r = nicht ausführen, wenn keine weiteren Argumente übergeben werden können (= leer)
-0 = NULL-Zeichen als Trennzeichen berücksichtigen.

Was ist mit dem schwierigsten Fall wie z.B. die Umbenennung von Verzeichnisnamen und das auch noch rekursiv durch alle Unterverzeichnisse? Nun man denkt einfach, dass man den o.g. Befehl -type f in -type d austauschen und ausführen kann. Spätestens bei der Umbenennung eines Unterverzeichnis dessen oberen Verzeichnisname sich geändert hat, würde das Vorhaben nur auf eine einzige Verzeichnistiefe beschränken. Alle darunterliegenden Verzeichnisse können somit nicht umbenannt werden.

Also verwenden wir ein etwas modifizierten Einzeiler und geben dem find die Option -depth mit, somit sollten die Verzeichnisse in korrekter Reihenfolge an convmv übergeben werden:

find ./ -depth -type d -print0 | xargs -r -0 convmv --lower --notest

Hinweis zum Tool find und der Option -exec:
Einige Linux-User verwenden statt xargs eher die Option -exec in find. Wobei ich vom Gebrauch der Option -exec expizit abraten würde. Ich verdeutliche es mal an einem Beispiel. Wenn find z.B. 5.000 Dateien findet, werden bei -exec auch 5.000 Prozesse hintereinander gestartet und das geht zu Lasten der System-Performance. Bei der Verwendung von xargs werden 5.000 Dateien als Argumente an das jeweilige Programm übergeben und benötigt nur 1 Prozess anstatt 5.000 Prozesse. ;-)

openSUSE 11.2 – Das gewünschte Betriebssystem für den Neustart mit dem Skript grubonce auswählen

In der Konsole kann man mit dem Skript grubonce das zu startende Betriebssystem aus dem Bootmenü (Grub) vorab wählen. Diese Methode eignet sich ganz gut, wenn man auf einem Server oder entfernten Desktop per SSH arbeitet. Somit kann man das 2. System starten, um z.B. bestimmte Probleme am 1. System zu beheben, die man im laufenden Betrieb nicht durchführen kann.

Einfach die Liste der Betriebssysteme mit grubonce in der Konsole aufrufen:

grubonce

Bei mir ist die Ausgabe:

0: Desktop -- openSUSE 11.2 - 2.6.31.5-0.1
1: Failsafe -- openSUSE 11.2 - 2.6.31.5-0.1
2: Fallback -- openSUSE 11.2

Jetzt kann ich ihm sagen, dass der Rechner beim Neustart das „Fallback-System“ (hier: 2) starten soll und übergebe ihm die Nummer in der Liste an grubonce:

grubonce 2

Jetzt könnt ihr den Rechner neustarten und das Betriebssystem eurer Wahl wird dann gestartet. ;-)

openSUSE 11.2 – mehrere Kernels parallel installieren

Im Normalfall wird der ältere Kernel unter openSUSE bei einem Update deinstalliert und der neue Kernel installiert. Dieses Verhalten stößt bei manchen Systemadministratoren auf Unverständnis. Das Problem lässt sich mit einem simplen Beispiel verdeutlichen. YaST2 bzw. zypper bietet ein Update zu einem neueren Kernel an. Man installiert daraufhin den neuen Kernel. Nach einem Neustart stellt man fest, dass der neuere Kernel eine Hardware-Komponente nicht mehr richtig anspricht. Auch ein Kernel-Panic ist vorstellbar, was zu einer Unbedienbarkeit des Systems führen kann.

Bevor wir uns ans Werk machen, müssen wir noch herausfinden, welche Kernel-Packages installiert sind. Dazu führen wir einfach in der Konsole folgenden Befehl aus:

zypper se -i kernel*

Bei mir sieht die Liste so aus:

Daten des Repositorys laden ...
Installierte Pakete lesen ...

S | Name                 | Zusammenfassung                                         | Typ
--+----------------------+---------------------------------------------------------+------
i | kernel-desktop       | Kernel optimized for the desktop                        | Paket
i | kernel-desktop-devel | Development files necessary for building kernel modules | Paket
i | kernel-source        | The Linux Kernel Sources                                | Paket

Jetzt öffnen wir die Konfigurationsdatei /etc/zypp/zypp.conf und suchen die Textstelle mit multiversion heraus:

##
## Packages which are parallel installable with
## diffent versions
##
# multiversion = kernel-default,kernel-smp 

Und fügen einfach anhand der vorliegenden Liste der installierten Kernel-Packages folgende Zeile ein:

multiversion = kernel-desktop,kernel-desktop-devel,kernel-source

Ab jetzt ist man wirklich auf der sicheren Seite und man kann nach einem Kernel-Update im Bootmenü die Kernels auswählen, die man starten möchte.

Linux – Partition mit ddrescue als Image sichern, mounten und retten

Hinweis: Hier wird auf das Tool ddrescue eingangen. Es existiert auch ein ähnlich klingendes Tool dd_rescue mit fast identischem Zweck. Jedoch sollte dd_rescue nicht mehr verwendet werden, weil das Tool veraltet ist. Zudem ist ddrescue eine komplette Neuprogrammierung. Ausserdem ist es auf Geschwindigkeit und geringere Fehleranfälligkeit beim Auslesen der Festplatte, einer Partition oder einer Datei optimiert.

Noch ein Hinweis für openSUSE 11.2 Nutzer:
In der aktuellen openSUSE 11.2 nennt sich das Package ddrescue, beinhaltet jedoch das veraltete Tool dd_rescue. Diese Package sollte in naher Zukunft ausgetauscht werden. Aus diesem Anlass empfehle ich das Package ddrescue direkt über mein Repo zu beziehen und zu installieren. http://download.opensuse.org/repositories/home:/Freespacer:/ddrescue/

Nun kommen wir zu unserem Thema Partitionssicherung. Für diesen Zweck verwende ich das Tool ddrescue. Es erstellt von einer Partition bzw. auch von einer Datei eine 1:1-Kopie. Das Tool hat auch ein nennenswerten Vorteil: Bei einem Lesefehler bricht es nicht ab, sondern macht einfach weiter. Hier hat das ältere dd_rescue das Nachsehen und quittiert hierbei seinen Dienst.

Um eine Partition z.B. /dev/sda3 in ein Image z.B. /home/benutzer/sicherung.img zu sichern, geben wir ihm folgenden Befehl:

# ddrescue [options] inputfile outputfile [logfile]
ddrescue /dev/sda3 /home/benutzer/sicherung.img

Jetzt können wir das Image ohne Probleme mounten. Es verhält sich so, als ob es eine echte Partition wäre. Man muss jetzt noch wissen, welches Dateisystem das Image hat. Und lässt sich mit folgendem Befehl schnell ermitteln:

# file [FILE...]
file /home/benutzer/sicherung.img

Als Ausgabe habe ich beispielsweise:

sicherung.img: Linux rev 1.0 ext3 filesystem data (large files)

Hier erkennen wir, dass es sich um ein ext3-Dateisystem handelt und geben die Option -t ext3 mit. Falls es abweichen sollte, bitte anpassen. Man kann diese Option auch weglassen. Jedoch muss man damit rechnen, dass das Einhängen des Images evtl. fehlschlagen wird, weil er das Dateisystem nicht kennt.

Nun können wir das Image mit der Option -r als schreibgeschützt mounten. Man kann auch dieses Image ohne Schreibschutz mounten. Dann wäre es aber eine sehr schlecht Kopie und könnte evtl. ein bereits defektes Dateisystem noch mehr kaputt machen. ;-) Da sich die Daten zwangsläufig verändern können. :-)

Zum Schluß haben wir noch eine Option -o loop und weisen damit dem mount-Befehl an, dass die lokale Image-Datei als Loop-Device ins derzeitige Dateisystem einbinden soll.

# Verzeichnis erstellen, in der wir das Image mounten wollen
mkdir -p /mnt/sicherung

# Image nur lesend mounten.
mount -r -t ext3 -o loop /home/benutzer/sicherung.img /mnt/sicherung

Um das Image wieder auszuhängen, genügt folgender Befehl:

umount /mnt/sicherung

Wenn die echte Partition wie auch das Image einen Fehler im Dateisystem hat, kann man auch auf diesem Wege sehen, wie der Fehler im Image behoben wird und ob er überhaupt behoben werden kann. Das Diagnose-Tool für das Dateisystem nennt sich hier fsck und wird wie folgt aufgerufen (hier ext3, sonst bitte anpassen):

fsck.ext3 -f /home/benutzer/sicherung.img

Als Ausgabe könnte es in etwa aussehen:

e2fsck 1.41.9 (22-Aug-2009)
Durchgang 1: Prüfe Inodes, Blocks, und Größen
Durchgang 2: Prüfe Verzeichnis Struktur
Durchgang 3: Prüfe Verzeichnis Verknüpfungen
Durchgang 4: Überprüfe die Referenzzähler
Durchgang 5: Überprüfe Gruppe Zusammenfassung
sicherung.img: 700882/6561792 Dateien (3.0% nicht zusammenhängend), 17256532/26216064 Blöcke

Falls man die echte Partition total zerschossen und die Partitionstabelle bzw. die Superblocks teilweise zerstört hat. So kann man mit dem Tool TestDisk versuchen, diese Superblocks auf dem Image wiederherzustellen. Hier wird die original Partition gar nicht angefasst. Ob danach der Fehler behoben ist, kann man leider nicht garantieren, aber ein Versuch ist es Wert:

testdisk /home/benutzer/sicherung.img

Für openSUSE 11.2 Nutzer können TestDisk bequem über zypper installieren:

zypper in photorec

TestDisk startet und blendet das Image und dessen Größe ein. Hier gehen wir mit der Enter-Taste auf „Proceed“ und machen mit diesem Image weiter. Im nächsten Menü wählen wir mit den Pfeiltasten den Eintrag „Intel“ aus. Und zum Abschluß wählen wir dann das Menüpunkt „Analyse“ und lassen das Image nun analysieren.

Sobald TestDisk durchgelaufen ist und vielleicht ein paar Superblocks wiederhergestellt hat, kann man das Image nochmal mit fsck drüberlaufen lassen. Zum Schluß kann man das Image mounten und das Ergebnis begutachten.

Viel Glück und Erfolg. ;-)

openSUSE 11.2 – UMTSmon mit Huawei UMTS USB-Stick einrichten

Das Netbook ist nicht nur zum Arbeiten für unterwegs konzipiert, sondern man kann damit auch über ein UMTS USB-Stick im Internet surfen und Emails abrufen. Die Einrichtung einer UMTS Verbindung unter openSUSE 11.2 ist nicht schwierig und lässt sich in wenigen Schritten einrichten.

Ich verwende ein Netbook Medion Akoya Mini E1210 und das Huawei UMTS USB-Stick E172 mit einem Branding von Vodafone. Jedoch als Internet-Provider habe ich Simyo gewählt. Da dieser ein kundenfreundlichen Tarif hat und keine Ports bzw. Dienste gesperrt sind.

Bevor wir UMTSmon benutzen können, müssen wir erst einige Vorarbeiten erledigen. Daher verwenden wir bei unseren Schritten die Konsole mit root-Rechten. Später benötigen wir die Konsole nicht mehr.

Für Besitzer eines Huawei UMTS USB-Stick ist der nachfolgende Schritt notwendig:
Zuerst installieren wir für den Huawei UMTS USB-Stick ein spezielles Package. Denn es sollte unter anderem verhindert werden, dass das UMTS-Stick als Storage erkannt und eingebunden wird.

Der Download des Package erfolgt über meinen Repo-Zweig. Diese Maßnahme halte ich für sinnvoll, weil man nie weiß, ob der Maintainer irgendwann das Repo schließt bzw. löscht. Der Link zu meinem Repo lautet:
http://download.opensuse.org/repositories/home:/Freespacer:/huawei_umtsmodem/
Wenn man dem Link folgt, wird man feststellen, dass das Package auch für openSUSE 11.0 und 11.1 gebaut wurde, falls jemand ältere openSUSE-Systeme verwendet.

Installation des Packages unter openSUSE 11.2 (32-bit):

zypper in http://download.opensuse.org/repositories/home:/Freespacer:/huawei_umtsmodem/openSUSE_11.2/i586/huawei_umtsmodem-1.0.0-2.1.i586.rpm

Installation des Packages unter openSUSE 11.2 (64-bit):

zypper in http://download.opensuse.org/repositories/home:/Freespacer:/huawei_umtsmodem/openSUSE_11.2/x86_64/huawei_umtsmodem-1.0.0-2.1.x86_64.rpm

(Falls sich die Links kurzfristig geändert haben, dann hinterlasst mir bitte ein Kommentar. Ich werde es schnellstmöglich abändern. Danke.)

Als nächstes müssen wir unseren aktuellen Benutzer der Gruppe dialout und uucp zuordnen. (username) ist mit dem aktuellen Benutzername zu ersetzen:

usermod -A dialout,uucp (username)

Anschließend setzen wir noch die korrekten Rechte für die Programme pppd und usb_modeswitch:

chown root:root `which pppd` && chmod u+s `which pppd`
chown root:root `which usb_modeswitch` && chmod u+s `which usb_modeswitch`

Jetzt müssen alle laufenden Programme geschlossen und die Desktop-Umgebung neugestartet werden, damit die zugeordneten Gruppen beim Benutzer in der neuen Sitzung wirksam werden. Dies kann man sehr einfach mit der Tastenkombination STRG+ALT+Rücklöschtaste (2x Rücklöschtaste tippen) auslösen.

Für Besitzer eines Huawei UMTS USB-Stick ist der nachfolgende Schritt abermals notwendig:
Wir öffnen erneut die Konsole. Aber hier arbeiten wir nicht mehr mit root, sondern mit dem derzeitigen Benutzer und lassen uns die USB Device-Schnittstellen anzeigen.

ll /dev/ttyUSB*

Bei mir kommt folgende Ausgabe:

crw-rw---- 1 root dialout 188, 0  9. Dez 00:00 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1  9. Dez 00:00 /dev/ttyUSB1

Der erste Eintrag mit 188, 0 ist der PPP-Port, der zweite Eintrag 188, 1 ist der AT-Port. Beim Erststart von UMTSmon müssen wir ihm genau diese Devices mitteilen, damit er weiß, wie er das Modem ansprechen kann.

Mit dieser Erkenntnis starten wir nun UMTSmon mit folgendem Befehl:

# umtsmon -s <at>[,ppp]
umtsmon -s /dev/ttyUSB1,/dev/ttyUSB0

Jetzt kann man ein Profil nach den Vorgaben des Providers erstellen. Wichtig ist hier der APN (Access Point Name) und die Zugangsdaten. Nachdem diese Vorarbeit erledigt ist, kann man später UMTSmon ohne Probleme über das Menü starten.

Viel Spaß beim Surfen. ;-)