Command Line - CLT - Befehlszeile

Synchronisieren, Backup, Upload, Download

RSYNC

rsync ist das "schweizer Armeemesser" für Backups, synchornisieren und archivieren der Daten. Es ist je nach Verwendung auch schneller als scp im Datentransfer.

Beispiele

Synchronisieren über anderen SSH Port entfernter Server mit lokalem Verzeichnis - beachte: einfache Anführungszeichen

rsync -xaEv -z --progress  -e 'ssh -p 8081' user@host:/quelle/ /ziel/

Synchronisieren lokales Verzeichnis mit entfernten Server über SSH - Dateien im Ziel löschen, die nicht in der Quelle sind.

rsync -xav -z --progress  --delete --exclude=.DS_Store /quelle/ -e ssh user@host:/ziel/

Synchronisieren  ohne löschen im Ziel von 2 lokalen Verzeichnissen

rsync -avc --progress /quelle/* /ziel/

Synchronisieren mit löschen im Ziel von 2 lokalen Verzeichnisse - Beachten Quelle ohne * Parameter

rsync -avc --progress -delete /quelle/ /ziel

Synchronisieren ohne Verzeichnisse wie cache, session, log, tmp usw. als mehrzeiliges Kommando

rsync -avcz --progress --delete \
--exclude 'cache' \
--exclude 'session' \
--exclude 'log' \
--exclude 'report' \
--exclude 'tmp' \
--exclude 'locks' \
-e 'ssh -p 8081' user@host:/quelle/ /ziel/

rsync wichtige Optionen

-a preserver timestamp, permissions, owner, group, symbolic link
-c, --checksum skip based on checksum, not mod-time & size
-v verbose
-z compression
-E Extended Attributes (wichtig bei Mac Dateien)
-x don't cross file boundaries
-n simulation (wichtig)
-r recursive

-delete nur möglich wenn gesamtes Verzeichnis gesendet wird (z. B. "dir" oder "dir/") ohne dem Sternchen Parameter.

Rsync 3 für Mac OS installieren über Homebrew

# Testen der aktuelle installierten Version
rsync —version
# Sofern nicht > 3.0 fahren wir weiter fort.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install rsync
Bash Profile anpassen da im eigenen Verzeichnis
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bash_profile
# Infos
# http://www.tech-recipes.com/rx/2621/os_x_change_path_environment_variable/
# http://blog.taylormcgann.com/2012/06/13/customize-your-shell-command-pro...

SCP

Über eine sichere Verbindung Dateien mit einem Server austauschen. Sollte gerade kein FTP Programm zu Hand sein, kann mit SCP zügig Dateien ausgetauscht werden.

scp -rpv user@host:/quelle/ /ziel/
scp -rpEv user@host:/quelle/ /ziel/

DIFF

Mit diff wird nicht gerade synchronisiert - hilft haber Unterschiede der Dateiinhalte fest zu stellen. Änderungen am Code können so schnell erkannt werden

diff -q /quelle/ /ziel/

diff command mehrere Zeilen mit Auschluß

diff -rq -w \
   --exclude=*verzeichnis1“ \
   --exclude="*report" \
   /quelle1/ /quelle2/

Mehrzeilig mit Ausschluß bestimmer Verzeichnisse die keine Relevanz haben.

diff -rq -w \
--exclude="*cache" \
--exclude="*tmp" \
--exclude="*report" \
/quelle/ /ziel/

Finden

Linux > Dot Dateien (.DS_Store) von Mac OS X löschen

find /home/www/ -name .DS_Store -exec /bin/rm -f {} \; -print

Mac OS X > Dot Dateien (.DS_Store)

dot_clean -n

Findet alle Dateien mit Schreibrechte für Alle und legt eine Datei an im Verzeichnis vom aktuellen Benutuzer

find /Directory/ -type f -perm -02 -ls > ~/protokoll.txt

Alle Dateien aus dem Verzeichnis mit all rwx in rx

find ./ -perm -05 -exec chmod 775 {} \;

Findet einen Dateinamen am gesamtem Sytem ohne externe Volumes.

sudo find / -name php.ini

Findet Benutzer root und ändere Eigentümer und Gruppe in web-user

find /verzeichnis/ -user root -exec chown web-user:web-user {} \;

Ändere alle Dateien im Verzeichnis mit rwx zu rx

find /verzeichnis/ -perm -05 -exec chmod 775 {} \;

Findet alle Dateien mit Schreibrechte für Alle

find /root/ -type f -perm -02 -ls > /file-perms-write.log

Listet die 10 größten Dateien, nach Größe sortiert

ls -al | sort -r -k 5 | head -10

Entwicklungsumgebung Mac OS X

Paketmanager Homebrew ab 10.8

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

XCode installieren

xcode-select --install

Apache Server - lokalen virtuellen Host mit Domain einrichten. Besser als Aufruf über 127.0.0.1

sudo nano /private/etc/apache2/httpd.conf
# Alternativ sudo nano /etc/apache2/extra/httpd-vhosts.conf

Nachfolgende Stellen in der .conf Datei auskommentieren oder anpassen.

# lokaler Host mit lokaler domain

ServerName local.mydomain.de
DocumentRoot /Library/WebServer/public

AllowOverride All


# module aktivieren
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php7_module libexec/apache2/libphp7.so
sudo apachectl graceful

Hostfile erweitern

sudo nano /etc/hosts
# lokale domain routen auf lokale ip 
127.0.0.1 local.mydomain.de

Mac OS neu starten oder DNS Cache leeren

dscacheutil -flushcache

MySQL Deamon installieren auf Mac hier lesen

cd /usr/local/src
curl --remote-name --location https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.12.tar.gz

Shell Script für Mac OS X - XServe Interface ändern. IP's und Domain müssen angepasst werden.

#!/bin/bash

defaultInterface="en0"
defaultServicenamePrefix="Eth_"
defaultGateway="192.198.0.1"
defaultMask="255.255.255.240"
defaultDNS1="1.1.1.1"
defaultDNS2="1.1.1.2"
defaultDNS3="1.1.1.3"
defaultDomain="meinedomain.de"

interfaceNum=1
for ipAddr in 192.198.0.2 192.198.0.3
do
	serviceName="$defaultServicenamePrefix$interfaceNum"
	echo "$serviceName: $ipAddr"

	networksetup -createnetworkservice "$serviceName" $defaultInterface
	networksetup -setmanual "$serviceName" $ipAddr $defaultMask $defaultGateway
	networksetup -setdnsservers "$serviceName" $defaultDNS1 $defaultDNS2 $defaultDNS3
	networksetup -setsearchdomains "$serviceName" $defaultDomain
	
	echo "... done."
	echo

	(( interfaceNum+=1 ))
done

MySQL

Shell Skripte und Commands

Export - dump aller Datenbank

#!/bin/bash

# 1. Liste aller Datenbanken

mysql -u 'user' -p 'password' -A --skip-column-names -e "SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql')" > ~/ListOfDatabases.txt

# 2. Export aller Datenbanken

for DB in `cat ~/ListOfDatabases.txt`
do
	echo "mysqldump ${DB}"
    	mysqldump -u 'password' -p 'password' --hex-blob --routines --triggers ${DB} | gzip > /verzeichnis/${DB}.sql.gz &
done
wait

Mac OS X > MySQL Installation, Verzeichnisse finden (Beachte: Systeme wie Alfresco, die einen eigenen Mysql Deamon und Verzeichnis installieren)

MySQL Deamon starten

#Debian 7
/etc/init.d/mysql start
#Mac OS X
sudo mysqld_safe
# Alternative
BINDIR/mysqladmin -u root shutdown
BINDIR//mysqladmin -u root start

MySQL dump ohne bestimmte tabellen

mysqldump -u 'root' -p [db_name] --ignore-table=db.log | gzip > ~/[db-name].sql.gz

>MySQL Dump in DB Server neu importieren

gunzip -c ~/db.sql.gz | mysql -u 'root' -p db

Drupal

Kommands für Drupal 7 oder Drupal 8. Immer testen auf Dev Umgebung

# MySQL Drupal 7 ändern der Benutzer ID von nodes
UPDATE node SET uid=7 WHERE uid=1;
UPDATE node_revisions SET uid=7 WHERE uid=1;

Drupal 7 - url alias ändern in MySQL Tabelle

DELETE QUICK FROM url_alias 
 WHERE dst LIKE ".html_%" 
AND (language="de" OR language="en")

Text ersetzen im Body Feld Tabelle node_revisions

UPDATE `node_revisions` SET `body` = REPLACE(`body`, "Testmann", "Mustermann");

Datei Pfade in Tabelle filepath ändern und im Body Feld

UPDATE `files` SET `filepath` = REPLACE(`filepath`, "sites/vorher.de/files/", "sites/nacher.de/files/");
UPDATE `node_revisions` SET `body` = REPLACE(`body`, "sites/vorher.de/files/", "sites/nachher.de/files/");

OpenSSL, SSL, TLS

Debug SSL Zertifikat

openssl s_client -connect www.kliggs.de:443 -state -debug

Verbinden über lokalen Proxy Port

ssh -o ProxyCommand='nc -x 127.0.0.1:9150 %h %p' user@host