AWK - как вывести список пользователей в Linux
Разбираясь с темой создания пользователей в Linux, и практикуясь на разных придуманных мною примерах, наткнулся сегодня на такую штуку как AWK. Все началось с того, что решил я вывести всех обычных пользователей в системе. Зная, что UID обычных пользователей как правило начинается с 1000 (по крайней мере у меня в Ubuntu так) решил сделать так:
1 2 3 4 5 6 | $ cat /etc/passwd | grep :10[0-9][0-9]: igor:x:1000:1000:igor,,,:/home/igor:/bin/bash test:x:1001:1001:testuser,1,,:/home/test:/bin/bash test1:x:1002:1003:,,,:/home/test1:/bin/bash user1:x:1003:1004:,,,:/home/user1:/bin/bash user:x:1004:1005:,,,:/home/user:/bin/bash |
Вроде как получил то, что требовалось, но захотелось чего-то большего и решил посмотреть как можно вытащить только имена пользователей. Когда-то наталкивался на такую команду как cut, почитал в справке о ней пару пробных примеров и получилось следующее:
1 2 3 4 5 6 | $ cat /etc/passwd | grep :10[0-9][0-9]: | cut -d: -f1 igor test test1 user1 user |
“Как-то громоздко” - подумал я :) Решил посмотреть как люди делают и наткнулся на вот такой пример:
1 2 3 4 5 6 7 | $ awk -F: '{if ($3>=1000) print $1}' /etc/passwd nobody igor test test1 user1 user |
Пример был без пояснений, но как-то без особого труда догадался, что эта штука (awk) умеет работать со строками с разделителями. -F: - скорее всего задает этот разделитель, $1 - это номер первого поля, а $3 - третьего. Изменил строку на такую:
1 2 3 4 5 6 7 | $ awk -F: '{if ($3>=1000) print $1,"Домашняя папка:",$6}' /etc/passwd nobody Домашняя папка: /nonexistent igor Домашняя папка: /home/igor test Домашняя папка: /home/test test1 Домашняя папка: /home/test1 user1 Домашняя папка: /home/user1 user Домашняя папка: /home/user |
и убедился в правильности своих догадок.
Затем немного почитав, узнал, что awk - это средство предназначенное для обработки текста, но с большим количеством хорошо проработанных функций, которые позволяют писать о нем как о языке программирования. В общем нужно будет подробнее почитать о нем, так как он идет по умолчанию с дистрибутивами Linux. По man awk выдает неплохую справку. Почитав справку, добавил в условие еще параметр, чтобы избавится от пользователя nobody у которого номер 65534:
1 2 3 4 5 6 | $ awk -F: '{if ($3>=1000 && $3<20000) print $1,"Домашняя папка:",$6}' /etc/passwd igor Домашняя папка: /home/igor test Домашняя папка: /home/test test1 Домашняя папка: /home/test1 user1 Домашняя папка: /home/user1 user Домашняя папка: /home/user |
Буду стараться еще читать. В Linux много файлов подобных passwd. Так, что думаю будет полезно расширить свои знания по awk.
IgorKa - Информационный ресурс » Пример скрипта bash:
[...] Строка 26 - PID=”$(ps ax | grep “/usr/sbin/[s]howtime” | awk ‘{ print $1 }’)” - команда получает PID запущенного процесса /usr/sbin/showtime, который затем будет использован для команды kill (строка 30). О команде awk я упоминал здесь. [...]
25 декабря 2009, 13:37