Конспект: работа с командной строкой
Данная статья это конспект по пройденному курсу: Основы командной строки.
Обозначения пути
- / — самый верхний уровень файловой системы
- ~ — домашняя директория
Сайт на котором можно посмотреть что делает та или иная команда. Ссылка
Иформация о стандартных директориях *nix систем. FHS
Работа в файловой системе
- pwd — отображает путь рабочей (текущей) директории
- ls — показывает все файлы и директории в текущему или указанному пути
- cd — служит для перемещения по директориям. Если выполнить без параметров — переместит нас в домашнюю директорию.
- stat — показывает дополнительную информацию о папке или файле
Чтение файла
- сat — Отображает содержимое файла
- head — Отображает первые 10 строк файла, можно вывести больше с помощью флага -n 20
- tail — Отображает последние 10 строк файла, можно вывести больше с помощью флага -n 20
- less — Представляет из себя пейджер. С его помощью можно перемещайся и искать в файле. Также он может открыть файл любого размера, так как отображает только те строки, которые может поместить в окно консоли и при перемещении по файлу — дочитывать нужную информацию.
Может быть такая ситуация что файл очень интенсивно изменяется, например логи, и нужно постоянно выводить содержимое файла. Для этого у команд head и tail есть флаг -f. Данный файл сразу выводит на экран добавленные строки.
Grep
Grep — консольная утилита, которая производит поиск в файле или файлах по заданному шаблону.
Пример:
grep services Startup.cs # выведет по очередно строчки, которые содержат services.Иногда нужно посмотреть не только сами строчки содержащие текст, но и текст вокруг.
Для этого есть несколько дополнительных флагов:
- -B — количество строк до искомой строки
- -A — после искомой строки
- -C — до и после одновременно
- -R — рекурсивный поиск по директориям и под директориям
- -n — отобразит номер строки, возле каждого результата поиска
Примеры:
grep -R .getUsers() . - найдет все файлы в которых есть строчка .getUsers(), начиная с текущей.
grep -C 10 text file.txt - найдет строку text и отобразит ее и 10 соседних строк с каждой стороныТекстовые редакторы
Для редактирования файлов в командной строке используют редакторы Nano, Vim и Emacs. Первые два, обычно, установлены по умолчанию.
Nano
Самый простой текстовый редактор. Удобно редактировать небольшие файлы.
Vim
Данный редактор имеет очень много возможностей и особенностей.
Работа в Vim состоит из разных режимов.
Когда только открыли файл, редактор работает в режиме команд. Любое нажатие выполняет какую-то определенную команду.
В Vim есть четыре основных режима работы:
- Командный режим (обычный режим) — это режим по умолчанию. Перемещение по файлу, быстрое (при помощи команд, комбинаций клавиш) редактирование, удаление, поиск текста.
- Режим вставки (режим ввод) — ввод текста с клавиатуры. То, как вы привыкли это делать в обычных редакторах.
- Визуальный режим — выделение произвольных участков текста.
- Режим командной строки — собственная командная строка для редактора текста, из которой можно выполнять великое множество разнообразных команд.
Для перехода в режим вставки — нажать i.
Для перехода в режим команд — нажать ESC.
Как выйти с Vim? :-)
Для начала нужно перейти в режим команд.
- :q! — Закрывает файл без сохранения изменений
- :wq — Сохраняет и закрывает файл
- :w — Просто сохраняет файл
Хороший гайд по Vim — https://guides.hexlet.io/vim/
Перенаправление потоков
В *nix системах есть такое понятие как потоки. В начале работы программы ОС связывает ее с тремя потоками: STDIN, STDOUT и STDERR.
Для всех приложений они выглядят как обычные файлы.
Что же делает каждый из них?
* STDIN — отвечает за ввод программы.
* STDOUT — отвечает за вывод программы.
* STDERR — отвечает за вывод ошибок.
По умолчанию вывод всех команд отображается на экране. Но с мощью параметра > можно перенаправить вывод в указанный файл.
ls -l > output.txtНа экране ничего не отобразится, но в текущей директории появится файл output со всем выводом команды ls -l. Данную операцию можно сделать с любой программой, которая что-либо выводит на экран. Но есть одна особенность данного оператора, он перезаписывает все данные в файле, для того чтобы дописать используйте >>.
echo Hello_World > output.txt
# Hello_World
echo Hello_World1 > output.txt
# Hello_World1
echo Hello_World2 >> output.txt
# Hello_World1
# Hello_World2Также можно перенаправлять в другую сторону поток. Например у нас есть файл и мы ходим посмотреть сколько в нем строк. Для этого существует команда wc. Она принимает на вход текст, но с помощью оператора < мы можем передать в нее содержимое файла.
wc -l < result.txt
# 2432Также можно как читать так и писать в файл:
wc -l < result.txt > output.txtПайплайн (Конвейер)
Если у программы есть вход и выход, то их можно обьеденить, такое обьединение называется — конвейер.
С помощью данного подхода можно передавать данные сквозь приложения, как через цепочку функций.
Например нам нужно найти строку в которой есть несколько слов и нам не важно как они расположены внутри, главное чтобы были на одной строчке.
grep alias .bashrc | grep colorАлгоритм такой команды очень прост:
- Выбираем строки, которые содержат alias
- Потом в строчках, которые получили на выходе первой команды, ищем слово color
| — этот символ называется пайп, он указывает шелу взять STDOUT одного процесса и соединяет его с STDIN другого процесса.
Также команду выше можно переписать на такую:
cat .bashrc | grep alias | grep colorМанипулирование файловой структурой
Возможность модифицировать файловую систему завязана на права. Если у вас нету прав создавать файлы в текущей директории, вы получите ошибку.
Команды:
- touch filename — изменяет время последнего доступа к файлу, если его нету — создает
- rm — удалить файл
- -r — удаляет папку
- -f — не спрашивает подтверждение пользователя
- mv — переименовывает файл. В *nix системах не существует понятия «переименовать файл». Переименование всегда равносильно перемещению, которое выполняется командой mv.
- cp — копирует файл.
- -r — позволяет скопировать директории
- mkdir — создание директории
- -p — позволяет создать вложенные директории. mkdir /folder/subfolder
Переменные окружения
Для просмотра переменных окружения используют команду env.
Формат вывода очень простой: слева от знака равно имя переменной, справа — значение.
Основное предназначение переменных окружения — конфигурация системы и программ. Их удобство заключается в универсальности и отвязке от способа появления этих значений в системе.
Для вывода переменной используется echo, а перед самой переменной ставится знак $.
echo $HOMEСуществует два способа задавать значение переменной окружения: локальный и глобальный.
Локальные переменные живут для конкретной программы:
HOME=/var cdДругой способ установки изменяет значение глобально, для всей сессии и выполняется так:
export HOME=/varОбратите внимание на то, что изменение происходит в рамках текущей сессии, другими словами, если у вас открыто две вкладки терминала, и в каждой загружен баш, то изменение произойдет только в той вкладке, в которой будет выполнена команда.
История комнад
Для просмотра команд можно использовать клавиши вверх и вниз. Но все введенные команды хранятся в файле .bash_history, который лежит в домашней директории пользователя.
Посмотреть историю можно и более простым способом, достаточно выполнить команду history.
Последнее, и самое интересное — реверсивный поиск. Если нажать комбинацию Ctrl + r, то запустится специальный поиск по истории. Он ожидает ввода символов и сразу отображает ближайшую команду, в которой эти символы встречаются. Если найденное соответствие вас не устроило, то повторное нажатие Ctrl + r выберет следующее соответствие из истории.
Sudo
Ситуаций, в которых необходимо повышать привилегии и выполнять команды от рута (пользователя root), довольно много. С некоторыми мы уже столкнулись, с другими познакомимся в следующих уроках:
Установка новых программ
Навигация по чужим директориям
Изменение прав доступа и владельцев файлов, не принадлежащих текущему пользователю
Создание, редактирование и удаление файлов в местах, где не хватает прав текущего пользователя
Запуск программ, требующих повышенные привилегии.
Основной способ повышать привилегии в современных системах — утилита sudo.
По умолчанию она пытается повысить права до суперпользователя.
Пакетный менеджер
Пакетный менеджер служат для установки программ. В каждой операционной системе есть свой пакетный менеджер, но его надо устанавливать отдельно.
Основной его частью является каталог. В нем содержится список всех приложений, которые можно установить.