Nice Try!


Nice Tray
Nice Tray


bash – Version < 3.0:

for i in $(seq 1 500)
do
   echo "I will not throw paper airplanes in class."
done

bash – Version 3.0+:

for i in {1..500}
do
   echo "I will not throw paper airplanes in class."
done

bash – Alternative:

for (( c=1; c< =500; c++ ))
do
   echo "I will not throw paper airplanes in class."
done

bash – unendliche Schleife:

for (( ; ; ))
do
   echo "I will not throw paper airplanes in class."
done

[ CTRL+C ]

um diese Schleife wieder zu beenden

Linux – Kommandos als Hintergrundbild


CLI Kommands
CLI Kommands


Bash + Twitter

Übermittele deine Twitter-Nachrichten per Kommandozeile ->

curl -u user:password -d status=”deine Nachricht” http://twitter.com/statuses/update.xml

oder auch als Funktion in der .bashrc

tweet()
{
curl -u "$1" -d status="$2" "http://twitter.com/statuses/update.xml";
}
tweet user "deine Nachricht"

Nach der Bestätigung wirst du nach deinen Passwort gefragt und fertig.

Alternativ gibt es auch ein kleines Bash-Skript, mit welchem getwittert werden kann …

cheek.com/downloads/Tweet/

ls – list segments

mit “ls” („list segments“) kann man sich Dateien und Ordner in der Bash anzeigen lassen. Es folgen die entsprechenden Parameter, welche man mit dem “ls”-Befehl kombinieren kann und deren Auswirkung.

-F [ –classify ]

-> markiert Dateitypen unterschiedlich


* – ausführbare Datei
/ – Verzeichnis
@ – verlinkte Datei
| – FIFO / Named Pipes


-a [ -all ]

-> zeitg alle Daten an, auch versteckte


-A [ –allmost-all ]

-> zeitg alle Daten an, jedoch keine die mit “.” oder “..” anfagen


-B [ –ignore-backups ]

-> zeigt Backup-Daten mit einen vorgestellen “~” nicht an


-C

-> Datei/Verzeichnis werden in Spalten angezeigt


-c

-> Sortieren nach Zeitpunkt einer Änderung + mit-l: zeigt die ctime


-d [ –directory ]

-> zeigt Infos über das Verzeichnis, anstatt über dessen Inhalt an


-F [ –full-time ]

-> zeigt das Datum (Zeit) genauer an


-G [ –no-group ]

-> zeigt die entsprechene Gruppe der Datei nicht mit an


-h [ –human-readable ]

-> zeigt die entsprechende Dateigröße so an, dass man die am einfachsten lesen kann


-i

-> zeigt für jede Datei die entsprechende Index-Nummer mit an


-I [ –ignore ]

-> grenzt die Ausgabe ein

z.B.:
ls –ignore=”*.gz” – zeigt somit Daten welche auf “.gz” enden nicht an


-k [–kilobytes]

-> zeigt die entsprechende Dateigröße in Kilobytes an


-l

-> detailierte Ausgabe + zeigt pro Zeile nur eine Datei/Verzeichnis an


-L

-> zeigt die Eigenschaften der verlinkten Datei an, anstatt den Link selber


-m

-> zeigt eine Liste der Dateien, jeweils getrennt von einem Komma an


-n

-> zeigt die UIDs und GIDs an, anstatt den User- und Gruppennamen


-r [ –reverse ]

-> Ausgabe umdehen

z.B.:
ls -tr – sortierung nach letzter Veränderung, die neute Datei zuletzt


-R [ –recursive ]

-> Zeigt auch die Unterverzeichnise an


-s [ –size ]

-> zeigt die Dateigröße jeder Datei an


-S

-> sortierung nach Dateigröße, die größte Datei zuerst


-t

-> sortierung nach letzter Veränderung, die neute Datei ist zuerst


-u

-> sortierung nach letztem Zugriff, die neute Datei ist zuerst


-v

-> Sortierung nach Zahlen im Text (Version), von kleinen Zahlen nach großen


-x

-> Ausagbe in Linien statt in Spalten


-X

-> Alphabetische Sortierung


-1

-> zeigt jeweils eine Datei pro Zeile


–color=auto

-> markiert Dateitypen mit unterschiedlichen Farben


–group-directories-first

-> zeigt die Verzeichnisse als erstes an


–help

-> zeigt die Hilfe an


–version

-> zeigt die aktuell installierte Version an

diese Parameter kann man auch sehr gut miteinander kombinieren und dann ggf. als “alias” in die “.bashrc” eintragen, so dass man sich nicht alle Parameter merken muss.


ls -lahtrF --color=auto --group-directories-first

-> zeigt die Daten ausführlich, die Verzeichnisse zuerst, die Dateigröße leserlich und die neuste Datei unten an, dies kann in einem sehr unübersichtlichen Log-Verzeichnis von großem Nutzen sein, zudem werden die Dateitypen unterschiedlich und farblich markiert

su & sudo & Setuid-Bit

Um unter Linux Root-Rechte zu erhalten, kann man entweder direkt root werden (su) oder sich einige Root-Rechte beschaffen (sudo) oder man führt eine Datei aus, welche die passenden Rechte ausweist.

su: ( substitude user ) [ Benutzer austauschen ]

z.B.:

su user_1

Nur root kann direkt zu einem andern Benutzer wechseln, für alle andern gilt, dass man das entsprechende Kennwort wissen muss.

Um nun Root zu werden und auch dessen Einstellungen (Umgebungsvariablen) zu erhalten, tippst du folgenden Befehl.

su -

Das “-“-Zeichen bewirkt in diesem Fall, dass auch die Umgebungsvariablen von root gesetzt werden.

whoami

Dieser Befehl zeigt an, wer du momentan bist…

mit dem “su”-Befehl kann man auch einzelne Kommandos als root ausführen

z.B.:

su -c "less /var/log/messages"

sudo: ( substitute user, do ) [ ausgetauschter Benutzer macht ]

Noch besser/sicherer ist es mittels sudo zu arbeiten, denn hier musst du das Root-Passwort, dem entsprechendem Benutzer gar nicht mitteilen und er kann trotzdem ausgewählte Kommandos mit Root-Rechten ausführen.

sudo-Konfiguration:

vim /etc/sudoers

user_1 ALL = (ALL) ALL

der Benutzer “user_1” hat nun mittels sudo komplette Root-Rechte

z.B.:

sudo su -

user_2 ALL = /sbin/shutdown

der Benutzer “user_2” kann mit sudo nun den PC/Server heruntergefahrenen

z.B.:

sudo shutdown -h now

user_2,user_3 ALL = /sbin/shutdown

somit kann man mehreren Benutzern entsprechende Rechte zuweisen

Defaults timestamp_timeout = 0

wenn man diese Zeile in “/etc/sudoers” einträgt, muss das (eigene) Passwort bei jedem sudo-Befehl erneut eingegeben werden

wenn ein sudo-Befehl von einem Benutzer ausgeführt wird, welcher die entsprechenden Rechte nicht hat, so wird eine E-Mail generiert und der root-User darüber informiert

weitere Infos:
wiki.ubuntuusers.de/sudo/Konfiguration

chmod: [ Setuid-Bit ]

Vor einiger Zeit habe ich in folgendem Beitrag erwähnt, dass man auch mittel “chmod” andere Rechte bekommen kann. -> chmod

Hier ein entsprechendes Beispiel:

Um einer ganzen Gruppe ausführbare Root-Rechte auf ein bestimmtes Programm zu geben, könnte man auch ein “Setuid-Bit” setzten.

chown root:gruppe_1 /sbin/shutdown
chmod ug=rx,u+s /sbin/shutdown

Systeminfos anzeigen lassen

Wer seinem Linux (als Beispiel dient hier Debian) Informationen zur Hardware entlocken möchte, kann dies unter-anderem mit den folgenden Kommandos machen.

1.) Allgemeine Hardware-Infos

dmidecode ist ein Tool um das DMI (SMBIOS) eines Computers ausliest, es wird eine Tabelle erzeugt, in welche eine Beschreibung der Hardware Komponenten deines PC aufgeführt wird… z.B. Informationen wie Serien-Nummern und BIOS Version.

aptitude install dmidecode
dmidecode | less

Alternativ wäre hier auch noch lshw bzw. hwinfo zu erwähnen, diese beiden Programme zeigt eine Hardware Liste deines PC/Servers an.

aptitude install lshw
lshw | less

bzw. mittels w3m anzeigen lassen

lshw -html | w3m -T text/html
lshw -short | less


H/W path Device Class Description
====================================================
system A7N8X2.0
/0 bus A7N8X2.0
/0/0 memory 64KiB BIOS
/0/4 processor AMD Athlon(tm) XP 2600+
/0/4/9 memory 128KiB L1 cache
/0/4/a memory 512KiB L2 cache
/0/26 memory 2560MiB System Memory
[...]

aptitude install hwinfo
hwinfo | less
hwinfo --short | less


cpu:
AMD Athlon(tm) XP 2600+, 1921 MHz

keyboard:
/dev/input/event0 AT Translated Set 2 keyboard

graphics card:
ATI RV280 5c63

sound:
ASUSTeK nForce2 AC97 Audio Controler (MCP)

storage:
nVidia nForce2 IDE

network:
eth0 nVidia nForce2 Ethernet Controller
eth1 Realtek RT8139

[…]

Des-weitern können wir mittels lm-sensors die Lüfter-Geschwindigkeit (RPM), die Temperatur (°C) und die Spannung (V) anliegt ausgelesen werden.

Wie immer installiern wir als erstes das entsprechende Programm…

aptitude install lm-sensors

nun einmal den folgenden Befehl ausführen um nach den Sensoren auf dem Motherboad usw. zu suchen ->

sensors-detect

nun können wir uns die gewünschten Informationen ausgeben lassen ->

sensors

Adapter: SMBus nForce2 adapter at 5500
[...]
in6: +3.07 V (min = +0.00 V, max = +0.00 V)
fan1: 4299 RPM (min = 112500 RPM, div = 2)
fan2: 0 RPM (min = 10546 RPM, div = 2)
fan3: 0 RPM (min = -1 RPM, div = 2)
temp1: +31.0°C (high = +80.0°C, hyst = +75.0°C)
temp2: +28.0°C (high = +80.0°C, hyst = +75.0°C)
temp3: -0.5°C (high = +80.0°C, hyst = +75.0°C)
temp4: +25.0°C (high = +80.0°C, hyst = +75.0°C)
[...]

2.) Arbeitsspeicher (RAM)

Mit dem folgenden Kommando, werden die Informationen zu den “Memory Module” angezeigt ->

sudo dmidecode --type 6

bzw.

sudo dmidecode --type 17

Alternativ kann man sich die Infos auch mit lshw anzeigen lassen, dafür müssen wir als erst-einmal, wir zuvor Beschrieben, dass entsprechende Paket installieren und dann die entsprechenden Infos zum RAM anzeigen lassen ->

lshw -class memory

einige Infos über den aktuellen Speicherverbrauch kann man mit folgenden Kommando in Erfahrung bringen ->

cat /proc/meminfo

bzw.

free -mt

3.) PCI Hardware-Infos

lspci zeigt eine Liste mit allen PCI Geräten an. (z.B. Grafikkarte, Soundkarte, Netzwerkkarte…)

aptitude install pciutils
lspci

folgendes Kommando zeigt deine Soundkarte an ->

lspci | grep

folgendes Kommando zeigt deine Grafikkarte an ->

lspci | grep VGA

folgendes Kommando zeigt deine Netzwerkkarte an ->

lspci | grep Ethernet

4.) CPU Hardware-Infos

Folgende zeigt Infos zur CPU an (z.B. Beschreibung, Version, MHZ, FSB…)

lshw -class cpu

bzw.

cat /proc/cpuinfo

und dies die Auslastung (load) der CPU

cat /proc/loadavg

bzw.

top

5.) Festplatten Hardware-Infos

Folgendes Kommando zeigt alle Partitionen an

cat /proc/partitions

bzw.

fdisk -l

und mit dem nächsten Befehl kannst du mittels S.M.A.R.T. herausfinden, ob es deiner Festplatte gut geht, oder ob du diese baldmöglichst austauschen solltest. (die SMART Unterstützung muss im BIOS aktiviert werden)

Als erstes installieren wir dies einmal…

aptitude install smartmontools

… dann Kommentieren wir alles mit “#” in der folgenden Datei aus, so dass der Daemon nicht automatisch gestartet wird.

vim /etc/default/smartmontools

folgendes zeigt alle Infos zu einer Festplatte an ->

smartctl --all /dev/h(s)da

zeigt nur an, ob die Festplatte noch OK ist ->

smartctl -H /dev/h(s)da

und dies zeigt Festplatten-Infos an (z.B. Model, Seriennummer, Firmware…)

smartctl -i /dev/h(s)da

crontab

Ein Skript, ein Befehl oder sonstiges, was in einen bestimmten Rhythmus wiederholt in der ausgeführt werden soll, genau dafür ist ein Cronjob zuständig.

 

cron
cron

 

Um nun einen cronjob einzutragen, muss man sich zunächst für einen Editor für diesen Zweck entscheiden… in diesem Fall setzen wir als Standart-Editor “VIM” ->

export EDITOR=vim

das Kommando:

crontab -l

-> zeigt deine crontab-Einträge an

crontab -u -l

-> zeigt alle crontab-Einträge von einem bestimmten “user” an

crontab -e

-> editiert deine crontab-Einträge

crontab -u -e

-> editiert die crontab-Einträge von einem bestimmten “user”

crontab -r

-> löscht alle deine crontab-Einträge

die Syntax:

[Minuten] [Stunden] [Tag des Monats] [Monat] [Tag der Woche] [Kommando]

– [Minuten] -> 0-59
– [Stunden] -> 0-23
– [Tag des Monats] -> 1-31
– [Monat] -> 1-12
– [Tag der Woche] -> 0-7 (0 oder 7 = Sonntag)

einige Beispiele:

* * * * * /home/user/test.sh > /dev/null 2>> /var/log/test.log

– “* * * * *” -> das Skript wird jede Minute ausgeführt
– “> /dev/null” -> es hat keine Ausgabe auf der Konsole
– “2>>” -> Fehler werden ins Logfile geschrieben

30 00 * * * /home/user/test2.sh &> /dev/null

– “30 00 * * *” -> das Skript wird jeden Tag um 00:30 Uhr ausgeführt
– “&> /dev/null” -> es werden keine Ausgaben ausgegeben (kein Log)

0 0 1 1 * /home/user/test3.sh > /dev/null 2>> /var/log/test3.log

– “0 0 1 1 *” -> das Skript wird einmal im Jahr ausgeführt

30 00 * * 1,2,3,4,5 /home/user/test4.sh > /dev/null 2>> /var/log/test4.log

– “30 00 * * 1,2,3,4,5” -> das Skript wird von Montags bis Freitags ausgeführt (um 00:30)

30 00 * * 6-7 /home/user/test5.sh > /dev/null 2>> /var/log/test5.log

– “30 00 * * 6-7” -> das Skript wird Samstags und Sonntags ausgeführt (um 00:30)

0 */2 * * * /home/user/test6.sh > /dev/null 2>> /var/log/test6.log

– “0 */2 * * *” -> das Skript wird jede zwei Stunden ausgeführt

0 8-20/2 * * * /home/user/test7.sh > /dev/null 2>> /var/log/test7.log

– “0 8-20/2 * * *” -> das Skript wird jede zwei Stunden von 8 bis 20 Uhr ausgeführt

1,2,5,9 -> jede erste, zweite, fünfte, neunte (Minute, Stunde… )
0-4,8-12 -> von 0 bis 4 und von 8 bis 12 (Minute, Stunde… )
*/5 -> jede fünf (Minute, Stunde… )
1-9/2 -> von 1 bis 9 in zweier Schritten (Minute, Stunde… )

Speicherverbrauch anzeigen lassen

Um deinen Speicherverbrauch zu sehen gibt es viele Möglichkeiten unter Linux.

1.) Allgemeine Speicherverbrauch im MB anzeigen lassen

free -mt

2.) Detaillierten Speicherverbrauch anzeigen lassen

cat /proc/meminfo

3.) Mit dem Universal-Werkzeug

top

-> gefolgt von einem großen “M” dann werden die Prozesse auch noch nach Ihrem Speicherverbrauch sortiert

4.) Eine sortierte Ausgabe des Speicherverbrauch je Prozess

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

5.) Eine sortierte Ausgabe des Speicherverbrauch je Prozess (in schön)

vim ~/speicher.sh
#!/bin/bash

/usr/bin/printf "%-6s %-9s %sn" "PID" "Total" "Command"
/usr/bin/printf "%-6s %-9s %sn" "---" "-----" "-------"

for PID in `/bin/ps -e | /usr/bin/awk '$1 ~ /[0-9]+/ { print $1 }'`
do
   CMD=`/bin/ps -o comm -p ${PID} | /usr/bin/tail -1`
   TOTAL=`/usr/bin/pmap ${PID} 2>/dev/null | /usr/bin/tail -1 | /usr/bin/awk '{ print $2 }'`
   [ -n "${TOTAL}" ] && /usr/bin/printf "%-6s %-9s %sn" "${PID}" "${TOTAL}"  "${CMD}"
done | /usr/bin/sort -n -k2
chmod +x ~/speicher.sh
~/speicher.sh

In diesem Skript sollte ich das Programm “pmap” noch einmal erwähnen, mit diesem kannst du weitere Informationen zum Speicherverbrauch eines Prozesses in Erfahrung bringen.

z.B.:

ps auxf | grep apache

In der zweiten Spalte der Ausgabe finden wir jeweils die PID-Nummer des Prozesses.

pmap < PID > | grep php

nun sehen wir z.B. den Speicherverbrauch der php-Erweiterungen

mount über SSH

Wer per ssh z.B. ein bestimmtes Verzeichnis oder einen ganzen Server über ssh mounten möchte kann dies wie folgt unter Debian / Ubuntu bewerkstelligen.

aptitude install sshfs
mkdir -p ~/mnt/server
sshfs -o idmap=user root@server:/ ~/mnt/server

Mit “afuse” kann man das Verzeichnis auch automatisch mounten, sobald man darauf zugreift (man sollte ssh-keys verwenden, ansonsten muss man immer das Passwort eingeben…)

aptitude install afuse sshfs
mkdir ~/sshfs
afuse -o mount_template="sshfs %r:/ %m" -o unmount_template="fusermount -u -z %m" ~/sshfs
cd ~/sshfs/root@server

Sobald man also mit “cd” in das Verzeichnis “~/mnt/server” wechselt springt der “afuse-Automounter” an und mountet das System via “sshfs”. Dabei wird die UserId, über welche man sich angemeldet hat, immer auf die lokale gemapped. Die Verwendung des SSH-Agent/SSH-Keys ist hier ganz nützlich – andernfalls poppt ein Passwort-Dialog auf, in welchem du dich anmelden musst.

Bash-Programmierung: Schleifen

Eine Endlosschleife erzeugen wir nun, indem wir einfach eine Bedingung wählen, die immer erfüllt ist… dies könnte man z.B. wie folgt machen:

while true; do date; sleep 5; done

Dies kann man jedoch auch sehr viel einfacher haben und zwar mit “watch”:

watch -n5 "date"

Wenn die Schleife jedoch noch einigen Durchläufen beendet werden soll, kann man dies z.B. so machen:

for i in`seq 1 50` ; do echo $i ; date ; sleep 5 ; done

Hier noch ein paar Beispiele:

#!/bin/sh

ANZAHL=0
echo "until-Loop"
# gt = groesser

until [ ${ANZAHL} -gt 10 ] ; do
        echo ${ANZAHL}
        ANZAHL=`expr ${ANZAHL} + 1`
done

# ------------------------------------

ANZAHL=0
echo "while-Loop"
# gt = kleiner/gleich

while [ ${ANZAHL} -le 10 ]
        do
        echo ${ANZAHL}
        ANZAHL=`expr ${ANZAHL} + 1`
done

# ------------------------------------

echo "For-Loop"
# seq = sequenz

for i in `seq 0 10`
        do
        echo $i
        done
exit

# ------------------------------------

Zum Schluss noch ein Beispiel aus der Praxis:

for I in $(ps aux|grep "apache"| awk {'print $2'}); do kill -9 $I; done

vielleicht auf den ersten Blick ein wenig konfus, aus den zweiten Blick erkennt man jedoch, dass mittels ps nach “apache” gesucht wird, die PID-Nunner per awk herausgenommen und diese Programme dann getötet werden.