Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.
Хой, джедаи и амазонки!
Перешёл к изучение смежной технологии по отношению к языку программирования - git и онлайн-платформе гитхаб. С Гитом работаю не в графическом интерфейсе, а через командную строку. А это не так просто, но и не сложно. Скорее, непривычно.
Сегодня об опыте применения терминала в Linux. Публикация оформлена как обычно: немного теории, а затем практика.
1. Мир боится времени, а время боится CLI*
*CLI расшифровывается как Command Line Interface (интерфейс командной строки), он же терминал. Я перефразировал арабскую пословицу, чтобы показать - общепринятые консольные команды со времён появления операционной системы Unix практически не изменились, и предпосылок к их изменению не предвидится.
Ниже пример работы с терминалом:
Стоит добавить, что в разных дистрибутивах Linux bash-команды используются по-разному, и одна и та же CLI может в одной сборке Linux отработать корректно, а в другой сборке - неожиданным образом, в т.ч. выдать ошибку.
Bash-команда – это команда, которую можно выполнить в командной оболочке Bash (Bourne Again SHell). Bash является одной из наиболее распространенных командных оболочек в Linux и других Unix-подобных операционных системах.
А вот в Windows, например, любая команда из MS DOS 2.0 1983 г. издания, корректно отработает и в Windows 10 (хотя в MS DOS 2.0 по сравнению с более ранними версиями, внесены существенные изменения, в т.ч. UNIX-подобная иерархическая файловая система). Практически с "древних времён" ничего не поменялось.
Bash-команды представляют собой текстовую информацию, которая вводится пользователем в терминале (или исполняются в скриптах на языке Bash). Команды вводятся в виде строк и состоят из имени команды, опций (флагов) и аргументов.
Скрипт – это текстовый файл, содержащий набор команд, которые могут быть выполнены в определённой последовательности. Скрипты обычно используются для автоматизации задач и процессов на компьютере. Они могут содержать команды операционной системы, команды для запуска приложений, обработки данных и многие другие действия. С помощью скриптов пользователи могут создавать удобные сценарии для выполнения рутиных операций, что значительно упрощает рутинные задачи и повышает производительность.
"Под капотом" bash-команд находятся утилиты, т.е. небольшие программы, которые выполняют определённые функции.
Примеры bash-команд:
- ls – посмотреть содержимое директории;
- cd – изменить директорию;
- mkdir – создать директорию;
- cp – копировать файлы или директории;
- rm – удалить файлы или директории.
Bash-команды позволяют пользователю выполнять различные операции в терминале, взаимодействовать с файловой системой, управлять процессами и многое другое. Они являются основным инструментом для работы с командной строкой в среде Linux и Unix.
По правде говоря, когда я приступил к изучению работы с терминалом, возникло дежавю: я снова на уроках информатики в институте, где мы работали с командной строкой в MS-DOC.
Мы изучали терминал скорее, как дань истории, а не для применения практике.
1.1. Зачем нужна CLI в современном мире?
Есть два типа компьютеров: клиенты и серверы. В упрощённом виде клиенты - обычные ПК/ноутбуки/смартфоны, которые запрашивают информацию в интернете. Серверы - предоставляют информацию клиентам. На клиенты как-бы "скачивается" кусочек интернета, когда мы открываем сайты или смотрим видео/слушаем музыку через браузер.
На клиентах работают как обычные люди, так и программисты. С серверами работают программисты.
Для обычных людей в 99% нужен графический интерфейс. Для работы программистов помимо графического интерфейса нужен терминал.
Командная строка (CLI) остается важным инструментом в современном мире по нескольким причинам:
- Гибкость и автоматизация: CLI позволяет выполнять широкий спектр задач с помощью команд и скриптов. Это дает возможность автоматизировать повторяющиеся задачи, упрощает управление и конфигурирование систем и позволяет легко изменять и настраивать параметры в соответствии с потребностями.
- Удаленное управление: CLI обеспечивает возможность управлять удаленными компьютерами или серверами через сеть. Это может быть полезным для администрирования, мониторинга, управления ресурсами и доставки приложений на удаленные системы.
- Скорость и эффективность: CLI позволяет быстро выполнять задачи без необходимости визуальных интерфейсов или графической оболочки. Команды могут быть выполнены быстро и эффективно, особенно для опытных пользователей, что сокращает время выполнения задач.
- Интеграция с другими инструментами: CLI хорошо интегрируется с другими инструментами и позволяет использовать их функциональные возможности через команды и скрипты. Это позволяет создавать сложные рабочие процессы и использовать компоненты разных систем вместе.
- Универсальность: CLI доступен на различных операционных системах и позволяет использовать одинаковые команды и скрипты независимо от платформы. Это обеспечивает единообразие и переносимость при разработке и автоматизации задач.
В целом, CLI остается востребованным инструментом в современном мире благодаря своей гибкости, эффективности и возможности автоматизации задач. Он является неотъемлемой частью инструментария для программистов, системных администраторов и разработчиков ПО.
1.2. CLI vs Графический интерфейс
CLI и графический интерфейс (GUI) имеют свои преимущества, и выбор между ними зависит от конкретных задач и предпочтений пользователя. Основные пункты отличий уже указаны в разделе выше, хочу копнуть глубже.
Вот некоторые преимущества CLI по сравнению с графическим интерфейсом:
- Эффективность: CLI позволяет выполнять задачи быстро и эффективно. Команды могут быть выполнены непосредственно из командной строки без необходимости навигации по меню или щелчков мыши. Опытные пользователи могут более оперативно выполнять задачи и иметь больше контроля над процессом.
- Гибкость и автоматизация: CLI предоставляет мощные инструменты для автоматизации задач. С помощью скриптов и командных файлов можно создавать сложные рабочие процессы, автоматизировать повторяющиеся задачи и настраивать систему под свои нужды. Это обеспечивает большую гибкость и контроль над рабочим процессом.
- Удаленное управление: CLI позволяет администраторам удаленно управлять системами через сеть. Это особенно полезно для работы с удаленными серверами или для управления компьютерами без графической оболочки. CLI обеспечивает удобство и гибкость при удаленном администрировании.
- Скриптование и автоматизация: CLI позволяет создавать скрипты для автоматического выполнения задач. Это удобно для повторяющихся действий, таких как обработка файлов, обновление данных или автоматическое развертывание приложений. Скриптование позволяет повысить производительность и делает процесс более надежным за счет исключения человеческих ошибок.
- Более маленький размер: CLI имеет меньший размер по сравнению с графическим интерфейсом и требует меньше ресурсов системы. Это особенно важно для систем с ограниченными ресурсами или удаленными серверами, где каждый байт и вычислительная мощность важны.
В то же время, следует отметить, что графический интерфейс обеспечивает более интуитивное взаимодействие с пользователем, визуальные отображения и большую доступность для новичков. Выбор между CLI и графическим интерфейсом зависит от целей пользователя, задач и предпочтений в использовании компьютера.
2. Личный опыт
Начал больше работать с CLI, когда вместо Linux Mint Cinnamon установил Linux Manjaro.
Manjaro сильно отличается от Mint'a. Нужно больше работать с терминалом. И нужно осваивать bash-команды.
Где-то в паблике видел такой мем:
Манджаро там в двух местах. Будем считать, что это определённый уровень развития в опыте общения с Linux после Mint'a.
Поработал я с терминалом, и мне даже немного понравилось.
Кстати, с терминалом можно работать и из самой IDE - со встроенным, имею ввиду. А не только запускать из терминала IDE условное go run main.go или test.go.
2.1. Создание файла в терминале
Было задание в курсе: создать такой-то файл в такой-то директории. Вместо привычного файл-создать и т.д., я в терминале выполнил следующее:
- Проверил содержимое директории командой ls. //Можно не выполнять
- Создал файл main.go командой touch.
- Повторно проверил содержимое директории чтобы удостовериться появление нового файла. //Можно не выполнять
Можно отредактировать содержимое созданного файла здесь же, вне IDE, например, запустив утилиту nano:
Текст набран, можно закрывать утилиту и запускать go run:
Вы можете задать вопрос - в чём смысл редактировать или даже создавать код с нуля в терминале, используя утилиты, вместо привычной работы в IDE? Я об этом писал в разделе 1, будет полезно обговорить этот момент, глядя со стороны IDE:
Работа с сервером без GUI (graphical user interface): на серверных системах, где отсутствует графический интерфейс, терминальные утилиты являются единственным способом редактирования файлов.
Часто бывает более удобно создавать или редактировать файлы в интегрированной среде разработки (IDE) на локальном компьютере, особенно при работе с большим объемом текста и сложным форматированием. После завершения редактирования файлы могут быть загружены на сервер.
Однако, есть ситуации, когда непосредственное редактирование текста через терминал на сервере может быть более эффективным:
- Быстрый доступ: Некоторые операции с файлами могут потребовать быстрого доступа к серверу без необходимости загрузки и синхронизации файлов.
- Автоматизация: Если требуется автоматизировать процессы с помощью скриптов или командной строки, непосредственное редактирование файлов на сервере может быть более удобным.
- Проверка в реальном времени: При отладке программного обеспечения на сервере иногда требуется вносить изменения в файлы прямо на сервере для наблюдения за изменениями в реальном времени.
Таким образом, выбор между редактированием файлов через терминал на сервере и с использованием IDE на клиентском компьютере зависит от специфики задачи, индивидуальных предпочтений пользователя и удобства в конкретной ситуации.
В общем, работая в backend полезно уметь редактировать или даже создавать программы в терминале.
Поделюсь ещё лайфхаком. В части создания коротких команд, которые выполняют определённые действия. Например, у меня боль - каждый раз при запуске терминала переходить из домашней директории в каталог рабочего проекта.
Да, в IDE терминал сразу открывается в нужном каталоге, но если ты работаешь через терминал OS, каждый раз нужно прописывать вручную что-то вроде:
cd /home/ev/Документы/Практика/
Упросить работу помогут алиасы.
2.2. Алиасы
Здесь после команд, описанных в разделе 2.1 я сделал вот что:
- Показал, как происходит переход в рабочую директорию из директории домашней - много символов в команде cd /home/ev/Документы/Практика/.
- Создал алиас job.
- Перешёл в домашнюю директорию командой cd.
- Проверил путь домашней директории командой pwd.
- Запустил команду job - перешёл в рабочую директорию.
- Сохранить внесённые изменения командой: ~/.bashrc *см. примечание в конце раздела.
Сравните:
cd /home/ev/Документы/Практика/ vs job
Алиасы бывают полезны, когда часто пользуешься одной командой. Либо написали собственную утилиту, которой хотите пользоваться в командной строке.
Создаются алиасы так:
alias new_command='original_command'
Если не сохранить создание алиаса, то при следующем запуске терминала / перезапуске компьютера, эти настройки не сохраняться. Пункт 6 из списка выше, нужен чтобы сохранить изменения. Если возникнут сложности с этим пунктом, попробуйте открыть файл ~/.bashrc и прописать изменения напрямую в него, например в конец файла.
Алгоритм работы с файлом:
1. Сперва открываем файл утилитой nano
nano ~/.bashrc
2. Затем прописываем информацию в файл. Ниже на скрине пример что написано у меня в конце файла:
3. Записываем информацию через Ctrl+O.
4. Нажимаем Enter для сохранения файла в начальным именем.
5. Выходим из программы nano нажатием Ctrl+X.
Готово! Если будут иные ошибки, возможно, вам следует прописать информацию в другой файл. Это может быть связано с использованием другой операционной системы или другого терминала.
2.3. Полезные команды
Далее покажу шорт-лист полезных команд для работы в терминале:
- ls - список файлов и папок в текущем каталоге. Пример: ls -l, где флаг -l отображает длинный формат списка.
- cd - изменение текущего рабочего каталога. Пример: cd /home/user/documents, где /home/user/documents - путь к новому каталогу.
- mkdir - создание нового каталога. Пример: mkdir new_directory, где new_directory - имя нового каталога.
- rm - удаление файлов или каталогов. Пример: rm file.txt, где file.txt - имя удаляемого файла.
- cp - копирование файлов и каталогов. Пример: cp file.txt new_location/, где file.txt - имя копируемого файла, new_location/ - путь к новому месту.
- mv - перемещение файлов и каталогов. Пример: mv file.txt new_location/, где file.txt - имя перемещаемого файла, new_location/ - путь к новому месту.
- grep - поиск по содержимому файлов. Пример: grep "search_term" file.txt, где "search_term" - строка для поиска, file.txt - файл, в котором производится поиск.
По поводу первой команды ls и алиасов. Может быть полезно создать алиас команды ls который используется с флагом -a. Эта команда показывает содержимое директории со скрытыми файлами.
Пример создания этой команды на иллюстрации в разделе выше, где я показывал содержимое моего файла конфигурации оболочки bash .bashrc.
3. Выводы
Познакомились с терминалом в Linux. Прояснили, что командная строка - это не пережиток прошлого, а насущная необходимость backen-разработчика. Изучили некоторые команды в терминале, немного познакомились с настройками - что под капотом у терминала. В общем, стали чуть опытнее.
А как вы работаете с терминалом: терминал OS или терминал IDE, общались ли уже с сервером? Какие знаете лайфхаки? Напишите в комментарии.
На сегодня всё. Спасибо, что дочиталb публикацию до конца. Верьте в себя и свои силы, развивайте себя и свой ум. Будьте добродушными в общем, а где нужно - злыми. Будем на связи.
Бро, ты уже здесь? 👉 Подпишись на канал для новичков «Войти в IT» в Telegram, будем изучать IT вместе 👨💻👩💻👨💻