cdrecord – ISO erstellen und CD brennen

1.) Du musst wissen ob/wo dein CD-Brenner ist…

cdrecord --scanbus

Ausgabe:
0,0,0 0) *
0,1,0 0) *
0,2,0 0) ‘SONY’ […] Removable CD-ROM

2.) Dateien in ein Verzeichniss schaufeln, so dass wir aus dem Verzeichniss ein Image machen können.

cp -v /home/User/Desktop/test_Datei /home/User/brenn_verzeichniss/
cp -v /home/User/Dokumente/test_Datei2 /home/User/brenn_verzeichniss/
mkisofs -R -l /home/User/brenn_verzeichniss/ > /home/User/Desktop/disk.iso

3.) Testen ob im Iso auch alle Dateien sind, welche wir haben wollten

sudo mkdir /mnt/cdrom_iso
sudo mount -t iso9660 -o ro,loop /home/User/Desktop/disk.iso /mnt/cdrom_iso

nachdem man sich vergewissert hat, dass die Dateien alle an Ort und Stelle sind, kann man die ISO wieder unmounten

sudo umount /mnt/cdrom_iso

4.) Brennen der CD

DEVICE="0,2,0"
SPEED=6

(der Speed muss individuell an deine Bedürfnisse/Gegebenheiten angepasst werden)

sudo cdrecord -v dev=${DEVICE} speed=${SPEED} /home/User/Desktop/disk.iso

Bedingungen in der Shell – Linux

Hier soll an einigen Beispielen klar werden, wie man Bedingungen in z.B. Shell-Abfragen (if) einbaut.

Dateien:

-d file

-> file existiert und ist ein Verzeichnis

-e file

-> file existiert

-f file

-> file existiert und ist regulär

Beispiel:

if [ -f /etc/issue ] ; then cat /etc/issue | awk {'print $3'}; fi

-s file

-> file existiert und ist nicht leer

-r file

-> file existiert und ist lesbar

-w file

-> file existiert und ist beschreibbar

datei1 -nt datei2

-> datei1 ist jünger als datei2

datei1 -ot datei2

-> datei1 ist älter als datei2

Strings:

-z string

-> string ist leer

-n string

-> string ist nicht leer

Beispiel:

test="Hallo"
if [ -n $test ] ; then echo $test; fi
unset test
if [ -n $test ] ; then echo $test; fi

s1 == s2

-> s1 ist gleich s2

s1 != s2

-> s1 ist ungleich s2

s1 < s2

-> s1 ist kleiner s2 (bzgl. Sortierung)

s1 > s2

-> s1 ist größer s2

Arithmetik:

n1 -eq n2

-> n1 ist gleich n2

Beispiel:

a=5
b=5
if [ $a -eq $b ]  ; then echo -e "es sind die gleichen Zahlen"; else echo "es sind nicht die gleichen Zahlen" ;fi
b=4
if [ $a -eq $b ]  ; then echo -e "es sind die gleichen Zahlen"; else echo "es sind nicht die gleichen Zahlen" ;fi

n1 -ne n2

-> n1 ist ungleich n2

n1 -lt n2

-> n1 ist kleiner n2

n1 -le n2

-> n1 ist kleiner/gleich n2

n1 -gt n2

-> n1 ist größer n2

n1 -ge n2

-> n1 ist größer/gleich n2

Logik:

expr1 -a expr2

-> Ausdruck expr1 UND expr2

expr1 -o expr2

-> Ausdruck expr1 ODER expr2

netstat + ss + lsof

Mit den folgenden kleinen Kommandos kannst du sehen, welche Verbindungen von welcher IP / Port / Programm zu welchem Ziel aufgebaut wurden.

__________________________________________

netstat -nat

-> aktive Verbindungen (auch solche welche eine Verbindung aufgebaut haben bzw. soeben versuchen)

netstat --udp --tcp --listening --programs --numeric

bzw.

netstat -ntauple

-> alle TCP/UDP-Sockets anzeigen auf denen gelauscht wird

ss -l -p -e

-> alle Sockets anzeigen auf denen gelauscht wird

ss -o state established '( dport = :ssh or sport = :ssh )'

-> aufgebaute SSH-Verbindungen anzeigen

ss -t -a

-> zeigt alle TCP-Verbindungen an

ss -u -a

-> zeigt alle UDP-Verbindungen an

lsof -i -nP

-> zeigt alle Verbindungen, deren Ports, Programme, PID und dessen User an

find – Linux

Es folgen einige Beispiele, wie man den “find-Befehl” nutzen kann… viel Spaß beim ausprobieren.

find -size +10M -20M -exec ls -lah {} \;

-> Sucht Dateien ab dem aktuellen Verzeichnis, die gräßer sind als 10MB, aber kleiner als 20MB und zeigt diese an.

find /home/ -iname '*.jpg' -exec tar -czf bilder.tar.gz {} \;

-> Ab dem home-Verzeichnis nach Dateien suchen, die auf “.jpg/.JPG” enden duchsuchen und diese archivieren.

find / -used 1

-> Ab dem root-Verzeichnis alle Dateien suchen, welche heute (1 -> Tag) verwendet wurde.

find / -amin -10 [ -atime -10 ]

-> Ab dem root-Verzeichnis alle Dateien suchen, auf denen vor weniger als 10 Minuten [ Tage ] zugegriffen wurde.

find / -mmin +10 [ -mtime +10 ]

-> Ab dem root-Verzeichnis alle Dateien suchen, welche vor mehr als 10 Minuten [ Tage ] geändert wurden.

touch --date='15:00' /tmp/ref
find / -newer /tmp/ref

-> Ab dem root-Verzeichnis alle Dateien suchen, welche neuer sind als heute um 15:00 Uhr.

find / -type f -name "*neu*"

-> Ab dem root-Verzeichnis alle Dateien suchen, in welchen “neu” vorkommt.

find / -type d -name "*home*"

-> Ab dem root-Verzeichnis alle Verzeichnisse suchen, in welchen “home” vorkommt.

find . -empty

-> Im aktuellen Verzeichnis nach Dateien suchen, welche eine Größe von “null” haben.

find /home/ -user root [ -group root ]

-> Ab dem home-Verzeichnis nach Dateien suchen, welche dem User “root” [ der Gruppe “root” ] gehören.

find /home/ ! -user root [ ! -group root ]

-> Ab dem home-Verzeichnis nach Dateien suchen, welche nicht dem User nicht “root” [ nicht der Gruppe “root” ] gehören.

 

Es folgt noch ein Beispiel + Erklärung:

# alle Dateien (type f) die älter als 30 Tage (mtime +30) sind außer alt_datum.tar.bz2 (exclude-from alt_`date +%d-%m-%y`.tar.bz2), werden zu einem Archiv zusammengefasst
find / -type f -mtime +30 --exclude-from=alt_`date +%d-%m-%y`.tar.bz2 -exec tar -cjf alt_`date +%d-%m-%y`.tar.bz2 {} \;
# nun alle Dateien, die älter als 30 Tage sind löschen
find / -type f -mtime +30 --exclude-from=alt_`date +%d-%m-%y`.tar.bz2 -exec rm {} \;
# alle Dateien welche den Namen “alt_irendwas.tar.bz2” haben (ianme “alt_*.tar.bz2”, werden gelöscht
find / -type f -iname "alt_*.tar.bz2" -mtime +60 -exec rm {} \;

mv – Linux

[mv = move] mit dem “mv”-Befehl kann man Dateien von einem Ort an einen andern verschieben bzw. wenn dies im selber Verzeichnis ausgeführt wird, eine Datei umbenennen.

eine Datei umbenennen:

ohne Wildcards:

mv data1 dateu_neu1

benennt die Datei “data1” in “dateu_neu1” um

mit Wildcards:

mv *tei1 datei_neu1

-> * = beliebig viele verschiedene Zeichen

mit Wildcards:

mv ?atei1 datei_neu1

-> ? = ein unbestimmter Buchstabe

Dateien verschieben:

mv *.txt old/

alle Dateien welche auf “.txt” enden werden in das Unterverzeichnis old/ verschoben

mehrere Dateien umbenennen:

!!!
mv *.htm *.html
!!!

dieser Befehl funktioniert nicht, da die Bash “*.html” als Verzeichnis interpretiert

Dieses Problem kann man z.B. wie folgt lösen:

for i in *.htm; do mv $i `basename $i .htm`.html; done

mit diesem Befehl, kann man nun alle Dateien welche auf “.htm” enden, mit der neuen Endung “.html” versehen

der ursprüngliche Dateiname welcher in der Variablen $i abgelegt wird, wird jeweils zu dem neuen Dateinamen, welcher sich aus dem “Basisnamen” (basename *1) ohne die Endung und einer neuen Endung “.html” besteht, zusammengefasst und die entsprechende Datei mittels einer “for”-Schleife verschoben

(*1) basename test.txt .txt -> test)

 

for i in *.sh; do mv $i /home/path/; done

verschiebt alle Dateien mit der Endung “.sh” nach /home/path

 

for i in [a-z]*; do mv $i ${i#[a-z]}; done

entfernt das erstes Zeichen von allen Dateien im aktuellen Verzeichnis.

 

for i in [a-z]*; do mv $i z${i}; done

setzt ein “z” vor jeden Dateinamen.

 

Alternativ kann man dieses Problem auch mit dem folgendem Befehl umgehen…

aptitude install mmv

installiere als erstes das Programm “mmv”

mmv -v "*.htm" "#1.html"

wie im vorherigem Beispiel werden auch hier alle Dateien welche auf “.htm” enden umbenannt und enden hinterher auf “.html”

(mit dem Parameter “-c” werden die Dateien nicht verschoben, sondern kopiert)

 

Hier noch ein Beispiel: Welches alle Bilder im aktuellen Verzeichnis um 2 erhört -> “1.jpg” wird zu “3.jpg” …

for i in `ls -r *.jpg`; do
j=$((${i%.*}+2));
echo "$i -> ${j}.${i##*.}";
done;

Sources-list Tool

Zum Üben habe ich mir vor ein paar Monaten ein kleines Shell-Skript gebaut,welches mit Arrays, Dialog Boxen und vielen mehr arbeitet, im Grunde kann das Skript nicht viel, aber vielleicht Hilft es da jemand als Beispiel weiter… :)

#!/bin/bash

#######################################################################
# Title      :    sources.list_tool
# Author     :    Voku (voku-online.de)
# Date       :    2009-05-25
# Requires   :    dialog
#######################################################################

VER='0.3'

_temp="/tmp/answer.$$"
sources="/etc/apt/sources.list"
sources_temp="/tmp/sources.list"
backup="/etc/apt/backup"
backup_old="/etc/apt/backup_old"
dialog 2>$_temp
du=`whoami`

if [ $du != "root" ]; then
        dialog --title " Du bist nicht root " --msgbox "nDu bist nicht root, du bist '$du'!nn(versuche es mal mit "sudo $0")" 8 44
        exit
fi

if [ -d $backup ] ; then
        if [ -f $backup/*.bz2 ]; then
                bzip2 -z -f -q $(find $backup -mtime +1)
        fi
else
        mkdir $backup
fi

if [ -d $backup_old ]; then
        find $backup -iregex '.*.(bz2)' -mtime +7 -exec mv {} $backup_old ;
        find $backup_old -iregex '.*.(bz2)' -mtime +30 -exec rm {} ;
else
        mkdir $backup_old
fi

cp -p $sources $backup/sources.old.$(date "+%y%m%d-%H%M")
cp -p $sources $sources_temp

SUBJECT="[`hostname`] Update Hinweis"
MESSAGE="SYSTEMMELDUNG:nAuf `hostname` sind neue Updates vorhanden"
COUNT=`apt-get -s upgrade | grep -c "Inst"`
if [ $COUNT -gt 0 ]; then
        dialog --title " $SUBJECT " --msgbox "n`echo -e "$MESSAGE"`" 10 50
fi

checklist() {

launchpad ()
{
grep -iv $1 $sources > $sources_temp
cp -p $sources_temp $sources
a="## $2 ($1)"
b="deb http://ppa.launchpad.net/$1/ubuntu jaunty main"
c="deb-src http://ppa.launchpad.net/$1/ubuntu jaunty main"
echo -e "$a" "n$b" "n$c" >> $sources
}

    dialog --backtitle "Extra-Repositories"
           --checklist "Extra-Repositories: fuer Ubuntu 9.04" 40 50 15
           01 "Medibuntu" off
           02 "Ubuntu Netbook Remix" off
           03 "Avant Window Navigator" off
           04 "Vuze (Azureus)" off
           05 "Firefox 3, Thunderbird 3" off
           06 "Terminator" off
           07 "GIMP" off
           08 "Compiz" off
           09 "OpenOffice 3" off
           10 "Gnome DO" off
           11 "Ubuntu Tweak" off
           12 "Rhythmbox" off
           13 "FreeNX" off
           14 "Adobe Flash" off
           15 "Extra Ubuntu Themes" off
           16 "Wine" off
           17 "VirtualBox" off
           18 "Swiftfox" off
           19 "VLC Media Player" off
           20 "Pidgin" off
           21 "Rhythmbox" off
           22 "Claws Mail" off
           23 "Google-Gadgets" off 2>$_temp
    if [ ${?} -ne 0 ]; then return; fi
    result=`cat $_temp`
    array=($result)

    dialog --title " Extra-Repositories " --yesno "Moechtest du die Extra-Repositories wirklich eintragen?" 6 44
    result1=$?
    if [ $result1 = "1" ]; then return; fi

for i in ${array[@]}; do

        case $i in
        "01")
                grep -iv medibuntu $sources > $sources_temp
                cp -p $sources_temp $sources
                wget http://packages.medibuntu.org/medibuntu-key.gpg && sudo apt-key add medibuntu-key.gpg && rm medibuntu-key.gpg
                a="## Medibuntu"
                b="# Please report any bug on https://bugs.launchpad.net/medibuntu/"
                c="# wget http://packages.medibuntu.org/medibuntu-key.gpg && sudo apt-key add medibuntu-key.gpg && rm medibuntu-key.gpg"
                d="deb http://packages.medibuntu.org/ jaunty free non-free"
                e="deb-src http://packages.medibuntu.org/ jaunty free non-free"
                echo -e "$a" "n$b" "n$c" "n$d" "n$e" >> $sources
        ;;
        "02")
                launchpad "netbook-remix-team" "Ubuntu Netbook Remix"
        ;;
        "03")
                launchpad "awn-testing" "AWN"
        ;;
        "04")
                launchpad "smaioli" "Vuze"
        ;;
        "05")
                launchpad "steveydoteu" "Firefox 3.1 und Thunderbird 3.0"
                lanuchpad "mozillateam" "Mozilla Team"
                lanuchpad "fta" "Mozilla Development Stuff"
        ;;
        "06")
                launchpad "gnome-terminator" "Terminator"
        ;;
        "07")
                launchpad "c-korn" "GIMP 2.6"
        ;;
        "08")
                launchpad "compiz" "Compiz"
                launchpad "tormodvolden" "nice xserver"
        ;;
        "09")
                launchpad "openoffice-pkgs" "OpenOffice 3"
        ;;
        "10")
                launchpad "do-core" "Gnome DO"
        ;;
        "11")
                launchpad "tualatrix" "Ubuntu Tweak"
        ;;
        "12")
                launchpad "jmillikin" "Rhythmbox"
        ;;
        "13")
                launchpad "freenx-team" "freenx, nxagent"
        ;;
        "14")
                launchpad "psyke83" "PulseAudio Fixes & Adobe Flash"
                launchpad "themuso" "PulseAudio - Preview Packages"
                launchpad "ubuntu-ko" "unzip, sbackup, flashplugin-nonfree"
        ;;
        "15")
                launchpad "murrine-themes" "Murrine Themes"
                launchpad "kwwii" "Intrepid theme"
        ;;
        "16")
                grep -iv wine.budgetdedicated $sources > $sources_temp
                cp -p $sources_temp $sources
                wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
                a="## Wine (wine.budgetdedicated)"
                b="# wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -"
                c="deb http://wine.budgetdedicated.com/apt jaunty main"
                d="deb-src http://wine.budgetdedicated.com/apt jaunty main"
                echo -e "$a" "n$b" "n$c" "n$d" >> $sources
        ;;
        "17")
                grep -iv download.virtualbox $sources > $sources_temp
                cp -p $sources_temp $sources
                a="## VirtualBox (download.virtualbox)"
                b="deb http://download.virtualbox.org/virtualbox/debian jaunty non-free"
                echo -e "$a" "n$b" >> $sources
        ;;
        "18")
                grep -iv getswiftfox $sources > $sources_temp
                cp -p $sources_temp $sources
                a="## Swiftfox (getswiftfox)"
                b="deb http://getswiftfox.com/builds/debian unstable non-free"
                echo -e "$a" "n$b" >> $sources
        ;;
        "19")
                launchpad "motumedia" "VLC"
        ;;
        "20")
                launchpad "nicolai-spohrer" "Pidgin"
                launchpad "hyperair" "Pidgin, Gaim"
                launchpad "pidgin-developers" "Pidgin"
        ;;
        "21")
                launchpad "bigon" "empathy, rhythmbox"
                launchpad "jmillikin" "rhythmbox-svn"
        ;;
        "22")
                launchpad "claws-mail" "Claws Mail"
        ;;
        "23")
                launchpad "googlegadgets" "Google-Gadgets"
        ;;
        *)
                echo "Fehler?!?!"
        ;;
        esac

done
}

radiolist() {
    dialog --backtitle "Sources.list - Ubuntu Version"
           --radiolist "Ubuntu Version waehlen" 15 50 8
           01 "gutsy" off
           02 "hardy" off
           03 "intrepid" off
           04 "jaunty" on 2>$_temp
    if [ ${?} -ne 0 ]; then return; fi
    result=`cat $_temp`

    case $result in
    01)
        ubuntu_version="gutsy"
    ;;
    02)
        ubuntu_version="hardy"
    ;;
    03)
        ubuntu_version="intrepid"
    ;;
    04)
        ubuntu_version="jaunty"
    ;;
    *)
        ubuntu_version="FEHLER"
    ;;
    esac

    if [ $ubuntu_version = "FEHLER" ]; then
            continue
    else

          dialog --title " Ubuntu Version waehlen " --yesno "Moechtest du wirklich alle sources.list Eintraege auf '$ubuntu_version' aendern?" 6 44
          result1=$?

          if [ $result1 = "1" ]; then return; fi

          case $result in
          01)
                    sed -i -n -e "s/jaunty/gutsy/g" $sources
                    sed -i -n -e "s/hardy/gutsy/g" $sources
                    sed -i -n -e "s/intrepid/gutsy/g" $sources
          ;;
          02)
                    sed -i -n -e "s/jaunty/hardy/g" $sources
                    sed -i -n -e "s/gutsy/hardy/g" $sources
                    sed -i -n -e "s/intrepid/hardy/g" $sources
          ;;
          03)
                    sed -i -n -e "s/jaunty/intrepid/g" $sources
                    sed -i -n -e "s/gutsy/intrepid/g" $sources
                    sed -i -n -e "s/hardy/intrepid/g" $sources
          ;;
          04)
                    sed -i -n -e "s/jaunty/jaunty/g" $sources
                    sed -i -n -e "s/gutsy/jaunty/g" $sources
                    sed -i -n -e "s/hardy/jaunty/g" $sources
          ;;

          *)
                    continue
          ;;
          esac
    fi
} 

formbox () {
    dialog --backtitle "Repositories eintragen"
            --form " Repositories eintragen - use [up] [down] to select input field " 21 70 18
            "URL" 2 4 "http://de.archive.ubuntu.com/ubuntu/" 2 15 50 0
            "Ubuntu" 4 4 "jaunty" 4 15 20 0
            "was?" 6 4 "main" 6 15 50 0
            2>$_temp

    if [ ${?} -ne 0 ]; then return; fi
    result=`cat $_temp`
    dialog --title " Repositories eintragen " --yesno "Moechtest du wirklich folgendes wirklich eintragen n deb $result" 10 75
    result1=$?
    if [ $result1 = "1" ]; then return; fi
    echo "deb "$result >> $sources
    dialog --title "neuer Eintag in der sources.list"
           --msgbox "n deb $result" 10 75
}

textbox() {
wget -q http://www.voku-online.de/sources_new.txt -O $sources_temp &

wget_pid=$!
while [ 1 ]; do
        { for I in $(seq 1 100) ; do
        echo $I
        sleep 0.01
        done
        echo 100; } | dialog --backtitle "Dialog - Progress sample"
                             --gauge "Progress" 6 60 0

    if [ `ps | grep -c $wget_pid` -eq 0 ]; then
        break
    fi
done

    if [ -e $sources_temp ]; then
        dialog --backtitle "voku-online.de - Sources.list fuer Ubuntu 9.04 - use [up] [down] to scroll"
               --begin 3 5 --title " File: $sources_temp "
               --textbox $sources_temp 50 140
    else
        dialog --msgbox "*** ERROR ***n$sources_temp ist nicht vorhanden" 6 42
    fi
}

main_menu() {
    dialog --backtitle "voku-online.de" --title " Sources.list Tools - V. $VER "
        --cancel-label "Quit"
        --menu "Move using [UP] [DOWN], [Enter] to select" 15 80 10
        Deine_Sources.list "Deine source.list (less [q - zum beenden])"
        Repositories "Repositories eintragen"
        Extra-Repositories "Extra-Repositories: fuer Ubuntu 8.10"
        Ubuntu_Version "Waehle eine Ubuntu-Version"
        Aktuelle_Sources.list "Aktuelle source.list von voku-online.de anzeigen"
        Update "Paketdefinitionen aktualisieren"
        Quit "Exit" 2>$_temp

    opt=${?}
    if [ $opt != 0 ]; then rm $_temp; exit; fi
    menuitem=`cat $_temp`
    echo "menu=$menuitem"
    case $menuitem in
        Deine_Sources.list) less /etc/apt/sources.list;;
        Repositories) formbox;;
        Extra-Repositories) checklist;;
        Ubuntu_Version) radiolist;;
        Aktuelle_Sources.list) textbox;;
        Update) apt-get update;;
        Quit) rm $_temp; rm $sources_temp; rm $apt_get_dist_upgrade_temp; exit;;
    esac
}

while true; do
  main_menu
done

Desktop Firewall – iptables

Anbei eine Beispiel-Firewall mit iptables für einen Desktop PC.

__________________________

#!/bin/bash

INTERFACE="eth1"
NET="192.168.30.0/24"
MEINE_IP="192.168.30.226"

PING="yes"
SSH="yes"

# loescht alte Regeln
iptables -F
iptables -X

# alles dicht
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

if [ $SSH = "yes" ] ; then
    # erlauben - ssh
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 22 --sport 1024:65535 -j ACCEPT
    iptables -A OUTPUT -o ${INTERFACE} -p tcp --sport 22 --dport 1024:65535 -j ACCEPT
    # erlauben - sftp/scp
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 115 --sport 1024:65535 -j ACCEPT
    iptables -A OUTPUT -o ${INTERFACE} -p tcp --sport 115 --dport 1024:65535 -j ACCEPT
else
    # sperre - ssh und melde SSH-Angriffe im syslog
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 22 -m limit --limit 6/min -j LOG --log-prefix "Hack-Alarm:"
    iptables -A INPUT -i ${INTERFACE} -p tcp --dport 22 -j DROP
fi

if [ $PING = "yes" ] ; then
    # erlauben - icmp (ping)
    iptables -A INPUT -i ${INTERFACE} -p icmp --icmp-type echo-request -j ACCEPT
    iptables -A OUTPUT -o ${INTERFACE} -p icmp -d ${NET} -j ACCEPT
else
    # sperren - icmp (ping)
    iptables -A INPUT -i ${INTERFACE} -p icmp --icmp-type echo-request -j REJECT --reject-with icmp-host-unreachable
    iptables -A OUTPUT -o ${INTERFACE} -p icmp -d ${NET} -j ACCEPT
fi

# erlaube - Verbindungen nach aussen und deren Antwort
iptables -A OUTPUT -o ${INTERFACE} -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ${INTERFACE} -d ${MEINE_IP} -m state --state RELATED,ESTABLISHED -j ACCEPT

Deine öffentliche IP-Adresse – Linux HowTo

Mit folgenden Befehlen kannst du deine Öffentliche IP-Adresse herausfinden:

curl -L -s --max-time 10 http://checkip.dyndns.org | grep -Eo -m 1 '([[:digit:]]{1,3}.){3}[[:digit:]]{1,3}'
lynx -dump http://www.formyip.com/ | awk "/IP is/" | awk {'print $4'}
wget -O - -q icanhazip.com

_______________________

Alternativ kann man seine IP-Adresse auch auf anderem Wege herausfinden ;)
www.stoehn-meine-ip.de

_______________________

Und folgendermaßen kann man die IP-Adresse von einer bestimmten Domain anzeigen lassen:

host voku-online.de | grep address | awk {'print $4'}

Rechnen in der Shell

Rechnen mit der Bash selbst

echo $(( (11-1)/10*20 ))

Jedoch mach die Bash aus jede Zahl einen Integer Wert. ->

var=11; echo $(( $var/2 ))

Rechnen mit bc

echo "44/3" | bc -l

oder…

bc -l <<< "44/3"

Nachkommastellen angepassen

echo "scale=2; 44/3" | bc -l

oder…

bc -l <<< "scale=2; 44/3"

weitere Beispiele…

chmod – HowTo

chmod (von englisch: change mode) ist ein Kommandozeilenprogramm unter Unix, mit dem sich die klassischen Unix-Dateiattribute (Zugriffsrechte) verändern lassen. Das

chmod

-Kommando gibt es bereits seit der ersten Version des AT&T-Unix (Ende der 1970er Jahre). – Wikipedia

chmod (-R) (u|g|o|a) (+|-|=) (r|w|x|s|t) Datei/Verzeichnis

-R -> auch Unterverzeichnisse ändern (rekursiv)
-u -> user (Eigentümer)
-g -> group (Gruppe)
-o -> others (Andere)
-a -> all (Alle anderen)

+ -> Hinzufügen
– -> entfernen
= -> gleich

r -> read (Lese-Rechte)
w -> write (Schreib-Rechte)
x -> execute (Ausführ-Rechte)
s -> beim ausführen, startet das Programm mit dem Rechten des Eigentümer (u+s) oder der Gruppe (g+s)
t -> Lese-, Schreib-, Ausführrechte für den Inhalt eines Verzeichnisses, jedoch darf man nur seine eigenen Dateien löschen, mit Ausnahme des Eigentümers des Verzeichnisses

Zudem kann man die Zugriffsrechte auch per Ziffer (Oktalzahl) angeben: im folgendem Beispiel beschränke ich mich mal auf u|g|u und r|w|x

Die Oktalzhl ist eine Zusammenfassung von Binärzahlen, welche wiederum verschiedene Zugriffsrecht und Wertigkeiten haben.

Wertigkeiten: x = 1 ; w = 2 ; r = 4

Beispiel:

chmod -R 640 /home/User/Desktop/test

Symbolisch: r w | r |

Oktal: 6 | 4 | 0

Binär: 1 1 0 | 1 0 0 | 0 0 0

User: w (2) + r (4) = 6
Gruppe: r (4) = 4
Other: (0) = 0

0 <-> — <-> keine Berechtigung

1 <-> –x <-> ausführ-Rechte

2 <-> -w- <-> schreib-Rechte

3 <-> -wx <-> schreib-, ausführ-Rechte

4 <-> r– <-> lese-Rechte

5 <-> r-x <-> lese-, ausführ-Rechte

6 <-> rw- <-> lese-, schreib-Rechte

7 <-> rwx <-> lese-, schreib-, ausführ-Rechte

um nun z.B. alle Dateien einer Webseite, welche im aktuellen Verzeichnis liegen die ausführ-Rechte zu entziehen kann man sich einen find-Befehl zusammenbasteln:

find . -type f -exec chmod -x {} \;

bzw. folgendermaßen, um die schreib-rechte nur für den Besitzer der Dateien zu erlauben:

find . -type d -exec chmod 750 {} \;
find . -type f -exec chmod 640 {} \;