- Автор темы
- #1
Надеюсь, абсолютным новичкам, которых пугают консольные команды, она поможет «влиться» в число умеющих использовать командную строку Linux.
Командная строка Linux
В зависимости от вашего Linux, ярлык для открытия консоли может быть вынесен на рабочий стол,
добавлен в избранные команды,
доступен в контекстном меню при клике правой кнопкой мыши в области рабочего стола.
Либо вы для вызова эмулятора терминала вы можете воспользоваться сочетанием клавиш CTRL + ALT + t.
В приглашении командной строки отображается имя пользователя и имя хоста. Перед областью ввода команд может быть символ решётки (#) или символ доллара ($). Символ доллара означает, что вы работаете под обычным пользователем, а символ решётки – что под суперпользователем (root).
На скриншоте видно, что я открыл консоль как обычный пользователь (символ $), а затем вошёл как root (символ сменился на #).
В некоторых инструкциях перед командами пишут $ или # и новички, пытаясь выполнить команды копированием-вставкой, получают разнообразные ошибки. Если перед командной вы видите $ или #, то их не нужно печатать – они написаны только для информирования вас о том, нужны ли дополнительные привилегии для выполнения данной команды.
Азы файловой системы Linux
Если нужно прочитать какие-то данные или сохранить информацию в файл из консоли, нужно уметь указывать путь до файла. В файловой система Linux нет такого понятия как буквы дисков. Там используется понятие «корень». Обозначается корень символом /
После корня указываются папки (в Linux они называются директориями) и файлы. Одни папки могут быть вложены в другие – точно также как в Windows. Вложенные папки и файлы разделяются символом / (точно таким же как корень).
Пример указания пути до файла:
/home/mial/book.txt
Эта запись означает, что файл book.txt находится в папке mial, а папка mial находится в папке home.
Базовые команды Linux
pwd
У меня вывелось:
/home/mial
Здесь / (первый слеш) – это корень, home – это название папки (директории), далее / (второй слеш) – отделяет название вложенной папки, mial – название второй вложенной папки.
Команда pwd показывает «текущую рабочую директорию». Текущую рабочую директорию нужно знать при указании относительных путей до файлов и папок, также некоторые программы сохраняют результаты своего выполнения в текущую директорию.
mkdir test1
То будет создана новая папка test1 в текущей рабочей директории, т.е. в моём случае путь до неё будет
/home/mial/test1
Также можно указать абсолютный путь до папки:
mkdir /home/mial/test2
ls
test1 test2 test.sh Видео Документы Загрузки Изображения Музыка Общедоступные Рабочий стол Шаблоны
Теперь мы можем убедиться, что папки test1 и test2 действительно были созданы.
Чтобы список выглядел лучше, можно использовать команду ls с опцией -l
ls -l
После команды и опций можно указать путь до папки, содержимое которой вы хотим посмотреть. Чтобы увидеть содержимое директории /var/log нужно ввести:
ls -l /var/log
Для просмотра содержимого корневой директории:
ls -l /
cd test1
cd /home/mial/test2
Символ . (одна точка) означает текущую директорию, а символ .. (две точки) означаете родительскую директорию. Следовательно, для перехода на один уровень вверх нужно набрать
cd ..
cp test.sh test1
Этой командой я скопировал файл test.sh в директорию test1. Проверим
ls -l test1
итого 4
-rw-r--r-- 1 mial mial 84 дек 11 15:48 test.sh
Файл test.sh из каталога test1 я переместил в каталог test2:
mv test1/test.sh test2
Файл test.sh в каталоге test2 я переименовал в test2.sh:
mv test2/test.sh test2/test2.sh
Файл test2.sh в каталоге test2 я переместил в каталог test1 и присвоил ему имя new.txt:
mv test2/test2.sh test1/new.txt
rm -r test1 test2
Ошибка «команда не найдена»
Причиной данной ошибки могут быть:
Ещё несколько полезных сочетаний клавиш для командной строки 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
В зависимости от вашего Linux, ярлык для открытия консоли может быть вынесен на рабочий стол,
В приглашении командной строки отображается имя пользователя и имя хоста. Перед областью ввода команд может быть символ решётки (#) или символ доллара ($). Символ доллара означает, что вы работаете под обычным пользователем, а символ решётки – что под суперпользователем (root).
На скриншоте видно, что я открыл консоль как обычный пользователь (символ $), а затем вошёл как root (символ сменился на #).
В некоторых инструкциях перед командами пишут $ или # и новички, пытаясь выполнить команды копированием-вставкой, получают разнообразные ошибки. Если перед командной вы видите $ или #, то их не нужно печатать – они написаны только для информирования вас о том, нужны ли дополнительные привилегии для выполнения данной команды.
- TAB для автодополнения
- ENTER для запуска выполнения команд
- CTRL + c для прерывания выполнения программы
- ↑ (курсорная клавиша вверх) для просмотра истории команд
Азы файловой системы Linux
Если нужно прочитать какие-то данные или сохранить информацию в файл из консоли, нужно уметь указывать путь до файла. В файловой система Linux нет такого понятия как буквы дисков. Там используется понятие «корень». Обозначается корень символом /
После корня указываются папки (в Linux они называются директориями) и файлы. Одни папки могут быть вложены в другие – точно также как в Windows. Вложенные папки и файлы разделяются символом / (точно таким же как корень).
Пример указания пути до файла:
/home/mial/book.txt
Эта запись означает, что файл book.txt находится в папке mial, а папка mial находится в папке home.
Базовые команды Linux
- pwd для показа текущей рабочей директории
pwd
У меня вывелось:
/home/mial
Здесь / (первый слеш) – это корень, home – это название папки (директории), далее / (второй слеш) – отделяет название вложенной папки, mial – название второй вложенной папки.
Команда pwd показывает «текущую рабочую директорию». Текущую рабочую директорию нужно знать при указании относительных путей до файлов и папок, также некоторые программы сохраняют результаты своего выполнения в текущую директорию.
- mkdir для создания новых директорий
mkdir test1
То будет создана новая папка test1 в текущей рабочей директории, т.е. в моём случае путь до неё будет
/home/mial/test1
Также можно указать абсолютный путь до папки:
mkdir /home/mial/test2
- ls для просмотра содержимого каталогов
ls
test1 test2 test.sh Видео Документы Загрузки Изображения Музыка Общедоступные Рабочий стол Шаблоны
Теперь мы можем убедиться, что папки test1 и test2 действительно были созданы.
Чтобы список выглядел лучше, можно использовать команду ls с опцией -l
ls -l
После команды и опций можно указать путь до папки, содержимое которой вы хотим посмотреть. Чтобы увидеть содержимое директории /var/log нужно ввести:
ls -l /var/log
Для просмотра содержимого корневой директории:
ls -l /
- cd для перехода по папкам (смены текущей рабочей директории)
cd test1
cd /home/mial/test2
Символ . (одна точка) означает текущую директорию, а символ .. (две точки) означаете родительскую директорию. Следовательно, для перехода на один уровень вверх нужно набрать
cd ..
- cp для копирования файлов
cp test.sh test1
Этой командой я скопировал файл test.sh в директорию test1. Проверим
ls -l test1
итого 4
-rw-r--r-- 1 mial mial 84 дек 11 15:48 test.sh
- mv для переименования и перемещения файлов.
Файл test.sh из каталога test1 я переместил в каталог test2:
mv test1/test.sh test2
Файл test.sh в каталоге test2 я переименовал в test2.sh:
mv test2/test.sh test2/test2.sh
Файл test2.sh в каталоге test2 я переместил в каталог test1 и присвоил ему имя new.txt:
mv test2/test2.sh test1/new.txt
- rm для удаления файлов и папок
rm -r test1 test2
- Как копировать текст в командной строке и как вставлять в командную строку Linux
Ошибка «команда не найдена»
Причиной данной ошибки могут быть:
- неправильно набрано имя команды
- программа не установлена
- данную команду может выполнять только root
Ещё несколько полезных сочетаний клавиш для командной строки Linux
- Ctrl+l для очистки экрана
- Ctrl+a для перехода в начало введённой команды
- Ctrl+e для перехода в конец введённой команды
- Ctrl+u для удаления всего, что стоит до курсора
- Ctrl+k для удаления всего, что стоит после курсора
- Ctrl+d для завершения текущего сеанса, закрытия консоли
- Ctrl+R: Поиск по ранее запущенным командам, начните писать искомую и вам будут предлагаться самые подходящие варианты. Для запуска нажмите ENTER.
- Ctrl+W: Вырезать слово перед курсором, добавить его в буфер обмена.
- Ctrl+K: Вырезать часть строки после курсора, добавить её в буфер обмена.
- Ctrl+U: Вырезать часть строки перед курсором, добавить её в буфер обмена.
- Ctrl+Y: Вставить из буфера обмена последнее, что вы вырезали.
Ранее мы познакомились с некоторыми командами. В том числе узнали, что у команды 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/сети/сервера, пентестингом, программированием.
В следующей части мы продолжим изучить азы командной строки – «кирпичики», из которых можно строить удивительные вещи.
