Страница 1 из 1
скрипт на awk
Добавлено: 2008-01-27 13:40:29
Fedor
Доброе время суток!
Никогда не программировал на shell. делаю скрипт, но что-то не выходит. Подскажите в чем может быть проблема.
Есть файл со списком пользователей (user)
написал программку на awk, файл my.awk
Код: Выделить всё
FILENAME == "user" {
name == $1
}
$1 == name {print ($1":"$2":"$3":"$4":"$5":"$6":"$7)}
Запускаю
Выводит только последнего пользователя из файла user, т.е.
Re: скрипт на awk
Добавлено: 2008-01-27 19:38:56
dikens3
Есть файл со списком пользователей (user)
..
написал программку на awk
..
Запускаю
..
Выводит только последнего пользователя из файла user
А что хотел получить то?
телепатирую:
1. Есть файл со списком пользователей?
2. Нужно отобразить какие-то определённые поля для пользователей (Список в п.1) из файла /etc/passwd ?
конец телепатии.
Re: скрипт на awk
Добавлено: 2008-01-27 20:28:10
Fedor
Хотел выбрать из passwd пользователей и все его данные, а список которых надо выбрать находится в файле user.
Re: скрипт на awk
Добавлено: 2008-01-28 14:36:05
schizoid
а че не с помощью grep ?
Re: скрипт на awk
Добавлено: 2008-01-28 15:25:08
Fedor
TO schizoid: Спасибо за подсказку. Получилось.
Re: скрипт на awk
Добавлено: 2008-01-29 12:45:50
Гость
можно и через getent(1)
Код: Выделить всё
> getent passwd root daemon
root:*:0:0:Charlie &:/root:/bin/csh
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
Re: скрипт на awk
Добавлено: 2008-03-30 11:20:35
kmb
а как двойное сравнение произвести? есть файл допустим master.passwd там есть пользователи которым несколько раз меняли пароль.
Пока просто вывожу:
Код: Выделить всё
#!/bin/sh
awk ' BEGIN { FS=":" ; OFS=":" } {print $1, $2, $3} ' master.passwd
Думаю сравнивать вначале $1 с друг другом, если есть совпадение сравнить их по $3 и выводить с большим значением...

Re: скрипт на awk
Добавлено: 2008-04-03 23:23:53
Гость
kmb, может дашь примеры?
вот например, есть файл со списком пользователей:
Код: Выделить всё
root # superuser
# me
pasha
nobody
daemon
lol
Сравнить с passwd можно так:
Код: Выделить всё
$ while read line; do
pw usershow ${line%%#*} | cut -d: -f1
done <testFile
root
nobody
daemon
$ pw usershow -a или getent passwd
<и действительно не видим пользователя `pasha' и `lol'>
или если имеем два passwd:
Код: Выделить всё
$ pw -V/path/to/another/etc usershow -a \
| while read line; do
pw usershow $(echo $line | cut -d: -f1)
done
Re: скрипт на awk
Добавлено: 2008-04-04 7:25:19
kmb
Ты немножко не так понял, у меня один master.passwd, кстати я не думал, что если пароль меняешь, то записи в нём дублируется но с новым паролем, странно, почему просто не изменяли старую запись.
Ну я остановился на таком решение, вначале закинуть всё в скул, а дальше средствами пхп и скула получить нужный результат, пока не попробовал, но вроде проблем быть не должно...
Re: скрипт на awk
Добавлено: 2008-04-04 8:20:09
Гость
kmb писал(а):Ты немножко не так понял...
<snip>
Ты немножко не так понял...
кажется, у не только у тя и не только в master.passwd
что-то двоится ~_~
Re: скрипт на awk
Добавлено: 2008-04-04 10:10:04
kmb
заставил 3 раза перечитать свой пост))) явно у тебя двоится))
У меня в мастер.пассвд не что-то двоиться, а пользователи, я не знаю как они там появились по два раза, может быть при смене пароля они добавлялись, может быть при повторном добавлении) факт в том, что там может быть:
user:pass:500
user:newpass:800
user:othernewpass:900
и пароль нужно взять с высшим ид
Re: скрипт на awk
Добавлено: 2008-04-04 15:35:02
Гость
kmb писал(а):user:pass:500
user:newpass:800
user:othernewpass:900
Так по сути это *
разные* пользователи. Третье поле - это
uid согласно master.passwd(5). Т.е. в зависимости от пароля получаешь разный uid и все эти пароли рабочие или только один?
Ты надеюсь не вручную редактируешь master.passwd? Просто с этим файлом должны быть синхронизированы еще и spwd.db, pwd.db, passwd, group. Обычно такие утилиты как pw(8), vipw(8), chpass(1) за этим следят.
Опиши-ка процесс как ты меняешь пароли пользователям.
Re: скрипт на awk
Добавлено: 2008-04-05 13:19:02
kmb
По сути видимо да, я вот только не понимаю как умудрились их туда с одинаковыми именами загнать. Пароль рабочий только один с высшим уидом. Я master.passwd вообще на той машине не редактировал, мне просто дали его, чтобы оттуда загнать пользователей в мускула базу.
Re: скрипт на awk
Добавлено: 2008-04-05 20:24:11
Гость
kmb писал(а):Пароль рабочий только один с высшим уидом.
Ты бы полную строку дал. Например,
Код: Выделить всё
test:$1$MySalt$puQYjQjN3yqvbaOh9AinW0:1001:1001::0:0:User &:/home/test:/bin/sh
(пароль - openssl passwd -1 -salt MySalt MyPassWord) ,)
В частности интересны поля:
gid (и соответствие в файле group(5)),
change и
expire.
Возможно разгадка где-то там.
Иначе я тоже хз. ;\
master.passwd(5) писал(а):While it is possible to have multiple entries with identical login names and/or identical user id's, it is usually a mistake to do so. Routines that manipulate these files will often return only one of the multiple entries, and that one by random selection.
Re: скрипт на awk
Добавлено: 2008-04-05 22:34:56
kmb
вот:
Код: Выделить всё
less master.passwd | grep user
user:$1$3hQTVJN2$hp.JlCvIL6.sUFZ7aaSIx/:6494:0::0:0:Last name:/home/user:/bin/sh
user:yri9s4WBGFJCk:2581:6::::user:/home/user:/bin/sh