Tag Archives: Ubuntu

Sublime Text 3 – Ubuntu / Debian

Man kann über proprietäre Software denken was man will aber wenn Software wirklich gut ist und einem die Arbeit erleichtert / beschleunigt solle man sich diese zumindest einmal anschauen.

Installation

Es gibt unterschiedliche Wege Sublime Text zu installieren. Man kann das Paket direkt von der entsprechenden Webseite laden und mit folgendem Befehl installieren.

wget http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb
sudo dpkg -i sublime-text_build-3059_amd64.deb

Info: dev-builds gibt es hier Oder man verwendet z.B. das Linux Mint Repository und installiert Sublime über den Paketmanager.

sudo echo "deb http://packages.linuxmint.com/ debian main import backport upstream romeo" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install sublime-text

 

Plugin-Manager hinzufügen

Auf der folgenden Webseite gibt es “den” Plugin-Manager für Sublime, welchen man auf jeden Fall installieren sollte: sublime.wbond.net/installation

mkdir ~/.config/sublime-text-3/Packages/Installed\ Packages
cd ~/.config/sublime-text-3/Packages/Installed\ Packages
wget https://sublime.wbond.net/Package%20Control.sublime-package

Nachdem man Sublime einmal neugestartet hat, findet man unter “Preferences -> Package Control” alle Befehle zum verwalten von Plugins.

 

Plugin Empfehlungen

– BracketHighlighter -> Bracket and tag highlighter for Sublime Text

– DocBlockr -> Simplifies writing DocBlock comments in Javascript, PHP, CoffeeScript, Actionscript, C & C++

Emmet -> Emmet (ex-Zen Coding) for Sublime Text

PHP-Twig -> A TextMate (and Sublime Text) bundle for Twig.

Sass -> Sass support for TextMate & Sublime Text 2

Git -> Plugin for some git integration into sublime text

– GitGutter -> A Sublime Text 2/3 plugin to see git diff in gutter

 

Links:

Sublime Text – Tips-Tricks-Shortcuts

– Best of Sublime Text 3 Features. Plugins and Settings

– Sublime Text – Keyboard-Shortcuts

– www.sublimetext.com/docs/3/

Kurztipp: RegEx für die Paketsuche

Habe soeben einen älteren Blog-Post aktualisiert und einen kleinen Tipp hinzugefügt, welchen ich hier an zwei Beispielen zeigen möchte: suckup.de/linux/ubuntu/aptitude-dpkg/

sudo aptitude search "^php5-[a-cA-C]+"

-> sucht alle Pakete welche mit “php5-” anfangen und darauf “a”, “b oder “c” in beliebiger Häufigkeit folgen

sudo aptitude search "(^bash|^git).*completion"

-> sucht Pakete welche entweder mit “bash” oder mit “git” anfangen gefolgt von beliebigen (auch beliebige Anzahl) von Zeichen, gefolgt von dem String “completion”

Die RegEx-Funktionalität funktioniert sowohl bei “apt-cache”, “apt-get” als auch bei “aptitude” und auch bei anderen Befehlen wie z.B.: “remove”, “install”, “search”, “purge” etc. Bei meinen Tests hat dies jedoch mit “aptitude” am besten funktioniert, da hier nur nach den Paketnamen gesucht wird, falls man jedoch nicht genau weiß wonach man eigentlich sucht, dann sollte man es wohl mit “apt-cache” versuchen.

PS: wer sich RegEx noch nicht angeschaut hat, der sollte auch mal die Links in den Quellen anklicken, da man dies z.B. in so gut wie jeder Programmiersprache, in der Shell oder ansatzweise selbst bei der Google-Suche nutzen kann. Wer mehr über Tricks in der Google-Suche erfahren möchte, klickt hier! ;)

Quellen:
https://www.debian.org/doc/manuals/debian-reference/ch02.de.html#_browsing_with_the_regex_matching
http://regex101.com/
http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

my dotfiles

Habe meine dotfiles (Dateien im Home-Verzeichnis, welche mit einem “.” beginnen) mit anderen Quellen angereichert und diese auf github veröffentlicht. Wer möchte kann diese Einstellungen, Aliase, Funktionen für die “Linux-Shell” verwenden oder auch verbessern, indem man einen entsprechenden Fork von dem Projekt erstellt.

dotfiles_vimdotfiles

https://github.com/voku/dotfiles

Installation:

cd ~ && git clone https://github.com/voku/dotfiles.git && cd dotfiles && source bootstrap.sh

… wenn gewünscht kann man mit diesem kleinen Skript entsprechende ggf. benötigte Pakete nachinstallieren:

bash ~/dotfiles/firstInstall.sh

 

Update:

source bootstrap.sh

 

Anpassungen:

Wenn die Datei “~/.extra” existiert, wird diese zusammen mit den anderen Dateien verarbeitet. Man kann diese nutzen, um benutzerdefinierte Befehle ausführen zu lassen.

z.B.: “cat ~/.extra”

# Git credentials
# Not in the repository, to prevent people from accidentally committing under my name
GIT_AUTHOR_NAME = " Lars Moelleken "
GIT_COMMITTER_NAME = "$ GIT_AUTHOR_NAME "
git config - global user.name "$ GIT_AUTHOR_NAME "
GIT_AUTHOR_EMAIL = " lars@moelleken.org "
GIT_COMMITTER_EMAIL = "$ GIT_AUTHOR_EMAIL "
git config - global user.email "$ GIT_AUTHOR_EMAIL "

 

Erklärungen / Quellen:

http://suckup.de/linux/bashrc/
http://wiki.ubuntuusers.de/Bash/bashrc
http://suckup.de/linux/vi-howto/
http://vim.wikia.com/wiki/Example_vimrc
http://dotfiles.org/

Ubuntu 11.04 Tweak-Skript

In diesem Blog-Post stelle ich kurz mein kleines Shell-Skript vor, mit dem man sein Ubuntu 11.04 einrichten bzw. optimieren kann. Wenn jemandem noch ein Feature fehlt, kann dies angepasst werden. Zudem habe ich im Quelltext an den meisten Stellen Kommentare hinterlassen, sodass man gleich noch etwas über die shell lernen kann … :-)

Über konstruktive Kritik und / oder Verbesserungen würde ich mich freuen.

Download

 

wget http://suckup.de/ubuntu-11.04-tweak.txt
mv ubuntu-11.04-tweak.txt ubuntu-11.04-tweak
chmod +x ubuntu-11.04-tweak
sudo ./ubuntu-11.04-tweak

 

Funktionen:

- neue Repositories (Quellen) eintragen /  Programme installieren (Java, Flash, Chromium, …)

- Ubuntu / Gnome / Unity anpassen

Erste Schritte in der Shell

Ich habe schon einige kleine Blog-Beiträge zum Thema “Shell / Bash” geschrieben und werde versuchen diese Blog-Beiträge zu einer hoffentlich umfassenden Einführung in das Thema Shell zusammenfassen…  :-)

Was ist eine Shell?

Die Shell ist die Eingabe-Schnittstelle zwischen Computer und Benutzer, welche bei normaler Systemkonfiguration nach dem erfolgreichem Login eines Benutzers gestartet wird, so dass man auf dieser Kommandozeile die Möglichkeit hat weitere Programme zu starten. Die Shell könnte man somit aus Arbeitsumgebung bezeichnen, von wo aus der PC gesteuert werden kann bzw. Dateien bearbeitet werden können. Es gibt unterschiedliche Arten von Shell’s, wer ein modernes Linux-Betriebssystem (Debian, Ubuntu…) installiert, landet meistens in der sogenannten “bash“, darauf gehe ich jedoch gleich genauer ein. Die eingegebenen Texteingaben werden von der Shell interpretiert und ausgeführt, daher spricht man bei der Shell auch von einem Kommandozeileninterpreter (command-line interpreter, CLI).

 

Begrifflichkeiten!?

In Verbindung mit dem Begriff Shell hört man auch immer wieder folgendes …

 

  • Konsole: In ihrem ursprünglicher Definition war die Konsole ein Terminal, mit dem der Systemoperator die Systemfunktionen steuern konnte… heute wird der Begriff jedoch ebenfalls für “Terminalemulation” verwendet, zudem heißt die grafischen Terminalemulationen unter KDE “Konsole“.
  • Virtuelle Konsole: Die meisten Linux-Systeme kommen standardmäßig mit einigen virtuellen Konsolen daher, welche man über <Strg> + <Alt> + <F1> bis <F6> erreichen kann. Mittels <Strg> + <Alt> + <F7> wird der Desktop und somit die graphischen Oberfläche wieder angezeigt.
  • Terminal: Ein Terminal ist ein Computer, der den Zugriff auf einen entfernten Rechner erhält und die meisten Rechenoperationen somit nicht selber durchführt. (Terminal-PCs) Der Begriff “Terminal” wird heute jedoch auch als Abkürzung für “Terminalemulation” verwendet.
  • Terminalemulation: Mit einer Terminalemulation wird eine textorientierte Ein- und Ausgabeschnittstelle, ein Terminal emuliert, so dass man mehrer Instanzen eines Terminals auf dem Desktop zur Verfügung hat.
shell <---> Terminalemulation <---> grafische Oberfläche
bash  <--->       xterm       <--->         X11

 

Wie komme ich in die Shell?

Wie bereits erwähnt kann man zum einen die virtuelle Konsolen, die mit tty bezeichnet werden per Tastenkombination erreichen. Die Abkürzung tty stammt von dem englischen Wort Teletype und wurde historisch bedingt von Unix übernommen. Mittels …

<Strg> + <Alt> + <F1>

… gelangt man in die erste der tty-Konsolen, in diesem Fall tty1.

Hinweis: Hat man eine  grafische Oberfläche (Desktop) installiert, so befindet sich dieser standardmäßig auf tty7. Dieser Wert ist jedoch Variabel und kann umverlegt werden. Wer die Maus in einer solchen virtuellen Konsole verwenden will, sollte sich das Programm “gpm” anschauen / installieren.

 

Hat man sich einmal an die Desktop-Oberfläche gewöhnt, erscheinen einem diese virtuelle Konsolen meist wenig komfortabel, daher gibt es einige Programme (Terminalemulation) welche den Funktionsumfang erheblich erweitern.

KDE – Konsole

KDE-Nutzern steht das bereits erwähnte Programm “Konsole” zur Verfügung, wobei sich der Kreis der Begrifflichkeiten hier schließt und die Verwirrung bei so manchen gerade erst einsetzt. ;-) Lässt man dies außer Acht ist dieses Terminal(emulation) sehr gut. Das Programm unterstützt Tabs, Transparenz, verschiedenste Farbschema, unterschiedliche Schriften und man kann Profile anlegen.

konsole
konsole

Gnome – Terminal

Gnome-Nutzer verfügen von Haus aus über ein Programm mit dem Namen “Gnome-Terminal”. Ich persönlich bevorzuge dieses Programm, wobei dies wahrscheinlich eine Übungssache ist…

TASTENKÜRZEL BEDEUTUNG
<Strg> + <Umschalttaste> + t öffnet einen neuen Tab
<Strg> + d schließt einen Tab
<Strg> + Bild rauf öffnet nächsten Tab (rechts) bzw. den ersten
<Strg> + Bild runter öffnet vorherigen Tab (links) bzw. den letzen
<Strg> + <Umschalttaste> + Bild rauf verschiebt einen Tab nach rechts
<Strg> + <Umschalttaste> + Bild unter verschiebt einen Tab nach links
Hinweis: Wer das Terminal immer Griffbereit haben möchte, sollte sich einmal “guake” anschauen … ;-)

 

gnome_terminal
gnome_terminal

 

Xterm

Xterm ist Bestandteil des X.org Projekts und war lange Zeit das Standardterminal für Linuxsysteme mit grafischer Oberfläche.

CLI Companion

Wer die Linux-Befehle noch lernen möchte oder sich einige komplizierte Behle öfter benötigt, kann sich auch dieses Terminal anschauen. -> cli-companion-die-gui-in-der-konsole

CLICompanion
CLICompanion

Terminator

“Terminator ist ein in Python geschriebener Terminal-Emulator für die Desktop-Umgebung GNOME, der es ermöglicht mehrere Terminals innerhalb eines Fensters bzw. einzelner Tabs zu benutzen und mittels Tastatur-Kürzeln zwischen diesen zu wechseln. So kann man ohne Tabs und ohne weitere Terminalfenster mehrere Shells zur selben Zeit offen haben.” – http://wiki.ubuntuusers.de/Terminator

 

terminator_split_example
terminator_split_example

 

Wenn man seine Standard-Terminal ändern möchte, kann man dies mit dem Alternativen-System bewerkstelligen…

sudo update-alternatives --config x-terminal-emulator

 

Was für Shells gibt es?

Wenn man sich ein wenig näher mit dem Thema beschäftigt, stellt man schnell fest, dass es eine Menge Alternative Shells gibt. Ich beschränke mich einfach mal auf die (heutige) Standard-Shell die bash und einer Alternative der zsh (Z-Shell)

 

Bourne Again Shell (bash)

Die Bourne Again Shell ist die Standard-Shell der meisten Linux-Distributionen. Die Shell beherrscht die Features der Borune- Korn- und C-Shell. Redet jemand von einer Shell, spricht man meistens von Bash. Um das volle Potenzial der Bash zu nutzen sollte man sich “.bashrc“-Datei anschauen und an seine Bedürfnisse anpassen, für den Anfang sollte meine Datei als Vorlage genügen. -> bashrc

 

Z-Shell (zsh)

Die Zsh kann man als eine Zusammenstellung aller Verbesserungen und Features aus der bash, der csh und der tcsh betrachten.

Zu einigen ihrer Features zählen:

  • eine frei programmierbare Wortvervollständigung (TAB-Completion)
  • die Möglichkeit, die History aus anderen – gleichzeitig laufenden – Shells zu nutzen
  • Rechtschreibüberprüfung
  • nahezu vollständige Kompatibilität zur bash, ksh und tcsh

-> Quelle: http://de.wikipedia.org/wiki/Unix-Shell#Die_Z-Shell

Bei der Z-Shell kann hat man noch viel mehr Einstellungsmöglichkeiten, welche einem Anfangs ggf. überfordern können, daher auch hier meine “.zshrc“-Datei als Vorlage. -> zshrc

 

Z-Shell installieren:

sudo aptitude install zsh

Z-Shell ausprobieren:

zsh

Standardmäßig die Z-Shell verwenden:

sudo chsh -s /usr/bin/zsh `whoami`

 

Probieren geht über studieren…

… was ist damit sagen will, wer einmal die Vorteile der Shell erkannt hat und einige Befehle kennt, wird die Shell lieben lernen!

 

Linux-Dateipfade einigermaßen kennen

Auch wenn in der Shell meist angezeigt wird in welchem Verzeichnis man sich gerade befindet, kann es seht hilfreich sein, wenn man ungefähr weiß wo sich was bei Linux befindet! -> http://wiki.ubuntuusers.de/Verzeichnisstruktur

Verzeichnis Bedeutung ~ Windows
/
Wurzelverzeichnis
C:\
/boot
Bootloader
C:\
/etc
Systemkonfiguration registry,

C:\WINDOWS\*.ini
/bin
Systemprogramme für Benutzer
C:\WINDOWS\,C:\WINDOWS\COMMAND\
/sbin
Systemprogramme und -dienste für Admins
/lib
Systembibliotheken und Treiber
C:\WINDOWS\SYSTEM32\
/tmp
Temporäre Dateien
C:\WINDOWS\TEMP\
/usr
(“Unix System Resources”)
/usr/bin
Programme für Benutzer
C:\Programme\*\
/usr/sbin
Programme und Dienste für Admins
/usr/lib
Bibliotheken
/home
Heimatverzeichnisse
C:\Dokumente und Einstellungen\
/home/user
Heimatverzeichnis des Benutzers user
/root
Heimatverzeichnis des Benutzers root
/var
Daten von Diensten
/var/log
Systemprotokolle
/media
Wechseldatenträger, z.B. USB-Stick
/media/cdrom
CD-ROM
A:\, D:\, E:\,...

 

Beim Login in die Shell, landet man meistens in seinem eigenen home-Verzeichnis (z.B.: /home/lars/). Im “Prompt” (dem Text vor der Eingabeaufforderung, in der Shell) könnte nun so etwas angezeigt werden “lars@ubuntu:~$“.

lars ist hier der User-Name, ubuntu der Name des PCs und das ~ (Tilde-Zeichen) steht als Abkürzung und Synonym für das Homeverzeichnis, in welchem wir uns gerade befinden, dies kannst du gleich durch die Eingabe des Befehl “pwd” (print working directory) überprüfen. ;-)

 

Groß- und Kleinschreibung beachten

Anders als bei Windows unterscheidet Linux Groß- und Kleinschreibung, hier einige Beispiele zur Verdeutlichung …

mkdir lall

(mkdir – make directories)

mkdir Lall
touch lall

(touch – erstellt eine leere Datei)

touch Lall

 

Nun können wir uns mittels “ls” (ls – list directory contents) bzw. …

ls -latrF --color=auto

… anzeigen lassen, welche Dateien / Verzeichnisse im aktuellen Verzeichnis erstellt wurden. Mittels “rm” bzw. “rmdir” kannst du diese Dateien wieder löschen. Falls du versehentlich z.B.: “touch ./–help” ausführst und somit eine leere Datei mit dem Namen-“–help” erstellt hast, kannst du diese mittels “rm ./–help” wieder entfernen.

 

Der Befehl “man” (z.B.: man mkdir) zeigt eine ausführliche Hilfe zum angegebenen Befehl an und “apropos” (z.B.: apropos mkdir) zeigt dessen Funktion schnell an… zudem kann man hinter den Befehlen auch “–help” (mkdir –help) schreiben

 

Achtung
Achtung: Vorsicht der Befehl “rm -r” löscht rekursiv, am Anfang sollte man diesen Parameter ggf. mit -i kombinieren, so dass vor dem löschen einer Datei noch einmal nachgefragt wird, ob diese wirklich gelöscht werden soll. (z.B.: rm -ri lall/) -> safe-rm can save your life

 

Die Navigation

Ebenfalls ein sehr großes Themenfeld ist die Navigation in der Shell, angefangen von der Navigation durch die Verzeichnisse / Dateien … über die Verwendung der History (bereits eingegebene Befehle in der Shell) … bis hin zur Navigation innerhalb der Shell.

Navigation in Verzeichnissen

Befehl BEDEUTUNG
cd ..
wechselt ein Verzeichnis nach oben
cd ../..
wechselt zwei Verzeichnise nach oben
cd ~
wechselt in dein home-Verzeichnis
TAB
durch das drücken der Tabulator-Taste, wird deine Eingabe vervollständigt -> ggf. 2x hintereinander TAB drücken !!!
».«
jedes Verzeichnis enthält eine Referenz auf sich selbst, diesen Punkt benötigt man vor allem,wenn man eine ausführbare Datei starten möchte… (z.b: cd /bin/; ./bash;)
pwd
zeigt an wo du dich befindest

 

Durch das drücken der TAB-Taste kann man sich viel Tipparbeit ersparen… :-)

Navigation in der Shell

BEFEHL / Tastenkürzel BEDEUTUNG
<Strg> + d
Logout aus der Shell (logout bzw. exit)
<Strg> + c
laufender Prozesse (im Vordergrund) wird beendet
<Strg> + l
räumt die Ausgabe auf (clear)
fc -l
zeigt die letzten Befehle in einer Liste an
Pfeiltasten (noch oben / unten)
letzte Befehle durchblättern
Pfeiltasten (noch rechts / links)
Cursor auf der Konsole (rechts / links) bewegen
<Strg> + r
sucht einen Befehl in der Bash-History (mehrmaliges drücken von Strg+r geht weiter in der History zurück)
Alt + .
schreibt den letzten Parameter des letzen Befehls auf die Konsole
!$
schreibt den letzten Parameter des letzen Befehls auf die Konsole (Alt + .)
!!
führt den letzten Befehl noch einmal aus
!string
startet den letzten Befehl, der mit sting anfängt
!?string
startet den letzten Befehl, der string enthält
^sting1^string2
wiederholt den letzten Befehl, wobei sting1 doch string2 ersetzt wird
<Strg> + a
Cursor am Anfang der Zeile
<Strg> + e
Cursor am Ende der Zeile
<Strg> + w
schneidet das letzte Wort aus
<Strg> + u
scheidet alles vor dem Cursor aus
<Strg> + k
scheidet alles hinter dem Cursor aus
<Strg> + y
fügt die zuletzt ausgeschnittenen Daten ein

 

PS: wie bereits erwähnt entfaltet die Shell ihr volles Potenzial erst, wenn man diese ein wenig an seine Wünsche anpasst, daher hier noch einmal der Verweiß auf die .bashrc und .zshrc

 

Kommandos hintereinander ausführen

Wie bereits kurz zuvor gezeigt, kann man Befehle auch hintereinander ausführen… z.B.:

cd /bin/; ./bash;

Hier werden die Befehle “cd /bin/” und “./bash” einfach nacheinander ausgeführt. Wenn man den zweiten Befehl jedoch nur ausführen möchte, wenn der erste Befehl ohne Probleme funktioniert hat, kann man && zwischen den beiden Befehlen verwenden… z.B.:

cd /bin_lall/ && ./bash;

Und wenn man den zweiten Befehl nur ausführen möchte, wenn der erste Befehl nicht funktioniert hat, nimmt man “||“… z.B.:

cd /bin_lall/ || echo "ggf. existiert /bin_lall nicht";

PS: Natürlich muss man nicht jedesmal in das Verzeichnis /bin wechseln, wenn man ein Programm aus diesem Verzeichnis öffnen möchte, dazu wird in der Shell die Variable “$PATH” verwendet. z.B.:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11

 

Mehrzeilige Kommandos

Wenn man ein Kommando / Befehl über mehrere Zeilen aufteilen möchte, kann man dies mithilfe von “\” machen… z.B.:

find /etc/ \
-iname "pass*"
Hier gibt es weitere Infos zum “find”-Befehl und hier noch eine Befehlsübersicht für alle die gerade Ihre ersten Schritte auf der Shell wagen…

 

Syntax Name Beschreibung ~ Windows
pwd
present working directory Anzeige des aktuellen Arbeitsverz.
cd Zielverzeichnis
change directory Verzeichniswechsel
CD
ls Verzeichnis
list Verzeichnisinhalt anzeigen
DIR
file Datei
% Dateiformat oder -typ
echo Zeichenkette
% Zeichenkette ausgeben
cat Datei
concatenate Dateiinhalt ausgeben
TYPE
more Datei
% dito, seitenweise
MORE
less Datei
% dito, blättern und suchen
touch Datei
% Leere Datei anlegen
cp Quelle Ziel
copy kopieren
COPY
mv Quelle Ziel
move verschieben, umbenennen
MOVE, REN
rm Datei
remove löscht eine Datei
DEL, ERASE
mkdir Verzeichnis
make directory neues Verzeichnis anlegen
MD
rmdir Verzeichnis
remove directory (leeres) Verzeichnis löschen
RD

-> linux-kommandos-als-hintergrundbild ;-)

 

Dateien bearbeiten

Wer direkt in der Shell Dateien verändern möchte, sollte sich den “vim”-Editor anschauen, wie die Shell ist dieser Editor gewöhnungsbedürftig aber man gewinnt Ihn mit der Zeit lieb… ;-) In diesem HowTo habe ich versucht die wichtigsten Funktionen von vim zusammenzufassen. Und hier noch eine Schnellübersicht:

 

BEFEHL / TASTENKÜRZEL BEDEUTUNG
i Text einfügen, vor dem Cursor
R Text ab Cursor-Position überschreiben
<Strg> + v Bereich markieren
<ESC> Bearbeitungsmodus beenden
y kopieren
p einfügen
:q vi/vim beenden
:w Datei speichern

 

 

vi-vim-cheat-sheet_de_layout
vi-vim-cheat-sheet_de_layout

 

Es gibt unter Linux noch etliche Programme, welche einem beim bearbeiten von Dateien hilfreich sein können z.B.: sed

sed -i 's/Ubuntu/Windows/g' test.txt

Dieser Befehl ersetzt das Wort “Ubuntu” durch “Windows” in der ganzen Datei “test.txt” im aktuellen Verzeichnis. Weitere Infos zu sed findest du hier -> streameditor-sed und hier noch ein alter Beitrag zum Thema -> Dateien-in-der-shell-bearbeiten

 

Programme im Hintergrund verschieben

Man kann Programme und Befehle auch im Hintergrund ausführen bzw. diese in den Hintergrund verschieben…

lars@ubuntu ~$ kommando1 & 
[1] 5520
lars@ubuntu ~$ kommando2 & 
[2] 5521
lars@ubuntu ~$ fg %2 
kommando2

 

kommando1 und kommando2 wurden beide im Hintergrund ausgeführt, dann wurde kommando2 mittels dem Befehl “fg” wieder in den Vordergrund geholt. Wenn man kommando2 wieder in den Hintergrund verschieben möchte drücken wir: <Strg> + z

[2]+  Stopped kommando2
lars@ubuntu ~$ bg 
[2]+ kommando2 &

Mit Hilfe des Befehls ”

bg"

wird eine angehaltener Job der Shell in den Hintergrund verschoben und wieder gestartet:

Hier gibt es diesbezüglich weitere Infos: Prozess-anhalten

 

StdIn & StdOut

Sehr hilfreich sind folgende kleine Helfer in der Shell -> Pipezeichen (|) Größer-als-Zeichen (>) und Kleiner-als-Zeichen (<)

mithilfe dieser Zeichen kann man Programm bzw. dessen Ausgaben umleiten. z.B.:

ls -l /usr/bin > /tmp/Alle_Benutzerprogramme.txt

-> schreibt die Ausgabe von “ls” des Verzeichnisses /usr/bin/ in die Textdatei /tmp/Alle_Benutzerprogramme.txt

grep http /etc/services | wc -l

-> zählt alle Zeilen in der Textdatei /etc/services, die die Zeichenkette http enthalten

 

Der Befehl “grep” kann Verzeichnisse, Dateien oder Ausgaben durchsuchen bzw. filtern, daher solle man sich diesen Befehl noch mal genauer ansehen!!!

 

Zum Schluss verlinke ich noch einige alte Blog-Post welche weitere Informationen zur Shell beinhalten, viel Spaß beim testen… :D

– Dateien verschieben in der Shell -> http://suckup.de/blog/2010/01/31/mv-linux/

reguläre Ausdrücke (wildcards) in der Shell -> http://suckup.de/blog/2010/02/09/wildcards-in-der-shell/

– Shell-Programmierung: Schleifen -> http://suckup.de/blog/2010/02/09/nice-try/http://suckup.de/blog/2010/01/31/bash-programmierung-schleifen/

– Bedingungen in der Shell -> http://suckup.de/blog/2010/01/31/bedingungen-in-der-shell-linux/

– crontab -> http://suckup.de/blog/2010/02/08/crontab/

– ps – prozessstatus -> http://suckup.de/blog/2010/09/14/shell-ps-prozessstatus/

– Rechnen in der Shell -> http://suckup.de/blog/2010/01/31/rechnen-in-der-shell/

– HTML-Umlaute in der Shell korrigieren -> http://suckup.de/blog/2010/02/13/html-umlaute-korrigieren/

– cdrecord – ISO erstellen und CD brennen -> http://suckup.de/blog/2010/01/31/cdrecord-iso-erstellen-und-brennen/

– aptitude & dpkg -> http://suckup.de/blog/2010/02/13/aptitude-dpkg/

Unix-Dateiattribute (Zugriffsrechte) verändern -> http://suckup.de/blog/2010/01/31/chmod-howto/

– su & sudo & Setuid-Bit -> http://suckup.de/blog/2010/02/08/su-sudo-setuid-bit/

– Systeminfos anzeigen -> http://suckup.de/blog/2010/02/08/systeminfos-anzeigen-lassen/

– Speicherverbrauch anzeigen -> http://suckup.de/blog/2010/02/08/speicherverbrauch-anzeigen-lassen/

– mount über SSH -> http://suckup.de/blog/2010/02/07/mount-ueber-ssh/

– Ports via ssh weiterleiten -http://suckup.de/blog/2010/03/29/ports-via-ssh-weiterleiten/

– SSH – Hostnamen vervollständigen -> http://suckup.de/blog/2010/09/14/ssh-hostnamen-vervollstaendigen/

– Desktop Firewall – iptables -> http://suckup.de/blog/2010/01/31/desktop-firewall-iptables/

– deine öffentliche IP-Adresse in der Shell -> http://suckup.de/blog/2010/01/31/deine-oeffentliche-ip-adresse/

– offene Ports analysieren -> http://suckup.de/blog/2010/03/28/offene-ports-analysieren/

– TCPdump – HowTo -> http://suckup.de/blog/2010/08/02/tcpdump-howto/

– netstat + ss + lsof -> http://suckup.de/blog/2010/01/31/netstat-ss-lsof/

– nethogs und iftop – Traffic analysieren -> http://suckup.de/blog/2010/01/31/nethogs-und-iftop-traffic-analysieren/

– lsof – list open files -> http://suckup.de/blog/2010/02/22/lsof-list-open-files/

MoonOS – Enlightening Freedom

moonOS ist eine auf Ubuntu 10.10 basierende Linux Distribution, in der neusten Version 4 namens “NEAK” wurde “E17″ durch “Gnome” ersetzt. (habe bisher jedoch nur eine 32-Bit Version gefunden)


Wenn man die Live-CD startet, fällt das Design und die geänderte Verzeichnisstruktur als erstes auf, aber dazu kommen wir gleich. :-)

Von Anfang an findet man sich zurecht, was daran liegen könnte, dass es noch immer ein “Ubuntu”-System ist: Auch wenn “Docky” das untere Gnome-Panel ersetzt und ein neues Gnome-Theme (Clearlooks Revamp) installiert wurde.


Was ich persönlich sehr schön finde ist, dass nicht viele Programme Vorinstalliert sind, man jedoch sofort MP3 hören, Video schauen etc. kann. Zudem sind bereits ein paar Programme installiert, welche ich bei Ubuntu ebenfalls nachinstalliert habe: Nautilus Elementary als Dateimanager, Gloobus Preview als Vorschau-Programm für Bilder, Musik und Videos.


MoonOS_Software_Center
MoonOS_Software_Center


MoonOS-Quellen:

deb http://moonos.linuxfreedom.com/moonos neak main upstream
deb-src http://moonos.linuxfreedom.com/moonos neak main upstream

Wie bereits erwähnt wurde die Verzeichnisstruktur angepasst, so dass Neueinsteiger sich besser zurecht finden sollen, zudem kann man die Dateien jedoch auch über die alte Verzeichnisstruktur erreichen. Im Grunde sind die Verzeichnisse wie bei “Mac OS X” angeordnet (z.B.: mount –bind” (ex. mount –bind /usr/bin /System/Excutables).


MoonOS_filesystem
MoonOS_filesystem
MoonOS_filesystem_2
MoonOS_filesystem_2


Außerdem wartet MoonOS mit “AppShell” (Applications Framework) auf, was eine Eigenentwicklung von MoonOS ist, leider jedoch nicht richtig funktioniert: Es gibt momentan nur 3 Programme (Cheese, GIMP & Pidgin), welche dieses Framework nutzten, so dass auch nur diese unter “/AppFiles” angezeigt werden.


Fazit: Ubuntu in grün + der Versuch einige Funktionen von Mac OS X zu integrieren. :-)

SpeedUp Ubuntu

1.) Kenne dein System (Hardware)

Am besten ist es den Flaschenhals an seinem System ausfindig zu machen, dafür sollte man wissen wie viel Arbeitsspeicher zur Verfügung steht, CPU Auslastung, Festplattengeschwindigkeit etc. aktuell verbraucht wird. Ggf. kann man auch mit neuer Hardware (z.B. > RAM) das System beschleunigen, dies muss natürlich bei jedem System einzeln geprüft werden.


1.1) Arbeitsspeicher


free -mt


  • total: kompletter physikalischer Speicher ( – ein wenig für den Kernel)
  • use: verwendeter Speicher
  • free: freier Speicher
  • buffers/cache: Speicher der wieder freigegeben werden kann, wenn dieser benötig wird. (Cache)

Somit sollte auch klar sein, dass es GUT ist, wenn der Arbeitsspeicher gut ausgenutzt wird, sollte jedoch “use” – “buffer/cache” zu klein werden oder bereits “Swap” (Auslagerungsspeicher -> meist Festplattenplatz) verbracht wird und somit das System wirklich ausbremst.


1.2) Festplatte


hdparm -t /dev/harddrive


Wenn es ewig dauert bis das System gebootet ist oder Programme starten, sollte man die Lesegeschwindigkeit seiner Festplatte einmal testen und ggf. eine neue Festplatte kaufen. ;-) Dabei sollte die Festplatte nicht unter ~50MB/s sein. Moderne SATA-Festplatten haben im Durchschnitt 100MB/s und bei SSD-Festplatten ist eine Datenraten bis zu ~500 MB/s möglich. (SATA-600).


1.3) CPU


top


Ich hatte das Programm “top” bereits in einem vorherigen Blog-Post beschrieben -> http://suckup.de/blog/2010/11/09/linux-server-analysieren/ <- top zeigt unter anderem die Auslastung der CPU je Programm an.


1.4) Grafikkarte


glxinfo | grep direct


Wenn du Engpässe beim abspielen von Videos oder beim Spielen feststellst, kannst du mit dem vorherigem Befehl feststellen, ob “Direct Rendering” aktiviert ist. Ggf. reicht es aus andere Treiber zu installieren, nach meiner Erfahrung sind die Proprietäten Treiber bei neuen Grafikkarten (ATI & NVIDIA) sehr gut. (http://suckup.de/blog/2010/02/09/lxde-compiz-emerald-awn-ubuntu-howto/) Wer eine alte Grafikkarte hat, kann auch diese 3D-Effekte (Compiz) ausschalten, ggf. andere Treiber installieren und schauen, ob der Desktop dadruch flüssiger läuft.


2.) Lightweight Software

Bevor man in neue Hardware investiert (oder sich diese zu Weihnachten schenken lässt) sollte man einmal “Lightweight Software” ausprobieren, diese bieten zwar ggf. weniger Funktionen, sind dafür aber schneller.


z.B.:
Desktop: Gnome -> LXDE oder Xfce
Browser: Firefox -> Chromium


https://wiki.archlinux.org/index.php/Lightweight_Applications


3.) Speicherplatz

3.1) Filesystem
Achtung
Achtung: Backup nicht vergessen!!!


Als erstes sollte man sich ein wenig mit dem Filesystem beschäfitigen, da ganz nach verwenddung ggf. ein anderes Filesystem verwendet werden sollte.


Zusammenfassung:
XFS: ausgezeichnete Leistung bei großen Dateien, dafür langsamere Geschwindigkeit bei kleinen Dateien (z.B. für ISO’s oder großen Downloads unter /home)


Reiserfs: ausgezeichnete Leistung bei kleinen Dateien (z.B. für viele kleine Dateien unter /var)


Ext3: durchschnittliche Leistung


Ext4: super Gesamtleistung (Leistungsprobleme bei sqlite und anderen Datenbanken)


JFS: gute Gesamtleistung (sehr geringe CPU-Last)


Btrfs: super Gesamtleistung (besser als ext4 ABER ggf. unstable)


3.2) Mount Optionen

/dev/partition /mnt/partition partitiontype option1,option2 0 0


Ein weitere Möglichkeit das Dateisystem zu optimieren, sind die “Mount Optionen”, diese trägst du in der Datei “/etc/fstab” ein. So kann man z.B. durch “relatime” oder “noatime” verhindern, dass die Zugriffszeiten in der Inodetabelle gespeichert werden und so die Festplattenaktivität reduziert werden.



sudo tune2fs -O dir_index /dev/partition


Mit dem vorigem Befehl wird die automatische Indizierung von Ordnerinhalten aktiviert, so dass man schneller aus die Daten zugreifen kann.
(wer ggf. von Ext3 auf Ext4 wechseln möchte kann dies tun: http://suckup.de/blog/2010/02/14/konvertiere-ext3-zu-ext4/)
Sowohl bei Ext3 als auch bei Ext4 wird ein Journal geschrieben, dieses kann man mit der Option “data=writeback” einschränken und somit die Preformance steigern, kann jedoch zu Problemen führen, da die metadata nun “träge” gespeichert werden.


Journal‘ – Langsamster und sicherster Modus. Nicht nur die Metadaten sondern auch die Nutzdaten werden zunächst in das Journal, und dann erst auf die Festplatte geschrieben.
Ordered‘ – Guter Kompromiss aus Sicherheit und Geschwindigkeit (Standard). Die Nutzdaten werden auf die Festplatte geschrieben sobald die Metadaten im Journal abgelegt wurden.
Writeback‘ – Schnell, dafür relativ unsicher. Die Nutzdaten werden sofort auf die Festplatte geschrieben ohne das gewartet wird bis die Metadaten im Journal abgelegt wurden.


tune2fs -o journal_data_writeback /dev/partition


mit dem vorherigem Befehl schreibt man das vorhandene Journal um…


/dev/partition / ext4 errors=remount-ro,noatime,nodiratime,data=writeback,barrier=0,nobh,commit=100,nouser_xattr 0 1


noatime” sagt aus, dass nicht gespeichert wird, wann die Datei angesehen wurde. (man liest eine Datei und gleichzeitig wird auf die Dateien geschrieben) Auch “barrier=0” trägt dazu bei, dass deine Daten unsicherer sind, die Option steigert jedoch die Performance. (so soll die Option einen sehr positiven Einfluss auf die Schreib-Performance von MySQL haben) Die Option “nobh” versucht “associating buffer heads” zu vermeiden und bringt eine kleine Performace verbesserung. Als nächstes kommt die Option “commit=100“, diese Option sagt aus, dass die Daten nur alle 100 Sekunden auf die Festplatte geschrieben werden, dafür verliet man ggf. auch 100 Sekunden bei einem Ausfall (default 5). “nouser_xattr” schaltet einige weitere Optionen vom Dateisystem aus und bringt noch einmal einen kleinen Performanceschub.



XFS -> zur optimierung kann man das Dateisystem mit dem folgedem Kommando anlegen …


mkfs.xfs -l internal,lazy-count=1,size=128m -d agcount=2 /dev/partition


… und die “Mount Option” -> “logbufs=8” in der fstab einfügen. Zudem kann man das gemountete XFS-Filesysteme per “filesystem reorganizer for XFS” Optimieren.


xfs_db -c frag -r /dev/partition


-> stellt den Fragmentationsgrad fest


xfs_fsr /dev/partition


-> defragmentiert die Partition (apt-get install xfsdump)


Die Option “data=writeback” beschleunigt das Dateisystem, kann jedoch zu Datenverlust beim Stromausfall führen. Auch “notail” beschleunigt Reiserfs bewirkt jedoch, dass zirka 5% mehr an Festplattenplatz benötigt wird. Zudem kann man mit dem nächsten Befehl bereits beim erstellen das Dateisystems dieses beschleunigen, indem man das Journal auf eine zweite Partition auslagert.


mkreiserfs –j /dev/hda1 /dev/hdb1



Dieses neue Dateisystem bietet “online Defragmentation”, “Optimierungen für SSDs”, “Snapshots” und viele weitere Sinnvolle Funktionen, wird jedoch momentan noch aktiv entwickelt.


Informationen zum optimieren von SSDs findest du hier -> https://wiki.archlinux.org/index.php/SSD#Tips_for_Maximizing_SSD_Performance


(Im Arch-Linux Wiki habe ich auch noch von der Möglichkeit gelesen “/usr” komplett zu komprimieren (aufs2 + squashfs-tools) da moderne CPUs schneller die Dateien entpacken können als das größere Daten von der Festplatte geladen werden können, leider habe ich diesbezüglich keine Infos zu Ubuntu gefunden.)


4.) CPU

Hier kann man in erster Lienie Overclocking betreiben und somit einiges an Geschwindigkeit herausholen, so habe ich z.B. aus einem “AMD Athlon II X3″ einen “AMD Athlon II X4″ gemacht. (PS: wer Fragen zur Hardware hat, sollte sich einmal das Computerbase-Forum anschauen, habe dort auch meinen neuen PC gemeinsam mit anderen Mitgliedern zusammengestellt -> “http://www.computerbase.de/forum/showthread.php?p=8532713” + Vorlagen für verschiedene Preisklassen http://www.computerbase.de/forum/showthread.php?p=3395405)


Wenn man auf der Software-Seite seine CPU besser nutzen möchte kann man einen optimierten Kernel bauen oder zumindest bei Arch-Linux sein System mit neuen “CFLAGS & CXXFLAGS” neu-kompilieren lassen. (https://wiki.archlinux.org/index.php/Pacbuilder) Falls jemand ein ähliches Programm für Ubuntu kennt, würde ich dies gerne erfahren. :-)


4.1) optimierten Kernel bauen

Download: KernelCheck – .deb


Download: Patch


Install: KernelCheck
dpkg -i *.deb


Starte KernelCheck
-> “custom complication”
-> “normal performance patch”
-> “Configure kernel options manually, auto-configure ALSA options for sound, Optimize the kernel, Install kernel package after complication”
-> “Apply custom path to kernel”


Nachdem die Dateien heruntergeladen und entpackt wurden, bekommst du eine Shell in der du den Patch einspielen musst.


cd linux
cp /home/USER/Desktop/patch-2.6.36-ck2 .
patch < patch-2.6.36-ck2 -p1


Nachdem du das Fenster wieder verlässt kannst du noch einige Optimierungen auswählen:


-> “Processor type and features”



4.2) optimierten Kernel (+ Brain Fuck Scheduler)


… man kann hier natürlich auch auf ppa zurückgreifen (jedoch noch nicht getestet)!


sudo add-apt-repository ppa:chogydan/ppa && sudo apt-get update
sudo apt-get install linux-ck-generic linux-ck-headers-generic


5.) RAM & swap


5.1) Auslagerung von Speicher
swappiness” ist eine Einstellung, welche dem Kernel mitteilt ob der RAM oder der SWAP bevorzugt werden soll. Der Wert der Variablen kann zwischen 0 und 100 liegen. Der Wert 0 bedeutet, dass der Kernel den Auslagerungsspeicher auf der Festplatte (swap) nur dann nutzt, wenn es nicht anders geht. Der Wert 100 bedeutet das genaue Gegenteil. Es wird so früh wie möglich ein unbenutzter Speicherbereich in den Swapspeicher geschoben.


vim /etc/sysctl.conf
vm.swappiness=20
vm.vfs_cache_pressure=50


5.2) Compcache
Compcache, auch als “ramzswap kernel module” bezeichnet erstellt Swap im Arbeitsspeicher und komprimiert diesen. So dass zwar die CPU wieder mehr zu tun hat, wir jedoch mehr Auslagern können, ausserdem hat dies den Vorteil, dass die Lese-/Schreizugriffe auf der Festplatte weiter reduziert werden.



5.3) tmpfs
Einen ählichen Ansatz, wie “Compcache” verfolgt auch “tmpfs” hier werden die Daten jedoch einfach in den Arbeitsspeicher geschrieben, ohne diese zu komprmieren. Wenn man jedoch genügent Speicher übrig hat, kann man so z.B. die “/tmp”-Daten in den Speicher auslagern.
vim /etc/fstab
tmpfs /tmp tmpfs defaults,noatime,nodev,nosuid,mode=1777 0 0
(nach diesem Prinzip kann man auch z.B. den Cache vom ff oder vom Chrome auslagern)


6.) Netzwerk & Internet


6.1) DNS
Ggf. sollte man schauen, ob man nicht einen schnelleren DNS-Server in seiner nähe findet ;-) -> http://suckup.de/blog/2010/02/13/find-a-fast-dns-server/
zumdem sollte man seinen eigenen Hostnamen in die der Datei “/etc/hosts” eintragen.
127.0.0.1 localhost
127.0.1.1 Rechnername
wird zu …
127.0.0.1 localhost Rechnername
127.0.1.1 Rechnername


Wer Spaß hat kann sich auch einen kleinen lokalen DNS-Cache installieren.
sudo apt-get install dnsmasq
vim /etc/dnsmasq.conf
listen-address=127.0.0.1
vim /etc/dhcp3/dhclient.conf
prepend domain-name-servers 127.0.0.1;
z.B.:
#supersede domain-name "suckup.de voku-online.de";
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;
vim /etc/resolv.conf
z.B.:
search suckup.de
nameserver 127.0.0.1
nameserver 8.8.4.4
vim /etc/resolv.dnsmasq.conf
resolv-file=/etc/resolv.dnsmasq.conf
listen-address=127.0.0.1
vim /etc/resolv.dnsmasq.conf
nameserver 8.8.4.4
vim /etc/resolv.conf
z.B.:
search suckup.de
nameserver 127.0.0.1
sudo /etc/init.d/dnsmasq restart


6.2) SYSCTL

In der Datei “sysctl.conf” kannst du Paramether für dein System einstellen.


wget -c http://www.rubyringtechnologies.com/files/sysctl.conf.txt -O ~/sysctl.conf
sed -i 's/\(net\.core\.hot_list_length\ =\ 256\)/\#\1/' ~/sysctl.conf
cat < ~/sysctl.conf >> /etc/sysctl.conf
sysctl -p


6.3) MTU


Typische MTU-Größen:
Medium MTU in Bytes
Hyperchannel 65535
Token Ring(4)(802.5) 4464
Token Ring(16) 17914
FDDI 4352
Ethernet 1500
Gigabit Ethernet
mit Jumboframes
9000
PPPoE (z. B. DSL) ≤ 1492
SLIP/PPP (low delay) 296
X.25 576
FibreChannel theoretisch unbegrenzt
ISDN 576
DQDB
HIPPI
ATM 4500, s. u.
ARCNET
802.11 2312 (WiFi)

Quelle: http://de.wikipedia.org/wiki/Maximum_Transmission_Unit


ping -Mdo -s 1500 8.8.8.8


-> mit dem vorherigem Befehl kannst du testen welche MTU funktioniert (z.B. 1500)


Konfig-Beispiel:

vim /etc/network/interfaces

iface eth0 inet static
address 192.168.0.1
network 192.168.0.0
gateway 192.168.0.254
netmask 255.255.255.0
mtu 1492


7.) preload, ureadahead etc.

ureadahead ist standardmäßig bereis bei Ubuntu installiert und lädt Programme bereits beim Bootvorgang in den RAM, falls man z.B. preload (apt-get install preload) einsetzten will, sollte man ureadahead deaktivieren, da es die selbe Aufgabe übernimmt. “preload” hat den Vorteil, dass es im Betrieb protokolliert welche Programme wirklich verwendet werden und nur diese bereits beim Boot in den RAM lädt, daher startet das System schneller, die Programm werden jedoch nicht schneller gestartet als mit ureadahead. (persönliche Meinung – nicht auf die Millisekunde gemessen) außerdem verursacht das Programm “preload” immer CPU-Last und verbraucht somit mehr Strom als wie ohne. ;-) Um den Boot-Vorgang näher zu analysieren soll man sich einmal “bootchart” (http://wiki.ubuntuusers.de/bootchart) anschauen.


8.) prelink

Wenn man den Start von Programmen beschleunigen will, kann man “prelink” (apt-get install prelink) ausprobieren, besonders bei KDE bringt dies einiges, da somit bei “dynamic linking” Programmen (Programm die nicht gelinkt sind, um z.B. Speicherplatz zu sparen) die Libraries nicht jedesmal bei geladen werden müssen. Prelink nutzt dies insofern aus, als dass es das Linken im Voraus ausführt und in der Programmdatei abspeichert. Somit kann man (fast) jedes Programm beschleunigen.


vim /etc/default/prelink

PRELINKING=unknown 

wird zu …

PRELINKING=yes 


http://wiki.ubuntuusers.de/Prelink


9.) localepurge

Nicht verwendete Sprachdateien zu entfernen erscheint zwar auf den ersten Blick nicht wirklich als Optimierung, jedoch hat sich in der Praxis gezeigt, dass einige Programm diese Sprachdateien z.B. beim Start in den Speicher laden, daher kann man so nicht nur Festplattenplatz, sondern ggf. auch Arbeitsspeicher einsparen und Programme schneller starten.



Quellen:

https://wiki.archlinux.org/index.php/Maximizing_Performance

http://sidux.com/index.php?module=Wikula&tag=SiduxTweaks

http://wiki.ubuntuusers.de/tuning

unoconv: umwandlung zwischen allen Dokument-Formaten von OpenOffice

Mit unoconv kann man viele Dokument-Formate konvertieren, unterstützte Formate sind unter anderem das  “Open Document Format” (.odt), “MS Word” (.doc), “MS Office Open/MS OOXML” (.xml), “Portable Document Format” (.pdf), “HTML”, “XHTML”, “RTF”, “Docbook” (.xml)…  

Funktionen:

  • konvertiert alle Formate die OpenOffice unterstützt
  • OpenOffice unterstützt bis zu 100 Dokument Formate :-)
  • kann genutzt werden um Vorgänge zu automatisieren (Skripte -> z.B. shell oder php)
  • unterstützt weitere Tools -> “asciidoc”, “docbook2odf/xhtml2odt”
  • kann Style-Vorlagen (templates) während der Konvertierung anwenden (corporate identity)
  • kann sowohl als Server, als auch als Client fungieren


Formate:

Es folgt eine Liste von Ausgabe-Formaten von OpenOffice (und somit auch von unoconv), die Eingabe-Formate können sich jedoch unterscheiden -> INPUT / EXPORT


Export:

  • bib – BibTeX [.bib]
  • doc – Microsoft Word 97/2000/XP [.doc]
  • doc6 – Microsoft Word 6.0 [.doc]
  • doc95 – Microsoft Word 95 [.doc]
  • docbook – DocBook [.xml]
  • html – HTML Document (OpenOffice.org Writer) [.html]
  • odt – Open Document Text [.odt]
  • ott – Open Document Text [.ott]
  • ooxml – Microsoft Office Open XML [.xml]
  • pdb – AportisDoc (Palm) [.pdb]
  • pdf – Portable Document Format [.pdf]
  • psw – Pocket Word [.psw]
  • rtf – Rich Text Format [.rtf]
  • latex – LaTeX 2e [.ltx]
  • sdw – StarWriter 5.0 [.sdw]
  • sdw4 – StarWriter 4.0 [.sdw]
  • sdw3 – StarWriter 3.0 [.sdw]
  • stw – Open Office.org 1.0 Text Document Template [.stw]
  • sxw – Open Office.org 1.0 Text Document [.sxw]
  • text – Text Encoded [.txt]
  • txt – Plain Text [.txt]
  • vor – StarWriter 5.0 Template [.vor]
  • vor4 – StarWriter 4.0 Template [.vor]
  • vor3 – StarWriter 3.0 Template [.vor]
  • xhtml – XHTML Document [.html]
  • […]


Installation:

aptitude install unoconv asciidoc docbook2od


Beispiele 1: Standard

Als erstes ein simples Beispiel, hier wird einfach “odt” in ein “pdf” umgewandelt. Sehr hilfreich ist auch sich die Optionen einmal anzuschauen.

# unoconv - Dienst starten
unoconv --listener &
# odt -> pdf 
unoconv -f pdf some-document.odt
# Standard 
(unoconv --server localhost --port 2002 --stdout -f pdf some-document.odt)

Beispiele 2: Vorlage

Wie bereits auf der Entwicklerseite zu lesen ist, hilf uns ein Screenshot nicht wirklich weiter, daher folgt ein zweites Beispiel mit Vorlagen.

# Beispiel Dateien herunterladen 
wget http://dag.wieers.com/cv/Makefile
wget http://dag.wieers.com/cv/curriculum-vitae-dag-wieers.txt
wget http://dag.wieers.com/cv/curriculum-vitae-docbook.ott

# unoconv - Dienst starten
unoconv --listener &
# resume.txt -> resume.xm
asciidoc -b docbook -d article -o resume.xml resume.txt
# resume.xml -> resume.tmp.odt
docbook2odf -f --params generate.meta=0 -o resume.tmp.odt resume.xml
# resume.tmp.odt -> resume.odt + Template
unoconv -f odt -t template.ott -o resume.odt resume.tmp.odt
# resume.tmp.odt -> resume.pdf + Template
unoconv -f pdf -t template.ott -o resume.pdf resume.odt
# resume.tmp.odt -> resume.html + Template
unoconv -f html -t template.ott -o resume.html resume.odt
# resume.tmp.odt -> resume.doc + Template
unoconv -f doc -t template.ott -o resume.doc resume.odt

Beispiele 3: Server <-> Client

Wie bereits erwähnt kann man den Dienst auch als Server starten und von anderen Rechnern darauf zugreifen.

# unoconv - Server-Dienst starten
unoconv --listener --server 1.2.3.4 --port 4567
# Client -> Server 
unoconv --server 1.2.3.4 --port 4567

Beispiele 4: PHP

Man kann dies nun auch in Shell-Skripten nutzen oder wie in diesem Beispiel in PHP einbinden.

$this->Filegenerator = new FilegeneratorComponent ($this->params["form"]['uploaddocfile']);
// if the filegenerator did all it's magic ok then process
if($this->Filegenerator)
// returns the text version of the PDF
$text = $this->Filegenerator->convertDocToTxt();
// returns the html of the PDF
$html = $this->Filegenerator->convertDocToHtml();
// returns the generated pdf file
$pdf = $this->Filegenerator->convertDocToPdf($doc_id);
}
<?php
/**
* Class Used to convert files.
*@author jamiescott.net
*/
class FilegeneratorComponent extends Object {

// input folder types
private $allowable_files = array ('application/msword' => 'doc' );
// variable set if the constuctor loaded correctly.
private $pass = false;
// store the file info from constuctor reference
private $fileinfo;

/**
* Enter description here...
*
* @param array $fileinfo
* Expected :
* (
[name] => test.doc
[type] => application/msword
[tmp_name] => /Applications/MAMP/tmp/php/php09PYNO
[error] => 0
[size] => 79360
)
*
*
* @return unknown
*/
function __construct($fileinfo) {

// folder to process all the files etc
define ( 'TMP_FOLDER', TMP . 'filegenerator/' . $this->generatefoldername () . '/' );

// where unoconv is installed
define ( 'UNOCONV_PATH', '/usr/bin/unoconv' );
// where to store pdf files
define ( 'PDFSTORE', ROOT . '/uploads/generatedpdfs/' );
// where to store doc files
define ( 'DOCSTORE', ROOT . '/uploads/docfiles/' );
// apache home dir
define ( 'APACHEHOME', '/home/apache' );
// set some shell enviroment vars
putenv ( "HOME=".APACHEHOME );
putenv ( "PWD=".APACHEHOME );

// check the file info is passed the tmp file is there and the correct file type is set
// and the tmp folder could be created
if (is_array ( $fileinfo ) &amp;amp;&amp;amp; file_exists ( $fileinfo ['tmp_name'] ) &amp;amp;&amp;amp; in_array ( $fileinfo ['type'], array_keys ( $this->allowable_files ) ) &amp;amp;&amp;amp; $this->createtmp ()) {

// bass by reference
$this->fileinfo = &amp;amp;$fileinfo;
// the constuctor ran ok
$this->pass = true;
// return true to the instantiation
return true;

} else {
// faild to instantiate
return false;

}

}

/**
*      * takes the file set in the constuctor and turns it into a pdf
* stores it in /uploads/docfiles and returns the filename
*
* @return filename if pdf was generated
*/
function convertDocToPdf($foldername=false) {

if ($this->pass) {

// generate a random name
$output_pdf_name = $this->generatefoldername () . '.pdf';

// move it to the tmp folder for processing
if (! copy ( $this->fileinfo ['tmp_name'], TMP_FOLDER . 'input.doc' ))
die ( 'Error copying the doc file' );

$command = UNOCONV_PATH;
$args = ' --server localhost --port 2002 --stdout -f pdf ' . TMP_FOLDER . 'input.doc';

$run = $command . $args;

//echo $run; die;
$pdf = shell_exec ( $run );
$end_of_line = strpos ( $pdf, "\n" );
$start_of_file = substr ( $pdf, 0, $end_of_line );

if (! eregi ( '%PDF', $start_of_file ))
die ( 'Error Generating the PDF file' );

if(!file_exists(PDFSTORE.$foldername)){
mkdir(PDFSTORE.$foldername);
}

// file saved
if(!$this->_createandsave($pdf, PDFSTORE.'/'.$foldername.'/', $output_pdf_name)){
die('Error Saving The PDF');
}

return $output_pdf_name;

}

}

/**
* Return a text version of the Doc
*
* @return unknown
*/
function convertDocToTxt() {

if ($this->pass) {

// move it to the tmp folder for processing
if (! copy ( $this->fileinfo ['tmp_name'], TMP_FOLDER . 'input.doc' ))
die ( 'Error copying the doc file' );

$command = UNOCONV_PATH;
$args = ' --server localhost --port 2002 --stdout -f txt ' . TMP_FOLDER . 'input.doc';

$run = $command . $args;

//echo $run; die;
$txt = shell_exec ( $run );

// guess that if there is less than this characters probably an error
if (strlen($txt) < 10)
die ( 'Error Generating the TXT' );

// return the txt from the PDF
return $txt;

}

}

/**
* Convert the do to heml and return the html
*
* @return unknown
*/
function convertDocToHtml() {

if ($this->pass) {

// move it to the tmp folder for processing
if (! copy ( $this->fileinfo ['tmp_name'], TMP_FOLDER . 'input.doc' ))
die ( 'Error copying the doc file' );

$command = UNOCONV_PATH;
$args = ' --server localhost --port 2002 --stdout -f html ' . TMP_FOLDER . 'input.doc';

$run = $command . $args;

//echo $run; die;
$html= shell_exec ( $run );
$end_of_line = strpos ( $html, "\n" );
$start_of_file = substr ( $html, 0, $end_of_line );

if (! eregi ( 'HTML', $start_of_file ))
die ( 'Error Generating the HTML' );

// return the txt from the PDF
return $html;

}

}
/**
* Create file and store data
*
* @param unknown_type $data
* @param unknown_type $location
* @return unknown
*/
function _createandsave($data, $location, $file) {

if (is_writable ( $location )) {

// In our example we're opening $filename in append mode.
// The file pointer is at the bottom of the file hence
// that's where $somecontent will go when we fwrite() it.
if (! $handle = fopen ( $location.$file, 'w' )) {
trigger_error("Cannot open file ($location$file)");
return false;
}

// Write $somecontent to our opened file.
if (fwrite ( $handle, $data ) === FALSE) {
trigger_error("Cannot write to file ($location$file)");
return false;
}

fclose ( $handle );
return true;

} else {
trigger_error("The file $location.$file is not writable");
return false;
}

}

function __destruct() {

// remove the tmp folder

if (file_exists ( TMP_FOLDER ) &amp;amp;&amp;amp; strlen ( TMP_FOLDER ) > 4)
$this->removetmp ();

}

/**
* Create the tmp directory to hold and process the files
*
* @return unknown
*/
function createtmp() {

if (is_writable ( TMP )) {

if (mkdir ( TMP_FOLDER ))
return true;

} else {

return false;
}

return false;

}

/**
* Delete the tmp dir
*
* @return unknown
*/
function removetmp() {

if (strlen ( TMP_FOLDER ) > 3 &amp;amp;&amp;amp; file_exists ( TMP_FOLDER )) {

if ($this->recursive_remove_directory ( TMP_FOLDER ))
return true;

}

return false;
}

/**
* Return a rendom string for the folder name
*
* @return unknown
*/
function generatefoldername() {

return md5 ( microtime () );

}

/**
* Recursivly delete directroy or empty it
*
* @param unknown_type $directory
* @param unknown_type $empty
* @return unknown
*/
function recursive_remove_directory($directory, $empty = FALSE) {
// if the path has a slash at the end we remove it here
if (substr ( $directory, - 1 ) == '/') {
$directory = substr ( $directory, 0, - 1 );
}

// if the path is not valid or is not a directory ...
if (! file_exists ( $directory ) || ! is_dir ( $directory )) {
// ... we return false and exit the function
return FALSE;

// ... if the path is not readable
} elseif (! is_readable ( $directory )) {
// ... we return false and exit the function
return FALSE;

// ... else if the path is readable
} else {

// we open the directory
$handle = opendir ( $directory );

// and scan through the items inside
while ( FALSE !== ($item = readdir ( $handle )) ) {
// if the filepointer is not the current directory
// or the parent directory
if ($item != '.' &amp;amp;&amp;amp; $item != '..') {
// we build the new path to delete
$path = $directory . '/' . $item;

// if the new path is a directory
if (is_dir ( $path )) {
// we call this function with the new path
recursive_remove_directory ( $path );

// if the new path is a file
} else {
// we remove the file
unlink ( $path );
}
}
}
// close the directory
closedir ( $handle );

// if the option to empty is not set to true
if ($empty == FALSE) {
// try to delete the now empty directory
if (! rmdir ( $directory )) {
// return false if not possible
return FALSE;
}
}
// return success
return TRUE;
}
}
}
?>

Ubuntu-10.10 – Maverick-Meerkat

Canonical hat heute, am 10.10.10 exakt um 10:10:10 Uhr UTC die neue Ubuntu-Version – 10.10 (Maverick Meerkat) veröffentlicht. Die Zahlen sind eine Anspielung auf “Per Anhalter durch die Galaxis”, wo die Zahl 42 die Antwort auf alle Fragen ist. (Binär 101010 -> Zahl 42) Ubuntu 10.10 hat kein LTS (Long Term Support) und wird daher (nur) 18 Monate mit Updates versorgt.

ubuntu-logo

10.10



Neuerungen:

Linux 2.6.35.4

- bessere Multitouch-Unterstützung

- ALSA-Patches zur Behebung von Problemen mit Soundkarten und Mikrophonen

- diversen Treiber-Updates

- Sicherheitsverbesserungen für ARM

- …

- btrfs (Dateisystem)

- schnellerer Bootvorgang

- neuer Style (Themes, Icons, Hintergrundbilder, …)

Ubuntu-Desktop
Ubuntu-Desktop

- neue Standard Schriftart (Ubuntu font family)

- neue Paketquellen (Repository – “extra.ubuntu.com”)

- proprietäre Software Unterstützung (mp3, Flash, …)

Ubuntu-Install
Ubuntu-Installation

- “Software-Center” wurde aktualisiert (bittet nun auch kommerzielle Software und eine History-Funktion)

kauf-Software
kauf-Software

- “Ubuntu One” wurde besser im Desktop (Dateimanager) integriert

Ubuntu One
Ubuntu One

- “Ubuntu“-Version

- GNOME 2.32

- Sound-Indikatoren-Menü

Indikatoren
Indikatoren

- Shotwell ersetzt F-Spot (Fotoverwaltung)

Shotwell
Shotwell

- Evolution (E-Mail Client) wurde aktualisiert

- Gwibber (Twitter Client) wurde aktualisiert

- Ubuntu Netbook Edition kurz UNE (alte Bezeichnung “Ubuntu Netbook Remix”)

- Unity (Standardoberfläche)

Unity
Unity

- Evolution Express (E-Mail Client)

- “Kubuntu-Version

KDE 4.5.1 (Qt 4.7)

- PulseAudio

- Rekonq (Webbrowser)

- Bluedevil (Bluetooth-Anwendung)

- Xubuntu“-Version

- Xfce 4.6.2

- Parole (Media-Player)

- Xfburn (Brenn-Software)

- xfce4-taskmanager (Task-Manager)

- Edubuntu-Version

- Gnome Nanny (Zugriffsbeschränkung für Kinder)

- OEM-Installationsmodus

- Ubuntu Studio -Version

- PulseAudio und JACK wurden verbessert (Soundserver)

- gnome-network-admin (Netzwerkkonfiguration-Tool)

- Mythbuntu -Version

- MythTV 0.23.1

 

Übersicht:

Komponente

Programm

Version

Bildbetrachter Shotwell 0.7.2
Brennprogramm Brasero 2.32
Browser Firefox 3.6.10
Chat-Programm Empathy 2.32
Compiler GCC 4.4.4
Datei-Manager Nautilus 2.32
Desktop Gnome 2.32
Desktop Unity 0.2.46
E-Mail-Programm Evolution 2.30.3
Kernel Linux 2.6.35
Musikplayer Rhythmbox 0.13.1
Office-Suite OpenOffice 3.2.1
Torrent-Client Transmission 2.04
Twitter-Client Gwibber 2.32
Videobearbeitung Pitivi 0.13.5
Videoplayer Totem 2.32

 

Download:

http://releases.ubuntu.com/10.10/


Ubuntu:
Alternate CD (64-bit)
Alternate CD (32-bit)

Desktop-Edition (64-bit)
Desktop-Edition (32-bit)

Server Edition (64-bit)
Server Edition (32-bit)


Kubuntu:
Desktop CD, 32bit
Desktop CD, 64bit

Desktop DVD, 32bit
Desktop DVD, 64bit

Desktop Alternate CD, 32bit
Desktop Alternate CD, 64bit


Weitere Versionen:
Xubuntu xubuntu.org/news/10.10-release

Edubuntu edubuntu.org/news/10.10-release

Mythbuntu mythbuntu.org/10.10/release

Ubuntu Studio wiki.ubuntu.com/UbuntuStudio/10.10release_notes



Die nächste Ubuntu-Version 11.04 soll übrigens im April 2011 erscheinen und den Codenamen Natty Narwhal haben.


Quellen:

http://www.pro-linux.de/news/1/16259/ubuntu-1010-veroeffentlicht.html

http://www.linux-community.de/Internal/Artikel/Online-Artikel/Das-ist-neu-in-Ubuntu-10.10-alias-Maverick-Meerkat

https://lists.ubuntu.com/archives/ubuntu-announce/2010-October/000139.html

LibreOffice Installation unter Debian / Ubuntu

In diesem HowTo beschreibe ich wie du LibreOffice auf Debian/Ubuntu installierst. Kurz zum Hintergrund, warum OpenOffice zu -> LibreOffice wurde:

Gegründet wurde die Stiftung von verschiedenen Mitgliedern von OpenOffice.org. Auf der Webseite von “The Dokument Foundation” findet sich einer Liste der Gründungsmitglieder, diese haben diesen Schritt gewagt, da seit der Übernahmen von Sun durch Oracle nur noch wenige Ressourcen aus der Hamburger Entwicklungsabteilung ins Projekt eingeflossen seien. (Quelle: heise.de) Nun haben auch schon einige Firmen (GoogleNovell und Red Hat) angekündigt die neue Foundation zu unterstützen. Wer diesbezüglich noch mehr Infos sucht, kann sich folgenden Artikel durchlesen -> ikhaya.ubuntuusers.de


“Eine Abspaltung (auch Fork; engl. fork = Gabel, üblicherweise als Maskulinum verwendet) ist in der Softwareentwicklung ein Entwicklungszweig nach der Aufspaltung eines Projektes in zwei oder mehr Folgeprojekte, wobei Teile des Quellcodes und seiner Historie kopiert werden und dann unabhängig von dem ursprünglichen Projekt weiterentwickelt werden.” – Wiki


libreoffice


libreoffice-menü


Installation unter Ubuntu:




Fremdpakete können das System beschädigen -> wiki.ubuntuusers.de/fremdquellen


sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice
Gnome:
sudo apt-get install libreoffice-gnome
KDE:
sudo apt-get install libreoffice-kde


ggf. findest du hier noch weitere Infos …



Installation unter Debian:


Fremdpakete können das System beschädigen


1.) Deinstallation von OpenOffice

sudo aptitude purge openoffice.org-base openoffice.org-base-core openoffice.org-common openoffice.org-gnome


Zwei mal mit “Y” bestätigen…

- Diese Lösung akzeptieren? [Y/n/q/?] Y

- Wollen Sie fortsetzen? [Y/n/?] Y

… und schon wird OpenOffice deinstalliert.


2.) LibreOffice (+deutsche Sprachdatei) herunterladen

Darauf achten, ob man die 32-Bit oder die 64-Bit Version herunterlädt.


32-Bit:
cd /tmp
wget http://ftp5.gwdg.de/pub/tdf/libreoffice/stable/3.3.0/deb/x86/LibO_3.3.0_Linux_x86_install-deb_en-US.tar.gz
wget http://ftp5.gwdg.de/pub/tdf/libreoffice/stable/3.3.0/deb/x86/LibO_3.3.0_Linux_x86_langpack-deb_de.tar.gz
64-Bit:
cd /tmp
wget http://download.documentfoundation.org/libreoffice/stable/3.3.0/deb/x86_64/LibO_3.3.0_Linux_x86-64_install-deb_en-US.tar.gz
wget http://download.documentfoundation.org/libreoffice/stable/3.3.0/deb/x86_64/LibO_3.3.0_Linux_x86-64_langpack-deb_de.tar.gz


3.) Datei entpacken

tar -xzvf LibO_3.3.0_Linux_x86_install-deb_en-US.tar.gz
tar -xzvf LibO_3.3.0_Linux_x86_langpack-deb_de.tar.gz


4.) Update LibreOffice

Falls bereits eine frühere Version von LibreOffice installiert ist, kannst du diese mit diesem Skript aktualisieren.

cd en-US
sudo ./update


5.) Installation von LibreOffice

cd DEBS
sudo dpkg -i *.deb
sudo dpkg -i desktop-integration/*menus*.deb

cd /tmp/DE/DEBS
sudo dpkg -i *.deb