Команда Pipe, Grep и Sort в Linux / Unix с примерами

В этой статье мы постарались систематизировать основные команды Linux. Команды, которые вы увидите в этом списке, одинаково верно работают в разных дистрибутивах, включая Debian, Gentoo, Ubuntu, ASPLinux, ALTLinux и т. д. Главная цель статьи — создать список основных команд Linux, что упростит как изучение, так и эксплуатацию этой операционной системы.

Общие команды Linux

Здесь собраны Linux-команды, которым не нашлось место в других разделах.

# uname -a # Показывается версия ядра Linux; # lsb_release -a # На экран выводится информация о версии ОС и основанных на ней дистрибутивах; # clear # Очищается экран терминала; # cat /etc/SuSE-release # На экран выводится информация о версии ОС SuSE; # man hier # Описывается иерархия файловой системы (для чего необходима каждая директория в Linux); # wall Привет # На терминалы других пользователей отправляется сообщение «Привет»; # date # Отображается текущая дата и время; # cal -3 # Отображается в удобной форме предыдущий, текущий и следующий месяц; # uptime # Отображается текущее время и работа системы без выключения и перезагрузки; # hostname # Выводится сетевое имя компьютера; # whois # Показывается информация о домене ; # export http_proxy=:port # Меняется переменная окружения http_proxy для использования интернета посредством proxy-сервера; # wget —convert-links -r # Сайт копируется целиком, конвертируются ссылки для автономной работы. Копирование производится на глубину 5-ти уровней; # wget _ # Файл _ скачивается в текущую папку; # pppconfig # Команда нужна для создания и настройки соединения Dial-Up при выходе в интернет по модему; # pppoeconf # Команда для создания и настройки выхода в сеть через ADSL-модем; # !! # Обеспечивается выполнение последней команды; # history | tail -50 # Отображаются последние 50 набранных команд; # exit # Сеанс текущего пользователя завершается; # passwd # Пароль текущего пользователя меняется; # shutdown -h now # Для выхода из Linux; # poweroff # Для выхода из Linux; # reboot # Система перезагружается; # last reboot # Выводится статистика перезагрузок; # winecfg # Для настройки Wine — неэмулятора WinAPI; # host # Для отображения IP-адреса введённого сайта.

Читайте также:  Ноутбук греется и выключается что делать?

Команды для управления пользователями

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

  • useradd — создает новую учетную запись. Например, мы хотим добавить пользователя с именем Timeweb. Для этого вводим: useradd Timeweb. Но свежесозданному аккаунту нужен не только логин, но и пароль. С помощью опций можно задать дополнительные характеристики новому пользователю.
  • passwd — задает пароль для учетной записи, работает вкупе с предыдущей командой. То есть сразу после создания аккаунта, пишем: passwd Timeweb (в вашем случае может быть любой другой пользователь). После этого система попросит придумать и указать пароль для новой учетной записи. По ходу набора пароля в терминале не будут отображаться даже звездочки, но он все равно учитывает каждую нажатую клавишу. Продолжайте набирать пароль вслепую.
  • userdel — удаляет выбранную учетную запись. Синтаксис простейший:

userdel имя учетной записи, которую нужно стереть

Поиск по регулярному выражению в grep

Это всё, конечно, замечательно, но я бы хотел при поиске определения функции искать именно определение функции, без указания файлов, где она только упоминается. То есть мне нужна строка, где будет тип возвращаемого значения (char*), после которого будет идти какое-то количество спец-слов и пробелов, а потом название функции. Нет ничего проще:

grep -r -C 3 -E ‘char.*?\*.*?SDL_GetError’ /usr/local/include

Почти все ключи нам известны кроме -E – он включает режим расширенных регулярных выражений для шаблона поиска. Так в данном регулярном выраженнии мы написали ‘char.?*.?SDL_GetError’ то есть:

  • в строке должная встретиться подстрока «char»,
  • сразу за ней должны встретиться любые символы до «*». Тут важно сказать, что . в регулярных выражениях отвечает за любой символ, * – модификатор, указывающий количество: от 0 до бесконечности повторений. Далее идёт ? – ограничитель жадности: да, любое количество повторений, пока не встретишь следующее из регулярного выражения.
  • \* – мы уже знаем, что * – спец. символ, означающий любое количество повторений. Поэтому, чтобы указать, что здесь должна быть просто *, мы используем экранирующий символ – \. Им же мы можем указать, что нужен символ «точка» или «вопросительный знак», не указывая на их дополнительные символы в рамках данного диалекта регулярных выражений.
  • снова .*? – съедаем все символы, не относящиеся к далее идущим в регулярке.
  • ну и наша функция «SDL_GetError».

Схематично это можно выразить следующим образом:

| char | .*? | \* | .*? | SDL_GetError | extern DECLSPEC | char | | * | SDLCALL | SDL_GetError | (void);

Регулярные выражения – отнюдь не очевидная тема. И понять её с ходу вы вряд лм сможете. Я подготовил некоторое объяснение в рамках второй пары по Linux. Но явно нужно более тщательное рассмотрение этой темы.

Что такое фильтр?

В Linux есть множество команд фильтрации, таких как awk, grep, sed, spell и wc. Фильтр принимает входные данные от одной команды, выполняет некоторую обработку и выдает выходные данные.

Когда вы передаете две команды по конвейеру, «отфильтрованный» вывод первой команды передается следующей.

Что такое фильтр?

Давайте разберемся в этом на примере.

У нас есть следующий файл ‘sample’

Мы хотим выделить только те строки, которые не содержат символа «а», но результат должен быть в обратном порядке.

Что такое фильтр?

Для этого можно использовать следующий синтаксис.

cat sample | grep -v a | sort — r

Посмотрим на результат.

Что такое фильтр?