Команда compgen в linux

Обновлено: 05.07.2024

используя /etc/passwd файл, getent команда compgen Используйте эти три метода для просмотра информации о пользователе в системе.

каждый знает,Linux Информация о пользователе в системе хранится в /etc/passwd Файл.

Это текстовый файл, содержащий основную информацию о каждом пользователе. Когда мы создаем пользователя в системе, сведения о новом пользователе будут добавлены в этот файл.

/etc/passwd Файл записывает основную информацию о каждом пользователе в виде строки файла, который содержит 7 полей.

/etc/passwd Одна строка файла представляет одного пользователя. Этот файл делит информацию о пользователе на 3 части.

Первая часть - это учетная запись root, которая представляет учетную запись администратора, которая имеет полную власть над всеми аспектами системы.

Вторая часть - это группы и учетные записи, определенные системой, которые необходимы для правильной установки и обновления программного обеспечения системы.

Третья часть в конце представляет реального пользователя, который использует систему.

При создании нового пользователя следующие 4 файла будут изменены.

Способ 1. Используйте файл / etc / passwd

Используйте любой понравившийся cat 、 more 、 less Подождите, пока команды операции с файлом распечатают список пользователей, созданный в системе Linux.

/etc/passwd Это текстовый файл, содержащий информацию о каждом пользователе, необходимую для входа в систему Linux. Он сохраняет полезную информацию о пользователе, такую ​​как имя пользователя, пароль, идентификатор пользователя, идентификатор группы, информацию об идентификаторе пользователя, домашний каталог пользователя и оболочку.

/etc/passwd Файл записывает подробную информацию о каждом пользователе в виде одной строки, содержащей семь полей, каждое из которых разделяется двоеточием:

Подробности 7 полей следующие.

  • имя пользователя (Magesh): имя созданного пользователя длиной от 1 до 12 символов.
  • пароль(X): зашифрованный пароль хранится в файле `/ etc / shadow.
  • ** Идентификатор пользователя (506): представляет собой номер идентификатора пользователя, каждый пользователь должен иметь уникальный идентификатор. UID номер 0 зарезервирован для пользователя root, номера UID от 1 до 99 зарезервированы для системных пользователей, а номера UID 100-999 зарезервированы для системных учетных записей и групп.
  • ** ID группы (507): представляет собой идентификационный номер группы. Каждая группа должна иметь уникальный GID, который хранится в файле / etc / group.
  • ** Информация о пользователе (2g Admin-Magesh M): представляет поле описания, которое может использоваться для описания информации о пользователе (аннотация LCTT: предполагается, что исходный текст здесь неверен).
  • ** Домашний каталог (/ home / mageshm): представляет домашний каталог пользователя.
  • ** Оболочка (/ bin / bash): представляет тип оболочки, используемой пользователем.

Вы можете использовать команду awk или cut, чтобы распечатать только список имен всех пользователей в системе Linux. Отображаемые результаты такие же.

Метод 2: используйте команду getent

getent Командный дисплей Name Service Switch Записи в базе данных поддерживаются библиотекой. Файлы конфигурации для этих библиотек: /etc/nsswitch.conf 。

getent Командный дисплей похож на /etc/passwd Сведения о пользователе в файле, в котором сведения о каждом пользователе отображаются в виде одной строки с семью полями.

Детали 7 полей описаны выше. (Аннотация LCTT: содержание здесь повторяется, сокращается)

Вы также можете использовать awk Или же cut Команда только распечатывает список имен всех пользователей в системе Linux. Отображаемые результаты такие же.

Метод 3: используйте команду compgen

compgen - это встроенная команда bash, она отображает все доступные команды, псевдонимы и функции.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » 3 способа составить список пользователей в Linux

3 способа составить список пользователей в Linux

Сегодня в разных операционных системах есть возможность использовать нескольких пользователей, каждая со своими настройками и пользовательскими настройками, чтобы облегчить совместную работу администраторов и операторов в одной системе.

Linux, с другой стороны, очень силен в этом вопросе, поскольку позволяет нескольким пользователям одновременно работать в системе независимо. Это может даже позволить одному пользователю открыть несколько сеансов даже из разных мест для работы в системе.

Вот некоторые советы и рекомендации для пользователей Linux.

Список всех пользователей в Linux

Наверное, самое первое, что нужно знать, это как узнать, какие пользователи в моей системе. Есть несколько способов получить список пользователей в Linux.

1. Показать пользователей в Linux, используя less /etc/passwd

Эта команда позволяет сисопам перечислять пользователей, которые локально хранятся в системе. Это даст список в структурированном виде, как:

Структура в приведенном выше выводе выглядит так:

Почему так много пользователей? Какие являются «Реальными»?

Список показывает намного больше пользователей, чем вы ожидали, потому что в нем также перечислены все пользователи системы.

Теперь, если вы хотите отличить обычных пользователей от системных пользователей, вы можете обратиться к номеру идентификатора пользователя (UID).

В общем-то обычный пользователь имеет UID, больший или равный 1000. Это дает вам подсказку, что пользователь с UID> = 1000 является обычным пользователем, а пользователи с UID <1000 являются системными пользователями.

2. Просмотр пользователей с помощью getent passwd

Эта команда выдаст вам вывод, похожий на пароль less /etc/ . Однако этот запрос фактически запрашивает файл конфигурации функциональности коммутатора службы имен GNU (находится в /etc/nsswitch.conf ).

Эта конфигуряция включает сложный пароль, поэтому он будет отображаться очень похоже, но если вы используете LDAP для аутентификации, он также будет включать его.

Читать Как просмотреть журналы доступа Apache Tomcat

3. Список пользователей Linux с compgen

Если вы просто хотите перечислить все имена пользователей без какой-либо дополнительной информации, вы можете использовать команду compgen с опцией -u.

Вывод будет выглядеть так:

Вы можете использовать командe сompgen с параметром -c, чтобы вывести список всех доступных вам команд. Это полезно, когда вы не являетесь администратором системы Linux и не имеете доступа sudo.

Несколько советов о перечислении пользователей в Linux

Вы только что увидели три способа просмотра пользователей в Linux. Вот несколько советов, которые помогут вам при работе с списком пользователей.

Список только имен пользователей

У вас уже есть команда compgen для этого, но вы не должны помнить это все время.

Если мы хотим получить только список имен пользователей в системе, вы можете использовать команду awk или команду cut для фильтрации вывода двух других команд, которые мы видели ранее.

Любой из них даст нам отфильтрованный список пользователей, показывая только самый первый столбец с именем пользователя:

Проверьте, существует ли имя пользователя в системе

Это может быть полезно, если вы хотите знать, существует ли конкретное имя пользователя в системе:

getent passwd | grep maxdie

Список всех подключенных пользователей

Если вы хотите знать, какие пользователи в настоящее время вошли в вашу систему, вам нужно выполнить простое «who» в командной строке, и это сразу выведет список текущих имен пользователей с активным сеансом в вашей системе.

В этом случае в списке будет указан не только список подключенных имен пользователей, но и то, как они связаны, с момента, когда они подключены и откуда они подключены.

В самом первом столбце будет указано, какое это имя пользователя.

Завершение

Как видите, перечисление пользователей в Linux совсем не сложно. Он состоит из простых команд, которые выводят всю информацию для вас, что бы вы ни хотели сделать или получить эту информацию, это то, что вам нужно отфильтровать в зависимости от того, что вы хотите проверить в системе.

Надеюсь, вам понравилась эта статья. Если у вас есть какие-либо вопросы или предложения, пожалуйста, сообщите нам об этом в комментариях

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Вы когда-нибудь хотели перечислить всех пользователей в вашей системе Linux или подсчитать количество пользователей в системе? Есть команды для создания пользователя, удаления пользователя, вывода списка пользователей, вошедших в систему, но какова команда для вывода списка всех пользователей в Linux?

Это руководство покажет вам, как посмотреть список пользователей в системах Linux.

Список всех пользователей Linux с помощью файла /etc/passwd

Информация о локальных пользователях хранится в файле /etc/passwd. Каждая строка в этом файле представляет информацию для входа в систему для одного пользователя. Чтобы открыть файл, вы можете использовать cat или less:


Каждая строка в файле содержит семь полей, разделённых двоеточиями, которые содержат следующую информацию:

  • Имя пользователя.
  • Зашифрованный пароль (x означает, что пароль хранится в файле /etc/shadow).
  • Идентификационный номер пользователя (UID).
  • Идентификационный номер группы пользователя (GID).
  • Полное имя пользователя (GECOS).
  • Домашний каталог пользователя.
  • Оболочка входа (по умолчанию /bin/bash).

Если вы хотите отображать только имя пользователя, вы можете использовать команды awk или cut для печати только первого поля, содержащего имя пользователя:


Получение списка всех пользователей с помощью команды getent

Команда getent отображает записи из баз данных, настроенных в файле /etc/nsswitch.conf, включая базу данных passwd, которую можно использовать для запроса списка всех пользователей.

Чтобы получить список всех пользователей Linux, введите следующую команду:


Как видите, вывод такой же, как и при отображении содержимого файла /etc/passwd. Если вы используете LDAP для аутентификации пользователей, getent будет отображать всех пользователей Linux как из файла /etc/passwd, так и из базы данных LDAP.

Вы также можете использовать awk или cut для печати только первого поля, содержащего имя пользователя:


Аналогичный результат можно получить с помощью команды compgen:

Как проверить, существует ли пользователь в системе Linux

Теперь, когда мы знаем, как составить список всех пользователей, чтобы проверить, существует ли пользователь в нашем Linux-сервере, мы можем просто отфильтровать список пользователей, передав его по конвейеру команде grep.

Например, чтобы узнать, существует ли в нашей системе Linux пользователь с именем mial, мы можем использовать следующую команду:

Если пользователь существует, приведённая выше команда распечатает краткую информацию о нём. Если нет вывода, что означает, что пользователя не существует.


Мы также можем проверить, существует ли пользователь, не используя команду grep, как показано ниже:


Как и раньше, если пользователь существует, команда отобразит информацию для входа в систему.

Если вы хотите узнать, сколько учётных записей пользователей у вас в системе, передайте вывод getent passwd команде wc:


Как видно из вывода выше, на удалённом сервере Linux 510 учётных записи пользователей.

Системные и обычные пользователи

Технической разницы между системой и обычными пользователями нет. Обычно пользователи системы создаются при установке ОС и новых пакетов. В некоторых случаях вы можете создать системного пользователя, который будет использоваться некоторыми приложениями.

Обычные пользователи — это пользователи, созданные пользователем 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:

Как показать пользователей, имеющих оболочки входа

Чтобы вывести список только пользователей с оболочками входа, используйте одну из следующих команд:

Обратите внимание, что эти команды не равнозначны.

Как вывести всех пользователей, имеющих домашний каталог

Если вы хотите составить список пользователей, у которых есть своя папка в директории /home, то используйте следующую команду:

Заключение

В этом руководстве вы узнали, как составлять список и фильтровать пользователей в вашей системе Linux, а также каковы основные различия между системными и обычными пользователями Linux.

Те же команды применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian, Linux Mint, Arch Linux и Manjaro.

A built-in command for auto-completion in bash, which is called on pressing TAB key twice.

compgen -A function

  • See all available commands/aliases starting with 'ls':

colrm

Remove columns from stdin. Remove first column of stdin: colrm…

compose

Как получить дерево директорий на Bash одним однострочником

Фото Как установить PostgreSQL на Linux и создать базу и пользователя

Как установить PostgreSQL на Linux и создать базу и пользователя

PostgreSQL - система управления базой данных общего назначения. Одна из самых распространённых баз данных, используемая на многих коммерческих и некоммерческих проектах.

Фото Как скопировать вывод команды из терминала в буфер обмена Linux и MacOS

Как скопировать вывод команды из терминала в буфер обмена Linux и MacOS

Скорее приятный, чем необходимы "трюк", но возможность использовать возможность скопировать вывод в буфер обмена – действительно круто иной раз выручает.

Фото Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Как создать неизменяемый файл в Linux / MacOS / FreeBSD

Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.

Фото Как удалить все Docker образы и контейнеры

Как удалить все Docker образы и контейнеры

Не всегда нужно удалять всё, но объяснение данного "рецепта" объяснит как в целом удалять образы и контейнеры.

Фото Bash < потоки ввода > вывода && управляющие конструкции || коротко о главном

Bash < потоки ввода > вывода && управляющие конструкции || коротко о главном

Небольшая заметка о конструкциях Bash, в которых путается большинство новичков. А именно: >, <, &, &&, |, ||

Фото Лучше плохо, но сейчас. Взгляд на пути развития ПО

Лучше плохо, но сейчас. Взгляд на пути развития ПО

Сейчас такие языки как Perl и Ruby чувствуют себя не лучшим образом. Но ещё 10 – 15 лет назад они были на "гребне волны".

Фото Как запустить программу в терминале в фоне, без вывода какого либо текста

Как запустить программу в терминале в фоне, без вывода какого либо текста

Запускаем программу в терминале в фоновом режиме и разбираемся, как и почему это работает в Linux / Unix терминале.

Фото Малоизвестные, но полезные возможности утилиты less

Малоизвестные, но полезные возможности утилиты less

Команда less является одной из самых известных на ряду с cd, cp, mv и т.д. Но используется less зачастую далеко не на всю мощь.

Фото Как синхронизировать локальную Git версию репозитория с серверной

Как синхронизировать локальную Git версию репозитория с серверной

Прибираемся в локальной версии Git – чтобы локальная версия соответствовала удалённой (серверной) версии Git проекта.

Фото Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable

Исследователи сумели пройти code-review с реквестами в ядро Linux, заведомо содержащими добавление уязвимостей.

Фото Microsoft открывает исходники, а её IDE супер-популярна

Microsoft открывает исходники, а её IDE супер-популярна

Решил сложить пару фактов и немного над этим поразмыслить. Реально ли Microsoft "переобулись"?

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Как на Bash посчитать число строк в проекте (директории)

Как на Bash посчитать число строк в проекте (директории)

Ниже будет представлен однострочник, решающий данную задачу на Bash + пошаговое описание его работы.

Фото Как на Bash получить файлы, изменённые за сегодняшний день

Как на Bash получить файлы, изменённые за сегодняшний день

Bash имеет огромные возможности по программированию/скриптованию и администрированию операционной системы. Не важно: Linux это, FreeBSD, или MacOS – на Bash можно сделать многое.

Фото Как установить часовой пояс в Linux

Как установить часовой пояс в Linux

В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через Интернет ваше время слетит.

Фото Как найти самые большие папки и файлы в Linux

Как найти самые большие папки и файлы в Linux

Когда кончается место на жестком диске, возникает закономерный вопрос: на что же оно было потрачено, какие файлы разрослись больше положенного?

Фото Команда grep – полезные ключи и примеры использования

Команда grep – полезные ключи и примеры использования

У команды "grep" довольно много различных особенностей. особенно, если учесть, что с английского это "решето" – а что может войти в решето , не факт что выйдет!

Настроенный по дефолту терминал — унылое зрелище, отпугивающее новичков и наводящее тоску на гуру. Многое из того, что способен дать командный интерпретатор пользователю, оказывается скрыто за семью замками, а то, что остается доступным — просто неудобно. Перед тем, как консоль станет действительно сподручным инструментом, придется изрядно попотеть.

Полезная инфа в приглашении

Приглашение командного интерпретатора bash формируется на основе содержимого переменной окружения PS1. Если верить man-страницам, эта переменная может содержать любые строки, а также довольно большой набор специальных управляющих символов, которые при выводе приглашения будут превращены в актуальные данные. Так, например, в дистрибутиве Ubuntu содержимое переменной PS1 выглядит так:

А при выводе на экран превращается во всем знакомую строку вида:

Нетрудно догадаться, что юзер здесь появляется за счет управляющего символа 'u', имя хоста — за счет 'h', а текущий каталог — это 'w'. Неуклюжая запись, содержащая в себе слова debian_chroot, это всего лишь индикатор того, находится ли пользователь в chroot-окружении. Такое лаконичное приглашение, конечно, удобно, но содержит далеко не всю информацию, которую bash способен отобразить. В его арсенале есть как минимум два десятка различных управляющих последовательностей, о которых многие пользователи даже не подозревают. Вот список наиболее интересных из них:

  • d — текущая дата
  • j — количество фоновых заданий
  • A — текущее время
  • ! — номер команды в истории

Кроме того, в PS1 вполне можно использовать текущие переменные окружения, а если учитывать, что перед каждым выводом на экран PS1 перечитывается, то туда можно засунуть такие вкусности, как, например, статус последней выполненной команды (переменная $?), чтобы знать, было ли ее исполнение успешным.

Управляющий символ 'n' также допустим в PS1, поэтому приглашение к вводу можно сделать многострочным, а заодно визуально отделить его от остального текста (с помощью начальной пустой строки):

Но и это еще не все. Пример с индикатором chrootокружения показывает, что в приглашении можно использовать вывод любых сторонних приложений, а это открывает просто безграничные возможности по его кастомизации. Например, следующим образом в приглашение можно добавить данные о текущей погоде, количестве непрочитанных писем в gmail и уровне сигнала Wi-Fi:

local city="Moscow"
curl -s "http://www.google.com/ig/
api?weather=$city" | sed 's|.<temp_c data ])"/>.*|1|'
>

local login="логин"
local password="пароль"
wget --secure-protocol=TLSv1 --timeout=3 -t 1 -q -O — https://$:$@
mail.google.com/mail/feed/atom --nocheckcertificate | grep fullcount | sed
"s/<fullcount>(.*)</fullcount>/1/"
>

wifi() /sbin/iwconfig wlan0 | grep Quality | cut -d = -f2 | awk ''
>
PS1='n weather : unread_mail : wifi :wn
u@h:$?$ '

Все это нужно поместить в конец

/.bashrc и выставить на файл права 600, чтобы никто не смог подсмотреть пароли. Результат будет примерно таким:

Раскрашиваем консоль

При работе в консоли пользователь часто получает большое количество никак не отформатированной информации. Порой выбрать в потоке данных действительно необходимое довольно сложно. Благодаря специальным непечатаемым escape-последовательностям мы можем изменить цвет и фон выводимых символов, чтобы облегчить восприятие данных.

Все escape-последовательности заключаются в [�33[ и ], а после кода цвета должна еще стоять буква m. Все цвета расписаны в справочной странице. Например, черному соответствует 0;30, зеленому — 0;32, красному — 0;31, желтому — 1;33, белому — 1;37 и так далее. Чтобы в строке приглашения выводились имя системы (символ h) и логин пользователя (u), подсвеченные красным цветом, а текущий каталог — желтым (w), в конфиге

/.bashrc заменяем значение переменной PS1 на следующее:

При необходимости через точку с запятой можно указать цвет фона. Для этой цели используются числа от 40 (черный) до 47 (белый).

Все это также можно использовать в скриптах, хотя, чтобы не путаться, в этом случае лучше задействовать переменные, которые потом и вызывать в нужном месте. Например:

local GRAY="[�33[1;30m]"
local NO_COLOUR="[�33[0m]"

Не забываем о том, что некоторые команды поддерживают цветной вывод. Проще это решить при помощи алиасов:

alias ls='ls --color=auto'
alias grep='grep --color=auto'

И так далее. За настройки цветов каталогов и файлов с разным расширением отвечает утилита dircolors, устанавливающая переменную LC_COLORS. Чтобы получить все значения, просто вводим:

Использовав полученный результат как шаблон и сохранив его в / etc/DIR_COLORS (либо в персональном конфиге

/.dir_colors), можно создать свою раскраску.

$ alias makec='cout data/make-gcc.cfg'

Теперь проверяем работоспособность, используя заранее подготовленный Makefile:

$ makec -f Makefile

Автодополнение bash

Одна из самых удобных функций, имеющихся в bash — автодополнение команд по клавише <Tab>. К этому быстро привыкаешь, и кажется, что улучшить уже ничего нельзя. Однако в разных дистрибутивах автодополнение работает по-разному.

Например, в современных Linux-дистрибутивах, ориентированных на обычного пользователя, bash не только дополняет саму команду, но и предлагает дополнительные параметры. Однако в Gentoo и производных (вроде Calculate Linux) такого нет. Здесь приходится помнить все параметры назубок. Как такое может быть? Некоторые разработчики дистрибутивов используют патченые версии bash?
На самом деле, возможность автодополнения в bash — расширяемая функция. За необходимую функциональность отвечает встроенная команда compgen, генерирующая соответствующие списки. Все настройки производятся в файле /etc/bash_completion (или пользовательском

/.bash_completion), хотя в некоторых дистрибутивах можно найти целый каталог /etc/bash_completion.d, в котором обычно собраны настройки, специфичные для отдельных программ.

В самом простом случае файл содержит программу и указания для bash по дополнению имен файлов.

Например, чтобы MPlayer предлагал пользователю в качестве автодополнения только файлы с расширением avi и mpg, пишем такое правило: complete -f -X ‘!*.@(avi|mpg|AVI|MPG/so)’ mplayer Но это самый простой вариант, ведь MPlayer имеет большое количество дополнительных параметров, а значит, ему потребуется описать шрифты, звуковые файлы, субтитры и так далее. Все это легко решается при помощи оператора case. Поддерживаются регулярные выражения, что немного упрощает создание правил.

Обычно майнтейнеры конкретного пакета сами составляют списки параметров программы для bash_completion. Никаких чудес здесь нет.

Например, для tar создаем такое правило:

COMPREPLY=( $( compgen -W 'c t x u r d A' -- "$cur" ) )

Как видишь, мы просто перечислили все параметры, и теперь в процессе ввода bash сам выдаст этот список. Команда compgen имеет ряд параметров. Так '-b' позволяет получить список встроенных команд оболочки, '-c' — имена команд, '-v' — имена переменных и так далее. Все подробности можно найти в man-странице bash, в секциях complete и compgen.

Продвинутые настройки

Bash — довольно развитый командный интерпретатор, поддерживающий кучу разных настроек. Причем из этих настроек можно получить гораздо больше профита, чем из настроек поведения терминала, выполненных с помощью утилит setterm и stty. Список всех возможных опций можно посмотреть командой «shopt -p» (shopt — сокращение от Shell Options). Приведем самые интересные из них:

  • autocd — если эта опция включена, то можно просто написать путь к каталогу (опустив команду cd), чтобы в него переместиться;
  • cdspell — bash будет пытаться исправлять простые опечатки (например, /ect/init.d вместо /etc/init.d) в аргументах команды cd;;
  • checkjobs — не дает выйти из консоли, пока в ней есть выполняющиеся задания;
  • cmdhist — объединение многострочных команд в одну строку так, чтобы тебе было проще искать их в истории;
  • dirspell — исправление небольших ошибок в написании имени директории при автодополнении;
  • globstar — позволит использовать конструкцию вида **, обозначающую «все файлы, начиная с текущего каталога, рекурсивно»;
  • Очень удобный новый wildchar — например, данная конструкция отобразит все mp3 в текущем и вложенных каталогах:

Согласись, это гораздо короче и удобнее, чем:

$ find ./ -name "*.mp3" -type f -print

Устанавливаются опции следующим образом:

$ shopt -s autocd cdspell checkjobs cmdhist dirspell globstar

1.Bash умеет сокращать путь к текущему каталогу в приглашении, если он становится слишком длинным. Для управления этой функцией предусмотрена переменная окружения PROMPT_DIRTRIM. При превышении уровня вложенности каталогов, указанного в этой переменной, путь будет сокращен. Пример использования:

2.Bash поддерживает «умный» метод помещения команд в историю, позволяя освободить ее от банальностей вроде ls. В историю не будут попадать дубликаты и команды ls, bg, fg, exit после выполнения следующей команды:

3. Bash умеет делать так, чтобы команды, выполненные с использованием sudo, автоматически попадали в файл истории root'а и не засоряли историю пользователя. Просто добавь следующую строку в файл /etc/bash.bashrc:

Индикатор прогресса

Отсутствие индикатора прогресса у большинства консольных утилит — одна из главных проблем для тех, кто часто работает в консоли. И хорошо, если под рукой есть mc, который многие так и используют, чтобы получить окошко с прогрессом. А что если это голая консоль, а тебе требуется сохранить бэкап на флешку, смонтированную в режиме sync? В этом случае тебе поможет rsync, который хоть и несколько замедляет процесс копирования, но зато обеспечивает вывод на экран шкалы прогресса. Помещаем в

/.bashrc следующую строку:

alias cpr='rsync --progress'

И используем команду cpr вместо cp:

$ cpr file1 file2

Если добавить опцию '--remove-source-files', то исходные файлы будут удалены (правда, следует помнить, что в пределах одной файловой системы mv гораздо быстрее rsync). Единственный минус — прогресс отображается для каждого файла в отдельности, общий прогресс увидеть нельзя.

Чтобы увидеть ход выполнения, например, при создании архива, можно использовать утилиту pv (Pipe Viewer). Технически она представляет собой замену стандартного cat, способную не только тупо копировать байты на выход, но и показывать прогресс этой операции. Например:

$ tar -czf — /path/to/dir | pv > /path/to/archive.tgz
758MB 0:01:29 [8,48MB/s] [ <=>

Уже хорошо. Но не хватает времени завершения. Для этого надо передать утилите pv размер каталога (в байтах) с помощью ключа '-s':

$ tar -czf — /path/to/dir | pv -s $(du -sb /path/to/dir | grep -o '8*') > /path/to/archive.tgz
461MB 0:00:21 [ 32MB/s] [=======================================> ] 60% ETA 0:00:13

Каждый раз набирать такую конструкцию не очень удобно, лучше сделать алиас.

Закладки каталогов в консоли

При выполнении операций администрирования приходится часто переходить по каталогам файлового дерева. Bash поддерживает ряд сокращений (например, чтобы вернуться в домашний каталог, просто вводим «cd», в предыдущий каталог — «cd -»), но этого мало. Конечно, можно использовать псевдонимы (aliases), вроде:

alias cdwww='cd /var/www'

Но этого все равно бывает недостаточно в том случае, если список каталогов большой. И главное — использование алиасов не очень удобно. Так, чтобы создать новый псевдоним, нужно вручную прописать его в

/.bashrc и перезапустить терминал. Небольшой скрипт Directory Bookmarks for BASH (dirb.info/bashDirB) расширяет набор сокращений, позволяя на лету создавать закладки на нужные каталоги и переходить в них короткой командой.

И добавляем в файл

Теперь каждая новая сессия будет поддерживать закладки. Переходим в нужный каталог и сохраняем его в закладку:

$ cd /var/www
$ s www

После этого будет создан файл

/.DirB/www, содержащий ссылку на закладку. Теперь, чтобы вернуться в указанный каталог с любого места файловой системы, достаточно ввести в консоли «g www». Аналогичным образом можно создавать любое количество закладок. Но это не все параметры. Например, параметр «p» позволяет запомнить последние перемещения и выводит их в консоли:

И, наконец, команда s1 позволит просмотреть листинг закладок. Для удаления закладки используем ключ '-r'.

Также следует знать, что bashDirB модифицирует переменную PS1 таким образом, что в приглашении выводится время и номер текущего каталога в history. Если тебя это не устраивает, просто закомментируй соответствующую строку в скрипте.

Фортунки

В некоторых Linux-дистрибутивах после запуска консоли выводится небольшая цитата. Практической пользы от нее вроде и нет, но небольшое шуточное высказывание повышает настроение и настраивает на рабочий лад. Тематические пакеты с базами высказываний называются fortunes, а сами цитаты — фортунками.

За несколько десятков лет в Сети появилось большое количество сборников цитат, которые легко интегрируются в консоль. Чтобы установить их в Debian или Ubuntu, достаточно ввести команду:

$ sudo apt-get install fortunes fortunes-debianhits fortunes-ubuntu-server fortunes-min fortune-mod fortunes-ru

После установки необходимо настроить вывод цитат в консоль. В самом простом случае достаточно прописать в конфиг

/.bashrc всего одно слово:

Далее следует перезапустить терминал или перезагрузить файл настроек (команда «source

/.bashrc»). Cписок выводимых категорий фортунок можно получить, введя:

После установки все фортунки помещаются в один из подкаталогов /usr/share/games/fortunes, откуда их и забирает программа. В случае необходимости при помощи ключа '-m' можно указать шаблон фортунок, которые будут выводиться. После добавления своих фортунок следует использовать утилиту strfile для создания индекса (strfile файл_фортунок).

$ sudo apt-get install cowsay xcowsay

По умолчанию корова не знает, что сказать, умную мысль ей надо подкинуть. Например, выведем uptime:

Или фортунку (так реализовано в Linux Mint):

Кроме стандартной коровы доступны и другие персонажи, соответствующие названию файлов в подкаталоге /usr/share/cowsay/ cows. Вызвать их можно при помощи параметра '-f'. Также ряд параметров изменяют внешний вид коровы: '-t' — усталая корова, '-p' — параноидальная, '-w' — обалдевшая и так далее. Чтобы автоматизировать процесс, заносим строку запуска в

COWDIR=/usr/share/cowsay/cows/;
COWNUM=$(($RANDOM%$(ls $COWDIR | wc -l)));
COWFILE=$(ls $COWDIR | sed -n ''$COWNUM'p'); fortune |
cowsay -f $COWFILE

Заключение

Собственно, это все. Следуя рекомендациям, описанным в статье, ты сможешь сделать работу в консоли гораздо более удобной и продуктивной, а также освободить время для более важных занятий.

Перенос директории dotfiles

Перенос директории dotfiles с одного компа (IP-адрес 192.168.1.1, порт 10000) на другой при помощи netcat и pv:

host1$ tar -cf — dotfiles | pv | nc -l -p 10000 -q 5
host2$ nc 192.168.1.1 10000 | pv | tar -xf

В случае, если host1 работает под управлением OpenBSD, команда должна выглядеть так:

obsdhost1$ tar -cf — dotfiles | pv | nc -l 10000

Пишем в твиттер легко и непринужденно

$ twit 'Привет из консоли'

Не забываем про 140 символов.

How much is the FISH?

Новичкам в консоли следует внимательно посмотреть в сторону альтернативного командного интерпретатора под названием FISH (Friendly Interactive Shell). Его преимущества перед bash довольно внушительны. Fish на полную катушку использует возможность управления цветами терминала. Он оснащен гораздо более мощной системой автодополнения, которая выводит на экран не только списки каталогов, аргументов и имена команд, но и массу другой полезной информации (например, рядом с каждой опцией помещается описание того, что она делает). В Fish встроена очень хорошая система подсказок, так что если ты допустишь ошибку, то получишь обширное разъяснение того, что произошло, и способы обхода проблемы. Наконец, скриптовый язык Fish гораздо проще и логичнее стандартного языка sh.

Читайте также: