het "handige bash scripts - quiz"

Pagina: 1
Acties:
  • 305 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Ik heb hieronder een tweetal handige snippets bash geplakt, (althans ik vind dat ze handig zijn ;)). Deze zijn vrij makkelijk om mee te beginnen (en ja, het is ook al laat). Het idee is dat 'gegokt' moet worden wat ze precies doen. Uiteraard moet er dan nog meer gepost worden van dit soort dingen. Op die manier krijgen we hebben er dan ook uitleg bij van wat ze doen en hoe het misschien beter kan. Ik vond het een leuk idee met leereffect, misschien jullie ook.

mijn voorstellen ...
code:
1
find /bar/foo/|grep -i .mp3|grep -i bush| xargs -0 xmms -e


code:
1
ipchains -P forward DENY && ipchains -A forward -j MASQ -s 192.168.0.0/16 -d 0.0.0.0/0

Everyone complains of his memory, no one of his judgement.


Acties:
  • 0 Henk 'm!

  • banaan-X
  • Registratie: Februari 2001
  • Niet online
Op zondag 02 juni 2002 05:49 schreef Sebas het volgende:
mijn voorstellen ...
code:
1
find /bar/foo/|grep -i .mp3|grep -i bush| xargs -0 xmms -e


code:
1
ipchains -P forward DENY && ipchains -A forward -j MASQ -s 192.168.0.0/16 -d 0.0.0.0/0
Leuk idee wel, origineel ook :o

1) zoek alle bestanden in /bar/foo, stuur deze door naar grep die alleen bestanden met .mp3 in de naam er uit haalt, dan moet er ook nog bush in de naam zitten ( :? ), en stuur dat uiteindelijk als argument door naar xmms, die het huidige liedje stopt... Nuttig!! :D :+

2) dat zijn gewoon wat firewall dingen, das geen leuke opdracht! :P

nieuwe:
code:
1
du -s /home/* | sort -nr | head

Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 02 juni 2002 08:48 schreef banaan-X het volgende:
code:
1
du -s /home/* | sort -nr | head
Print de eerste 10 homedirs aflopend gesorteerd op grootte/diskusage :)

Acties:
  • 0 Henk 'm!

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Op zondag 02 juni 2002 05:49 schreef Sebas het volgende:
code:
1
find /bar/foo/|grep -i .mp3|grep -i bush| xargs -0 xmms -e
Wil je je load omhoog schoppen ofzo >:)
code:
1
 find /bar/foo -iname '*bush*mp3' | xargs -0 xmms -e

Heeft hetzelfde effect.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Op zondag 02 juni 2002 08:48 schreef banaan-X het volgende:

[..]

Leuk idee wel, origineel ook :o

1) zoek alle bestanden in /bar/foo, stuur deze door naar grep die alleen bestanden met .mp3 in de naam er uit haalt, dan moet er ook nog bush in de naam zitten ( :? ), en stuur dat uiteindelijk als argument door naar xmms, die het huidige liedje stopt... Nuttig!! :D :+

[...]
Bijna goed. Het scriptje heeft de functie om alle .mp3 bestanden in /bar/foo te zoeken die van bush zijn (of bush erin hebben staan ieg.) en zet deze in je xmms lijst. (xmms -e, xmms -s is stop). Kan idd ongetwijfeld efficienter, maar ik heb dan ook nog nooit een stuk bash gezien wat iemand anders niet anders aan zou pakken ;)

Volgende raadsel plz!

Everyone complains of his memory, no one of his judgement.


Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Ok, een simpele en niet erg nuttige (Perl-style, maar roept bash aan en is dus toch goed :)):
code:
1
print "ABC" if (`ps aux | grep -v grep | grep kdevelop` eq `ps aux | grep -v grep | grep konqueror | head -1`);

En nee, dit is niet de manier waarop je dergelijke dingen hoort te doen :).

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!

  • gjkamstra
  • Registratie: September 2000
  • Laatst online: 11-09 22:05
find /bar/foo/|grep -i .mp3|grep -i bush| xargs -0 xmms -eWil je je load omhoog schoppen ofzo
code: find /bar/foo -iname '*bush*mp3' | xargs -0 xmms -e
Niet helemaal. De eerste neemt bla.mp3bush wel mee, de 2de niet 8-)

Volgende raadseltjes, makkelijk:
code:
1
praliases |grep -i $1

Moeilijker:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /bin/sh
DEVICE=laserjet    ;# or hpxlwrite if in gs> devicenames ==
INPUTFILE=$1.ps    ;# some postscript or pdf format file
OUTPUTFILE=$1.lj      ;# raw file for printer DEVICE

if [ $# = 0 ]; then
  echo "Usage: `basename $0` filename (without extension)"
  exit 1
fi

if ! [ -e $INPUTFILE ]; then
  echo "$INPUTFILE does not exist"
  exit 2
fi

gs \
 -dSAFER -dNOPAUSE -dQUIET \
 -sDEVICE=$DEVICE \
 -sOutputFile=$OUTPUTFILE \
 -- \
 $INPUTFILE

Hier had een grappige signature moeten staan, maar helaas: geen inspiratie


Acties:
  • 0 Henk 'm!

Verwijderd

praliases |grep -i $1
zoeken naar opgegeven sendmail aliases. $1 wordt vervangen door het 'argument' meegegeven aan het script...

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Op zondag 02 juni 2002 18:23 schreef gjkamstra het volgende:
Moeilijker:
[code]#! /bin/sh
DEVICE=laserjet ;# or hpxlwrite if in gs> devicenames ==
INPUTFILE=$1.ps ;# some postscript or pdf format file
OUTPUTFILE=$1.lj ;# raw file for printer DEVICE
[etc...]
Zet een PostScript- of PDF-bestand om in voer voor de printer. Die `basename $0` zorgt voor nette uitvoer, zo wordt '/usr/bin/mijnexecutable' iets als 'mijnexecutable'.

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!

  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 03-09 09:15
Hebbik ook nog een leuke, van uit de tijd toen ik net een beetje begon te scripten.... (begin '98 geloof ik)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

while [ true ]
do

# The .whosuprc version
(cat $HOME/.whosuprc |xargs -n1 -P0 ping -c1|grep -B1 "1 packets r"|grep 'stat'
|grep `echo $HOSTNAME|cut -d. -f2-`|cut -d. -f1|cut -d" " -f2|sort -n)
|xargs -n1 -i finger @{} 2> /dev/zero |cut -d" " -f-1|sed s/.`echo $HOSTNAME
|cut -d. -f2-`//g|sed s/Login//|sed s/No/Nobody/|sed /^$/d|uniq >| $HOME/.online

clear
cat $HOME/.online
rm $HOME/.online
sleep 60
done

Dit alles met het boek "Linux in a Nutshell" in de hand in elkaar gedraaid.
Het belangrijkste voor mij was dat het een one-liner werd (voor de leesbaarheid heb ik de wrapper in meerdere regels gezet.)

extra informatie:
de .whosuprc file bestaat uit een lijstje met namen (1 naam per regel)
Probeer ook te bedenken waar de naam van het programma op slaat...


succes >:)

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)


Acties:
  • 0 Henk 'm!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 12:21
Owkee, wat doet deze dan (hint: sommige Linux-distro's hebben er een standaard commando voor)
code:
1
ps ux | grep "^foo" | awk '{print $2'} | xargs kill -9

Acties:
  • 0 Henk 'm!

  • 2P
  • Registratie: November 2001
  • Laatst online: 28-05 14:22

2P

:wq

Op zondag 02 juni 2002 20:37 schreef Wilke het volgende:
Owkee, wat doet deze dan (hint: sommige Linux-distro's hebben er een standaard commando voor)
code:
1
ps ux | grep "^foo" | awk '{print $2'} | xargs kill -9
killall -9 ^foo ? :)

Acties:
  • 0 Henk 'm!

  • yeadder
  • Registratie: Maart 2001
  • Niet online
Op zondag 02 juni 2002 20:37 schreef Wilke het volgende:
Owkee, wat doet deze dan (hint: sommige Linux-distro's hebben er een standaard commando voor)
code:
1
ps ux | grep "^foo" | awk '{print $2'} | xargs kill -9
lijst van proccessen. dze word door grep gefilter op foo......... hier van wordt het tweede iets(wat weet ik niet regel of deeltje van de eerste regel) geprint. deze print is de invoer van kill (deze wordt gekilld)

Acties:
  • 0 Henk 'm!

Verwijderd

Owkee, wat doet deze dan?
ps ux | grep "^foo" | awk '{print $2'} | xargs kill -9
ps ux geeft een lijst van processen...
grep haalt er alle lijntjes uit die beginnen met foo...
awk maakt daar een lijstje met process id's van...
en kill -9 draait deze processen geheid de nek om...

Acties:
  • 0 Henk 'm!

  • Valium
  • Registratie: Oktober 1999
  • Laatst online: 06-09 08:57

Valium

- rustig maar -

code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
if aumix -q | grep "vol 0, 0" > /dev/null; then
    if [ -f /tmp/.foorc ]; then
    aumix -f /tmp/.foorc -L > /dev/null
     rm /tmp/.foorc
    else
    aumix -v 60 > /dev/null
    fi
else
    aumix -f /tmp/.foorc -S
    aumix -v 0
fi

Simpele, maar ik vind'em handig.

Help mee met het vertalen van GNOME. | #nos op irc.tweakers.net voor directe hulp.


Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 02 juni 2002 21:11 schreef Valium het volgende:
#!/bin/bash
-- knip --
Simpele, maar ik vind'em handig.
geluid muten dmv aumix;

Acties:
  • 0 Henk 'm!

  • Wilke
  • Registratie: December 2000
  • Laatst online: 12:21
Op zondag 02 juni 2002 21:01 schreef areana het volgende:

[..]

ps ux geeft een lijst van processen...
grep haalt er alle lijntjes uit die beginnen met foo...
awk maakt daar een lijstje met process id's van...
en kill -9 draait deze processen geheid de nek om...
a.k.a. 'slay' -> maakt alle processen van user 'foo' dood. Die ^ staat ervoor omdat anders ook processen die toevallig die username in hun naam hebben mee worden genomen - zal wel niet vaak gebeuren, maar je weet het nooit :)

Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 02 juni 2002 21:14 schreef Wilke het volgende:

[..]

a.k.a. 'slay' -> maakt alle processen van user 'foo' dood. Die ^ staat ervoor omdat anders ook processen die toevallig die username in hun naam hebben mee worden genomen - zal wel niet vaak gebeuren, maar je weet het nooit
hehe... en als je nou 2 users hebt met de namen 'fool' en 'food' of zo? :? :P

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Op zondag 02 juni 2002 21:18 schreef areana het volgende:
hehe... en als je nou 2 users hebt met de namen 'fool' en 'food' of zo? :? :P
Even wijzigen zodat hij matcht op '^foo\s' of zo :).

\s zou ook Perl-only kunnen zijn, dat weet ik niet zeker. Je kunt het ook met matchen op een spatie proberen.

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!

  • pjottum
  • Registratie: Mei 2000
  • Laatst online: 14:09

pjottum

¯\_(ツ)_/¯

Het doet me denken aan de guru quiz die bij omroep.nl een tijdje online heeft gestaan. op mijn werk hebben we daar nog leuke posters van.

Nu ja, een makkelijke uit mijn .profile, niet echt bash :)
code:
1
alias d2u="perl -i.bak -npe 's/\r\n/\n/g'"

Maar ook leuk - maar basic:
code:
1
find . -name "*foo*" -exec rm {}\;

Meestal maak ik trouwens scriptjes, anders worden commando's te ingewikkeld :)

edit:
Hij is niet helemaal compleet, zou eigenlijk nog bij de find moeten staan: -type f zodat hij alleen die files wegmikt. Is wel leuk, kan je een aardige tikfout in maken (. / ipv ./ of . >:) )

ping 127.212.23.124


Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 02 juni 2002 21:28 schreef odysseus het volgende:

[..]

Even wijzigen zodat hij matcht op '^foo\s' of zo :).

\s zou ook Perl-only kunnen zijn, dat weet ik niet zeker. Je kunt het ook met matchen op een spatie proberen.
of gewoon een sp... eehm... lees weer niet goed... laat maar :P
Op zondag 02 juni 2002 21:28 schreef pjottum het volgende:
-- knip --
find . -name "*foo*" -exec rm {}\;
alles weggooien waarbij 'foo' in de bestandsnaam voorkomt (in de huidige directory wel te verstaan);

(ik moet stoppen met reageren, ik laat niks voor anderen over zo :P)

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Op zondag 02 juni 2002 21:29 schreef areana het volgende:
alles weggooien waarbij 'foo' in de bestandsnaam voorkomt (in de huidige directory wel te verstaan);
En ook alle bestanden in subdirectories. Let erop dat *directories* met 'foo' in de naam niet worden verwijderd.
(ik moet stoppen met reageren, ik laat niks voor anderen over zo :P)
Och, dan post je toch gewoon zelf nog een berg van die scriptjes?

* odysseus zal er ook nog eens wat op gaan zoeken...voor wie geen inspiratie heeft helpt het in /usr/bin/ draaien van het commando 'file * | grep Bourne' trouwens wel om wat dingen te vinden :).

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!

Verwijderd

Op zondag 02 juni 2002 21:46 schreef odysseus het volgende:
En ook alle bestanden in subdirectories. Let erop dat *directories* met 'foo' in de naam niet worden verwijderd.
ehm... oeps? - find is recursive idd... |:( - directories worden idd niet verwijderd, tenzij je de optie -f meegeeft aan rm.
Och, dan post je toch gewoon zelf nog een berg van die scriptjes?
/me gaat even fijn nadenken over leuke scriptjes en oneliners :P - eens kijken of ik met iets leuks kan komen...

Acties:
  • 0 Henk 'm!

Verwijderd

okay, een simpele;
code:
1
echo "$1: $(ls -lh $1 | awk '{print $5'})"

iemand?

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Dat laat de bestandsgrootte van alle bestanden in een directory zien.

Heeft er al iemand een antwoord op die Perl/Bash-regel die ik hierboven neer heb gezet?

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!

Verwijderd

Op zondag 02 juni 2002 22:03 schreef odysseus het volgende:
Dat laat de bestandsgrootte van alle bestanden in een directory zien.
ja en nee.. op de command line wel, in een script niet... $1 vangt de argumenten doorgegeven aan het script op (de bestandsnaam), output is 'bestandsnaam: 0k' (of welk formaat dan ook); - het is de bedoeling deze regel in een script te gebruiken, zoals hieronder:
code:
1
2
3
4
5
6
7
8
#!/bin/bash
if [ $# -ne 1 ]
then
      echo "usage: chsize [filename]" >2&
      exit 65
fi
echo "size of $1: $(ls -lh $1 | awk '{print $5'})"
exit 0

je krijgt dan ook een foutmelding als je geen bestandsnaam opgeeft... (usage info)

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Die eerste versie doet dat toch echt wel als je geen bestand op geeft hoor :). Zie hier:
code:
1
2
3
4
kde3@odysseus:~/reverse_challenge$ echo "$1: $(ls -lh $1 | awk '{print $5'})"
:
4.0k
115k

En er staan inderdaad twee bestanden in (naast . en .. natuurlijk). Die loze dubbele punt wordt veroorzaakt door het feit dat $1 leeg is. En het aanroepen van ls -lh zonder argumenten is gelijk aan het laten zien van de huidige directory :).

[edit: zo te zien is je bericht hierboven al bijgewerkt om dat aan te geven.]

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!

Verwijderd

klopt...

Acties:
  • 0 Henk 'm!

Verwijderd

probeer deze eens... (uit je hoofd! >:) ) ik heb de comments en tekst (output) weggelaten, anders zou het te makkelijk worden... deze moet ook niet al te moeilijk zijn... (voor dat wat dit script doet, bestaat in principe al een commando in linux);
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

if [ $# -ne 2 ]
then
     exit 1
fi

number=0

for filename in *$1*
do
   if [ -f $filename ]
   then
     fname=`basename $filename`
     n=`echo $fname | sed -e "s/$1/$2/"`
     mv $fname $n
     let "number += 1"
   fi
done   

exit 0

Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 02 juni 2002 20:00 schreef TD-er het volgende:
Hebbik ook nog een leuke, van uit de tijd toen ik net een beetje begon te scripten.... (begin '98 geloof ik)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

while [ true ]
do

# The .whosuprc version
(cat $HOME/.whosuprc |xargs -n1 -P0 ping -c1|grep -B1 "1 packets r"|grep 'stat'
|grep `echo $HOSTNAME|cut -d. -f2-`|cut -d. -f1|cut -d" " -f2|sort -n)
|xargs -n1 -i finger @{} 2> /dev/zero |cut -d" " -f-1|sed s/.`echo $HOSTNAME
|cut -d. -f2-`//g|sed s/Login//|sed s/No/Nobody/|sed /^$/d|uniq >| $HOME/.online

clear
cat $HOME/.online
rm $HOME/.online
sleep 60
done

Dit alles met het boek "Linux in a Nutshell" in de hand in elkaar gedraaid.
Het belangrijkste voor mij was dat het een one-liner werd (voor de leesbaarheid heb ik de wrapper in meerdere regels gezet.)

extra informatie:
de .whosuprc file bestaat uit een lijstje met namen (1 naam per regel)
Probeer ook te bedenken waar de naam van het programma op slaat...


succes >:)
ping elke naam in het bestandje whosuprc in je homedir 1 maal. Vervolgens filter je de regel met daarin de tekst "1 packets r (eceived)" eruit en zorgt ervoor dat de voorgaande regel ook ge-echo-ed wordt. Nu haal je die eerste regel hierboven eruit (de regel met statistics erin dus).
Nu ga je de naam in die regel filteren op je naam van het domein waar je eigen machine in hangt (je haalt het eerste deel van je hostname af, of anders gezegd, je laat het 2e deel en alles erachter van je hostname erin staan).

Kortom tot nu toe, krijg je alleen de machines te zien, die up zijn en tot het domein behoren waar jij ook in zit.

Nu strip je de FQDN naar alleen de hostnames in bovenstaande regel en vervolgens wil je uiteraard van je streepjes in de regel af en wil je uiteindelijk alleen de hostname overhouden.

We zetten dat lijstje even op alfabetische volgorde ;)

Dit is het deel tussen haken.

Bovenstaande voeren we aan het fingerprogramma on gebruikersinfo op te gaan halen per host die up is binnen ons eigen domein. De uitvoer daarvan onderdrukken we.
Nu gaan we de loginnamen eruit filteren. We hebben nu dus een lijstje met ingelogde personen op online machines binnen het eigen domein.

Voeg hostnaam toe aan de sed buffer
Vervang de Login regel door een lege regel. Vervang No door Nobody. Poep alles weer uit inclusief de toegoevoegde hostnaam en zorg er even vooor dat er geen dubbele namen in staan.

Dit alles (dus hostnamen binnen je eigen domein met daaronder de online users op die machine) worden in een bestand .online in je home-dir gemikt.

Vervolgens wordt het scherm leeggemaakt. De inhoud op het scherm getoverd. De .online file weggemikt en herhaalt het geheel zich na 60 seconden. :)

.whosuprc staat dan ook voor "Who is up on remote clients" :)
Op zondag 02 juni 2002 20:47 schreef yeadder het volgende:

[..]

lijst van proccessen. dze word door grep gefilter op foo......... hier van wordt het tweede iets(wat weet ik niet regel of deeltje van de eerste regel) geprint. deze print is de invoer van kill (deze wordt gekilld)
Niet zomaar op foo filteren ;)
Alleen de regels die beginnen met "foo", ofwel er wordt op user foo gefilterd. :)


De rest van bovenstaande scriptjes zal ik maar aan anderen overlaten :)

Acties:
  • 0 Henk 'm!

  • SambalBij
  • Registratie: September 2000
  • Laatst online: 19:34

SambalBij

We're all MAD here

Okay, wat doet deze:
code:
1
2
3
#!/bin/bash
d="/mnt/fd0"
if [ -n "$(mount $d 2>&1)" ]; then umount $d; fi

(Is geen verzinsel van mezelf, is wel erg handig :))

Sometimes you just have to sit back, relax, and let the train wreck itself


Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Op zondag 02 juni 2002 22:46 schreef Nelske het volgende:
Niet zomaar op foo filteren ;)
Alleen de regels die beginnen met "foo", ofwel er wordt op user foo gefilterd. :)
Zoals hierboven al gezegd wordt er niet op '^foo' maar in feite op '^foo*' gefilterd. Dat kan toch net iets anders uitpakken. Je zult zien dat je de gebruiker 'roo' wilt killen en zo al je processen inclusief init gaat afslachten omdat ook 'root' macht met '^roo' >:)...

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!

Verwijderd

Mjah, ik zet het onhandig neer, mijn fout.

Uiteraard weet ik ook wel dat er op alles beginnend met foo gefilterd wordt :)

Acties:
  • 0 Henk 'm!

  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 20:25

PromWarMachine

Forsaken Archer

code:
1
egrep '([a-z])([a-z])([a-z])/3/2/1' woordenboek

Misschien niet zo moeilijk, maar ik verrastte mijn UNIX leraar er mee, succes >:)

Dividend for Starters


Acties:
  • 0 Henk 'm!

  • 2P
  • Registratie: November 2001
  • Laatst online: 28-05 14:22

2P

:wq

Deze is te simpel maar erg handig :P
Echo's en var's heb ik weggelaten...
code:
1
2
3
4
5
6
7
#!/bin/bash

if [ -n "$(cat /etc/mtab | grep /mnt/cdrom)" ]; then
  sudo umount /mnt/cdrom
else
  sudo mount /dev/hdc /mnt/cdrom -o ro,nosuid,nodev
fi

Acties:
  • 0 Henk 'm!

  • 2P
  • Registratie: November 2001
  • Laatst online: 28-05 14:22

2P

:wq

Op zondag 02 juni 2002 22:53 schreef Operations het volgende:
Okay, wat doet deze:
code:
1
2
3
#!/bin/bash
d="/mnt/fd0"
if [ -n "$(mount $d 2>&1)" ]; then umount $d; fi

(Is geen verzinsel van mezelf, is wel erg handig :))
Hmmm dit is gewoon mijn vorige script maar dan een stuk kleiner :P

Hij checkt of 'mount /mnt/fd0' een string teruggeeft, output of errors worden niet getoond, als er een string wordt terug gegeven dan wordt device geunmount en anders dan is deze al gemount ;) Maar het script probeert iig altijd te mounten.

Acties:
  • 0 Henk 'm!

  • xychix
  • Registratie: September 2000
  • Laatst online: 07:37

xychix

FreeBSD Rules !

ik zal vanavond nog ff in de linux Magazine zoeken..

staat een leuk scriptje in !

(hint: heeft met lynx -dump te maken ... zal hem vanavond opzoeken)

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


Acties:
  • 0 Henk 'm!

Verwijderd

niet echt spectaculair, maar wel handig:
code:
1
2
3
#!/bin/sh

cat $1 | ssh -i /pad/naar/key-file user@host lpr

remote printen =)

Acties:
  • 0 Henk 'm!

  • Bart Coppens
  • Registratie: April 2000
  • Laatst online: 25-11-2021
Op maandag 03 juni 2002 07:04 schreef xychix het volgende:
ik zal vanavond nog ff in de linux Magazine zoeken..

staat een leuk scriptje in !

(hint: heeft met lynx -dump te maken ... zal hem vanavond opzoeken)
Toch toevallig dat artikeltje van Henk van de Kamer niet? :P :)
Is idd wel een handig ding :) (zal maar niks verklappen ofzo)

Copyright Auteur heeft Tweakers.net BV geen exclusieve licentie op bovenstaande post verleend. Voorafgaande en uitdrukkelijke schriftelijke toestemming van Tweakers.net BV is dus niet noodzakelijk voor het vermenigvuldigen van bovenstaande post


Acties:
  • 0 Henk 'm!

Verwijderd

Op zondag 02 juni 2002 18:22 schreef odysseus het volgende:
code:
1
2
print "ABC" if (`ps aux | grep -v grep | grep kdevelop` eq \
`ps aux | grep -v grep | grep konqueror | head -1`);
Als...
je pakt de proceslijst zonder grep (anders filtert ie grep zelf mee) en vergelijkt die met de proceslijst (again, gefilterd met -v grep) waar konqueror instaat en dan de eerste entry uit die lijst.

Als dus de eerste entry uit de konquerorlijst gelijk is aan de entry uit de kdevelop lijst, dan print je ABC uit.

Volgens mij probeer jij te kijken of konqueror actief is vanuit kdevelop of niet. Alleen dit is niet echt een handige manier volgens mij. :D.

Acties:
  • 0 Henk 'm!

  • TD-er
  • Registratie: Januari 2000
  • Laatst online: 03-09 09:15
Op zondag 02 juni 2002 22:46 schreef Nelske het volgende:

[..]

Dit alles (dus hostnamen binnen je eigen domein met daaronder de online users op die machine) worden in een bestand .online in je home-dir gemikt.

Vervolgens wordt het scherm leeggemaakt. De inhoud op het scherm getoverd. De .online file weggemikt en herhaalt het geheel zich na 60 seconden. :)

.whosuprc staat dan ook voor "Who is up on remote clients" :)
[..]
Inderdaad mijn eigen one-liner-ICQ variant (uit de tijd dat ik nog inbelde met modempje en toch wel wilde zien wie d'r wakker waren in de flat ;) )
Alleen met de naamgeving van .whosuprc zoek je het iets te ver. (wel een leukere naam dan ik bedoelde trouwens)
Elk config bestand van een programma heet .<naam_prog>rc (bijv. .pinerc , .bashrc)
Ik had nog een losse aanroep die het programmatje startte in een kleine xterm, op een bepaalde positie op m'n scherm.

Een goedkope voeding is als een lot in de loterij, je maakt kans op een paar tientjes korting, maar meestal betaal je de hoofdprijs. mijn posts (nodig wegens nieuwe layout)


Acties:
  • 0 Henk 'm!

Verwijderd

Op maandag 03 juni 2002 01:25 schreef 2P het volgende:
Deze is te simpel maar erg handig :P
Echo's en var's heb ik weggelaten...
code:
1
2
3
4
5
6
7
#!/bin/bash

if [ -n "$(cat /etc/mtab | grep /mnt/cdrom)" ]; then
  sudo umount /mnt/cdrom
else
  sudo mount /dev/hdc /mnt/cdrom -o ro,nosuid,nodev
fi
even kijken of er een device (cdrom) gemount is in /mnt/cdrom. zo ja, unmounten, zo niet, dan alsnog mounten... handig :Y)
/edit: je had de oplossing al gegeven... |:(

Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 04-09 08:21
Uit een Makefile van mij:
(deze code is gegenereerd door mn makefile, normaal doe ik het iets handiger ;) )
code:
1
mknod /dev/`echo "yadd.o  " | sed 's/\.o\ //g'` c `cat /proc/devices | grep yadd | cut -b -3 | sed 's/\ //g'` 0

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 04-09 08:21
Op maandag 03 juni 2002 01:05 schreef PromWarMachine het volgende:
code:
1
egrep '([a-z])([a-z])([a-z])/3/2/1' woordenboek

Misschien niet zo moeilijk, maar ik verrastte mijn UNIX leraar er mee, succes >:)
uuhh... volgens mij is dit hetzelfde als "egrep [a-z][a-z][a-z] woordenboek" maw, zoek drieletterwoorden in het woordenboek.

ik vraag me alleen wel af waarom je die parenthis memories (volgens mij heet dat zo) gebruikt

Edit: doh, ik snap het al: je zoekt naar woorden zoals abccba en 123321 besseb

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

  • Savages
  • Registratie: Augustus 2000
  • Laatst online: 30-08 11:33
code:
1
2
3
4
5
6
#!/bin/bash
kill -15 `cat /mrtg/mrtg.pid` >/dev/null 2>&1
rm -f /mrtg/mrtg.pid 
mrtg /mrtg/mrtg.conf
tleds -d 100 eth1 
ntop -i eth1 -d -w 80 &

komt u maar.. :7

| Unox = The Worst Operating System | How can you respect a computer controlled by a mouse? | Wie het laatst lacht, is het langzaamst van begrip. |


Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 04-09 08:21
Op maandag 03 juni 2002 11:17 schreef Savages het volgende:
code:
1
2
3
4
#!/bin/bash
kill -15 `cat /mrtg/mrtg.pid` >/dev/null 2>&1
rm -f /mrtg/mrtg.pid 
mrtg /mrtg/mrtg.conf
Je killt het process waarvan de PID in /mrtg/mrtg.pid staat, verwijdert diie file, en start het process opnieuw op.
code:
1
2
tleds -d 100 eth1 
ntop -i eth1 -d -w 80 &

[/code]
je start een programma dat de network usage van eth1 weergeeft mbv de keyboard leds.
je start ook nog eens ntop als daemon voor port 80 op eth1
komt u maar.. :7
bring it on! >:)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

Verwijderd

Op maandag 03 juni 2002 11:35 schreef Wirf het volgende:
bring it on! >:)
4e post op deze pagina... (29e post over het geheel)

Acties:
  • 0 Henk 'm!

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

Red Sonja

Linux: power to de wortel

Niet leerzaam maar wel geinig:
locate pub | more beer | grep Palm;
lynx -dump www.ilse.nl | perl;

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


Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 04-09 08:21
Op zondag 02 juni 2002 22:30 schreef areana het volgende:
probeer deze eens... (uit je hoofd! >:) ) ik heb de comments en tekst (output) weggelaten, anders zou het te makkelijk worden... deze moet ook niet al te moeilijk zijn... (voor dat wat dit script doet, bestaat in principe al een commando in linux);
code:
1
2
3
4
5
6
#!/bin/bash

if [ $# -ne 2 ]
then
     exit 1
fi
als het aantal argumenten niet gelijk is aan 2, dan exit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
number=0

for filename in *$1*
do
   if [ -f $filename ]
   then
     fname=`basename $filename`
     n=`echo $fname | sed -e "s/$1/$2/"`
     mv $fname $n
     let "number += 1"
   fi
done   

exit 0
samengevat:

je renamed *$1* in $2, dus als je dit script aanroept als "./scriptje henkie pietje" dan renamed ie henkie1, 1henkie, henkie.mp3 naar pietje1, 1pietje, pietje.mp3

(die $number variabele ziet er trouwens vrij onzinnig uit)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

  • 2P
  • Registratie: November 2001
  • Laatst online: 28-05 14:22

2P

:wq

Op maandag 03 juni 2002 12:37 schreef RedSonja het volgende:
Niet leerzaam maar wel geinig:
locate pub | more beer | grep Palm;
lynx -dump www.ilse.nl | perl;
De eerste zoekt het keyword "pub" op me locate. Haalt um door more zodat je de output per pagina kan bekijken en haalt vervolgens met grep alle regels eruit waar "Palm" in staat. Grappig ;)

De tweede dumpt de site www.ilse.nl naar STDOUT met lynx en haalt met grep alle regels eruit waar het woord "perl" in staat.

Acties:
  • 0 Henk 'm!

  • 2P
  • Registratie: November 2001
  • Laatst online: 28-05 14:22

2P

:wq

code:
1
2
3
4
5
6
#!/bin/bash 
blah1=`/bin/grep -c 'GET /default.ida?NNNNNN' $1 | /usr/bin/cut -d ":" -f2` 

blah2=`/bin/grep -c 'GET /default.ida?XXXXXX' $1 | /usr/bin/cut -d ":" -f2`

blah3=`/bin/grep -c 'GET /scripts/root.exe' $1 | /usr/bin/cut -d ":" -f2`

Deze is best leuk.
$1 is een log bestand van Apache.
Ik heb de regels met echo eruit gehaald.

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Op maandag 03 juni 2002 13:31 schreef 2P het volgende:

[..]


De tweede dumpt de site www.ilse.nl naar STDOUT met lynx en haalt met grep alle regels eruit waar het woord "perl" in staat.
Fout : )

Er staat nergens een grep. Als je met lynx www.ilse.nl bezoekt, krijg je een stukje obfuscated perl, wat je vervolgens aan perl voert..
code:
1
2
3
$ lynx -dump www.ilse.nl | perl
ALL YOUR SEARCH ARE BELONG TO US
$

Doe ook maar eens:
code:
1
lynx -dump www.ilse.nl | less

Acties:
  • 0 Henk 'm!

Verwijderd

als het aantal argumenten niet gelijk is aan 2, dan exit
normaal gesproken krijg je dan dus informatie over hoe het script te gebruiken...
je renamed *$1* in $2, dus als je dit script aanroept als "./scriptje henkie pietje" dan renamed ie henkie1, 1henkie, henkie.mp3 naar pietje1, 1pietje, pietje.mp3
het script is in principe een frontend voor mv... in het oorspronkelijke script staan dan ook 'echo's' welke de gebruikersvriendelijkheid wat verhogen... het geeft een iets vriendelijkere output dan mv zelf...
die $number variabele ziet er trouwens vrij onzinnig uit
die had idd ook weggehaald moeten worden. in het originele script telt deze variabele hoeveel files gerenamed zijn, en laat dat aan het einde van het script nog eens zien; 'x files have been renamed...'

Acties:
  • 0 Henk 'm!

  • 2P
  • Registratie: November 2001
  • Laatst online: 28-05 14:22

2P

:wq

Op maandag 03 juni 2002 13:36 schreef blaataaps het volgende:

[..]

Fout : )

Er staat nergens een grep. Als je met lynx www.ilse.nl bezoekt, krijg je een stukje obfuscated perl, wat je vervolgens aan perl voert..
code:
1
2
3
$ lynx -dump www.ilse.nl | perl
ALL YOUR SEARCH ARE BELONG TO US
$

Doe ook maar eens:
code:
1
lynx -dump www.ilse.nl | less
Ow idd ja, niet goed gelezen :+

Wel grappig trouwens :)

Ik kan de onderste nu even niet proberen want ik zit nu op school

Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 04-09 08:21
Op maandag 03 juni 2002 13:34 schreef 2P het volgende:
code:
1
2
3
4
5
6
#!/bin/bash 
blah1=`/bin/grep -c 'GET /default.ida?NNNNNN' $1 | /usr/bin/cut -d ":" -f2` 

blah2=`/bin/grep -c 'GET /default.ida?XXXXXX' $1 | /usr/bin/cut -d ":" -f2`

blah3=`/bin/grep -c 'GET /scripts/root.exe' $1 | /usr/bin/cut -d ":" -f2`

Deze is best leuk.
$1 is een log bestand van Apache.
Ik heb de regels met echo eruit gehaald.
Je telt het aantal code red 1 & 2 aanvallen in je logfiles.

root.exe weet ik niet precies, zou nimbda kunnen zijn.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Op maandag 03 juni 2002 08:10 schreef beelzebubu het volgende:
Als...
je pakt de proceslijst zonder grep (anders filtert ie grep zelf mee) en vergelijkt die met de proceslijst (again, gefilterd met -v grep) waar konqueror instaat en dan de eerste entry uit die lijst.

Als dus de eerste entry uit de konquerorlijst gelijk is aan de entry uit de kdevelop lijst, dan print je ABC uit.

Volgens mij probeer jij te kijken of konqueror actief is vanuit kdevelop of niet. Alleen dit is niet echt een handige manier volgens mij. :D.
Goed, eigenlijk heb ik per ongeluk een tikfoutje gemaakt maar dit maakt hem wel leuker :). De regel die ik wilde laten zien was de volgende:
code:
1
2
print "ABC" if (`ps aux | grep -v grep | grep konqueror` eq \
`ps aux | grep -v grep | grep konqueror | head -1`);

Dit test of konqueror één of nul keer draait, vandaar die 'head -1' erbij. Je kunt ook de uitkomst van wc -l gaan bekijken, maar die matchen op '1' of '0' is ook weer wat werk...al wil ik niet beweren dat dit ook maar in de buurt van efficiënt komt :P.

Nu staat er het volgende en ook daar valt een nut voor te verzinnen:
code:
1
2
print "ABC" if (`ps aux | grep -v grep | grep kdevelop` eq \
`ps aux | grep -v grep | grep konqueror | head -1`);

De eerste kijkt of er een proces draait met in de naam 'kdevelop' en geeft die betreffende regel(s) dan terug. Het tweede deel kijkt naar processen met 'konqueror' in de naam en geeft daar alleen de eerste van terug. Om de twee returns gelijk te laten zijn moeten er één (of nul!) processen zijn die zowel 'konqueror' als 'kdevelop' in de naam hebben zitten. Waarom je dit zou willen weten? Och, het feit dat het kan is natuurlijk al leuk >:). En het was eigenlijk een foutje om die regel zo te posten...

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!

  • Tuinhark
  • Registratie: April 2000
  • Laatst online: 11-09 12:57

Tuinhark

Retro

Hier iets dat ik zelf heb geschreven.. (Oke is geen bash, maar wel een shell script dat ik gebruik ;)) Voor de liefhebbers zeg-maar.
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
#!/usr/bin/php4 -q
<?php

# $VERBOSE

switch ($argv[1])
{
    case "test":
        $test = true;
    case "stop":
        break;
    case "start":
    case "restart":
    case "force-reload":
        exit(0);
        break;
    default:
        die("Usage: " . __FILE__ . " {start|stop|restart|force-reload}\n");
}

$runlevel = `/sbin/runlevel`;
$runlevel = substr(trim($runlevel), 2, 1);

if ($runlevel == 0)
    $message = "shutdown";
else if ($runlevel ==  6)
    $message = "reboot";
else
//    $message = "reboot";

{
    $string = __FILE__ . ": " . ($test ? "testing" : "error") . ": Not shutting down or rebooting";
    exec("/usr/bin/logger -t \"NetSend.ShutdownMessage\" -- $string");

    if (! $test)
        die("$string\n");
    else
        $message = "test";
}

// fetch output from smbclient
$servers = array();
$output = `/usr/bin/smbclient -L netserver -N`;
$output = explode("\n", $output);

// process array to filter out non-hostnames
$c = count($output);
$continue = true;
for ($i = 0; $i < $c && $continue; $i++)
{
    // find hostnames section
    $line = trim(strtolower($output[$i]));
    if ("server" == substr($line, 0, 6) && "comment" == substr($line, -7, 7))
    {
        // search for hostnames
        $i++;
        while ($line != "")
        {
            $i++;

            $line = trim(strtolower($output[$i]));
            $length = strlen($line);

            $host = "";
            $char = "\\";

            // filter out non-valid chars
            for ($j = 0; $j < $length && $char != " "; $j++)
            {
                $char = substr($line, $j, 1);
                $host .= $char;
            }
            $host = trim($host);

            // add hostname to list
            if (!empty($host) && $host != "netserver")
                $servers[] = $host;
        }
        $continue = false; // $c = -1; $i = 0;
    }
}

$c = count($servers);
if ($c > 0)
{
    $any_alive = false;
    echo "Notifying clients of server shutdown... [";
    for ($i = 0; $i < $c; $i++)
    {
        $ping = `/bin/ping -c 1 -q $servers[$i]`;
        $live = preg_match("/1 packets received/", $ping);
        $any_alive = $any_alive || $live;

        if ($live)
            exec("/bin/cat /opt/$message.msg | /usr/bin/smbclient -M " . $servers[$i]);
        echo $servers[$i], (($live) ? "" : " [down]"), (($i < $c - 1) ? ", " : "");
        exec("/usr/bin/logger -t \"NetSend.ShutdownMessage\" -- Host " . $servers[$i] . ($live ? "" : " NOT") . " notified of shutdown");
    }
    echo "] done.\n";

    if ($any_alive)
    {
        echo "Now, pausing for 30 seconds... ";
        if (! $test)
            sleep(30);
        echo "done.\n";
    }
}
else
{
    $string = "Warning: no other hosts connected, proceeding with shutdown";
    exec("/usr/bin/logger -t \"NetSend.ShutdownMessage\" -- $string");
    die("$string\n");
}
?>

:Y)

Acties:
  • 0 Henk 'm!

  • Newjersey
  • Registratie: November 2000
  • Laatst online: 07:46
een simpele
code:
1
echo -e "\7"

:)

Acties:
  • 0 Henk 'm!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10-09 19:53

odysseus

Debian GNU/Linux Sid

Laat de systeemspeaker geluid produceren. Zelf gebruik ik altijd iets als 'make -f Makefile.cvs && ./configure && make; echo -e "\a\a"' om dingen te compileren, zodat je hoort wanneer het is afgelopen. Dat is een idee waarmee ik al vaak blij ben geweest :).

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!

  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

OK, niet zo moeilijk. Maar had het even nodig.
(kon de feature niet vinden in de X***** versie...)
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/bash
tmpdir=cpacd$$ 
cleanup()
{
cd /tmp/
rm -r -f $tmpdir
}
if [ -z "$1" ] then
cd /tmp
else
    if [ -d $1 ] then
    cd $1
    else
    exit 1  
    fi
fi
mkdir $tmpdir
if [ "$?" -eq 1 ] ; then
exit 1
fi
cd $tmpdir
cdda2wav -x -B -D /dev/cdrom
if [ "$?" -eq 1 ] ; then
    echo "Error"
else
    cdrecord -dev=0,0,0 -audio -v -useinfo -pad *.wav
fi
cleanup
echo "Done."
Pagina: 1