Азы работы в командной строке Linux (часть 2)

Начало: «Азы работы в командной строке Linux (часть 1)»

Опции команд Linux

В предыдущей части мы познакомились с некоторыми командами. В том числе узнали, что у команды ls есть опция -l, которая изменяет поведение команды. На самом деле, практически у всех программ есть опции (их ещё называют флаги, ключи). Схематично типичная команда выглядит так:

команда -опции аргументы

Большинство команд используют короткие опции, состоящие из одного символа, перед которым стоит дефис, например, «-l». У некоторых команд имеются длинные опции, состоящие из одного или нескольких слов, перед ними ставится два дефиса. С одной командой могут использоваться несколько опции, разделённых пробелами. Короткие опции можно группировать вместе, в этом случае перед ними ставится один дефис. Например, у команды ls имеется также опция «-t», которая сортирует результаты по времени модификации. Следующая команда:

ls -l -t

Полностью идентична следующей:

ls -lt

Примером длинной опции для ls является «--reverse», которая выводит результаты в обратном порядке:

ls --reverse

Опции можно сочетать, если они не являются взаимоисключающими.

Справка по программам командной строки Linux

Чтобы узнать опции той или иной программы, наберите:

команда --help

Например:

ls --help

Будет выведена информации об использовании:

ls [КЛЮЧ]… [ФАЙЛ]…

Краткая характеристика функции:

Выдаёт информацию о ФАЙЛАХ (по умолчанию о текущем каталоге).

А также довольно большой список опций. Приведём самые популярные:

  -a, --all                  не скрывать файлы начинающиеся с .
  -A, --almost-all           не выдавать подразумеваемые . и ..
  -d, --directory            выдавать имена каталогов, а не их содержимое
  -F, --classify             добавлять к имени файла индикатор (один из */=>@|)
  -h, --human-readable       c -l и/или -s печатать размеры в удобном для
                             человека виде (например, 1K 234M 2G)
  -l                         использовать широкий формат
  -r, --reverse              обратный порядок сортировки
  -S                         сортировать по размеру файла, большие сначала
  -t                         сортировать по времени изменения,
                             сначала самые новые
  -X                         сортировать по расширению в алфавитном порядке
  -1                         перечислять по одному файлу на строке.
                             Символ «\n» не учитывается, если указан -q или -b
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

Как можно видеть, некоторые опции (ключи) имеют только короткие вариант написания, некоторые только длинный, некоторые имеют оба варианта, которые являются полностью взаимозаменяемыми.

У каждой программы свои опции, и своё значение. Пожалуй, универсальной (одинаковой для всех), является только флаг --help.

Как и имена команд, опции чувствительные к регистру, т.е. -s и -S это две разные опции.

Задание для самостоятельного изучения: познакомьтесь с опциями и других рассмотренных ранее программ, т.е. mkdir, cp, mv и rm.

Зачем сейчас нужна командная строка Linux?

Мы начали знакомиться с командами и их опциями. Может возникнуть резонный вопрос – зачем вообще так мучиться? Посмотреть, какие файлы находятся в директории, скопировать или удалить их можно с лёгкостью в любом файловом менеджере. К чему вообще нужна консоль?

Иногда мне попадались сообщения, что «командная строка это прошлое». Действительно ли работа в консоли является никому ненужным атавизмом? Нет! Очень большое «НЕТ»!

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

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

Рассмотрим вполне себе бытовой пример с командой find. Допустим, мне захотелось посмотреть на фотографии со своего дня рождения, сделанные в 2014 году. Как мне их быстро найти в своём плохо структурированном фотоархиве на несколько сотен гигабайт? Можно попытаться начать просматривать самые вероятные пути, где я их мог бы сохранить, попытаться искать по имени файла и т.д. В командной строке Linux мне достаточно сделать поиск по дате создания файла. Для этого мне нужно ввести одну единственную команду!

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

К примеру, мне понадобилось разместить на карте точки тех мест, где были сделаны все (!) фотографии из моего фотоархива. Я взял уже знакомую нам программу find для поиска всех файлов изображений, найденные файлы передал программе jhead (умеет извлекать метаданные из файлов), указал ей передавать результат своей работы в команду grep (отфильтровывает все метаданные, кроме GPS координат), полученные геоданные передаются командам cut и sed, которые «раскидывают» дни, минуты и секунды долготы и широты по переменным, эти переменные передаются в программу bc (пересчитывает координаты в десятичные градусы, которые поддерживаются картой), полученные координаты передаются команде echo (которая выводит результат), ну и, наконец, команда cat объединяет HTML структуру (я воспользовался картами Google) с полученными координатами и формирует конечный HTML файл, который можно открыть в любом браузере. Как я это сделал, можно посмотреть в статье «Массовый поиск геотэгов на сайтах и в локальном хранилище».

Если бы я взялся решать эту задачу на той же самой Java или любом другом языке программирования, то, наверное, так бы и застрял на анализе структуры файлов .jpg и решения проблемы по извлечению EXIF из бинарного файла. А в командной строке Linux (объединив несколько команд в пакетный файл), мне удалось решить эту проблему в течение часа.

Причём в Linux имеются программы для самых разных сфер: для работы с веб-сайтами (скачивание файлов или получение страницы сайта), обработки текста (мощнейший набор инструментов), работы с файловой системой, работы с железом, сетями, огромное количество специализированных консольных программ, можно получить доступ к базам данных – вообще всё, что можно делать в графическом интерфейсе Linux плюс много другого.

Такие «паровозики» можно составлять из любых команд, вы можете задействовать ваши собственные консольные программы.

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

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

Т.е. просмотр содержимого папки с помощью ls -l это не «пик» возможностей командной строки. Это самое-самое начало знакомства. Изучение командной строки требует и усилий, и времени. Но эти затраты окупятся сторицей, особенно если ваша деятельность связана с администрированием ОС Linux/сети/сервера, пентестингом, программированием.

В следующей части мы продолжим изучить азы командной строки – «кирпичики», из которых можно строить удивительные вещи.

Продолжение: «Азы работы в командной строке Linux (часть 3)».

Рекомендуемые статьи:

Добавить комментарий

Ваш e-mail не будет опубликован.