Het grote "handige scripts" topic

Pagina: 1 2 3 Laatste
Acties:
  • 15.994 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Omdat er in elk script-request/"hoe kan ik XX vanaf de prompt" topic toch altijd weer leuke dingen voorbij komen, en er bijna altijd wat valt te leren van de oplossingen van anderen, leek het me leuk om een verzameltopic te hebben waar iedereen zijn/haar handigheidjes kan delen met anderen.
Volgens mij zijn er best meer mensen die net als ik een ~/scripts directory hebben met bash/perl/tcl/$taal scriptjes, en ik ben heel benieuwd naar wat anderen hebben geautomatiseerd. Alvast excuses dat ik zelf (bijna) alles in perl doe, dat wil niet zeggen dat ik niet opensta voor andere talen :)

Om aan te geven in welke richting ik denk trap ik af:
Naam: hussel.pl
Doel: mp3 playlist random door elkaar gooien
Werking: leest bestand of stdin, randomize, schrijf naar bestand of stdout
OS: linux Taal: perl
Configuratie: -
Parameters: bronbestand doelbestand, zonder params worden stdin en stdout gebruikt, bv:
hussel.pl playlist.m3u randomplaylist.m3u
of
cat playlist.m3u | hussel.pl > randomplaylist.m3u
of
hussel.pl playlist.m3u >randomplaylist.m3u
Opmerkingen:
ik weet niet waar ik dit vandaan heb, maar aan de stijl te zien heb ik het niet (helemaal) zelf gemaakt
code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
# randomize source file
# lines are output in random order
# reads from from stdin or arg0, writes to stdout or arg1
open (STDIN, $ARGV[0]) if (($ARGV[0] ne "") && ($ARGV[0] ne "-"));
open (STDOUT, ">$ARGV[1]") if ($ARGV[1] ne "");
@list = <STDIN>;
while (@list) {
  $rand = rand (@list);
  print $list[$rand];              # for indexing rand is truncated
  splice @list, $rand, 1;          # delete array element
}



Naam: chkpkg.pl
Doel: Kijken of je een slackware package zonder risico kan uitvoeren. Dit omdat .tgz bestanden van anderen niet altijd even netjes gemaakt zijn.
Werking: Kijkt of de bestanden in de uitvoer van 'installpkg -warn' al bestaan, en meldt dat
OS: slackware Taal: perl
Configuratie: -
Parameters: geen, uitvoer van installpkg naar dit script sturen:
installpkg -warn package.tgz | chkpkg.pl
Opmerkingen heeft alleen nut indien root
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl
#
# check wether files that are about to be overwritten exist
# IMPORTANT:
# only usefull if installpkg -warn is run as root, 
# when run as a regular user the installscript will not
# be evaluated by installpkg, and important info could be missing. ( rm -rf stuff )
#
# simply feed this script with the output from installpkg -warn package.tgz
# i.e:
# installpkg -warn package.tgz | chkpkg.pl
#
# mailme@dkit.nl
# version 20020820

sub check  {
    $fileordir = shift;
    if ( -e "/".$fileordir ) {
    print "check: $fileordir exists!\n";
    }
}

while (<>) {
    chomp;
    $regel = $_;
    $regel =~ s/\s+$//;
    
    if ( $regel =~ /^[^\s]+\n/ ) {
    # single word on 1 line means something from the installscript. 
    check($regel);
    } else {
    if ( $regel =~ /\// ) {
    # any line with a / in it is probably a file/dir
    $regel =~ s/^.+\s//g;
    check($regel);
    }
    } 
}


Als leidraad bij het posten is dit misschien handig om te c/p-en:

[b]Naam: [/b]
[b]Doel: [/b]
[b]Werking: [/b]
[b]OS: [/b] [b]Taal: [/b]
[b]Configuratie: [/b]
[b]Parameters: [/b]
[b]Opmerkingen: [/b]
[code]
[/code]


Paar puntjes:
  • Commentaar is welkom, maar probeer termen als "100 keer beter" "crappy" en "prutz0r" te vermijden.
  • Denk 2 keer na voor je code van anderen uitvoert die je niet helemaal begrijpt.
  • De meeste scripts hier (de mijne iig zeker) zijn met een specifiek doel voor een specifieke user geschreven, verwacht svp niet dat alles zomaar overal werkt en/of doet wat je hoopt.
  • Probeer religieuze $editor/$language oorlogen te vermijden, evenals wedstrijdjes in onleesbare oneliners. Voor dat laatste kun je dit topic gebruiken.
offtopic:
dit topic heeft het goedkeurmerk van de nederlandse vereniging van huisvrouwen een NOS-mod,
en het is voor mij persoonlijk een record in hoeveelheid RML-tags ooit in 1 post :)

[ Voor 3% gewijzigd door pinball op 22-11-2003 13:07 . Reden: layout ]

Whenever you find that you are on the side of the majority, it is time to reform.


  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 18-05 08:07
Naam: online-users.sh
Doel: Welke gebruikers zijn ingelogd op een *BSD/Linux/Unix server
Werking: Gewoon starten in een terminal
Configuratie: -geen-
Parameters: -geen-

code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
#
while [ true == true ];
do
  clear
  w
  sleep 1
done

My weblog


  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Om de TS niet buitensporig lang te maken hier verder :)
Naam: cookieclean.pl
Doel: surfen zonder cookies is een ramp, en de prefs in mozilla/firebird kunnen niet wat ik wil: voor een paar sites cookies toestaan en houden, en de rest toestaan en verwijderen.
Werking: gooit je cookie file leeg, behalve voor sites in ~/.cookies.permitted
OS: linux Taal: perl
Configuratie:in het script zelf pad naar je cookiefile opgeven (/.phoenix/default/exdujwnp.slt/cookies.txt oid), en een bestand ~/.cookies.permitted aanmaken met toegestane sites erin.
Parameters: -
Opmerkingen aanroepen vanuit cron, of voor je mozilla/phoenix start, of alleen af en toe

Iets te lang om hier neer te gooien, dus linkje:
http://www.dkit.nl/pub/downloads/perl/cookieclean.pl.txt

Whenever you find that you are on the side of the majority, it is time to reform.


Anoniem: 13055

* Anoniem: 13055 heeft de titel ff wat aangepast.

ontopic:
Naam: appsrv
Doel: Het starten van applicaties op een X terminal vanaf een X server
Werking: Als er een parameter is opgegeven, probeer parameter te starten op de X server, anders kijk je naar de aangeroepen script naam en probeer je dat uit te voeren op de X server.
OS: Getest op IRIX, Solaris, FreeBSD en linux. Zou met kleine modificaties moeten draaien op alles waar bash op draait.
Taal: Bourne Again SHell (bash)
Configuratie: SERVER is de naam van de X server; USER is de user die word gebruikt om een rsh sessie naar SERVER op te zetten.
Parameters: of niets, of het pad naar een applicatie.
Opmerkingen Het is mogelijk om een symlink te maken naar een applicatie. Hierdoor word applicatie gestart op de X server.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
#
# appsrv: Run a remote application through rsh
# author: r3boot <r3boot@tweakers.net>
# license: GPL
#
SERVER="servernaam"         # Hostname of remote X server
USER="remoteusernaam"       # Username to use to connect to X server
MYDISP="$(hostname):0.0"    # The display to connect to

# Allow SERVER to connect to DISPLAY
xhost +${SERVER}

if [ ${#} -gt 0 ]; then
        # If we got a parameter passed on the command line,
        # try to execute the command on SERVER
        exec rsh -l ${USER} ${SERVER} "DISPLAY=${MYDISP} ${@}"
else
        # Check our called name to see if it's a symlink
        # to the name of an applications this script is
        # aware of
        case "$(basename ${0} | tr [A-Z] [a-z])" in
                opera) APP="opera" ;;
                evolution) APP="evolution" ;;
                xchat) APP="xchat" ;;
                phoenix) APP="phoenix -P $(hostname | cut -d. -f1)" ;;
                glade) APP="glade-2" ;;
                pan) APP="pan" ;;
                gaim) APP="gaim" ;;
        esac
        [ -n "${APP}" ] && exec rsh -l ${USER} ${SERVER} "DISPLAY=${MYDISP} ${APP}"
fi
exit 0

edit:

De eerste die een opmerking maakt over mijn gebruik van rsh ipv ssh moet in z'n achterhoofd houden dat dit script draait op oude unix workstations. Het nadeel hiervan is dat het opzetten van een ssh connectie soms 30 secs tot een minuut duurt, waardoor de "user experience" nou niet echt denderend is. Met rsh is dat probleem opgelost.

[ Voor 99% gewijzigd door Anoniem: 13055 op 21-11-2003 00:56 ]


  • PolarWolf
  • Registratie: November 2001
  • Laatst online: 18-04 12:17

PolarWolf

Debian, of course.

[b][message=19294747,noline]capedro schreef op 20 november 2003 @
code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
#
while [ true == true ];
do
  clear
  w
  sleep 1
done
Ofwel:
code:
1
prompt$ watch w


:-)

Undernet #linux, Undernet #ipsec


Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Naam: gotprefs.pl
Doel: Snel switchen tussen 2 sets instellingen op GOT
Werking: 1*starten zet een andere set prefs, nog een keer starten zet ze weer terug. Maakt een statusfile (~/.gotfast) aan in je homedir om te kijken welke set prefs er gebruikt moeten worden. Alleen het stukje "Instellingen berichtenoverzicht" uit je prefs wordt veranderd.
OS: linux Taal:perl (WWW::Mechanize nodig)
Configuratie: got inlognaam + ww invullen in script, en halverwege in het script de 2 sets prefs naar keuze instellen.
Parameters:-
Opmerkingen Snelkoppeling naar dit script op je desktop/panel/taskbar, en je kunt met 1 klik switchen tussen /?limit=999 en normaal.
Zoals het nu is switched het tussen 'fast' (limit=999, geen icons, geen iqc,geen msn, geen ondertitels, geen sigs), en 'normaal'. Dit natuurlijk naar eigen wens aan te passen.

Wegens vrij lang niet hier maar hier

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 08:30
Naam: Grootverbruikersscript
Doel: Laat zien welke lusers de meeste MP3s, films en pr0n op je server hebben
Werking: aanroepen
OS: *BSD, Linux Taal: (ba)sh
Opmerkingen
Bestaat uit 2 scripts, eentje om informatie te verzamelen en eentje om de zooi te verwerken

Script die informatie verwerkt, en daarvoor eerst het andere script aanroept:
code:
1
2
3
4
#!/bin/sh
echo "Grootverbruikers boven de 500MB"
 
cd /usr1 && ./script 2>/dev/null | sort -r -n | awk '{ if ($1 >= 512000) print $1/1024" MB: "$2 }'


Script die informatie verzamelt.
code:
1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
 
for i in {hi,mdt,cmd,personeel}; do
  cd $i
  for j in *; do
    cd $j
    du -sk *
    cd ..
  done
  cd ..
done


Voor degene die vindt dat wij moeilijk doen met awk om het aantal MBs weer te geven en dat du dat ook kan met du -m: mispoes, dit ding draait op Mac OS X server, en dat ding heeft alleen du -k om kilobytes weer te geven.

Edit:
in ons geval gaat het om een directory /usr1 waar alle homes in staan, hierin staan submapjes van opleidingscodes en daarin staat per jaar weer een submapje met daarin de mapjes van de diverse gebruikers.

[ Voor 13% gewijzigd door _JGC_ op 21-11-2003 09:19 ]


Acties:
  • 0 Henk 'm!

  • Myrdhin
  • Registratie: April 2000
  • Laatst online: 08:08
_JGC_ schreef op 21 november 2003 @ 09:18:
[knip]
Voor degene die vindt dat wij moeilijk doen met awk om het aantal MBs weer te geven en dat du dat ook kan met du -m: mispoes, dit ding draait op Mac OS X server, en dat ding heeft alleen du -k om kilobytes weer te geven.
[knip]
Werkt "du --block-size=1048576" i.p.v. "du -m"?

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 08:30
Myrdhin schreef op 21 november 2003 @ 09:31:
[...]

Werkt "du --block-size=1048576" i.p.v. "du -m"?
Nee, werkt niet, reageert ie niet eens op.

Acties:
  • 0 Henk 'm!

Anoniem: 15610

_JGC_ schreef op 21 november 2003 @ 09:34:
[...]


Nee, werkt niet, reageert ie niet eens op.
En op du -h , van human ??

Acties:
  • 0 Henk 'm!

  • active2
  • Registratie: Juni 2001
  • Laatst online: 26-10-2024

active2

Google is your friend

Anoniem: 15610 schreef op 21 november 2003 @ 09:57:
[...]


En op du -h , van human ??
Werkt ook niet. :)

Google, Het mirakel van de 21e eeuw!!!!


Acties:
  • 0 Henk 'm!

  • RvdH
  • Registratie: Juni 1999
  • Laatst online: 04-02 14:45

RvdH

Uitvinder van RickRAID

Timestamp in human readable form:
code:
1
perl -e 'print scalar(localtime(1000000000)),"\n"'

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 21-05 20:48

odysseus

Debian GNU/Linux Sid

Naam: gen_cvsup, gen_all
Doel: genereren van aparte cvsup-bestanden voor verschillende onderdelen van een CVS-repository
Werking:
OS: onafhankelijk, maar vereist GNU-tools Taal: Bash / sh
Configuratie: pas de hostname, base en prefix aan aan je eisen
Parameters: -
Opmerkingen -

gen_cvsup:
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash

echo *default host=cvsup.kde.org
echo *default base=/usr/src/cvs-kde
echo *default prefix=/usr/src/cvs-kde
echo *default release=cvs
echo *default compress
echo *default tag=.
echo *default use-rel-suffix
echo $@

gen_all:
code:
1
2
3
#!/bin/bash

for i in `cat dirlist`; do ./gen_cvsup $i > cvsup.$i; done

Doodsimpel, maar wat mij betreft bijzonder nuttig. Ik heb ook een apart script om een CVSup-file met delete-regel erin te schrijven, zodat ik met 'gen_all' of 'gen_del_all' kan switchen tussen het al of niet verwijderen van bestanden bij het updaten via CVSup. In gen_all wordt nu gebruik gemaakt van een bestand 'dirlist' met daarin de gewenste directories; dat zou je kunnen vervangen door 'cvs co -l' als je alle directories wilt hebben (en je kunt daar natuurlijk ook weer 'grep -v' op loslaten).

* odysseus heeft dit altijd met veel plezier gebruikt, maar kan er bij gebrek aan binary packages voor cvsup (en gebrek aan zin, tijd en plaats voor een Modula3-compiler) geen gebruik meer van maken...dan maar weer old-school CVS gebruiken :7.

Nog een korte oneliner die ik ook graag gebruik, maar die niet voor iedereen nuttig zal zijn:
dgrep:
code:
1
2
#/bin/sh
grep ^TOPSUBDIRS Makefile

Hiermee zie je welke directories er allemaal gecompileerd gaan worden. Handig te gebruiken als je wilt zien hoe ver je compilatie al gevorderd is - zeker in combinatie met du: 'du -hs `dgrep`' levert van elke directory die gecompileerd moet worden hoe groot die is :).

[ Voor 4% gewijzigd door odysseus op 21-11-2003 11:48 . Reden: plain-tags verwijderd ]

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Naam: flash2hdd
Doel: foto's vanaf compactflash/camera naar hd kopieren, en op CF hernoemen zodat ze maar 1 keer gekopieerd worden.
Werking: maak dir aan met naam YYYYMMDD, mount CF, copy foto's naar hd, hernoem foto's op CF, unmount CF
OS: linux et al Taal: bash
Configuratie: in het script zelf mountpoint, imagedir en generieke fotonaam opgeven
Parameters: -
Opmerkingen ik heb een antieke digicam zonder lcd/menu, die geeft er nix om wat er op m'n CF staat. Misschien dat moderne camera's gaan flippen als foto's plots anders heten, in dat geval zou verwijderen op CF ipv hernoemen ook een optie zijn.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
# kopieer alles uit flash naar hd in een verse dir met
# huidige datum als naam, hernoem bestanden op flash
# zodat ze maar 1 keer gedaan worden.

# mountpoint flashdisk. moet een goede entry in /etc/fstab hebben,
# zodat ie verderop automatisch ge(un)mount kan worden
MNT=/mnt/sandisk
# imagedir op gemounte usb-lezer of camera
CFD=$MNT/imagfa
# imagedir op hd
IMD=/home/pinball/images/cam
# naam van plaatjes op flash
IMAGE=pict*.jpg

DATUM=`date +%Y%m%d`
# evt. dir aanmaken
if [ ! -d $IMD/$DATUM ]
    then
    mkdir -p $IMD/$DATUM
fi

mount $MNT
# voor elk bestand op flash wat pict*.jpg heet
for i in $(ls -1 $CFD/$IMAGE) ;
    # kopieren naar juiste dir
    do cp $CFD/${i##*/} /$IMD/$DATUM/${i##*/};
    # op flash hernoemen zodat we niet nog eens kopieren
    # 'D' ervoor is willekeurig gekozen,
    mv  $CFD/${i##*/}  $CFD/D${i##*/} ;
    done
umount $MNT

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Naam: greplogs.pl
Doel: snel door logs heenwandelen van 0, 1 of meer dagen terug, output is daarna nog te greppen/cutten/lessen
Werking: bouwt datum om naar formaat wat in log gebruikt word, en print regels met die datum
OS: linux et al Taal: perl
Configuratie: in het script plek+datumnotatie van een log opgeven. apache, exim en messages staan er al, anderen zijn vrij simpel toe te voegen.
Parameters: aanroepen met symlink om juiste log te krijgen, getal erachter om aantal dagen terug aan te geven:
weblog = apache log van vandaag
eximlog 2 = exim log van 2 dagen terug
aanroepen als greplogs.pl geeft commando's om symlinks aan te maken.
Opmerkingen: ik gebruikte altijd parameters om de lognaam mee te geven, door het script van r3boot hierboven kwam ik op het id om dat met symlinks te doen, en heb ik eea ff omgebouwd.

Wegens vrij lang niet hier maar hier

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

Anoniem: 45835

Naam: radio
Doel: Internet radio luisteren
Werking: Stuurt vanuit script mplayer aan
OS: FreeBSD / Linux Taal: bash !!
Configuratie: Voor linux gebruikers de 1e regel (lokatie bash) aanpassen
Parameters: radio <radio station>
Opmerkingen: Handig om te gebruiken in een screen sessie.



code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/local/bin/bash

address_book_nr[0]="http://62.250.12.54:8000/listen.pls"
address_book_nr[1]="http://www.omroep.nl/radio3/live64.asx"
address_book_nr[2]="http://media.rtl.nl/rtlfm/livestream/rtlfmbroad.asx"
address_book_nr[3]="http://media.rtlimedia.nl/yorinfm/on_air/yorin.asx"
address_book_nr[4]="http://ms.stream.garnierprojects.com/veronica"
address_book_nr[5]="http://www.omroep.nl/radio2/live55.asx"


address_book_name[0]="ID&T"
address_book_name[1]="Radio 3"
address_book_name[2]="RTL FM"
address_book_name[3]="Yorin FM"
address_book_name[4]="Veronica"
address_book_name[5]="Radio 2"

# http://www.nederland.fm/

function usage_info {
  echo "Usage: Play a streaming radio station -> radio <radio station>"
}

case $# in
0)
    usage_info
    printf "\n"
    index=0
    element_count=${#address_book_nr[@]}
    while [ "$index" -lt "$element_count" ]
    do    # List all the elements in the array.
      echo "radio "$index" : "${address_book_name[$index]}" ("${address_book_nr[$index]}")"
      let "index = $index + 1"
    done
  ;;
1)
    if [ $1 -ge ${#address_book_nr[@]} ]
    then
      echo "Address book number unknown."
    else if [ $1 -lt 0 ]
    then
      echo "Address book number unknown."
    else
      mplayer ${address_book_nr[$1]} -cache 500
    fi
    fi
  ;;
*)
  usage_info
  ;;
esac

Acties:
  • 0 Henk 'm!

  • imdos
  • Registratie: Maart 2000
  • Laatst online: 17-06 09:05

imdos

I use FreeNAS and Ubuntu

Naam: clean-tmp
Doel: Hier een simpele voor wat opruim werkzaamheden in /tmp
Werking:Verwijdert wat bestanden en/of directories uit /tmp
OS: Linux Taal: BASH
Configuratie: Gewoon aanroepen, deze staat in /etc/cron.weekly
Parameters: Geen
Opmerkingen: Gewoon runnen
code:
1
2
#!/bin/sh
find /tmp/ -type d -name 'evolution-*' -prune -mtime +1 -exec rm -rf {} \;

Vrij simpel deze ruimt bestanden op die ik open vanuit evolution, waarvan de dir's langer dan een dag er staan! Dit kan bijv. ook met ssh die er dir's dumpt ssh-*

[ Voor 33% gewijzigd door imdos op 22-11-2003 15:04 . Reden: aangepaste lay-out ]

pvoutput. Waarom makkelijk doen, als het ook moeilijk kan! Every solution has a new problem


Acties:
  • 0 Henk 'm!

Anoniem: 54317

Naam: playsongs
Doel: mn muziekcollectie te beluisteren zonder X te starten
Werking: speelt ogg/mp3 files in een bepaalde directory af (gesorteerd/shuffled), met de mogelijkheid om bepaalde files te excluden.
OS: alleen getest met linux Taal: bash
Configuratie: de locatie van de mp3/oggplayers, de default muziekdirectory&excludefile
Parameters: gesorteerd of shuffled afspelen, de muziekdirectory, de excludefile
Opmerkingen: ik heb het script vooral geschreven omdat de sorteer/shuffle functie van ogg123 bij mij nogal te wensen overliet.

De shuffle wordt bewerkstelligd door voor elke file een random getal te zetten, en dat dan te sorteren (:

De shuffle functie is daarom niet helemaal random, maar voor een muziekspeler is dat niet zo'n probleem.

http://trainspotting.homelinux.org/~erik/playsongs

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17-06 20:07

Robtimus

me Robtimus no like you

Naam: randombg
Doel: een random achtergrond instellen voor blackbox (window manager)
Werking: zet een random achtergrondplaatje uit een file in blackbox
OS: linux Taal: bash
Configuratie: de variabele RANDOM is nodig, en moet een random getal teruggevel wanneer aangeroepen
Parameters: een file met op elke regel een achtergrondplaatje (volledig pad vereist)
Opmerkingen: is alweer versie 2.0, na eerdere versies die oa een eigen random nummer generator gebruikten. Het "cat $1 | wc -l" deel kan (zie ik nu) worden afgekort tot "wc -l $1". bsetbg doet het daadwerkelijke zetten.
code:
1
2
3
((BGNUM=$RANDOM % `cat $1 | wc -l` + 1))
WP=`cat $1 | head -n $BGNUM | tail -n 1`
bsetbg $WP

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • smoking2000
  • Registratie: September 2001
  • Laatst online: 05:12

smoking2000

DPC-Crew

dpkg-reconfigure reality

Naam: umount-eject.pl
Doel: Eject cdrom/dvd + eventuele unmount
Werking: Eject cdrom of dvd dmv `eject` + eventuele unmount dmv `umount`
OS: Debian GNU/Linux Taal: Perl
Configuratie: -
Parameters: device (zonder /dev/)
Opmerkingen: Kan ook in bash/sh/tcsh

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl -w

use strict;
use File::Basename;

my $device = $ARGV[0] ? $ARGV[0] : '';
   $device = 'cdrom' if($device eq '');

my $have_eject = `which eject`;

if($have_eject eq '') {
        print "eject is not installed\n";
}
else {
        if(-e "/dev/$device") {
                &umountEject($device);
        }
        else {
                print "No such device ($device)\n\n";
                &printHelp();
        }
}


sub umountEject {
        my $device = $_[0];

        my $mounted = `mount | grep $device`;
        if($mounted ne '') {
                print "Unmounting Device...\n\n";
                system("umount /$device");
        }

        print "Ejecting $device...\n";
        system("eject /dev/$device");

        print "Done\n";
}


sub printHelp {
        print "Usage: ".basename($0)." <device>\n";
        print "default /dev/cdrom\n";
}


Overcomplicated enzo
Ik hou van typen :P

| [Folding@Home] Announce: Client monitor voor Linux (fci) | fci-1.8.4 | Fatal Error Group |


Acties:
  • 0 Henk 'm!

  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 07-06 11:47

JaWi

maak het maar stuk hoor...

Pinball schreef op 20 november 2003 @ 14:41:

code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
# randomize source file
# lines are output in random order
# reads from from stdin or arg0, writes to stdout or arg1
open (STDIN, $ARGV[0]) if (($ARGV[0] ne "") && ($ARGV[0] ne "-"));
open (STDOUT, ">$ARGV[1]") if ($ARGV[1] ne "");
@list = <STDIN>;
while (@list) {
  $rand = rand (@list);
  print $list[$rand];              # for indexing rand is truncated
  splice @list, $rand, 1;          # delete array element
}
De `willekeurigheid' van je output is minder dan dat je misschien zou denken, zeker
naar mate je aan het einde van je array komt. Een betere oplossing is om het zg.
Fisher-Yates algorithme te gebruiken (staat ook in het Perl cookbook en perlfaq4):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl -w

use strict;

open STDIN, $ARGV[0] or die
     if defined $ARGV[0] and $ARGV[0] ne "" and $ARGV[0] ne "-";
open STDOUT, ">$ARGV[1]" or die
     if defined $ARGV[1] and $ARGV[0] ne "";

my $i;
my @array = <STDIN>;
for ($i = scalar @array; --$i; ) 
{
  my $j = int rand ($i+1);
  next if $i == $j;
  @array[$i,$j] = @array[$j,$i];
}
print @array;

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


Acties:
  • 0 Henk 'm!

Anoniem: 60057

Naam: findhosts.sh
Doel: Kijken welke computers in een netwerk aan staan
Werking: Pingt alle hosts in een bepaalde ip-range en zoekt hun dns naam op
OS: UNIX Taal: Shell
Configuratie: -
Parameters: -
Opmerkingen: In het settings gedeelte van de source ip-adres begin, suffix range en domain suffix instellen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh

# Pings hosts on a network and outputs whether they are on or off

# Settings
# ---------------
ipprefix=192.168.1.
minipaffix=1
maxipaffix=7
domainname=orion.net
# ---------------

# Code
# ---------------
for number in `seq $minipaffix $maxipaffix`; do
        hostname=`host $ipprefix$number | sed s,^.*pointer\ ,, | sed s,.$domainname.\$,,`
        if ping -w 1 -c 1 $ipprefix$number > /dev/null; then
                echo "$hostname: on"
        else
                echo "$hostname: off"
        fi
done
# ---------------

Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
offtopic:
@ IntrinsiX
nmap -sP -R 192.168.1.*

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

  • Bonno
  • Registratie: November 2001
  • Laatst online: 01-06 21:26
Pinball schreef op 22 november 2003 @ 22:09:
offtopic:
@ IntrinsiX
nmap -sP -R 192.168.1.*
offtopic:
Hoe kan je bij deze nmap-scan aangeven tot welk ip nummer hij moet scannen?
Want op deze manier krijg je in een (klein) thuisnetwerk een hoop onnuttige info terug.
Ik heb de man page van nmap al doorgelezen, maar daar staat zo'n beperking niet in

Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
offtopic:
nmap -sP 192.168.1.1-30
moet je toch eens beter kijken, staat gewoon bij 'target specification'

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 20-05 01:14
offtopic:
nmap -sP 192.168.1.1-30 | grep up
geeft zeer weinig rommel en je weet wie er up zijn.
Das tenminste meestal wat ik wil weten.

Acties:
  • 0 Henk 'm!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Naam: sxw2txt
Doel: lezen van een OpenOffice Write document op de console.
Werking:
OS: linux Taal: bash en andere shells
Configuratie:
Parameters: 1 .sxw bestand
Opmerkingen: alleen de sed-regel komt uit de sed-faq, de rest heb ik allemaal zelf bedacht! :P
nadelen: gooit alle text achterelkaar
code:
1
2
3
4
#!/bin/bash
unzip -p $1 content.xml |\
sed -e :a -e 's/<[^>]*>//g;/</N;//ba' |\
less


Naam: hr
Doel: vertalen van bytes naar "Human Readable"
Werking: recursief delen door 1024, en dan dmv het aantal delingen de omschrijving uit een tabel halen
OS: linux Taal: bash
Configuratie:
Parameters: een integer
Opmerkingen: Nog geen goede fout-afvanging bij niet-integers en te grootte getallen. Ik weet wel dat veel programma's zelf een "Human Readable" optie hebben, maar dan kan ik niet meer op grootte sorteren, vandaar dit script. (Ik gebruik het dus in andere scripts die uitvoer van du , etc bewerken)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

typeset -i macht10x=0   # will be used as an index on following arrays

# byte, kilobyte, megabyte, gigabyte, terabyte, petabyte?
typeset -r -a grootheden=(b kb mb gb tb pb)
typeset -r -a -i bytes=(1 1024 1048576 1073741824 1099511627776 1125899906842624)

function humanReadable()
{
    if [ $1 -ge 1024 ]
    then
        macht10x=$macht10x+1
        humanReadable $(( $1 / 1024 )) #recursive call
    fi
}

#TODO: hier eigenlijk checken op integer
typeset -i invoer="$1"
humanReadable $invoer

#even checken of het niet buiten ons bereik valt.(werkt nog niet helemaal super)
if [ $macht10x -ge ${#grootheden[*]} ]
then
    echo "to large"
    echo "cannot process more than 1024 ${grootheden[$((${#grootheden[*]}-1))]}"
    exit 1
fi

typeset -i deler=${bytes[$macht10x]}

afgerond=$(echo "$invoer" "$deler" |awk '{printf "%.2f", ($1/$2) ; }')
echo "$afgerond ${grootheden[$macht10x]}"
exit 0

Acties:
  • 0 Henk 'm!

Anoniem: 13055

offtopic:
Lol, nooit geweten dat je met bash arrays kon gebruiken (typeset). Dank voor de tip.

[ Voor 4% gewijzigd door Anoniem: 13055 op 23-11-2003 16:57 ]


Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 20-05 01:14
Anoniem: 45835 schreef op 22 november 2003 @ 14:19:
Naam: radio
Doel: Internet radio luisteren
Werking: Stuurt vanuit script mplayer aan
OS: FreeBSD / Linux Taal: bash !!
Configuratie: Voor linux gebruikers de 1e regel (lokatie bash) aanpassen
Parameters: radio <radio station>
Opmerkingen: Handig om te gebruiken in een screen sessie.

Dit was het script wat ik nou altijd al wilde hebben. (te lui om het zelf te maken ;))
Alleen gebruik ik liever de naam van het radio station 'radio YorinFM' i.p.v. een nummertje.
Daarom heb ik het script iets aangepast:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[...]
1)
    index=0
    element_count=${#address_book_nr[@]}
    while [ "$index" -lt "$element_count" ]
    do
      if [ ${address_book_name[$index]} = $1 ]
      then
        mplayer ${address_book_nr[$index]} -cache 500
        break
      fi
      let "index = $index + 1"
    done
  ;;
[...]


Er kunnen nu natuurlijk geen spaties meer in de namen van de radiostations worden gebruikt dus dit moet ook ff aangepast.

[ Voor 4% gewijzigd door Mac_Cain13 op 23-11-2003 18:13 ]


Acties:
  • 0 Henk 'm!

  • flok
  • Registratie: April 2003
  • Laatst online: 11-03-2023

flok

www.vanheusden.com

capedro schreef op 20 november 2003 @ 14:55:
Naam: online-users.sh
Doel: Welke gebruikers zijn ingelogd op een *BSD/Linux/Unix server
Werking: Gewoon starten in een terminal
Configuratie: -geen-
Parameters: -geen-

code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
#
while [ true == true ];
do
  clear
  w
  sleep 1
done
sorry to nitpick, maar kan ook met:
code:
1
watch w


Mja. Alleen had iemand anders dit ook al gemeld.
Tsja.
Deleten kan niet blijkbaar dus dan maar reclame maken voor multitail: kun je ook zoiets mee doen als met watch. Url: www.vanheusden.com/multitail
Maar als de moderators dit bericht wel kunnen wissen: please do.

[ Voor 22% gewijzigd door flok op 23-11-2003 19:06 . Reden: duplicate ]

www.vanheusden.com


Acties:
  • 0 Henk 'm!

Anoniem: 87605

ik weet niet hoe jullie die opmaak doen, maar wil gewoon ff wat erbij zetten..

Naam: check.sh
Doel: check een aantal dingen aan begin van een ander script (als include)
Werking: kijk en vergelijk :-)
OS: *BSD/Linux
Taal: sh
Configuratie: -
Parameters: -
Opmerkingen: KISS (Keep It Simple Stupid)

#!/bin/sh

if [ `whoami` != root ] ; then
printf `clear`
printf "You must be root to run this script.\n\n"
exit 0
fi

if [ $UNAME != OpenBSD 3.3 ] ; then
printf `clear`
printf "This script is made for Openbsd 3.3\n\n"
exit 0
fi

*we could change the world if god would give us the source code*

Acties:
  • 0 Henk 'm!

  • smoking2000
  • Registratie: September 2001
  • Laatst online: 05:12

smoking2000

DPC-Crew

dpkg-reconfigure reality

Naam: linux-kernel-version.pl
Doel: Kernel versies van kernel.org downloaden
Werking: De finger_banner van kernel.org downloaden en afdrukken
OS: GNU/Linux Taal: Perl
Opmerkingen: Handig als ik geen beschikking heb tot lynx/links of andere browser / wget
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;

# Retrive banner
# http://www.kernel.org/kdist/finger_banner

my $ua = LWP::UserAgent->new;
   $ua->agent("KernelCheck/1.0");

print "Retrieving kernel banner\n";
my $url = 'http://www.kernel.org/kdist/finger_banner';
my $req = HTTP::Request->new(GET => $url);

my $res = $ua->request($req);
if($res->is_success) {
        my $file = $res->content;
        print "-----------------[ Kernel Versions ]--------------------\n";
        print $file;
}
else {
        print "Error retrieving $url\n";
}

| [Folding@Home] Announce: Client monitor voor Linux (fci) | fci-1.8.4 | Fatal Error Group |


Acties:
  • 0 Henk 'm!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Anoniem: 13055 schreef op 23 november 2003 @ 16:57:
offtopic:
Lol, nooit geweten dat je met bash arrays kon gebruiken (typeset). Dank voor de tip.
offtopic:
vanaf bash-versie 2. In bash >2 zijn er ook meer 'parameter expansions' beschikbaar.

Acties:
  • 0 Henk 'm!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Hierbij enige 'archief'-gerelateerde scripts.

Naam: unpack2dir
Doel: uitpakken van verschillende soorten ingepakte bestanden naar een directory met dezelde naam (zonder extensie)
Werking: het bestandsformaat wordt herkend door 'file' en op basis daarvan wordt de juiste unpack-subroutine aangeroepen.
OS: linux Taal: bash
Configuratie: Op aanwezigheid van unrar en unace wordt gecontroleerd. De andere worden geacht aanwezig te zijn.
Parameters: 1 of meer bestanden, van de volgende formaten: .zip, .gz, .bz2, .tar, .shar, .rpm, .arj, .rar, .ace, .cab, .lha, .a, .deb, .zoo
Opmerkingen: Voor iedereen die wel eens een tar.gz heeft uitgepakt in z'n home-dir waarin niet 1 toplevel dir zat. :D

link: unpack2dir.sh.txt


Naam: zip2tarbz2
Doel: Converteren van zip-files naar ge-bzip2de tar-files.
Werking: Uitpakken naar tmp-dir en weer inpakken
OS: linux Taal: bash
Parameters: zip-file(s)
Opmerkingen: oude zip-file wordt verwijdert

link: zip2tarbz2.sh.txt


Naam: gz2bz2
Doel: Converteren van .gz-files naar .bz2 file
Werking: gunzip -c file.xyz.gz |bzip2 -c >file.xyz.bz2
OS: linux Taal: bash
Parameters: -k om gz-bestand(en) te bewaren + .gz-file(s)
voorbeeld: gz2bz2 -k file.tar.gz whatever.gz xyz.tgz gzippedwithoutextion
Opmerkingen: Options-parser is verre van ideaal.

link: gz2bz2.sh.txt

[ Voor 4% gewijzigd door A_L op 06-03-2004 21:58 ]


Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
A_L schreef op 26 november 2003 @ 19:26:
Opmerkingen: Voor iedereen die wel eens een tar.gz heeft uitgepakt in z'n home-dir waarin niet 1 toplevel dir zat. :D
Das dus grofweg iedereen in NOS die wel eens een shell van dichtbij ziet :)
Handig, want ik maak die 'fout' nog steeds wel eens :D

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

_JGC_ schreef op 21 november 2003 @ 09:18:
Naam: Grootverbruikersscript
Bestaat uit 2 scripts, eentje om informatie te verzamelen en eentje om de zooi te verwerken
...
code:
1
2
3
4
#!/bin/sh
echo "Grootverbruikers boven de 500MB"
cd /usr1 && ./script 2>/dev/null | sort -r -n |\
awk '{ if ($1 >= 512000) print $1/1024" MB: "$2 }'
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
for i in {hi,mdt,cmd,personeel}; do
  cd $i
  for j in *; do
    cd $j
    du -sk *
    cd ..
  done
  cd ..
done
...
Beetje late reactie, maar....
Zijn die 2 scripts niet te vervangen door het volgende?
code:
1
2
3
4
#!/bin/sh
echo "Grootverbruikers boven de 500MB"
cd /usr1 && du -sk hi/*/*/* mdt/*/*/* cmd/*/*/* personeel/*/*/* 2>/dev/null |\
sort -r -n | awk '{ if ($1 >= 512000) print $1/1024" MB: "$2 }'

Dan hoef je maar 1 keer du aan te roepen. Zou sneller moeten zijn.
tenminste als die dirs zo zijn opgebouwd:
/usr1/homes/opleiding_code/jaar/users
en waarbij homes voor "hi, mdt, cmd, personeel" staat

Als dat niet zo is dan zou je de 2 scripts ook als volgt kunnen samenvoegen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

( 
for i in {hi,mdt,cmd,personeel}; do
  cd $i
  for j in *; do
    cd $j
    du -sk *
    cd ..
  done
  cd ..
done
)sort -r -n | awk '{ if ($1 >= 512000) print $1/1024" MB: "$2 }'


Maar ik heb natuurlijk geen MacOS X Server om te testen ;)

offtopic:
OK, ik zal nu voor eerst niks meer posten >:)

Anoniem: 79553

Als ik een Engels woord niet ken, gebruik ik als woordenboek heel vaak het perl scriptje webster.pl

Gebruik:
webster.pl engels_woord

Webster zoekt in de database van Merriam Webster op het web (het standaard Amerikaans woordenboek van de Engelse taal.)
Je kunt ook zoeken via hun website, m-w.com, maar dat gaat traag en heeft veel te veel bloat.

Anoniem: 25021

Anoniem: 79553 schreef op 27 november 2003 @ 00:55:
Als ik een Engels woord niet ken, gebruik ik als woordenboek heel vaak het perl scriptje webster.pl
Wat is er mis met dict en gnuvd?

Anoniem: 25021

Veel coole scripts hier!
Wie had ook al weer rtll2beep gemaakt? (Ik zal m'n pinkpanter beep script ook nog ff posten)

Mijn scripts:
Naam: SetiCheck
Doel: Monitoren voortgang SETI@Home
Werking: Checkt hoe veel seti work_units er nog in de door setistack gemaakte buffer staan, en hoe ver die zijn.

OS: MacOS X, Linux en mogelijk anderen Taal: bash
Configuratie: ff de goede path opgeven
Parameters: geen
Opmerkingen: heeft setistack nodig
seticheck

Naam: url
Doel: Een pagina met links maken vanuit een LaTeX file
Werking: Zoekt naar \url{} tags, en maakt XHTML
OS: Linux, mogelijk anderen Taal: Bash
Configuratie: ff filename veranderen in config
Parameters: geen
url

Veel scripts hebben een extensie, b.v. .sh of .pl
Volgensmij is dit verkeerd. Als je een script in bash scrijft, en het b.v. speelmp3 noemt, dan kan je een rewrite in perl of C maken zonder de script/programma's die dit programma gebruiken aan te passen. Het programma waarmee het script uitgevoerd moet worden moet dmv de 1e regel (shebang)

[ Voor 36% gewijzigd door Anoniem: 25021 op 27-11-2003 13:23 ]


Anoniem: 22269

in je /etc/bashrc
code:
1
2
3
4
nd()
{
    mkdir "$1" && cd "$1"
}

Functie: een snel commando om een nieuwe dir aan te maken en daar gelijk heen te gaan (om bijv. iets te unpacken waarvan je niet zeker weet of het een eigen basedir aanmaakt, zoals veel zipfiles.)

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Naam: getip.pl
Doel: huidige ip uit een vigor 2200 lezen
Werking: logt in, leest ip, vergelijkt met vorige keer, voert actie uit indien verschillend
OS: linux et al Taal: perl
Configuratie: ip, hostname en wachtwoord van vigor invullen + script wat gedraaid moet worden als er een nieuw ip is
Parameters: geen (evt. $verbose=1 zetten om te debuggen)
Opmerkingen: Gebouwd omdat mijn dynamische dns niet in de vigor 2200 gebouwd zit.

http://www.dkit.nl/pub/downloads/perl/getip.pl.txt

offtopic:
@ compukid:
ik weet dat .pl niet hoeft, maar ik doe het lekker toch :P :)

Whenever you find that you are on the side of the majority, it is time to reform.


Anoniem: 79553

Anoniem: 25021 schreef op 27 november 2003 @ 10:41:
Wat is er mis met dict en gnuvd?
Dat ik ze niet heb?

Acties:
  • 0 Henk 'm!

Anoniem: 60780

Naam: changemod.sh
Doel: recursief permissies instellen (ja het is beter dan de -R optie bij chmod ;))
Werking: vanuit de directory waar je de permissies anders wilt instellen script aanroepen.
OS: linux Taal: bash
Parameters: geen, maar misschien als ik zin heb maak ik het geavanceerder
Opmerking: dit scriptje heeft de potentie om je hele systeem danig te verzieken. Denk dus goed na wat jij en wat het script doet--helemaal als je root bent! Deze versie maakt vanaf de huidige directory alle normale bestanden chmod 644 en van alle subdirectory's chmod 755. Handig als je per ongeluk een ISO CD-ROM als backup hebt gemaakt, (mkisofs -r) en je gebackupte bestanden dus niet in een tar hebt gedaan (zoals ik dus >_<). Het script houdt geen rekening met FIFO's sockets en symbolic links, dus gebruik het alleen voor je normale bestanden en directories.
code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
#changemod.sh, by jointm1k <m1kATforgottenre@lm.org>
#last update 20031208
#released under the GNU GPL. ;)
#version: 0.1a
for i in `ls -F | grep "/"`; \
do cd $i;
chmod 644 *
for i in `ls -F | grep "/"`; do chmod 755 $i; done;
/home/`whoami`/changemod.sh;
cd ..;
done;

Edit: voor de duidelijkheid: het scriptje werkt dus met recursie en als je veel bestanden hebt, kan het best wel een tijdje duren voordat-ie klaar is.

[ Voor 9% gewijzigd door Anoniem: 60780 op 08-12-2003 21:49 ]


Acties:
  • 0 Henk 'm!

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 21:47
jointm1k, jou script kan eenvoudiger (en skipt FIFO's/char-/blocksdevs/sockets etc):
code:
1
2
find -type d . -exec chmod 755 {} \;
find -type f . -exec chmod 644 {} \;

[ Voor 16% gewijzigd door Jelmer op 08-12-2003 22:17 ]


Acties:
  • 0 Henk 'm!

Anoniem: 60780

Ik vermoedde al dat ik te moeilijk dacht ja :D Ikzelf kon echter op geen enkele andere manier dit voor elkaar krijgen; dus bedankt voor de tip!

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-06 13:39
Naam: getIP
Doel: IP adres achterhalen, ook achter proxy
Werking: Leest in volgorde proy headers uit, bij de eerste match het waarschijnlijke ip terug geven
OS: Onafhankelijk
Taal: PHP
Configuratie: -
Parameters: -
Gebruik: getIP();
Opmerkingen: Als er geen IP gevonden wordt, dan geeft de functie "0.0.0.0" terug.
Zwaar gebaseerd op i2c_realip(); van php.net
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*---------------------------------------------------------------------- 
  Functie      : getIP 
  Omschrijving : IP adress van clients ophalen 
  Gebruik      : getIP() 
  Argumenten   : In: void 
               : Uit: String $ip (client ip adress of "0.0.0.0" als er geen ip wordt gevonden) 
---------------------------------------------------------------------- */ 
function getIP()  
{ 
    if(!empty($_SERVER['HTTP_CLIENT_IP'])) 
    { 
        $ip = $_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) 
    { 
        $ips = explode (",", $_SERVER['HTTP_X_FORWARDED_FOR']); 
        for ($i = 0; $i < count($ips); $i++)  
        { 
            $ips[$i] = trim($ips[$i]); 
            if (!eregi("^(10|172\.16|192\.168)\.", $ips[$i])) 
            { 
                    $ip = $ips[$i]; 
                    break; 
            } 
        } 
    } 
    elseif (!empty($_SERVER['HTTP_VIA']))  
    { 
        $ips = explode (",", $_SERVER['HTTP_VIA']); 
        for ($i = 0; $i < count($ips); $i++)  
        { 
            $ips[$i] = trim($ips[$i]); 
            if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i]))  
            { 
                    $ip = $ips[$i]; 
                    break; 
            } 
        } 
    } 
    elseif(!empty($_SERVER['REMOTE_ADDR'])) 
    { 
        $ip = $_SERVER['REMOTE_ADDR']; 
    } 
    else 
    { 
        $ip = "0.0.0.0";  
    } 
    return $ip; 
}

Acties:
  • 0 Henk 'm!

  • bras
  • Registratie: Oktober 2000
  • Laatst online: 12-06 14:07
Naam: mvwrap
Doel: Meerdere files/directories makkelijk renamen
Werking: mvwrap -h
OS: *nix en windows met cygwin Taal: Perl
Parameters: mvwrap -h
Opmerkingen: Helaas niet van mij ;) maar wel erg handig...

http://www.wizeazz.nl/ward/scripts/explain/mvwrap.shtml

[ Voor 1% gewijzigd door bras op 08-12-2003 22:35 . Reden: Met een gebroken hand typen is nog niet zo makkelijk ]

"When you find yourself in the company of a halfling and an ill-tempered Dragon, remember, you do not have to outrun the Dragon...you just have to outrun the halfling."


Acties:
  • 0 Henk 'm!

  • dvherk
  • Registratie: November 2001
  • Laatst online: 13-10-2024
Naam: dnsroot.update
Doel: maandelijks je root.hint file van je iegen dns server bijwerken.
Werking: als maandelijkse corn-job latem uitvoeren
OS: red hat
Taal: bash
Configuratie: -
Parameters: -
Opmerkingen: vul je eigen nameserver in. en pas eventueel wat paden aan. Heb hem omgebouwd zodat je een mailtje krijg met status melding. DNS server files staan in /var/named/ .
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh 
# 
# Update the nameserver cache information file once per month. 
# This is run automatically by a cron entry. 
# 
# Original by Al Longyear 
# Updated for bind 8 by Nicolai Langfeldt 
# Miscelanious error-conditions reported by David A. Ranch 
# Ping test suggested by Martin Foster 
# 
( 
 echo "To: root@localhost" 
 echo "From: system <root>" 
 echo "Subject: Automatic update of the root.hint file" 
 echo 

 PATH=/sbin:/usr/sbin:/bin:/usr/bin: 
 export PATH 
 cd /var/named 

 # Are we online?  Ping a server at your ISP 
 case `ping -qnc 3 JOUW.NAME.SERVER` in 
   *'100% packet loss'*) 
        echo "JOUW.NAME.SERVER is DOWN. root.hint NOT updated" 
        echo 
        exit 0 
        ;; 
 esac 

 dig @JOUW.NAME.SERVER . ns >root.hint.new 2>&1 

 case `cat root.hint.new` in 
   *NOERROR*) 
        # It worked 
        :;; 
   *) 
        echo "The root.hint file update has FAILED." 
        echo "This is the dig output reported:" 
        echo 
        cat root.hint.new 
        exit 0 
        ;; 
 esac 

 echo "The root.hint file has been updated to contain the following information:" 
 echo 
 cat root.hint.new 

 chown root.root root.hint.new 
 chmod 444 root.hint.new 
 rm -f root.hint.old 
 mv root.hint root.hint.old 
 mv root.hint.new root.hint 

 /etc/rc.d/init.d/named restart 
 echo 
 echo "The nameserver has been restarted to ensure that the update is complete." 
 echo "The previous root.hint file is now called /var/named/root.hint.old." 
) 2>&1 | /usr/lib/sendmail -t 
exit 0

Acties:
  • 0 Henk 'm!

  • Red Sonja
  • Registratie: Juli 2001
  • Laatst online: 30-04 11:42

Red Sonja

Linux: power to de wortel

Naam: rotatetheme.pl
Doel: Wisselen van themes in WM
Werking: Gewoon starten
OS: GNU/Linux Taal: Perl
Configuratie: -geen-(werkt met versie 0.60 op SuSE 7.3, mogelijk aanpassing nodig)
Parameters: -geen-
Bugs: ik wil het eigenlijk zo hebben dat door het scripje nog een keer aan te roepen terwijl er al eentje draait, dat de theme gewoon verandert(lukt nog niet). Telkens opnieuw starten als je nieuwe theme toevoegd.

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/local/bin/perl -w
#
# rotatetheme.pl
#
# Created: Aug 22, 2003 by Red Sonja
#
# simple theme rotator for windowmaker, runs as a daemon
#
# Usage: 
#
# Add to your $HOME/GNUstep/Library/WindowMaker/autostart script
#
# In Window Maker, create a menu item with the command:
#   kill -USR1 `cat $HOME/GNUstep/rotatebg.pid`
# and it will send a signal to rotate the background immediately(doesn't work yet).

use strict;
use Tie::File;
use Proc::Daemon;

my $rotatetime = 1200;
my $GNUstep="$ENV{'HOME'}/GNUstep";
my $bgdir="$GNUstep/Library/WindowMaker/Themes/";
my $bgfile="$GNUstep/bg.txt";
my $PID="$GNUstep/rotatebg.pid";
my $file;

#Get rid of Zombie problems
$SIG{CHLD} = 'IGNORE';
#rotate whenever you want
$SIG{USR1} = 'rotate';
$SIG{QUIT} = 'quit';
#Run as Daemon
Proc::Daemon::Init;
#print qx( kill -USR1 $_ ), exit if(-e "$PID" and $_ = `cat $PID`); #doesn't work yet
open  PID,">$PID" or die ( $! );
print PID $$;
close PID;

$0 = "Theme rotater";
print qx( ls -1 -t $bgdir > $bgfile );

while (1) {
    &rotate;
}

sub rotate {
    tie my @lines, 'Tie::File', $bgfile or die( $! );

    #
    # uses the 1st file in the list, removes, sticks it on the bottom
    # 
    $file = shift @lines;
    push @lines,$file;

    print qx( setstyle $bgdir$file );
    untie @lines;
    sleep $rotatetime;

}

sub quit {
    unlink $PID;
    exit;
}

[ Voor 6% gewijzigd door Red Sonja op 09-12-2003 00:26 . Reden: os en taal toegevoegd ]

And the beast shall be made legion. Its numbers shall be increased a thousand thousand fold. The din of a million keyboards like unto a great storm shall cover the earth, and the followers of Mammon shall tremble. from The Book of Mozilla, 3:31


Acties:
  • 0 Henk 'm!

Anoniem: 51493

Naam: getpid.sh
Doel: PID's van alle programma's waarbij argument in voorkomt worden getoond.
Werking: ./getpid.sh -h (geeft uitleg).
OS: *BSD, Linux (bash, ps, grep en awk vereist).
Parameters: -h (geeft uitleg).
Opmerkingen: Bugje: sommige argumenten, bijv -v, worden doorgeschopt door grep.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/local/bin/bash
##^^^^^^^^^^^^^^^^^^^
##Change to your needs :)

if [ "$1" == "-h" ];
then
        echo -e "Purpose: pgrep-like *uch* for non-Solaris boxes!\nSyntax: ./getpid.sh \"part_of_procesname\" (without the quote)\nExample: ./getpid.sh etty"

elif [ "$1" != "" ];
then
        echo -e "the PID(s) containing \"\033[1;37m$1\033[00;00m\" is/are: \033[1;37m"
        _output="`ps axc | grep $1 | awk '{ print $1 }'`"
        if [ "$_output" != "" ];
        then
                echo $_output
        else
                echo -e "e:\033[00;37m there is no such process!"
        fi
else
        echo -e "\033[1;37me:\033[00;37m no argument specified! Use -h for help"
fi


Eigelijk heb ik het al tijden niet meer gebruikt...

Trouwens, een script dat ik nog wel gebruik, met erg veel plezier, is dmassage: dmesg parser. Deze kan o.a. een GENERIC BSD kernel config een stuk kleiner maken door alle overbodige troep eruit te schoppen. Hoef je dat zelf al niet te doen :) vraagje: kent iemand zoiets voor de Linux kernel?

[ Voor 21% gewijzigd door Anoniem: 51493 op 09-12-2003 01:07 ]


Acties:
  • 0 Henk 'm!

  • Red Sonja
  • Registratie: Juli 2001
  • Laatst online: 30-04 11:42

Red Sonja

Linux: power to de wortel

[Naam: taper-v1.sh
Doel: Backuppen en zippen van MySQL db
Werking: Alle db's naar sql files dumpen, zippen en mogelijk oude bestanden (week oud) weggooien.
OS: GNU/Linux Taal: Bash
Configuratie: -geen-(eigen pass nodig )
Parameters: -geen-
Bugs: zeer simpel scripje, aanpassen naar eigen wens
Opmerkingen: iedereen zal vast al zijn eigen scripjes hiervoor hebben maar, vond het toch leuk om een oude (eerste bash-script) tevoorschijn te halen :D

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash

tijd=`date +%A`
aantal=0
echo "Het is vandaag $tijd"
mysqlshow -u root --password=secret | grep $1 |
while read streep databeesten streepje;
do
echo "Backuppen van dbs $databeesten"
mysqldump -a -e --user=root --password=secret -B $databeesten > $tijd$databeesten.sql
done

if [ -e "$tijd.tar.gz" ]
then 
echo "Verwijderen oude Zipfile"
rm -rf $tijd.tar.gz
fi

echo "Zippen van alle bestanden op $tijd"
tar zcf $tijd.tar.gz ./$tijd*
chmod 600 $tijd.tar.gz
echo "Verwijderen onnodige bestanden"
echo $(ls -sk1 ./"$tijd"*.sql)
rm -rf ./"$tijd"*.sql
backuptar=`ls -sk $tijd.tar.gz`
mysqldump -a -c --user=root --password=secret -B mysql > S$tijd.sql
chmod 600 S$tijd.sql
permissiesql=`ls -sk S$tijd.sql`
echo "`basename $0` heeft zijn taak volbracht,
Mysql is gebackupt in $backuptar en $permissiesql (getallen in kb)

mvg,
TUX"  

exit 0

And the beast shall be made legion. Its numbers shall be increased a thousand thousand fold. The din of a million keyboards like unto a great storm shall cover the earth, and the followers of Mammon shall tremble. from The Book of Mozilla, 3:31


Acties:
  • 0 Henk 'm!

  • smoking2000
  • Registratie: September 2001
  • Laatst online: 05:12

smoking2000

DPC-Crew

dpkg-reconfigure reality

Naam: check-ipcop-updates.pl
Doel: Check voor updates van IPCop Linux (Firewall distro), zodat je niet iedere keer via het web-frontend van IPCop hoeft te checken
Werking: Download update lijst, vergelijk met de laatse opgeslagen update, mail update gegevens indien nieuwer dan laatst opgeslagen update
OS: Linux Taal: Perl
Parameters: [-v <IPCop version>] [-e <Recipient Email address>]
Opmerkingen: Erg handig om in je crontab te zetten en periodiek op updates checken (ik check zelf iedere nacht @midnight)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/perl -w
#
# Retrieve the update banner from http://www.ipcop.org/patches/$version
#

use strict;
use LWP::UserAgent;
use MIME::Lite;
use File::Basename;

my $path        = dirname($0);
   $path       .= '/' if(substr($path, -1, 1) ne '/');
my $version     = '1.3.0';
my $email       = 'root@localhost';
my $latest_log  = $path.'check-ipcop-updates.latest';

if($ARGV[0]) {
        my $i = 0;
        foreach(@ARGV) {
                if($_ eq '--help' || $_ eq '-h') {
                        print_usage($version, $email);
                        exit 0;
                }
                elsif($_ eq '-e') {
                        $email = $ARGV[$i+1];
                }
                elsif($_ eq '-v') {
                        $version = $ARGV[$i+1];
                }
                $i++;
        }
}

my $data = get_banner($version);

my $subject = 'New IPCop Update';
if($data) {
        my @data = split /\r?\n/, $data;

        my %updates;
        my $newest;
        my $i = 0;
        foreach(@data) {
                if($i > 0) {
                        my @element = split /\|/;

                        $updates{$element[0]}{MD5SUM}      = $element[1];
                        $updates{$element[0]}{NAME}        = $element[2];
                        $updates{$element[0]}{DESCRIPTION} = $element[3];
                        $updates{$element[0]}{RELEASED}    = $element[4];
                        $updates{$element[0]}{URL}         = $element[5];

                        $newest = $element[0];
                }
                $i++;
        }

        my $latest = get_latest_update($latest_log);
        if($latest != $newest) {
                set_latest_update($latest_log, $newest);

                $data  = "New Update  : $updates{$newest}{NAME}\n";
                $data .= "MD5 Sum     : $updates{$newest}{MD5SUM}\n";
                $data .= "Released    : $updates{$newest}{RELEASED}\n";
                $data .= "URL         : $updates{$newest}{URL}\n";
                $data .= "Description : $updates{$newest}{DESCRIPTION}\n";

                send_mail($data, $email, $subject);
        }
}
else {
        $subject = 'Error retrieving update file';
        $data    = "There was an unexpected error while retrieving the banner from the IPCop website.\n";
        $data   .= "Possibly a loss of connection.\n";

        send_mail($data, $email, $subject);
}

################################[ Subroutines ]################################

sub send_mail {
        my $data    = $_[0];
        my $email   = $_[1];
        my $subject = $_[2];

        my $msg = MIME::Lite->new(
                From    => 'IPCopUpdateChecker@localhost',
                To      => $email,
                Subject => $subject,
                Type    => 'TEXT',
                Data    => $data
        );
        $msg->send;
}

sub get_banner {
        my $version = $_[0];

        my $ua = LWP::UserAgent->new;
           $ua->agent("IPCopUpdateChecker/1.0");

        my $url = "http://www.ipcop.org/patches/$version";
        my $req = HTTP::Request->new(GET => $url);

        my $res = $ua->request($req);
        if($res->is_success) {
                return $res->content;
        }
        else {
                return undef;
        }
}

sub set_latest_update {
        my $file   = $_[0];
        my $latest = $_[1];

        open(F, "> $file") || die "Cannot write latest file ($!)";
        print F $latest;
        close F;
}

sub get_latest_update {
        my $file = $_[0];

        my $latest;
        open(F, $file) || die "Cannot open latest file ($!)";
        while(<F>) {
                chomp;
                $latest = $_;
        }
        close F;

        return $latest;
}

sub print_usage {
        my $version = $_[0];
        my $email   = $_[1];

        print "Usage: $0 [OPTIONS]\n\n";
        print "-v\tIPCop version (default: $version)\n";
        print "-e\tRecipient Email address (default: $email)\n";
        print "-h\tPrint this text\n";
}

[ Voor 10% gewijzigd door smoking2000 op 04-02-2004 14:32 ]

| [Folding@Home] Announce: Client monitor voor Linux (fci) | fci-1.8.4 | Fatal Error Group |


Acties:
  • 0 Henk 'm!

Anoniem: 60780

Een package management systeem voor de arme man

Als je bij het compileren van tar-balls aan het configure-script de optie
code:
1
prefix=/home/`whoami`/<packagenaam>
toevoegt, dan worden alle te installeren bestanden in die directory gezet. Zo kun je gemakkelijk met


code:
1
2
cd /home/`whoami`/<packagenaam>
find ./ -type f | sed -e 's/^\.//g' > lijst_met_bestanden.txt
een lijst van de geinstalleerde bestanden maken. Sla deze lijst ergens veilig op onder een logische naam. Bijvoorbeeld de tar-ball-naam met de extensie .pkg of iets dergelijks.
Om de bestanden in je systeem te integreren, kun je de volgende commando's gebruiken:
code:
1
2
cd /home/`whoami`/<packagenaam>
find ./ -type f -exec cp --parents '{}' /usr ';'

Als je je bestanden zat bent, kun je ze weer ontinstalleren met behulp van je lijst met bestanden die je zojuist hebt gemaakt:

code:
1
for i in `cat lijst_met_bestanden.txt`; do rm "/usr"$i; done;

Bij het op deze manier installeren van libraries wel even een ldconfig ertegenaan gooien, anders werkt het niet.
Een ding waar je ook op moet letten is wanneer je werkt met pkgconfig. De .pc-bestanden bevatten hardcoded paden naar de bestanden waar make install de bestanden heeft geinstalleerd. Deze paden moet je dus ook even met de hand veranderen, anders gaat pkgconfig zeuren bij het installeren van packages die het zojuist geinstalleerde packet als dependency hebben.

Reuze handig voor LFS-gebruikers onder ons. Jammer dat ik het pas heb uitvonden nadat LFS en BLFS klaar had hahaha.

Acties:
  • 0 Henk 'm!

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Anoniem: 60780 schreef op 08 februari 2004 @ 22:03:
Reuze handig voor LFS-gebruikers onder ons. Jammer dat ik het pas heb uitvonden nadat LFS en BLFS klaar had hahaha.
offtopic:
Ik gebruik altijd Stow om verschillende pakketten uit elkaar te houden.

"He took a duck in the face at two hundred and fifty knots."


Acties:
  • 0 Henk 'm!

Anoniem: 60780

Ik heb stow ook bekeken ja, maar al die symlinks vind ik maar niks :)

Acties:
  • 0 Henk 'm!

  • Stacium
  • Registratie: Februari 2001
  • Niet online

Stacium

Perfect Molecular Chaos

bras schreef op 08 december 2003 @ 22:33:
Naam: mvwrap
Doel: Meerdere files/directories makkelijk renamen
Werking: mvwrap -h
OS: *nix en windows met cygwin Taal: Perl
Parameters: mvwrap -h
Opmerkingen: Helaas niet van mij ;) maar wel erg handig...

http://www.wizeazz.nl/ward/scripts/explain/mvwrap.shtml
ik gebruik deze sinds jij 'm noemde, echt superhandig _/-\o_

met name wanneer je even snel de bestandsnamen van mp3tjes wilt wijzigen, kan je gewoon alle opties van vi(m) gebruiken

thx :Y)

It seemed like a good idea at the time


Acties:
  • 0 Henk 'm!

Anoniem: 13397

Twee scripts voor het aansturen van mencoder. Erg specifiek voor mijn situatie geschreven, maar misschien heeft iemand er wat aan :?

Naam: mencoder_wrapper.sh
Doel: alle settings verzorgen en mencoder starten
Werking: laadt audio settings, start mencoder en zet audio settings terug na voltooiing opname
OS: Linux
Taal: Bash
Configuratie: zie script
Parameters: recording_time, channel, filename
Opmerkingen: link

Naam: program_vcr.sh
Doel: simpele vcr interface
Werking: leest .xawtv en laat de user interactief channel, recording time, start time en filename kiezen
OS: Linux
Taal: Bash
Configuratie: zie script
Parameters: -geen-
Opmerkingen: gejat van programma 'vcr' en aangepast; link

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Naam: firebird firefox.sh
Doel: Firefox start script.
Als firefox al draait wordt de url in een tab geopend
anders wordt firebird gestart met de url.
Werking: zie onderstaande code
Configuratie: path naar firefox aanpassen (regel 14)
OS: Linux Taal: bash
Parameters: url of bestand
Opmerkingen: Een beetje van mezelf en een beetje van het mozremote.pl script voor gaim. :P
edit:
Ik kan dat mozremote script niet meer terug vinden, maar bij google komen er meer (betere?) van dit soort scripts bovendrijven.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
#firefox startscript.

absoluutPad()
{
    relpath="$1"
    D=`dirname "$relpath"`
    B=`basename "$relpath"`
    abspath="$(cd "$D" 2>/dev/null && pwd || echo "$D")/"$B""
    echo "$abspath"
}

#waar je firefox hebt staan
export MOZILLA_FIVE_HOME=$HOME/software/firefox

if [ -e "$1" ] #kijken of het toevallig een bestand is
then
    url=$(absoluutPad "$1") #een lokaal bestand
else
    url="$1" #een url
fi

firefox_running=`ps -U $USER|grep firefox-bin` #is firefox running?

if [ -z "$firefox_running" ] #not nill
then
    $MOZILLA_FIVE_HOME/firefox "$url"
else
    $MOZILLA_FIVE_HOME/firefox -remote "openURL($url,new-tab)"
fi

Acties:
  • 0 Henk 'm!

  • 7_feet_up
  • Registratie: November 2003
  • Laatst online: 12-08-2023
Naam: wma2mp3
Doel: wma naar mp3 converteren
Werking: mplayer converteert wma naar wav, vervolgens converteert lame wav naar mp3
OS: linux Taal: perl
Afhankelijkheden: mplayer en lame
Parameters: bronbestand
Opmerkingen: handig om gedownloade wma-bestandjes in xmms ipv mplayer te kunnen afspelen

code:
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl -w
use strict;
 
foreach my $file (@ARGV) {
next if ($file !~ /\.wma$/i);
my $base = $file; $base =~ s/\.wma$//i;
system "mplayer \"$file\" -ao pcm -aofile \"$base.wav\"";
system "lame -h \"$base.wav\" \"$base.mp3\"";
unlink("$base.wav");
print "$base.wma geconverteerd naar mp3.\n";
}

Acties:
  • 0 Henk 'm!

  • smoking2000
  • Registratie: September 2001
  • Laatst online: 05:12

smoking2000

DPC-Crew

dpkg-reconfigure reality

Heb je hier geen (hoorbaar) kwaliteitsverlies?

| [Folding@Home] Announce: Client monitor voor Linux (fci) | fci-1.8.4 | Fatal Error Group |


Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 20-05 01:14
smoking2000 schreef op 16 februari 2004 @ 11:55:
[...]
Heb je hier geen (hoorbaar) kwaliteitsverlies?
Ik heb net met dit script een hele zooi wma's omgezet, naar het MP3 formaat en ik moet zeggen dat ik echt geen verschil kan horen. :)

Het liefst heb ik muziek in ogg formaat, maar dat slikt mijn MP3 speler niet helaas. Mensen die dit script willen aanpassen voor ogg bestanden moeten deze regel het scriptje ff aanpassen:
system "lame -h \"$base.wav\" \"$base.mp3\"";
naar
system "oggenc -o \"$base.ogg\" \"$base.wav\"";

[ Voor 8% gewijzigd door Mac_Cain13 op 16-02-2004 13:13 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

hoppa :Y)

Een script om bestanden te vinden die wel in de ene, maar niet in de andere directory staan. Handig als je een groot aantal fotos wil thumbnailen; maar niet zeker weet of er voor elk van de 100.000 files een thumbnail bestaat :)
getDirectoryDifferences.sh
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#/bin/sh
# Return a list of files which are present in $1, but not in $2
# Filename must match $3, use \* for all files
theRandomNumber=$RANDOM

if [ -z $1 ] || [ -z $2 ]; then
        echo Specify a directory!
        exit 1;
fi

if [ -d $1 ] && [ -d $2 ] ; then
        cd $1
        find $3 >/tmp/listing1.$theRandomNumber

        cd $2
        find $3 >/tmp/listing2.$theRandomNumber

        diff /tmp/listing1.$theRandomNumber /tmp/listing2.$theRandomNumber --initial-tab | grep '<'|awk -F\\t '{print $2}'

        rm /tmp/listing1.$theRandomNumber
        rm /tmp/listing2.$theRandomNumber
else
        echo Directory is not valid!
        exit 1;
fi

[ Voor 3% gewijzigd door Spider.007 op 18-03-2004 17:10 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 13-06 09:54

Niek

f.k.a. The_Surfer

Eens kijken wat ik nog heb liggen...

Naam: radio.sh
Doel: MP3 radio streams luisteren (op dit moment 538, Yorin FM, Bash.org - geen zin meer in te bouwen :P)
Taal: Bash
Parameters: Geen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh

# (C)opyright 2004 Niek van der Maas

function start {
  clear
  echo "Gebruik:"
  echo "1 - Radio 538"
  echo "2 - Yorin FM"
  echo "3 - Bash.org"
  echo "q - Stop spelen"
  echo "x - Afsluiten"

  read -n1 invoer
  echo

  case "$invoer" in
    "1" ) mplayer "http://ms.stream.garnierprojects.com/radio538" -cache  100 > /dev/null 2>&1; start;;
    "2" ) mplayer "http://217.118.160.41/Yorin FM broad" -cache 200 > /dev/null 2>&1; start;;
    "3" ) mplayer -playlist http://radio.bmj.net:8000/listen.pls -cache 200 > /dev/null 2>&1; start;;
    "q" ) kill $! > /dev/null 2>&1; start;;
    "x" ) kill $! > /dev/null 2>&1; exit;;
  esac
}

start


Naam: mzk.sh
Doel: Manzonderkop.be filmpjes/flash URL's achterhalen
Taal: Bash
Parameters: MZK post ID
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#/bin/bash
# www.manzonderkop.be snelstart script
# Door Niek van der Maas (n.v.d.maas@hccnet.nl)

echo "Opening: http://www.manzonderkop.be/Post/?P_ID=$1"

MZKFILE=$(lynx -source http://www.manzonderkop.be/Post/?P_ID=$1 | sed '/EMBED/!d' | sed s/.*\<EMBED\ src=\"//g | sed s/\".*//g)

if [ "$MZKFILE" == "" ]
then
        echo "Kan niet afspelen."
else
        echo "Playing: $MZKFILE"
        if [ $(echo $MZKFILE | grep -c swf\$) == "1" ]
        then
                gflashplayer "$MZKFILE"
        else
                mplayer "$MZKFILE"
        fi
fi


Naam: ifilm-{asf,rm}.sh
Doel: IFILM movies afspelen zonder de reclames ervoor en erna
Taal: Bash
Parameters: IFILM movie ID (mouseover de links op ifilm.com)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
#
# IFILM ASF streams ripper
# Copyright 2004, Niek van der Maas
#
# Usage: ./ifilm-asf.sh <filmid>

IFILM_FILE=$(lynx -source "http://www.ifilm.com/media/getmetafile.asx?pinfo=fid:$1|mt:asf|bw:200" | sed s/.*HREF=\"//g | sed s/\".*//g)
echo "Playing: $IFILM_FILE"
mplayer -cache 1024 "$IFILM_FILE"

#!/bin/bash
#
# IFILM Real streams ripper
# Copyright 2004, Niek van der Maas
#
# Usage: ./ifilm-rm.sh <filmid>

IFILM_FILE=$(lynx -source "http://www.ifilm.com/media/getmetafile.asx?pinfo=fid:$1|mt:rm|bw:200" | sed s/.*src=\"//g | sed s/\".*//g)
echo "Playing: $IFILM_FILE"
mplayer -cache 1024 "$IFILM_FILE"

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Acties:
  • 0 Henk 'm!

Anoniem: 25021

Naam: cvspublish
Doel: Automagisch publishen van websites vanuit CVS
Werking: aanroepen via loginfo
OS: Unix Taal: Bash
Opmerkingen: er word en een test site gepublished en een productie site.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
# $Id: cvspublish,v 1.1 2004/04/08 13:33:52 compukid Exp $
# Automatic website publishing script
# Written by: Daniel van Eeden <daniel_e@dds.nl>

# add this line to $CVSROOT/CVSROOT/loginfo:
# DEFAULT (/path/to/this_file %{svV})

s=`echo $1 | cut -d, -f1`
v=`echo $1 | cut -d, -f2`
V=`echo $1 | cut -d, -f3`

module=`echo $s | cut -d\  -f1`
file=`echo $s | cut -d\  -f2`

logfile=/tmp/cvslog
testdir=/tmp/wwwtest
cvsroot=/tmp/cvstest
wwwdir=/tmp/wwwroot
tempdir=/tmp/cvstmp

echo "### Running update for $module ###" >> $logfile
echo "$file new_rev: $v old_rev: $V" >> $logfile

# update $testdir
[ -e $testdir ] || mkdir -p $testdir
cd $testdir
rm -rf $module
cvs -d $cvsroot export -D now $module

# update $tempdir
[ -e $tempdir ] || mkdir -p $tempdir
cd $tempdir
rm -rf $module
cvs -d $cvsroot export -r prod $module

# update $ wwwdir
[ -e $wwwdir/$module ] || mkdir -p $wwwdir/$module
cp $tempdir/$module/$file $wwwdir/$module/$file

# cleanup
rm -rf $tempdir

[ Voor 5% gewijzigd door Anoniem: 25021 op 14-04-2004 18:53 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17-06 20:07

Robtimus

me Robtimus no like you

Naam: dirpurge
Doel: directories "purgen" van files ouder dan een bepaald aantal dagen
Werking: dirpurge <aantal dagen> <directory>
OS: Unix Taal: Bash
Opmerkingen: Er is ook mdirpurge dat recursief dirpurge kan aanroepen: mdirpurge <aantal dagen> <basedir> <directorynamen>. Zoekt in basedir alle directories met de gegeven namen (>= 1) en roept voor die dirs dirpurge op.
Erg handig voor het purgen van bv FTP upload dirs.

Zie voor meer info en downloads http://dirpurge.sourceforge.net/

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Anoniem: 82791

Net gemaakt scriptje, eigenlijk een van mijn eerste. (ookgemaakt om wat dingen uiteproberen)

Naam:mplayer.pl
Doel: Mplayer opstarten met de juiste audio stream /track zonder dat je een lang comando hoeft te typen / onhouden. En het start meteen de goede audio stream (itt de GUI).
Taal:Perl
Parameters: bestand, audiostream, optioneel videostreaM
Config: Set $mplayer zoals je mplayer normaal uitvoert

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl
#script dat mplayer laad met de juiste audio track
#gebruik: mplayer.pl <bestand> <audio_track> [<video_stream>]

#[config]

$mplayer = "mplayer -ao oss";

#[main]

if(!$ARGV[2]){
 $vid=0;
}else{
 $vid=$ARGV[2];
}

&run($mplayer, $ARGV[0], $ARGV[1], $vid);
print "\nexuction secusesvol\n";


#[subs]

sub run {
 system $_[0]." ".$_[1]." -vid ".$_[3]." -aid ".$_[2];
 return 1;
}

Acties:
  • 0 Henk 'm!

Anoniem: 51706

Naam: (rc)dialdsl
Doel: Inbellen op een DSL netwerk via het pptp protocol
OS: SuSE
Taal: bash
Configuratie:
OPTIONS (locatie file met user name en login) MODEM (IP DSL modem) INET (wan IP adress)
Parameters: controlleer evt programma locaties
Opmerkingen: Niks spreciaal, er moet nog het een en ander aan gebeuren
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh
#===============================================================================
# /*
#  * SuSE Linux
#  * Author: Michiel van Hulst <michiel@vanhulst.mine.nu>
#  * Description: Open a DSL connection to the WWW trough PPTP
#  * License: GPL
#  * Version: 0.9
#  * Log: Simple script for use one a SuSE machine, still in urly stage..
#  *
#  */

# Determine the base and follow a runlevel link name...
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

# Shell functions from /etc/rc.status...
. /etc/rc.status

# Program locations...
PPTP=/usr/sbin/pptp
KILL=/usr/bin/killall
IFCONFIG="/sbin/ifconfig"
GREP="/bin/grep"

# Settings...
OPTIONS=/etc/ppp/options.dsl
MODEM="10.0.0.138"
INET="212.123.182.123"

# Test programs...
test -x $PPTP || exit 5
test -x $KILL || exit 5

# Reset status..
rc_reset

case "$1" in
      start)
       # Dial modem with options and setup connection
       echo -n "Dialing in on to the WWW..."
       $PPTP $MODEM file $OPTIONS > /dev/null 2>&1 &
       rc_check
       rc_status -v
       ;;
      stop)
       # Kill all pptp processes and lose connection
       echo -n "Cutting off WWW conection"
       $KILL pptp > /dev/null 2>&1
       rc_check
       rc_status -v
       ;;
      restart|reconnect)
       echo "Restarting network connection"
       $0 stop
       $0 start
       rc_status
       ;;
      status)
       echo -n "Checking for connection"
       # use this if no fixed ip and set $OK to "1"
       # OK=`$IFCONFIG | $GREP -c -e ppp`

       # Check status by checking the network interfaces
       OK=`$IFCONFIG | $GREP -c -e ppp -e $INET`
       if [ $OK = "2" ]; then
         rc_status -v
       else
         rc_failed
         rc_status -v
       fi
       ;;
      *)
       echo "Usage: $0 {start|stop|restart|reconnect|status}"
       exit 1
       ;;

esac

exit 0

## EOF ##

Naam: reconnect
Doel: DSL verbinden herstellen waneer deze dood is
OS: SuSE
Taal: bash
Configuratie:
HOST (hostname) INET (wan IP) DO (locatie pptp script) LOG (log bestandsnaam/locatie)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
#-------------------------------------------------------------------------------

# Programs locations...
IFCONFIG="/sbin/ifconfig"
GREP="/bin/grep"
ECHO="/bin/echo"

# Settings...
#-------------------------------------------------------------------------------
HOST=hostname.org
INET="111.222.333.444"
DO="/usr/sbin/dialdsl"
LOG="/var/log/dsl"
DATE="[`date +%d-%m-%y-%H:%M:%S`]"

# Do trick...
#
TOTAL=`$IFCONFIG | $GREP -c $INET`
if [ $TOTAL = "0" ]; then
  $ECHO "$DATE - CONNECTION RESTARTED" >> $LOG
  $ECHO "CONNECTION LOST, TRYING TO RECONNECT"
  $ECHO
  $DO restart > /dev/null 2>&1 && $ECHO "CONNECTION RESTORED ($HOST)"
else
  $ECHO "$DATE - CONNECTION IS UP" >> $LOG
fi

Omschrijving:
/etc/crontab regel voor het aanschoppen van het reconnect script om de x min.
code:
1
2
# Check if dsl connection is up, if not try to reconnect
*/3 * * * *     root  /usr/sbin/reconnect

[ Voor 56% gewijzigd door Anoniem: 51706 op 15-04-2004 09:32 . Reden: Added: reconnect script en cron regel ]


Acties:
  • 0 Henk 'm!

  • frim
  • Registratie: Augustus 2001
  • Niet online
Anoniem: 82791 schreef op 14 april 2004 @ 20:32:
Net gemaakt scriptje, eigenlijk een van mijn eerste. (ookgemaakt om wat dingen uiteproberen)

Naam:mplayer.pl
Doel: Mplayer opstarten met de juiste audio stream /track zonder dat je een lang comando hoeft te typen / onhouden. En het start meteen de goede audio stream (itt de GUI).
Taal:Perl
Parameters: bestand, audiostream, optioneel videostreaM
Config: Set $mplayer zoals je mplayer normaal uitvoert

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl
#script dat mplayer laad met de juiste audio track
#gebruik: mplayer.pl <bestand> <audio_track> [<video_stream>]

#[config]

$mplayer = "mplayer -ao oss";

#[main]

if(!$ARGV[2]){
 $vid=0;
}else{
 $vid=$ARGV[2];
}

&run($mplayer, $ARGV[0], $ARGV[1], $vid);
print "\nexuction secusesvol\n";


#[subs]

sub run {
 system $_[0]." ".$_[1]." -vid ".$_[3]." -aid ".$_[2];
 return 1;
}
daarvoor heb je ook een .mplayer bestand in je ~ heh ;)

Acties:
  • 0 Henk 'm!

Anoniem: 13055

Nuja, ff m'n scripts dir doorbaggeren. Had ik al gezegt dat je met zenity allerlei dingen kan integreren in je desktop?

Naam: dhcp-lease.sh
Doel: Het verkrijgen van een nieuwe DHCP lease
Werking: Run het script, en wacht op het nieuwe IP adres.
OS: Linux Taal: bash
Configuratie: N/A
Parameters: N/A
Opmerkingen: Maakt gebruik van zenity om mooie gtk2 dialoogjes te laten zien terwijl je aan het wachten bent op een nieuw IP adres.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh
 
TEXT="Successfully requested DHCP lease\nBound to"
 
(echo "#Requesting DHCP lease" ; sudo /sbin/pump -i eth0 --release ; \
sudo /sbin/pump -k  ; sudo /sbin/pump -i eth0 2>&1 ; echo "100") | \
zenity --progress --title="DHCP request" --auto-close --pulsate
OUT="$(sudo /sbin/pump -i eth0 --status | head -1 | grep Device | awk '{print $1}')"
if [ x"${OUT}" == x"Device" ]; then
        IP="$(/sbin/ifconfig eth0|grep inet\ .*|cut -d: -f2|cut -d" " -f1)"
        zenity --title="Success" --info --text="$TEXT ${IP}"
        # Enable onderstaande regel, zodat je firewall rules
        # worden ge-update nadat je een nieuwe lease hebt.
        # Natuurlijk wel ff aanpassen naar je eigen firewall script ;)
        # sudo /usr/lib/wrappers/firewall.sh normal
else
        zenity --title="Failure" --warning --text="Failed to request DHCP lease"
fi
exit 0


Woei, ook het cachen van je ssh public/private keys kan "geintegreerd" worden met zenity :P
Naam: agent-wrapper.sh
Doel: Cache de passphrases van je ssh keys in ssh-agent
Werking: Run agent-wrapper.sh; Deze zal om de passphrases van je keys vragen, waarna ze worden toegevoegt aan je cache. Vervolgens worden de parameters van ssh-agent weggeschreven in ${HOME}/.agent`hostname`-sh. Deze dient included te worden in bijvoorbeeld je ${HOME}/.profile of ${HOME}/.bashrc. Hierna zou je gebruik moeten kunnen maken van je gecachede ssh passphrases.
OS: Linux / FreeBSD / Solaris Taal: bash
Configuratie: KEY_BASE moet wijzen naar de dir waar je keys instaan; KEYS is een spatie separated lijst met keys die gecached moeten worden. AGENT_INCLUDE is de file die door het script gegenereerd word om de settings van ssh-agent in op te slaan.
Parameters: N/A
Opmerkingen: Dit script kan best lastig zijn om aan de praat te zwengelen. Ook is het niet 100% bugvrij. Mocht er nou iets hopeloos misgaan met dit script, stop dan alle ssh-agent processen, donder je AGENT_INCLUDE file weg en probeer opnieuw. Als alles goed werkt, krijg je mooie gtk2 dialoogjes die om je passphrase vragen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
                                                                                
KEY_BASE="${HOME}/.ssh"
KEYS="id_dsa.internal id_dsa.firewall id_dsa.external"
                                                                                
SSH_AGENT="/usr/bin/ssh-agent"
SSH_ADD="/usr/bin/ssh-add"
AGENT_INCLUDE="${HOME}/.agent-$(hostname)-sh"
                                                                                
SSH_AUTH_SOCK=""
SSH_AUTH_PID=""
                                                                                
function is_running {
        PID=$(ps -ef|grep ${1}|grep -v grep|awk '{print $2}')
        if [ x"${PID}" != x"" ]; then
                echo "1"
        else
                echo "0"
        fi
}
                                                                                
function start-agent {
        OUT=$(cd /tmp ; ${SSH_AGENT})
        [ -f ${AGENT_INCLUDE} ] && rm -f ${AGENT_INCLUDE}
        for line in ${OUT}; do
                IS_VAR=$(echo ${line} | grep "=")
                if [ x"${IS_VAR}" != x"" ]; then
                        TMP=$(echo ${IS_VAR} | grep SOCK|sed -e "s/;//")
                        if [ x"${TMP}" != x"" ]; then
                                SOCK=$(echo ${TMP} | cut -d= -f2)
                                echo ${TMP} > ${AGENT_INCLUDE}
                                export SSH_AUTH_SOCK=${SOCK}
                        fi
                        TMP=$(echo ${IS_VAR} | grep PID|sed -e "s/;//")
                        if [ x"${TMP}" != x"" ]; then
                                PID=$(echo ${TMP} | cut -d= -f2)
                                echo ${TMP} >> ${AGENT_INCLUDE}
                                export SSH_AUTH_PID=${PID}
                        fi
                fi
        done
        echo "export SSH_AUTH_SOCK SSH_AGENT_PID" >> ${AGENT_INCLUDE}
        echo "Started ssh-agent[${PID}]"
}
                                                                                
if [ -f "${AGENT_INCLUDE}" ]; then
        source ${AGENT_INCLUDE}
fi
if [ "$(is_running "ssh-agent")" == "1"  ]; then
        CAN_CONNECT=$(ssh-add -l 2>&1|grep "Could")
        if [ x"${CAN_CONNECT}" != x"" ]; then
                ps -ef|grep ssh-agent|grep -v grep|awk '{print $2}'|xargs kill
                start-agent
        fi
        f=0
        for key in ${KEYS}; do
                IS_LOADED=$(${SSH_ADD} -l | grep ${key})
                if [ x"${IS_LOADED}" = x"" ]; then
                        SSH_ASKPASS="/usr/lib/wrappers/ssh-add-askpass.sh" \
                            ${SSH_ADD} ${KEY_BASE}/${key} < /dev/null
                        [ ${?} != 0 ] && f=1
                fi
        done
        [ ${f} == 0 ] && zenity --title="Success" --info \
                 --text="All ssh passphrases cached successfully" || \
                zenity --title="Error" --warning --text="Error adding ssh passphrases to cache"
else
        start-agent
        f=0
        for key in ${KEYS}; do
                ${SSH_ADD} ${KEY_BASE}/${key} < /dev/null
                [ ${?} != 0 ] && f=1
        done
        [ ${f} == 0 ] && zenity --title="Success" --info  \
                   --text="All ssh passphrases cached successfully" || \
                zenity --title="Error" --warning --text="Error adding ssh passphrases to cache"
fi


bijbehorend ssh-add-askpass.sh script (zie regel 59 in bovenstaand script). Mijn code gaat ervanuit dat deze in /usr/lib/wrappers staat, maar dat hoeft natuurlijk niet. Wel ff in bovenstaand script het juiste pad opgeven naar dit script dus...
code:
1
2
3
4
5
6
7
#!/bin/sh
 
if [ ${#} -ne 1 ]; then
        echo "Usage: `basename ${0}` <key name>"
        exit 1
fi
zenity --title="Enter passphrase" --entry --hide-text --text="${1}"


Naam: connect.sh
Doel: Zet een terminal sessie op met een remote host, include daarbij bovenstaand gegenereerde agent file
Werking: connect.sh [proto] <username> <host> [port].
OS: Linux/FreeBSD/Solaris Taal: bash
Configuratie: N/A
Parameters: proto is protocol (ssh, telnet of rsh), de rest lijkt me vrij triviaal...
Opmerkingen: Leuk om vanuit je desktop menu naar remote hosts te connecten. Een aantal voorbeeld desktop entries (uit een xfce4 menu):
code:
1
2
<app name="ran"  cmd="gnome-terminal -e '/usr/lib/wrappers/connect.sh ssh r3boot ran'" />
<app name="shipo"  cmd="gnome-terminal -e '/usr/lib/wrappers/connect.sh telnet r3boot shipo'" />


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh
 
[ -f "${HOME}/.agent-$(hostname)-sh" ] && source ${HOME}/.agent-$(hostname)-sh
 
if [ ${#} -lt 3 ]; then
        echo "Usage: $(basename ${0}) <protocol> <user> <host> <port>"
        exit 1
fi
 
CONN_STR=""
 
case "${1}" in
        ssh)
                if [ x"${4}" != x"" ]; then
                        CONN_STR="ssh -p ${4} -l ${2} ${3}"
                else
                        CONN_STR="ssh -l ${2} ${3}"
                fi
                ;;
        rsh) CONN_STR="rsh -l ${2} ${3}" ;;
        telnet) CONN_STR="telnet -l ${2} ${3}" ;;
esac
 
${CONN_STR}
 
exit 0


Ok, en de laatste krijgen jullie kado, omdat het donderdag is (==bijna weekend :P)
Naam: kernel-build.sh
Doel: Wrap het bouwen van een kernel in een zenity dialoogje
Werking: Run het script en wacht tot je kernel klaar is.
OS: Linux Taal: bash
Configuratie: Geen
Parameters: Geen
Opmerkingen: Script is nog niet af, en heeft nog een bug: als je op cancel drukt, gebeurt er niets bijvoorbeeld (jah, het dialoogje word afgesloten, maar niet veel meer iig)... Kill dan alle make processen (voor je kernel compile) en herstart.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
 
KERNDIR="/usr/src/linux"
pushd ${KERNDIR} &> /dev/null
VERSION=`cat Makefile |grep "^VERSION"|awk '{print $3}'`
PATCHLEVEL=`cat Makefile|grep "^PATCHLEVEL"|awk '{print $3}'`
SUBLEVEL=`cat Makefile|grep "^SUBLEVEL"|awk '{print $3}'`
EXTRAVERSION=`cat Makefile|grep "^EXTRAVERSION"|awk '{print $3}'`
RELEASE="${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}"
LOG="/usr/src/kernel/${RELEASE}-build.log"
[ -f "${LOG}" ] && (rm -f ${LOG} ; touch ${LOG})
 
popd &>/dev/null
(if [ -d ${KERNDIR} ]; then
        pushd ${KERNDIR} &>/dev/null
        echo "#building linux-${RELEASE}"
        make bzImage >> ${LOG} 2>&1
        echo "#building modules for linux-${RELEASE}"
        make modules >> ${LOG} 2>&1
        echo "#installing modules"
        make modules_install >> ${LOG} 2>&1
        echo "#installing kernel"
        cp -v arch/i386/boot/bzImage /boot/vmlinuz-${RELEASE} >> ${LOG} 2>&1
        cp -v System.map /boot/System.map-${RELEASE} >> ${LOG} 2>&1
        popd &> /dev/null
        echo "#build of linux-${RELEASE} finished"
else
        echo "#cannot find KERNDIR"
fi ; echo "100" ) | zenity --progress --title="Building linux-${RELEASE}" --width=250 --pulsate
exit 0

[ Voor 59% gewijzigd door Anoniem: 13055 op 15-04-2004 10:23 ]


Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 03-06 06:47

ATS

Naam: backup
Doel: backup draaien
Werking: maakt incrementiele en volledige backups volgens een weekelijks/maandelijks rotatieschema
OS: Unix Taal: sh
Configuratie: Paar parameters aan het begin van het script
Parameters:
Opmerkingen: Aanroepen vanuit cron.daily. De `mount /backup` (en de unmount) zijn natuurlijk optioneel. Normaal gesproken is mijn backupschijf niet gemount om veiligheidsredenen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
# and André Somers <andre@vliegt.nl>

#Change the 6 variables below to fit your computer/backup

COMPUTER=andre                                   # name of this computer
DIRECTORIES="/home"                              # directories to backup
BACKUPDIR=/backup                                # where to store the backups
TIMEDIR=/backup/last-full                        # where to store time of full backup
TAR=/bin/tar                                     # name and location of tar
SKIPFILE=/home/andre/no_backup                   # name and location of file containing patterns to skip

#You should not have to change anything below here, but you may want to comment/uncomment the mounting of the backup partition.

PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a`                          # Day of the week e.g. Mon
DOM=`date +%d`                          # Date of the Month e.g. 27
#DOM="01"
DM=`date +%d%b`                 # Date and Month e.g. 27Sep

# See if we need to skip anyting
if [$SKIPFILE = ""]; then
    SKIP=""
else
    SKIP="-X "$SKIPFILE
    echo skipping $SKIP
fi

# On the 1st of the month a permanet full backup is made
# Every Monday a full backup is made - overwriting last Mondays backup
# The rest of the time an incremental backup is made. Each incremental
# backup overwrites last weeks incremental backup of the same name.
#
# if NEWER = "", then tar backs up all files in the directories
# otherwise it backs up files newer than the NEWER date. NEWER
# gets it date from the file written every Monday.


# Monthly full backup
mount /backup

if [ $DOM = "01" ]; then
        NEWER=""
        $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DM.tar $SKIP $DIRECTORIES
fi

NOW=`date +%d-%b`
echo $NOW

# Weekly full backup
if [ $DOW = "Mon" ]; then
        NEWER=""
        NOW=`date +%d-%b`

        # Update full backup date
        echo $NOW > $TIMEDIR/$COMPUTER-full-date
        $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $SKIP $DIRECTORIES

# Make incremental backup - overwrite last weeks
else

        # Get date of last full backup
        NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"
        $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $SKIP $DIRECTORIES
fi

umount /backup

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 17-06 09:04

WHiZZi

Museumdirecteurtje

Naam: -
Doel: Het openen/sluiten/status opvragen van een portforward in een NAT-omgeving dmv iptables
Werking: Portforward opzetten of sluiten en status dmv iptables-save
OS: GNU/Linux Taal: Bash
Configuratie: Variabelen aanpassen (incoming, outgoing, secured), path naar iptables/iptables-save en je internet interface
Parameters: start/stop/status/help
Bugs: Het is een erg simpel scriptje
Opmerkingen: Lekker snel als je even een poortje wil forwarden. Zelfs af te schermen op IP basis. Onderstaand voorbeeld opent poort 5900 naar 10.0.0.12 poort 5900 (VNC).

Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/sh

INCOMING="5900"                         # Welke poort moet openstaan
OUTGOING="10.0.0.12:5900"           # Waarnaartoe
SECUREDIP="0/0"              # Welk IP(-range) mag dat ? 0/0 = allemaal, anders IP
IFACE="ppp0"                            # Internet interface
IPTABLES="/sbin/iptables"               # Path naar iptables
IPTABLESSAVE="/sbin/iptables-save"      # Path naar iptables-save


ARGV="$@"

case $ARGV in
start)
  if [ `$IPTABLESSAVE | /bin/grep -c $INCOMING` != '0' ] ; then
  echo "--[ Port $INCOMING already opened to $OUTGOING ]--"
  else
  echo "--[ Opening $INCOMING to $OUTGOING ]--"
  $IPTABLES -t nat -A PREROUTING -s $SECUREDIP -i $IFACE -p tcp --dport $INCOMING -j DNAT --to-destination $OUTGOING
  fi
;;
stop)
  if [ `$IPTABLESSAVE | /bin/grep -c $INCOMING` != '0' ] ; then
  echo "--[ Closing port $INCOMING to $OUTGOING ]--"
  $IPTABLES -t nat -D PREROUTING -s $SECUREDIP -i $IFACE -p tcp --dport $INCOMING -j DNAT --to-destination $OUTGOING
  else
  echo "--[ Port NOT open ]--"
  fi
;;
status)
  STATUS="--[ Port $INCOMING closed ]--"
  if [ `$IPTABLESSAVE | /bin/grep -c $INCOMING` != '0' ] ; then
        STATUS="--[ Port $INCOMING opened to $OUTGOING ]--"
  fi
  echo $STATUS
;;
help|*)
    echo "usage: $0 start/stop/help
        start ) To start this firewall chain
        stop  ) To close this firewall chain
        status) To get the status of this rule
        help  ) This help"
;;
esac

[ Voor 27% gewijzigd door WHiZZi op 19-04-2004 17:20 . Reden: lichte code wijziging ;) ]

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Stel, je zit op een Solaris bak waar geen `locate` commando op bestaat; en je hebt geen rootrechten of mogelijkheden om te compilen.. Wat doe je dan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/sh
# Emulate Linux `locate` command
# Made by Spider.007
#
# v1.2 added compression functionality
# v1.1 added automatic update if database doesn't exist
# v1.0 initial release

echo Database was last updated `ls -al $HOME/.locate_db|awk '{print $6,$7,$8}'`
if [ "$1" = "--update" ] || [ ! -f$HOME/.locate_db ]
then
        echo Updating the database...

        # make temporary pipe so we can filter the output of the find command
        mkfifo /tmp/updateDB.stderr

        # filter the pipe, and store the PID of the process (since it will be backgrounded)
        sed 's/^find/locate/g' /tmp/updateDB.stderr &
        sedPID=$!

        # perform the actual find and pipe stderr to the temporary pipe
        find / 2>/tmp/updateDB.stderr|gzip -1c >$HOME/.locate_db-new

        # kill the pipe-listener, remove the pipe, and overwrite the current database with the new one
        kill $sedPID 2>/dev/null
        rm /tmp/updateDB.stderr
        mv $HOME/.locate_db-new $HOME/.locate_db
        echo Updating done
else
        if [ "$*" != "" ]
        then
                gzip -dc $HOME/.locate_db|grep "^$PWD"|/usr/xpg4/bin/grep -F "$*"
        else
                gzip -dc $HOME/.locate_db|grep "^$PWD"
        fi
fi
Met netjes commentaar dus je zou er nog iets van moeten kunnen leren :Y)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:04
Ik heb dit topic al enige tijd gevolgd en heb nu eindelijk een eigen script in elkaar gedraaid. Het doet niet meer dan de stats van een bepaalde gebruiker van DNET afhalen en deze op een andere manier op het scherm tonen. Nu laat hij alles in platte tekst zien, maar een reformat naar b.v. HTML is ook makkelijk om te zetten.
Wil je hem zelf gebruiken, pas dan ID aan boven aan het scherm en de rest draait vanzelf.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/bin/sh
#Versie: 0.1
ID=297289

lynx -dump "http://stats.distributed.net/participant/psummary.php?project_id=8&id=$ID" >/tmp/stats.tmp

NAME=`cat /tmp/stats.tmp |grep "'s stats"`
LENGTH=`expr length "$NAME"`
TRUELENGTH=`expr $LENGTH - 8`
FULLNAME=`expr substr "$NAME" 1 $TRUELENGTH`

RANK=`cat /tmp/stats.tmp|grep "Rank:"`
BLOCKS=`cat /tmp/stats.tmp|grep "Blocks:"`

#OVERALL RANKING
OVERRANK=`echo $RANK|awk '{print $2}'`
TMP1=`expr length "$OVERRANK"`
TMP2=`expr $TMP1 - 1`
OVERRANK=`expr substr "$OVERRANK" 1 $TMP2`

#OVERALL CHANGE (+/-)
OVERCHAN=`echo $RANK|awk '{print $3}'`

#OVERALL CHANGING PLACES
OVERPLAC=`echo $RANK|awk '{print $4}'`
TMP1=`expr length "$OVERPLAC"`
TMP2=`expr $TMP1 - 1`
OVERPLAC=`expr substr "$OVERPLAC" 1 $TMP2`

#OVERALL BLOCKS
OVERBLOK=`echo $BLOCKS|awk '{print $2}'`

#YESTERDAY RANKING
YESTRANK=`echo $RANK|awk '{print $5}'`
TMP1=`expr length "$YESTRANK"`
TMP2=`expr $TMP1 - 1`
YESTRANK=`expr substr "$YESTRANK" 1 $TMP2`

#YESTERDAY CHANGE (+/-)
YESTCHAN=`echo $RANK|awk '{print $6}'`

#YESTERDAY CHANGING PLACES
YESTPLAC=`echo $RANK|awk '{print $7}'`
TMP1=`expr length "$YESTPLAC"`
TMP2=`expr $TMP1 - 1`
YESTPLAC=`expr substr "$YESTPLAC" 1 $TMP2`

#YESTERDAY BLOCKS
YESTBLOK=`echo $BLOCKS|awk '{print $3}'`

clear
echo "Overall:"
echo "Plaats:       $OVERRANK"
echo "Wijziging:    $OVERCHAN$OVERPLAC"
echo "Blocks:       $OVERBLOK"
echo "--------------------------------------"
echo "Gisteren:"
echo "Plaats:       $YESTRANK"
echo "Wijzigingen:  $YESTCHAN$YESTPLAC"
echo "Blocks:       $YESTBLOK"
rm /tmp/stats.tmp

Wat moet er nog aan gedaan worden:
- correcte afhandeling als iemand niet van plaats is veranderd.
- Kleine aanpassing voor OGR (Werkt nu alleen voor RC5)
- Zorgen dat de uitlijning in tekst wat beter is.

[ Voor 11% gewijzigd door ge-flopt op 22-04-2004 23:14 ]


Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Naam: zoekmail.pl
Doel: mail zoeken in een exim log
Werking: zoek alle message-id's bij een zoektext (emailadres oid) en zoek daar alle logregels bij
OS: als er maar exim en perl op draaien Taal: perl
Configuratie: zelf pad naar eximlog opgeven
Parameters: zoektext
Opmerkingen:
Ik beheer een paar mailservers, en word dus doodverveeld met 'is dat en dat mailtje van die en die naar zus en zo aangekomen/verstuurd' en andere vragen.

Dit script zoekt in een exim-log naar text (mailadressen of delen daarvan, servernamen etc..) en print alle berichten die daar mee te maken hebben. Het is net iets beter dan gewoon greppen omdat je alles van een bericht ziet, en niet alleen de regels waar je zoektext in voorkomt.

Whenever you find that you are on the side of the majority, it is time to reform.


Acties:
  • 0 Henk 'm!

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:04
Naam: dircmp
Doel: vergelijk 2 directories op inhoud
Werking: Doorzoekt een directory, en aan de hand van parameters controlleerd op naam of op inhoud. Met een extra parameter kun je meteen een remove script maken.
OS: Linux en collega's
Taal: Bash
Configuratie: NVT
Parameters: dir1 dir2 -f -i -e1/-e2
Opmerkingen:
Kreeg weer eens een lading plaatjes binnen en merkte dat verschillende bestanden dubbel waren ook al was de bestands naam niet het zelfde. Daar moest dus iets anders op gevonden worden. Zie hier het resultaat.

PS: de -e1 en -e2 parameter maken een string aan "rm /dirX/fileY" stuur je dit door naar een file, dan kun je deze met sh outputfile weer meteen opruimen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/sh

if [ "$2" == "" ] || [ "$1" == "-?" ]
then
    echo "Geef 2 bestaande directory namen op die vergeleken moeten worden"
    echo "bv:     $0 /tmp/ /root/ [-f -c [-e1/-e2]]"
    echo "-f      = Controlleer alleen op filenaam                         (Filename Check)"
    echo "-i      = Controlleer of bestands inhoud identiek is             (Indeltical File check)"
    echo "-e1/-e2 = Creeer een lijst voor te verwijderen dubbele bestanden (-e1 = dir 1 en -e2 = dir 2)"
    exit
fi

if [ ! -d  $1 ] || [ ! -d $2 ]
then
    echo "1 van de 2 opgegeven parameters is geen directory"
    exit
fi

if [ $1 == $2 ]
then
    echo "De beide parameters zijn gelijk. Geef 2 verschillende directories op"
    exit
fi

if [ "$3" != "-f" ] && [ "$3" != "-i" ]
then
    echo "Geef een optie. Geef -? voor de eventuele opties"
    echo "$3"
    exit
fi

# OK dan kan nu het echte vergelijken beginnen

if [ "$3" == "-f" ] || [ "$3" == "" ]
then
    for file in `ls -c1 $1`
    do
        if [ -e $2$file ]
        then
            if [ "$4" == "-e1" ]
            then
                echo "rm $1$file"
            elif [ "$4" == "-e2" ]
            then
                echo "rm $2$file"
            else
            echo "Dubbel: $file in $1 en in $2"
            FOUNDFILE=1
            fi
        fi
    done

    if [ $FOUNDFILE ]
    then
        echo ""
        echo "LET OP: Dit betekend dat de bestandsnamen overeen komen. Dit betekend niet dat dit identieke bestanden zijn"
        echo "Gebruik hier voor de -i optie"
    fi
fi

# Vergelijking van bestanden
if [ "$3" == "-i" ]
then
    for filesdir1 in `ls -l $1 |grep -v '^d'|awk '{print $9}'`
    do
        for filesdir2 in `ls -l $2 |grep -v '^d'|awk '{print $9}'`
        do
            DIFF=`diff -q $1$filesdir1 $2$filesdir2`
            if [ "$DIFF" != "Files $1$filesdir1 and $2$filesdir2 differ" ]
            then
                if [ "$4" == "-e1" ]
                then
                    echo "rm $1$filesdir1"
                elif [ "$4" == "-e2" ]
                then
                    echo "rm $2$filesdir2"
                else
                    echo "Dubbel: $1$filesdir1 en $2$filesdir2"
                fi
            fi
        done
    done
fi

[ Voor 22% gewijzigd door ge-flopt op 28-04-2004 16:36 . Reden: bugje verwijderd ]


Acties:
  • 0 Henk 'm!

Anoniem: 13055

Naam: forwarding.sh
Doel: Zet ssh tunnels op, en laat daarbij mooie gtk2 dialoogjes zien
Werking: forwarding.sh aanroepen, de rest gaat vanzelf
OS: N/A Taal: bash
Configuratie: forwarding.conf moet regels bevatten in de volgende syntax:
code:
1
local_port:remote_server:remote_port

aka, de standaard ssh syntax die gebruikt word voor port forwards. Verder dienen PROXY en USER de juiste waardes te hebben natuurlijk. IDENTITY wijst naar een passwordless ssh key, maar dit kan evt ook dmv cached keys (dmv ssh-agent, zie ook andere scripten van mij in dit topic). REMOTE_CMD is de applicatie die remote gestart moet worden. Eventueel zijn FWCONF, PIDFILE en LOGFILE nog in te stellen, de betekenis daarvan lijkt me vanzelfsprekend ;)
Parameters: N/A
Opmerkingen: N/A

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/bash
 
PROXY="een.host.domein"
USER="eenusername"
FWCONF="${HOME}/bin/forwarding.conf"
IDENTITY="${HOME}/.ssh/id_dsa-forward"
REMOTE_CMD="bin/Keepalive.sh"
 
PIDFILE="${HOME}/bin/forwarding.pid"
LOGFILE="${HOME}/bin/forwarding.log"
 
Z_OK_TITLE="port forwards established"
Z_OK_TEXT="All port forwards have been established.\n 
 Press the OK button below to terminate\n all forwards."
 
Z_NOK_TITLE="port forwarding failed"
Z_NOK_TEXT="*** FAILED TO SETUP PORT FORWARDS *** 
 \n\nExamine /home/r3boot/bin/forwarding.log\nfor more details"
 
Z_INF_TITLE="already forwarding"
Z_INF_TEXT="There are already established port forwards
 \nAre you sure you want to tear down those\nforwards and start new ones instead?"
 
Z_WAI_TITLE="please wait"
Z_WAI_TEXT="Establising port forwarding,\nthis may take some time."
 
if [ -f ${PIDFILE} ]; then
        IS_RUNNING="$(ps ax | grep $(cat ${PIDFILE}) | grep -v grep | awk '{print $1}')"
        if [ x"${IS_RUNNING}" != x"" ]; then
                zenity --question --title="${Z_INF_TITLE}" --text="${Z_INF_TEXT}"
                if [ $? = 0 ]; then
                        Z_PID="$(ps ax | grep \"[z]enity --info\" | awk '{print $1}')"
                        if [ x"${Z_PID}" != x"" ]; then
                                kill ${Z_PID}
                                sleep 1
                                if [ -f ${PIDFILE} ]; then
                                        kill $(cat ${PIDFILE})
                                        rm -f ${PIDFILE}
                                fi
                        fi
                else
                        exit 0
                fi
        fi
fi
 
FORWARDS=""
for LINE in $(cat ${FWCONF}); do
        if [ x"${FORWARDS}" == x"" ]; then
                FORWARDS="-L ${LINE}"
        else
                FORWARDS="${FORWARDS} -L ${LINE}"
        fi
done
 
(ssh -i ${IDENTITY} ${FORWARDS} -f -l ${USER} ${PROXY} ${REMOTE_CMD} &> ${LOGFILE}; echo "100")
| zenity --progress  --title="${Z_WAI_TITLE}" --text="${Z_WAI_TEXT}" --pulsate --auto-close
ps ax | grep '[s]sh -i ' | awk '{print $1}' > ${PIDFILE}
 
IS_RUNNING="$(ps ax | grep 'zenity --info' | awk '{print $1}')"
if [ x"${IS_RUNNING}" != x"" ]; then
        zenity --info --title="${Z_OK_TITLE}" --text="${Z_OK_TEXT}"
        if [ -f ${PIDFILE} ]; then
                kill $(cat ${PIDFILE})
                rm -f ${PIDFILE}
        fi
else
        zenity --error --title="${Z_NOK_TITLE}" --text="${Z_NOK_TEXT}"
        [ -f ${PIDFILE} ] && rm -f ${PIDFILE}
fi
 
exit 0


Keepalive.sh (word gebruikt bij bovenstaand script):
code:
1
2
3
4
5
6
#!/bin/sh
 
while :; do
        echo "[`date`]: portforwards still alive"
        sleep 30
done


en ten slot nog een stukje van m'n forwarding.conf:
code:
1
2
3
4
5
6667:irc.tweakers.net:6667
6668:irc.freenode.net:6667
5190:login.oscar.aol.com:5190
1863:messenger.hotmail.com:1863
5222:jabber.org:5222

Acties:
  • 0 Henk 'm!

Anoniem: 33097

Naam: sql-databeest backup
Doel: db-backuppen en de db mailen naar email
Werking: ./sql.sh ?
OS: *nix Taal: bash
Configuratie: db en username in file pleuren
Parameters: -geen-
Opmerkingen: je moet wel base64 hebben (in je package manager of anders http://www.fourmilab.ch/webtools/base64/base64-1.3.tar.gz)
code:
1
2
3
4
5
6
#!/bin/bash
mysqldump -u USER --password=PASSWORD -B DATABASE > db.sql
tar -cf db.tar db.sql
base64 -e db.tar db64.tar
uuencode db64.tar db64.tar|mailx -s "Db backup" email@adres.nl
rm -rf db64.tar db.tar db.sql


en dan nog een klein scriptje om alles uit te pakken..

code:
1
2
3
4
5
6
7
8
#!/bin/bash
echo "Decoden van base64 file"
base64 -d db64.tar db.tar
echo "tar file untarren.."
tar -xf db.tar
echo "Schoomaken.."
rm -rf db.tar db64.tar
echo "DONE!"


Deze 2 scriptjes zijn natuurlijk handig om bijv. als je shellhosting hebt met een sql db die veel gebruikt wordt elke week te backuppen, zelf gebruik ik het voor mijn webhosting en krijg ik elke week netjes een mailtje met me db :).
De base64 heb ik gedaan omdat anders de file niet door de spamfilter heenkwam, als je wilt kun je het er ook uitslopen :)

[ Voor 13% gewijzigd door Anoniem: 33097 op 04-09-2004 17:33 . Reden: test ]


Acties:
  • 0 Henk 'm!

Anoniem: 25021

Anoniem: 33097 schreef op 02 mei 2004 @ 18:50:
code:
1
2
3
4
5
6
7
8
#!/bin/bash
echo "Decoden van base64 file"
base64 -d db64.tar db.tar
echo "tar file untarren.."
tar -xf db.tar
echo "Schoomaken.."
rm -rf db.tar db64.tar
echo "DONE!"
Als er wat fout gaat met 't decoden of untarren ben je dus ook het orgineel kwijt?
kan je niet beter iets doen zoals dit:
Bash:
1
2
3
4
5
#!/bin/bash
echo "Decoden van base64 file"
base64 -d db64.tar db.tar && rm db64.tar
echo "tar file untarren.."
tar -xf db.tar && rm db.tar  && echo "DONE!" || echo "FAILED!"

Acties:
  • 0 Henk 'm!

Anoniem: 33097

dat is waar, maar ik heb em ook nog als attachment in me mail zitten :P

Acties:
  • 0 Henk 'm!

Anoniem: 3238

Okay, dan nu mijn bijdrage :-) Slecht geschreven, inmiddels alweer vrij oud (begin 2003)

Naam: MP3 Player
Doel: Speelt MP3tjes af mbv. XMMS
Werking: lees maar gewoon :)
OS: linux (getest: LinuxPPC 2000Q4)
Taal: Bash
Configuratie: nvt.
Parameters: nvt.
Opmerkingen: As said, oud, en traag, maar het deed zijn werk goed!

Lange code, dus linkje

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17-06 20:07

Robtimus

me Robtimus no like you

IceManX schreef op 14 april 2004 @ 19:00:
Naam: dirpurge
Doel: directories "purgen" van files ouder dan een bepaald aantal dagen
Werking: dirpurge <aantal dagen> <directory>
OS: Unix Taal: Bash
Opmerkingen: Er is ook mdirpurge dat recursief dirpurge kan aanroepen: mdirpurge <aantal dagen> <basedir> <directorynamen>. Zoekt in basedir alle directories met de gegeven namen (>= 1) en roept voor die dirs dirpurge op.
Erg handig voor het purgen van bv FTP upload dirs.

Zie voor meer info en downloads http://dirpurge.sourceforge.net/
Versie 0.3 is net gereleased, mede dankzij [rml][ find] lege directories verwijderen[/rml] :)

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Anoniem: 21847

Naam: Kernelcheck.sh
Doel: Controleren of er nieuwe Debian kernel-packages beschikbaar zijn
Werking: Het script kijkt in /proc/version wat de huidige kernelversie is. Vervolgens wordt m.b.v. apt-cache search gekeken welke versies er beschikbaar zijn bij Debian. Is er een nieuwe versie dan stuurt het script een mailtje naar root.
OS: Debian
Taal: Bash script
Configuratie: Werkt het best in een dagelijkse cronjob
Opmerkingen: Aangezien ik een 2.6 kernel draait controleert hij alleen op nieuwe 2.6 kernels
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh
# This script checks for new available kernels

# Check for existing lockfile
LOCKFILE=/tmp/kernelcheck.lock
if [ -f $LOCKFILE ]; then
    echo "Script is already running or $LOCKFILE still exists...." | mail -s 'Server Kernelcheck Log' root
    exit 0
fi

# Create the lockfile
echo >$LOCKFILE "lock me"

# Find out what the current kernelversion is
OLDVERSION=`cat /proc/version | awk '{ print "kernel-image-" $3 }'`

# Request info on the newest available version
NEWVERSION=`apt-cache search kernel-image 2.6 | sort -r | grep --max-count=1 "2.6.*-1-686 " | awk '{ print $1 }'`

# Send message if newer version is available
if [ $OLDVERSION != $NEWVERSION ]; then
    echo "New version $NEWVERSION available." | mail -s 'Kernelcheck Log' root
fi

# Remove lockfile
rm -f $LOCKFILE

Acties:
  • 0 Henk 'm!

Anoniem: 13700

Naam: cpuwatch
Doel: toont processen die korte periodes veel cputijd gebruiken.
Werking: leest en interpreteert de output van ps over een gespecificeerd interval en toont de relevante processen.
OS: GNU/Linux
Taal: bash2
Configuratie: in een console, gepiped naar een logfile, enz.
Opmerkingen: vrij robuust script, geschreven met het oog op gebruik door derden; test input parameters en test op aanwezigheid van externe programma's. Het script vergelijkt floating point waardes numeriek.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash2

declare VERSION=1.3
declare SCRIPT=${0}

function die () {
    echo "${SCRIPT}: ${*}" >&2
    exit 1
}

function check_path () {
    local DIR
    for DIR in ${PATH//:/ }; do
        [ -x "${DIR}"/"${1}" ] && return
    done
    die "program '${1}' not found in PATH"
}

function deci_mate () {
    local INP=${1}
    [[ ${INP} != *.* ]] && INP=${INP}.
    local INT=${INP%%.*}
    local FRC=${INP##*.}
    echo $((${INT:-0} * 10 + ${FRC:-0}))
}

function top () {
    local FIELD[]
    local PROC
    local I=0
    local TIME=$(date +%T)
    for PROC in $(ps h -eo pid,%cpu,comm --sort -%cpu); do
        FIELD[$((I++))]=${PROC}
        if [ ${I} -ge 3 ]; then
            [ $(deci_mate ${FIELD[1]}) -ge ${1} ] || return
            printf "%s %5d %5.1f %s\n" \
                ${TIME} ${FIELD[0]} ${FIELD[1]} ${FIELD[2]}
            I=0
        fi
    done
}

function version () {
    echo "cpuwatch version ${VERSION}"
}

function usage () {
    echo -e "USAGE:\n\t${SCRIPT} [OPTIONS]\nOPTIONS:"
    echo -e "\t-t <n>, --threshold=<n>"
    echo -en "\t\tSets the threshold to <n> percent; <n> has a precision"
    echo -e " of one\n\t\tfractional decimal. (default: 0.1)"
    echo -e "\t-i <n>, --interval=<n>"
    echo -e "\t\tSets the update interval to <n>; <n> must be accepted by"
    echo -e "\t\t'sleep'. (default: 1)"
    echo -e "\t-p <n>, --probes=<n>"
    echo -e "\t\tSets the number of probes to be done to <n>; never stops"
    echo -e "\t\tprobing if <n> equals 0. (default: 0)"
    echo -e "\t-o, --omit-header"
    echo -e "\t\tDo not print a leading header."
    echo -e "\t-v, --version"
    echo -e "\t\tPrints version information."
    echo -e "\t-h, --help"
    echo -e "\t\tPrints this text."
}

function help () {
    version
    echo -en "\tReports processes using more than a specified percentage"
    echo -e " of CPU time."
    usage
    exit
}

shopt -s extglob

check_path ps
check_path date
check_path sleep

declare THRES=0.1
declare INTER=1
declare PROBES=0
declare HEADER=1

while [ ${#} -gt 0 ]; do
    case "${1}" in
        -t)     THRES="${2}"; shift;;
        --threshold=*)  THRES="${1#*=}";;
        -i)     INTER="${2}"; shift;;
        --interval=*)   INTER="${1#*=}";;
        -p)     PROBES="${2}"; shift;;
        --probes=*) PROBES="${1#*=}";;
        -o)     HEADER=$((1 - ${HEADER}));;
        --omit-header)  HEADER=$((1 - ${HEADER}));;
        -v)     version; exit;;
        --version)  version; exit;;
        -h)     help;;
        --help)     help;;
        *)      usage >&2; die "invalid option '${1}'";;
    esac
    shift
done

[[ ${THRES} == @(+([[:digit:]])?(.?([[:digit:]]))|.[[:digit:]]) ]] \
    || die "invalid threshold option"
THRES=$(deci_mate ${THRES})
[ ${THRES} -le 1000 ] || die "invalid threshold option"

[[ ${INTER} == +([[:digit:]])?(.+([[:digit:]]))?([smhd]) ]] \
    || die "invalid interval option"

[[ ${PROBES} == +([[:digit:]]) ]] || die "invalid probes option"

[ ${HEADER} -ne 0 ] && echo "  TIME     PID  %CPU CMD"
top ${THRES}
PROBES=$((${PROBES} - 1))
while [ ${PROBES} -ne 0 ]; do
    sleep ${INTER}
    top ${THRES}
    [ ${PROBES} -gt 0 ] && PROBES=$((${PROBES} - 1))
done

[ Voor 30% gewijzigd door Anoniem: 13700 op 12-05-2004 17:28 . Reden: en dan een oude versie pasten... ]


Acties:
  • 0 Henk 'm!

  • Niek
  • Registratie: Februari 2001
  • Laatst online: 13-06 09:54

Niek

f.k.a. The_Surfer

Ik kwam net deze nog tegen op m'n PC. niet dat ik em ooit gebruik, maar misschien bheeft iemand er wat aan en het demonstreerd mooi de kracht van sed oneliners :)
Naam: tweakersparse.sh
Doel: Parsed de Tweakers.net DSP file (met nieuwsberichten) naar een overzichtelijke console-output
Taal: (Ba)sh?
Parameters: Geen
code:
1
2
#!/bin/sh
lynx --source http://tweakers.net/turbotracker.dsp | sed -e'/<id>/b;/<titel>/b;/<link>/b;/<\/nieuwsposting>/b' -ed | sed 's/.*<id>/URL:   http:\/\/tweakers.net\/nieuws\//g;s/.*<titel>/Titel: /g;s/.*<link>/Bron:  /g;s/<\/.*>//g'

Curl versie:
code:
1
2
#!/bin/sh
curl -s http://tweakers.net/turbotracker.dsp | sed -e'/<id>/b;/<titel>/b;/<link>/b;/<\/nieuwsposting>/b' -ed | sed 's/.*<id>/URL:   http:\/\/tweakers.net\/nieuws\//g;s/.*<titel>/Titel: /g;s/.*<link>/Bron:  /g;s/<\/.*>//g'

À vaincre sans péril, on triomphe sans gloire - Pierre Corneille


Acties:
  • 0 Henk 'm!

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 17-06 09:04

WHiZZi

Museumdirecteurtje

Naam: servers.sh
Doel: In een makkelijk menu servers aanklikken voor een SSH verbinding te maken.
Werking: server.sh aanroepen. Server selecteren, inlognaam en connecten maar.
OS: Linux Taal: bash
Configuratie: servers.conf moet regels bevatten in de volgende syntax:
code:
1
Servernaam:SSHport:IPadres

Parameters: -
Opmerkingen: Dit heb ik gemaakt omdat ik veel servers beheer vanuit een Linux omgeving. Onder Windows heeft putty zo'n handige bookmark-achtige functie. Onder KDE heb ik die niet kunnen vinden (kssh heeft het wel, maar die werkt niet lekker).
Om dit te draaien heb je (u)xterm nodig en zenity. Uiteraard moet je ook op X draaien ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
# Changelog
# v0.1 Initial Release
# v0.5 Xterm didn't work out well. Changed to uxterm


CONFFILE=/etc/servers.conf



# Read the lines from the Config and show it.
SERVER=`cat $CONFFILE | awk -F ":" '{print $1}'`
RESULT=`zenity --list --title="SSH Client" --width="800" --height="600" --column ServerName $SERVER`

if [ $RESULT = "quit" ]; then
  exit
fi

# After selection, select IP and Portnumber
IP=`grep $RESULT $CONFFILE | awk -F ":" '{print $3}'`
PORT=`grep $RESULT $CONFFILE | awk -F ":" '{print $2}'`
USERNAME=`zenity --entry --title="Login naam" --text=Inlognaam`

# Really connect?
zenity --question --title="SSH Client" --text="Really connect to $RESULT ($IP:$PORT) as $USERNAME?"
if [ $? = 0 ]; then
    uxterm -T "SSH on $RESULT" -ti vt220 -hc 'blue' -bg 'black' -fg 'white' -e /usr/bin/ssh -p $PORT -l $USERNAME $IP
    exit;
else
  exit;
fi

[ Voor 16% gewijzigd door WHiZZi op 03-06-2004 16:53 ]

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


Acties:
  • 0 Henk 'm!

  • Arioch
  • Registratie: Maart 2002
  • Laatst online: 06-12-2024

Arioch

<geek>

er bestaat ook een linux port van putty ;)
en aangezien je gentoo gebruikt: emerge putty -s

[ Voor 38% gewijzigd door Arioch op 03-06-2004 22:20 ]


Acties:
  • 0 Henk 'm!

Anoniem: 13700

Naam: cpu_usage
Doel: CPU gebruik per processor meten/tonen
Werking: Leest info uit /proc/stat
OS: Linux
Taal: bash & awk
Configuratie: -
Parameters: --help geeft uitleg
Opmerkingen: -
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/bin/bash

declare VERSION=1.0
declare SCRIPT=${0}
declare EXIT=0

function get_jiffies () {
    awk '/^cpu/' /proc/stat
}

function compute_usage () {
    awk '
        function print_cpu(i, title) {
            printf "%3s %6.2f %6.2f %6.2f %6.2f", title,
                time[i, 0], time[i, 1], time[i, 2], time[i, 3];
        }
        {
            if($1 in cpus) ++pass; else cpus[$1]= 1;
            if(pass == 0) {
                for(n= 2; n < 6; ++n) time[$1, n - 2]= $n;
            } else {
                for(n= 2; n < 6; ++n) time[$1, n - 2]= $n - time[$1, n - 2];
            }
        }
        END {
            print "CPU  user%  nice%   sys%  idle%";
            for(i in cpus) {
                time[i, 4]= time[i, 0];
                for(n= 1; n < 4; ++n) time[i, 4]+= time[i, n];
                if(time[i, 4] != 0) {
                    for(n= 0; n < 4; ++n)
                        time[i, n]= time[i, n] * 100 / time[i, 4];
                }
                if(i != "cpu") {
                    print_cpu(i, substr(i, 4));
                    print "";
                }
            }
            print_cpu("cpu");
            printf " (%.2fs)\n", time["cpu", 4] / 100;
        }
    '
}

function cpu_usage () {
    local START=$(get_jiffies)
    ${*}
    EXIT=${?}
    local STOP=$(get_jiffies)
    [ "${1}" != "sleep" ] && echo
    echo -e "${START}\n${STOP}" | compute_usage
}

function version () {
    echo "cpu_usage version ${VERSION}"
}

function usage () {
    version
    echo -e "\tDisplays CPU usage statistics for every CPU in the system."
    echo -e "USAGE:\n\t${SCRIPT} [OPTION | <command>]\nOPTIONS:"
    echo -e "\t-t [<n>], --time=<n>"
    echo -e "\t\tMeasures the CPU usage over the given time period <n>,"
    echo -e "\t\tdefaults to one second if omitted in the short form."
    echo -e "\t-s, --system"
    echo -e "\t\tDisplays CPU usage statistics for the system since it was"
    echo -e "\t\tbooted."
    echo -e "\t-v, --version"
    echo -e "\t\tDisplays version information."
    echo -e "\t-h, --help"
    echo -e "\t\tDisplays this text."
    echo -n "Any argument not recognized as an option will be interpreted as a"
    echo -en " command to be\nexecuted; CPU usage is measured over the time"
    echo " the command takes to execute."
}

case ${1} in
    -t)         cpu_usage sleep ${2:-1};;
    --time=?*)  cpu_usage sleep ${1#*=};;
    -s)         get_jiffies | compute_usage;;
    --system)   get_jiffies | compute_usage;;
    -v)         version;;
    --version)  version;;
    -h)         usage;;
    --help)     usage;;
    *)          cpu_usage ${*:-usage};;
esac

exit ${EXIT}

[ Voor 9% gewijzigd door Anoniem: 13700 op 12-07-2004 17:51 . Reden: natuurlijk vind je na het posten nog één foutje... ]


Acties:
  • 0 Henk 'm!

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Naam: redux.php
Doel: reductie van mod_log_sql database grootte
Werking: Trekt alle gegevens uit de huidige database en controleert per uri,host,referer etc of die al bestaat en zo ja met welk id. Die id's worden gebruikt voor de 'hit' tabel die genormaliseerd is om alleen id's te gebruiken voor zo min mogelijk ruimte.
OS: Linux/BSD/*NIX/etc en met een beetje hacken Window$ ook wel Taal: PHP
Configuratie: username/pass/databases
Parameters: -
Opmerkingen: Dit zou misschien nog eens nuttig kunnen zijn.

Het is een lang script dus zie -> http://www.barad-dur.nl/nx/projecten/redux/

Nu met Land Rover Series 3 en Defender 90


Acties:
  • 0 Henk 'm!

Anoniem: 37400

capedro schreef op 20 november 2003 @ 14:55:
Naam: online-users.sh
Doel: Welke gebruikers zijn ingelogd op een *BSD/Linux/Unix server
Werking: Gewoon starten in een terminal
Configuratie: -geen-
Parameters: -geen-

code:
1
2
3
4
5
6
7
8
9
#!/bin/bash
#
#
while [ true == true ];
do
  clear
  w
  sleep 1
done
code:
1
watch -n1 w

Acties:
  • 0 Henk 'm!

  • Hmzaniac
  • Registratie: Januari 2002
  • Laatst online: 05-08-2023

Hmzaniac

Evil Admin

even een kickje maar

vandaag 20 Gb aan verrotte ogg files mogen repareren... een of andere grapjas die die dingen ook nog eens een mp3 header heeft gegeven.. vraag niet hoe..

Naam: RemMP3Header.pl
Doel: Stript MP3 headers van ogg files af
Werking: file io
OS: linux
Taal: Perl
Configuratie: nvt.
Parameters: bestandsnaam
Opmerkingen: Compleet nutteloos, maar het heeft wel 20 Gb aan muziek gered die anders opnieuw geencode zou moeten worden (en ja, het is legaal ;) )

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl 
use File::Copy;                                         
# File::Copy is for move(). 
$filename = $ARGV[0];                                   
# File to rip of mp3 header. 
open(FH,$filename);                                     
# Temp file handler to check if file has corrupted headers. 
if (!index(<FH>,"ID3") && index(<FH>,"OggS")) {         
# If file has both OggS and ID3 Header (Starting with ID3 header). 
        close(FH);                                      
        # Close the temp filehandler. It's not needed anymore. 
        move($filename,$filename.".old");               
        # Move file to old for backup purposes. 
        open(MP3,$filename.".old");                    
        # Open the original file as a FH. 
        open(OGG,">$filename");                         
        # Open the new file with the original filename as a FH. 

        $headerSize = index(<MP3>,"OggS");              
        # Find out where the OggS Header starts.                                                                          
        seek(MP3,$headerSize,0);                       
        # Seek till that position. 

        while (<MP3>) {                                 
        # Write out new file from seek position. 
                print OGG $_; 
        } 

        close(MP3);                                     
        # Close all FH's.    
        close(OGG); 
} 
else { 
        close(FH);                                      
        # Close the old FH in case it's not valid.                                                                                
        print "File is not MP3 or is valid Ogg.";       
        # Die Die Die! 
} 


erg ranzig.. then again was het in een half uurtje gedaan met 2 man :)

[ Voor 12% gewijzigd door Hmzaniac op 09-08-2004 03:35 ]

Ik heb een WOS-post!


Acties:
  • 0 Henk 'm!

  • pyro_1979
  • Registratie: Oktober 2003
  • Laatst online: 03-01-2020
offtopic:
cat /dev/hda > /dev/dsp

"Ik denk dus ik besta" - Descartes


Acties:
  • 0 Henk 'm!

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 08:24

BoAC

Memento mori

pyro_1979 schreef op 09 augustus 2004 @ 13:55:
offtopic:
cat /dev/hda > /dev/dsp
Kun je daarvan het nut ff geven :?

Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 21:00
Aangezien ik geen SNMP-daemon met 64bit traffic counters gevonden kreeg kwam ik op campzone met mijn gigabit fileserver wat in de knoei, van mijn MRTG-statistiekjes klopte geen hout meer. Binnen 1 minuut zit mijn fileserver niet snel over de 4GB (dat is een minuut lang constant 68.2666 MB/s), maar MRTG werkt niet op 1 minuut interval, dus heb ik een shell scriptje geschreven dat bijhoudt hoeveel verkeer er is geweest. Aangezien test maar met 32bit integers overweg kan ben ik gaan rekenen met strings :)

Naam: mrtg-fake-64.sh en anderen
Doel: Dataverkeer bijhouden
Werking: leest mbv /usr/bin/mrtg-ip-acct het dataverkeer uit
OS: Linux
Taal: bash
Configuratie: Bovenin staan variabelen voor de locaties van diverse files en welke interface er gemonitord moet worden
Parameters: -
Opmerkingen: Cronjob maken met mrtg-fake-64.sh iedere minuut, en in MRTG als target een scriptje dat zelf mrtg-fake-64.sh aanroept (om op exact 5 minuten uit te komen) en vervolgens de outputfile cat (niet meegeleverd :P)

http://nieuwkamp.xs4all.nl/got/mrtg-fake-64.tar.bz2

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 19-05 23:03
BoAC schreef op 09 augustus 2004 @ 14:27:
[...]

Kun je daarvan het nut ff geven :?
vind jij het niet fascinerend dan om te horen wat er op je schijf staat? :p

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 11-06 04:49

KompjoeFriek

Statsidioot

Omdat mijn awstats niet meer update, en het toch al een verouderde versie was, besloot ik die eens een update te geven.
helaas alle cache kwijt, dus ikke die laten updaten door awstats, leest ie alleen de acces.log, agent.log, error.log, referer.log en suexec.log. dus niet verder de ge-gzipte logs in :(
Maar ik wou natuurlijk alle stats hebben, en met de hand duurde een beetje lang, dus:

Naam: rebuildstats.sh
Doel: Het complete (ge-gzipte) log van apache laten verwerken door awstats
Werking: Delete de awstats cache files, un-gzipt alle apache logfiles, van achter naar voor (zodat de volgorde goed is) en zet alles dan in 1 file. Dat word awstats.pl op de logs losgelaten. alle logs worden weer naar orginele staat hersteld.
OS: Linux
Taal: bash
Configuratie: geen
Parameters: -
Opmerkingen: ergens rond versie 6 plaats awstats de cache in een andere dir, niet /var/cache/awstats maar /var/lib/awstats. dit script maakt gewoon beide dirs leeg. omdat 1 van de 2 dirs niet bestaat zal hij daardoor een foutmeldingkje geven :) (wist zo gauw niet hoe dat netjes moest)
Met een jaar stats van een rustige site op een Athlon 1Ghz duurde het 1,5 uur om awstats de complete cache weer op te laten bouwen :)
Script: http://kompjoefriek.homei...joefriek/rebuildstats.txt

Disclamer: Ik ben natuurlijk niet verantwoordelijk voor welke vorm van schade dan ook dat veroorzaakt wordt door dit script. Iedereen die dit script wil gebruiken moet het eerst maar eens op veiligheid controleren voor dat het gebruikt wordt. Mocht je iets ontdekken wat een mogelijk veiligheidsrisico is, laat het me dan weten. (mail staat in profiel)

veel plezier er mee :P
tijdens het doornemen van een bash tutorial kon ik niet laten om er kleurtjes in te verwerken toen ik het tegen kwam, dus, schrik niet :P
ow ja, het is misschien niet de netste code die er is, but i got the job done ;)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Paul Nieuwkamp schreef op 09 augustus 2004 @ 14:50:
Aangezien test maar met 32bit integers overweg kan ben ik gaan rekenen met strings :)
'man bc' is wellicht interessant ;)

--- edit
Naar aanleiding van [rml][ linux bash script] Symlinks maken[/rml] wat meer ontopic:

Naam: linkdirs
Doel: Linkt directories in 'source' naar 'destdr'.
Werking: Verwijdert eerst dode symlinks, en linkt dan de directories.
OS: Linux, maar moet in principe werken op alles met Ruby en een fs dat symlinks ondersteunt. Windows kan een probleem geven omdat File.basename een '/' als directory seperator verwacht.
Taal: Ruby
Configuratie: Regel 4 & 5, en regel 28 als je bijvoorbeeld ook bestanden wilt linken.
Opmerkingen: In principe kun je het hele rescue block weghalen als je regel 32 vervangt door:
Ruby:
32
        File.symlink( i, d) unless FileTest.exist?( d)

maar nu krijg je een bericht bij bijvoorbeeld dubbele films.
Ruby:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env ruby

# the source and destination directories.
source = '/home/mh/Desktop/Video'
destdr = '/home/mh/tmp/test'

class Dir
    # Returns all entries in 'dir' for which the passed block returns true.
    def Dir.entries_if( dir)
        Dir[ File.join( dir, '*') ].delete_if { |i|
            !yield i
        }
    end
end

### cleanup dead links

# for all symlinks in the destination dir...
Dir.entries_if( destdr) { |e| FileTest.symlink?( e) }.each { |l|
    # ...remove the symlink if the file pointed to doesn't exist
    File.delete( l) if 
        !FileTest.exist?( File.expand_path( File.readlink( l), destdr))
}

### create links

# for all directories in the source dir...
Dir.entries_if( source) { |e| FileTest.directory?( e) }.each { |i|
    d = File.join( destdr, File.basename( i))
    begin
        # ...make a symlink in the destination dir...
        File.symlink( i, d)     
    rescue Errno::EEXIST
        # ...unless there exists a file or a symlink which doesn't point to
        # the file we want to point to.
        print "'#{File.basename(i)}' already exists!\n" if
            !FileTest.symlink?( d) || File.readlink( d) != i
    end
}

[ Voor 82% gewijzigd door _Squatt_ op 10-08-2004 03:59 ]

"He took a duck in the face at two hundred and fifty knots."


Acties:
  • 0 Henk 'm!

  • Toiletman
  • Registratie: Februari 2000
  • Laatst online: 14-06 09:00
Ik wou hier mijn oplossing ook nog maar even posten... Je kent mijn emailadres, als je het niet met me eens bent hoef je dat niet hier neer te zetten

Naam: linkscript
Doel: Maakt symbolic links naar subdirectories van sourcedir in targetdir
Werking: Verwijdert eerst dode symlinks, en linkt dan de directories.
OS: Linux
Taal: bashscript
Configuratie: Regel 4 & 5
Opmerkingen: erg simpel scriptje, ik heb niet veel verstand van linux, dus er zouden bugs in kunnen zitten.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
#10-08-2004 Gemaakt door Coen Wit
#Dit script maakt in de TGTD symbolic links naar subdirectories van de SRCD, dangling links worden verwijderd
SRCD="/shares/Shares/Video" #de dir die de links levert
TGTD="/data/Shares/Video" #de dir waar de links moeten komen te staan
COUNTER=$(find $SRCD -maxdepth 1 -mindepth 1 -type d | wc -l)
DIRECTORY=""
symlinks -d $TGTD #verwijdert 'dangling' symlinks
until [  $COUNTER -lt 1 ]; do
        DIRECTORY=$(find $SRCD -maxdepth 1 -mindepth 1 -type d | sed -n "$COUNTER p")
        ln -s -f --target-directory=$TGTD "$DIRECTORY"
        echo link naar "$DIRECTORY" gemaakt
        let COUNTER-=1
done
exit

edit:
Hoe fix ik het layout verneuken?

[ Voor 9% gewijzigd door Zwerver op 10-08-2004 17:19 . Reden: Modbreak ]

Only dead fish go with the flow


Acties:
  • 0 Henk 'm!

  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05 16:41

VROEM!

broembroem!

Als je even wat entertjes in lange regels zet wordt het beter.

ieeeepppppp :P


Acties:
  • 0 Henk 'm!

  • Toiletman
  • Registratie: Februari 2000
  • Laatst online: 14-06 09:00
VROEM! schreef op 11 augustus 2004 @ 08:59:
Als je even wat entertjes in lange regels zet wordt het beter.
Thx... alleen kan ik zelf niet meer m'n post editen vanwege modbreak... dus die mag zelf ook even de layout fixen.

Only dead fish go with the flow


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 14-06 14:00

deadinspace

The what goes where now?

Anoniem: 51493 schreef op 09 december 2003 @ 00:47:
Naam:
Opmerkingen: Bugje: sommige argumenten, bijv -v, worden doorgeschopt door grep.

code:
1
        _output="`ps axc | grep $1 | awk '{ print $1 }'`"
Als je die "grep $1" vervangt door "grep -- $1", dan zou dat bugje opgelost moeten zijn. Grep ziet argumenten na -- niet meer als opties (Dit geldt voor alle programma's die GNU getopt_long() gebruiken overigens).
bras schreef op 08 december 2003 @ 22:33:
Naam: mvwrap
Doel: Meerdere files/directories makkelijk renamen
Er bestaat ook een perl-scriptje genaamd 'rename', dat hetzelfde doet. Zit als het goed is bij de meeste perl distributies.




Naam: upgrade
Doel: Controleren of er updates beschikbaar zijn voor Debian
Werking: Update de package lists, en kijk of een upgrade iets zou veranderen. Als er iets zou veranderen, mail root, met in het mailtje wat er zou veranderen. Het daadwerkelijk installeren van de updates moet met de hand. Dit scriptje notificeert alleen.
OS/Taal: Unices/Shell. Alleen zinnig op Debian uiteraard.
Configuratie: -
Parameters: -
Opmerkingen: Eigenlijk alleen nuttig voor Debian Stable security updates. Met Unstable zou je elke dag mail hebben.
Zeer handig om in /etc/cron.daily neer te gooien.

code:
1
2
3
4
5
6
7
8
9
#! /bin/sh

(apt-get -qq update && apt-get -dqq upgrade && apt-get -sqq upgrade) > /tmp/upgrade.tmp 2>&1

if [ -s /tmp/upgrade.tmp ]; then
        mail -s "$(hostname): New security updates available" root < /tmp/upgrade.tmp
fi

rm -f /tmp/upgrade.tmp


Sorry voor mijn afwijkende script-info >:) Voor de mensen die mijn tabelletje willen copy/pasten:
code:
1
2
3
4
5
6
7
8
9
[table border=1]
[tr][td][b]Naam:[/b][/td][td] - [/td][/tr]
[tr][td][b]Doel:[/b][/td][td] - [/td][/tr]
[tr][td][b]Werking:[/b][/td][td] - [/td][/tr]
[tr][td][b]OS/Taal:[/b][/td][td] - [/td][/tr]
[tr][td][b]Configuratie:[/b][/td][td] - [/td][/tr]
[tr][td][b]Parameters:[/b][/td][td] - [/td][/tr]
[tr][td][b]Opmerkingen:[/b][/td][td] - [/td][/tr]
[/table]


Ik zie trouwens vrij vaak links naar scriptjes op webservers ergens. Dat is inderdaad leesbaarder, maar het is wel jammer dat er ongetwijfeld scripts onbereikbaar gaan worden als dit topic oud wordt...

[ Voor 3% gewijzigd door deadinspace op 12-08-2004 02:29 ]

Pagina: 1 2 3 Laatste