Het grote "handige scripts" topic

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pinball
  • Registratie: Oktober 1999
  • Niet online

pinball

Electric Monk

Topicstarter
Naam: easymail.pl
Doel: testmail sturen zonder MX lookup, evt. mét eicar test, zonder de heisa van <emailprog>
Werking: levert simpel mailtje af bij opgegeven server
OS: any Taal: perl
Configuratie: zelf vullen met servers (naam of ip) en adressen Parameters: -
Opmerkingen: mail sturen met een andere afzender is zelden echt grappig.
Denk er verder aan dat het eerste item in de server- of adres lijst [0] is, en niet 1.
Zoals het nu staat stuurt het een mailtje op de locale machine (localhost) met afzender ikke@test.nl naar postmaster@domein.nl zonder CC en zonder virustest.


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
#!/usr/bin/perl -w
use Net::SMTP;
use strict;

my @toservers = qw/     localhost
                        mail6.messagelabsx.com 
                        mail1.virusvrijx.nl 
                        mail.xxxxx.nl
                        /;
my @address = qw/       ikke@werk.nl 
                        ikke@test.nl 
                        mailme@xxxx.nl
                        postmaster@domein.nl
                        /;

my $server = $toservers[0];
my $fromaddr = $address[1];
my $toaddr = $address[3];
my $ccaddr = $address[2];
my $cc = 0;
my $virustest = 0;
my $subj = "test van $fromaddr naar $toaddr";

my $smtp = Net::SMTP->new($server);

$smtp->mail($fromaddr);
$smtp->to($toaddr);

$smtp->data();
$smtp->datasend("From: $fromaddr\n");
$smtp->datasend("To: $toaddr\n");
$smtp->datasend("cc: $ccaddr\n")
        if ($cc == 1);
$smtp->datasend("Subject: $subj\n");
$smtp->datasend("\n");
$smtp->datasend("from $fromaddr\n");
$smtp->datasend("to $toaddr\n");
$smtp->datasend("via $server\n");
$smtp->datasend('X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*')
        if ($virustest == 1);
$smtp->dataend();
$smtp->quit;

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


Acties:
  • 0 Henk 'm!

  • smoking2000
  • Registratie: September 2001
  • Laatst online: 13-09 10:17

smoking2000

DPC-Crew

dpkg-reconfigure reality

deadinspace schreef op 12 augustus 2004 @ 02:28:
[...]

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.


[...]
Je was nog niet bekend met de debian package cron-apt? Deze doet exact het zelfde qua functionaliteit.

Just FYI

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


Acties:
  • 0 Henk 'm!

Verwijderd

Stel:
- op kantoor heb je een linux werkstation
- je beheert een aantal unix-dozen waarop je m.b.v. het XDCMP protocol kunt aanloggen
Dan kan onderstaand scriptje handig zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cat stXnest.sh
#!/usr/bin/bash
#
if [ -z ${1} ]
then
   echo "Geen parameter? Doe het dan maar met jezelf!"
   gastheer=localhost
else
   gastheer=${1}
fi
#
for s in {10,11,12,13,14,15,16,17,18,19}
   do
      if [ ! -e /tmp/.X${s}-lock ]
      then
         /usr/X11R6/bin/Xnest -name ${gastheer} -query ${gastheer} -once -geometry 1250x925 :${s}
         exit 0
      fi
   done
#
echo "meer dan 10 sessies? Dat meen je niet. Sterker nog, dat doe ik niet!"
exit 1

[ Voor 3% gewijzigd door Verwijderd op 28-10-2004 10:27 ]


Acties:
  • 0 Henk 'm!

  • it0
  • Registratie: April 2000
  • Laatst online: 16-08 10:24

it0

Mijn mening is een feit.

Doel: Het maken van een dagelijkse backup van mijn scripts en database etc
BEschrijving: het bestaat uit 3 componenten
1 het archiveren met tar van de scripts
2 met mysqldump de databases dumpen en gzippen
3 rsyncen met mij webspace bij de provider

Omdat het allemaal pure text is comprimeert het lekker en raad het dus iedereen aan..

in de crontab
code:
1
2
3
MAILTO=""
SHELL=/bin/bash
1 2 * * * tar zcvf /mnt/mirror/backups/wwwscripts.tgz /var/www/*  && mysqldump calender|gzip>/mnt/mirror/backups/calender.gz && mysqldump photoblog|gzip>/mnt/mirror/backups/pblog.gz && rsync -r /mnt/mirror/backups email@xs4all.nl:backups


@spider.007/r3boot
Voor mij is een script een tekst bestand met commando's met eventueel wat logica en KISS is belangrijk!

[ Voor 39% gewijzigd door it0 op 29-10-2004 00:51 . Reden: Beter gedocumenteerd ]


Acties:
  • 0 Henk 'm!

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

Spider.007

* Tetragrammaton

it0 schreef op 28 oktober 2004 @ 13:54:
Doel: Het maken van een dagelijkse backup van mijn scripts etc

in de crontab
code:
1
2
3
MAILTO=""
SHELL=/bin/bash
[...]
Ik wil niet vervelend overkomen; maar is een script niet iets heel anders dan een 4-tal commando's achter elkaar geplakt? Aan de ene kant is jouw 'script' te specifiek voor jouw probleem; aan de andere kant kan iemand die dit kan aanpassen het zelf ook wel bedenken ;)

[ Voor 20% gewijzigd door Spider.007 op 28-10-2004 14:06 ]

---
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!

Verwijderd

Mja, een script is wat het is, een script. Dwz, een executable file waarin je commando's plakt. Of je nu extra logica gebruikt is een 2e, maar zodra je commando's gaat automatiseren mbv een file die executable is, is dat imho gewoon een script. De toepasbaarheid/bruikbaarheid van een script is een 2e though ;)

/offtopic

edit:

In bovenstaand voorbeeld van it0 had ik overigens die commando's in een script gepleurt ipv zo op de commandline. Maargoe, de command constructie an-sich is "handig" genoeg om imho in dit topic gepost te worden.

[ Voor 32% gewijzigd door Verwijderd op 28-10-2004 14:19 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Sommige switches houden een SSH-verbinding waar geen data overheen gaat niet open, dan blijf je wel ingelogd maar kan je niets meer doen. Als dat je dus meerdere keren overkomt op een dag ben je zo met 4 users ingelogd terwijl je maar er maar 1 gebruikt. Om zo'n verbinding open te houden heb ik het volgende scriptje in elkaar geflanst:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

#Scriptje om de ssh-verbinding open te houden

#KCA=Keep Connection Alive
i=1
echo `clear`
while [ "$quit" != "true" ]
do
        echo `date` > ~/KCA.dat
        echo "KCA data: #$i ("`date`")"
        echo
        sleep 15
        let "i+=1"
done

Je stopt het met CTRL-C :), het zal vast wel beter kunnen maar ik ben niet zo'n ster in shellscripten.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Stacium
  • Registratie: Februari 2001
  • Niet online

Stacium

Perfect Molecular Chaos

AtleX schreef op 29 oktober 2004 @ 19:00:
Om een ssh-verbinding open te houden heb ik het volgende scriptje in elkaar geflanst:
[...]
`ssh -o TCPKeepAlive=yes` does the trick ;)

kun je ook in je ssh_config zetten

It seemed like a good idea at the time


Acties:
  • 0 Henk 'm!

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 22:38

BoAC

Memento mori

AtleX schreef op 29 oktober 2004 @ 19:00:
code:
1
        echo `date` > ~/KCA.dat
Wel een beetje dubbel op denk ik ;)
Misschien beter:
code:
1
 date > ~/KCA.dat

Ik heb trouwens problemen met date in een bash-script:
code:
1
2
3
#!/bin/bash
DATEVALUE="\"Oct 29 20:04:00 CEST 2004\""
date -s $DATEVALUE

Hierbij krijg ik de fout dat 20:04:00 een ongeldige parameter is 8)7

[ Voor 7% gewijzigd door BoAC op 29-10-2004 19:11 ]


Acties:
  • 0 Henk 'm!

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

Spider.007

* Tetragrammaton

BoAC schreef op 29 oktober 2004 @ 19:11:
[...]

[...]Ik heb trouwens problemen met date in een bash-script:
code:
1
2
3
#!/bin/bash
DATEVALUE="\"Oct 29 20:04:00 CEST 2004\""
date -s $DATEVALUE

Hierbij krijg ik de fout dat 20:04:00 een ongeldige parameter is 8)7
Dit werkt bij mij wel goed:
code:
1
2
DATEVALUE='Oct 29 20:04:00 CEST 2004'
date -s "$DATEVALUE"

---
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!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Stacium schreef op 29 oktober 2004 @ 19:05:
[...]


`ssh -o TCPKeepAlive=yes` does the trick ;)

kun je ook in je ssh_config zetten
Moet je nou mee komen 8)7 ;)
BoAC schreef op 29 oktober 2004 @ 19:11:
[...]

Wel een beetje dubbel op denk ik ;)
Misschien beter:
code:
1
 date > ~/KCA.dat
Dat kreeg ik niet aan de gang, ik kreeg de melding dat het dan een unknown command was.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

een heel kleintje:
code:
1
2
3
4
5
6
7
#!/bin/bash

for i in `grep -l x-html *`
do
        sed -e '/x-html/d' -e '/Content-Type/d' -e '/Mime-Version: 1.0/aContent-Type: text\/html' $i > tmp.file
        mv tmp.file $i
done


dit gebruik ik om mijn vanuit eudora geexporteerde (html) mails terug leesbaar te maken in bv Thunderbird :)

ps: ik heb ze vanuit eudora naar een imap account gekopieerd...zo blijven de attachments er aan hangen ;)

Acties:
  • 0 Henk 'm!

  • xychix
  • Registratie: September 2000
  • Laatst online: 12-09 07:37

xychix

FreeBSD Rules !

Verwijderd schreef op 22 november 2003 @ 19:00:
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
link is dood, dit is echter precies wat ik zocht.. heeft iemand m nog?

Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad


Acties:
  • 0 Henk 'm!

  • woutur
  • Registratie: Maart 2000
  • Laatst online: 11-09 09:43

woutur

Klauwtjes uit!

offtopic:
Een klein beetje offtopic, ik wil graag een script maken dat parameters toevoegt aan een bestaand bestand (het wordt een ini configurator voor een gameserver). Kan iemand mij in een goede richting duwen om dit te leren? Heb weinig script ervaring maar dit moet niet zo moeilijk zijn.

Edit: Dank je wel it0!

[ Voor 6% gewijzigd door woutur op 31-10-2004 21:30 ]

Als je niet de moeite neemt je post in net Nederlands te schrijven, neem ik de moeite niet hem te lezen.


Acties:
  • 0 Henk 'm!

  • it0
  • Registratie: April 2000
  • Laatst online: 16-08 10:24

it0

Mijn mening is een feit.

Woutur:

in perl zou ik het doen met een hash , waar je keywords vervangt. in het geval hieronder werk ik een bestand bij maar op een zelfde manier kan je een template inlezen en die aan een bestaand bestand kunnen toevoegen.
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
sub ParseFile{
    #parses files and it's config settings in them
    my($infile,$outfile)=@_;
    local *FI;
    local *FO;
    open(FI,'<',$infile)||die " Could not open $infile\n";
    open(FO,'>',$outfile)||die " Could not open $outfile\n";
    while(<FI>){
      s/@(\S+)\$/$CONFIGVARS{$1}/g;

      print FO $_;
    }
    close(FI);close(FO);
    print "Generated $outfile\n";

}

CONFIGVARS is dus de hash.   wat er dus gebeurt
$CONFIGVARS{'pizza'}='pepperoni'

Stel in je template staat het volgende
naam="@pizza$"

dan is de output

naam="pepperoni"

Acties:
  • 0 Henk 'm!

Verwijderd

Naam: sexec
Doel: op een aantal nodes een commando uitvoeren via ssh
Werking: sexec <commando>
OS: All
Taal: bash
Configuratie: in het script de nodes invoeren
Opmerkingen: kan ook doorconnecten via ssh. Uiteraard is ssh-agent heel handig...
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
# $Id: sexec,v 1.3 2004/11/16 11:52:40 compukid Exp $
# Written by: Daniel van Eeden <daniel_e@dds.nl>
# Depends on: coreutils, bash, ident, gawk, ssh
# Please use ssh keys or kerberos and not passwords.
# things to store in ~/.ssh/config:
# * default usernames and ports per system
# * agentforwarding for ${remote_proxy}

systems="node1 node2 node3 node4 node5"
remote_systems="rnode1 rnode2 rnode3"
remote_proxy="router1.example.com"

version=`ident $0 | tail -n 1 | awk '{ print $3 }'`
command=$*
log="$0.log"

echo -en "${0} version ${version}, logging to ${log}.\n" | tee ${log}

for sys in ${systems};
do 
    echo -en "\n### Output from ${command} on ${sys}\n" | tee -a ${log}
    ssh ${sys} "${command}" | tee -a ${log}
done

for remote_sys in ${remote_systems};
do
    echo -en "\n### Output from ${command} on ${remote_sys}\n" | tee -a ${log}
    ssh ${remote_proxy} "ssh ${remote_sys} \"${command}\"" | tee -a ${log}
done

[ Voor 18% gewijzigd door Verwijderd op 16-11-2004 13:02 ]


Acties:
  • 0 Henk 'm!

  • Straphka
  • Registratie: Augustus 2002
  • Niet online
Naam: Backup.ksh
Doel: Backuppen van hele directory bomen
Werking: Alle data wordt naar 1 directory gesynced met rsync, en de wijzigingen worden 1 directory dieper opgeslagen (incrementeel dus)
OS: *NIX
Configuratie: Centraal config bestand (zie onder)
Parameters: Het config bestand moet op de prompt meegegeven worden
Opmerkingen: Je kan in de config file maar 1 directory zetten, dus als je /home EN /tmp wil backuppen heb je pech. Het script is ook geschreven omdat ik hele bomen wilde backuppen. Zowel het script als de config file kan je vanaf een centrale plek runnen
Het script is niet over even consequent (de ene keer && gebruiken en de andere keer if....then, maar het werkt wel :)


Script:
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
#!/bin/ksh

# Backup script dat vanaf een centrale plaats op meerdere machines simultaan uit te voeren is
# Op de prompt moet het config bestand meegegeven worden

# set -x

# Kijk of er nog een instance loopt
test -f /tmp/backup.lock && echo "Er loopt reeds een instance van dit script met pid `cat /tmp/backup.lock`. Als dit niet het geval is dan moet /tmp/backup.lock verwijderd worden...exiting" && exit 1
echo $$ > /tmp/backup.lock

# Begin functie OpSchuif
OpSchuif()
{
    TARGET=$1
    CYCLES=$2
    COUNTER=$CYCLES
    let TARGETCOUNTER=COUNTER+1
    while [ ${TARGETCOUNTER} -ge 2 ]
        do
            if [ -d ${TARGET}/backup.${COUNTER} ]
                then
                    test -d ${TARGET}/backup.${TARGETCOUNTER}
                    mv ${TARGET}/backup.${COUNTER} ${TARGET}/backup.${TARGETCOUNTER} 2> /dev/null
                fi
            let COUNTER-=1
            let TARGETCOUNTER=COUNTER+1
        done
# Einde OpSchuif functie
}

CONFIG=$1
test ${#1} = 0 && echo "Er moet een een pad naar de config dir op de prompt meegegeven worden....exiting" && exit 1

# Kijk of de config file aanwezig is
test ! -f ${CONFIG} && echo "Config file ${CONFIG} niet gevonden...exiting" && exit 1

# Inlezen variabelen
ACTIVE=no
for VAR in `cat ${CONFIG} | grep -v ^"#"`
        do
                if [ ${VAR} = `uname -a | cut -d' ' -f2` ]
                        then
                                ACTIVE=yes
                        fi
                if [ ${VAR} = /`uname -a | cut -d' ' -f2` ]
                        then
                                ACTIVE=no
                        fi
                if [ ${ACTIVE} = yes ]
                        then
                                echo ${VAR} | cut -d'=' -f1 | grep ^CYCLES$ > /dev/null && CYCLES=`echo ${VAR} | cut -d'=' -f2`
                                echo ${VAR} | cut -d'=' -f1 | grep ^TARGET$ > /dev/null && TARGET=`echo ${VAR} | cut -d'=' -f2`
                            echo ${VAR} | cut -d'=' -f1 | grep ^SOURCE$ > /dev/null && SOURCE=`echo ${VAR} | cut -d'=' -f2`
                echo ${VAR} | cut -d'=' -f1 | grep ^RSYNC$ > /dev/null && RSYNC=`echo ${VAR} | cut -d'=' -f2`
                echo ${VAR} | cut -d'=' -f1 | grep ^EXCLUDELIST$ > /dev/null && EXCLUDELIST=`echo ${VAR} | cut -d'=' -f2`
            fi
        done

# Kijken of de excludelist wel aanwezig een leesbaar is
test ${#EXCLUDELIST} = 0 && echo "Excludelist is niet gezet...exiting" && rm -rf /tmp/backup.lock && exit 1
test ! -r ${EXCLUDELIST} && echo "Excludelist ${EXCLUDELIST} is niet aanwezig...exiting" && rm -rf /tmp/backup.lock && exit 1

# Kijken of de user wel root is
test ! `whoami` = root && echo "De gebruiker is geen root...exiting" && rm -rf /tmp/backup.lock && exit 1

# Afchecken SOURCE variabel
test ${#SOURCE} = 0 && echo "De source variabele is niet ingelezen...exiting" && rm -rf /tmp/backup.lock && exit
if [ `echo ${SOURCE} | cut -c${#SOURCE}` = / ] && [ ! ${#SOURCE} = 1 ]
    then
        echo "Source eindigt in een \"/\" en dit mag niet....exiting"; rm -rf /tmp/backup.lock && exit 1
    fi
test ! -d ${SOURCE} && echo "De source variabele verwijst niet naar een bestaande directory...exiting" && rm -rf /tmp/backup.lock && exit 1

# Afchecken TARGET varabele
test ${#TARGET} = 0 && echo "De target varabele is niet gezet...exiting" && rm -rf /tmp/backup.lock && exit 1
if [ ! -d ${TARGET} ]
    then
        echo "De target variabele is verwijst naar een niet bestaande directory....exiting"; rm -rf /tmp/backup.lock && exit 1
    fi

# Afchecken CYCLES variabele
test ${#CYCLES} = 0 && echo "De cycles variabele is niet ingelezen...exiting" && rm -rf /tmp/backup.lock && exit 1
let CYCLES+=0
test $? = 1 && echo "De cycles variabele is geen numeriek getal....exiting" && rm -rf /tmp/backup.lock && exit 1
test ${CYCLES} -le 3 && echo "Er moeten minimaal 4 cycles zijn uit veiligheidsoverwegingen" && rm -rf /tmp/backup.lock && exit 1

# Afchecken RSYNC variabele
test ${#RSYNC} = 0 && echo "De rsync variabele is niet ingelezen...exiting" && rm -rf /tmp/backup.lock && exit 1
test ! -f ${RSYNC} && echo "De rsync variabele verwijst niet naar een bestand....exiting" && rm -rf /tmp/backup.lock && exit 1

test -d ${TARGET}/backup.1 || mkdir ${TARGET}/backup.1
test -d ${TARGET}/backup.0 && OpSchuif ${TARGET} ${CYCLES}
${RSYNC} -avR --delete --exclude-from=${EXCLUDELIST} --backup --backup-dir=${TARGET}/backup.1 ${SOURCE} ${TARGET}/backup.0 > ${TARGET}/backup.`date +%d%m%y`.log
touch ${TARGET}/backup.0

DELMAX=100
while [ ${DELMAX} -gt ${CYCLES} ]
    do
        if [ -d ${TARGET}/backup.${DELMAX} ]
            then
                rm -rf ${TARGET}/backup.${DELMAX}
            fi
        let DELMAX-=1
    done

# Haal de lockfile weg
rm -rf /tmp/backup.lock


Config file voorbeeld:
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
# Centrale config file voor backup.ksh op de centrale server
# Voordat de variabelen gezet worden moet de naam van het systeem gegeven worden zonder domein (dus niet de FQDN)
# daarna worden de variabelen gezet (deze zijn verplicht) en daarna word het systeem-specefieke deel afgesloten met /systeemnaam
# De volgende variabelen zijn op dit moment verplicht:
# 1. CYCLES (diepte van de backup in cycles)
# 2. TARGET (waarnaar er gebackupped moet worden. In deze dir zal backup.0, backup.1 etc. aangemaakt worden)
# 3. SOURCE (Wat er gebackupped moet worden (momenteel maar 1 directory))
# 4. RSYNC (locatie van rsync)

server1

CYCLES=5
TARGET=/mnt/backup/unitest
SOURCE=/
RSYNC=/usr/local/bin/rsync
EXCLUDELIST=/excludelist

/server1

server2

CYCLES=5
TARGET=/mnt/backup/amanda_backup
SOURCE=/var/adm/amanda
RSYNC=/usr/local/bin/rsync
EXCLUDELIST=/homeroot/excludelist
/server2

etc..........

[ Voor 30% gewijzigd door Straphka op 16-11-2004 16:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Naam: dvd.pl
Doel: File's selecteren die daarna op dvd worden gebrand (als de files bij elkaar < 4.4 gig zijn)
Werking: ./dvd.pl <file> <file> <file> etc.
OS: *nix
Taal: perl
Configuratie: de variable $device en $tmpdir editen
Opmerkingen: Je hebt wel Joliet nodig in je kernel en growisofs (http://fy.chalmers.se/~appro/linux/DVD+RW/)

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
#!/usr/bin/perl

## A fluffeh script by tuxx - (info@tuxx.net)
#
#
#  _____     __   __   _____    
# /\  __-.  /\ \ / /  /\  __-.  
# \ \ \/\ \ \ \ \'/   \ \ \/\ \ 
#  \ \____-  \ \__|    \ \____- 
#   \/____/   \/_/      \/____/
#
#   1. What does it do?
#     
#      You can use this script like this: ./dvd.pl file1.avi file2.avi file3.avi etc.
#      It will calculate the size of the files, if it's below 4.4GB the script will make
#      an ISO and after that will burn it on DVD.
#      
#   2. What do i need?
#      You need to have mkisofs and growisofs
#      It's also important to get Joliet in your kernel
#      Of course perl would be useful too (:
    
#Some variables you need to edit

$device = "/dev/sr0"; #Dvd burner
$tmpdir = "/zut/dvd/"; #This dir needs to exist! Enter with trailing slash!


#Shit you don't need to edit :P

if($#ARGV < 0) {
        printf("Usage: $0 <arg> <arg>\n");
}else{

        for($i = -1; $i < $#ARGV; $i++) {
                $explodeme = `du -ms $ARGV[$i]`;
                @explode = split(" ", $explodeme);
                $sum += $explode[0];
        }

        if($sum < 4505) {
        printf("Thats about $sum MB\n");
                printf("Make iso(y/n): ");
        chomp($make_iso=<STDIN>);
        if($make_iso eq 'n') {
            printf("Without an iso we can't burn a dvd now can we?\n");
        }elsif($make_iso eq 'y'){
            printf("Burn iso(y/n): ");
            chomp($burn_iso=<STDIN>);
        
            for($i = -1; $i < $#ARGV; $i++) {
                $dirs .= " ".$ARGV[$i];
            }
            
            system("mkisofs -o ".$tmpdir."dvd.iso -joliet-long $dirs");

            if($burn_iso eq 'y') {
                system("growisofs -dvd-compat -Z $device=".$tmpdir."dvd.iso");
                printf("Delete temporary iso file(y/n): ");
                chomp($delete_temp = <STDIN>);

                if($delete_temp eq 'y') {
                    system("rm -rf ".$tmpdir."dvd.iso");
                    printf("Deleted the temporary file\n");
                }elsif($delete_temp eq 'n') {
                    printf("Leaving the temporary file just where it is!\n");
                }else{
                    printf("Wrong choise!");
                }

            }elsif($burn_iso eq 'n'){
                printf("Not burning the file!\n");
            }else{
                printf("Not clear if I should burn iso, try again!");
            }

        }else{
            printf("Fill in y or n");
        }
        }else{
        printf("Thats about $sum MB\n");
                printf("j00 took too much man too much too much...\n");
        }

}


of http://tuxx.info/dvd.pl :)

[ Voor 11% gewijzigd door Verwijderd op 13-02-2005 21:45 ]


Acties:
  • 0 Henk 'm!

  • r.platenkamp603
  • Registratie: Oktober 2001
  • Laatst online: 08-08-2020

r.platenkamp603

Amd Rulez!

Hoi,
Nu heb ik een hoi.sh aan gemaakt en daat in staar:

#!/bin/bash
if [ -u "Rudy"]
then
echo "hoi Rudy"
else
echo "Jij bent niet Rudy"
fi

en als ik hem uitvoer zo als ik denk dat hij moet weken:
[root@localhost ~]# hoi.sh -u Rudy

dan krijg ik als nog Jij bent niet Rudy.

Acties:
  • 0 Henk 'm!

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

Spider.007

* Tetragrammaton

man test
-u filename
True if filename exists and its set-user- ID bit
is set.
Dit topic is overigens niet bedoeld als kort-dom vraagjes topic :)

---
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!

  • Buffy
  • Registratie: April 2002
  • Laatst online: 26-12-2024

Buffy

Fire bad, Tree pretty

Naam: dd_sticker
Doel: Het redden van een CD/DVD met een etiketsticker die bij verwarming de boel kromtrekt zodat er random leesfouten optreden.
Versie: 1.01
Werking: Leest mbv dd direct van het opgegeven block device tot een lees fout optreedt en ejects dan de CD/DVD zodat deze kan afkoelen waardoor hopelijk de kromming van de disc minder wordt. Na drie minuten wordt de drive weer gesloten en gaat dd verder vanaf het punt waar de fout optrad. Dit wordt herhaald tot alle sectors zijn gekopieerd. Het script kan opnieuw worden opgestart indien het afgebroken is voordat alle sectors zijn gekopieerd.
OS: Linux
Taal: Bash
Configuratie: Gebruikt blockdev (Debian-package: util-linux) en eject (Debian-package: eject)
Parameters: Eerste parameter is de block-device van de CD/DVD-rom (bv /dev/cdrom). De tweede parameter is de naam van het output bestand. de derde (optionele) parameter is het maximum aantal pogingen die gedaan worden om alle sectors te kopieren (default 1000).
Opmerkingen Als het script blijft 'hangen' bij een bepaalde sector (telkens 0 sectors ingelezen) kan je proberen het etiket met een doekje te bevochtigen zodat het wat meer uitzet.
Bugs: geen sanity check op de input parameters.


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
#!/bin/bash

blockdev="$1"
isoname="$2"

if [ "x$3" == "x" ]; then
    let ml=1000
else
    let ml=$3
fi

let b=`/sbin/blockdev --getss $blockdev`
let n=`/sbin/blockdev --getsize $blockdev`*512/b

echo "$blockdev : $n sectors of size $b"

function get_sectors() {
    if ! [ -f "$1" ]; then
       echo "File $i doesn't exists." 1>&2
       echo "-1"
       return 1
    fi
    let fsize=`du -b "$isoname" | cut -f1`
    ((fsect = fsize / b))
    if ((fsect * b < fsize)); then
       echo "Output filesize is not a multiple of $b." 1>&2
       echo "-1"
       return 1
    fi
    echo $fsect;
    return 0
}

if [ -f "$isoname" ]; then
   let s=`get_sectors "$isoname"`
   if ((s < 0)); then
      echo "Aborted"
      exit -1
   fi
   echo "Output file exists and contains $s sectors"
   if ((s > n)); then
      echo "Output file larger then input"
      echo "Aborted"
      exit -1
   fi
   echo "Appending $((n-s)) sectors to $isoname"
else
   let s=0
fi

let ns=0
let p=0
let l=0

while ((s < n && l < ml)); do
     if ((l++ > 0)); then
        sleep 180
     fi
     eject -t
     echo "Try: $l"
     dd if=$blockdev "of=$isoname" bs=$b skip=$s seek=$s
     let ns=`get_sectors "$isoname"`
     if ((ns < 0)); then
        echo "Aborted"
        exit -1
     fi
     ((p = ns - s))
     ((s = ns))
     sleep 5
     echo "Copied $p sectors ($s of $n)"
     eject -r
done

if ((s < n)); then
   echo "Prematurely aborted after $l tries"
else
   echo "Completed after $l tries"
fi
echo "Copied $s of $n sectors"



PS: Om een of andere reden levert du --block-size=2048 een verkeerd aantal sectors op, gelijk aan ls --block-size=2048 -s. Dat lijkt dus een feature te zijn maar de reden daarvan ontgaat mij.



edit:
Script herschreven zodat het niet langer gebruik maakt van tijdelijke bestanden en het script herstart kan worden opgestart met het zelfde output bestand

[ Voor 44% gewijzigd door Buffy op 27-03-2005 19:12 ]

That which doesn't kill us, makes us stranger - Trevor (AEon FLux)
When a finger points at the moon, the imbecile looks at the finger (Chinese Proverb)


Acties:
  • 0 Henk 'm!

  • capedro
  • Registratie: Oktober 2000
  • Laatst online: 25-07 18:11
Naam: bluelock
Doel: Het locken van je pc wanneer je wegloopt. Dit doormiddel van detectie dat (bijvoorbeeld) je gsm niet meer middels bluetooth bereikbaar is.
Versie: 0.1
Licentie:GPL
Werking: Scant middels hcitool naar het MAC-Adres van je telefoon en lockt middels xlock
OS: Linux
Taal: Bash
Configuratie: Even de variabel $AUTHMAC aanpassen aan je eigen mac-adres van je telefoon.
Parameters: nvt
Website:http://www.adslweb.net/software/bluelock/
Package:bluelock-0.1.tar.gz

[ Voor 58% gewijzigd door capedro op 03-03-2005 12:52 ]

My weblog


Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 12-09 21:30

odysseus

Debian GNU/Linux Sid

Naam: hl (voor 'highlight')
Doel: geeft een gezochte string een opvallende kleur zodat die beter opvalt
Werking: maakt gebruik van control characters van de shell
OS: - Taal: SH-compatible (sed vereist)
Configuratie: -
Parameters: het te highlighten woord.
Opmerkingen: De tekst dient binnen te komen op stdin. Voorbeeld: echo a b c b | hl b
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/sh

on=`tput smso`
off=`tput rmso`
IFS=""

while read line
do
        echo $line | sed s/$1/$off$1$off/g
done

Een klein, ontzettend simpel script...maar erg handig als je iets zoekt in de uitvoer van een commando en geen grep kunt gebruiken omdat je de rest van de uitvoer ook nog in beeld wilt hebben :).

[ Voor 4% gewijzigd door odysseus op 09-04-2005 22:35 . Reden: vergeten wat variabelen te gebruiken ]

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!

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 13-09 13:29

WHiZZi

Museumdirecteurtje

Naam: backup_www.sh
Doel: Maakt backups van documentroots aan de hand van entries in apache config met rdiff-backup
Werking: backup_www.sh aanroepen (bijv in cron)
OS: N/A Taal: bash
Configuratie:
BACKUP is de plek waar je naar toe wilt backuppen.
Eventueel de configfile lokatie van Apache's vhosts aanpassen

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
#!/bin/bash

echo "
******************************************
**              backup_www.sh           **
**   Een dagelijkse backup met rdiff    **
******************************************
"
echo ""
## Variabelen setten

BACKUP="/storage/backup/WWW"
RDIFFB="/usr/bin/rdiff-backup --print-statistics"
RDIFFC="/usr/bin/rdiff-backup --remove-older-than 2W --force"
##############################################################################
STARTDATUM=`/bin/date`

for f in $( /bin/grep [d/D]ocument[r/R]oot /etc/apache2/vhosts.conf | /bin/grep -v "#" | /bin/awk -F " " {'print $2'} )
do
 echo ".... Back up van" $f
 BKLANT1=`echo $f | /bin/awk -F "/" {'print $4'}`
 BKLANT2=`echo $f | /bin/awk -F "/" {'print $5'}`
 if [ ! -d $BACKUP/$BKLANT1 ]; then
     echo "*WRN Directory $BACKUP/$BKLANT1 niet gevonden... aanmaken"
     echo ""
     /bin/mkdir $BACKUP/$BKLANT1
 fi

 if [ ! -d $BACKUP/$BKLANT1/$BKLANT2 ]; then
     echo "*WRN Directory $BACKUP/$BKLANT1/$BKLANT2 niet gevonden... aanmaken"
     echo ""
     /bin/mkdir $BACKUP/$BKLANT1/$BKLANT2
 fi

 BACKUPPATH="$BACKUP/$BKLANT1/$BKLANT2/"
 echo ".... Starten backup "
 $RDIFFB $f $BACKUPPATH
 echo ".... Opruimen oude bestanden "
 $RDIFFC $BACKUPPATH
 echo " ------------------------------- "
continue
done


EINDTIJD=`/bin/date`
echo "
******************************************
**              BACKUP KLAAR            **
**   STARTTIJD: $STARTDATUM             **
**   EINDTIJD : $EINDTIJD               **
******************************************

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


Acties:
  • 0 Henk 'm!

  • Surfer
  • Registratie: December 2001
  • Laatst online: 21-03 22:55

Surfer

~

Om het 'handige scripts' topic weer een beetje leven in te blazen hier een toevoeging van mij. Het is een _verschrikkelijk_ simpel scriptje, maar ik vind hem zelf wel handig. Het is niet bedoeld als script waarvan men zegt "omg, wat heeft ie dat mooi gemaakt" maar meer van "hmm, dat ik daar niet aan gedacht heb :+

Naam: service
Doel: Voor mensen die Redhat/Fedora gewend zijn en maar niet kunnen wennen aan het volledige pad intypen om een initscript te starten.
Werking: In plaats van het invoeren van # /etc/init.d/scriptnaam start (zoals je dat bij bijvoorbeeld Gentoo moet doen) kun je nu gewoon op de RH manier # service scriptnaam start invoeren
OS: Linux
Taal: Bash
Configuratie: nvt
Parameters: scriptnaam / actie
Opmerkingen: root execute rechten geven op het bestandje service en deze in /usr/sbin plempen.
code:
1
2
#!/bin/bash
/etc/init.d/$1 $2

“I'd give an arm to be ambidextrous!"


Acties:
  • 0 Henk 'm!

  • m17
  • Registratie: Augustus 2004
  • Laatst online: 07-12-2021

m17

Naam: md5dinges
Doel: gooit md5sums van alle files in md5sums
Werking: tsja
OS: linux Taal:bash
Configuratie: -
Parameters: -
Opmerkingen:
code:
1
2
#! /bin/bash
for i in `find . -type f | cut -b 3-`; do md5sum $i; done > md5sums


voor het maken van debian packages is dit vrij handig aangezien ik geen standaard tooltje hiervoor kon vinden.

deze tool levert dus de md5sums file op met daarin de filenaam + md5sum, zoals je in .debs tegenkomt.

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:00

Robtimus

me Robtimus no like you

SrFr schreef op dinsdag 06 september 2005 @ 16:46:
Om het 'handige scripts' topic weer een beetje leven in te blazen hier een toevoeging van mij. Het is een _verschrikkelijk_ simpel scriptje, maar ik vind hem zelf wel handig. Het is niet bedoeld als script waarvan men zegt "omg, wat heeft ie dat mooi gemaakt" maar meer van "hmm, dat ik daar niet aan gedacht heb :+

Naam: service
Doel: Voor mensen die Redhat/Fedora gewend zijn en maar niet kunnen wennen aan het volledige pad intypen om een initscript te starten.
Werking: In plaats van het invoeren van # /etc/init.d/scriptnaam start (zoals je dat bij bijvoorbeeld Gentoo moet doen) kun je nu gewoon op de RH manier # service scriptnaam start invoeren
OS: Linux
Taal: Bash
Configuratie: nvt
Parameters: scriptnaam / actie
Opmerkingen: root execute rechten geven op het bestandje service en deze in /usr/sbin plempen.
code:
1
2
#!/bin/bash
/etc/init.d/$1 $2
Zoiets is er onder RedHat / FC al, en goh, het heet precies hetzelfde ;)
Het staat alleen in /sbin ipv /usr/sbin, en is onderdeel van de initscripts package.

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


Acties:
  • 0 Henk 'm!

  • Da Fox
  • Registratie: Juni 2004
  • Laatst online: 12-09 21:51
dat zegt SrFr ook:
Doel: Voor mensen die Redhat/Fedora gewend zijn en maar niet kunnen wennen aan het volledige pad intypen om een initscript te starten.
:z

"Man fears the darkness, and so he scrapes away at the edges of it with fire." - Rei Ayanami


  • Coen Rosdorff
  • Registratie: Januari 2000
  • Niet online
drgsgbrkr schreef op woensdag 07 september 2005 @ 10:19:
code:
1
2
#! /bin/bash
for i in `find . -type f | cut -b 3-`; do md5sum $i; done > md5sums
Wat is er mis met:
code:
1
find . -type f -exec md5sum {} \; > md5sums

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

Spider.007

* Tetragrammaton

little_soundman schreef op donderdag 08 september 2005 @ 02:14:
[...]

Wat is er mis met:
code:
1
find . -type f -exec md5sum {} \; > md5sums
Dat die zo kort is dat hij geen post in dit topic meer verdient ;) Hoe kan een one-liner immers een "handig script" zijn? :P

---
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


Verwijderd

Mijn scriptje om bsd-style MD5-sums om te zetten naar linux-style :)

code:
1
2
#!/bin/bash
gawk 'BEGIN { FS = " " } { print $4 "  " $2 }' MD5 | gawk 'BEGIN { FS = "(" } { print $1 $2 }' | gawk 'BEGIN { FS = ")" } { print $1 }' > md5sums.md5


Dit was eigenlijk mijn eerste awk scriptje dus het zal wel een stuk korter kunnen, maar ik gebruik het nog altijd met volle tevredenheid :)

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:52
Spider.007 schreef op donderdag 08 september 2005 @ 08:05:
[...]

Dat die zo kort is dat hij geen post in dit topic meer verdient ;) Hoe kan een one-liner immers een "handig script" zijn? :P
en hij start niet met #!/bin/sh (of zoiets). Dus is het geen script :P

  • m17
  • Registratie: Augustus 2004
  • Laatst online: 07-12-2021

m17

ge-flopt schreef op donderdag 08 september 2005 @ 10:35:
[...]

en hij start niet met #!/bin/sh (of zoiets). Dus is het geen script :P
naja, niet tevreden? dan wis je um toch? mijn kennis van shellprogrammeren is bijna 0 vandaar dat ik niet zo gemakkelijk een betere/kortere oplossing kan vinden.

ga jij maar even 4 talen doen en dan zomaar ineens ook alles van bash/sh weten/kunnnen

hmmm

nee, dat lukt niet

  • ge-flopt
  • Registratie: Februari 2001
  • Laatst online: 22:52
Zie je die smiley's? Dat betekend dat er een grapje gemaakt wordt. Overigens 4 talen ken ik: Nederalnds, Engels, Duits, Delphi en shell... (P.S. dit is ook een grapje)

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:00

Robtimus

me Robtimus no like you

Da Fox schreef op woensdag 07 september 2005 @ 14:56:
dat zegt SrFr ook:
Doel: Voor mensen die Redhat/Fedora gewend zijn en maar niet kunnen wennen aan het volledige pad intypen om een initscript te starten.
:z
Oeps, niet helemaal goed gelezen ;)

Trouwens misschien een kleine aanpassing van het script dan: gebruik niet $2 maar ALLE andere parameters. Kun je met ${@:2} doen.

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


Verwijderd

SrFr schreef op dinsdag 06 september 2005 @ 16:46:
Om het 'handige scripts' topic weer een beetje leven in te blazen hier een toevoeging van mij. Het is een _verschrikkelijk_ simpel scriptje, maar ik vind hem zelf wel handig. Het is niet bedoeld als script waarvan men zegt "omg, wat heeft ie dat mooi gemaakt" maar meer van "hmm, dat ik daar niet aan gedacht heb :+
[...]
Zelfde code, zelfde doel, meer checks, net iets efficienter :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

BASE="/etc/init.d"

if [ ${#} != 2 ]; then
        echo "Usage: $(basename ${0}) <scriptname> <start|stop|restart|...>"
        exit 1
fi

if [ ! -x ${BASE}/${1} ]; then
        echo "Cannot find ${BASE}/${1}, exiting ..."
        exit 1
fi

exec /etc/init.d/$1 $2
exit 0

  • ZEN
  • Registratie: April 2000
  • Laatst online: 10-03-2021

ZEN

huh? wat doe ik hier?

SrFr schreef op dinsdag 06 september 2005 @ 16:46:
Naam: service
Doel: Voor mensen die Redhat/Fedora gewend zijn en maar niet kunnen wennen aan het volledige pad intypen om een initscript te starten.
ik weet niet hoe het zit met andere distro's, maar debian based distro's doen het zo:
code:
1
invoke-rc.d apache restart

Linux server installatie en beheer (clusters failover loadbalancing): http://www.virtualconcepts.nl/


Acties:
  • 0 Henk 'm!

  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 13-08 16:01
Naam: Rotate image
Doel: Draait de geselecteerde jpeg bestanden in Nautilus 90 graden
Werking: Selecteer een of meer jpeg bestanden, klik met rechts en kies 'rotate image'.
OS: Un*x
Taal: python
Configuratie: -
Parameters: -
Opmerkingen:
1. jpegtrans moet geinstalleerd zijn (wordt gechecked - zit in het pakket libjpeg-progs)
2. python-nautilus moet geinstalleerd zijn (zit in bv. Ubuntu)
3. libnautilus-extension1 moet geinstalleerd zijn (zit in bv. Ubuntu)
4. Dit script moet in /usr/lib/nautilus/extensions-1.0/python/ worden gezet.

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
import urllib
import nautilus
import os

SUPPORTED_FORMATS = 'image/jpeg'
JPEGTRAN = 'jpegtran'

class RotateImageExtension(nautilus.MenuProvider):
    def __init__(self):
        self.jpegtran_found = (os.system("which " + JPEGTRAN + " >/dev/null") == 0)
        if not self.jpegtran_found:
            os.system("zenity --info --text \"not found\"")
    
    def menu_activate_cb(self, menu, files):
        for file in files:
            if not file.is_gone():
                    # Strip leading file://
                filename = urllib.unquote(file.get_uri()[7:])

                # Make up a new filename:
                (shortname, extension) = os.path.splitext(filename)
                new_filename = shortname + "_rotate90" + extension
                jpegtran = JPEGTRAN + " -copy all -rotate 90 -trim \"" + filename + "\" > \"" + new_filename + "\""
                move = "mv -f \"" + new_filename + "\" \"" + filename + "\""

                # run jpegtran
                os.system(jpegtran + " && " + move);
        
    def get_file_items(self, window, files):
        supported_files_selected = False
        if not self.jpegtran_found:
            return

        # We're only going to put ourselves in local, supported images
        for file in files:
            if (file.get_mime_type() in SUPPORTED_FORMATS) and (file.get_uri_scheme() == 'file'):
                supported_files_selected = True
                break
    
        if not supported_files_selected:
            return

        item = nautilus.MenuItem('NautilusPython::rotate_image',
                                 'Rotate image',
                                 'Rotate the selected image(s) 90 degrees clockwise, lossless.')
        item.connect('activate', self.menu_activate_cb, files)
        return item,

[ Voor 40% gewijzigd door ajvdvegt op 12-11-2005 15:21 . Reden: CODE-tags maken onzin van python..... ]

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


Acties:
  • 0 Henk 'm!

Verwijderd

Doel: Het vragen om een nieuw wachtwoord voor een "verse gebruiker" en plaatsen van nieuw login script
OS: UNIX(tm)
Taal: posix sh (al is dit script wel gebouwt voor boxen met een bash shell)
Werking: Het script wordt uitgevoerd als .bashrc; De user wordt gevraagt om een nieuw wachtwoord, waarna er een nieuwe bashrc gegenereerd wordt. Deze wordt vervolgens over de huidige .bashrc heengeschreven waarna de nieuwe .bashrc ingeladen wordt. Dit script wordt dus eenmalig per gebruiker uitgevoerd, en is ideaal geschikt voor verdere uitbreiding cq initialisatie wat je per gebruiker wilt laten uitvoeren.
Opmerkingen: Gebruik voor het toevoegen van users een tool welke de inhoud van /etc/skel naar de homedir van de vers aangemaakte gebruiker kopieert of doe dit met de hand. Plaats dit script in /etc/skel/.bashrc. Maak vervolgens een /etc/skel/.profile aan met daarin de volgende inhoud:
code:
1
test -f ${HOME}/.bashrc && . ${HOME}/.bashrc

De daadwerkelijke /etc/skel/.bashrc kan (bijvoorbeeld) de volgende inhoud hebben:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Vraag om het nieuwe wachtwoord. Wees creatief, en je kunt hier
# alle kanten mee op.
passwd ${USER}

# Dit kan ook dmv een extra file. Gebruik hiervoor bijvoorbeeld:
# cp /pad/naar/standaard/bashrc ${HOME}/dot_bashrc
# ipv de code die hieronder gebruikt wordt.
cat > ${HOME}/dot_bashrc <<EOF
PS1="\h [\W]$ "
PATH="\${PATH}:${HOME}/bin"
PAGER="less"
EDITOR="vi"
export PS1 PATH PAGER EDITOR
EOF

# Maak de kopieer actie atomisch, zodat de kans op fouten bij het
# aanmaken van de .bashrc minimaal blijven (Door de file in 1 x te
# moven ipv een tijdlang een file descriptor open te houden terwijl
# er data naar de file geschreven wordt)
mv ${HOME}/dot_bashrc ${HOME}/.bashrc
. ${HOME}/.bashrc

Acties:
  • 0 Henk 'm!

  • Logic
  • Registratie: Juni 2000
  • Laatst online: 12-09 22:50

Logic

SmartOS:Love at First Boot

odysseus schreef op zaterdag 09 april 2005 @ 22:33:
Naam: hl (voor 'highlight')
Doel: geeft een gezochte string een opvallende kleur zodat die beter opvalt
Werking: maakt gebruik van control characters van de shell
OS: - Taal: SH-compatible (sed vereist)
Configuratie: -
Parameters: het te highlighten woord.
Opmerkingen: De tekst dient binnen te komen op stdin. Voorbeeld: echo a b c b | hl b
code:
1
2
3
4
5
6
7
8
9
10
#!/bin/sh

on=`tput smso`
off=`tput rmso`
IFS=""

while read line
do
        echo $line | sed s/$1/$off$1$off/g
done

Een klein, ontzettend simpel script...maar erg handig als je iets zoekt in de uitvoer van een commando en geen grep kunt gebruiken omdat je de rest van de uitvoer ook nog in beeld wilt hebben :).
dit leek mij een heel handig scrippie, dus zat het druk uit teproberen.. maar het werkte niet..
todat ik even heel goed keek: echo $line | sed s/$1/$off$1$off/g
er staat 2x off :P
echo $line | sed s/$1/$on$1$off/g
dat moet hem zijn :)

If it bleeds, it can be killed!


Acties:
  • 0 Henk 'm!

Verwijderd

Naam: ssh_master.sh
Doel: Het starten van een background screen met daarin een ssh multiplexing master sessie naar een bepaalde host. Hiermee voorkom je dat je per ongeluk deze sessie sluit terwijl je nog ssh client welke gebruik maakt van de master socket.
OS: UNIX(tm)
Taal: Bash
Benodigdheden: ssh keys + ssh-agent, een ssh_config waarin je users aan servers koppelt. En natuurlijk ssh 4.x of hoger
Parameters: ssh_master.sh servername [some command to run on the server]
Werking: Het script kijkt of je alreeds een mux socket hebt, en als je deze niet hebt, wordt er een screen in de achtergrond gestart met daarin een ssh sessie naar de gekozen server. Nadat deze sessie established is (eg, er is een mux socket), dan zal er nog een sesie gestart worden, welke je kunt gebruiken. Op het moment dat je dit script start en de mux socket is alreeds aanwezig, dan zal direct een sessie opgestart worden.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

if [ ${#} -lt 2 ]; then
        echo "Usage: $(basename ${0}) REMOTE [CMD]"
        exit 1
fi

REMOTE="${1}" ; shift
[ ${#} -ge 1 ] && CMD="${@}"

MUX="${HOME}/.ssh/mux-*@${REMOTE}:22"
if [ ! -S ${MUX} ]; then
        echo "Spawning master session, please wait"
        screen -dmS "${REMOTE}_ssh_master" ssh -t ${REMOTE}
        while :; do
                [ -S ${MUX} ] && break
                sleep 1
        done
fi
ssh -t ${REMOTE} ${CMD}

[ Voor 8% gewijzigd door Verwijderd op 07-11-2005 11:53 ]


Acties:
  • 0 Henk 'm!

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

VROEM!

broembroem!

Ik heb net een handig backup scriptje geklust voor backuppen vanaf een linux bak richting een windows bak met dynamisch IP :)

Neemt geen input aan, je moet effe in de variabelen aanpassen wat hoort bij jouw setup.

Ik draai mijn backups naar 2 losse harddisks die in 1 PC zitten, dus vandaar dat ik 2 bestemmingen heb.

Naam: backup.sh
Doel: Het starten van een backup naar een windows/samba host waarvan je niet het ip maar wel de hostnaam weet
OS: linux/unix
Taal: Bash
Benodigdheden: Bash, rsync, cat, mount, unmount, cifs kernel module, samba, echo
Parameters: geen, moet je zelf editen
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/sh
echo "Welkom bij VROEM's turbo backup script!"
USER=user
PASSWORD=password
HOST=hostname
OPTS="riupPL --delete --delete-excluded --exclude *Thumbs*"
DEST=/mnt/backup/dest/
SOURCE=/mnt/backup/source/
echo "` nmblookup ANSYSBEEST | grep "<00>"`" > ip
IP=`cat ip | cut -d " " -f1`
echo Voor de zekerheid eerst dubbel gemounte shares unmounten
umount -l "$DEST"d
umount -l "$DEST"d
umount -l "$DEST"f
umount -l "$DEST"f
echo mounten die hap
mount -t cifs //$IP/d "$DEST"d -o rw,username=$USER,password=$PASSWORD
mount -t cifs //$IP/f "$DEST"f -o rw,username=$USER,password=$PASSWORD

echo starting backup...
rsync -$OPTS $SOURCE $DEST
echo Backup done...
umount -l "$DEST"d
umount -l "$DEST"d
umount -l "$DEST"f
umount -l "$DEST"f
echo Shares geunmount

Ik gebruik de "lazy" unmount en doe dat 2x per share omdat ik bij het debuggen van het script wel eens dubbel gemounte shares kreeg. Dit genereert wel een foutmelding, maar bespaart je gezeik :)

[ Voor 36% gewijzigd door VROEM! op 21-12-2005 16:14 ]

ieeeepppppp :P


Acties:
  • 0 Henk 'm!

  • sPENKMAN
  • Registratie: April 2002
  • Laatst online: 04-09 12:42
Naam: logger.sh
Doel: Het parses van /var/log/messages(.0) en de gegevens van mijn ADSL verbinding in een database zetten.
OS: UNIX(tm)
Taal: Bash
Benodigdheden: Een user die sudo mag uitvoeren en in mijn geval een ADSL Speedtouch USB modem met bijbehorende drivers.
Opmerking: Dit scriptje is zeker nog op veel punten verbeterbaar, ik was al blij dat ik het werkende had :+
Werking: Het script verzamelt eerst alle log entries met modem_run in een temp file. Hier word wat niet relefante gegevens vanaf geknipt en vervolgens in een mysql database weggezet. Vervolgens kan je dan met een php scriptje wat statistiekjes maken.
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
#!/bin/bash

function f_maand_cijfer()
{
#echo '$1: ' $1
case $1 in
  "Jan"|"jan" )       maand=1;;
  "Feb"|"feb" )       maand=2;;
  "Mrt"|"mrt" )       maand=3;;
  "Apr"|"apr" )       maand=4;;
  "Mei"|"mei" )       maand=5;;
  "Jun"|"jun" )       maand=6;;
  "Jul"|"jul" )       maand=7;;
  "Aug"|"aug" )       maand=8;;
  "Sep"|"sep" )       maand=9;;
  "Okt"|"okt" )       maand=10;;
  "Nov"|"nov" )       maand=11;;
  "Dec"|"dec" )       maand=12;;
esac

echo $maand
}

function f_query()
{
mysql -h localhost --user=<gebruikersnaam> --password=<wachtwoord>  --database=logs --execute="$1" 2>> /root/logparser/mysql.log

}

sudo rm -rf /root/logparser/temp.log

echo 'Logger verzamelt de nodige gegevens...'

sudo cat /var/log/messages | grep 'modem_run' | awk {'print $1 " " $2 " " $3 " " $6 " " $7 " " $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14 " " $15'} >>$
sudo cat /var/log/messages.0 | grep 'modem_run' | awk {'print $1 " " $2 " " $3 " " $6 " " $7 " " $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14 " " $15'} $

# Dit programma haalt de gevens van de ADSL connectie uit de logs en zet deze in een mysql tabel
sudo chmod 777 temp.log

sudo cat /root/logparser/temp.log | while read line
do
        TEST=`echo $line | awk {'print $4'}`

        if [ "$TEST" = modem_run ]
        then
                echo -n ''
        else
                #echo -n ' ' $i

                # Haal het huidige jaar op
                JAAR=`date | awk {'print $6'}`

                # Haal de maand op en zet deze om naar een maand nummer
                MAAND_L=`echo $line | awk {'print $1'}`
                MAAND=`f_maand_cijfer $MAAND_L`

                # Haal de dag op
                DAG=`echo $line | awk {'print $2'}`

                # Haal de tijd op
                TIME=`echo $line | awk {'print $3'}`

                # Haal het bericht op
                BERICHT=`echo $line | awk {'print $4" "$5" "$6" "$7" "$8" "$9" "$10" "$11" "$12" "$13'}`

                f_query "INSERT INTO \`adsl_connectie\` (\`datum\`, \`tijd\`, \`bericht\`) VALUES ('"$JAAR"-"$MAAND"-"$DAG"', '"$TIME"', '$BERICHT')"
                i=$[$i+1]
                echo $i > /root/logparser/i.int
        fi
done

# Kijk hoeveel nieuwe items er waren.
MYSQL=`sudo cat mysql.log | wc -l`
I=`sudo cat /root/logparser/i.int`
NEW=$[$I-$MYSQL]

echo '  Er waren ' $NEW ' nieuwe berichten.'

echo 'Temp files opruimen'

sudo rm -rf /root/logparser/mysql.log
sudo sudo rm -rf /root/logparser/i.int
sudo rm -rf /root/logparser/temp.log

echo ''
echo 'Done'

Eve char: Warock <TEST>


Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 10-09 12:38
Naam: ultiembackupscript.sh
Doel: Het maken van een backup
OS: Linux achtige OSen
Taal: Sh
Benodigdheden: Een sh-shell, het progje date, iets om te backupen (MySQL/files op je HD) en evt wat aanpas skils
Opmerking: Dit script vond ik in mijn mailbox en leek mij wel handig voor mensen die iets willen backuppen.
Werking: Het script maakt voor iedere dag van de week een map en stopt daar een backup in van MySQL en je HD. De oude wordt evt weg geknikkerd. Het voordeel is dat je meerdere backups hebt en dat je server niet volloopt met backups als je het script een keer niet draait. (Wat wel eens voorkomt als je de file gewoon een datum geeft.)
Auteur: Dhr. A. Vermeer

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
#
DATE=`/bin/date +%a`

# REMOVE DIRS
/bin/rm -rf /data/backup/$DATE/files/
/bin/rm -rf /data/backup/$DATE/mysql/

# CREATE DIRS
/bin/mkdir -p /data/backup/$DATE/files/
/bin/mkdir -p /data/backup/$DATE/mysql/

# MySQL databases backup
cd /data/backup/$DATE/mysql/
for i in `/usr/local/bin/mysql -u root -pdummy -e 'show databases'|grep -v Database`;
  do /usr/local/bin/mysqldump -u root -pdummy $i > $i.sql && tar -cf $i.tar $i.sql && gzip -S .gz $i.tar && rm -rf $i.sql;
done
/bin/chmod 600 *.tar.gz

# BACKUP
/usr/bin/tar -zcvpf /data/backup/$DATE/files/full-backup.tar.gz --directory / /data/httpd /home
chmod 600 /data/backup/$DATE/files/full-backup.tar.gz

Acties:
  • 0 Henk 'm!

Verwijderd

Dat script kan met een klein beetje moeite een stuk efficiënter en universeler worden gemaakt. Zo kun je bijvoorbeeld de --opt optie van mysqldump gebruiken, en de output van mysqldump via pipes door tar en gzip duwen. Dat lijkt me al veel efficiënter.

Verder kun je natuurlijk wat variabelen gebruiken voor de mysql username en password, welke je aan het begin van het script een waarde geeft.

Ook een suggestie: gebruik find om bestanden ouder dan bijvoorbeeld een week te verwijderen:

find $BACKUPDIR -type f -mtime +7 -exec rm {} \;

Niet om te zeiken hoor, de basis is natuurlijk prima. Ik gebruik iets soortgelijks ;)

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

Spider.007

* Tetragrammaton

Naam: filter.sh
Doel: Mail filteren in Bash
OS: Linux achtige OSen
Taal: SH
Benodigdheden: een Maildir
Werking: Simpele grep's, moves enzo
Auteur: Spider.007

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
cd $HOME/Maildir/new/ && for i in * ; do [[ -f $i ]] && mv "$i" "$HOME/Maildir/cur/$i:2," ; done && cd -
unreadMails=`find $HOME/Maildir/cur -maxdepth 1 -type f -regex '.*,[^S]*$'`
printFormat="> %-15s: %-50s\n"
grepOpts='--quiet --max-count=1'

for file in $unreadMails
do
        subject=`grep --max-count=1 'Subject: ' $file|cut -d: -f2-`

        [[ $1 == '-v' ]] && echo $file

        grep $grepOpts --extended-regexp '^X-(XS4ALL-)?Spam(-Flag)?: YES' $file && mv $file $HOME/Maildir/.Junk/cur/
        [[ $? == '0' ]] && printf "$printFormat" Junk "$subject" && continue

        grep $grepOpts 'List-Id: "RoundCube Dev" <dev.lists.roundcube.net>' $file && mv $file $HOME/Maildir/.Lists.RoundCube/cur/
        [[ $? == '0' ]] && printf "$printFormat" Roundcube "$subject" && continue

        echo "not moved        >  $subject"
done

Heeft er nog iemand ideeen hoe je de mails uit Maildir/new als unread naar Maildir/cur krijgt? Ik weet dat je IMAP server dit doet als een client de mail heeft gevonden (niet gezien); maar kan dit ook netjes handmatig? Er moeten bepaalde renames uitgevonden worden die ik niet precies ken; en dit script werkt nu pas nadat een mailclient een listing met deze mails erin heeft opgevraagd..
edit:
Gevonden en toegevoegd als eerste regel

[ Voor 8% gewijzigd door Spider.007 op 22-12-2005 21:12 ]

---
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


  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 00:50
Om het dan maar ff volledig te doen: backup script voor MySQL, Postgresql en OpenLDAP:
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
#!/bin/sh
#
# Backup mysql, postgresql, ldap and some config files.

set -e

umask 0377

SAVELOG_OPTS="-m 0400 -u backup -g root -c 60 -j -n -q"
LDAP_ADMIN="admin dn"
LDAP_PASS="eenpassword"
LDAP_HOST="eenhostname"
MYSQL_PASS="eenpassword"
MYSQL_HOST="eenhostname"
POSTGRESQL_PASS="eenpassword"
BACKUP_MYSQL=/var/backups/mysql
BACKUP_POSTGRESQL=/var/backups/postgres
BACKUP_LDAP=/var/backups/ldap

if [ -f $BACKUP_LDAP/ldaptree.ldif ]; then
  savelog $SAVELOG_OPTS $BACKUP_LDAP/ldaptree.ldif
fi

for i in `mysql -u root --password=$MYSQL_PASS -h $MYSQL_HOST -r -e "SHOW DATABASES" | grep -v Database`; do
  if [ -f $BACKUP_MYSQL/$i ]; then
    savelog $SAVELOG_OPTS $BACKUP_MYSQL/$i
  fi
done

for i in `psql -U root -q -c "\l" template1 | grep "^ [a-z,A-Z]" | awk '{print $1}' | grep -v template0`; do
  if [ -f $BACKUP_POSTGRESQL/$i ]; then
    savelog $SAVELOG_OPTS $BACKUP_POSTGRESQL/$i
  fi
done

# Make backup of ldap tree
ldapsearch -x -D "$LDAP_ADMIN" -w $LDAP_PASS -h $LDAP_HOST -b "$LDAP_BASE" -LLL > $BACKUP_LDAP/ldaptree.ldif

# Make backup of the mysql databases
for i in `mysql -u root --password=$MYSQL_PASS -h $MYSQL_HOST -r -e "SHOW DATABASES" | grep -v Database`; do
  mysqldump -u root --password=$MYSQL_PASS -h $MYSQL_HOST -a --add-drop-table --databases $i > $BACKUP_MYSQL/$i
  chown backup:root $BACKUP_MYSQL/$i
done

# Make backup of the postgresql databases
for i in `psql -U root -q -c "\l" template1 | grep "^ [a-z,A-Z]" | awk '{print $1}' | grep -v template0`; do
  pg_dump -C -b -o -F t -f $BACKUP_POSTGRESQL/$i $i
  chown backup:root $BACKUP_POSTGRESQL/$i
done

exit 0

Het script gebruikt savelog van logrotate om 2 maand lang backups te bewaren. Elke nacht wordt vanaf een andere server met ssh en pipes de dump van de laatste paar dagen gebackupt naar tape.
Het valt misschien op dat er geen compressie wordt gebruikt: dit doet savelog wel voor ons, alleen de meest recente backup staat niet gecomprimeerd opgeslagen.
We gebruiken voor de LDAP backup een ldapsearch -LLL en het admin dn, maar je zou ook slapcat kunnen gebruiken, dan heb je er de complete gegevens wat betreft modification times ed ook bij. Wij doen dit niet omdat we het niet netjes vinden om aan de bdb backend van OpenLDAP te kloten terwijl dat ding nog in de lucht is.

Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 10-09 12:38
Verwijderd schreef op woensdag 21 december 2005 @ 21:41:
Dat script kan met een klein beetje moeite een stuk efficiënter en universeler worden gemaakt. Zo kun je bijvoorbeeld de --opt optie van mysqldump gebruiken, en de output van mysqldump via pipes door tar en gzip duwen. Dat lijkt me al veel efficiënter.

Verder kun je natuurlijk wat variabelen gebruiken voor de mysql username en password, welke je aan het begin van het script een waarde geeft.
Helemaal mee eens, maar het script doet wat het moet doen en dat was eigenlijk wel het belangrijkste. Daarnaast is enige feedback natuurlijk altijd welkom. :)
Ook een suggestie: gebruik find om bestanden ouder dan bijvoorbeeld een week te verwijderen:

find $BACKUPDIR -type f -mtime +7 -exec rm {} \;
Die is ook nog best handig en flexibel inderdaad. Misschien wel een goed idee om ook nog eens in te bouwen.
Niet om te zeiken hoor, de basis is natuurlijk prima. Ik gebruik iets soortgelijks ;)
Geeft niet hoor. Het kan er alleen maar beter van worden als iemand wat nuttige opmerkingen heeft. :>

Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Naam: frename.sh
Doel: Alle bestanden in een map hernoemen, bijvoorbeeld om namen lowercase te maken.
OS: MacOSX, Linux. Getest op MacOSX.
Taal: SH
Benodigdheden: shell
Werking: Gaat alle items in de bestaande directory af en hernoemt ze aan de hand van $command. Standaard worden de bestandsnamen omgezet van hoofdletters naar onderkast letters. Wat dit script anders maakt dan wat je op internet vindt: het kan ook recursief alle subdirectories nalopen (of nouja, het recursief itereren wordt uitbesteed aan 'find', dat leek me eenvoudiger); en er zit een redelijke interface omheen voor command-line parameters. Dat laatste kan nog wel ietsje beter: het script verwerkt nog geen gecombineerde parameters (zoals '-nrv').
Auteur: benoni

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
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
#!/bin/sh
#
# frename
# Changes every filename in working directory.
#
# Author: benoni
# License: free

# Switches for verbose run, dry run, recursive directory traversing
do_verbose=false
do_dry_run=false
do_recurse=false

# Initial command and working directory
do_command="tr A-Z a-z"
do_comdesc="make all characters lowercase"
do_dirpath="."

# Interprete parameters
until [ -z "$1" ]
do
    case $1 in
    --verbose | -v)
        do_verbose=true
        shift
        ;;
    --dry-run | -n)
        do_dry_run=true
        shift
        ;;
    --recursive | -r | -R)
        do_recurse=true
        shift
        ;;
    --command | -c)
        if [ -n "$2" ]; then
            shift
            do_command=$1
            shift
        fi
        ;;
    --help | -h)
        echo "Usage:"
        echo "'frename [--help | -h]' to show this help."
        echo "'frename [--dry-run | -n] [--recursive | -r | -R] [--verbose | -v] [--command \"cmd\" | -c \"cmd\"] [directory]'"
        echo "The preset \"cmd\" is \"${do_command}\" to ${do_comdesc}."
        exit 0
        ;;
    *)
        do_dirpath=$1
        shift
        ;;
    esac
done

# Inform user, ask permit
if [ $do_recurse == true ]; then
    echo "Performing '${do_command}' starting from directory '${do_dirpath}'."
else
    echo "Performing '${do_command}' in items of directory '${do_dirpath}'."
fi
echo -n "Are you OK with that? [yes]: "
read
this_reply=$REPLY

# Perform task
if [[ $this_reply == "yes" || $this_reply == "" || $this_reply == "y" ]]; then

    if [ $do_recurse == true ]; then
        # Use find to list contents
        # -d: Directory contents before directory name
        # -X: Omit problematic file names, say 'illegal path'
        files=`find -d "${do_dirpath}"`
    else
        # List files
        cd "${do_dirpath}"
        files=`ls .`
    fi
    
    echo "${files}" | while read filename; do
        fname=`basename "${filename}"`
        dname=`dirname "${filename}"`
        fdiff=`echo "${fname}" | $do_command` #Perform command to item name.
        if [ "${fname}" != "${fdiff}" ]; then
            if [ $do_verbose == true ]; then
                echo "Renaming \"${dname}/${fname}\" to \"${dname}/${fdiff}\""
            fi
            if [ $do_dry_run != true ]; then
                mv "${dname}/${fname}" "${dname}/${fdiff}"
            fi
        fi
    done
else
    echo "Thanks anyway, I feel fine today."
fi

# Done
exit 0

[ Voor 9% gewijzigd door benoni op 21-01-2007 07:44 ]


Acties:
  • 0 Henk 'm!

  • djack
  • Registratie: September 2002
  • Laatst online: 11-11-2024
K heb scriptje gemaakt om vnc achtige terminal server omgeving.

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
#! /bin/bash
# Created by Sven Jacobs 
# Start VNC Terminal Server Sessions


#define some things
CONFIG_FILE=vnc_config.cfg
CONFIG_PATH=/etc
XVNC_BIN=/usr/X11R6/bin/Xvnc


#check config file
if [ ! -e $CONFIG_PATH/$CONFIG_FILE ]
then
echo
echo "ERROR: There is no VNC Configuration File"
echo "Create the configuration $CONFIG_PATH/$CONFIG_FILE"
echo
exit
fi

#check if xvnc is installed
if [ ! -e $XVNC_BIN ]
then
echo
echo "ERROR: Missing Xvnc"
echo "The $XVNC_BIN is missing please make sure that it is installed at the correct location"
echo
exit
fi

#get stuff from config file
TERMINAL_AMOUNT=`cat $CONFIG_PATH/$CONFIG_FILE | grep TERMINAL_AMOUNT | cut -d ":" -f2`
TERMINAL=`cat $CONFIG_PATH/$CONFIG_FILE | grep START_TERMINAL | cut -d ":" -f2`
GEOMETRY=`cat $CONFIG_PATH/$CONFIG_FILE | grep GEOMETRY | cut -d ":" -f2`
DEPTH=`cat $CONFIG_PATH/$CONFIG_FILE | grep DEPTH  | cut -d ":" -f2`
HOST=`cat $CONFIG_PATH/$CONFIG_FILE | grep HOST | cut -d ":" -f2`
KEYMAP=`cat $CONFIG_PATH/$CONFIG_FILE | grep KEYMAP | cut -d ":" -f2`
#start the vnc stuff
#-xkbdb                 file that contains default XKB keymaps
#-xkbmap                XKB keyboard description to load on startup
COUNT=0
while [ $COUNT -lt $TERMINAL_AMOUNT ]
do
$XVNC_BIN :$TERMINAL -query $HOST -geometry $GEOMETRY -fp /usr/X11R6/lib/X11/fonts/75dpi  -depth $DEPTH & >> /dev/null
 let TERMINAL++
 let COUNT++
done

Because Great minds Think alike


Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Naam: recover-Ai-PDF.sh
Doel: Illustrator / PDF bestanden in een map doorkijken, namen en datums eruit vissen.
OS: MacOSX, evt. Linux. Getest op MacOSX.
Taal: SH
Benodigdheden: shell
Werking: Gaat alle Illustrator en/of PDF files in de opgegeven directory af en hernoemt ze aan de hand van de gevens die in het bestand zelf zijn bewaard.
Ik wilde een scriptje maken die van Illustrator PDF files de naam en wijzigingsdatum herstelt aan de hand van de metagegevens die door Illustrator in de PDF worden meebewaard. Dit was nodig omdat door een 'gevalletje Murphy' een groot aantal Illustrator bestanden verloren zijn gegaan. Deze zijn teruggevist met het recovery programma 'Boomerang'. Dat programma bewaart echter de bestanden op volgnummer, dus de namen en datums moeten nog hersteld worden, vandaar dit scriptje.
Auteur: benoni
Zie ook: grep|sed werkt niet op Mac i.v.m. encoding leestekens



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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#!/bin/sh

# For archive recovery, in addition to Boomerang*
#
# - Searches through Illustrator PDF files
# - Filters out filename, creation and modification date
# - Renames and datestamps the files
#
# Author: benoni, Settembre, The Netherlands.
# License: free (as in 'GPL', see http://www.gnu.org/licenses/gpl.txt)
# Although the script has been tested successfully, usage is at your own risk.
#
# Newer versions of this script will be posted to:
# http://gathering.tweakers.net/forum/list_message/27348785#27348785
#
# * Boomerang is trademarked software from
# Boomerang Data Recovery, http://www.boomdrs.com


# Switches for verbose run, dry run, recursive directory traversing
do_verbose=false
do_dry_run=false
do_recurse=false


# Initial command and working directory
do_ffilter="*.pdf"
do_ffdescr="PDF files"
do_dirpath="."


# Interprete parameters
until [ -z "$1" ]
do
    case $1 in
    --verbose | -v)
        do_verbose=true
        shift
        ;;
    --dry-run | -d)
        do_dry_run=true
        shift
        ;;
    --recursive | -r | -R)
        do_recurse=true
        shift
        ;;
    --name | -n)
        if [ -n "$2" ]; then
            shift
            do_ffilter=$1
            shift
        fi
        ;;
    --help | -h)
        echo "Usage:"
        echo "'sh ./recover-Ai-PDF.sh [--help | -h]' to show this help."
        echo "'sh ./recover-Ai-PDF.sh [--dry-run | -d] [--recursive | -r | -R] [--verbose | -v] [--name \"exp\" | -n \"exp\"] [directory]'"
        echo "The preset \"exp\" is \"${do_ffilter}\" to get ${do_ffdescr}."
        exit 0
        ;;
    *)
        do_dirpath=$1
        shift
        ;;
    esac
done


# Inform user, ask permit
if [ $do_dry_run == true ]; then
    echo -n "Testing recovery of "
else
    echo -n "Recovering "
fi

echo -n "names and dates of '${do_ffilter}' "

if [ $do_recurse == true ]; then
    echo "starting from directory '${do_dirpath}'."
else
    echo "in items of directory '${do_dirpath}'."
fi

echo -n "Are you OK with that? [yes]: "
read
this_reply=$REPLY


# Perform task
if [[ $this_reply == "yes" || $this_reply == "" || $this_reply == "y" ]]; then

    if [ $do_recurse == true ]; then
        # Use find to list contents
        # -d: Directory contents before directory name
        # -X: Omit problematic file names, say 'illegal path'
        files=`find -d "${do_dirpath}" -name "${do_ffilter}"`
    else
        # List files
        cd "${do_dirpath}"
        files=`ls ${do_ffilter}`
    fi

    if [ ! "${files}" ]; then
        echo "Sorry, no files matched the search expression."
    else
        echo "${files}" | while read cfile; do
            fname=`basename "${cfile}"`
            dname=`dirname "${cfile}"`
            
            # Test for file identifier (the first 15 characters)
            ftest=`head -n 1 "${cfile}" | perl -C -pe 's/^(.{14}).*/$1/;'`
            
            case $ftest in
            "%!PS-Adobe-3.1" )
                # Get PS-Adobe-3.1 header block, extract name and dates
                fhead=`head -n 8 "${cfile}"`
                fdiff=`echo $fhead | perl -C -pe 's/.*%%Title:\s([^\r]*).*/$1/;'`
                cdate=`echo $fhead | perl -C -pe 's/.*CreationDate:\s(\d\d)-(\d\d)-(\d\d\d\d).*/${3}${2}${1}0000/;'` # European date DD-MM-YYYY
                mdate=$cdate
                ;;
            "%!PS-Adobe-3.0" )
                # Get PS-Adobe-3.0 header block, extract name and dates
                fhead=`head -n 8 "${cfile}"`
                fdiff=`echo $fhead | perl -C -pe 's/.*%%Title:\s\(([^)]*).*/$1/;'`
                cdate=`echo $fhead | perl -C -pe 's/.*CreationDate:\s\((\d\d)-(\d\d)-(\d\d\d\d)\)\s\((\d\d):(\d\d)\).*/$3$2$1$4$5/;'` # European date DD-MM-YYYY
                mdate=$cdate
                ;;
            *)
                # Extract text lines from PDF, get header block, extract name and dates
                ftext=`strings "${cfile}"`
                fhead=`echo "${ftext}" | head -n 8`
                cdate=`echo "${fhead}" | sed '/^.*\/CreationDate(D:/!d; s///; s/^\([0-9]\{12\}\).*$/\1/;q'`
                mdate=`echo "${fhead}" | sed '/^.*\/ModDate(D:/!d; s///; s/^\([0-9]\{12\}\).*$/\1/;q'`
                fdiff=`echo "${ftext}" | sed '/^%%Title: (/!d; s///; s/)$//;q'`
                ;;
            esac

            if [[ "${fhead}" = "" \
                || "${fdiff}" = "" \
                || `echo "${fdiff}" | wc -m` -gt 255 \
                || `echo "${cdate}" | wc -m` -gt 255 \
                || `echo "${mdate}" | wc -m` -gt 255 ]]; then
                echo "The file '${cfile}' seems unreadable."
            else
                # Replace slashes in filename
                fdiff=`echo $fdiff | perl -C -pe 's/\//-/g;'`
                fpath="${dname}/${fdiff}"
    
                # Check for duplicate filenames
                if [[ "${fpath}" != "" && "${cfile}" != "${fpath}" ]]; then
                    fpnum=0
                    while [ -f "${fpath}" ]; do
                        fpnum=$(($fpnum+1))
                        fpath="${dname}/${fdiff}-${fpnum}"
                    done
                fi
    
                if [ $do_verbose == true ]; then
                    echo "File: '${cfile}'"
                    echo "| New path: '${fpath}'"
                    echo "| Creation date: '${cdate}'"
                    echo "| Modification date: '${mdate}'"
                    #echo $fhead | fold -w 120
                fi
    
                if [ $do_dry_run != true ]; then
                    mv "${cfile}" "${fpath}"
                    touch -c -t $cdate "${fpath}" # -c for MacOSX, -a for Linux
                    touch -m -t $mdate "${fpath}"
                fi
            fi
        done
    fi
else
    echo "Thanks anyway, I feel fine today."
fi

# Done
exit 0

[ Voor 28% gewijzigd door benoni op 26-01-2007 10:12 ]


Acties:
  • 0 Henk 'm!

  • Wormaap
  • Registratie: Oktober 2003
  • Laatst online: 00:09
Naam: No-Unrar-Play
Doel: Video of muziek spelen zonder te unrarren.
OS: Linux
Taal: Ehh?
Benodigdheden: Shell
Werking: Unrart naar standard-output en laat MPlayer standard-input lezen tegelijk.
Auteur: Sephren (Noorse vriend van me)

code:
1
unrar p -inul *rar | mplayer -


In'n ander smaakje ook bruikbaar als 'stream'

code:
1
ssh user@host unrar p -inul /path/to/rar(s)/*rar | mplayer -


En uiteraard ook zonder RAR is dit 'streamen' mogelijk:

code:
1
ssh user@host cat /path/to/file | mplayer -


Met dank aan een Noorse maat van me :P

Ticking away, the moments that make up a dull day


Acties:
  • 0 Henk 'm!

  • Tha_Butcha
  • Registratie: November 2000
  • Laatst online: 20-01 18:05
_JGC_ schreef op vrijdag 21 november 2003 @ 09:18:

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.
late reactie, maar goed.

als je -h aangeeft doet ie het wel.

krijg je als output

512K
0B
3.6M
39G

etc, oftewel, ff man du checken.

mijn bak is 10.4.8

Compromises are for the weak


Acties:
  • 0 Henk 'm!

  • rulus
  • Registratie: November 2005
  • Laatst online: 30-08 11:31
Naam: pyWallpaper
Doel: Wallpapers downloaden van www.interfacelift.com
OS: Linux met GNOME, voorlopig
Taal: Python
Benodigdheden: python
Werking: Zoekt op interfaceLift naar nieuwe wallpapers en downloadt die. Kan ook automatisch je wallpaper veranderen naar de laaste nieuwe.
Waarschuwing: Script is nog niet af, maar werkt al wel. Het is mijn eerste Python probeersel, je moet ergens beginnen :)
Auteur: ik, maar stukken code gepikt van andere projecten (met Open-Source mag dat hé \o/)
Zie ook: Simpele pagina waar geüpdate versies zullen verschijnen



Python:
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#!/usr/bin/env python
#
#  This is pyWallpaper version 0.02 beta
#
# pyWallpaper: a program to automatically download wallpapers from interfacelift.com
#              and set them as your desktop background
#
# Copyright (C) 2007  Roel Huybrechts (roelhuybrechts@skynet.be)
# 
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA;
# or see http://www.gnu.org/licenses/gpl.txt



#--- Defining variables, change them to your needs

#Supported resolutions: 2560x1600, 1920x1200, 1680x1050, 1440x900, 1280x800,
#1600x1200, 1280x1024, 1280x960, 1024x768, 480x272 (Sony PSP), 320x240 (Apple
#iPod, Sony Mylo)
resolution_W = 1280
resolution_H = 800

#Path to save downloaded images: (do not forget the / at the end)
path = "/home/roel/Mijn_afbeeldingen/interfacelift/"

#Maximum pages between checks:
maxPages = 1


#Don't touch things beneath here unless you know what you're doing
#--- Here starts the actual script
import re
import os
import urllib
import string
import gconf
import sys

programVersion = "0.02 beta"

try:
    urllib.urlopen("http://www.google.com")    
except IOError:
    raise SystemExit, "Your computer doesn't seem to be connected to the internet. \
    \nMake sure you have an internet connection while running the script."

class InterfaceLift:
    def __init__(self):
        cl = commandLine(sys.argv[1:])
        r = 1
        self.totalImagesDownloaded = 0
        
        print "Quering InterfaceLift for new wallpapers..."
        
        while r <= maxPages:
            # grab page content
            self.url = "http://interfacelift.com/wallpaper/index.php?sort=date&w=" + str(resolution_W) + "&h=" + str(resolution_H) + "&page=" + str(r)
            
            sock = urllib.urlopen(self.url)
            self.pageBody = sock.read()
            sock.close() 
            
            # search for 'download' string
            downloadMask = 'href="/dl/wallpaper/(.*)" target="_blank">download</a>'
            self.downloadLinks = re.findall(downloadMask, self.pageBody)
            
            i = 0
            while i<10:
                # generate absolute image paths and paths to save on local disk
                self.absDownloadLinks = "http://interfacelift.com/dl/wallpaper/" + self.downloadLinks[i]
                self.localPath = path + self.downloadLinks[i]
                
                # if the file does not exist yet, download it
                if not os.path.isfile(self.localPath):                
                    downloadImage = urllib.urlretrieve(self.absDownloadLinks, self.localPath)
                    print "Downloaded new image: " + self.downloadLinks[i]
                    self.totalImagesDownloaded += 1
                
                # find the local path of the first image on the first page
                if r == 1 and i == 0:   
                    lastImage = path + self.downloadLinks[i]
                    
                i = i + 1
                
            r = r + 1
            
        # print out how much images have been downloaded
        if (self.totalImagesDownloaded == 0):
            print "Nothing new to be downloaded."
        elif (self.totalImagesDownloaded == 1):
            print "Added 1 image to " + path
        else:
            print "Added " + str(self.totalImagesDownloaded) + " images to " + path
            
        # change the wallpaper to the lastest wallpaper downloaded
        if cl.automaticallyChangeWallpaper == True:
            setAsWallpaper(lastImage, self.totalImagesDownloaded)
        

class setAsWallpaper:
    def __init__(self, pathToWallpaper, totalImagesDownloaded):
        # uses the GConfClient class to change the users wallpaper
        cl = commandLine(sys.argv[1:])
        newImage = 1
        currentWallpaper = client.get_background()
        if currentWallpaper == pathToWallpaper:
            print "Your wallpaper is already the lastest InterfaceLift image."
        else:
            if totalImagesDownloaded != 0:
                if cl.ask == True:
                        client.set_background(pathToWallpaper)
                        likeIt = raw_input("Do you like the new wallpaper? (Yes/No) ")
                        if likeIt == "Yes":
                            print "Oh gosh, that is sooo beautifull!"
                        else:
                            client.set_background(currentWallpaper)
                            print "Yeah, it's ugly, huh?! I installed back your old-one instead, looks much better."
                        currentWallpaper = client.get_background()
                else:
                    client.set_background(pathToWallpaper)
                    print "Changed wallpaper to lastest InterfaceLift image."
            else:
                pass
            

class GConfClient:
    def __init__(self):
            self.__client__ = gconf.client_get_default ()
    def get_background(self):
            return self.__client__.get_string("/desktop/gnome/background/picture_filename")
    def set_background(self, background):
            self.__client__.set_string("/desktop/gnome/background/picture_filename", background)
    def set_option (self, option):
            self.__client__.set_string("/desktop/gnome/background/picture_options", option)
client = GConfClient()

class commandLine:
    def __init__(self, args):
        self.args = args
        # indicate if the passed argument at all make sense
        
##        # options
##        # -r resolution
##        try:
##            ind = self.args.index("-r")
##            resolution = self.args[ind+1]
##            self.resolution_W = re.split('x',resolution)[0]
##            self.resolution_H = re.split('x',resolution)[1]
##        except:
##            try:
##                ind = self.args.index("--resolution")
##                resolution = self.args[ind+1]
##                self.resolution_W = re.split('x',resolution)[0]
##                self.resolution_H = re.split('x',resolution)[1]
##            except:
##                print "No resolution given. Please check '-h' for help."
##                sys.exit(1)
##                
##        
##        #-p path
##        try:
##            ind = self.args.index("-p")
##            self.path = self.args[ind+1]
##        except:
##            try:
##                ind = self.args.index("--path")
##                self.path = self.args[ind+1]
##            except:
##                print "No path given. Please check '-h' for help."
##                sys.exit(1)
                
        #-acw automatically change wallpaper
        #-ask ask if you like it
        try:
            ind = self.args.index("-acw")
            self.automaticallyChangeWallpaper = True
            try:
                ind = self.args.index("-ask")
                self.ask = True
            except:
                self.ask = False
        except:
            self.automaticallyChangeWallpaper = False
            
        #-v version
        try:
            ind = self.args.index("-v")
            print "This is pyWallpaper version " + programVersion
            sys.exit(0)
        except:
            try:
                ind = self.args.index("--version")
                print "This is pyWallpaper version " + programVersion
                sys.exit(0)
            except:
                pass

if __name__ == "__main__":
    InterfaceLift()

Acties:
  • 0 Henk 'm!

Verwijderd

Doel: Poor-mans portscanner
OS: Linux (tenzij je een alternatief voor seq bedenkt voor je $os)
Taal: bash
Werking: Run het script met als parameter het ip adres wat je wilt scannen. Er zal gelooped worden over 1..65535, waarna je een netcat verbinding opzet met het ip en de counter uit de loop als poortnummer. Als er een connect() gedaan kan worden, zal de return code 0 zijn, anders 1. Adhv deze waarde weet je dus of de poort open is of niet.
Opmerkingen: F5-BigIP's kennen geen nmap, dus vandaar =)
code:
1
2
3
4
5
6
7
8
#!/bin/bash
IP="${1}"
for PORT in `seq 1 1 65535` ; do
    true | nc -w 1 ${IP} $PORT > /dev/null 2>&1
    if [ ${?} == "0" ] ; then
        echo "$PORT -> open"
    fi
done

[ Voor 3% gewijzigd door Verwijderd op 23-01-2007 16:43 ]


Acties:
  • 0 Henk 'm!

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Poor-mans portscanner
Wist je dat netcat ook zelf kan scannen?

Ik weet niet of op je BigIP ook de readme van netcat wordt meegeleverd, maar anders moet je hem hier maar even bekijken. Als je even zoekt naar "port-scanning" wordt er een uitgebreid verhaal verteld over hoe je met 1 regel kan port-scannen.

Acties:
  • 0 Henk 'm!

  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01 18:01

Ivo

Verwijderd schreef op donderdag 28 oktober 2004 @ 09:59:
Stel:
- op kantoor heb je een linux werkstation
- je beheert een aantal unix-dozen waarop je m.b.v. het XDCMP protocol kunt aanloggen
Dan kan onderstaand scriptje handig zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cat stXnest.sh
#!/usr/bin/bash
#
if [ -z ${1} ]
then
   echo "Geen parameter? Doe het dan maar met jezelf!"
   gastheer=localhost
else
   gastheer=${1}
fi
#
for s in {10,11,12,13,14,15,16,17,18,19}
   do
      if [ ! -e /tmp/.X${s}-lock ]
      then
         /usr/X11R6/bin/Xnest -name ${gastheer} -query ${gastheer} -once -geometry 1250x925 :${s}
         exit 0
      fi
   done
#
echo "meer dan 10 sessies? Dat meen je niet. Sterker nog, dat doe ik niet!"
exit 1
Mooi script, maar de beperking van 10 sessies is toch niet nodig?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
if [ -z ${1} ]
then
   echo "Geen parameter? Doe het dan maar met jezelf!"
   gastheer=localhost
else
   gastheer=${1}
fi
s=1
while [ -e /tmp/.X${s}-lock ]; do
        let "s+=1"
done
/usr/X11R6/bin/Xnest -name ${gastheer} -query ${gastheer} -once -geometry 1250x925 :${s}
exit 0

Acties:
  • 0 Henk 'm!

Verwijderd

[trots]
Dank U
[/trots]
Ivo schreef op donderdag 25 januari 2007 @ 12:51:
[...]maar de beperking van 10 sessies is toch niet nodig?
Nee klopt. 'k weet niet meer waarom ik dat heb gedaan. Ik zie wel dat ik toen (2004) het 'seq' commando nog niet had gevonden. Ik ben als mainframe programmeur toch altijd wat huiverig voor oneindige loopjes, dat zal wel mijn motvatie zijn geweest.

Ondertussen heb ik 't script nóg mooier gemaakt: hij leest de geometry uit van de huidige X(host) sessie en start de Xnest met zo'n 90% van die waarden. Komt-ie altijd mooi beeldvullend uit.
Vanavond zal ik de code wel even opzoeken en posten.

Acties:
  • 0 Henk 'm!

  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01 18:01

Ivo

Ja, while-lussen zijn wel uitkijken inderdaad, maar volgens mij kan er niet veel misgaan hier.

Acties:
  • 0 Henk 'm!

Verwijderd

JeroenE schreef op woensdag 24 januari 2007 @ 19:38:
Wist je dat netcat ook zelf kan scannen?
[...]
Eigk niet nee. Ik gebruik netcat voornamelijk voor het opzetten van arbitraire verbindingen en doe mn scanning normaliter met nmap. Thnx voor de tip iig :)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op donderdag 25 januari 2007 @ 13:10:
[...]
Vanavond zal ik de code wel even opzoeken en posten.
Belofte maakt schuld, inlossen die handel:
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
#!/bin/sh
# Obtain current session values
#
declare -i width=$(xdpyinfo | grep -i dimension | awk '{ print $2 }' | awk 'BEGIN { FS = "x" } {print $1}')
declare -i heigt=$(xdpyinfo | grep -i dimension | awk '{ print $2 }' | awk 'BEGIN { FS = "x" } {print $2}')
# Compute new values (more from height, need the room for taksbars and so on)
#
(( width += -32 ))
(( heigt += -96 )) 
#
if [ -z ${1} ]
then
   echo "Geen parameter? Doe het dan maar met jezelf!"
   gastheer=localhost
else
   gastheer=${1}
fi
#
for s in {10,11,12,13,14,15,16,17,18,19} 
do
   if [ ! -e /tmp/.X${s}-lock ]
   then
      /usr/bin/Xnest -name ${gastheer}:${s} -query ${gastheer} -once -geometry ${width}x${heigt} :${s}
      exit 0
   fi
done
#  
echo "meer dan 10 sessies? Dat meen je niet. Sterker nog, dat doe ik niet!"
exit 1

  • benoni
  • Registratie: November 2003
  • Niet online
Naam: email-export-csv.sh
Doel: Mailformulieren (tekst export van mailclient) omzetten naar tabel.
OS: MacOSX, Linux. Getest op MacOSX.
Taal: SH
Benodigdheden: shell
Werking: Gaat alle mailtjes in het tekstbestand af, vist de headers en pseudo-XML objecten eruit en gaat daar een bruikbare spreadsheet/database tabel van maken. De formulieren hoeven niet allemaal precies dezelfde indeling te hebben, nieuwe kolommen worden automatisch aangemaakt als er geen bestaande kolom is met de juiste naam.
Auteur: benoni



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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
#!/bin/sh

# email-export-csv.sh
# Version: 0.9b
#
# Leest tekst in vanuit een e-mail exportbestand en maakt een comma
# separated tabel met de velden die in de mailformulieren gebruikt zijn.
#
# Deze tabel is o.a. in te lezen met OpenOffice Calc, Excel, Filemaker, PHPMyAdmin.
#
# Kan zowel overweg met header-style name/value pairs als met pseudo-XML.
#
# INVOER:
# | Van:        test@domain.tld
# | Verzonden:  vrijdag 21 september 2007 15:12
# | Aan:        test@domain.tld
# | Onderwerp:  Webformulier
# | 
# | <form>
# |     f1
# |     <name>Naam</name>
# |     <br />
# |     <part>
# |         p1
# |         <item>Tekst</item>
# |         p2
# |     </part>
# |     f2
# | </form>
# | 
#
# UITVOER:
# | "N","","Van","Verzonden","Aan","Onderwerp","/form","/form/name","/form/part","/form/part/item"
# | "0",""
# | "1","","test@domain.tld","vrijdag 21 september 2007 15:12",
# |   "test@domain.tld","Webformulier","f1 <br /> f2","Naam","p1 p2","Tekst"
# | "2","","Van","Verzonden","Aan","Onderwerp","/form","/form/name","/form/part","/form/part/item"
#
# Systeemomgeving:
# - MacOSX of Linux
#
# Auteur: Ben van Setten, Settembre.
# Licentie: Vrij, als in GPL.


# Init
script_name="mailforms-export-csv"
script_file=$0
script_version="v0.9b"

# Switches for verbose run, quiet run
do_verbose=false
do_quiet=false
do_debug=false
do_error=false
do_help=false

# Preset regular expressions
do_record_mark="^Van:|^From:"       # The first line of a new e-mail
do_header_mark="^[0-9A-Za-z ]+:"    # The header lines (like 'Subject: ')
do_header_name="[0-9A-Za-z]+"       # The name from a header line (used for column header)
do_tags_inline="<[^>]+>"            # What a typical XML tag looks like ('<blah>')
do_tags_header="[0-9A-Za-z_]+"      # The name of an XML tag (used for column header)
do_tags_ending="^</"                # What a typical XML ending tag looks like ('</blah>')
do_tags_single="/>$"                # What a single XML tag looks like ('<blah/>')
do_text_cleanup="[ \t]+"            # Characters you don't want in the export text

# Columnn name delimiter
do_name_delimiter="/"               # For nested object hierarchy ('/form/part_01/fields/item_01')

# Files
do_file_in=""
do_file_out=""
do_file_tmp="/tmp/${script_name}-tempfile.tmp"

# Interprete parameters
while getopts vdfhi:o:-: OPT
do
    i="-$OPT$OPTARG"
    case $i in
    --verbose | -v)
        do_verbose=true
        ;;
    --debug | -d)
        do_debug=true
        ;;
    --quiet | --quietly | -f)
        do_quiet=true
        ;;
    --help | -h)
        do_help=true
        ;;
    --input=* )
        do_file_in=${i#--input=}
        ;;
    -i=* )
        do_file_in=${i#-i=}
        ;;
    --output=* )
        do_file_out=${i#--output=}
        ;;
    -o=* )
        do_file_out=${i#-o=}
        ;;
    -? )
        do_error=true
        do_help=true
        ;;
    esac
done
shift $((OPTIND-1)); OPTIND=1

# For help
if [[ $do_help == true ]]; then
    echo ""
    echo "Welcome to ${script_name} ${script_version}"
    echo ""
    echo "Usage:"
    echo "'${script_file} [--help | -h]' to show this help."
    echo "'${script_file} [-v | --verbose] [-d | --debug] [-f | --quiet] [inputfile] [outputfile]'"
    echo "'${script_file} [-v | --verbose] [-d | --debug] [-f | --quiet] [-i=file | --input=file] [-o=file | --output=file]'"
    echo ""
    echo "Samples:"
    echo "'sh ${script_file} -vd inputfile.txt'"
    echo "'cat inputfile.txt | ${script_file} -f > outputfile.csv'"
    echo ""
    exit 2
fi

# Set input file
if [[ -n "$1" && $do_file_in == "" ]]; then
    do_file_in=$1
    shift
fi

# Set output file
if [[ -n "$1" && $do_file_out == "" ]]; then
    do_file_out=$1
    shift
fi

# Test input file
if [[ $do_file_in == "" ]]; then
    do_file_in="/dev/stdin"
fi

# Test output file
if [[ $do_file_out == "" ]]; then
    do_file_out="/dev/stdout"
fi

# Build the CSV file
if [[ $do_quiet == false ]]; then
    echo "Reading mail forms from '${do_file_in}'..."
fi
if [[ $do_verbose == true ]]; then
    echo "Building comma separated data table in '${do_file_tmp}'..."
fi

awk -v greprecord="${do_record_mark}" \
    -v headermark="${do_header_mark}" \
    -v headername="${do_header_name}" \
    -v grepobject="${do_tags_inline}" \
    -v grepheader="${do_tags_header}" \
    -v grepending="${do_tags_ending}" \
    -v grepsingle="${do_tags_single}" \
    -v grepclean="${do_text_cleanup}" \
    -v delimiter="${do_name_delimiter}" \
    -v debugging="${do_debug}" \
        ' \
        # \
        # Looks through the column header list, \
        # returns existing column, or adds one. \
        # \
        function getcol(f) { \
            c = 0; \
            j = 0; \
            for (i in fields) { \
                if (f == fields[i]) { \
                    c = i; \
                    if (debugging == "true") { \
                        print "Found column (col " c "): " f; \
                    } \
                } \
                j++; \
            } \
            if (c == 0) { \
                fields[j] = f; \
                c = j; \
                if (debugging == "true") { \
                    print "Added column (col " c "): " f; \
                } \
            } \
            return c; \
        } \
        # \
        # Polishes up text for database. \
        # \
        function polish(v) { \
            sub(grepclean, " ", v); \
            sub("^[ ]+|[ ]+$", "", v); \
            sub("[\"]", "`", v); \
            return v; \
        } \
        # \
        # Prints the collected values. \
        # \
        function export(d) { \
            l = "\"" linecount++ "\""; \
            j = 0; \
            for (i in fields) { \
                v = d[j++]; \
                sub("[ ]+$", "", v); \
                l = l ",\"" v "\""; \
            } \
            print l; \
        } \
        # \
        # Resets the data stack. \
        # \
        function cleanupstack() { \
            delete values; \
            delete traces; \
            values[0] = ""; \
            traces[0] = 0; \
            nestlevel = 0; \
        } \
        # \
        BEGIN { \
            linecount = 0; \
            fields[0] = ""; \
            values[0] = ""; \
            traces[0] = 0; \
            nestlevel = 0; \
        } \
        # \
        { \
            buffer = $0 \
            # \
            # Look if we have a match identifying a new record \
            # \
            if (match(buffer, greprecord)) { \
                if (debugging == "true") { \
                    print "Found beginning of new record."; \
                    print "Exporting completed record: " linecount; \
                } \
                export(values); \
                cleanupstack(); \
            } \
            # \
            # Look if we have a match identifying a single-line header \
            # \
            if (match(buffer, headermark)) { \
                v = substr(buffer, RSTART, RLENGTH); \
                l = length(buffer); \
                n = RSTART + RLENGTH; \
                m = match(v, headername); \
                f = substr(v, RSTART, RLENGTH);; \
                v = substr(buffer, n, l - n + 1); \
                v = polish(v); \
                if (debugging == "true") { \
                    print "Enter tag: " f; \
                } \
                c = getcol(f); \
                values[c] = values[c] v " "; \
                if (debugging == "true") { \
                    print "Added value (col " c "): " v; \
                } \
            } \
            else { \
                # \
                # Interprete XML style tags and values \
                # \
                while ((l = length(buffer)) != 0) { \
                    # \
                    # Check for XML style brackets \
                    # \
                    m = match(buffer, grepobject); \
                    if (m == 0) { \
                        RSTART = length(buffer) + 1; \
                        RLENGTH = 0; \
                    } \
                    n = RSTART + RLENGTH; \
                    # \
                    # Read contents before XML tag or line end \
                    # \
                    if (nestlevel > 0 && RSTART > 1) { \
                        v = substr(buffer, 1, RSTART - 1); \
                        v = polish(v); \
                        c = traces[nestlevel]; \
                        values[c] = values[c] v " "; \
                        if (debugging == "true") { \
                            print "Added value (col " c "): " v; \
                        } \
                    } \
                    # \
                    # Interprete XML style tag \
                    # \
                    if (m != 0) { \
                        v = substr(buffer, RSTART, RLENGTH); \
                        m = match(v, grepending); \
                        if (m != 0) { \
                            if (debugging == "true") { \
                                print "Leave object (level " nestlevel "): " v; \
                            } \
                            nestlevel--; \
                        } \
                        else { \
                            m = match(v, grepheader); \
                            o = substr(v, RSTART, RLENGTH); \
                            f = fields[traces[nestlevel]] delimiter o; \
                            m = match(v, grepsingle); \
                            if (m == 0) { \
                                nestlevel++; \
                                if (debugging == "true") { \
                                    print "Enter object (level " nestlevel "): " v; \
                                } \
                                traces[nestlevel] = getcol(f); \
                            } \
                            else { \
                                v = polish(v); \
                                c = traces[nestlevel]; \
                                values[c] = values[c] v " "; \
                                if (debugging == "true") { \
                                    print "Added single tag (col " c "): " v; \
                                } \
                            } \
                        } \
                    } \
                    # \
                    # Loop using the remainder of the buffer \
                    # \
                    buffer = substr(buffer, n, l - n + 1); \
                } \
            } \
        } \
        # \
        END { \
            # \
            # Write out last record and field headers \
            # \
            if (debugging == "true") { \
                print "End of data."; \
                print "Exporting completed record: " linecount; \
            } \
            export(values); \
            if (debugging == "true") { \
                print "Exporting field headers: "; \
            } \
            export(fields); \
        }' \
    "${do_file_in}" \
    > "${do_file_tmp}"

# Write out
if [[ $do_quiet == false ]]; then
    echo "Writing to '${do_file_out}'..."
fi

tail -n 1 "${do_file_tmp}" | sed 's/^"[0-9]"*/"N"/' > "${do_file_out}"
cat "${do_file_tmp}" >> "${do_file_out}"

# Cleanup tempfiles
if [[ $do_verbose == true ]]; then
    echo "Cleaning up tempfile '${do_file_tmp}'..."
fi

rm "${do_file_tmp}"

# Done
if [[ $do_quiet == false ]]; then
    echo "Ready."
fi

exit 0

  • silentsnake
  • Registratie: September 2003
  • Laatst online: 12-09 07:04
Naam: ADextract.pl
Doel: Alle e-mail addressen van users en distributie lijsten van elke OU in Active Directory trekken. Orgineel voor gebruik van een Postfix relay recipient map, maar kan ook voor andere doeleinden gebruikt worden. Of je verbouwd het script een beetje om wat voor object dan ook uit AD te pulken.
OS: Platform onafhankelijk
Taal: Perl
Benodigdheden: Een werkende Perl omgeving, Net::LDAP en een openldap client
Werking: Met behulp van een LDAP query wordt als eerste elke OU in Active Directory achterhaald. Vervolgens elke OU apart een query versturen om zo elk email address van elke user en distributie lijst uit Active Directory te halen. Door elke OU apart een LDAP query te laten doen loop je minder snel tegen het 1000 resultaten limiet waar Active Directory standaard op staat. Nadat er een OU gedaan is worden de resultaten in een file weggeschreven, en alvast klaargemaakt in een formaat dat postmap (tooltje van Postfix) het verwacht.

Opmerking: Wel eens waar niet echt een nuttig script voor thuisgebruik, maar op de werkvloer kan dit toch een heel handig scripje zijn. Zoals bij doel al stond, je kan dit script makkelijk een beetje verbouwen om een ander object uit AD te pulken. Denk aan gebruikersnamen of wat dan ook.

Belangrijk i.c.m. Postfix: Als dit script om wat voor reden niet goed draait of niet alle email addressen erin zet, worden email addressen die niet in de gegenereerde file staan gereject. Je bent gewaarschuwd, en het is jouw verantwoording om goed te testen voordat je zoiets in productie situaties gebruikt.

Auteur: Silentsnake

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
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
#!/usr/local/bin/perl

use strict;
use Net::LDAP;

my ($sec, $min, $hour, $day, $month, $year) = localtime;
$year+=1900;
$month+=1;

# The path to the logfile.
my $logfile = "/var/log/ADextract.log;

# Enabling debugging will cause every entry found in AD to be logged. 
my $debug = 0;

# The path to the databases. WITHOUT trailing slash.
my $db_path = "/usr/local/etc/postfix"; 

# Please edit the LDAP specific lines to your needs.

my @ou = "";

my $ldap = Net::LDAP->new('yourdomaincontroller.yourdomain.com) or die &log("$@");
my $query = $ldap->bind("CN=youraccount,OU=yourOU, DC=yourDC", 
                        password => "yourpassword") or die &log("$@"); 

# Here we create an LDAP query to figure out all of the OUs in AD.
$query = $ldap->search(
        base => "DC=yourDC,
        scope => "one",
        filter => "(&(objectclass=organizationalunit))"
);

$query->code && die &log($query->error);

my $query_count = $query->count();
for (my $i = 0; $i < $query_count; $i++) {
        my $entry = $query->entry($i);
        my $ou_name = $entry->get_value("name");
        push(@ou,"$ou_name");
}

my $counter = 0;

for (my $i = 0; $i < 2; $i++) {
        for (my $i = 1; $i < @ou; $i++) {
                if ($counter == 0) {
                         $query = $ldap->search(
                         base => "OU=$ou[$i],DC=yourdc",
                         filter => "(& (mailnickname=*) (| (objectCategory=group) (objectClass=msExchDynamicDistributionList) ))"
                         );
                }
                elsif ($counter == 1) {
                         $query = $ldap->search(
                         base => "OU=$ou[$i],DC=yourdc",
                         filter => "(&(objectcategory=Person) (objectclass=user))"
                        );
                }

                $query->code && die &log($query->error);

                my $total_returned = $query->count();
                open FH, ">> $db_path/users" or die &log("Error: $!");

                for (my $i = 0 ; $i < $total_returned ; $i++ ) {
                        my $entry = $query->entry($i);
       
                        my $mail_temp = join(",",$entry->get_value("proxyAddresses")),"\n";
                        my @mail = split(",",$mail_temp);

                        my $username;
                        if ($debug == 1) {
                                $username = $entry->get_value("name");
                                &log("$username - @mail\n");
                        }
                        # Stripping any non-smtp entries like X500 and email validation.
                        for (my $i = 0; $i <= @mail; $i++) {
                                if (($mail[$i] =~ /smtp/i) and 
                                ($mail[$i] =~ /^[A-Z0-9\._%+-\&]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i)) 
                                        $mail[$i] = substr($mail[$i],5);
                                        print FH "$mail[$i] $mail[$i]\n";
                                }
                        }
                }
                &log("Finished $ou[$i]");
                close FH;
        }
        $counter++;
}
$query = $ldap->unbind;

sub log {
        my $message = $_[0];
        
        open LOG,">> $logfile" or die "Unable to open log file!\n";
        print LOG "$day-$month-$year $hour:$min:$sec - $message\n";
        close LOG;
}

Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Naam: make-files-dirs-csv.sh
Doel: Bestanden in een mappenstructuur importeren in een database (voor een website bijvoorbeeld).
OS: MacOSX, Linux. Getest op MacOSX.
Taal: SH
Benodigdheden: shell, map met bestanden
Werking: Neemt de output aan van 'ls -R' en maakt hiervan een csv-exportbestand met de namen van alle bestanden, met het pad van de directory erbij. De bestandsnamen kunnen worden gefilterd met een reguliere expressie om bijvoorbeeld alleen afbeeldingen eruit te schiften.
Auteur: benoni

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
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
#!/bin/sh

# make-files-dirs-csv.sh
# Version: 1.0
#
# Formatteert een bestanden-index als CSV voor export naar SQL database of spreadsheet.
#
# INVOER:
# | 
# | dir/subdir:
# | file1.txt  file3.txt  file5.txt
# | file2.txt  file4.txt
#
# UITVOER:
# | "N","file","dir"
# | "1","file1.txt","dir/subdir"
# | "2","file2.txt","dir/subdir"
# | "3","file3.txt","dir/subdir"
# | "4","file4.txt","dir/subdir"
# | "5","file5.txt","dir/subdir"
#
# Auteur: Ben van Setten, Settembre.
# Licentie: Vrij, als in GPL.

# Init
script_name="make-files-dirs-csv"
script_file="$0"
script_version="v1.0"

# Switch for verbose run, variables
do_verbose=false
do_ls_grep=""
do_ls_file=""

# Interprete parameters
until [[ -z "$1" || "$1" == "--" ]]
do
    case $1 in
    --verbose | -v)
        do_verbose=true
        shift
        ;;
    --filter | -g)
        shift
        if [[ -n "$1" && `echo "$1" | cut -c 1-1` != "-" ]]; then
            do_ls_grep=$1
            shift
        fi
        ;;
    -vg)
        do_verbose=true
        shift
        if [[ -n "$1" && `echo "$1" | cut -c 1-1` != "-" ]]; then
            do_ls_grep=$1
            shift
        fi
        ;;
    --help | -h)
        echo ""
        echo "Welcome to ${script_name} ${script_version}"
        echo ""
        echo "Usage:"
        echo "'${script_file} [--help | -h]' to show this help."
        echo "'${script_file} [-v | --verbose] [-g \"grep\" | --filter \"grep\" ] [output of ls -R]'"
        echo ""
        echo "Sample:"
        echo "'ls -R images | ${script_file} -g \"\\.jpe?g$|\\.gif$\" > data-csv.txt'"
        echo ""
        exit 0
        ;;
    *)
        if [[ $do_ls_file == "" ]]; then
            do_ls_file=$1
            shift
        fi
        ;;
    esac
done

# Get input
if [[ $do_ls_file == "" ]]; then
    do_ls_file="/dev/stdin"
fi

# Say something
if [[ $do_verbose == true ]]; then
    echo "Exporting path names and filenames from '${do_ls_file}' using '${do_ls_grep}' as filter..."
fi

# Process
awk -v lsgrep="${do_ls_grep}" \
    'BEGIN { \
      n = 0; \
      startdir = 0; \
      lastpath = ""; \
      print "\"N\",\"file\",\"dir\""; \
     } \
     { \
      if (startdir == 1) { \
       startdir = 0; \
       lastpath = substr($0, 1, length - 1); \
      } \
      else { \
       if (length == 0) { \
        startdir = 1; \
       } \
       else { \
        if (lsgrep == "" || match($0, lsgrep)) { \
         print "\"" ++n "\",\"" $0 "\",\"" lastpath "\""; \
        } \
       } \
      } \
     }' \
    "${do_ls_file}"

# Utter a last word
if [[ $do_verbose == true ]]; then
    echo "Ready."
fi

# Done
exit 0

Verwijderd

is zo iets niet veel makkelijker?

code:
1
find dir -printf '"%i","%h","%f"\n' | grep filter


edit:

ik was de quotes vergeten

[ Voor 11% gewijzigd door Verwijderd op 29-09-2007 00:27 ]


  • benoni
  • Registratie: November 2003
  • Niet online
Verwijderd schreef op zaterdag 29 september 2007 @ 00:25:
code:
1
find dir -printf '"%i","%h","%f"\n' | grep filter
Het find commando voor MacOSX heeft geen -printf :X :P

Desalniettemin zou je nog wel wat kunnen doen met ' | printf ' ...

Ik had voor 't bovenstaande een bestaand script aangepast om met ls -R te werken, omdat me dat het snelste leek te gaan (regelmatige job voor een erg groot archief). Maar wellicht dat 't met find evengoed snel gaat, niet eens gemeten eerlijkgezegd :$ Korter is het zeker _/-\o_ :)

  • DJ Buzzz
  • Registratie: December 2000
  • Laatst online: 06-09 22:09
benoni schreef op zaterdag 29 september 2007 @ 01:46:
[...]
Het find commando voor MacOSX heeft geen -printf :X :P
Heb daarom onder OS X findutils via port geinstalleerd, heb je de GNU versies van find. Die support dat wel :).

code:
1
sudo port install findutils +with_default_names


De +with_default_names is handig zodat ze niet als name gfind e.d. krijgen.

Acties:
  • 0 Henk 'm!

  • benoni
  • Registratie: November 2003
  • Niet online
Naam: (X)HTML-blockbuster
Doel: Vuile 'oneliner' om bijvoorbeeld bepaalde <div> blokken uit webpagina's te slopen.
Werking: Gaat een rij bestanden af (in te stellen bij 'for workfile in'), leest deze met awk door en vervangt objecten met de aangegeven tag (bijv. 'div') en de aangegeven search string (bijv. 'class=\"fout_blokje\"') door de aangegeven subst string. Je kunt de search string ook leeg laten om alle tags met dezelfde naam te vervangen. Het script doet niet aan gevalideerde XML interpretatie, maar volgt alleen de hiërarchische nesting van de aangegeven tag, wat in de praktijk bij het opschonen van 'vuile' HTML beter voldoet.
OS: Unixen
Taal: sh
Configuratie: In het script
Parameters: In het script
Opmerkingen: Toepassing geheel op eigen risico uiteraard. De werking is 'droog' te testen door alleen het "awk ' ..... ' $workfile" gedeelte uit te voeren, met uitvoer naar de stdout dus.
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
tempfile="a-temporary-file.xhtml"; \
for workfile in */index.html; do \
  cp -p $workfile $tempfile; \
  awk ' \
  BEGIN { \
    tag = "div"; \
    search = "class=\"fout_blokje\""; \
    subst = "<!-- fout blokje weggehaald -->"; \
    lb = 0; lc = 1; out = ""; FS = "<|>"; \
  } \
  { \
    l = split(">" $0 "<", a); \
    if (!lb) out = out a[2]; \
    for (i = 3; i < l; i += 2) { \
      if (match(a[i], "^" tag)) { \
        lc++;
        if (!lb && index(a[i], search)) { \
          lb = lc;
          out = out subst; \
        } \
      } \
      if (!lb) out = out "<" a[i] ">" ; \
      if (match(a[i], "^/" tag) || (match(a[i], "^" tag) && match(a[i], "/$"))) { \
        lc--; \
        if (lc < lb) lb = 0; \
      } \
      if (!lb) out = out a[i + 1]; \
    } \
    if (!lb) { \
      print out; \
      out = ""; \
    } \
  }' $workfile > $tempfile; \
  mv $tempfile $workfile; \
done

[ Voor 6% gewijzigd door benoni op 18-07-2008 14:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Naam: Interface statistics
Doel: Huidig en totaal vekeer weergeven van een eth
Werking: Haalt via ifconfig het totaal op en met ifstat het huidige verkeer
OS: Linux (niet compatible met bsd iig)
Taal: php5 met pcre extensie
Configuratie: In het script
Parameters: In het script
Opmerkingen: Vereist ifstat (debian: apt-get install ifstat)
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
<?php
 
$interface = 'eth0';
$grep_path = '/bin/grep';
$ifconfig_path = '/sbin/ifconfig';
$ifstat_path = '/usr/bin/ifstat';
 
/* get current traffic count */
$ifconfig = shell_exec("$ifconfig_path $interface | $grep_path \"RX bytes\"");
 
/* match the counters */
preg_match_all("/:[0-9]{1,10}\b/", $ifconfig, $matches);
 
/* extract the counts and strip out :'s */
$up = str_replace(':', '', $matches[0][0]);
$down = str_replace(':', '', $matches[0][1]);
 
/* round to GiB's */
$up = round($up / 1073741824, 2);
$down = round($down / 1073741824, 2);
 
/* get ifstat output */
$ifstat = shell_exec("$ifstat_path -i $interface 1 1");
 
/* match */
preg_match_all("/[0-9]+[\.][0-9]{2}/", $ifstat, $matches);
 
/* extract */
$in = $matches[0][0];
$out = $matches[0][1];
 
/* print */
echo "up: $up GiB ($out kB/s) down: $down GiB ($in kB/s)".PHP_EOL;
 
?>


Voorbeeld output:

up: 2.72 GiB (26.28 kB/s) down: 0.73 GiB (1.79 kB/s)


Voor meer info zie: http://blog.mserver.nl/20...ork-interface-statistics/. Bevat wat extra tips van mijn kant over 32-bits systemen. Kan zeker nog netter, maar is simpel en doeltreffend.

  • benoni
  • Registratie: November 2003
  • Niet online
Naam: logmonitor.sh
Doel: Logbestand in de gaten houden, automatisch mailtje sturen als een bepaalde tekst voorbijkomt.
Werking: tail -f triggert de acties
OS: Mac
Taal: sh
Configuratie: in het script
Parameters: geen
Opmerkingen: kan mailtjes ook kwijt via de Apple Mail client, dit kan voordelen hebben als je het script draait op een host die niet als mailserver in het netwerk is geconfigureerd.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/sh
#
# logmonitor.sh
#
# Monitors a log file using 'tail -f', sends email when a certain text pattern is found.
# For MacOSX (suitable for Linux when user level mail function is not issued)
#
# written by: benoni
# license: free as in GPL

# Change these settings for your purpose
test_file="/var/log/mail.log"
test_grep="connect from unknown"
send_mail="you@example.com"
temp_file="/tmp/logmonitor.txt"

# Change user_mail to your preference:
# When set to false, this script uses the mailx command
#  (which may cause problems with SMTP servers demanding authentication or whitelisted sender)
# When set to true, this script tries to use Apple Mail client to send mail
#  (please test this workflow, and do not log off the client account on the system)
user_mail=true

echo "Monitoring '$test_file' for the string '$test_grep'."
echo "Press ctrl-c to stop."

echo "Initialising temporary file..."
echo "" > "$temp_file"

echo "Start monitoring..."
old_count=`cat "$temp_file" | wc -l`
tail -n 0 -f "$test_file" | while read text_line
do
    echo $text_line | grep "$test_grep" >> "$temp_file"
    new_count=`cat "$temp_file" | wc -l`
    if [ $new_count != $old_count ]
    then
        last_line=`tail -n 1 "$temp_file" | sed -e s/\"/\'/g`
        echo "Mailing report: $last_line"
        if [ $user_mail = true ]
        then
            output=`tail -n 10 "$test_file" | sed -e s/\"/\'/g`
            output=`osascript -e "tell application \"Mail\" to make outgoing message with properties {recipient:\"$send_mail\", subject:\"Alert: $last_line\", content:\"$output\"}"`
            output=`osascript -e "tell application \"Mail\" to send $output"`
        else
            tail -n 10 "$test_file" | mailx -s "Alert: $last_line" "$send_mail"
        fi
    fi
    old_count=$new_count
done

# As a running tail function is usually halted with ctrl-c, the following lines have no sense
echo "Erasing temporary file..."
rm "$temp_file"

echo "Done."
exit 0

  • Robert
  • Registratie: Juni 2000
  • Laatst online: 22:02

Robert

You have your answer..

benoni schreef op donderdag 27 november 2008 @ 19:59:
Naam: logmonitor.sh
Doel: Logbestand in de gaten houden, automatisch mailtje sturen als een bepaalde tekst voorbijkomt.
Werking: tail -f triggert de acties
OS: Mac
Taal: sh
Configuratie: in het script
Parameters: geen
Opmerkingen: kan mailtjes ook kwijt via de Apple Mail client, dit kan voordelen hebben als je het script draait op een host die niet als mailserver in het netwerk is geconfigureerd.
Wat is er mis met log2mail :P

Just 'cause I'm paranoid doesn't mean they're not after me | The only operating system that does what you want: LFS


  • benoni
  • Registratie: November 2003
  • Niet online
Dat het niet standaard in MacOSX zit, en dat het niet via een client e-mail programma kan mailen? O-)

Acties:
  • 0 Henk 'm!

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:00

Erhnam

het Hardware-Hondje :]

Naam: iTunesPlaylistCreator
Doel: Automatisch aanmaken van grote hoeveelheden playlisten onder iTunes
Werking: Zoekt naar de namen van de directories. Kopieert deze namen naar iTunes als een playlisten en vult vervolgens de playlisten met de mp3's uit de mappen.
OS: OSX
Taal: bash
Configuratie: NVT
Parameters: ./iTunesPlaylistCreator /home/music/
Opmerkingen: Als er dus onder /home/music zich 3 directories bevinden komen er drie playlist in iTunes te staan overeenkomstig met de namen van deze directories


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
WORKDIR="$1"
IFS=$'\n'

cd $WORKDIR

for directory in $(ls -d * | grep -v ".mp3");
do
    echo
    echo $directory
    osascript -e "tell application \"iTunes\" to make new user playlist with properties {name:\"$directory\", shuffle:false, song repeat:none}"
    for file in `find "$WORKDIR/$directory/" -iname "*.mp3" | sort`
    do
    echo $file | sed 's|//|:|g'
    ITUNESFILE=`echo $file | sed 's|//|:|g;s|/|:|g'`
    osascript -e "tell application \"iTunes\" to add file \"$ITUNESFILE\" to playlist \"$directory\""
    done
done
echo

http://www.xbmcfreak.nl/


Acties:
  • 0 Henk 'm!

Verwijderd

Naam: list_smb_users
Doel: Toont gelockte files door samba, per gebruiker per pc
Werking: toont de uitvoer van smbstatus een stuk handiger
OS: Linux, Unix
Taal: bash + sed

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
#!/bin/bash
#This script gives an overview of locked files by samba-users

echo "List of locked files:"
echo ""

location_smbstatus=`which smbstatus`
tmpfile1=/tmp/smb_list_users$$.tmp
tmpfile2=/tmp/smb_list_users2$$.tmp

if [ -e $tmpfile1 ]
then
    echo "$tmpfile still exists"
    echo "Please remove this file, or somebody else is using this script"
    exit 1
fi

if [ -e $tmpfile2 ]
then
    echo "$tmpfile2 stil exists"
    echo "Please remove this file, or somebody else is using this script"
    exit 1
fi

$location_smbstatus -L > $tmpfile1

number_of=`wc -l $tmpfile1 | awk '{print $1}'`
number_of=`expr $number_of - 3`

tail -n $number_of $tmpfile1 | cut -d" " -f1 | sort -u > $tmpfile2

for a in `cat $tmpfile2` 
do
    echo "User: `$location_smbstatus -p | grep $a | awk '{print $2}' | sort -u | grep -v nobody`"
    echo "From pc: `$location_smbstatus -p | grep $a | awk '{print $4}'`"

    cat $tmpfile1 | grep $a |sed -e "s/^.* \//\//" -e "s/  */\//" | sort
    echo ""
done

if [ -e $tmpfile1 ] 
then
    rm $tmpfile1
fi

if [ -e $tmpfile2 ]
then
    rm $tmpfile2
fi

Acties:
  • 0 Henk 'm!

  • Keeper of the Keys
  • Registratie: Augustus 2002
  • Laatst online: 18-06 23:20
Dit is een simpel scriptje dat waarschijnlijk totaal overbodig is voor de meeste Nederlanders, maar er zullen vast anderen zijn op het forum die het net als ik goed kunnen gebruiken.

Naam: ipmon.sh
Doel: Firewall regels opnieuw laden als het ip wisselt (en de oude droppen)
OS: Getest op Debian/testing (lenny), ik neem aan dat het op alle linuces en waarschijnlijk ook alle Unices kan draaien al dan niet met aanpasingen.
Taal: sh
Werking: Het huidige IP adres (van de exerne interface) wordt de eerste keer dat het draait in een tijdelijk bestand opgeslagen, daarna worden elke keer dat het script wordt gedraait het opgeslagen IP adres en het huidige vergeleken, als ze niet gelijk zijn worden commando's zoals in het bestand gedefineerd uitgevoerd en wordt het opgeslagen IP adres verandert. Als ze gelijk zijn geberut er niets.
Auteur: Iemand van axmx.net en ikzelf heb het wat veranderd
Opmerkingen: /etc/init.d/Firewall.fw is een script dat de iptables firewall helemaal opnieuw bouwt, je kunt in plaats daarvan ook gewoon een zooi iptables commandos neerzetten die de firewall aanpassen. Ik draai dit eens per half uur aangezien interne services niet lijden onder het veranderde IP alleen externe toegang is misschien weg maar dat is die toch tot noip update. Ik ga dit script hopelijk een dezer dagen verbeteren...
Zie ook: [url="http://http://74.125.77.132/search?q=cache:lg6Qnrrzx9MJ:blog.axmx.net/wp-content/uploads/2006/04/ipmon.txt+site:axmx.net+ipmon&hl=en&ct=clnk&cd=1&client=iceweasel-a"]Google cache van het oorspronkelijke script[/url]
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
#!/bin/sh
# http://www.axmx.net
# monitors IP address and changes iptables rule when it changes
# modified by Keeper of the Keys to make it work properly on our systems...
# 03-nov-2008 / 06 cheshvan 5769
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
# check the lastip file to see if it's there, if not then add one with the current IP
if [ ! -e /tmp/lastip ]
then
        ifconfig ppp0 | grep inet | awk -F ":" '{print $2}' | awk -F " " '{print $1}' > /tmp/lastip
fi

#
LASTIP=`cat /tmp/lastip`

# get the current ip address 
CURIP=`ifconfig ppp0 | grep inet | awk -F ":" '{print $2}' | awk -F " " '{print $1}'`

# update the iptables rules if the current IP is different from the last ip in /tmp/lastip
if [ "$CURIP" != "$LASTIP" ]
then
        #add your iptables rule here to remove the old rules with the external dynamic ip in it, and insert the new IP
        #using the $CURIP variable.
        /etc/init.d/Firewall.fw

        ifconfig ppp0 | grep inet | awk -F ":" '{print $2}' | awk -F " " '{print $1}' > /tmp/lastip;
else
        exit;
fi

Acties:
  • 0 Henk 'm!

Verwijderd

Dit is een "gehackte" versie van het start/stop script 'catalina.sh' van Tomcat 6(!)

Naam: catalina.sh
Doel: Het starten en stoppen van een Tomcat 6 proces. Verschil is dat Tomcat van origine niet de mogelijkheid heeft om meerdere instances aan te maken die je ook nog eens afzonderlijk kunnen stoppen en starten.
OS: Getest op CentOS.
Taal: bash
Werking: om het script te laten werken heb je de volgende stappen doen:
  • Ga naar de installatie folder van Tomcat.
  • Pak alles in met een tar -zcf
  • Maak een map aan genaamd "instances" in de Tomcat map
  • Maak daarna mappen wat evenredig is aan het aantal instances wat jij wilt hebben op 1 server(wat meestal neerkomt op zo'n 2 a 3 mappen, afhankelijk van de zwaarte van de applicaties) met de gewenste "instance name" zoals "app_srv_1"
  • Ga in een van die mappen en pak het bestand uit die in de tweede stap is aangemaakt in de folder
  • Pas in het script variabel TOMCAT_HOME en INSTANCE_NAME aan en plaats het in de root van de instance folder
  • Mocht het gelukt zijn: verwijder de "bin" map uit de instance map.
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# -----------------------------------------------------------------------------
# Start/Stop Script for the CATALINA Server
#
# Environment Variable Prerequisites
#
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.
#
#   CATALINA_OUT    (Optional) Full path to a file where stdout and stderr
#                   will be redirected.
#                   Default is $CATALINA_BASE/logs/catalina.out
#
#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   or "run" command is executed.
#
#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
#                   the JVM should use (java.io.tmpdir).  Defaults to
#                   $CATALINA_BASE/temp.
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.
#
#   JRE_HOME        Must point at your Java Development Kit installation.
#                   Defaults to JAVA_HOME if empty.
#
#   JAVA_OPTS       (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories
#                   containing some jars in order to allow replacement of APIs
#                   created outside of the JCP (i.e. DOM and SAX from W3C).
#                   It can also be used to update the XML parser implementation.
#                   Defaults to $CATALINA_HOME/endorsed.
#
#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
#                   command is executed. The default is "dt_socket".
#
#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is 8000.
#
#   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. Specifies whether JVM should suspend
#                   execution immediately after startup. Default is "n".
#
#   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
#                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
#                   and JPDA_SUSPEND are ignored. Thus, all required jpda
#                   options MUST be specified. The default is:
#
#                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,
#                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
#
#   CATALINA_PID    (Optional) Path of the file which should contains the pid
#                   of catalina startup java process, when start (fork) is used
#
#   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file
#                   Example (all one line)
#                   LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
#
#   LOGGING_MANAGER (Optional) Override Tomcat's logging manager
#                   Example (all one line)
#                   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
#
# $Id: catalina.sh 1146097 2011-07-13 15:25:05Z markt $
# -----------------------------------------------------------------------------

#
# Verander mij!!!
#
TOMCAT_INSTALL=/srv/tomcat
INSTANCE_NAME=instance_1

#
# Onderstaande niet veranderen
#
CATALINA_HOME="$TOMCAT_INSTALL"
CATALINA_BASE="$CATALINA_HOME"/instances/"$INSTANCE_NAME"
CATALINA_OUT="$TOMCAT_INSTALL"/instances/"$INSTANCE_NAME"/logs/catalina.out
CATALINA_TMPDIR="$TOMCAT_INSTALL"/instances/"$INSTANCE_NAME"/temp
LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
 
# resolve links - $0 may be a softlink
PRG="$0"

while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done

# Get standard environment variables
PRGDIR=$TOMCAT_INSTALL

# Only set CATALINA_HOME if not already set
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

# Get standard Java environment variables
if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
    BASEDIR="$CATALINA_HOME"
    . "$CATALINA_HOME"/bin/setclasspath.sh
  else
    echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
    echo "This file is needed to run this program"
    exit 1
fi

if [ -z "$CATALINA_BASE" ] ; then
  CATALINA_BASE="$CATALINA_HOME"
fi

# Add tomcat-juli.jar and bootstrap.jar to classpath
# tomcat-juli.jar can be over-ridden per instance
if [ ! -z "$CLASSPATH" ] ; then
  CLASSPATH="$CLASSPATH":
fi
#if [ "$CATALINA_BASE" != "$CATALINA_HOME" ] && [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then
#  CLASSPATH="$CLASSPATH""$CATALINA_BASE"/bin/tomcat-juli.jar:"$CATALINA_HOME"/bin/bootstrap.jar
#fi

if [ -d "$CATALINA_HOME" ] && [ -r "$CATALINA_HOME/bin/tomcat-juli.jar" ] ; then
  CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/tomcat-juli.jar:"$CATALINA_HOME"/bin/bootstrap.jar
fi

# Bugzilla 37848: When no TTY is available, don't output to console
have_tty=0
if [ "`tty`" != "not a tty" ]; then
    have_tty=1
fi

# Set juli LogManager config file if it is present and an override has not been issued
if [ -z "$LOGGING_CONFIG" ]; then
  if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
    LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
  else
    # Bugzilla 45585
    LOGGING_CONFIG="-Dnop"
  fi
fi

if [ -z "$LOGGING_MANAGER" ]; then
  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
else
  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi

# ----- Execute The Requested Command -----------------------------------------

# Bugzilla 37848: only output this if we have a TTY
if [ $have_tty -eq 1 ]; then
  echo "Using CATALINA_BASE:   $CATALINA_BASE"
  echo "Using CATALINA_HOME:   $CATALINA_HOME"
  echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
  if [ "$1" = "debug" ] ; then
    echo "Using JAVA_HOME:       $JAVA_HOME"
  else
    echo "Using JRE_HOME:        $JRE_HOME"
  fi
  echo "Using CLASSPATH:       $CLASSPATH"
  if [ ! -z "$CATALINA_PID" ]; then
    echo "Using CATALINA_PID:    $CATALINA_PID"
  fi
fi

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

if [ "$1" = "debug" ] ; then
    shift
    if [ "$1" = "-security" ] ; then
      if [ $have_tty -eq 1 ]; then
        echo "Using Security Manager"
      fi
      shift
      exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -sourcepath "$CATALINA_HOME"/../../java \
        -Djava.security.manager \
        -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start
    else
      exec "$_RUNJDB" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -sourcepath "$CATALINA_HOME"/../../java \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start
    fi
elif [ "$1" = "run" ]; then
  shift
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    exec "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  else
    exec "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  fi

elif [ "$1" = "start" ] ; then

  if [ ! -z "$CATALINA_PID" ]; then
    if [ -f "$CATALINA_PID" ]; then
      if [ -s "$CATALINA_PID" ]; then
        echo "Existing PID file found during start."
        if [ -r "$CATALINA_PID" ]; then
          PID=`cat "$CATALINA_PID"`
          ps -p $PID >/dev/null 2>&1
          if [ $? -eq 0 ] ; then
            echo "Tomcat appears to still be running with PID $PID. Start aborted."
            exit 1
          else
            echo "Removing/clearing stale PID file."
            rm -f "$CATALINA_PID" >/dev/null 2>&1
            if [ $? != 0 ]; then
              if [ -w "$CATALINA_PID" ]; then
                cat /dev/null > "$CATALINA_PID"
              else
                echo "Unable to remove or clear stale PID file. Start aborted."
                exit 1
              fi
            fi
          fi
        else
          echo "Unable to read PID file. Start aborted."
          exit 1
        fi
      else
        rm -f "$CATALINA_PID" >/dev/null 2>&1
        if [ $? != 0 ]; then
          if [ ! -w "$CATALINA_PID" ]; then
            echo "Unable to remove or write to empty PID file. Start aborted."
            exit 1
          fi
        fi
      fi
    fi
  fi

  shift
  touch "$CATALINA_OUT"
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 &

  else
    "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_OUT" 2>&1 &

  fi

  if [ ! -z "$CATALINA_PID" ]; then
    echo $! > "$CATALINA_PID"
  fi

elif [ "$1" = "stop" ] ; then

  shift

  SLEEP=5
  if [ ! -z "$1" ]; then
    echo $1 | grep "[^0-9]" >/dev/null 2>&1
    if [ $? -gt 0 ]; then
      SLEEP=$1
      shift
    fi
  fi

  FORCE=0
  if [ "$1" = "-force" ]; then
    shift
    FORCE=1
  fi

  if [ ! -z "$CATALINA_PID" ]; then
    if [ -f "$CATALINA_PID" ]; then
      if [ -s "$CATALINA_PID" ]; then
        kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
        if [ $? -gt 0 ]; then
          echo "PID file found but no matching process was found. Stop aborted."
          exit 1
        fi
      else
        echo "PID file is empty and has been ignored."
      fi
    else
      echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted."
      exit 1
    fi
  fi
  
  "$_RUNJAVA" $JAVA_OPTS \
    -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
    -Dcatalina.base="$CATALINA_BASE" \
    -Dcatalina.home="$CATALINA_HOME" \
    -Djava.io.tmpdir="$CATALINA_TMPDIR" \
    org.apache.catalina.startup.Bootstrap "$@" stop

  if [ ! -z "$CATALINA_PID" ]; then
    if [ -f "$CATALINA_PID" ]; then
      while [ $SLEEP -ge 0 ]; do
        kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
        if [ $? -gt 0 ]; then
          rm -f "$CATALINA_PID" >/dev/null 2>&1
          if [ $? != 0 ]; then
            if [ -w "$CATALINA_PID" ]; then
              cat /dev/null > "$CATALINA_PID"
            else
              echo "Tomcat stopped but the PID file could not be removed or cleared."
            fi
          fi
          break
        fi
        if [ $SLEEP -gt 0 ]; then
          sleep 1
        fi
        if [ $SLEEP -eq 0 ]; then
          if [ $FORCE -eq 0 ]; then
            echo "Tomcat did not stop in time. PID file was not removed."
          fi
        fi
        SLEEP=`expr $SLEEP - 1 `
      done
    fi
  fi

  if [ $FORCE -eq 1 ]; then
    if [ -z "$CATALINA_PID" ]; then
      echo "Kill failed: \$CATALINA_PID not set"
    else
      if [ -f "$CATALINA_PID" ]; then
        PID=`cat "$CATALINA_PID"`
        echo "Killing Tomcat with the PID: $PID"
        kill -9 $PID
        rm -f "$CATALINA_PID" >/dev/null 2>&1
        if [ $? != 0 ]; then
          echo "Tomcat was killed but the PID file could not be removed."
        fi
      fi
    fi
  fi

elif [ "$1" = "version" ] ; then

    "$_RUNJAVA"   \
      -classpath "$CATALINA_HOME/lib/catalina.jar" \
      org.apache.catalina.util.ServerInfo

else

  echo "Usage: catalina.sh ( commands ... )"
  echo "commands:"
  echo "  debug             Start Catalina in a debugger"
  echo "  debug -security   Debug Catalina with a security manager"
  echo "  jpda start        Start Catalina under JPDA debugger"
  echo "  run               Start Catalina in the current window"
  echo "  run -security     Start in the current window with security manager"
  echo "  start             Start Catalina in a separate window"
  echo "  start -security   Start in a separate window with security manager"
  echo "  stop              Stop Catalina, waiting up to 5 seconds for the process to end"
  echo "  stop n            Stop Catalina, waiting up to n seconds for the process to end"
  echo "  stop -force       Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
  echo "  stop n -force     Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
  echo "  version           What version of tomcat are you running?"
  echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined"
  exit 1

fi

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Dat is een veredelde vorm van http://code.google.com/p/debian-tomcat-scripts/, iets wat ik op 't werk gebruik met mijn eigen aanpassingen om de, voor mij nutteloze, map instances eruit te slopen. Enige waar ik mee zit, is dat het jsvc vereist om Tomcat te draaien. Moet ik nog eens in verdiepen en kijken hoe ik dat eruit kan krijgen. Nu kunnen we namelijk Tomcat herstarten via init.d scripts. Kan die van jouw dat ook?

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

Verwijderd

Hero Of Time schreef op zaterdag 21 juli 2012 @ 18:09:
Dat is een veredelde vorm van http://code.google.com/p/debian-tomcat-scripts/, iets wat ik op 't werk gebruik met mijn eigen aanpassingen om de, voor mij nutteloze, map instances eruit te slopen. Enige waar ik mee zit, is dat het jsvc vereist om Tomcat te draaien. Moet ik nog eens in verdiepen en kijken hoe ik dat eruit kan krijgen. Nu kunnen we namelijk Tomcat herstarten via init.d scripts. Kan die van jouw dat ook?
Apart dat jullie jsvc nodig hebben voor het draaien van Tomcat, dat is helemaal niet nodig.
Deze versie(wat een recht toe, rechtaan een aanpassing is van de officiele versie van catalina.sh) heeft geen jsvc nodig want het spreekt java direct aan(mits JAVAHOME gedefineerd is). Het maken van een init.d script wat een instance kan bedienen zal niet zo moeilijk zijn want dat blijft hetzelfde alleen de paden worden anders.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Ja, klopt dat het niet vereist is voor Tomcat, maar de aanpassingen die ik heb van die site, gebruikt het in hun init script. Dat moet ik nog eens uitzoeken en eruit slopen, want 'native' is veel eleganter dan via een Java Daemon wrapper. Jouw script zal hier vast bij helpen, net als het originele script.

Punt bij ons is juist dat Tomcat als echte Linux user met degelijke home moet draaien omdat de applicaties een temp map maakt in de user home. Met de standaard gebruiker kan tomcat wel draaien, maar zal onze applicaties niet werken door het missen van die map.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

Verwijderd

Naam: move.sh
Doel: Het verplaatsen van mappen dmv van een simpele TUI gemaakt met Dialog.
OS: Getest op Debian.
Taal: bash
Werking: om het script te laten werken moet je wel Dialog geïnstalleerd hebben staan.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash

SRC=/c/media/download/
DEST=/c/media/Music/

while [ continue ] 
do 
    SRC=`dialog --stdout --clear  --title "Source" --dselect "$SRC" 10 60`
    case $? 
    in
            1)
                exit 1  
        ;;
          255)
                exit 0
        ;;
    esac

        EXISTS=`echo "$SRC" | cut -d / -f 5`

    DEST=`dialog --stdout --clear  --title "Destination" --dselect "$DEST" 10 60`
    case $? 
    in
            1)
                exit 1  
        ;;
          255)
                exit 0   
        ;;
    esac
    
    dialog --title "Result" --clear  --yesno "Source: \n$SRC\n\n Destination: \n$DEST\n\n" 10 80
    
    case $? 
    in
        0)
            if [ !  -d "$DEST"/"$EXISTS" ]; then
                mv "$SRC" "$DEST"
            else
                 dialog --title "Error" --clear --msgbox "Directory already exists!" 10 80
            fi 
        ;;
          255)
               exit 1
        ;;
    esac

    dialog --title "continue?" --yesno "Do you want to go further?" 10 60
    
    case $? 
    in
        0)
            continue
        ;;
            1)
                exit 0  
        ;;
    esac
done

[ Voor 16% gewijzigd door Verwijderd op 04-08-2012 19:24 . Reden: Wat aan de functionaliteit van het script aangepast ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Kan je niet hetzelfde met de standaard aanwezige whiptail? Heeft precies dezelfde functionaliteit als die jij gebruikt. Al ken ik --dselect niet, heb ik niet gezien/gebruikt in mijn eigen whiptail script voor op werk.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

Verwijderd

Naar mijn weten staat Dialog vaker standaard geïnstalleerd op een Linux bak dan Whiptail.
En met de "--dselect" optie kan je mappen kiezen ipv files.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Nou, default installatie van Debian heeft geen dialog, maar wel whiptail aanwezig. Bij Ubuntu idem, whiptail wel, dialog niet.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

Verwijderd

Grappig, want ik draai nu Ubuntu en whiptail staat niet geinstalleerd maar wel Dialog vanuit default. En dat is hetzelfde als bij Debian .

En als ik het ook zo zie heeft Whiptail toch echt veel minder functionaliteit vergeleken met Dialog. Daarmee had ik nooit het script mee kunnen maken als ik zo naar de opties kijk.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Dat is waar, whiptail is minder uitgebreid. Zo even snel met een test wat je hebt via whiptail heb ik geen --stdout optie en --dselect kent 't ook niet. Dan zal je 't op een andere manier moeten scripten.

En toch, mijn Debian Sid PC en Laptop en Natty VM hebben geen dialog als default aanwezig.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Los van dialog versus whiptail, heb je nou een script van 59 regels gebakken om 'mv src dest' te doen? :X

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

CyBeR schreef op zaterdag 04 augustus 2012 @ 22:00:
Los van dialog versus whiptail, heb je nou een script van 59 regels gebakken om 'mv src dest' te doen? :X
ja, ik was het zat om te kloten met directory's met lange namen waarvan ik de spaces iedere keer moet escapen en ook nog eens in verschillende directory's geplaatst moeten worden op een makkelijke manier.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Hoezo? Je gaat naar de map waar je ze wilt hebben, doet daarna een 'cd' naar de andere map waar ze vandaan komen en zegt vervolgens 'mv {$bestand||$map} $OLDPWD'.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Offeuh, tab completion gebruiken.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Hero Of Time schreef op zondag 05 augustus 2012 @ 11:36:
Hoezo? Je gaat naar de map waar je ze wilt hebben, doet daarna een 'cd' naar de andere map waar ze vandaan komen en zegt vervolgens 'mv {$bestand||$map} $OLDPWD'.
CyBeR schreef op zondag 05 augustus 2012 @ 11:42:
Offeuh, tab completion gebruiken.
Ja, dat is leuk met 1 map maar ik download veel muziek en dan wordt deze routine erg vervelend
mappenstructuur die ik heb is: genre -> mappen op alfabet -> map op bandnaam.

VB: ./Metal/M/Morbid Angel of ./Jazz/P/Tito Puente Ensemble

Dus om constant te moeten 'cd'en, te kloten met TAB en spaces en andere tekens te escapen om daarna eindelijk eens een keer te 'mv'en, daar heb ik gewoon geen zin in.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

GUI? Is 't een 'server' en CLI only? Dan WinSCP of SSHFS.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Oh my god wat lijkt me dat irritant zeg, dingen te moeten verplaatsen met van die dialoogjes.. Via de CLI gaat echt zoooooveel sneller, ook als er spaties en andere shit instaan. Kwestie van vaak genoeg doen denk ik?

Acties:
  • 0 Henk 'm!

Verwijderd

Dan verschillen wij allen van mening: Ik blijf bij mijn punt dat Ik heb geen zin heb om constant te moeten tabben en te escapen voordat ik eindelijk bij een map naam aankom om daarna weer te moeten tabben voor een map nam die ik in bepaalde gevallen ook weer moet tabben en escapen. En dat het zoveel sneller is met groot aantal mappen zonder het script durf ik echt wel te betwijfelen.

Daarnaast ben ik verder ook een Unix/Linux beheerder dus ik zal wel meer dan genoeg geoefend zijn.

Ik heb gewoon een scriptje gemaakt die het voor mij makkelijker maakt en hier neer geplempt. Het staat allen vrij om het te gebruiken of niet. Zo niet, it sucks to be you.

[ Voor 8% gewijzigd door Verwijderd op 05-08-2012 12:52 ]


Acties:
  • 0 Henk 'm!

  • marcop23
  • Registratie: December 2009
  • Laatst online: 13-09 12:48
CyBeR schreef op zondag 05 augustus 2012 @ 11:42:
Offeuh, tab completion gebruiken.
Dat is sowieso heilig, maar
marco@SERVER:/home/marco/troep# mkdir "dit is een map"
marco@SERVER:/home/marco/troep# ls
dit is een map  andere-troep


werkt ook? Hoef je ze weer niet te escapen, alleen de " moet je dan escapen. Hoe vaak komen die voor in muziekmappen?

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

marcop23 schreef op zondag 05 augustus 2012 @ 13:03:
[...]

Dat is sowieso heilig, maar
marco@SERVER:/home/marco/troep# mkdir "dit is een map"
marco@SERVER:/home/marco/troep# ls
dit is een map  andere-troep


werkt ook? Hoef je ze weer niet te escapen, alleen de " moet je dan escapen. Hoe vaak komen die voor in muziekmappen?
Punt is, tab completion doet het escapen voor je :P

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 00:40

Hero of Time

Moderator LNX

There is only one Legend

Maar werkt niet geweldig als je meerdere mappen en namen hebt die een of meer spaties bevatten. Dan moet je alsnog elke extra spatie gaan escapen. Maar goed, hoe vaak heb je dat? :+

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Hero Of Time schreef op zondag 05 augustus 2012 @ 14:45:
Maar werkt niet geweldig als je meerdere mappen en namen hebt die een of meer spaties bevatten. Dan moet je alsnog elke extra spatie gaan escapen. Maar goed, hoe vaak heb je dat? :+
Huh? Wat boeien die spaties? Mijn bash escapet gewoon alle spaties vanzelf, ook als er meerdere mappen zijn? Ik snap je niet. Voorbeeldje?

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Hero Of Time heeft gelijk in het geval dat je meerdere dirs hebt met dezelfde prefix en daarin een spatie: 'foo 1' 'foo 2' bijvoorbeeld. Maar idd, die ene keer dat je dat hebt is imo niet zo boeiend.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
CyBeR schreef op zondag 05 augustus 2012 @ 15:54:
Hero Of Time heeft gelijk in het geval dat je meerdere dirs hebt met dezelfde prefix en daarin een spatie: 'foo 1' 'foo 2' bijvoorbeeld. Maar idd, die ene keer dat je dat hebt is imo niet zo boeiend.
Da's alleen het geval als je ze bijvoorbeeld met mkdir nog moet maken. Als ze al bestaan dan boeit dat echt geen ene sikkepit?

gerjan@desktop tmp $ mkdir foo\ 1
gerjan@desktop tmp $ mkdir foo\ 2
gerjan@desktop tmp $ cd foo\ 
foo 1/ foo 2/ 
gerjan@desktop tmp $ cd foo\ 


In regel 1 moet ik de spatie inderdaad escapen (tenzij ik idd " " gebruik, dan hoeft 't niet). In regel 2 gebruik ik gewoon 't pijltje omhoog en verander ik de 1 in een 2.
In regel 3 typ ik "fo" en ros ik op TAB: de spatie wordt automatisch ge-escaped. Paar keer extra op TAB rammen en ik zie m'n mogelijkheden.

Serieus, bij `mv` e.d. waarbij de mappen met spaties al bestaan, dan kun je d'r lustig op los-tabben, spaties zijn geen probleem? :?

gerjan@desktop tmp $ mkdir "foo                                                                  3"
gerjan@desktop tmp $ rmdir foo\ 1/ foo\ 2/
gerjan@desktop tmp $ cd foo\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3/

Al die prachtige spaties, met één tab O+

Kortom, ik snap jullie nog steeds niet :?

[ Voor 11% gewijzigd door Osiris op 05-08-2012 16:18 ]


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Osiris schreef op zondag 05 augustus 2012 @ 15:59:
[...]

Da's alleen het geval als je ze bijvoorbeeld met mkdir nog moet maken. Als ze al bestaan dan boeit dat echt geen ene sikkepit?

gerjan@desktop tmp $ mkdir foo\ 1
gerjan@desktop tmp $ mkdir foo\ 2
gerjan@desktop tmp $ cd foo\ 
foo 1/ foo 2/ 
gerjan@desktop tmp $ cd foo\ 


In regel 1 moet ik de spatie inderdaad escapen (tenzij ik idd " " gebruik, dan hoeft 't niet). In regel 2 gebruik ik gewoon 't pijltje omhoog en verander ik de 1 in een 2.
In regel 3 typ ik "fo" en ros ik op TAB: de spatie wordt automatisch ge-escaped. Paar keer extra op TAB rammen en ik zie m'n mogelijkheden.

Serieus, bij `mv` e.d. waarbij de mappen met spaties al bestaan, dan kun je d'r lustig op los-tabben, spaties zijn geen probleem? :?

gerjan@desktop tmp $ mkdir "foo                                                                  3"
gerjan@desktop tmp $ rmdir foo\ 1/ foo\ 2/
gerjan@desktop tmp $ cd foo\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 3/

Al die prachtige spaties, met één tab O+

Kortom, ik snap jullie nog steeds niet :?
Excuseer. Ik bedoelde eigenlijk het volgende:

$mkdir foo\ 1
$mkdir foo\ 2
$mkdir foo_3
$ls foo<tab>
foo 1/ foo 2/ foo_3/ 
$ls foo\ <tab>
foo 1/ foo 2/ 

All my posts are provided as-is. They come with NO WARRANTY at all.

Pagina: 1 2 3 Laatste