Введение
Для работы в Ubuntu пользователь может выбрать один из двух возможных вариантов интерфейса: графический либо интерфейс командной строки. Графический интерфейс (GUI — Graphical user interface) знаком большинству пользователей, в нем для выполнения действий нужно использовать различные элементы рабочего стола. Он имеет свои преимущества, которые выражаются главным образом в удобном и привычном формате подачи информации, а также в отсутствии необходимости знать какие-либо команды.
Однако многие пользователи Linux предпочитают работать в командной строке (CLI, Command Line Interface). Как правило, эти пользователи так или иначе связаны с программированием или системным администрированием, тем не менее знание основ bash будет полезно всем пользователям. Командная строка позволяет выполнять команды значительно быстрее, чем при использовании GUI, при этом экономит ресурсы. Более того, зачастую команды не имеют своих аналогов в графическом интерфейсе и, благодаря этому, дают значительную свободу пользователям в своих действиях. При этом интерфейс командной строки встроен в ядро операционной системы, а значит, он доступен даже тогда, когда вы не можете воспользоваться графической оболочкой. Сами же команды одинаковы для всех операционных систем на базе Linux, будь то Ubuntu, CentOs, Fedora или какая-либо другая.
Как изменить цвета в строке приглашения
Элементы строки приглашения можно раскрашивать в разные цвета.
Чтобы задавать цвета для элементов строки приглашения нужно части строки приглашения заключать в специальные символы.
Используется следующий синтаксис:\e[X;YmРАСКРАШИВАЕМАЯ_СТРОКА\e[m
\e[ — начало цветовой схемы.X;Ym — цветовая пара (X;Y). Именно значения X и Y определяют цвет.\e[m — окончание цветовой схемы.
Небольшой пример, чтобы вы понимали о чем идет речь. Раскрасим всю строку целиком цветом с обозначением 0;36.
Цвета задаются числами. Можно задавать парой X;Y или просто Y. Например, красный это — 0;31 или просто 31. Есть и другие способы задания цветов, но в данной статье мы их не рассматриваем.
Список цифровых обозначений для цветов (Y):
Цвет | Числовоеобозначение |
---|---|
Black | 30 |
Red | 31 |
Green | 32 |
Brown | 33 |
Blue | 34 |
Purple | 35 |
Cyan | 36 |
Light gray | 37 |
Dark gray | 90 |
Light red | 91 |
Light green | 92 |
Light yellow | 93 |
Light blue | 94 |
Light magenta | 95 |
Light cyan | 96 |
White | 97 |
При задании цвета двумя числами X;Y, первое число X принимает следующие значения:0 — обычный цвет;1 — будет использоваться более яркий цвет;2 — более темный цвет;3 — курсив;4 — подчеркивание;5 — моргание.
Решение проблем
Перенос строк при изменении размера окна
При изменении размера окна эмулятора терминала Bash может не получить соответствующий сигнал. В результате выведенный текст будет переноситься некорректно и перекроет приглашение командной строки. Опция оболочки проверяет размер окна после каждой команды и при необходимости обновляет значения переменных и .
~/.bashrc
shopt -s checkwinsize
Оболочка завершается даже с опцией ignoreeof
После задания опции вы можете обнаружить, что многократное нажатие всё равно приводит к завершению процесса оболочки. Дело в том, что по умолчанию эта опция позволяет игнорировать только 10 нажатий данной комбинации клавиш (если быть точным — 10 ситуаций EOF) перед выходом из оболочки.
Задать большее значение можно переменной IGNOREEOF. Например:
export IGNOREEOF=100
Анализ сценария и поиск ошибок
Программа проверяет сценарии Bash (и других командных оболочек) на предмет ошибок и предлагает возможные улучшения кода.
Подключение к серверу через SSH
Мы уже выяснили, что представляет собой SSH и команды для него. Теперь установим соединение с сервером.
Естественно, перед началом надо арендовать виртуальный хостинг или VDS у одного из доступных провайдеров. У Timeweb, к примеру.
Если у вас macOS или Linux
- Запускаем программу Terminal.
- Вводим в консоль команду со следующим синтаксисом ssh имя пользователя@адрес сервера. В моем случае это ssh root@89.223.127.80.
- Указываем пароль суперпользователя (его отправляет хостинг-провайдер сразу после регистрации).
- Жмем Enter.
Все. Соединение установлено, можно переходить к работе непосредственно с сервером.
Если у вас Windows
- Скачиваем и устанавливаем программу PuTTY.
- В строку IP-адрес вводим адрес своего VDS или виртуального хостинга.
- Жмем на кнопку Open.
- Вводим пароль администратора, чтобы получить доступ к управлению.
Управление протоколом SSH
У команды для подключения к удаленному PC по SSH есть две важных опции:
- ssh -p номер порта имя пользователя@адрес сервера — заменяет стандартный 22-й порт на иной, что положительно сказывается на безопасности и устойчивости к автоматическим хакерским атакам от ботов.
- ssh-copy-id -i путь до файла с ключом имя пользователя@адрес сервера— копирует ключ на сервер, чтобы вход осуществлялся без логина и пароля, а именно через ключ.
В Linux нет понятия раздела, означает ли это, что при переустановке системы я потеряю все свои файлы?
Это не совсем так, поскольку такое понятие как раздел в Linux всё же присутствует, а вот чего нет, так это присвоения разделам букв, кроме того, в Linux существует только один корневой каталог (/), к которому монтируются все папки и разделы со своими файловыми системами. Что касается потери личных данных при переустановке, всё будет зависеть от того, какой тактики вы станете придерживаться. Если Linux не загружается, для начала вы можете попробовать восстановить ее работу, загрузившись в режиме восстановления.
Если переустановка является единственным вариантом, выбирайте режим «Переустановить», при этом ваши личные файлы будут сохранены. Будут также сохранены установленные программы, но без гарантии корректной их работы. Единственное, что вы гарантировано потеряете – это локальные системные настройки. Можно также установить Linux в исходный раздел, но без форматирования. При этом будут удалены только системные файлы нерабочей Linux и заменены новыми, но первый способ всё же предпочтителен, поскольку как раз ориентирован на начинающих пользователей.
Примечание: сказанное выше относится к Ubuntu 20.04, в других дистрибутивах Linux процедура переустановки без потери пользовательских файлов и приложений может отличаться. Стоит также отметить, что заблаговременная разбивка диска в Linux на разделы может существенно облегчить вам процедуру переустановки системы без потери личных данных.
Поддерживает ли Linux установку программ Windows?
Если программа написана для Windows, установить ее в Linux напрямую нельзя, исключения составляют кроссплатформенные приложение, но они, как правило, представлены отдельными установщиками либо устанавливаются из репозитория. Тем не менее, со значительной долей Windows-программ вы сможете работать в Linux, используя специальное приложение Wine, позволяющее запускать Windows-программы в среде Linux, подменяя вызовы библиотек Windows на системные вызовы Linux. Wine работает подобно виртуальной машине или эмулятору, но не является ни тем, ни другим.
Wine — это скорее альтернативная реализация Windows API. В качестве дополнения к Wine в Linux можно использовать графическую оболочку PlayOnLinux, значительно упрощающую работу с Wine и установленными Windows-приложениями. Использование Wine в Linux имеет свои ограничения, поэтому некоторые Windows-программы в ней могут работать некорректно. Кроме того, используя Wine, вы снижаете уровень безопасности системы. Так, во избежание проблем с работающими под Windows вирусами настоятельно не рекомендуется устанавливать и запускать в Wine программы с правами суперпользователя.
Действия при отсутствии нагрузки
Действия awk заключаются в фигурные скобки ( ) и выполняются при совпадении с шаблоном. Действие может иметь ноль или более утверждений. Несколько операторов выполняются в том порядке, в котором они появляются, и должны быть разделены новой строкой или точкой с запятой ( ).
В awk поддерживается несколько типов операторов действий:
- Выражения, такие как присваивание переменных, арифметические операторы, операторы увеличения и уменьшения.
- Управляющие операторы, используемые для управления потоком программы ( , , , и т. Д.)
- Операторы вывода, такие как и .
- Составные утверждения, чтобы сгруппировать другие утверждения.
- Операторы ввода, чтобы управлять обработкой ввода.
- Операторы удаления для удаления элементов массива.
Оператор вероятно, является наиболее часто используемым оператором awk. Он печатает форматированный вывод текста, записей, полей и переменных.
При печати нескольких элементов их нужно разделять запятыми. Вот пример:
Печатные материалы разделяются одиночными пробелами:
Если вы не используете запятые, между элементами не будет пробелов:
Печатные элементы объединены:
Когда используется без аргументов, по умолчанию используется . Текущая запись будет напечатана.
Чтобы напечатать собственный текст, вы должны заключить текст в двойные кавычки:
Вы также можете печатать специальные символы, такие как новая строка:
Оператор дает вам больше контроля над форматом вывода. Вот пример вставки номеров строк:
не создает новую строку после каждой записи, поэтому мы используем :
Следующая команда вычисляет сумму значений, хранящихся в третьем поле в каждой строке:
Вот еще один пример, показывающий, как использовать выражения и управляющие операторы для печати квадратов чисел от 1 до 5:
Однострочные команды, подобные приведенной выше, труднее понять и поддерживать. При написании более длинных программ следует создать отдельный программный файл:
prg.awk
Запустите программу, передав имя файла интерпретатору :
Вы также можете запустить программу awk как исполняемый файл, используя директиву shebang и установив интерпретатор :
prg.awk
Сохраните файл и сделайте его исполняемым :
Теперь вы можете запустить программу, введя:
Существует множество разных дистрибутивов Linux, какой лучше всего подойдет мне как начинающему пользователю?
Действительно, выбор дистрибутивов Linux огромен, но вам, как начинающему нужен именно тот, который даст наилучшее представление об этой системе. Таковым сегодня является Linux Ubuntu, точнее, его десктопная версия. Он является наиболее популярным, по сравнению с другими дистрибутивами на него имеется больше всего документации, он отличается высокой стабильностью, поддержкой широкого круга оборудования и программного обеспечения. Ubuntu также даст вам в достаточной мере прочувствовать разницу между интерфейсами настольных Линукс и Windows, впрочем, если вы хотите начать с чего то уж совсем похожего на Windows, можем порекомендовать Linux Mint.
Редактирование прав
Все, что нужно для разрешения проблем, связанных с правами в Linux.
sudo — выдает права суперпользователя. Используется перед любой командой, если нужно выполнить ее от имени администратора. Многие программы и операции запускаются исключительно при наличии этих прав, так что sudo используется часто. Например, чтобы обновить список пакетов в Fedora, введем: sudo dnf update. При этом система запросит пароль администратора.
sudo su — на время превращает все вводимые в терминал команды в команды суперпользователя. Пригодится, если предстоит вносить много изменений в системные файлы, которые нельзя редактировать без соответствующих прав.
sudo !! — запускает предыдущую команду от имени администратора. Пригодится, если уже ввели команду, требующую прав суперпользователя, но забыли их затребовать. Не придется вводить весь текст заново. Достаточно сокращенной версии.
chmod — корректирует права доступа к выбранному файлу. Применяется исключительно с набором опций, обозначающих список прав. Допустим, я хочу выдать права на чтение и запись файла Timeweb.html на рабочем столе. Для этого введу в терминал: chmod 777 ~/Desktop/timeweb.html. Теперь его можно открывать и редактировать. Аналогичным образом пользователи поступают с системными файлами, когда приходит время что-то в них менять. По умолчанию большая их часть защищена от записи.
chown — назначает владельца для выбранной директории, документа, картинки или любого другого элемента в файловой системе. Синтаксис следующий: chown имя учетной записи, которому надо передать права путь до файла, права на который нужно передать. На примере этого может выглядеть следующим образом: есть пользователь Timeweb, которому я хочу передать права на файл timeweb-file.txt с рабочего стола. Сделаю это командой:
chown Timeweb ~/Desktop/timeweb-file.txt
Security Considerations and Other Subtleties
Even though sourced files are not directly executable, they do contain code that will be executed by anything that sources them. It is important, therefore, that permissions be set to allow writing only by their owners.
If a sourced file contains confidential information (as a backup program might), set the permissions to 600.
While , , and all have the builtin, and all other strictly POSIX compatible shells support only the single dot (.).
If the file name argument given to does not contain a / character, the directories listed in the variable are searched for the specified file. For security reasons, it’s probably not a good idea to rely on this. Always specify a explicit path name.
Another subtlety has to do with positional parameters. As executes its commands in the current shell environment, this includes the positional parameters a script was given as well. This is fine in most cases; however, if is used within a shell function and that shell function has its own positional parameters, will ignore them and use the shell’s environment instead. To overcome this, positional parameters may be specified after the file name. Consider the following script:
contains this one line of code:
We expect to see the following output:
But, what we actually get is this:
This is because uses the shell environment the script was given, not the one that exists when the function called. To correct this, we need to write our script this way:
By adding the desired parameter to the command within the function , we are able to get the desired behavior. Yes, it’s subtle.
Работа с командной строкой, горячие клавиши и дополнительные символы
Базовые методы управления текстом в терминале.
clear — удаляет из текущий сессии терминала все ранее выведенные в него данные, содержимое открытых документов и историю использованных команд. Используется, когда нужно четко лицезреть вывод конкретной операции.
history — показывает ранее использованные приложения и инструменты. Без дополнительных аргументов отображает 10 элементов. Но их количество можно изменить вручную, добавив к слову history любое число. history 13, к примеру.
whatis — дает однострочную справку к любой из установленных программ. Принцип работы следующий: вводим слово whatis, а за ним следом название приложения, о котором хотим узнать. Например, чтобы узнать о том, что такое nano, введем в терминал: whatis nano.
man название пакета — открывает документацию к любой из установленных программ. В ней можно посмотреть, какие функции есть у приложения, как им пользоваться, какие могут возникнуть проблемы.
Дополнительные символы
Не совсем команды, но тоже текстовые элементы, причем полезные.
; — разделитель, необходимый, чтобы активировать сразу несколько команд подряд. Это выглядит так: cd ~/Documents; mkdir Novaya_papka; rmdir Staraya-papka. Команды будут выполняться друг за другом независимо от результата выполнения каждой из них.
&& — то же самое, что и ;, но с важным нюансом. Команды, соединенные с помощью &&, будут выполняться друг за другом, только если предыдущая завершилась успешно. Синтаксис аналогичный:
sudo apt-get update && sudo apt-get install wget
| — запускает сразу две команды. Это может быть полезно, когда нужно запросить информацию из какого-нибудь приложения, а потом найти в полученных данных определенную строку, код, слово или иной элемент текста.
~ — сокращение от /home/имя учетной записи/. Часто фигурирует в инструкциях.
Горячие клавиши
Парочка полезных сочетаний клавиш.
Стрелка вверх — показывает предыдущую команду.
Ctrl+C — прерывает запущенный процесс.
Ctrl+A — перемещает курсор в начало строки.
Ctrl+E — перемещает курсор в конец строки.
Function Libraries
In addition to the configuration shared by both the and scripts, there could be code shared between the two programs. For example, it makes sense to have a shared function to display error messages:
How about a function that detects if the backup server is available on the network:
Another function both scripts could use checks that external programs we need for the scripts to run (like ) are actually installed:
To share these functions between the and scripts, we could build a library of functions and source that library. As an example, we could put all the common code in a file called and add the following code to both scripts to source that file:
General Purpose Libraries
Since we hope to become prolific script writers, it makes sense over time, to build a library of common code that our future scripts could potentially use. When undertaking such a project, it’s wise to write high quality functions for the library, as the code may get heavy use. It’s important to test carefully, include a lot of error handling, and fully document the functions. After all, the goal here is to save time writing good scripts, so invest the time up front to save time later.
Список переменных среды
Наиболее часто используемая команда для отображения переменных среды — это . Если имя переменной передается в качестве аргумента команде, отображается только значение этой переменной. Если аргумент не указан, печатает список всех переменных среды, по одной переменной в каждой строке.
Например, чтобы отобразить значение переменной среды вы должны запустить:
На выходе будет напечатан путь текущего пользователя, вошедшего в систему:
Вы также можете передать команде более одного аргумента:
Если вы запустите команду или без аргументов, она покажет список всех переменных среды:
Результат будет выглядеть примерно так:
Ниже приведены некоторые из наиболее распространенных переменных среды:
- — текущий авторизованный пользователь.
- — домашний каталог текущего пользователя.
- — используемый по умолчанию редактор файлов. Это редактор, который будет использоваться при вводе в терминале.
- — путь к оболочке текущего пользователя, например bash или zsh.
- — имя текущего пользователя.
- — список каталогов, в которых будет производиться поиск при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах в указанном порядке и использовать первый найденный исполняемый файл.
- — текущие настройки локали.
- — текущая эмуляция терминала.
- — Местоположение, где хранится почта текущего пользователя.
Команды и выводят только переменные среды. Если вы хотите получить список всех переменных, включая среду, оболочку, переменные и функции оболочки, вы можете использовать команду :
Команда отобразит большой список всех переменных, поэтому вы, вероятно, захотите передать вывод команде .
Вы также можете использовать команду echo для печати переменной оболочки. Например, чтобы распечатать значение переменной вы должны запустить:
Поиск и вывод переменных окружения
Наиболее часто используемая команда для вывода переменных окружения — . Если команде в качестве аргумента передать имя переменной, то будет отображено значение только этой переменной. Если же вызвать без аргументов, то выведется построчный список всех переменных окружения.
Например, чтобы отобразить значение переменной , вы должны использовать команду:
В результате вы увидите путь к домашнему каталогу текущего пользователя:
Вы также можете передать команде сразу несколько аргументов, например:
Если вы запустите команду или без каких-либо аргументов, то они покажут список всех переменных окружения:
Ниже приведены некоторые из наиболее распространенных переменных окружения:
— текущий пользователь.
— текущая директория.
— предыдущая рабочая директория. Используется оболочкой для того, чтобы вернуться в предыдущий каталог при выполнении команды .
— домашняя директория текущего пользователя.
— путь к оболочке текущего пользователя (например, bash или zsh).
— заданный по умолчанию редактор. Этот редактор будет вызываться в ответ на команду .
— имя пользователя, используемое для входа в систему.
— пути к каталогам, в которых будет производиться поиск вызываемых команд. При выполнении команды система будет проходить по данным каталогам в указанном порядке и выберет первый из них, в котором будет находиться исполняемый файл искомой команды.
— текущие настройки языка и кодировки.
— тип текущего эмулятора терминала.
— место хранения почты текущего пользователя.
— задает цвета, используемые для выделения объектов (например, различные типы файлов в выводе команды будут выделены разными цветами).
Наиболее распространенные переменные оболочки:
— список задействованных параметров оболочки, разделенных двоеточием.
— версия запущенной оболочки bash.
— количество столбцов, которые используются для отображения выходных данных.
— стек директорий, к которому можно применять команды и .
— максимальное количество строк для файла истории команд.
— количество строк из файла истории команд, которые можно хранить в памяти.
— имя текущего хоста.
— внутренний разделитель поля в командной строке (по умолчанию используется пробел).
— определяет внешний вид строки приглашения ввода новых команд.
— вторичная строка приглашения.
— параметры оболочки, которые можно устанавливать с помощью команды .
— идентификатор текущего пользователя.
Команды и выводят только переменные окружения. Если вы хотите получить список всех переменных, включая переменные (и функции) оболочки, то можете использовать команду :
Команда отобразит список всех переменных. Он довольно большой, поэтому я заранее перенаправил вывод в команду .
Чтобы найти все переменные, содержащие заданную строку, используйте команду :
Ниже представлен пример поиска переменных, в названии которых содержится строка :
Для отображения переменных оболочки также можно использовать команду . Например, чтобы вывести в терминал значение переменной , вы должны выполнить: