jives
And the science gets done
|
|
Lukas
Here to stay
|
|
Lukas
Here to stay
|
absbuildDieser kleine helfer ermoeglicht eine rasche paketerstellung (und installation) von PKGBUILDs für Archlinux aus dem ABS baum. Man übergibt dem script den pfad zum abs baum, einen temporaeren speicherort für die .pkg.tar.gz dateien und zu einer Datei, die alle zu bauenden paketnamen beinhaltet. Das script baut diese und bei bedarf werden sie gleich alle mit pacman installiert. Für die Datei, in der die Paketnamen enthalten sind gibt es eine "syntax". In der ersten Zeile muss der name eines repos stehen, welches ist egal, allerdings muessen alle darauf folgenden zeilen paketnamen enthalten, die in diesem repo zu finden sind. Sobald man ein neues repo angibt werden die danach folgenden paketnamen in diesem repo gesucht. Siehe anhang base.pkgs. Wenn man ein paket nicht bauen will es aber nicht aus der liste loeschen will, schreibt man einfach ein "!" vor den paketnamen. Die angehaengte baut ein (fast) komplettes arch base system (mit devel paketen). Einer der Beweggruende fuer dieses skript war, dass ich mein basis system mit gewissen g++ flags bauen wollte um optimierungen fuer meinen Athlon64(X2) "freizuschalten" e: command usage: ./absbuild.sh [-a /path/to/abs] [-p /path/to/tmp/pkgdir] [-f /path/to/pkgsfile] [-yin]
absbuild.shbase.pkgs
|
issue
Rock and Stone, brother!
|
kann den thread bitte ein mod/admin sticky machen, hab ihn neulich auch gesucht.
Lukas: nettes script, gefällt
|
COLOSSUS
AdministratorGNUltra
|
Gibt's (bzw. gab's glaub ich sogar hier) schon oefters, aber ich hab mich auch mal an ein Kernel-Update-Script gesetzt - vielleicht interessant fuer alle, die sich ihren Kernel selbst bauen. update-kernel.sh
|
deftenski
mit barockfelgen
|
das Script ist ja offensichtlich mit einem Fokus auf Gentoo geschrieben. Wieso also nicht mit genkernel?
|
COLOSSUS
AdministratorGNUltra
|
Weil ich genkernel nicht installiert habe.
|
deftenski
mit barockfelgen
|
das ginge ganz leicht mit emerge genkernel
|
NyoMic
xepera-xeper-xeperu
|
wird zwar nur für die allerwenigsten Interessant sein aber trotzdem. Hab mir ein kleines Script geschrieben welches die qmail-queue bereinigt. Wir haben hier z.B öfters dass Problem dass Kunden über unseren Server spammen (dank smtp-auth kommen die von überall, also ip-based block bringt nichts) #!/bin/bash
rm /root/listeanonym
qmail-qread | grep -B 1 spamempfaenger | sed -n '/#/p' | cut -d " " -f 7 | sed 's/#//g' >> /root/listeanonym
for i in `cat /root/listeanonym`
do
qmHandle -d$i
done
spamempfaenger = (recipient in der queue, also z.B yahoo.com.tw oder whatever) ACHTUNG: qmhandle muss natürlich vorhanden sein, sonst gehts nicht.
|
Gex
Oralapostel
|
Um diesen Thread mal wieder aufzuwärmen: Ich (als blutiger Shellscript-Anfänger, also nicht meckern wenn was nicht perfekt gelöst ist) hab mir mal ein kleines Script gebastelt, das mir eine virtuelle Maschine unter VMWare Server 2.0, in diesem Fall meinen Mailserver, kurz in Suspend schickt, das Verzeichnis auf mein RAID5 schiebt, die VM wieder startet und das kopierte Verzeichnis dann mit bzip2 verpackt. Es werden immer zwei Backups vorgehalten, so dass nix verloren geht, wenn bei dem ganzen Vorgang mal was in die Grütze geht... Rudimentären Output gibt's auch, damit man in etwa weiß was das Teil grad tut. Kann man auch weglassen, wenn man das Viech per cronjob laufen lässt... Sicher nicht besonders professionell gelöst, ich könnte mir z.B. noch vorstellen das Script so anzupassen, dass man die Pfade der Maschine und des Backup-Verzeichnisses beliebig anpassen kann, dass ein Logfile geschrieben wird, dass eine Mailbenachrichtigung rausgeschickt wird, die z.B. auch die Größe des erstellten Archivs enthält, usw. usf... Für's erste wirds diese Version erstmal tun, ist halt ziemlich unsauber innerhalb von 30min zusammengedengelt... Vielleicht findet's ja irgendwer nützlich #!/bin/bash
# Suspend the virtual machine
echo 'Suspending virtual machine...'
vmrun -T localhost -h https://localhost:8333/sdk -u myusername -p mypassword suspend "[standard] srv-mail/srv-mail.vmx"
# Copy virtual machine directory to RAID array
echo 'Copying virtual machine directory...'
cp -R /data/vmware/srv-mail/ /mnt/md1/VMBackups/
# Bring the virtual machine back up
echo 'Starting virtual machine...'
vmrun -T localhost -h https://localhost:8333/sdk -u myusername -p mypassword start "[standard] srv-mail/srv-mail.vmx"
# Check whether last backup file exists.
if [ -f /mnt/md1/VMBackups/srv-mail.tar.bz2 ];
then
echo 'Previous backup file exists.'
# If it exists, check, whether last but one backup file exists.
if [ -f /mnt/md1/VMBackups/srv-mail.bak.tar.bz2 ];
then
# Remove last but one backup file
echo 'Last but one backup file exists - removing.'
rm /mnt/md1/VMBackups/srv-mail.bak.tar.bz2
fi
# Rename last backup file
echo 'Renaming previous backup file.'
mv /mnt/md1/VMBackups/srv-mail.tar.bz2 /mnt/md1/VMBackups/srv-mail.bak.tar.bz2
fi
# Compress the virtual machine directory into a .tar.bz2 archive
echo 'Compressing virtual machine directory... this may take a long time.'
tar -jcf /mnt/md1/VMBackups/srv-mail.tar.bz2 /mnt/md1/VMBackups/srv-mail
# Remove virtual machine directory from RAID array
echo 'Removing virtual machine directory after compression...'
rm -rf /mnt/md1/VMBackups/srv-mail/
echo 'Backup of virtual machine finished.'
(Achtung: in den Zeilen 6 und 14 hat die Forensoftware diese URL-Tags um die URL herumgebaut... die müssen da weg...) Das soll's für's erste gewesen sein. Falls Interesse besteht, aktualisiere ich diesen Post, falls ich das Script noch ausbaue... Ansonsten hab ich noch ein zweites Ding in der Hinterhand, komplett anderer Verwendungszweck (Anpassen von Dateinamen von Videofiles nach Format, Tonformat, Codec usw. für alle Videofiles in einem Verzeichnis), sehr viel komplexer und zu 85% fertig... Falls Interesse besteht lad ich's hier rein sobald es fertig ist
|
COLOSSUS
AdministratorGNUltra
|
Ich hab dir das URL-Tagging wegoperiert.
|
Gex
Oralapostel
|
Ich hab dir das URL-Tagging wegoperiert. thx!
|
deftenski
mit barockfelgen
|
flac2mp3Ein kleines Script, das flacs ueber ein dazugehoeriges cuesheet in mp3s umwandelt. Als Ausgangsbasis dient bei mir immer ein Verzeichnis, in dem sich alle flacs und das cuesheet befinden (genau so, wie es aus rubyripper rauskommt). Die Daten fuer den ID3v2 Tag kommen alle aus dem cuesheet. http://users.fh-salzburg.ac.at/~gpanholz/shellscripts/functions.sh verwende ich in allen meinen Scripten zum formatieren von Ausgaben. Wer das nicht will, muss nur begin/end in den Zeilen 42, 60 und 75 durch eine einfaches echo ersetzen und die Zeile 72 loeschen. Beide Dateien liegen bei mir in ~/bin, in flac2mp3 Zeile 10 verwende ich auch ein "source ~/bin/functions.sh". Das muss natuerlich angepasst werden. sha256sums a489dd52b9cd8e4772d04ade21e8573639fd77ff4960891c7c4228ed79391d17 flac2mp3
cb846a599ec1a69e372ed6c4c64afedfa3ff59938e154610149f223b2d9f8556 functions.sh
|
COLOSSUS
AdministratorGNUltra
|
Nettes Script! Falls du den "Stil" deiner Scripts noch verbessern und ihrem Code fast schon glamouroese Eleganz einhauchen willst ( ), dann solltest du: - Verkettungen von sed mithilfe von Pipes vermeiden, wenn moeglich. Statt sed [statementsA] | sed [statementsB] [...] kann man in den allermeisten Faellen auch sed -e [statementsA] -e [statementsB] notieren. Auch Verkettungen von grep und sed hintereinander kann man meist durch sed alleine loesen: grep "REM GENRE" | sed -e "s/REM\ GENRE\ \(.*\)/\1/" kann man so auch durch ein einfaches sed -e "/REM GENRE/s/REM\ GENRE\ \(.*\)/\1/" erledigen.
- Statt `` besser $() zur Command-Substitution verwenden. Ich hab vor einiger Zeit mal ein Prograemmchen in C geschrieben, das das automatisch konvertieren kann - fuer die vielen, vielen eclasses in Gentoos Portage-System. Kann mich aber leider nicht mehr erinnern, ob ich auch alle Bugs so weit korrigiert habe, dass man es auch wirklich einsetzen sollte
- Immer, wenn du Doublequotes verwenden kannst, solltest du es auch tun. Beispiel: if [ $ARTIST == "Various" ] -> if [ $ARTIST == "Various" ]. Rationale: ARTIST="Die wilden Kerle" && [ $ARTIST == "Various" ] ausprobieren.
- [ (als Synonym fuer `test`) in if-Statements kann problematisch sein. Wenn du explizit bash (nicht sh) verwendest, gibt es das maechtigere Konstrukt [[, das einige Probleme des POSIX-Originals nicht kennt. Rationale: myvar=""; [[ "$myvar" -lt 100 ]]; [ "$myvar" -lt 100 ] ausprobieren.
Happy Hacking!
|
novy
Bloody Newbie
|
toller thread beginne soeben mir shellscriptkenntnisse anzueignen. ich hab mir mal ein kleines script gebastelt für den fall das mehrere user eingeloggt sind und ich alle auf einen schlag loswerden will #!/bin/bash
echo 'Welcher User soll ausgeloggt werden?'
read antwort
#
if [ "$antwort" = "ich" ]
then
leiche=$(whoami)
else leiche=$antwort
fi
echo $leiche #damit man nochmal sieht wer sich jetzt verabschiedet hat
sleep 1
#
for user1 in $(who | grep $leiche |awk '{print $2}')
do for pid1 in $(ps -ef | grep $user1 |grep -v grep |grep -v @ | awk '{print $2}')
do kill -9 $pid1
done
done
für den fall das jemand tcp-verbindungen mitloggen will oder muss #!/bin/bash
date > /tmp/fileC
netstat -tlapne > /tmp/fileA
cat /tmp/fileA >> /tmp/fileC
i=1
while [ $i -le 59 ]
do
# echo $i
netstat -tlapne > /tmp/fileA
sleep 1
netstat -tlapne > /tmp/fileB
tail -2 /tmp/fileC > /tmp/fileD
diff --text /tmp/fileA /tmp/fileB|grep tcp| grep -v 'cat /tmp/fileD' >> /tmp/fileC
i=`expr $i + 1`
done
cat /tmp/fileC >> /var/log/tcp
das script wird minütlich als crontabjob ausgeführt. wenn viel los ist wird das log-file am Tag ca. 6MB groß. mit logrotate hebe ich mir 6 versionen auf ich weiß das alles sehr einfach gemacht ist. für konstruktive kritik bin ich immer offen
Bearbeitet von novy am 19.06.2009, 11:34
|