Mein PC spinnt!

Kurioses und Interessantes aus der IT-Welt

March 31, 2014
by Stefan Hellmann
0 comments

Make your prompt ($PS1) more functional

This is a very simple prompt with only different colors:

PS1="\[\e[0;37m\][\[\e[0;32m\]\u\[\e[0;37m\]@\[\e[0;33m\]\h\[\e[0m] "

snapshot-2014-03-31-23-01-35
Some scripting foo to get a different color for root (for better readability split into multiple lines):

PS1=""
# add user
if [[ ${EUID} == 0 ]]; then 
        PS1+="\[\e[0;31m\]\u"
else
        PS1+="\[\e[0;32m\]\u"
fi
# add @ + host
PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h "

snapshot-2014-03-31-23-31-47
Now adding some brackets and the working directory:

# opening brackets
PS1="\[\e[0;37m\]["
# add user
if [[ ${EUID} == 0 ]]; then 
        PS1+="\[\e[0;31m\]\u"
else
        PS1+="\[\e[0;32m\]\u"
fi
# add @ + host
PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h"
# add working dir
PS1+="\[\e[0;37m\]:\[\e[01;34m\]\w"
# closing brackets + reset 
PS1+="\[\e[0;37m\]]\e[0m "

snapshot-2014-03-31-23-28-33
Now some functionall things.
I'm using the prompt_command to add last exit code to my prompt. Short descriptione from the bash man page:

PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each
primary prompt.

Adding last exit code:

function prompt () {
        exitcode=$?
        # add exit code
        PS1=" "
        if [ $exitcode == 0 ]; then
                PS1+="\[\033[01;32m\]\342\234\223"
        
        else
                PS1+="\[\033[01;31m\]\342\234\227"
        fi

        PS1+="$exitcode "
        # opening brackets
        PS1+="\[\e[0;37m\]["
        # add user
        if [[ ${EUID} == 0 ]]; then
                PS1+="\[\e[0;31m\]\u"
        else
                PS1+="\[\e[0;32m\]\u"
        fi
        # add @ + host
        PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h"
        # add working dir
        PS1+="\[\e[0;37m\]:\[\e[01;34m\]\w"
        # closing brackets + reset 
        PS1+="\[\e[0;37m\]]"
        # reset color
        PS1+="\e[0m "
}
PROMPT_COMMAND='prompt'

snapshot-2014-03-31-23-46-21

Combinig all this stuff with one of my last posts, it could look like this:

function prompt () {
        exitcode=$?
        # add exit code
        PS1=" "
        if [ $exitcode == 0 ]; then
                PS1+="\[\033[01;32m\]\342\234\223"
    
        else
                PS1+="\[\033[01;31m\]\342\234\227"
        fi  
    
        PS1+="$exitcode "
        # opening brackets
        PS1+="\[\e[0;37m\]["
        # add user
        if [[ ${EUID} == 0 ]]; then 
                PS1+="\[\e[0;31m\]\u"
        else
                PS1+="\[\e[0;32m\]\u"
        fi  
        # add @ + host
        PS1+="\[\e[0;37m\]@\[\e[0;33m\]\h"
        # add working dir
        PS1+="\[\e[0;37m\]:\[\e[01;34m\]\w"
        # closing brackets + reset 
        PS1+="\[\e[0;37m\]]"
        # display git branch
        if [ -f /usr/bin/git ]; then
                branch="$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \(\1\)/')"
                PS1+="$branch"
        fi  
        PS1+=" \$"
        # reset color
        PS1+="\e[0m "
}
PROMPT_COMMAND='prompt'

snapshot-2014-04-01-00-05-11

March 9, 2014
by Stefan Hellmann
0 comments

bash history and a lot of terminals

If you are using many terminals you know the problem, that the bash_history is only written after logging out. So if you want to share commands between two terminals you have to copy and paste them.

Reading the bash man page i found the PROMPT_COMMAND:

PROMPT_COMMAND
    If set, the value is executed as a command prior to issuing each primary prompt.

With this little guy it’s easy. Simple write this to your .bashrc and commands will be written directly to your history:

export PROMPT_COMMAND='history -a'

February 25, 2014
by Stefan Hellmann
1 Comment

Howto show git branch in bash prompt

This is my normal bash prompt:
prompt
The corresponding variable:

PS1='\[\033[0;36m\][\[\e[0;32m\]\u\[\e[0;37m\]@\[\e[0;33m\]\h:\[\e[0;35m\]\w\[\e[0;36m\]]\[\e[0;40m\]\$\[\e[0;37m\] '

To add the git branch, you have to put these lines in your ~/.bashrc:

function parse_git_branch {
        git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \< \1\> /'
}
PS1='\[\033[0;36m\][\[\e[0;32m\]\u\[\e[0;37m\]@\[\e[0;33m\]\h:\[\e[0;35m\]\w\[\e[0;36m\]]\[\e[0;40m\]\[\033[1;34m\]$(parse_git_branch)\[\033[1;37m\]\$\[\e[0;37m\] '

Now it will show the branch in a git directory:
prompt_branch

January 19, 2014
by Stefan Hellmann
0 comments

Server-”Umzug”

Dieses Wochenende habe ich mich mal wieder ein wenig mit meinem Server beschäftigt. Da der Wartungsaufwand immer mehr und die Zeit immer knapper wurde, habe ich mich entschlossen nun doch Debian zu installieren. Hinzu kam, dass die Jails (7 Stück) zum Schluss eine hohe Last erzeugt haben und der Server damit gut beschäftigt war.

D.h. aber nicht, dass ich FreeBSD nicht weiter im Auge behalten werde. Es ist nach wie vor ein cooles OS mit einer Menge interessanter Ansätzen.

Mit dem Umzug sind auch ein paar neue Features hinzugekommen:

* alle Dienste sind vollständig auch über IPv6 erreichbar
* das Zertifikat wurde erneuert und gegen eins mit mehreren “CN’s” ausgetauscht:

...
X509v3 Subject Alternative Name:
DNS:*.pcspinnt.de, othername:<unsupported>, DNS:*.pc-spinnt.de, othername:<unsupported>, DNS:*.hellmann-it.de, othername:<unsupported>
...

Geplant ist auch noch ein VPN Server, damit ich zu Hause auch echts IPv6 bekomme. Die generellen Arbeiten sollten eigentlich abgeschlossen sein…hoffe ich zumindest.

September 25, 2013
by admin
1 Comment

Lazy admins using the shell (third one)

Another thing i always use, is a separate file for my aliases, functions etc. I always call this file .bash_common. To use it just source it in your .bashrc:

...
. ~/.bash_common
...

This is my .bash_common: show

Older Posts:

Lazy admins… the second one
Lazy admins using the shell

September 22, 2013
by admin
0 comments

Tips und Tricks zur Pfsense

Da eine neue Pfsense Version raus ist, habe ich mich mal dran gesetzt und ein paar nützliche Sachen zusammen geschrieben:

Zusätzliche Pakete installieren

/etc/rc.conf_mount_rw
setenv PKG_TMPDIR /root/    # /var ist zu klein für Paketinstallationen
pkg_add -r vim-lite
/etc/rc.conf_mount_ro

Menü beim SSH Login deaktivieren

chsh -s /bin/tcsh admin

Für das Menue habe ich mir dann einfach einen alias angelegt (~/.tcshrc):

alias menu /etc/rc.initial

Achtung: Ein ändern des Benutzers auf der Weboberfläche führt dazu, dass die shell wieder auf /etc/rc.initial gesetzt wird.

Nützliche aliase

alias menu /etc/rc.initial
alias rw /etc/rc.conf_mount_rw
alias ro /etc/rc.conf_mount_ro
alias ta tmux attach
alias ll ls -ahlt

Farben

Falls z.B.tmux nicht farbig ist, in der ~/.tcshrc folgendes eintragen:

setenv TERM xterm-256color

vim

Da in vim z.B. die Backspacetaste nicht sauber funktioniert habe ich meine ~/.vimrc wie folgt angepasst:

syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel

UPDATE:

Paket Dateien

Ab Version 2.1 liegen aller Konfigurationsdateien, bins etc unter

/usr/pbi

History in der shell

Um die History auf der Konsole zu aktivieren muss man folgendes in die .tcshrc eintragen:

set history=200
set savehist=(200 merge)

September 2, 2013
by admin
0 comments

vim tabs und spaces

Irgendwie wurden in meine python scripten alles tabs durch 4 spaces ersetzt. Ziemlich ärgerlich.
Eigentlich hatte ich erwartet das meine IDE das wieder gerade biegen kann. Aber Fehlanzeige!
Also habe ich vim rausgeholt und schnell gegoogelt wie man das wieder reparieren kann. Die Lösung ist ziemlich simpel:

:set tabstop=4        " Tablänge eingeben.
:set noexpandtab    " Benutze Tabs, keine Lspaces
:%retab!                    " Noch mal durch tabben
:wq                            " abspeichern und raus

August 13, 2013
by admin
3 Comments

Hacken in der Warpzone oder Wie finde ich meinen Pi?

Letztes WE war ich mal wieder seit langem in der Warpzone. Mit im Gepäck hatte ich meinen Raspberry Pi und wie jedes mal stellte sich dann die Frage: “Welche IP hat er denn nun bekommen?”
Um diese herauszufinden gibt es natürlich mehrere Möglichkeiten, wobei keine wirklich komfortabel ist. Damit ich nicht jedes mal Ewigkeiten damit verbringe die IP meinese Pi’s rauszubekommen habe ich mir ein kleines Tool geschrieben:

show

Diese Tool speichern, ausführbar machen (chmod +x …) und anschliessen in die /etc/rc.local eingetragen:

...
/usr/bin/ipmailer.py

 

Nach jedem Boot wird eine Mail versendet mit den IP Adressen der angegebenen Interfaces und zusätzlich auch noch die extern IP. Nun kann man ganz einfach per ssh und den IP Adressen aus der E-Mail auf seinen Raspberry Pi zugreifen.

UDATE:
Gerade habe ich per Twitter eine “einfache” Lösung bekommen (Danke an Fenk):

ifconfig eth0|sendxmpp user@host.de


Eine gute Anleitung zum einrichten von sendxmpp findet man sendxmpp.

July 16, 2013
by admin
0 comments

Vim und Syntaxhighlighting

Momentan bastel ich an einem Asterisk Server rum. Alle Konfigurationsdateien bearbeite ich mit vim. Da ich natürlich regelmässige Backups mache ;-) liegen auch alte Configdateien herum aus denen ich ab und zu mal Passagen kopiere.
Dummerweise funktionierte bei diesen Backupdateien das Syntaxhighlighting nicht. Gerade bei Dateien mit ein paar 1000 Zeilen ist das aber sehr praktisch, da man dann sehr schnell Kommentar und Konfiguration unterscheiden kann.
Um Syntaxhighlighting zu erzwingen kann man in vim folgendes eingeben:

:set syn=asterisk

Dies funktioniert natürlich auch mit anderen Sprachen:

:set syn=python
:set syn=html
...

Das Syntaxhighlighting wird generell mit folgendem Befehl aktiviert:

:syntax on

Alle möglichen Sprachen die vim highlighten kann findet man unter:

/usr/share/vim/vim73/syntax/

May 28, 2013
by admin
0 comments

Pimp up your history

Just a short tip to pimp up your history. With the HISTTIMEFORMAT you can modify the output of the history command.
You can use the format strings like strftime.

To get an overview:

man strftime

Back to the tip:

export HISTTIMEFORMAT=”%F %T “

If you now type history in your shell, you will get a nice output:

539  2013-05-28 13:03:42 ls -ahlt
540  2013-05-28 03:27:47 echo "FooBar"
541  2013-05-28 03:27:55 mkdir Simpsons
542  2013-05-28 03:27:58 rmdir Simpsons
543  2013-05-28 03:27:01 history