(Terug) naar scripts op heeck.nl of heeck.nl

******************************************************************************************
Scriptknipsels en sysopweetjes

Ik verzamel hier programmeerhandigheidjes, stukjes manpage, halve scripts, stukkies excel en unix/linux-systeembeheerweetjes. De collectie is voornamelijk voor mezelf bedoeld maar eenieder die dat wil mag er op meeliften.
Garantie? Aansprakelijkheid? Neuh!
* index **********************************************************************************
* CTRL-ALT-D-oooooh shit! Redhat
* Afronden op één twintigste perl
* Enteren als je er niet bij bent sh
* Tijdstempelen sh
* Het repareren van device null Ux/Linux
* Hoe word ik aangeroepen? sh
* Een handig alias-je voor exporteren van je DISPLAY variabele Ux/Linux
* Stukje VBA voor een tijdstempel in Excel MsExcel
*
*                       
*
*  
* Begin CTRL-ALT-D-oooooh shit! **********************************************************
******************************************************************************************
Een standaard Redhat installatie levert een instelling mee die in gemengde omgevingen zeer riskant kan zijn.
De "three finger salute", CTRL-ALT-DEL wordt op het console standaard geïnterpreteerd als verzoek tot vrijwel onmiddelijke reboot, ongeveer zo:
  • De Linuxbakken hangen met een paar Windowsmachines aan één KVM-switch.
  • Je maakt een bedieningsfout op de KVM-switch die je niet tijdig opmerkt.
  • Je wil effe snel een windowsbak unlocken maar blijkt gekoppeld te zijn aan een Linu%$$#@%!!%^&!!!!
    Volgens Murphy is dat in een grote omgeving met ontwikkel-, test- en productiemachines dan ook altijd de primaire productiemachine, tenzij er zes dure jongens code zitten te kloppen op de ontwikkelomgeving.
Even in /etc/inittab zoeken naar de regels:
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Uithekken of verwijderen en een keertje gecontroleerd rebooten of nog één maal CTRL-ALT-DEL.
*                       
*
*  
* Begin Afronden op één twintigste *******************************************************
******************************************************************************************
Om bedragen op 5 cent af te ronden is de volgende formule goed bruikbaar:
  1. Vermeningvuldig de bron met 2
  2. Rond de uitkomst af op één decimaal achter de komma
  3. Deel dit getal weer door twee.
In perl: $roundedprice = sprintf("%.2f", ((sprintf("%.1f", ($price*2)))/2));
*                       
*
*  
* Begin Enteren als je er niet bij bent **************************************************
******************************************************************************************
Ik liep laatst klem toen ik een scriptje in elkaar zette om een paar http-servers op ons lokale netwerk te controleren. Bij sommige daarvan, servers met webapplicaties, probeer ik ook in te loggen om zo te testen of de achterliggende applicatie ook in de lucht is. Hiervoor maak ik in elke applicatie een 'ongevaarlijke' user aan en benader ik ze vanaf een unix-bak met:
/usr/local/bin/GET -sd http://user:pwd@appserver.intranet
Dit moet de status (b.v. 200 OK) teruggeven zonder de inhoud van de webpagina zelf.

Nou zijn de meeste webservers zo opgezet dat je altijd een paar -meestel drie- kansen krijgt om in te loggen. Als de eerste keer misgaat krijg je een nieuwe prompt voor een password of een user/password combinatie. Als je GET aanroept vanuit een script blijft dat dus eindeloos hangen bij gebrek aan input.......

Om een http-401 of 403 melding terug te krijgen en te signaleren dat er iets mis is moeten die extra kansen onbenut blijven, een optie die ik in GET niet heb kunnen vinden.
Ik omzeil dit met de volgende methode:
  1. Ik maak een read-only tekstbestandje aan met een stuk of tien lege regels, in ieder geval meer dan ik nodig heb, en noem dit "enterenter.txt", eventueel commentaar kan onder de lege regels.
  2. Ik roep get als volgt aan: /usr/local/bin/GET -sd http://user:pwd@appserver.intranet < enterenter.txt
Zo krijgt GET altijd de benodigde enter's vanuit stdin, ook als er niemand bij is. Wellicht ook elders toepasbaar......
*                       
*
*  
* Begin Tijdstempelen ********************************************************************
******************************************************************************************
Date output formats:
%Y Viercijferig  jaar
%m Tweecijferige maand
%d Tweecijferige maanddag
%H Tweecijferig  uur uit vierentwintiguursklok
%M Tweecijferige minuut
%S Tweecijferige seconde

date +%Y%m%d%H%M%S voor een timestamp tot op de seconde
20040926104316 is "Sun Sep 26 10:43:16 CEST 2004"


*                       
*
*  
* Begin Het repareren van device null ****************************************************
******************************************************************************************
Omdat je als root nog steeds een mens bent doe je wel eens domme dingen.
Het om zeep helpen van de Grote Bittenbak is er zo eentje.

Zo krijg je /dev/null weer terug (nadat je de gemolde file /dev/null hebt verwijderd):

HP-UX:mknod /dev/null 3 0x000002
Linux:mknod /dev/null c 1 3
Daarna de rechten zetten:chmod 666 /dev/null
*                       
*
*  
* Begin Hoe word ik aangeroepen? *********************************************************
******************************************************************************************
Ik wil van sommige scripts graag weten of ze vanaf de prompt gerund worden of vanuit de crontab.
Zo kan ik de output sturen afhankelijk van de opstartwijze. Als ik iets op de prompt start kan de output direct naar stdout. Als je dat ook met cronjobs doet krijg je een standaard subject in de mail (cron) waardoor je in sommige mailclients niet prettig automatisch kunt filteren.
Bovendien kan het handig zijn de mails een wat menselijk formaat te geven als ze ook naar niet-technische medewerkers gestuurd worden.

Op het moment dat je je script zelf de mailafhandeling laat doen moet je weer steeds naar je mailclient toe om output van een op de hand gestart script te lezen. Om het al of niet mailen afhankelijk te maken gebruik ik 'tty'.
case `tty` in
[/]*) #reply van tty (/dev/.....) uit een terminal
      #We gooien alles naar stdout
      output=std
      ;;
*)    #reply van tty ("not a typewriter/terminal" of soortgelijks) uit de crontab
      #We gaan de output mailen
      output=mail
      ;;
esac
*                       
*
*  
* Begin Een handig alias-je voor exporteren van je DISPLAY variabele *********************
******************************************************************************************
Om snel je display te kunnen exporteren heb ik op de meeste systemen die ik beheer de alias "scherm".
Deze zet de DISPLAY variabele op display 0.0 van het ip-adres dat gevonden is met het who-commando.
(Op HP-UX gebruik je who -Rm)
alias scherm='export DISPLAY=`who -m | cut -f2 -d"("|cut -f1 -d")"`:0.0'
Aan de ontvangende kant eerst even xhost+ en daarna met xclock effe checke.
*
*
*
* Begin Stukje VBA voor een tijdstempel in Excel *****************************************
******************************************************************************************
Excel macrootje om heel snel de huidige datum en tijd in een cel te kwakken
(zelf effe celeigenschappen goed zetten):

===================================
Sub timestamp()
'
ActiveCell.FormulaR1C1 = "=NOW()"
ActiveCell.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
===================================


Even aan een button koppelen, et presto!
*
*
*
* Begin **********************************************************************************