Archiv ‘Linux’

Sonntag, 3. November 2013

(Aus dem Archiv) chmod only files/directories

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

Sometimes I’m running amok with

chmod -R 644 .

without thinking it thouroughly. So folders get lost of their execute-flag, and nobody can enter them anymore. Well, here’s the solution:

find . -type d -exec chmod u+x '{}' ';'

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Extract single file from a tar.gz-Backup

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

Recently, I accidentally deleted a vital file on my linux server. Thanks to my regular backups by mkcdrec I just needed to have a look for the backup CD. After googling a few minutes, I came out with the appropriate shell command to extract the desired file out of a gzipped tar-archive:

tar -xzv --file=/Volumes/CDrec-29.07.2005/sdb1._var.tar.gz ./www/partyguide/curl/config.txt

This command recreated the directory structure in the current working dir (make sure you’re not cd-ed into the CD mount point, otherwise it can’t write out).

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Download page with all linked files

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

When the end of the semester gets close, I usually get into a rush and try to download all online material of the lectures. Being tired of clicking through thousands of pages, I remembered wget. A very useful tool, not just to download … err … thumbs and their linked close-ups ;-)

The following command will do the trick:

wget -r -np -nd <url>

You end up having all links recursively downloaded -r, but tell wget not the step up a level -np, and finally, we don’t want to have put the files in nested directories -nd. That’s it, alreay, straight and steady.

To just download files of special type, I recommend adding the following switch:

wget -r -np -nd -A *.pdf <url>

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Batch rename directories

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

With this little script, you can batch rename directories in current folder AND subfolders

#!/bin/sh

SEARCH="set"
REPLACE="s"

for ITEMOLD in `find . -type d`
do
	echo "Processing '$ITEMOLD'"
	ITEMNEW=`echo $ITEMOLD | sed "s/$SEARCH/$REPLACE/g"`
	#echo "After search/replace: '$ITEMNEW'"
	
	if [ $ITEMOLD != $ITEMNEW ]
	then
	
		if [ ! -d "$ITEMNEW" ]
		then
			echo "Attempting to rename '$ITEMOLD' to '$ITEMNEW'"
			mv "$ITEMOLD" "$ITEMNEW"
			
			if [ ! -d "$ITEMNEW" ]
			then
				echo "[-] Renaming seems to have failed - '$ITEMNEW' doesn't exist"
				exit 1
			else	
				echo "[+] Success"
			fi
		else
			echo "[-] '$ITEMNEW' already exists"
		fi
	
	else
		echo "[i] '$ITEMOLD' does not match expression, skipping"
	fi
	
	echo ""
done

exit 0

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Find files greater than x Bytes

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

In my special case, I used the following command to separate thumbnails (expected smaller than 10KB) and closeups (expected to be greater than 10KB) in a web-dump.

find . -type f -name "*.jpg" -size +10240c -exec mv '{}' ~/newdir/ ';'

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Remove file types except those which contain ‚foobar‘

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

My linux servers hosts my complete electronic Music Library, sharing it using daapd. All downloads come with a mess of additional files like covers, cue-sheets, nfo-files etc. Usually, I’m too lazy to get rid of’em directly after the download. As time passed by, everything got messed up with every new album I’ve leeched. Instead of going through every directory – and there are many of them – I used another fine find-command to remove anything not an mp3-file within my MP3-Folder:

find . -type f \! -name "*.mp3" -exec rm '{}' ';'

Tags: , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Freitag, 25. Oktober 2013

Graustufenbilder mit ImageMagick in Schwarz-Weiss-Bilder umwandeln

Kürzlich hat Stephanie ihre Cumulus-Karte verlegt. Damit sie weiterhin bei jedem Einkauf eifrig Punkte sammeln kann, habe ich ihr meinen Barcode als Bild eingescannt und wollte diesen ausdrucken, um ihn auf die Rückseite der Supercard (Frevel!) aufzukleben.

Damit der Barcode-Leser der Kasse den Scan auch möglichst einwandfrei lesen kann, wollte ich den Scan aber von Farbe resp. Graustufen in ein monochromes Bild umwandeln. Mittels ImageMagicks convert geht das ganz simpel:

$ convert "Cumulus Barcode.png" -colorspace gray -auto-level -threshold 50% "Cumulus Barcode bw.png"

Indem man mit den Prozentwerten bei -threshold spielt, kann man den Schwellenwert hinunter oder heraufsetzen, basierend auf dem ein Pixel als schwarz oder weiss markiert wird. Ein Wert von 75% resultiert in mehr schwarzen Pixeln, ein Wert von 25% in mehr weissen Pixeln.

Tags: , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 8. Oktober 2013

Unter Linux eine aktive screen-Session übernehmen

Ab und zu kommt es vor, dass sich mein alter Mac mini in den Ruhemodus versetzt, während ich noch per SSH mit einer screen-Session verbunden bin. Mit folgendem Befehl kann ich die Session nach einem neuen Login mit SSH übernehmen:

$ screen -d -r

-d bedeutet „detach“, -r bedeutet „resume“.

Tags: ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. September 2013

Den Raspberry Pi mit rsync über SSH auf die Synology DiskStation sichern

Als Gedankenstütze nachfolgend einige Lösungen für Probleme, die sich mir in den Weg stellten:

Mac OS X

$ ssh-keygen -t rsa -b 2048 -f id_rsa_dashboard_vault

Die Aufforderung, ein Passwort für den Private Key zu generieren, bestätigt man mit ENTER — der Private Key wird so nicht zusätzlich mit einem Passwort geschützt, weil dies den automatisierten Login von Raspberry Pi auf die DiskStation verhindern würde.

Der Befehl erstellt zwei Dateien:

  • id_rsa_dashboard_vault
  • id_rsa_dashboard_vault.pub

Synology DiskStation

Als erstes richtet man sich über die Web-Oberfläche einen normalen Benutzer dashboard ein, in dessen Home-Verzeichnis die Backup-Daten geschrieben werden.

Hierzu müssen dem Benutzer Schreibrechte auf /homes gegeben werden. Ansonsten sieht man sich beim Starten des Backup-Scripts (s. unten) mit folgender Fehlermeldung gegenüber:

ERROR: module is read only

Quelle: Rsync over ssh: “ERROR: module is read only” suddenly appeared

Wichtig ist weiter, dass der SSH-Zugang über die Web-Oberfläche aktiviert wurde.

/etc/passwd

Dem neu erstellten Benutzer müssen wir nun eine gültige Login-Shell zuweisen:

...
dashboard:x:1029:100::/var/services/homes/dashboard:/bin/ash

Erfasst man hier ein nicht existierendes Login-Shell, kriegt man beim Debugging des publickey SSH-Logins folgende komische Infos ans Gesicht geworfen:

...
Authentication succeeded
...
Permission denied
...

Um sicher zu gehen, dass die Login-Shell richtig konfiguriert ist, macht man als auf der DiskStation eingeloggter User root folgendes:

# su dashboard

Wechselt man in ein neues Shell, ist /etc/passwd korrekt konfiguriert.

/var/services/homes/dashboard/.ssh/authorized_keys

In dieser Datei legen wir den Public Key ab (id_rsa_dashboard_vault.pub).

/etc/ssh/sshd_config

Wahrscheinlich müsste man hier gar nichts anpassen, beim Debugging habe ich es dann doch getan (wohl unnötigerweise):

$ cat sshd_config | grep -v "^#" | sort
AllowTcpForwarding no
AuthorizedKeysFile	.ssh/authorized_keys
ChallengeResponseAuthentication no
ChrootDirectory none
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_rsa_key
LogLevel INFO
Match User root
    AllowTcpForwarding yes
Protocol 2
PubkeyAuthentication yes
Subsystem       sftp    internal-sftp -f DAEMON -u 000
SyslogFacility AUTH
UseDNS no
UsePAM yes

Raspberry Pi

/root/.ssh/config

Host vault
   Hostname 10.0.44.44
   User dashboard
   IdentityFile ~/.ssh/id_rsa_dashboard_vault

In der Datei ~/.ssh/id_rsa_dashboard_vault legt man den Private Key ab.

Login überprüfen

Dies sollte nun ohne Eingabe eines Passwortes möglich sein:

$ ssh vault

Bei einer Fehlermeldung helfen die Optionen -v, -vv und -vvv weiter:

$ ssh -v vault

/usr/local/bin/backup.sh

Folgendes Script sichert / (root) des Raspberry Pis auf den Host vault in den Pfad /volume1/homes/dashboard/backups/. Auf dem Raspberry Pi nicht mehr vorhandene Dateien werden auf der DiskStation gelöscht.

#!/bin/sh

RSYNC=`which rsync`

if [ ! -e "$RSYNC" ]
then
	echo "rsync binary not found: '$RSYNC'"
	exit 1
fi

TODAY=`date +"%F_%T"`
SNAPSHOTFILE="/var/log/rsync/$TODAY.snapshot.txt"
#touch "$SNAPSHOTFILE"
echo "$TODAY" > "$SNAPSHOTFILE"

if [ ! -f "$SNAPSHOTFILE" ]
then
	echo "Could not create snapshotfile '$SNAPSHOTFILE'"
else
	echo "Snapshotfile created at:"
	ls -l "$SNAPSHOTFILE"
fi

LOGFILE="/var/log/rsync/$TODAY.log.txt"
EXCLUDEFILE="/usr/local/bin/backup-exclude.txt"

SOURCE="/"
DEST="vault:/volume1/homes/dashboard/backups/"

echo "Running rsync ..."
$RSYNC -avz --log-file="$LOGFILE" --exclude-from="$EXCLUDEFILE" --delete -e ssh "$SOURCE" "$DEST" 
echo "Backup complete."

exit 0

/usr/local/bin/backup-exclude.txt

proc/*
sys/*
dev/*
tmp/*
run/*
mnt/*

Quelle: Can a Raspberry Pi be used to create a backup of itself?

/etc/crontab

...
4 0 * * *	root	/usr/local/bin/backup.sh

Hiermit wird das Backup-Script täglich um 4 Uhr morgens ausgeführt.

Links

Tags: , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Freitag, 16. August 2013

MySQL-Passwörter nicht in cron-Job Kommandozeilen hinterlegen

Seit längerem habe ich mich gestört, dass in den von cron versendeten E-Mails mit dem Status des Datenbank Backup-Scripts der Benutzername und das Passwort des verwendeten Datenbankbenutzers im Klartext stehen.

Dank einer Frage auf Superuser.com konnte ich diese „Unschönheit“ beheben.

Im Home-Verzeichnis meines Hosting-Benutzers habe ich eine Datei namens .my.cnf angelegt. Deren Inhalt:

[client]
user=username
password=password

username und password müssen selbstverständlich mit gültigen Zugangsdaten ersetzt werden.

Ganz wichtig: Die Datei ist mittels folgendem Befehl nur für den Owner lesbar zu machen:

$ chmod 600 ~/.my.cnf

Anschliessend habe ich mein Backup-Script umgebaut. Dort steht nun neu:

...
OPTS=""
OPTS="$OPTS --defaults-file=/home/sitename/.my.cnf"

echo ""
echo "Running $MYSQLDUMP $OPTS $DATABASE > $DUMPFILE"

$MYSQLDUMP $OPTS $DATABASE > $DUMPFILE

Der Vorteil dieser Lösung: Selbst wenn der Sysadmin des Servers mittels ps ax alle auf dem Web-Server laufenden Prozesse (und so je nach Zeitpunkt auch meinen cron-Job) angezeigt erhält, steht auch dort nichts von einem Passwort oder gar Benutzernamen.

Tags: , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen