Schrift
[thread]12230[/thread]

Hash-Slice und die Ausgabe... (Seite 2)

Leser: 1


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Duff
 2008-07-23 22:27
#112541 #112541
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ich befürchte, ich benötige nochmals Hilfe.

Ich will nun mit dem Vorhanden Hash (mit den Usernamen aus der /etc/passwd) alle Zeilen aus repquota -a ermitteln, in denen der Username vorkommt.

Habe folgendes probiert, es wird aber zuviel ausgegeben:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sub check_quota {
   my $hash_ref=shift;
   my (@users,@list);
   my %hash;
   #print Dumper($hash_ref);

   for my $user (keys %$hash_ref) {
      push(@users, $user);
   }

   my @repq_h=grep {
      #print $_,"\n";
      if($_ =~ m{^([A-Za-z0-9]+)}) {
         my $word=$1;
         push(@{$hash{$word}},$_);
         grep $word,@users;
      }
   } qx{repquota -a};
   print Dumper(\@repq_h);
}
D'OH
Daniel
betterworld
 2008-07-23 22:38
#112543 #112543
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Warum gehst Du manuell auf /etc/passwd los? Dazu gibt es doch getpwent bzw. User::pwent.
Linuxer
 2008-07-23 22:47
#112544 #112544
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Duff+2008-07-23 20:27:49--
Ich befürchte, ich benötige nochmals Hilfe.

Ich will nun mit dem Vorhanden Hash (mit den Usernamen aus der /etc/passwd) alle Zeilen aus repquota -a ermitteln, in denen der Username vorkommt.


Willst Du die Zeilen nur für einen bestimmten User sehen, oder für alle User, die im Hash enthalten sind? Das wird mir nicht so ganz klar mit dieser Formulierung.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Duff
 2008-07-24 10:34
#112560 #112560
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ich möchte alle Zeilen der user aus dem Ausdruck repquota -a, die auch in der /etc/passwd stehen.
D'OH
Daniel
betterworld
 2008-07-24 16:32
#112610 #112610
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Kann man zwar recht leicht von Hand machen, aber zur Not hilft immer List::Compare.
Duff
 2008-07-25 09:47
#112679 #112679
User since
2006-10-06
283 Artikel
BenutzerIn

user image
betterworld+2008-07-24 14:32:54--
Kann man zwar recht leicht von Hand machen, aber zur Not hilft immer List::Compare.


Was meinst du mit "recht leicht von Hand machen"?

Weiß schon nicht, wie ich am besten den Shell-Befehl abspeichere?
D'OH
Daniel
betterworld
 2008-07-25 16:08
#112708 #112708
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Mit "von Hand machen" meinte ich, die Namen herauszufinden, die in beiden Arrays vorkommen, so wie Du geschrieben hast:
Quote
Ich möchte alle Zeilen der user aus dem Ausdruck repquota -a, die auch in der /etc/passwd stehen.

Ich hatte gedacht, dass Du damit sagen wolltest, dass dieser Teil nicht funktioniert (wobei es eigentlich so aussieht, als ob es funktionieren muesste), also habe ich List::Compare empfohlen.
Linuxer
 2008-07-26 02:19
#112771 #112771
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Duff+2008-07-25 07:47:13--
Weiß schon nicht, wie ich am besten den Shell-Befehl abspeichere?

Kannst Du das näher erläutern? Mir wird daran nicht klar, was Du damit meinst. Spontaner Gedanke ist:
Code (perl): (dl )
1
2
3
4
5
# adjust path to executable
my $cmd = '/bin/repquota -a';
# execute command and fetch its output in @output
my @output = qx~ $cmd ~;
# check $? if $cmd executed successfully

Gib bitte mal ein beispielhaftes Output von repquota -a mit dem man arbeiten kann.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Duff
 2008-07-30 21:25
#112924 #112924
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Sorry, hat ein wenig länger gedauert...

Hier die Ausgabe von repquota -a
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@homer:~# repquota -a
*** Report for user quotas on device /dev/mapper/lvm--raid--1-lv1
Block grace time: 7days; Inode grace time: 7days
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  192252       0       0              5     0     0       
user1     --       4 18874368 20971520              1     0     0       
user2      --    2440 18874368 20971520              7     0     0       
user3  --       4 18874368 20971520              1     0     0       
user4    --  111764 18874368 20971520           1060     0     0         


root@homer:~# 
D'OH
Daniel
MatthiasW
 2008-07-31 17:26
#112948 #112948
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Folgendermaßen solltest du die User aus der Ausgabe bekommen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
my @output = `repquota -a`;
{
        my    $status = $? >> 8;
        local $"      = "\n"; # "
        die "'repquota -a' returned bad status: $status\nOutput: @output" if $status;
}

splice( @output, 0, 5 );

my @user = grep { defined $_ } map { /^(\S+)/ ? $1 : undef } @output;

Jetzt musst du nur noch nachschauen ob sich die jeweiligen User auch im %passwd Hash befinden:
Code (perl): (dl )
1
2
# vorrausgesetzt: my $passwd = parse_passwd( '/etc/passwd' );
@user = grep { exists $passwd->{$_} } @user;

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2008-07-23 19:02.