Bash Scripting: Fallen
Mai 16, 2017 — 13:46

Hier kommen Fallen hin, über welche ich beim Scripten mit bash gestolpert bin:

find und xargs
Ich wollte aus einem Pfad mit vielen Unterordnern alle Dateien löschen, aber die Unterordner behalten.
Getestet wurde mit „ls -l“ anstatt einem „rm“, da ich nichts falsches löschen wollte.

Heraus kam folgender Befehl:

find /hier/ein/Pfad/ -type f | xargs ls -l

Dies funktioniere solange sich Dateien in dem Verzeichnis oder einem Unterverzeichnis befanden.
Ohne Dateien wurde das Home-Verzeichnis des Nutzers aufgelistet. „rm“ hätte sich über einen fehlenden Parameter beschwert.
„find“ liefert in diesem Falle kein Ergebnis an „xargs“, so dass „ls“ bzw. „rm“ ohne Parameter ausgeführt wird.

Ich habe mir anders beholfen:

find /hier/ein/Pfad/ -type f -exec /bin/ls -l {} \;
Routingprobleme Fortinet SSLVPN unter Centos RHEL Fedora 64bit
Dezember 19, 2014 — 11:46

In der 64bit-Version von Fedora und RHEL bzw. Centos hat der Fortinet SSLVPN-Client Probleme die Routen nach der Verbindung einzutragen. Es kommt eine Verbindung zustande, aber man kann mangels Routen nicht auf die Services/Server zugreifen.

Abhilfe schafft eine kleine Änderung in einem Script:

Im Unterordner „helper“ des Fortinet-Client findet sich eine Datei namens „sysconfig.linux.sh“. Hier suchen Wir nach folgender Zeile:

addr=`ifconfig $ifn |grep "inet"|awk ' {print $2 }'| awk -F : '{ print $2}'`

Wie entfernen den letzten awk-Befehl inklusive der Pipe. Das Ergebnis sollte wie folgt aussehen:

addr=`ifconfig $ifn |grep "inet"|awk ' {print $2 }'`

Man sollte darauf Achten das letzte Zeichen nicht zu löschen.

Bei der nächsten Einwahl werden die Routen gesetzt.

 

Bash: Mehrere Dateien umbenennen
Mai 2, 2014 — 10:45

Manchmal bekomme ich aus der Windows-Welt Dateien mit folgendem Schema: „abc.jpg.jpg, def.jpg.jpg“. Ursache dürfte das imo unsinnige Feature sein Extensions zu verstecken in Verbindung mit Benutzern/Programmen, welche damit nicht klar kommen.

Die Dateien lassen sich zum Glück recht fix umbenennen:


for file in *.jpg.jpg; do mv "$file" "${file/.jpg/}"; done

Centos 6: Fehlende Apachemodule aus den Sourcen erstellen
November 26, 2013 — 16:40

Beim Umzug eines Webservers von SLES 11 auf CentOS 6 stellte sich heraus, das ein selten verwendetes Apache-Modul nicht in den Repositorys zur Verfügung stand. Das Modul Imagemap wurde aber leider für den Webauftritt benötigt. Es muss also selber kompiliert werden.

Benötigt werden dafür die Pakete gcc und httpd-devel:


yum -y install gcc httpd-devel

Hier finden sich die Sourcen für Module des mitgelieferten Apache Webservers in der Version 2.2.x:

http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/modules/

Nachdem das entsprechende Modul gefunden ist holen wir uns dieses auf den Webserver und kompilieren den Code:

curl 'http://svn.apache.org/viewvc/httpd/httpd/branches/2.2.x/modules/mappers/mod_imagemap.c?view=co' > mod_imagemap.c
apxs -cia mod_imagemap.c

Das Modul wird automatisch in die Konfiguration eingetragen. Mittels apachectl lässt sich ermitteln ob das Modul zur Verfügung steht:

apachectl -t -D DUMP_MODULES

Je nach Modul muss die Konfiguration des Webservers um einige Parameter ergänzt werden. Hier hilft die Doku zu dem Modul weiter.

MySQL: Anzahl der Datensätze für alle Tabellen einer Datenbank
November 20, 2013 — 14:04

Heute wollte man von mir wissen wie viele Datensätze in den Tabellen einer Datenbank sind.

Eine Möglichkeit ist es jede Tabelle einzeln mit Count abzufragen:


SELECT COUNT(*) FROM <table>;

Bei einer Datenbank mit vielen Tabellen ist dies eine Fleißarbeit, welche viel Zeit in Anspruch nimmt. Schneller, einfacher und übersichtlicher geht es wie folgt:

SELECT table_name, table_rows
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = '<database>';
MySQL: Kleines User-1×1
Oktober 23, 2013 — 14:31

Anlegen

Anlegen eines neuen Benutzers

CREATE USER 'mustermann'@'localhost' IDENTIFIED BY 'Password';

Rechte

Gebe dem Benutzer alle Rechte an einer Datenbank (inkl. Grant-Option)

GRANT ALL PRIVILEGES ON database.* TO 'mustermann'@'localhost' WITH GRANT OPTION;

Es können auch nur einzelne Rechte vergeben werden. Siehe hierzu die Referenz: http://dev.mysql.com/doc/refman/5.5/en/grant.html

Passwort ändern

UPDATE mysql.user SET Password=PASSWORD('new-password-here') WHERE User='user-name-here' AND Host='host-name-here';

oder

SET PASSWORD FOR 'user-name-here'@'hostname-name-here' = PASSWORD('new-password-here');

Löschen

DROP USER 'mustermann'@'localhost';
CentOS: Fehlendes updatedb / locate
Oktober 22, 2013 — 11:01

CentOS installiert bei einer Minimalinstallation kein locate/updatedb. Ohne lässt sich auf der Festplatte leider nicht schnell nach Dateien suchen. Ein yum provide locate bzw. yum provide updatedb  führt leider nicht zum Ziel.

Abhilfe schafft folgendes:

$ yum install mlocate
$ /etc/cron.daily/mlocate.cron

Der erste Befehl sorgt für die Installation und der zweite für die erste Indexierung der Festplatte. Die erste Indexierung kann ein paar Minuten dauern. Der Index wird täglich aktualisiert. Anschließend sollte der schnellen Suche nach Dateinamen nichts im Wege stehen.

$ locate hosts
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/selinux/targeted/modules/active/modules/denyhosts.pp
/lib64/security/pam_rhosts.so
/usr/share/ghostscript
/usr/share/doc/pam-1.1.1/html/sag-pam_rhosts.html
/usr/share/doc/pam-1.1.1/txts/README.pam_rhosts
/usr/share/ghostscript/conf.d
/usr/share/man/man5/hosts.allow.5.gz
/usr/share/man/man5/hosts.deny.5.gz
/usr/share/man/man5/hosts_access.5.gz
/usr/share/man/man5/hosts_options.5.gz
/usr/share/man/man8/denyhosts_selinux.8.gz
/usr/share/man/man8/pam_rhosts.8.gz
/usr/share/selinux/devel/include/services/denyhosts.if
/usr/share/selinux/targeted/denyhosts.pp.bz2
/usr/share/vim/vim72/ftplugin/denyhosts.vim
/usr/share/vim/vim72/ftplugin/hostsaccess.vim
/usr/share/vim/vim72/syntax/denyhosts.vim
/var/cache/yum/timedhosts.txt
/var/cache/yum/x86_64/6/timedhosts.txt
Bash-Scripting: Mysql-Dumpscript mit Rotation der Sicherungen
Oktober 22, 2013 — 10:00

Backup…

Ein Script um ein Dump einer MySQL-Datenbank zu ziehen und komprimiert als bz2-Datei zu speichern. Eine einfache Backuprotation wurde mit eingefügt, so dass die letzten X-Versionen in den Ordnern 1-X vorgehalten werden.

#!/bin/bash
# This Backup-Script creates a dump from the entire mysql-Database
# and safes it in the backup-directory.
# Some Backup-Rotation included.
BACKUP_ROOT="/mnt/backup/mysql"
DB_USER="root" #DB-root
DB_PASSWD="Password" #DB-root-pw
ROTATIONS="7" #Number

echo ""
echo "MySQL-Backup"
echo "----------------------------------------"
echo "Rotating Backups..."
echo "This may take some time..."
# Delete eldest Backup
rm -rf $BACKUP_ROOT/$ROTATIONS
# create directories if needed
COUNT=1

for ((i=1; $i<=$ROTATIONS; i++))
do
  if [ ! -d ${BACKUP_ROOT}/${COUNT} ]; then
    mkdir -p $BACKUP_ROOT/$COUNT
  fi
  COUNT=$(($COUNT+1))
done

# rotating the backups
COUNT=0

for ((i=1; $i<$(($ROTATIONS)); i++))
do
  mv $BACKUP_ROOT/$(($ROTATIONS-$COUNT-1)) $BACKUP_ROOT/$(($ROTATIONS-$COUNT))
  COUNT=$(($COUNT+1))
done
mkdir $BACKUP_ROOT/1
echo ""
echo "Creating new backup from Database... "
echo "This may take some time..."
mysqldump --user=$DB_USER --password=$DB_PASSWD --all-databases | bzip2 > $BACKUP_ROOT/1/mysql-`date +%Y-%m-%d`.bz2
echo "----------------------------------------"
echo ""
echo "done"
exit 0

…und Restore

Der Dump kann über eine Pipe entpackt und  zurückgesichert werden.

bunzip2 < mysql-2013-10-25.bz2 | mysql -uroot -p