Вывести отсортированный в алфавитном порядке список имен пользователей в файле passwd
Оригинал: Linux Fundamentals
Автор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 16 декабря 2014 г.
Проверьте, существует ли пользователь в системе Linux
Теперь, когда мы знаем, как составить список всех пользователей, чтобы проверить, существует ли пользователь в нашем окне Linux, мы можем просто отфильтровать список пользователей, отправив список по команде grep.
Например, чтобы узнать, существует ли пользователь с именем jack в нашей системе Linux, мы можем использовать следующую команду:
Если пользователь существует, команда, приведенная выше, напечатает информацию для входа в систему. Если нет вывода, это означает, что пользователь не существует.
Мы также можем проверить, существует ли пользователь, не используя grep команду, как показано ниже:
Как и раньше, если пользователь существует, команда отобразит информацию для входа в систему.
Если вы хотите узнать, сколько учетных записей пользователей в вашей системе, перенаправьте getent passwd вывод в wc команду:
Как видно из приведенного выше вывода, моя система Linux имеет 33 учетных записи.
Системные и обычные пользователи
Нет реальной технической разницы между системой и обычными (обычными) пользователями. Обычно системные пользователи создаются при установке ОС и новых пакетов. В некоторых случаях вы можете создать системного пользователя, который будет использоваться каким-либо приложением.
Обычные пользователи - это пользователи, созданные пользователем root или другим пользователем с привилегиями sudo. Обычно у обычного пользователя есть настоящая оболочка для входа и домашний каталог.
У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если не указано при создании нового пользователя с useradd командой, то UID будет автоматически выбрано из /etc/login.defs файла в зависимости от UID_MIN и UID_MIN значений.
Для проверки UID_MIN и UID_MIN значения на вашей системе, можно использовать следующую команду:
Из приведенного выше вывода видно, что все обычные пользователи должны иметь UID от 1000 до 60000. Зная минимальное и максимальное значение, мы можем запросить список всех обычных пользователей в нашей системе.
Команда ниже перечислит всех обычных пользователей в нашей системе Linux:
Ваша система UID_MIN и UID_MIN значения могут отличаться, поэтому более общая версия команды выше:
Если вы хотите напечатать только имена пользователей, просто передайте вывод в cut команду:
Вывод
Из этого руководства вы узнали, как составлять список и фильтровать пользователей в вашей системе Linux и каковы основные различия между системными и обычными пользователями Linux.
Те же команды применяются для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian и Linux Mint.
Команда ls является одной из основных команд, которую должен знать любой пользователь Linux. Он используется для отображения информации о файлах и каталогах в файловой системе. ls Утилита является частью основных утилит пакета GNU , который установлен на все дистрибутивы Linux.
Фильтр tee
Создание сложных конвейеров при работе с интерфейсом командной строки системы Unix является занимательным процессом, но иногда вам могут потребоваться промежуточные результаты работы конвейера. Это именно тот случай, когда фильтр tee может оказаться очень полезным. Фильтр tee перемещает данные из стандартного потока ввода stdin в стандартный поток вывода stdout , а также записывает их в файл. Исходя из вышесказанного, фильтр tee функционирует аналогично фильтру cat , за исключением того, что он имеет два идентичных вывода.
Список всех пользователей Linux с помощью файла /etc/passwd
Информация о локальных пользователях хранится в файле /etc/passwd. Каждая строка в этом файле представляет информацию для входа в систему для одного пользователя. Чтобы открыть файл, вы можете использовать cat или less:
Каждая строка в файле содержит семь полей, разделённых двоеточиями, которые содержат следующую информацию:
- Имя пользователя.
- Зашифрованный пароль (x означает, что пароль хранится в файле /etc/shadow).
- Идентификационный номер пользователя (UID).
- Идентификационный номер группы пользователя (GID).
- Полное имя пользователя (GECOS).
- Домашний каталог пользователя.
- Оболочка входа (по умолчанию /bin/bash).
Если вы хотите отображать только имя пользователя, вы можете использовать команды awk или cut для печати только первого поля, содержащего имя пользователя:
Фильтр uniq
Системные и обычные пользователи
Технической разницы между системой и обычными пользователями нет. Обычно пользователи системы создаются при установке ОС и новых пакетов. В некоторых случаях вы можете создать системного пользователя, который будет использоваться некоторыми приложениями.
Обычные пользователи — это пользователи, созданные пользователем root или другим пользователем с привилегиями sudo. Обычно у обычного пользователя есть настоящая оболочка входа в систему и домашний каталог.
У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если не указан при создании нового пользователя с помощью команды useradd, UID будет автоматически выбран из файла /etc/login.defs в зависимости от значений UID_MIN и UID_MIN.
Чтобы проверить значения UID_MIN и UID_MIN в вашей системе, вы можете использовать следующую команду:
Из выходных данных выше мы видим, что все обычные пользователи должны иметь UID от 1000 до 60000. Знание минимального и максимального значения позволяет нам запрашивать список всех обычных пользователей в нашей системе.
Команда перечислит всех обычных пользователей в нашей системе Linux:
Значения UID_MIN и UID_MIN вашей системы могут отличаться, поэтому более общая версия приведённой выше команды будет:
Если вы хотите распечатать только имена пользователей, просто направьте вывод в команду cut:
Вывод
Команда ls выводит информацию о файлах и каталогах.
Для получения дополнительной информации ls посетите страницу GNU Coreutils или введите man ls свой терминал.
Вы когда-нибудь хотели перечислить всех пользователей в вашей системе Linux или подсчитать количество пользователей в системе? Есть команды для создания пользователя, удаления пользователя, вывода списка пользователей, вошедших в систему, но какова команда для вывода списка всех пользователей в Linux?
Это руководство покажет вам, как посмотреть список пользователей в системах Linux.
Как использовать ls команду
Синтаксис ls команды следующий:
При использовании без параметров и аргументов ls отображает список имен всех файлов в текущем рабочем каталоге :
Файлы перечислены в алфавитном порядке:
Чтобы вывести список файлов в определенном каталоге, передайте путь к каталогу в качестве аргумента команды ls. Например, чтобы просмотреть содержимое /etc каталога, вы должны набрать:
Вы также можете передать несколько каталогов и файлов в ls команду через пробел:
У ls команды есть несколько опций. В следующих разделах мы рассмотрим наиболее часто используемые параметры.
Подробный формат списка
Вывод команды по умолчанию ls показывает только имена файлов и каталогов, что не очень информативно.
Параметр -l (нижний регистр L) ls позволяет печатать файлы в формате длинного списка.
Если используется формат длинного списка, ls команда отобразит следующую информацию о файле:
- Тип файла
- Файл разрешений
- Количество жестких ссылок на файл
- Владелец файла
- Файловая группа
- Размер файла
- Дата и время
- Имя файла
Рассмотрим следующий пример:
Давайте объясним наиболее важные столбцы вывода.
Первый символ показывает тип файла. В нашем примере первый символ - указывает на обычный файл. Значения для других типов файлов следующие:
- - - обычный файл
- b - заблокировать специальный файл
- c - Специальный символьный файл
- d - Справочник
- l - символическая ссылка
- n - Сетевой файл
- p - FIFO
- s - Разъем
Следующие девять символов показывают права доступа к файлу. Первые три символа предназначены для пользователя, следующие три - для группы, а последние три - для других. Вы можете изменить права доступа к файлу с помощью chmod команды. Символ разрешения может принимать следующее значение:
- r - Разрешение на чтение файла
- w - разрешение на запись в файл
- x - Разрешение на выполнение файла
- s - установить бит
- t - липкий бит
В нашем примере rw-r--r-- означает, что пользователь может читать и записывать файл, а группа и другие пользователи могут только читать файл. Число 1 после символов разрешения - это количество жестких ссылок на этот файл.
Следующие два поля root root показывают владельца файла и группу, за которыми следует размер файла ( 337 ) в байтах. Используйте эту -h опцию, если вы хотите напечатать размеры в удобочитаемом формате. Вы можете изменить владельца файла с помощью chown команды.
Oct 4 11:31 - дата и время последнего изменения файла.
Последний столбец - это имя файла.
Показать скрытые файлы
По умолчанию ls команда не показывает скрытые файлы. В Linux скрытым файлом является любой файл, начинающийся с точки ( . ).
Чтобы отобразить все файлы, включая скрытые, используйте -a параметр:
Фильтр od
Несмотря на то, что жители Европы предпочитают работать с символами ascii, компьютеры используют байты для хранения данных файлов. В примере ниже создается простой файл, после чего для показа его содержимого в форме шестнадцатеричных значений байт используется фильтр od.
Примеры конвейеров
Конвейер who | wc
Конвейер who | cut | sort
Вывод отсортированного списка пользователей, осуществивших вход в систему, в котором имя каждого пользователя приводится лишь единожды.
Конвейер grep | cut
Вывод списка всех учетных записей пользователей , использующих командную оболочку bash на данном компьютере. Учетные записи пользователей будут подробно обсуждаться позднее.
Как вывести всех пользователей, имеющих домашний каталог
Если вы хотите составить список пользователей, у которых есть своя папка в директории /home, то используйте следующую команду:
Фильтр sort
Но при этом фильтр sort поддерживает большое количество параметров, позволяющих повлиять на принцип его работы. В следующем примере показана методика сортировки строк на основе значений различных столбцов (столбца 1 и столбца 2 соответственно).
В примере ниже продемонстрировано различие между сортировкой в алфавитном порядке и сортировкой по числовым значениям (обе сортировки осуществлены на основе значений из третьего столбца).
Сортировка вывода
Как уже упоминалось, по умолчанию ls команда выводит файлы в алфавитном порядке.
--sort Опция позволяет сортировать вывод по расширению, размеру, времени и версии:
- --sort=extension (или -X ) - сортировка по алфавиту по расширению.
- --sort=size (или -S ) - сортировка по размеру файла.
- --sort=time (или -t ) - сортировка по времени модификации.
- --sort=version (или -v ) - Естественный вид номеров версий.
Если вы хотите получить результаты в обратном порядке сортировки, используйте -r опцию.
Например, чтобы отсортировать файлы в /var каталоге по времени изменения в обратном порядке сортировки, вы использовали бы:
Стоит отметить, что ls команда не показывает общее пространство, занимаемое содержимым каталога. Чтобы получить размер каталога, используйте du команду.
Фильтр cut
Фильтр cut может использоваться для извлечения данных из столбцов расположенных в файлах таблиц с указанием разделителя столбцов или количества байт данных в столбцах. В примере ниже фильтр cut используется для извлечения имени пользователя и его идентификатора из файла /etc/passwd . В качестве разделителя столбцов таблицы из данного файла используется символ двоеточия, при этом производится выборка значений первого и третьего столбцов.
В случае использования фильтра cut с символом пробела в качестве разделителя вам придется экранировать этот символ пробела.
А в данном примере фильтр cut используется для вывода фрагментов строк файла /etc/passwd со второго по седьмой символ.
Фильтр comm
Сравнение потоков данных (или файлов) может быть осуществлено с помощью фильтра comm . По умолчанию фильтр comm будет выводить данные в трех столбцах. В данном примере строки Abba, Cure и Queen присутствуют в списках из обоих файлов, строки Bowie и Sweet только в списке из первого файла, а строка Turnet - только в списке из второго файла.
Вывод фильтра comm лучше читается в случае формирования одного столбца. При этом с помощью цифровых параметров должны быть указаны столбцы, содержимое которых не должно выводиться.
Заключение
В этом руководстве вы узнали, как составлять список и фильтровать пользователей в вашей системе Linux, а также каковы основные различия между системными и обычными пользователями Linux.
Те же команды применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian, Linux Mint, Arch Linux и Manjaro.
Скорее всего пакет coreutils у вас уже установлен, хотя бы потому, что удалить его нельзя, но на всякий случай проверьте:
Если в первой колонке вывода будет стоять буква "i", означающая installed, значит все в порядке.
Данная конструкция сначала вызовет команду ls, которая считает содержимое каталога, а затем передаст результат команде sort, которая отсортирует его по алфавиту (ключ -d указывает использовать алфавит в качестве шаблона).
Другой пример использования команды sort в linux - это сортировка содержимого файла. Отсортируем, например, строки, содержащиеся в файле /etc/passwd, с целью получения имен пользователей по алфавиту:
sort -d /etc/passwd
Но что делать, если вы хотите, используя тот же файл, отсортировать строки уже не по имени пользователя, а, например, по их уникальному идентификатору (UID)? Утилита sort умеет работать и с таблицами - сортировать по столбцу. Вернее изначально, sort как раз и работает с таблицами, вот только в качестве разделителя она по-умолчанию использует пробел и знак табуляции для разделения столбцов, знак переноса строки для разделения строк. Так как файл /etc/passwd использует ":" для разделения столбцов, то этот символ нужно передать sort при помощи ключа "-t" явно, а далее просто указать номер столбца с помощью ключа "-k". Но только ничего не получится, если опять же не указать шаблон. В данном случае нам понадобиться сортировать числа - поэтому вместо "-d" (по алфавиту) стаим -n (по числам). Вот, что получилось:
sort -n -t : -k 2,2 /etc/passwd
Внимательный читатель спросит: "Почему в качестве параметра ключа "-k" мы указали не просто номер столбца, а номер столбца через запятую с его же номером?". Ответ прост. Ключ "-k" очень мощный. Он позволяет гибко выбирать сортируемое поле. Используя предыдущий пример, немного изменим параметры ключа "-k":
sort -n -t : -k 2.2,2.4 /etc/passwd
Добавив точку, мы тем самым сузили диапазон для проведения сортировки. Теперь команда расшифровывается так: отсортируй содержимое файл /etc/passwd, приняв в качестве исходных данных символ со второго по четвертый во 2-ом столбце.
Приведем еще один классный пример. Представим, что у нас закончилось место в разделе /home, и мы хотим узнать 10 самых объемных каталогов и файлов внутри /home с целью понять, куда копать:
du -a /home | sort -n | tail
Сначала командой du мы проходимся по всем файлам и подкаталогам /home, затем сортируем полученные строки по возрастанию и, наконец, tail'ом отображаем последние 10
На этом возможности команды soft не исчерпываются. Полезным может оказаться ключ "-r", позволяющий сортировать строки в обратном порядке. Его не стоит путать с ключом "-R", который совершенно случайным образом сортирует содержимое файла или вывода программы. Должно быть такая функция тоже кому-то будет полезной.
Также стоит обратить ваше внимание на ключ "-u", который заставляет sort выводит только уникальные значения. Т.е., если при сортировке выяснится, что сортируемые значения одинаковы, будет выведено только то, которое первым попало в поле зрения sort. Ключ "-u" не работает для значений, например "1" и " 1" (один и пробел один), так как пробел тоже считается символом. Чтобы этого избежать применяют ключ "-b", позволяющий игнорировать пробелы перед сортируемой строкой.
Глава 17. Фильтры
Команды, которые были реализованы для использования совместно с программными каналами , называются фильтрами . Эти фильтры реализуются в виде простейших программ, которые крайне эффективно выполняют одну определенную задачу. Исходя из всего вышесказанного, они могут использоваться в качестве строительных блоков при создании сложных конструкций.
В данной главе представлена информация о наиболее часто используемых фильтрах . В результате комбинирования простых команд и фильтров с использованием программных каналов могут быть созданы элегантные решения.
Как показать пользователей, имеющих оболочки входа
Чтобы вывести список только пользователей с оболочками входа, используйте одну из следующих команд:
Обратите внимание, что эти команды не равнозначны.
Фильтр cat
При размещении фильтра cat между двумя программными каналами не будет осуществляться какой-либо обработки передающихся через них данных (за исключением передачи этих данных из стандартного потока ввода stdin в стандартный поток вывода stdout фильтра).
Корректная процедура выполнения практического задания: фильтры
1. Сохраните отсортированный список пользователей командной оболочки bash в файле bashusers.txt.
2. Сохраните отсортированный список пользователей, осуществивших вход в систему, в файле onlineusers.txt.
3. Создайте список всех имен файлов из директории /etc , в которых содержится строка conf .
4. Создайте список всех имен файлов из директории /etc , в которых содержится строка conf вне зависимости от регистра символов.
5. Рассмотрите вывод утилиты /sbin/ifconfg . Создайте команду, с помощью которой будут выводиться исключительно IP-адреса и маски подсетей.
6. Создайте команду, которая позволит удалить все не относящиеся к буквенным символы из потока данных.
7. Создайте команду, которая будет принимать файл и выводить каждое слово из него в отдельной строке.
8. Разработайте систему проверки орфографии с интерфейсом командной строки. (Словарь должен находиться в директории /usr/share/dict/ .)
Также вы можете добавить решение из вопроса номер 6 для удаления не относящихся к буквенным символов и фильтр tr -s ' ' для удаления лишних символов пробелов.
Фильтр sed
Фильтр sed (расшифровывается как s tream ed itor - редактор потока данных) позволяет выполнять различные операции редактирования при обработке потока данных с задействованием регулярных выражений .
Следует добавить флаг регулярного выражения g для осуществления глобальной замены (замены всех вхождений заданной строки в строку из потока данных).
С помощью флага регулярного выражения d вы можете осуществить удаление строк, содержащих заданную последовательность символов, из потока данных.
Фильтр wc
Подсчет слов, строк и символов в файле осуществляется достаточно просто в случае использования фильтра wc .
Получить список всех пользователей, использующих /etc/passwd файл
Информация о локальном пользователе хранится в /etc/passwd файле. Каждая строка в этом файле представляет регистрационную информацию для одного пользователя. Чтобы открыть файл, вы можете использовать cat или less :
Как видно из приведенного выше вывода, каждая строка имеет семь полей, разделенных двоеточиями, которые содержат следующую информацию:
- Имя пользователя
- Зашифрованный пароль ( x означает, что пароль хранится в /etc/shadow файле)
- Идентификационный номер пользователя (UID)
- Идентификационный номер группы пользователя (GID)
- Полное имя пользователя (GECOS)
- Домашний каталог пользователя
- Оболочка входа (по умолчанию /bin/bash )
Если вы хотите, чтобы отобразить только имя пользователя вы можете использовать либо awk или cut команды для печати только первое поле, содержащее имя пользователя:
Практическое задание: фильтры
1. Сохраните отсортированный список пользователей командной оболочки bash в файле bashusers.txt.
2. Сохраните отсортированный список пользователей, осуществивших вход в систему, в файле onlineusers.txt.
3. Создайте список всех имен файлов из директории /etc , в которых содержится строка conf .
4. Создайте список всех имен файлов из директории /etc , в которых содержится строка conf вне зависимости от регистра символов.
5. Рассмотрите вывод утилиты /sbin/ifconfg . Создайте команду, с помощью которой будут выводиться исключительно IP-адреса и маски подсетей.
6. Создайте команду, которая позволит удалить все не относящиеся к буквенным символы из потока данных.
7. Создайте команду, которая будет принимать файл и выводить каждое слово из него в отдельной строке.
8. Разработайте систему проверки орфографии с интерфейсом командной строки. (Словарь должен находиться в директории /usr/share/dict/ .)
Фильтр tr
Вы можете преобразовывать символы с помощью фильтра tr . В примере ниже показана процедура преобразования всех обнаруженных в потоке данных символов e в символы E.
В данном случае мы переводим все буквенные символы в верхний регистр, указывая два диапазона значений.
Параметр tr -s также может использоваться для преобразования последовательностей из множества заданных символов в один символ.
Получить список всех пользователей с помощью команды getent
Команда getent отображает записи из баз данных, настроенных в /etc/nsswitch.conf файле, включая passwd базу данных, которую мы можем использовать для запроса списка всех пользователей.
Чтобы получить список всех пользователей Linux, введите следующую команду:
Как видите, вывод такой же, как и при отображении содержимого /etc/passwd файла. Если вы используете LDAP для аутентификации пользователей, то getent все пользователи Linux будут отображаться как из /etc/passwd файлов, так и из базы данных LDAP.
Вы также можете использовать awk или cut для печати только первое поле, содержащее имя пользователя:
Получение списка всех пользователей с помощью команды getent
Команда getent отображает записи из баз данных, настроенных в файле /etc/nsswitch.conf, включая базу данных passwd, которую можно использовать для запроса списка всех пользователей.
Чтобы получить список всех пользователей Linux, введите следующую команду:
Как видите, вывод такой же, как и при отображении содержимого файла /etc/passwd. Если вы используете LDAP для аутентификации пользователей, getent будет отображать всех пользователей Linux как из файла /etc/passwd, так и из базы данных LDAP.
Вы также можете использовать awk или cut для печати только первого поля, содержащего имя пользователя:
Аналогичный результат можно получить с помощью команды compgen:
Рекурсивный список каталогов
-R Опция указывает ls команду , чтобы отобразить содержимое подкаталогов рекурсивно:
Как проверить, существует ли пользователь в системе Linux
Теперь, когда мы знаем, как составить список всех пользователей, чтобы проверить, существует ли пользователь в нашем Linux-сервере, мы можем просто отфильтровать список пользователей, передав его по конвейеру команде grep.
Например, чтобы узнать, существует ли в нашей системе Linux пользователь с именем mial, мы можем использовать следующую команду:
Если пользователь существует, приведённая выше команда распечатает краткую информацию о нём. Если нет вывода, что означает, что пользователя не существует.
Мы также можем проверить, существует ли пользователь, не используя команду grep, как показано ниже:
Как и раньше, если пользователь существует, команда отобразит информацию для входа в систему.
Если вы хотите узнать, сколько учётных записей пользователей у вас в системе, передайте вывод getent passwd команде wc:
Как видно из вывода выше, на удалённом сервере Linux 510 учётных записи пользователей.
Фильтр grep
Фильтр grep снискал известность среди пользователей систем Unix. Наиболее простым сценарием использования фильтра grep является фильтрация строк текста, содержащих (или не содержащих) определенную подстроку.
Одним из наиболее полезных параметров фильтра grep является параметр grep -i , который позволяет производить фильтрацию строк без учета регистра.
Другим полезным параметром является параметр grep -v , который позволяет осуществлять вывод строк, не содержащих заданную строку.
И, конечно же, оба описанных выше параметра могут комбинироваться для фильтрации всех строк без учета регистра и вывода тех из них, которые не содержат заданной строки.
При использовании параметра grep -A1 в вывод также будет добавлена одна строка, располагающаяся после обнаруженной строки.
В случае использования параметра grep -B1 в вывод будет добавлена одна строка, располагающаяся до обнаруженной строки.
С помощью параметра grep -C1 (контекст) в вывод может быть добавлена одна строка, находящейся до обнаруженной строки, и одна строка, находящаяся после нее. Все три параметра (A, B и C) могут быть использованы для вывода произвольного количества дополнительных строк (например, могут быть использованы параметры A2, B4 или C20).
Читайте также: