Archiv der Kategorie: Linux Befehle

Sortierte Ausgabe von du -h (Kombinieren von du -h und sort)

Eine Ergänzung zu dem Artikel „Unter Linux eine Liste der größten Dateien ausgeben

Ich habe schon öfters nach einer Möglichkeit gesucht, die Ausgabe des Linux-Befehls du mit dem Parameter „-h“ (für human-readable) sortiert nach der Größe ausgeben zu lassen. Sortieren ohne die Option „-h“ ist kein Problem.

# du /var –max-depth=1 |sort -nr
686528 /var
575840 /var/lib
62848 /var/log
46628 /var/cache
872 /var/adm
156 /var/spool
128 /var/run
28 /var/lock
8 /var/tmp
4 /var/X11R6
4 /var/opt
4 /var/games
4 /var/crash

Nur die Anzeige ist nicht so übersichtlich. Ein „normales“ Sortieren funktioniert bei du -h aber nicht, da die unterschiedlichen Einheiten nicht berücksichtigt werden.

# du -h /var –max-depth=1 |sort -nr
872K /var/adm
671M /var
563M /var/lib
156K /var/spool
128K /var/run
62M /var/log
46M /var/cache
28K /var/lock
8,0K /var/tmp
4,0K /var/X11R6
4,0K /var/opt
4,0K /var/games
4,0K /var/crash

Auf folgender Seite fand ich eine Lösung für die Kombination von du -h und sort.

du | sort -nr | cut -f2- | xargs du -hs

Natürlich kann die Ausgabe noch mit weiteren du Parametern und einer direkten Pfadangabe kombiniert werden.

# du /var –max-depth=1 | sort -nr | cut -f2- | xargs du -hs
671M /var
563M /var/lib
62M /var/log
46M /var/cache
872K /var/adm
156K /var/spool
128K /var/run
28K /var/lock
8,0K /var/tmp
4,0K /var/X11R6
4,0K /var/opt
4,0K /var/games
4,0K /var/crash

E-Mail versenden per Bash Shell Script

Ich war gerade mal wieder auf der Suche nach dem Syntax, um per Linux Bash Shell eine Mail zu versenden:

Direkte Eingabe des Mailtextes:

echo "MAILTEXT" | mail -s "BETREFF" EMPFÄNGERADRESSE

z.B.

echo "Das ist der Text der Testemail" | mail -s "Das ist der Betreff der Testemail" user@example.com

Mailtext aus einer Datei:

mail -s "BETREFF" EMPFÄNGERADRESSE < DATEI

z.B.

mail -s "Ich bin eine Mail" user@example.com < /etc/hosts

Quelle: http://www.linux-club.de

RSYNC Fehlermeldung: protocol version mismatch — is your shell clean? (rsync error: protocol incompatibility (code 2) at compat.c(171) [receiver=3.0.4])

Als ich ein Script testen wollte, das ein Verzeichnis mit rsync und ssh von Server1 auf Server2 spiegeln sollte, verweigerte rsync seinen Dienst mit folgender Fehlermeldung:

protocol version mismatch — is your shell clean?
rsync error: protocol incompatibility (code 2) at compat.c(171) [receiver=3.0.4]

Eine Webrecherche brachte die Lösung des Problems. Eigentlich hätte man mit der Fehlermeldung „is your shell clean?“ selbst darauf kommen können.

Auf dem Server, auf den ich mit rsync zugreifen wollte, befand sich ein Startskript .bashrc mit folgendem Eintrag:

LOGINSTATION=`who | cut -d“(“ -f2 | cut -d“)“ -f1`
echo Login von: $LOGINSTATION

Dieses Skript produzierte bei einem Login eine Ausgabe wie diese:

Login von: 11-66-100-10-dynip.superkabel.de

Diese Meldung brachte nun RSYNC aus dem Tritt. Anscheinend setzt rsync eine Loginshell ohne zusätzliche Meldungen vorraus. Deshalb auch die Fehlermeldung: “is your shell clean?”

Wenn die Meldung aus der .bashrc entfernt wird, funktionierte RSYNC wieder wie gewohnt.

Ermitteln der Linuxdistribution, Linuxversion, Kernelversion, CPU, RAM, HD-Kapazität

Befehle zum Ermitteln der Linux-Distribution und der Version der Linux-Distribution:

cat /etc/issue

Beispielausgabe:

Fedora release 9 (Sulphur)
Kernel \r on an \m (\l)

oder

Welcome to openSUSE 11.1 - Kernel \r (\l).

Befehle zum Ermitteln der Version des Linuxkernels:

uname -r

Ausgabe:

2.6.27.12-78.2.8.fc9.x86_64

2.6.18-028stab064.7

2.6.27.48-0.1-pae

oder

cat /proc/version

Ausgabe:

Linux version 2.6.18-028stab064.7 (root@rhel5-64-build) (gcc version 4.1.2 20070 626 (Red Hat 4.1.2-14)) #1 SMP Wed Aug 26 13:11:07 MSD 2009

Linux version 2.6.27.48-0.1-pae (geeko@buildhost) (gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux) ) #1 SMP 2010-07-05 22:20:39 +0200

 

Befehle zum Ermitteln der CPU Informationen:

cat /proc/cpuinfo

Ausgabe:

processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 2
model name : Quad-Core AMD Opteron(tm) Processor 2347 HE
stepping : 3
cpu MHz : 1431.598
cache size : 512 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc pni cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
bogomips : 3817.59
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate [8]

oder

lscpu

Ausgabe:

lscpu
Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
Vendor ID:             AuthenticAMD
CPU family:            16
Model:                 2
Stepping:              3
CPU MHz:               1425.000
BogoMIPS:              3817.70
Virtualization:        AMD-V

Befehle zum Ermitteln der HD Speicherplatzbelegung:

df -h

Ausgabe:

Dateisystem Size Used Avail Use% Eingehängt auf
/dev/vzfs   25G  21G  4,6G  82%  /

Befehle zum Ermitteln der RAM Speicherbelegung:

free -m -t

Ausgabe:

      total used free shared buffers cached
Mem:  2048  72   1975 0      0       0
-/+ buffers/cache: 72 1975
Swap: 0 0 0
Total: 2048 72 1975

Unter Linux eine Liste der größten Dateien ausgeben

Folgende Problemstellung: Es soll unter Linux eine nach Dateigröße sortierte Liste von Dateien ermittelt werden, die eine bestimmte Größe überschreiten.

find /srv -type f -size +50000k

Mit dem Find-Befehl wird eine Liste aller Dateien im Verzeichnis /srv und den darin enthaltenen Unterverzeichnissen ermittelt, die größer als 50000 Kb sind. Das Ergebnis ist noch nicht ganz zufriedenstellend, da nur die Dateien ausgegeben werden, nicht aber ihre Größe. Ebenfalls sind die Dateien noch nicht sortiert. Dies lässt sich erreichen, indem man das Ergebnis des Find-Befehls mithilfe des Befehls xargs mit dem ls Befehl kombiniert.

find /srv -type f -size +50000k| xargs ls -lahS

Jetzt erhält man die gewünschte Liste mit den Dateien im Verzeichnis /srv, die größer als 50000Kb sind – sortiert nach der Dateigröße.

Minimal CPU Benchmark für Linux

Nachdem ich heute zwei unterschiedliche virtuelle Server von Strato geordert hatte, suchte ich nach einer Möglichkeit, mit wenig Aufwand die CPU-Leistung der virtuellen Server zu vergleichen. Im Forum www.linux-club.de fand ich einen Einzeiler, mit dem die Zeit ermittelt wird, die Zahl Pi auf 1000 Stellen zu berechnen.

time echo "scale=1000; 4*a(1)" | bc -l

Hier noch ein paar Ergebnisse:

Root KVM vServer Netcup S v6
4,99€ / Monat
40GB HD RAID1
2GB RAM
1 vCore  Westmere E56xx/L56xx/X56xx (Nehalem-C) cpu MHz : 2000.000

(25.08.2015)
real 0m0.613s
user 0m0.592s
sys 0m0.016s

(29.10.2015)
real 0m0.631s
user 0m0.620s
sys 0m0.004s

(29.10.2016)
real 0m0.660s
user 0m0.628s
sys 0m0.028s

Root Server Linux Small (bkm-v1411.1.29)  (Hardware)
19,00 €/Monat
500GB HD Raid 1
4 GB Ram
Dual-Core AMD Opteron(tm) Processor 1214 HE cpu MHz : 1000.000

(29.12.2014)
real 0m0.764s
user 0m0.760s
sys 0m0.000s

(29.10.2015)
real 0m0.763s
user 0m0.756s
sys 0m0.000s

Strato Virtual Server Linux V20-49 (1609.1de)
10,00€/Monat
300GB HDD
Min 2GB RAM, max 4GB RAM
2 vCores (Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz  cpu MHz:1998.828 )

(29.10.2016)
real 0m0.376s
user 0m0.375s
sys 0m0.000s

 

Virtual Server Linux Level 1 Site (Wandel.1406.ERG)
8,99 €/Monat
200GB HDD
Min 2GB RAM, max 4GB RAM
2 vCores (Quad-Core AMD Opteron(tm) Processor 2347 HE cpu MHz : 379.443)

(29.12.2014)
real 0m2.272s
user 0m0.932s
sys 0m0.004s

 

Virtual Server Linux Level 1 Site (Wandel.1406.ERG)
8,99 €/Monat
200GB HDD
Min 2GB RAM, max 4GB RAM
2 vCores (Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz cpu MHz : 239.648)

(29.12.2014)
real 0m2.638s
user 0m1.069s
sys 0m0.005s

(29.10.2016)
aktuelle CPU MHz: 1998.828!!!
real 0m0.412s
user 0m0.394s
sys 0m0.012s

 

Virtual Server Linux Level 1 Site (Wandel.1406.ERG)
8,99 €/Monat
200GB HDD
Min 2GB RAM, max 4GB RAM
2 vCores (Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz cpu MHz : 559.179)

(29.12.2014)
real 0m1.032s
user 0m0.388s
sys 0m0.044s

(29.10.2015)
real 0m1.100s
user 0m0.394s
sys 0m0.000s

Strato Virtual Server Linux Level 1 (v1304.1)
7,99 €/Monat
50GB HDD
Min 1GB RAM, max 2GB RAM
1 x Quad-Core AMD Opteron(tm) Processor 2347 HE 1425.000 MHz (physikalische CPU, nicht die nutzbaren Kerne)

(31.10.2013)
real 0m1.225s
user 0m0.921s
sys 0m0.005s

Strato Virtual Server Linux Level 2UP
14,90 €/Monat
100GB HD
Min 2GB RAM, max 4GB RAM
1 x Octo-Core AMD Opteron(tm) Processor 6128 1500.105 MHz (physikalische CPU, nicht die nutzbaren Kerne)

(31.10.2013)
real 0m1.278s
user 0m0.969s
sys 0m0.006s

(02.12.2012)
real    0m1.476s
user    0m1.224s
sys     0m0.023s

V-PowerServer S (v5.1)
7,90 €/Monat
25GB HDD
2048 MB RAM (physikalisch)
1 x Quad-Core AMD Opteron(tm) Processor 2347 HE 1431.598 MHz (physikalische CPU, nicht die nutzbaren Kerne)

(31.10.2013)
real 0m1.267s
user 0m0.958s
sys 0m0.008s

(01.12.2012)
real 0m1.674s
user 0m1.324s
sys 0m0.008s

STRATO V-PowerServer S (v4.1)
9,90 €/Monat
(20.02.2010)
real 0m1.793s
user 0m1.405s
sys 0m0.035s

(09.05.2011)
real 0m1.371s
user 0m1.090s
sys 0m0.006s

STRATO V-PowerServer L (v4.3)
29,90 €/Monat
50GB HDD
4096 MB RAM (physikalisch)
2 x Quad-Core AMD Opteron(tm) Processor 2347 HE 1670.198 MHz (physikalische CPU, nicht die nutzbaren Kerne)

(31.10.2013)
real 0m0.953s
user 0m0.942s
sys 0m0.002s

(01.12.2012)
real 0m0.950s
user 0m0.940s
sys 0m0.005s

(09.05.2011)
real 0m0.987s
user 0m0.978s
sys 0m0.008s

(20.02.2010)
real 0m0.680s
user 0m0.674s
sys 0m0.007s

STRATO V-PowerServer L (v5.3)
24,90 €/Monat

(09.05.2011)
real 0m1.074s
user 0m1.067s
sys 0m0.008s

STRATO V-PowerServer A (v2.5)
(20.02.2010)
real    0m0.875s
user    0m0.866s
sys     0m0.007s

STRATO PowerServer MR (v4.3)  (Hardware)

(20.02.2010)
real    0m1.695s
user    0m1.688s
sys     0m0.008s

ThinClient mit Via 800 Mhz CPU

(20.02.2010)
real    0m9.423s
user    0m6.800s
sys     0m0.020s

Raspberry Pi

(10.02.2013)
real    0m4.566s
user   0m3.730s
sys     0m0.020s

PC mit Intel Core 2 CPU 1600 Mhz CPU

(02.12.2012)
real    0m0.600s
user    0m0.596s
sys     0m0.004s

Dell Poweredge 2950  (Hardware)
Dual-Quad Core Intel(R) Xeon(R) CPU E5430 @ 2.66GHz  cpu MHz : 2660.011

(29.12.2014)
real 0m0.489s
user 0m0.488s
sys 0m0.000s

Intel Atom  (Hardware)
Quad Core Intel(R) Atom(TM) CPU D525 @ 1.80GHz cpu MHz : 1800.150

(29.10.2015)
real 0m1.759s
user 0m1.752s
sys 0m0.004s

Strato Server Cloud VM
1CPU 1GB Ram 20GB HDD
Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz cpu MHz : 2300.050

(29.10.2015)
real 0m0.666s
user 0m0.652s
sys 0m0.008s

Wie in der Überschrift erwähnt, ist dies nur ein Minimal CPU Benchmark. Er liefert nur als Momentaufnahme grobe Anhaltspunkte über die Geschwindigkeit der CPU (eines CPU Cores) und ersetzt keineswegs einen vollständigen Benchmark, der alle Systemkomponenten einbezieht.

Kombination der Linux/Unix Befehle find und ls mit xargs

Ich wollte die Dateigröße aller Logdateien verschiedener vhosts eines Webservers anschauen. Mit

find /srv/ -name access_log.log

konnte ich mir die Logdateien anzeigen lassen. Nähere Informationen zu den Dateien inklusive Dateigröße erhoffte ich mir von folgendem Befehl:

/srv/ -name access_log.log | ls-alh

Die Pipe funktionierte leider nicht so, wie ich es erwartete. Ich bekam nur die Liste der Dateien im aktuellen Ordner. Eine Internetrecherche brachte dann die richtige Befehlskombination:

find /srv/ -name access_log.log| xargs ls -lah

Variablen bei sed-Ausdrücken

Problem: Beim Suchen und Ersetzen eines Strings in einer Textdatei mit dem Linux-Programm sed (Stream Editor) trat das Problem auf, dass bei der Verwendung von Shellvariablen als Suchmuster der gewünschte Text, also der Wert der Variablen, nicht durch den Zieltext ersetzt wurde. Ein Test ohne Variablen funktionierte aber ohne Probleme.

sed ’s/suchmuster/zieltext/g‘ Eingabedatei > Ausgabedatei
mv Ausgabedatei Eingabedatei

ersetzte den Text „suchmuster“ in der „Eingabedatei“ mit dem Text „zieltext“ und schrieb das Ergebnis in die „Ausgabedatei“.

Folgendes funktionierte aber nicht:

suchmuster=“das ist der quelltext“
zieltext=“das ist der zieltext“
sed ’s/$suchmuster/$zieltext/g‘ Eingabedatei > Ausgabedatei
mv Ausgabedatei Eingabedatei

Der Text „das ist der quelltext“ wurde nicht durch den Text „das ist der zieltext“ ersetzt.

Lösung: Durch eine Suchmaschinenrecherche fand ich die Lösung. Sed wertet den Inhalt von Variablen nicht aus, wenn man einfache Anführungszeichen (‚) beim Erstellen des Ausdrucks verwendet. Ersetzt man die einfachen Anführungszeichen durch doppelte Anzührungszeichen („), werden zuerst die Variablen expandiert und dann erst der Sed-Ausdruck ausgeführt.

Der funktionierende Code sah dann so aus:

suchmuster=“das ist der quelltext“
zieltext=“das ist der zieltext“
sed s/$suchmuster/$zieltext/g Eingabedatei > Ausgabedatei
mv Ausgabedatei Eingabedatei

Quelle: http://www.unixboard.de