Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> информация о пользователях linux 
V
    Опции темы
boostcoder
Дата 25.10.2010, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



всем привет.

два вопроса:
1. как получить список всех пользователей?
2. как определить продолжительность текущего сеанса пользователя?

спасибо.


зы
по поводу 1: можно прочесть имена каталогов в /home. еще вариант, парсить /etc/passwd и из него извлечь имена пользователей. но что-то мне оба таких варианта кажутся нелепыми)
по поводу 2го вообще мыслей нет.


PM WWW   Вверх
xvr
Дата 25.10.2010, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(boostcoder @ 25.10.2010,  00:26)
два вопроса:
1. как получить список всех пользователей?

Совсем всех или залогиненных? Если первое, то парсинг passwd вполне нормально (точнее парсинг ypcat passwd), если второе - то парсинг вывода от ps (на имена пользователей)
Цитата

2. как определить продолжительность текущего сеанса пользователя?
Найти время старта корневого шела пользователя (из вывода ps)

PM MAIL   Вверх
boostcoder
Дата 25.10.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(xvr @  25.10.2010,  11:31 Найти цитируемый пост)
Совсем всех или залогиненных?

всех.

Цитата(xvr @  25.10.2010,  11:31 Найти цитируемый пост)
(точнее парсинг ypcat passwd)

ман про "ypcat" не знает. поясните..

Цитата(xvr @  25.10.2010,  11:31 Найти цитируемый пост)
Найти время старта корневого шела пользователя (из вывода ps)

а как это в ps должно выглядеть? точнее что именно мне нужно от ps?
PM WWW   Вверх
djamshud
Дата 25.10.2010, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



По поводу первого - хз. Пассвд и хом парсить нелепо. Домашние директории могут храниться где угодно, а авторизация происходить через LDAP - насколько я понимаю, в таком случае /etc/passwd вообще не будет, поправьте, если я не прав.

По поводу второго - w, who.

Добавлено через 1 минуту и 7 секунд
А в первом наверное может помочь pam... 


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
xvr
Дата 25.10.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(boostcoder @ 25.10.2010,  11:35)
Цитата(xvr @  25.10.2010,  11:31 Найти цитируемый пост)
(точнее парсинг ypcat passwd)

ман про "ypcat" не знает. поясните..

У меня знает:
Цитата

NAME
       ypcat - print values of all keys in a NIS database
 
SYNOPSYS
       ypcat [ -kt ] [ -d domain ] [ -h hostname ] mapname
       ypcat -x
 
DESCRIPTION
       ypcat  prints the values of all keys from the NIS database specified by mapname, which may be a map
       name or a map nickname.
дело в том, что если ваша машина включена в сеть, то /etc/passwd может быть вообще пустым

Цитата

Цитата(xvr @  25.10.2010,  11:31 Найти цитируемый пост)
Найти время старта корневого шела пользователя (из вывода ps)

а как это в ps должно выглядеть? точнее что именно мне нужно от ps?

Как то так:
Код

ps --ppid 1 -o "user,stime"


Или who - как правильно заметил djamshud

PS. Специально проверил - who и w дампуют не всех  smile 


Это сообщение отредактировал(а) xvr - 25.10.2010, 12:00
PM MAIL   Вверх
MAKCim
Дата 25.10.2010, 12:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



нативный способ - читать /var/run/utmp (man utmp)

Добавлено через 12 минут и 6 секунд
Код

#include <utmp.h>

#include <stdio.h>

int main()
{
    FILE *fp;
    int error;
    struct utmp utmp;
    if ((fp = fopen("/var/run/utmp", "r")) == NULL)
    {
        return -1;
    }
    for (; fread(&utmp, sizeof(utmp), 1, fp) == 1; )
    {
        printf("%hd:%u:%s:%s:%s:%s:(%hd:%hd):%ld:(%lu:%lu)\n",
            utmp.ut_type,
            utmp.ut_pid,
            utmp.ut_line,
            utmp.ut_id,
            utmp.ut_user,
            utmp.ut_host,
            utmp.ut_exit.e_termination,
            utmp.ut_exit.e_exit,
            utmp.ut_session,
            utmp.ut_tv.tv_sec,
            utmp.ut_tv.tv_usec
            );
    }
    if (ferror(fp))
    {
        error = -2;
    }
    else
    {
        error = 0;
    }
    fclose(fp);
    return error;
}




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 25.10.2010, 12:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



соответственно задача 2 решается
нахождением max(curr_time - ut_tv.tv_sec) по каждому элементу utmp для нужного юзера


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
boostcoder
Дата 25.10.2010, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



MAKCim, спасибо за пример.
я так понял, что этот код, предоставит информацию об активных пользователях? или о всех?
PM WWW   Вверх
MAKCim
Дата 25.10.2010, 13:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



boostcoder
задача 2 справедлива только для активных (залогиненых) вроде как...
для 1 тупо как уже сказали пропарсить /etc/passwd


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
boostcoder
Дата 25.10.2010, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



всем спасибо.
вопрос закрыт.

PM WWW   Вверх
xvr
Дата 25.10.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(MAKCim @  25.10.2010,  12:22 Найти цитируемый пост)
нативный способ - читать /var/run/utmp
Собственно w и who это и делают. Но некоторых он все же не показывает, вот например:
Код

0 S xxxxxxxx 16626     1  0  75   0 - 20145 -      Oct21 ?        00:00:00 nedit -server
В списке от who его нет




PM MAIL   Вверх
MAKCim
Дата 25.10.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(xvr @  25.10.2010,  18:50 Найти цитируемый пост)
Собственно w и who это и делают. 

заниматься парсингом вывода конкретной программы дело неблагодарное и неправильное ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.