← Back to team overview

sslug-teknik team mailing list archive

Re: Er du bare lidt nysgerrig over hvad din server laver?

 

On Tue, 14 Sep 1999, Stefan Andersen wrote:

> Jeg er jo lidt af den nysgerrige type der gerne vil vide hvad min
> maskine laver. Derfor har jeg lavet et lille script som i allesammen
> gerne må hapse.

Her er hvordan du kunne gøre dit script mere fleksibelt og sikkert (Det er
typisk en dårlig idet at skrive til en fil i /tmp/ med et bestemt filnavn
uden at åbne filen eksklukivt. Nu kører dette script som "nobody" men hvis
det kørte som root kunne en ond bruger fx. lave et link fra /tmp/w.tmp til
/etc/passwd).

At brug tmp-filer med bestemte navne her giver også et problem hvis der
bliver kørt flere instanser af scriptet -- det kunne være outputtet fra
programmerne bliver korrupteret eller ikke som forventet.

# Kommandoer hvis output vi vil have lagt i en array
@Commands = ( "w", "cat /proc/meminfo", "df", "ps -axf", "netstat", "netstat -s -N");

# For hver kommando... Læg et element af arrayen ind i $_
foreach (@Commands) {
# Udskriv en anchor og så kør kommandoen og udskriv dens output
	print "<A NAME=\"$_\">", `$_`;

# Advar hvis der skete en fejl under kørslen
	print "Error running $_: $?" if $?;
	print "</A>";
}

Når programmet køres med ``, skrive det direkte til en "pipe" oprettet
mellem den og din proces -- der er ingen midlertidige filer (som du
iøvrigt glemte at fjerne når din process var færdig :)

Ovenstående benytter blot programmets navn som anchor. Hvis du vil have
nogle bestemt navne, kunne du fx i stedet for brug en hash:

%Commands = ( "w" => "w",
		"cat /proc/meminfo" => "meminfo");

foreach (keys %Commands) { # Finder nøglerne, det der står til venstre
	# $_ er fx "cat /proc/meminfo"
	# $Commands{$_} er "meminfo"
	print ... $Commands{$_} .. 


-- 
==============================================================================
Erwin Andreasen   Herlev, Denmark <erw@xxxxxx>          UNIX System Programmer
<URL:http://www.andreasen.org>              <*>              Goodbye, Richard!
==============================================================================












References