Das beste zum Schluß? oder: Der Sony-DVD-Recorder vs. GNU/Linux

Nein, 2010 lasse ich ruhig ausklingen. Und bevor reingefeiert wird, liegt mir eine ominöse Datei vor, für die wahrscheinlich ein Sony-Gerät verantwortlich ist. Es geht um einen Film, der als DVD gebrannt wurde. Legt man das Original in das Laufwerk ein, so sieht man aber nur einen leeren "VIDEO_TS"-Ordner.

Um mehrere Kopien anzulegen, habe ich ein Image mittels ImageBurn ausgelesen (ja, unter Linux! Dieses Windows-Programm läuft perfekt durch Wine und erkennt auch alle DVD-Laufwerke im Rechner).
Es liegen also folgende Dateien vor:


/home/Videos/SONY_DVD_RECORDER_VOLUME.mds
/home/Videos/SONY_DVD_RECORDER_VOLUME.bin


Damit möchte ich nun weiter arbeiten. Das Original-Medium fasse ich erst garnicht mehr an -- wer weiß, was Sony da wieder für einen Mist fabriziert hat... Eigentlich möchte ich aus den oben genannten Dateien eine ISO erstellen. Nach einem google-Unser stoße ich auf tools wie ccd2iso und bchunk. Diese Kommandozeilentools probiere ich aus, aber ein Umwandeln scheint nicht möglich (cue-file fehlt usw).

Bevor ich mich weiter mit diesen Programmen beschäftige, fällt mir Furius ISO Mount ins Auge. Ich starte, un wähle die extrahierte bin-Datei (siehe oben) aus. Das mounten funktioniert ohne Probleme. Und das beste: die Inhalte der DVD sind nun sichtbar:


/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/video_ts.bup
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/video_ts.ifo
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/video_ts.vob
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/vts_01_0.bup
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/vts_01_0.ifo
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/vts_01_1.vob
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/vts_02_0.bup
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/vts_02_0.ifo
/home/chris/SONY_DVD_RECORDER_VOLUME_bin/video_ts/vts_02_1.vob


Ab hier kann ich nun mit einem Videoprogramm meiner Wahl weiter arbeiten.

MP3-Dateien schneiden mit mp3cut in der linux shell

Es geht um ein tool, das einem das Zurechtschneiden (cutten) von mp3-files ermöglicht.

sudo apt-get install poc-streamer

Danach steht einem das tool mp3cut zur Verfügung. Hiermit kann man einfach ein mp3-file beschneiden. Ich habe es aktuell verwendet, um einen Klingelton aus einem Lied zu erstellen. Gerade dort kann man ein längeres intro nicht gebrauchen, sondern möchte gerne den refrain als eigentlichen Klingelton hören.

Folgende Anleitung bekommt man präsentiert, wenn man nur "mp3cut" auf der Kommandozeile eingibt:

Usage: mp3cut [-o outputfile] [-T title] [-A artist] [-N album-name] [-t [hh:]mm:ss[+ms]-[hh:]mm:ss[+ms]] mp3 [-t ...] mp3 -o output: Output file, default mp3file.out.mp3

Ein Beispiel, um das Lied Testlied_1_extended_version.mp3 zu beschneiden, sähe so aus:

mp3cut -o Testlied_1_kurz.mp3 -t 00:50-03:43 Testlied_1_extended_version.mp3

Audio-CD extrahieren mit Linux

Seit langem mal wieder eine Audio-CD extrahiert und zu MP3 konvertiert. Womit sollte man arbeiten? Es bietet sich zum Beispiel "Sound Juicer" an. Leider bemerken viele, oft erst nachdem man mehrere CDs ausgelesen hat, dass die Qualität bei konstanten 128kb/Sekunde liegt. Das ist eine zu geringe Datenrate. Grund ist die folgende Voreinstellung für das Profil "CD-Quality, MP3 (.mp3-type)".

Grundeinstellung (so, oder so ähnlich):
audio/x-raw-int,rate=44100,channels=2 ! lame name=enc mode=4 vbr-quality=6 ! id3v2mux

Wir ändern das Profil einfach auf folgenden Wert (Bearbeiten -> Einstellungen -> Profile editieren):

Verbesserte Einstellung:
audio/x-raw-int,rate=44100,channels=2 ! lame name=enc mode=0 vbr=4 vbr-quality=2 ! xingmux ! id3v2mux

Dateien umbenennen mit der Linux-shell

Szenario 1: Musikdateien (z.B. best-off, Musikmix) auf MP3-Player haben teilweise Titelnummern am Anfang, die wir bei der best-off-Sammlung nicht gebrauchen können. Daher soll alles (auch Sonderzeichen) bis zum ersten Buchstaben(!) gelöscht werden.

rename -v 's/^[^a-zA-Z]*//' *.mp3

Erläuterung:
Es wird nach allem gesucht, was am Anfang(^-Symbol vor der eckigen Klammer) des Dateinamens keine (^-Symbol innerhalb der Klammer) Buchstaben (groß oder klein) aufweist.
-v steht für verbose und gibt alles aus, was der Befehl "rename" ausführt
-n kann als Option angegeben, wenn man erstmal testen möchte, was passieren wird. Es werden keine Dateien umbenannt!



Szenario 2: Allen Dateien soll etwas vorangestellt werden.
In folgendem Beispiel wird "file_" vor jede bestehende Dateibezeichnung im aktuellen Verzeichnis gesetzt.
Der komplette Dateiname wird durch .* in der Variablen $1 gespeichert. Dann wird dieser komplett durch file_ und den ehemaligen Dateinamen ersetzt.

rename -n 's/(.*)/file_$1/' *

Falls beispielsweise nur mp3-Dateien geändert werden sollen, wird der Befehl wie folgt abgeändert: 

rename -n 's/(.*)/file_$1/' *.mp3

Achtung, mit dem regulären Ausdruck .* muss vorsichtig umgegangen werden. Dazu später mehr.

Input und Output - Linux Shell Tutorial

Die folgenden Beiträge möchte ich verstärkt die basics der Linux Shell erläutern, da es dazu immer wieder Fragen an mich gibt. Bitte klicken Sie auf den folgenden Link, um den gesamten Beitrag zu sehen!

Gnuplot 102 - einfacher Graph mit 2 Wertepaaren

Gnuplot kann sehr aufwendige Operationen ausführen. Am Anfang möchte ich aber vorerst die Grundlagen erklären. Wir möchten folgende Datei namens "aepfel_birnen_preise" auslesen und mit Gnuplot darstellen lassen.

# Durchschnittspreise/kg von Aepfeln und Birnen in Jahren 2000-2010
# Ausgedachte Werte!
# Spalte 1: Jahr
# Spalte 2: Aepfel
# Spalte 3: Birnen
# -----------------
2000 2.1 1.7
2001 1.9 1.65
2002 2.34 1.26
2003 1.24 1.8
2004 1.56 2.1
2005 2.13 2.04
2006 1.67 2.56
2007 1.45 2.04
2008 2.56 2.11
2009 1.76 1.99
2010 1.63 1.56


Beim Aufruf in der Gnuplot-Kommandozeile (starten durch gnuplot) müssen wir definieren, welche Spalten in welcher Beziehung stehen. Zusätzlich sollen die Punkte mit Linien verbunden sein. Zum guten Schluß soll noch erkennbar sein, welche Linie mit welchen Obstpreisen in Beziehung stehen. Das ganze wird in Gnuplot durch einen Einzeiler erledigt.
gnuplot
plot "./aepfel_birnen_preise" using 1:2 title "Aepfel" with lines, "./aepfel_birnen_preise" using 1:3 title "Birnen" with lines
Das selbe kann auch abgekürzt werden (abkürzen bis auf Anfangsbuchstaben der Befehle; filename wird beim zweiten Aufruf interpoliert (es wird der letzte benutzte file genutzt)):
plot "./aepfel_birnen_preise" u 1:2 t "Aepfel" w l, "" u 1:3 t "Birnen" w l

Als Ergebnis wird uns folgender Graph ausgegeben:

GnuPlot 101 - Graph mit Zufallszahlen

Ich möchte einen einfachen Graph mit GNUPLOT ausgeben lassen. Als Zahlenquelle wähle ich Zufallszahlen. Gnuplot erwartet pro Zeile einen Datensatz. Man kann auch andere Formatierungen nutzen, dafür müsste der Befehlssyntax aber erweitert werden. Um eine Liste mit entsprechenden Datensätzen auszugeben, erstelle ich ein kleines Skript, das 100 Zufallszahlen in eine Datei schreibt:

#!/bin/bash
# Dateinamen festlegen
l="random_1"
# Datei loeschen - Fehler unterdruecken
rm $l 2>/dev/null
# 100 Zufallszahlen erstellen
for ((i=0;i<100;i++))
do
echo $RANDOM >>$l
done

Bevor man GnuPlot nutzt, muss man es natürlich installieren (die ersten 2 Befehle sind wichtig):

sudo apt-get install gnuplot
sudo apt-get install gnuplot-doc
sudo apt-get install gnuplott-X11

Nachdem man das Programm mit gnuplot aufruft, kann man Befehle über eine Text-Konsole eingeben. Eine kleine Einführung zu den Befehlen habe ich hier gefunden.

Gestartet werden kann auch direkt über die Linux-shell.
echo 'plot "./random_1"; pause 10'|gnuplot

Oder man startet gnuplot ('gnuplot') und gibt folgendes ein (Achtung, hier habe ich den Befehl durch "with lines" ergänzt. Damit verbindet man die Punkte mit Linien; vgl. Liniendiagram):
plot "./random_1" with lines


Die Graphen können auf vielfältige Weise definiert werden. Diverse Muster stehen zur Auswahl. Eine gute Erklärung findet man auf folgender Seite.

Sicherheitsrelevante updates

Auch bei Linux gibt es Sicherheitslücken. Allerdings kann man diese durch aptitude, dem Packetmanager, schnell beheben. Eine Internetzverbindung vorausgesetzt, spielt man durch folgende Befehle in der Konsole (aka shell) die neuesten Sicherheits-Updates ein:

sudo aptitude update
sudo aptitude safe-upgrade


Leider muss man da alle paar Tage dran denken. Gut wäre eine automatisierung. Leider brauch man für diese Befehle root-Rechte. Es sollte aber eine Lösung dafür geben; evtl durch einen cronjob.

Geschütztes PDF-Dokument drucken

Leider schützen viele Ihre PDF-Dokumente, damit Sie nicht gedruckt werden können. Dies kann man aber zum Glück mit dem Standart-Dokumentenbetrachter (bei UBUNTU: Evince) umgehen.

Man öffnet das Dokument einfach und druckt es dann aus! Die Sperre greift hier nicht. Man kann auch erstmal in eine Datei drucken, falls man zB die Live-CD nutzt. Anschließend kann man mit der Ausgegebenen Datei (Ausgabe.pdf) machen, was man möchte!

Linux ist mal wieder besser als Windows ;-) epic win.

Thunderbird 3.0 in Ubuntu installieren

Wie installiere ich das neue Thunderbird 3.0.3 (oder aktueller) bei Ubuntu (o.Ä.)?

sudo add-apt-repository ppa:ubuntu-mozilla-daily/ppa
sudo apt-get update
sudo apt-get install thunderbird-3.0



Fertig!

Spezielle Variablen

Es gibt Variablen, die von der Shell gesetzt werden (können), aber vom Nutzer nicht direkt verändert werden können.

  • $$ Prozess-ID der aktuellen Shell
  • $! Prozess-ID des letzten Hintergrund-Prozesses
  • $- für die Shell gesetzte Option
  • $_ Letztes  Argument des vorherigen Kommandos
  • $? Rückgabestatus / Exit-Status
  • $# Anzahl der Parameter
  • $* Alle Parameter
  • $@ Alle Parameter als einzelne Zeichenketten

Mit wget Bilddateien runterladen

Man kann den wichtigen Befehl "wget" dazu verwenden, bestimmte Dateiarten bei einer bestimmten domain runter zu laden (vgl. scraping). Folgendes Beispiel steht für eine Beispielseite - alle Bilder liegen auf der img-Subdomain. Wichtig ist, dass die for-Schleife für die zu scrapende Seite(n) geeignet ist. Nicht alle Seiten weisen eine Struktur auf, bei denen Unterseiten mit 1-10 (o.Ä.) aufgerufen werden!

Ein Beispiel:

for i in {1..9}; do wget -H -c -nd -e robots=off --include-directories=img -r --reject=tn_* --accept=*.jpg,*.jpeg,*.png,*.bmp,*.gif --domains=img.testserver.com --user-agent="Opera/9.00 (Windows NT 5.1; U; en)" "http://testserver.com/archive/tags/realestate/page/${i}"; done


Achtung, es wird in das jeweils aktuelle Verzeichnis gespeichert! Also am besten vorher ein Verzeichnis erstellen, in dieses wechseln und erst dann den obigen Befehl ausführen!

Festplatten synchronisieren mit Linux-Shell

Beispielhaftes Szenario: Ein Verzeichnis auf dem Desktop-Rechner soll mit einer externen Festplatte synchronisiert werden. Ein einfacher copy-Befehl (cp) hätte diverse Nachteile. Vielmehr benutzen wir den Befehl "rsync" um einen Abgleich der Daten zu machen.

Beispiel:
rsync -aP /daten/wichtig /media/##_backupverzeichnis
Die Option "-a" vereint mehrere Optionen und steht für "archive". So werden zB die Verzeichnisse rekursiv abgeglichen, also auch Unterverzeichnisse.

Die Option "-P" sorgt dafür, dass einem der Fortschritt der Operation angezeigt wird. Vor allem bei Gigabyte-großen Kopieraktionen sollte dies aktiviert werden.

Das Verzeichnis /media/... wird oft für angeschlossene USB-Festplatten verwendet (Ubuntu-Linux). Wird von einer USB-Festplatte auf die andere synchronisiert (zB bei Umstieg von 1TB auf 1,5TB Festplatte), so kann es zu folgenden Befehlen kommen, die erst nicht nach einer Sicherung zwischen verschiedenen Festplatten aussieht:
rsync -aP /media/MP3 /media/##_MP3

Shellskript für Liste mit allen AVI/MKV Dateien im jew Verzeichnis

#!/bin/bash
# Liste, um alle avi/mkv-Dateien im aktuellen(!) Verzeichniss
# (+alle Unterverzeichnisse) in eine Liste zu schreiben
# Alternativ könnte man alle Dateien auflisten und diese dann auf ein egrep
# pipen. Dann muss man aber mit einem
# sed-Befehl anschließend mehr entfernen (uA auch viele Leerzeilen!).

#Dateiname festlegen HIER
l="liste.txt"

#Datei löschen
rm $l 2>/dev/null

# Überschrift!
echo "######        Filmliste     #####" >>$l

# So, jetzt noch eine Leerzeile!
printf "\n" >>$l

# avi-Dateien finden, Fehlermeldungen löschen, Bis zum letzten "/" löschen,
# Rest an Datei anhängen.
printf "#### AVI-Dateien #####" >>$l
printf "\n" >>$l
find `pwd` -type f -name *.avi 2>/dev/null | sed 's:.*\/::' >>$l
printf "\n" >>$l
printf "\n" >>$l
printf "#### MKV-Dateien #####" >>$l
printf "\n" >>$l
find `pwd` -type f -name *.mkv 2>/dev/null | sed 's:.*\/::' >>$l

STDOUT, STDERR und STDIN

STDOUT, STDERR und STDIN werden benutzt, um Eingaben und Ausgaben in der Shell umzuleiten. Die Begriffe stehen für "standart output" (STDOUT), "standart error" (STDERR) und "standart input" (STDIN). Per default werden Ausgaben eines shell-Befehls über STDOUT und STDERR auf der Befehlszeile direkt sichtbar ausgegeben.

STDIN kann benutzt werden, um Nutzereingaben aufzunehmen und zu verarbeiten.

In einem shell-skript oder einem Einzeiler werden die obigen, langen Begriffe nicht direkt benutzt, sondern Zahlen-Variablen. Die 1 für STDOUT und die 2 für Fehlermeldungen, also STDERR. Ein Beispiel, was sehr häufig genutzt wird ist der Befehl "2>/dev/null". Damit werden alle Fehlermeldungen (z.B. keine Leserechte in bestimmen Verzeichnissen) in den Müll (a.k.a. /dev/null) geschickt und erscheinen somit nicht auf dem Bildschirm! Sehr nützlich, bitte merken.

Wird keine Nummer angegeben,so geht die shell davon aus, dass man STDOUT (also 1) meint: 
ls -la > inhalt.txt
 Ist das selbe wie:
ls -la 1> inhalt.txt
Möchte man STDOUT in einen file und STDERR in einen anderen file lenken, macht man dies wie folgt:
ls -la 1>inhalt.txt 2>fehlermeldungen.txt
STDOUT und STDERR in einen file zusammen lenken? Kein Problem:
ls -la >inhalt.txt 2>&1
Möchte man allerdings trotz Umleitung in eine Datei eine Ausgabe (zur Kontrolle zB) auf dem Bildschirm sehen, gibt es auch dafür eine Lösung:
ls -la | tee inhalt.txt

Mehr Infos bei skorks.com.

Linux Shell und RegEx Befehle 1

Ich habe eine Datei mit unnötigen Leerzeilen erstellt, eine Wortliste. Ich möchte mit egrep alle Leerzeilen entfernen.

Die Datei heißt "wl" und die Ausgabe erfolgt in die Datei "wl2". Folgende Befehle sind möglich:

egrep -e ^[^$] wl > wl2
oder

cat wl | egrep ^[^$] > wl2

oder in VIM (ein Befehl wird auf die GANZE Zeile angewendet, darum wird :g verwendet):
:g/^$/d
Folgender Befehl würde in VIM nicht wie gewünscht funktionieren, da eine leere Zeile einfach durch eine leere Zeile ersetzt wird...(ergo: keine sichtbare Änderung!):
:%s/^$//

Der zweite Befehl ist komplizierter, aber für manche vielleicht einfacher zu verstehen.

-----------------------------------------------------------------------------

Nachdem alle Leerzeilen entfernt wurden, möchte ich aus der Datei "wl2" alle Leerzeichen entfernen, die am Anfang jeder Zeile stehen. Dies erledigt man am besten (dachte ich!) im VI- bzw. VIM-Editor (Aufruf mit "vim wl2"). Dann wird dort folgender Befehl ausgeführt:

:%s/^ //

Problem: Es werden wirklich nur einzelne Leerzeichen am Anfang einer Zeile gelöscht (aka "Ersetzen durch NICHTS"). Was ist zB mit 2 oder mehr Leerzeichen?

Hier die Lösung mit sed:

sed 's/^[ ]*//' neu.txt

Mit Linux (Ubuntu) eine externe Festplatte formatieren - howto

Ich möchte meine neue Hitachi-1GB-Festplatte mit Ubuntu formatieren (NTFS Format), um sie mit dem WDTV-Live Standalone-Player zu nutzen.

Wichtig: Für folgende Aktionen muss man Administratoren-Rechte (zB mit "su" erlangen) haben!
Ich öffne die shell und überprüfe, welche Festplatten dem System zu Verfügung stehen:

fdisk -l
---------------------------------------------------------------------------
Platte /dev/sda: 250.1 GByte, 250059350016 Byte
255 Köpfe, 63 Sektoren/Spuren, 30401 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Disk identifier: 0xccd464a0

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sda1   *           1        3654    29350723+  83  Linux
/dev/sda2            3655       30401   214845277+   5  Erweiterte
/dev/sda5            3655        5478    14651248+  83  Linux
/dev/sda6            5479       15265    78614046   83  Linux
/dev/sda7           15266       25052    78614046   83  Linux
/dev/sda8           25053       28821    30274461   83  Linux
/dev/sda9           28822       30401    12691318+  82  Linux Swap / Solaris

Platte /dev/sdb: 1000.2 GByte, 1000204886016 Byte
255 Köpfe, 63 Sektoren/Spuren, 121601 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Disk identifier: 0x1348d81d

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdb1               1      121601   976760001    7  HPFS/NTFS
---------------------------------------------------------------------------

Es werden 2 physiche Festplatten angezeigt. Die zweite möchte ich partitionieren. Das Dateisystem ist schon NTFS, da muss ich eigentlich nichts ändern, da der Hersteller (Hitachi) schon alles richtig eingerichtet hat :)

fdisk /dev/sdb

Ich erstelle eine Primäre Partition, Größe ca 150 GB und als Dateisystem wird HPFS/NTFS ausgewählt (Hexcode 7).
Nun versuche ich diese neue Partition zu mounten:

sudo mount -t ntfs /dev/sdb1 ~/extern

Das schlägt fehl, als nächstes lösche ich alles und erstelle eine neue Partition, diesmal aber als "erweitert".

--------------------------------------------------------------------------

Da alles nicht funktioniert, hier meine abschließende LÖSUNG des PROBLEMS:

Ich installiere gParted, eine graphische Partitionierungsoberfläche für Gnome. Zusätzlich installiere ich NTFSPROGS (apt-get install ntfsprogs), damit man auch ntfs-Partitionen erstellen kann.

Ein Aufruf des Programms gParted erfoglt bei Ubuntu über das Menü SYSTEM -> SYSTMVERWALTUNG -> GParted.

Ergebnis:
--------------------------------------------------
Platte /dev/sdb: 1000.2 GByte, 1000204886016 Byte
255 Köpfe, 63 Sektoren/Spuren, 121601 Zylinder
Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes
Disk identifier: 0x1304581d

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdb1               1      121601   976760001    5  Erweiterte
/dev/sdb5               1       79222   636350652    7  HPFS/NTFS
/dev/sdb6          107640      121601   112149733+   7  HPFS/NTFS
/dev/sdb7           79223      107639   228259521    7  HPFS/NTFS

-----------------------------------------------------

Es wurde also eine Erweiterte Partition über die kompletten 1000 Gigabyte erstellt. Diese wurde in 3 Logische Partitionen eingeteilt.

Erfolg!

iMac? Genau sowas brauche ich doch!

Mein Rechner ist alt und einen richtigen Schreibtisch habe ich auch nicht. Wenigstens das eine könnte ich mit etwas Glück gewinnen (bitte bitte ;)).

Hier der Beweis:



Link zum MC seinen Blog!


Link zum Techdepot thread.

Das Fedora-Unglück (oder: die verschlüsselte Festplatte und Ich)

Ich habe Fedora 12 auf einem Notebook installiert. Bei der Installationsroutine von der Live-CD habe ich die Verschlüsselung der gesamten Platte aktiviert (nicht sehr schlau). Danach habe ich mir mit einem falschen(?) Nvidia-Treiber die Xorg.config zerschossen. Letztendlich konnte ich noch nichtmal mehr in die Kommandozeile! Mit der shell hätte ich ja nochwas retten können, aber leider ging garnix mehr.