/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
perl
Fra : Sonni Bak Skammelsen


Dato : 11-07-02 15:35

Hej

Jeg har et lille problem met et perlscript. det går i alt sin enkelthed ud
på at lave en linecount i en bestemt fil.

Jeg kører commandoen, more /home/netguard/.htpasswd|wc -l fra et perlscript
og det returnere den rigtige værdi.

Men kører jeg scriptet gennem apache som et cgi script får jeg et resultat
som er 3 højere, findes der en god men simpel forklaring på dette, og
eventuelt en lille løsning.

/Sonni



 
 
Lars Balker Rasmusse~ (11-07-2002)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 11-07-02 15:42

"Sonni Bak Skammelsen" <news@sonni.org> writes:
> Jeg har et lille problem met et perlscript. det går i alt sin enkelthed ud
> på at lave en linecount i en bestemt fil.
>
> Jeg kører commandoen, more /home/netguard/.htpasswd|wc -l fra et perlscript
> og det returnere den rigtige værdi.
>
> Men kører jeg scriptet gennem apache som et cgi script får jeg et resultat
> som er 3 højere, findes der en god men simpel forklaring på dette, og
> eventuelt en lille løsning.

"more fil | wc -l" var dog en grusom konstruktion. Prøv med "wc -l fil".

Alternativt kan du prøve med følgende perl-stump:

open FOO, "/home/netguard/.htpasswd" or die "open .htpasswd: $!";
my $cnt = 0;
while (<FOO>) { ++$cnt }
close FOO;
# $cnt har nu antal linier i filen
--
Lars Balker Rasmussen "Special is bad."

Thorbjoern Ravn Ande~ (11-07-2002)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 11-07-02 16:18

Lars Balker Rasmussen skrev:

>>Men kører jeg scriptet gennem apache som et cgi script får jeg et resultat
>>som er 3 højere, findes der en god men simpel forklaring på dette, og
>>eventuelt en lille løsning.
>
>
> "more fil | wc -l" var dog en grusom konstruktion. Prøv med "wc -l fil".

Kan det vaere "more" paa en dum terminal der giver alle de ekstra linier?


Lars Balker Rasmusse~ (11-07-2002)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 11-07-02 16:27

Thorbjoern Ravn Andersen <thunderbear@bigfoot.com> writes:
> Kan det vaere "more" paa en dum terminal der giver alle de ekstra linier?

Det var min tanke.
--
Lars Balker Rasmussen "Special is bad."

Peter Mogensen (11-07-2002)
Kommentar
Fra : Peter Mogensen


Dato : 11-07-02 15:46

Sonni Bak Skammelsen wrote:
> Jeg har et lille problem met et perlscript. det går i alt sin enkelthed ud
> på at lave en linecount i en bestemt fil.
>
> Jeg kører commandoen, more /home/netguard/.htpasswd|wc -l fra et perlscript
> og det returnere den rigtige værdi.
>
> Men kører jeg scriptet gennem apache som et cgi script får jeg et resultat
> som er 3 højere, findes der en god men simpel forklaring på dette, og
> eventuelt en lille løsning.


Jeg ved ikke hvorfor, men jeg undrer mig over to ting.

- hvorfor bruger du 'more'? 'more' er en pager (ligesom 'less'). Jeg
tror 'cat' er mere velegnet til det formål du ønsker, nemlig at få sendt
filens indhold ud på standard output.
Måske er det også grunden til forskellen - at more opfører sig
anderledes end du regner med:

cat /home/netguard/.htpasswd|wc -l

- Det andet jeg undrer mig over er hvorfor du overhovedet gør det på den
måde. Det er næsten at bede om sikkerhedsproblemer at kalde
kommando-fortolkeren fra CGI-scripts... specielt uden absolutte stier.

Du kunne lave det samme i ren Perl:
-----------------
#!/usr/bin/perl

$FILE = "/home/netguard/.htpasswd";

open FILE or die "no readable file";

$linecnt = 0;

while (<FILE>) { $linecnt++; }
close FILE;

print $linecnt . "\n";
----------------

Det er både hurtigere og sikrere.
Hvis det skukke være rigtig fil burde du køre det med perl -T

Peter


Peter Mogensen (11-07-2002)
Kommentar
Fra : Peter Mogensen


Dato : 11-07-02 16:08

Peter Mogensen wrote:

> Hvis det skukke være rigtig fil burde du køre det med perl -T

Argh... mund^H^H^H^Hhåndlort.

Hvis det skulle være rigtigt fint burde du...

"taint checks"

man perlsec

Peter


Henrik Christian Gro~ (11-07-2002)
Kommentar
Fra : Henrik Christian Gro~


Dato : 11-07-02 17:04

Peter Mogensen <apm-at-mutex-dot-dk@nospam.no> writes:

> cat /home/netguard/.htpasswd|wc -l

Hermed tildeles du en "useless use of cat-award". Du får det samme ud af
`wc -l /home/netguard/.htpasswd`?

..Henrik

--
Min signatur er taget på sommerferie.

Peter Brodersen (11-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 11-07-02 19:06

On 11 Jul 2002 18:03:37 +0200, Henrik Christian Grove <grove@sslug.dk>
wrote:

>Hermed tildeles du en "useless use of cat-award". Du får det samme ud af
>`wc -l /home/netguard/.htpasswd`?

Det er altså ikke korrekt. Godt nok er der mange tilfælde, hvor cat er
unødvendig (og folk har retmæssigt mange henvisninger til "useless
use..."), men det kan ikke siges i alle tilfælde.

$ wc -l /etc/fstab
8 /etc/fstab
$ cat /etc/fstab | wc -l
8

Hermed ikke sagt at cat absolut er nødvendig her, men man bør
stadigvæk være opmærksom på forskellen.

--
- Peter Brodersen

Rasmus Bøg Hansen (11-07-2002)
Kommentar
Fra : Rasmus Bøg Hansen


Dato : 11-07-02 19:14

Peter Brodersen wrote:

> use..."), men det kan ikke siges i alle tilfælde.
>
> $ wc -l /etc/fstab
> 8 /etc/fstab
> $ cat /etc/fstab | wc -l
> 8

Jeg har oplevet forskellen med 'filer' i /proc nogle gange - men hvornår
skulle der ellers være en forskel?

/Rasmus

--
-- [ Rasmus "Møffe" Bøg Hansen ] ---------------------------------------
Beware of bugs in the above code;
I have only proved it correct, not tried it.
- Donald Knuth
----------------------------------[ moffe at amagerkollegiet dot dk ] --

Thomas (12-07-2002)
Kommentar
Fra : Thomas


Dato : 12-07-02 07:40

Rasmus Bøg Hansen wrote:
> Peter Brodersen wrote:
>
>> use..."), men det kan ikke siges i alle tilfælde.
>>
>> $ wc -l /etc/fstab
>> 8 /etc/fstab
>> $ cat /etc/fstab | wc -l
>> 8
>
> Jeg har oplevet forskellen med 'filer' i /proc nogle gange - men hvornår
> skulle der ellers være en forskel?

F.eks. i det du selv quoter ?

--
Don't waste space

Rasmus Bøg Hansen (12-07-2002)
Kommentar
Fra : Rasmus Bøg Hansen


Dato : 12-07-02 18:46

Thomas wrote:

> Rasmus Bøg Hansen wrote:
>> Peter Brodersen wrote:
>>
>>> use..."), men det kan ikke siges i alle tilfælde.
>>>
>>> $ wc -l /etc/fstab
>>> 8 /etc/fstab
>>> $ cat /etc/fstab | wc -l
>>> 8
>>
>> Jeg har oplevet forskellen med 'filer' i /proc nogle gange - men hvornår
>> skulle der ellers være en forskel?
>
> F.eks. i det du selv quoter ?

Så lad mig spørge på en anden måde: Hvorfor er der somme tider forskel på
"wc -l /etc/fstab" og "cat /etc/fstab | wc -l"?

/Rasmus

--
-- [ Rasmus "Møffe" Bøg Hansen ] ---------------------------------------
Hidden DOS secret:
add BUGS=OFF to your CONFIG.SYS
----------------------------------[ moffe at amagerkollegiet dot dk ] --

Povl H. Pedersen (12-07-2002)
Kommentar
Fra : Povl H. Pedersen


Dato : 12-07-02 18:50

In article <agn4k2$r7j$1@carlsberg.amagerkollegiet.dk>,
Rasmus Bøg Hansen <moffe47@hotmail.com> wrote:

> Så lad mig spørge på en anden måde: Hvorfor er der somme tider forskel på
> "wc -l /etc/fstab" og "cat /etc/fstab | wc -l"?

Førstnævnte kender filnavnene du angiver til den, og printer dem med ud
Den anden kender ikke noget filnavn, og kan derfor ikke printe det ud.

Rasmus Bøg Hansen (12-07-2002)
Kommentar
Fra : Rasmus Bøg Hansen


Dato : 12-07-02 19:26

Povl H. Pedersen wrote:

> In article <agn4k2$r7j$1@carlsberg.amagerkollegiet.dk>,
> Rasmus Bøg Hansen <moffe47@hotmail.com> wrote:
>
>> Så lad mig spørge på en anden måde: Hvorfor er der somme tider forskel på
>> "wc -l /etc/fstab" og "cat /etc/fstab | wc -l"?
>
> Førstnævnte kender filnavnene du angiver til den, og printer dem med ud
> Den anden kender ikke noget filnavn, og kan derfor ikke printe det ud.

Nå, jeg forstod det som at de kunne tælle til et forskelligt antal linjer og
forstod ikke, hvordan det skulle være muligt...

/Rasmus

--
-- [ Rasmus "Møffe" Bøg Hansen ] ---------------------------------------
It may be the only innovation in Windows (CTRL-ALT-DELETE was
not invented by MS).
- Hans Reiser
----------------------------------[ moffe at amagerkollegiet dot dk ] --

Peter Makholm (11-07-2002)
Kommentar
Fra : Peter Makholm


Dato : 11-07-02 19:24

Peter Brodersen <usenet@ter.dk> writes:

> $ wc -l /etc/fstab
> 8 /etc/fstab
> $ cat /etc/fstab | wc -l
> 8

$ wc -l < /etc/fstab
8
$

Stadig ingen grund til at bruge cat.

--
Peter Makholm | If you can't do any damage as root, are you still
peter@makholm.net | really root?
http://hacking.dk | -- Derek Gladding about SELinux

Peter Brodersen (11-07-2002)
Kommentar
Fra : Peter Brodersen


Dato : 11-07-02 19:30

On Thu, 11 Jul 2002 20:24:13 +0200, Peter Makholm <peter@makholm.net>
wrote:

>Stadig ingen grund til at bruge cat.

Som sagt, "Hermed ikke sagt at cat absolut er nødvendig her". Det var
selvfølgelig en forglemmelse ikke i det mindste at nævne en passende
redirection.

--
- Peter Brodersen

Sonni Skammelsen (11-07-2002)
Kommentar
Fra : Sonni Skammelsen


Dato : 11-07-02 20:56


"Peter Mogensen" <apm-at-mutex-dot-dk@nospam.no> wrote in message
news:3D2D9A19.2020404@nospam.no...
>
>
> Jeg ved ikke hvorfor, men jeg undrer mig over to ting.
>
> - hvorfor bruger du 'more'? 'more' er en pager (ligesom 'less'). Jeg
> tror 'cat' er mere velegnet til det formål du ønsker, nemlig at få sendt
> filens indhold ud på standard output.
> Måske er det også grunden til forskellen - at more opfører sig
> anderledes end du regner med:
>
> cat /home/netguard/.htpasswd|wc -l
>
> - Det andet jeg undrer mig over er hvorfor du overhovedet gør det på den
> måde. Det er næsten at bede om sikkerhedsproblemer at kalde
> kommando-fortolkeren fra CGI-scripts... specielt uden absolutte stier.
>
> Du kunne lave det samme i ren Perl:
> -----------------
> #!/usr/bin/perl
>
> $FILE = "/home/netguard/.htpasswd";
>
> open FILE or die "no readable file";
>
> $linecnt = 0;
>
> while (<FILE>) { $linecnt++; }
> close FILE;
>
> print $linecnt . "\n";
> ----------------
>
> Det er både hurtigere og sikrere.
> Hvis det skukke være rigtig fil burde du køre det med perl -T
>
> Peter

Det skulle egentlig bare gå lidt hurtigt med at få det brygget sammen, og
mine talenter inden for perl var før i går = 0.

Men den med cat i stedet for more den virkede fint, og et lille tillæg til
den, hvis man laver den uden cat får men filnavn + sti med, det var jeg ikke
interreseret i.

Takker mange gange for det gode input.

/Sonni




Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408885
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste