Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Perl в Линуксе] Вывод списка user'ов


Автор: Dodge 24.12.2007, 22:35
Нужно вывести список user'ов которые вошли в систему в понедельник.
Программу нужно написать в Perl и проверить в командной строке линукса.

Вывод пользователей нужно оформить примерно так: если в командной строке Линукса написать last, то выведет всех пользователей.  А результатом этой программы должен быть только вывод user'ов, которые вошли в систему в понедельник.

Автор: t_gran 25.12.2007, 12:58
А shell-овские команды типа awk и grep использовать можно?

Автор: Dodge 25.12.2007, 15:45
Не совсем понимаю что ты имеешь в виду.
если эти твои команды дествительно можно использовать в синтаксисе perl'a то наверное можно.


Начало программы такое:
      #!usr/bin/perl
       далее код программы

Автор: t_gran 26.12.2007, 05:03
Просто если можно использовать shell комманды, то получаеться smile:
Код

#!/usr/bin/perl

@LAST= exec "last | grep пн";
print @LAST;

Если же нет, то тут проблема заключается что файл /var/log/wtmp бинарный и имеет структуру:
Код

#define UT_NAMESIZE     16
#define UT_LINESIZE     8
#define UT_HOSTSIZE     16

struct wtmp
{
   char    ut_line[UT_LINESIZE];   /* Terminal line name */
   char    ut_name[UT_NAMESIZE];   /* User's login name */
   char    ut_host[UT_HOSTSIZE];   /* Host user came from */
   int32_t ut_time;                /* When user logged in */
};

Тут нужно уже подумать как с помощью Perl прочитать бинарный файл.

Автор: arto 26.12.2007, 13:44
1. @LAST= exec "last | grep пн"; -- 2 ошибки.
2. "файл /var/log/wtmp бинарный и имеет структуру" -- зависит от типа ос, для линуха:

"Linux  utmp entries conform neither to v7/BSD nor to System V; they are a mix of the two."

Автор: t_gran 27.12.2007, 05:29
arto, а ну ка скажи, какие же это ошибки! Знаешь, не надо клеветать пока не проверил. smile 
А на счет второго ты в принципе прав.

Автор: t_gran 27.12.2007, 09:14
user posted image

Автор: Dodge 27.12.2007, 22:16
Все я сделал, с помощью регулярных выражений.. smile
Все очень легко оказалось...

Автор: arto 29.12.2007, 21:39
1. вы уверены, что локаль всегда русская? 

# last | head -1
artо     pts/4        localhost            Wed Dec 26 08:37   still logged in

2. exec заменяет текущий процесс новым, в вашем случае шеллом с командами.

# cat > a.pl
#! /usr/bin/perl

my @LAST = exec "last | head -1";
print "We got last:",@LAST,"\n";
print "Done\n";
^D
# perl a.pl
artо     pts/4        localhost            Wed Dec 26 08:37   still logged in
#

Тщательнее надо...

Автор: t_gran 8.1.2008, 03:55
Вот это объяснение так объяснение smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)