| Home Profil Fun |
#80 Linux 03.08.2009
Linux-NotizzettelHier kommen nach und nach alle Kurz-Tipps und Kommandos hin, die sonst untergehen würden. Also eine Ansammlung wahlloser Kommandos, Tricks und Anleitungen. Und los gehts... DVDs auf SuSE anschauen Multipath-Topologie anzeigen Dateisystemeigenschaften und Resizing Alle Variablen der Systemumgebung ausgeben Firewall für eine Ethernet-Bridge Detaillierte Infos zu Netwerkinterfaces Alle Emails in allen Postfix-Queues löschen Verfügbare WLAN-Netze ermitteln Disk-IO und andere Hardware-Parameter pro Prozess Verschachteltes read SSH-login mit hardcodierten Zugangdaten geht mit expect Shell-Skript zum Versenden von Emails mit Anhang Wenn es extrem lange dauert bis der SSH-Login-Prompt kommt Dateiinhalt ohne Kommentarzeilen ausgeben Versteckte Dateien rekursiv finden und in einen einzigen Ordner kopieren RPM-Kommandos Alle public und private Keys mit gpg löschen Beispiel für rsync Alle Apachemodule (auch die einkompilierten) auflisten Gelöschte Dateien auf ext3 wiederherstellen Epoche Time, Unix-Zeit UDP-Port mit Bash-Skript prüfen In der xorg.conf die Bildschirmauflösung ändern Kopete-History in openSUSE Mit dd am Cache vorbei direkt auf die Platte schreiben Systemauslastung Informationen zu eingeloggten Benutzern Den Dateisystem-Puffer flushen ext2/ext3-Dateisystemcheck mit Aussonderung defekter Blöcke Memory Type Range Registers (MTRR) deaktivieren Rückgabewert des letzten Shell-Kommandos You have new mail in /var/mail/... Puppet auf SLES 10 installieren Löschen der Bash-History Serverüberwachungstools Syntaxtest smb.conf Eine Textdatei mit einem bestimmten Encoding öffnen MySQL Zeichensatz MySQL-Replikation einrichten DVDs auf SuSE anschauen Um DVDs auf SuSE-Linux z.B. mit VLC anschauen zu können kann man die folgenden Schritte durchführen: Zuerst mit Yast das Paket gcc-fortran installieren, falls es nocht nicht vorhanden ist. Dann ein RPM-Paket für libdvdcss bauen und anschließend installieren: cd /usr/src/packages/SOURCES wget http://download.videolan.org/pub/libdvdcss/1.2.10/libdvdcss-1.2.10.tar.bz2 wget http://packman.links2linux.de/downloadsource/70129/libdvdcss2-1.2.10-0.pm.0.nosrc.rpm rpmbuild --rebuild libdvdcss*.nosrc.rpm rpm -ihv /usr/src/packages/RPMS/x86_64/libdvdcss2-1.2.10-0.pm.0.x86_64.rpmVLC starten und genießen. Multipath-Topology anzeigen Durch Eingabe der folgenden Befehle lassen sich Informationen über die Multipath-Topologie und Pfade ausgeben: multipath -ll echo "show paths" | multipathd -k Dateisystemeigenschaften und Resizing Um ein ext2/3-Dateisystem zu vergrößern oder zu verkleinern muss es mit "resize_inode" gebaut worden sein. Ob das der Fall ist sieht man durch Eingabe des folgenden Kommandos: tune2fs -l /dev/sdaXIn der Zeile "Filesystem features" muss resize_inode vorkommen. Alle Variablen der Systemumgebung ausgeben getconf -a Firewall für eine Ethernet-Bridge Mit ebtables lassen sich Filterregeln für Ethernet-Frames erstellen. Detaillierte Informationen über Netzwerkinterfaces Mit dem Programm ethtool lassen sich u.a. Low-level-Informationen abrufen, Statistiken ausgeben und auch Parameter setzen. Alle Emails in allen Postfix-Queues löschen postsuper -d ALL Verfügbare WLAN-Netze ermitteln iwlist scan Disk-IO und andere Hardware-Parameter pro Prozess Mit dem Kommando atop ist es möglich verschiedene Hardware-Parameter wie Disk-IO und Netzwerkverkehr pro Prozess und nicht nur für das gesamte System einzusehen. Dies ist eine sehr gute Möglichkeit den Ursachen für Performanceprobleme auf die Spur zu kommen. Allerdings sind dafür zwei Kernel-Patches notwendig. atop Verschachteltes read Wenn in einem Bash-Skript mehrere read-Kommandos vorkommen und diese ineinander, durch Schleifen oder Unterfunktionen, verschachtelt sind, kann es passieren, dass auf die Eingabe nicht gewartet wird. Die Ursache dafür konnte ich noch nicht herausfinden, jedoch hat geholfen read USERINPUTmit read USERINPUT < /dev/ttyzu ersetzen. SSH-login mit hardcodierten Zugangdaten geht mit expect Z.B. mit diesem Skript: http://bash.cyberciti.biz/security/expect-ssh-login-script/ lässt es sich bewerkstelligen. Damit es funktioniert muss jedoch der Fingerprint des Servers auf dem man sich einloggen will schon abgelegt worden sein, sonst hängt es. Daher einfach einmal normal, interaktiv per ssh einloggen falls noch nicht geschehen, Fingerprint annehmen und dann geht es auch mit dem Skript. Shell-Skript zum Versenden von Emails mit Anhang
#!/bin/bash
# zipped 2 Dateien mit Passwort und versendet die zip-Datei per Email
# braucht Perl, sendEmail (http://caspian.dotconf.net/menu/Software/SendEmail/)
SUBJECT="subject text"
BODY="body text"
SMTPSERVER=""
SMTPLOGIN=""
SMTPPASS=""
PASSWORD=""
SENDER="senderemail@domain.com"
RECIPIENT="recipient@domain.com"
TLS="yes"
FILEPATH="/opt/xyz"
ZIPPATH="/home/test"
ZIPFILE="myzipfile_`date +%d.%m.%Y_%k.%M`.zip"
FILE1="file1"
FILE2="file2"
cd $FILEPATH
zip -q -P $PASSWORD $ZIPPATH/$ZIPFILE ./$FILE1 ./$FILE2
sendEmail -f $SENDER -s ${SMTPSERVER}:25 -xu $SMTPLOGIN -xp $SMTPPASS -t $RECIPIENT \
-o tls=$TLS -u $SUBJECT -m $BODY -a $ZIPPATH/$ZIPFILE -q
#rm $ZIPPATH/$ZIPFILE
Wenn es extrem lange dauert bis der SSH-Login-Prompt kommt Entweder in die sshd_config 'UseDNS no' eintragen oder sicherstellen, dass der Host auf den man sich einloggen möchte die IP des Hosts von wo man sich einloggt auflösen kann. Dateiinhalt ohne Kommentarzeilen ausgeben grep ^[^#] datei.txt Versteckte Dateien rekursiv finden und in einen einzigen Ordner kopieren
find . -type f -name ".*" -exec cp '{}' /tmp/XYZ \;
RPM-Kommandos Dateien eines RPM-Paketes auslesen. mount /dev/hdc /media rpm -qpl /media/suse/i586/pcre-devel-6.4-14.2.i586.rpm Alle installierten Pakete auflisten. rpm -qa Ein Paket installieren. rpm -ivh paket.rpm Ein Paket deinstalieren. rpm -e Paketname Ein Paket updaten. rpm -Uvh .rpm Alle public und private Keys mit gpg löschen. Das Skript löscht ALLE öffentlichen UND privaten Schlüssel automatisch, im Batch-Mode. Es ist keine Benutzer-Interaktion notwendig. Danach ist alles weg! #!/bin/bash echo "I will erase ALL public AND secret keys! Do you really want this? (y/N)" read confirm if [ "$confirm" != 'y' ] then exit fi for i in `gpg --list-public-keys | grep pub | sed 's/.*\///' | sed 's/ .*//' | sed '1d'` do gpg --batch --yes --delete-secret-and-public-key $i done echo "These commands will be executed now." echo "If the result is empty all secret and public keys have been deleted." echo "gpg --list-public-keys" echo "gpg --list-secret-keys" gpg --list-public-keys gpg --list-secret-keys Ein Beispiel zum Holen von Daten von einem entfernten Server auf das lokale System. Dabei wird ein Public Key verwendet und die Verzeichnisse /home/user1 /home/user2 des Servers in das lokale Verzeichnis /home/backup/webusers gesynct. Dateien und Ordner, die auf dem Server gelöscht wurden, werden beim syncen lokal ebenfalls gelöscht. Temporäre Dateien auf dem Server (Name endet mit einer Tilde) werden nicht gesynct und bleiben unbeachtet. rsync -agEv --delete-after -e "ssh -i /home/backup/.ssh/backup_rsa" --exclude="*~" \ root@myserver.com:'/home/user1 /home/user2' /home/backup/webusers Alle Apachemodule (auch die einkompilierten) auflisten. apache2ctl -M Gelöschte Dateien auf ext3 wiederherstellen. ext3grep, debugfs Wurden Dateien statt mit rm mit shred -uz file.txtgelöscht, kann man sie mit konventionellen Mitteln nicht mehr wiederherstellen. Die aktuelle Zeit als UNIX-Timestamp ausgeben. date +%s UDP-Port mit Bash-Skript prüfen. Erstmal direkt von der Shell: nmap -sU -p 161 192.168.1.33 Jetzt im Bash-Skript. Zu beachten ist, dass nmap nur als root aufrufbar ist und dass unter Umständen die Firewall auf dem Zielsystem angepasst werden muss, damit nmap ein richtiges Ergebnis liefert.
#!/bin/bash
OUT=`nmap -sU -p $2 $1 | sed -n '5p' | awk '{print $2}'`
if [ "$OUT" = "open" ]
then
echo "udpport:1"
elif [ "$OUT" = "open|filtered" ]
then
echo "udpport:1"
else
echo "udpport:0"
fi
Das ganze kann man dann wie folgt aufrufen: chown root ./testport.sh chmod u+x ./testport.sh ./testport.sh 192.168.1.33 161 Falls der Zielhost Pings blockt, mit -P0 die ping probes auslassen. Möchte man einen TCP-Port abfragen einfach -sU weglassen: nmap -p 80 192.168.1.33 In der xorg.conf die Bildschirmauflösung ändern. vi /etc/X11/xorg.conf Dort in der Screen-Section, die Sub-Section suchen, die der DefaultDepth entspricht und dort die Auflösung ändern. Hier im Beispiel ist die DefaultDepth 24 und somit muss die letzte Subsection geändert werden.
Section "Screen"
Identifier "Default Screen"
Device "ATI Technologies Inc RV350 [Mobility Radeon 9600 M10]"
Monitor "Generic Monitor"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1400x1050"
EndSubSection
SubSection "Display"
Depth 4
Modes "1400x1050"
EndSubSection
SubSection "Display"
Depth 8
Modes "1400x1050"
EndSubSection
SubSection "Display"
Depth 15
Modes "1400x1050"
EndSubSection
SubSection "Display"
Depth 16
Modes "1400x1050"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection
Dann einfach mit Strg-Alt-Backspace den X-Server neustarten. Bei Kopete in openSUSE die History aktivieren: Kopete starten, dann im Hauptfenster in das Menü "Einstellungen" gehen, dann "Einrichten" auswählen, links auf "Module" klicken und das Modul "Verlauf" konfigurieren und aktivieren. Die eigentlichen History-Dateien liegen in ~/.kde4/share/apps/kopete/logs/ICQProtocol/[MYICQNR]/* Mit dd eine 100MB-Datei am Cache(RAM) vorbei direkt auf die Platte (bzw. den Platten-Cache) schreiben. Dies kann man z.b. verwenden, um die IO-Performance einer Festplatte oder eines Plattensystems wie RAID zu messen. dd if=/dev/zero of=/home/test/filexyz bs=10M count=10 oflag=direct Die Systemauslastung anschauen, hinsichtlich CPU, Disk-IO und Speicher. Die Disk-IO erscheint im Bereich -----io----, bi bedeutet Blocks gelesen, bo bedeutet Blocks geschrieben. top vmstat 1 watch 'free -m' Detaillierte Informationen zu den letzten eingeloggten Benutzern. last -aFx grep "sshd" /var/log/messages Den Dateisystem-Puffer flushen. Mit anderen Worten alles was noch auf die Platte geschrieben werden soll wirklich physikalisch schreiben. sync Einen ext2/ext3-Dateisystemcheck ausführen und zusätzlich mit Hilfe eines zerstörungsfreien Schreib/Lese-Tests defekte Blöcke aussondern, sodass sie nicht mehr verwendet werden. Das Kommando dauert leider sehr lange (Tage). e2fsck -ccfv /dev/sdaX Falls man in dmesg die unten aufgeführten Fehler findet, kann man die Benutzung der Memory Type Range Registers (MTRR) deaktivieren. Die MTRRs betreffen normalerweise nur grafische Umgebungen wo man hohe Performance benötigt, wie X und 3D zum Beispiel. mtrr: type mismatch for c8000000,1000000 old: write-back new: write-combining mtrr: no MTRR for c8000000,1000000 foundEs gibt mehrere Wege sie abzuschalten: 1. in grub "video=nomtrr" zur Kernel-Zeile hinzufügen 2. in /etc/X11/xorg.conf die Zeile "Option "NoMTRR" zur screen section hinzufügen.: Section "Screen" ... Option "NoMTRR" EndSection3. oder einfach den default runlevel auf 3 setzen sofern man keine Desktopumgebung benötigt, dann init 3 ausführen. Den Rückgabewert des letzten Shell-Kommandos/Programms abfragen. Ein Beispiel mit Hilfe eines Skriptes. Das Skript erstellen: vi test.sh #!/bin/bash exit 9Ausführbar machen: chmod +x ./test.shAusführen: ./test.shRückgabewert abfragen: echo $? 9 Emails aus dem lokalen Postfach über die Shell lesen ("You have new mail in /var/mail/..."). mailx Puppet auf SLES 10 installieren. (Ruby ist im SLES-SDK-Paket enthalten) wget http://demeter.uni-regensburg.de/SLES10-SDK-x86/suse/i586/ruby-1.8.4-17.2.i586.rpm rpm -i ruby-1.8.4-17.2.i586.rpm wget http://download.opensuse.org/repositories/system:/management/SLE_10/i586/facter-1.5.4-1.1.i586.rpm rpm -i facter-1.5.4-1.1.i586.rpm wget http://download.opensuse.org/repositories/system:/management/SLE_10/i586/puppet-0.24.8-1.1.i586.rpm rpm -i puppet-0.24.8-1.1.i586.rpm wget http://download.opensuse.org/repositories/system:/management/SLE_10/i586/puppet-server-0.24.8-1.1.i586.rpm rpm -i puppet-server-0.24.8-1.1.i586.rpm Ansonsten alles wie in der offiziellen openSUSE-Anleitung. Wenn die Verbindung zum Puppet-Master nicht hergestellt werden kann, als erstes nach den Firewalls schauen und sicherstellen, dass der Hostname "puppet" auf dem client in die IP des Puppet-Masters aufgelöst werden kann. Löschen der Bash-History history -c Gute Serverüberwachungstools, die trotzdem nur einen geringen Administrationsaufwand haben, bzw. wozu relativ wenig Know-How erforderlich ist: Mit Logwatch kann man sich z.B. täglich eine Statusemail senden lassen, die einen Überblick über viele Bereiche des Systems bietet: Welche URLs mit Fehler 404 aufgerufen wurden, wer zuletzt mit SSH eingeloggt war, verfügbarer Plattenplatz, Zustand der Netzwerkinterfaces, usw. logwatch Mit Rootkit Hunter wird nicht nur auf Rootkits geprüft, sondern viel mehr, wie z.B. verdächtige Dateien und Dateiattribute, Netzwerkinterfaces im Promiscuous-Mode, SSH-Konfiguration, usw. Rootkit Hunter Syntaxprüfung der Konfigurationsdatei von Samba. testparm /etc/smb.conf Eine Textdatei mit einem bestimmten Encoding öffnen. kwrite --encoding iso-8859-1 testiso.txt & kwrite --encoding utf-8 testutf8.txt &kwrite bietet auch beim Speichern die Auswahl zwischen einer Vielzahl von Kodierungen an. Um in der MySQL-Shell Daten anzusehen oder zu bearbeiten muss man mysql mit dem Zeichensatz aufrufen, mit dem die Tabelle(n), die man bearbeiten möchte angelegt wurden. Welcher das ist erfährt man durch das Kommando "show create table Tabellenname". # mysql -uroot -p --default-character-set=UTF8 # mysql -uroot -p --default-character-set=latin1 MySQL-Replikation einrichtenEinen Benutzer auf dem Replikationsmaster anlegen, der dann vom Replikationsslave benutzt wird.master: mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'passwordxyz'; Die aktuelle Bin-Logdatei und die aktuelle Position des Masters anzeigen. master: mysql> FLUSH TABLES WITH READ LOCK; master: mysql> SHOW MASTER STATUS; (Diese MySQL-Session offenlassen bis zum UNLOCK TABLES, siehe weiter unten, sonst verliert man das Lock!) Ein aktuelles Dump der Datenbank(en) erstellen. # mysqldump -uroot -p --lock-all-tables databasename > ./dump.db oder # mysqldump -uroot -p --lock-all-tables --all-databases > ./dump.db master: mysql> UNLOCK TABLES; Dem Slave die notwendigen Daten mitgeben, damit er sich mit dem Master zum Replizieren verbinden kann, genauen Dateinamen und die Position beachten (entsprechend show master status).
slave: mysql> CHANGE MASTER TO MASTER_HOST='hostnameofmaster', MASTER_USER='repl',
-> MASTER_PASSWORD='passwordxyz', MASTER_LOG_FILE='mysql-bin.000074', MASTER_LOG_POS=14238;
slave: mysql> START SLAVE;
slave: mysql> SHOW SLAVE STATUS \G
Entscheidend ist dass folgende Parameter auf Yes stehen:Slave_IO_Running: Yes Slave_SQL_Running: Yes Die Datenbank(en) müssen auf dem Slave angelegt sein bevor man dort das Dump importiert: slave: mysql> CREATE DATABASE databasename; # mysql -uroot -p databasename < ./dbdump.db oder # mysql -uroot -p < ./dbdump.db |