Страница 1 из 1

скрипт на awk

Добавлено: 2008-01-27 13:40:29
Fedor
Доброе время суток!
Никогда не программировал на shell. делаю скрипт, но что-то не выходит. Подскажите в чем может быть проблема.
Есть файл со списком пользователей (user)

Код: Выделить всё

admin
exim
root
написал программку на awk, файл my.awk

Код: Выделить всё

FILENAME == "user" {
name == $1
}
$1 == name {print ($1":"$2":"$3":"$4":"$5":"$6":"$7)}
Запускаю

Код: Выделить всё

awk -F: -f my.awk user /etc/passwd
Выводит только последнего пользователя из файла user, т.е.

Код: Выделить всё

root:x:0:0:root:/root:/bin/bash

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 и выводить с большим значением... :twisted:

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