Posts mit dem Label shell werden angezeigt. Alle Posts anzeigen
Posts mit dem Label shell werden angezeigt. Alle Posts anzeigen

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

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!

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!

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

Linux Shell Übungen #3 - Ordner anlegen

Existiert im aktuellen Verzeichnis das Verzeichnis ordner nicht, so soll es angelegt werden. Außerdem soll im Verzeichnis ordner eine Datei dat angelegt werden, nachdem mit cd in das neue Verzeichnis gewechselt worden ist.

a) Nach Abarbeitung der Befehlsfolge, soll das aktuelle Verzeichnis wieder das Ursprungsverzeichnis sein.

test -d ordner || (mkdir ordner ; cd ordner ; touch dat)
 
test -d ordner || { mkdir ordner ; cd ordner ; touch dat ; cd ..;}


b) Wie oben mit folgendem Unterschied: Nach Abarbeitung der Befehlsfolge, soll das aktuelle Verzeichnis  das Verzeichnis ordner sein.

test -d ordner || { mkdir ordner ; cd ordner ; touch dat ;}

Linux Shell Übungen #2

1. Aufgabe
Lassen Sie sich den Inhalt der Variablen HOME anzeigen.
Geben Sie aus, welche Shell aktuell von Ihnen verwendet wird.
Was passiert, wenn Sie exec date aufrufen?

Inhalt Home:
  • exec date -> Beendigung des Befehlsfensters
  • Aktuelle Shell wird beendet/ueberlagert.
  • exec ksh -> funktioniert.

2. Aufgabe
Belegen Sie die Variable a mit 89 und die Variable b mit Hallo
Starten Sie eine Subshell! Was erhält man bei Eingabe des Befehls?
echo $a; echo $b
  • Subshell starten: exec bash
  • echo $a -> leer
  • echo $b -> leer
  • Raus aus subshell: exit

3. Aufgabe
Sie möchten anstatt der aktuellen Shell die Korn-Shell benutzen. Wie lautet der Befehl?
  • exec ksh
  • (Überprüfung: ps -f)

4. Aufgabe
Sie haben folgenden Befehl ausgeführt:
grep 'schul500' /etc/passwd >/dev/null
Wie können Sie herausfinden, ob nun das Suchmuster schul500 in der Datei /etc/passwd vorkommt? Es wird davon ausgegangen, dass die Datei /etc/passwd existent und lesbar ist.
  • Wenn echo $? = 1 ist, wurde kein Ergebniss gefunden,
  • bei $? = 0 wurde etwas gefunden (zB bei grep).
  • $? = 2 -> Datei existiert nicht
Probieren Sie auch den Befehl:
grep 'schul500' /etc/paswd >/dev/null 2>&1

5. Aufgabe
Legen Sie unter dem Home-Directory ein Verzeichnis unixshell an.
In einer Variablen US soll der vollständige Pfadname dieses Verzeichnisses stehen.
US=~/unixshell
cd $US


Was ist zu tun, damit die Variable US nach jedem Login und in den Subshells zur Verfügung steht?
  • .profile (vorhanden? ls -la in ~ durchführen)
  • Folgenden Eintrag hinzufügen:
  • US=/home/schul100/unixshell

Übung Linux-Shell #1

1. Aufgabe:
Erzeugen Sie eine Datei namens *

touch \*

Löschen Sie die Datei *

rm \*

Da es sich bei dem Sternchen um ein Sonderzeichen handelt, muss davor als Escape-Zeichen das backslash benutzt werden.


2. Aufgabe:
Folgendes soll auf dem Bildschirm erscheinen:
Juengste Datei im aktuellen Ordner lautet: Dateiname der jüngsten Datei.

echo "Juengste Datei im aktuellen Ordner lautet: `ls -tr | tail -1`"

su: Fehler bei Authentifizierung

Tja, per default ist (jedenfalls bei Ubuntu) dem user root kein Passwort zugewiesen. Mit dem Befehl "su" kann man daher nichts ausrichten. Ein Wechsel zum user "root" ist ja garnicht möglich, da dieser nicht existiert.

Daher muss man dies nachholen, oder folgendes eingeben:

sudo -s

Jetzt hat der angemeldete user für diese Sitzung root-Rechte. Es muss nicht mehr sudo vor root-Befehle eingebeben werden.

(via)
(mehr infos)

WinRar unter Linux?

Rechtsklick: "hier entpacken" funktioniert per default nicht. Abhilfe schaft:

sudo apt-get install unrar

Adobe Flash Player installieren unter Linux

Unter Ubuntu einfach im shell folgendes eingeben:

sudo apt-get install flashplugin-nonfree