Конспект: работа с командной строкой

Данная статья это конспект по пройденному курсу: Основы командной строки.

Обозначения пути

  • / — самый верхний уровень файловой системы
  • ~ — домашняя директория

Сайт на котором можно посмотреть что делает та или иная команда. Ссылка
Иформация о стандартных директориях *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 есть четыре основных режима работы:

  1. Командный режим (обычный режим) — это режим по умолчанию. Перемещение по файлу, быстрое (при помощи команд, комбинаций клавиш) редактирование, удаление, поиск текста.
  2. Режим вставки (режим ввод) — ввод текста с клавиатуры. То, как вы привыкли это делать в обычных редакторах.
  3. Визуальный режим — выделение произвольных участков текста.
  4. Режим командной строки — собственная командная строка для редактора текста, из которой можно выполнять великое множество разнообразных команд.

Для перехода в режим вставки — нажать 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

Алгоритм такой команды очень прост:

  1. Выбираем строки, которые содержат alias
  2. Потом в строчках, которые получили на выходе первой команды, ищем слово color

| — этот символ называется пайп, он указывает шелу взять STDOUT одного процесса и соединяет его с STDIN другого процесса. 

Также команду выше можно переписать на такую:

cat .bashrc | grep alias | grep color

Манипулирование файловой структурой

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

Команды:

  1. touch filename — изменяет время последнего доступа к файлу, если его нету — создает
  2. rm — удалить файл
    • -r  — удаляет папку
    • -f — не спрашивает подтверждение пользователя
  3. mv — переименовывает файл. В *nix системах не существует понятия «переименовать файл». Переименование всегда равносильно перемещению, которое выполняется командой mv.
  4. cp — копирует файл.
    • -r — позволяет скопировать директории
  5. 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.
По умолчанию она пытается повысить права до суперпользователя.

Пакетный менеджер

Пакетный менеджер служат для установки программ. В каждой операционной системе есть свой пакетный менеджер, но его надо устанавливать отдельно.

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

Поделиться
Отправить
 48   7 мес   инструменты   курсы
Популярное