Используйте эти переключатели командной строки в своем терминале и сценариях оболочки, чтобы повысить производительность.

Программисты обычно предпочитают работать с интерфейсами командной строки из-за повышенной производительности и сходства CLI с программированием. Они часто автоматизируют повторяющиеся команды с помощью сценариев оболочки. Поэтому разработчики фреймворков и инструментов обычно предлагают CLI-программы с различными подкомандами.

Команда терминала может достигать разных конечных точек: интерпретатора оболочки, предварительно упакованных двоичных файлов ОС или сторонних двоичных файлов. Программа интерпретатора оболочки обычно обрабатывает некоторые встроенные команды. Например, интерпретатор Bash обрабатывает известную команду cd. Между тем, операционные системы также предлагают некоторые встроенные команды в виде предварительно упакованных двоичных файлов. Например, GNU/Linux и Unix предлагают команду touch для создания новых файлов. Кроме того, программисты иногда устанавливают дополнительные внешние интерфейсы командной строки для различных целей разработки. Таким образом, некоторые команды терминала могут запускать сторонние двоичные файлы.

Эти команды поставляются с различными переключателями командной строки, которые мы можем использовать для ускорения наших повседневных задач. Кроме того, некоторые параметры командной строки помогают нам выполнять наши требования к разработке во время сценариев оболочки. В этой статье я объясню некоторые малоизвестные параметры командной строки известных команд, которые вы часто используете. Используйте эти переключатели в сценариях оболочки или терминале, чтобы сэкономить время при программировании!

Рекурсивное создание каталога и сохранение разрешений с помощью mkdir

Мы часто используем команду mkdir в терминалах и сценариях оболочки для создания новых каталогов. Что делать, если вам нужно создать новый каталог внутри несуществующего каталога? Некоторые разработчики используют mkdir дважды с (или без) командой cd. В качестве ярлыка вы можете легко создавать несколько каталогов рекурсивно с помощью опции -p / --parents. Посмотрите на следующую команду:

mkdir -p api/filesystem/impl

Приведенная выше команда создает сразу все дерево каталогов. Как только вы введете указанную выше команду, вы увидите каталог api. Открыв его, вы найдете filesystem, который содержит impl. Что делать, если вам нужно создать каталоги impl и include в filesystem? Чтобы немного усложнить требование, предположим, что вам нужны os и process с filesystem-подобной структурой внутри api.

Это так просто с переключателем -p и расширением фигурной скобки:

mkdir -p api/{filesystem,os,process}/{impl,include}

Теперь у вас есть следующая структура каталогов (tree сгенерировал вывод):

api
├── filesystem
│   ├── impl
│   └── include
├── os
│   ├── impl
│   └── include
└── process
    ├── impl
    └── include

Вы можете пропустить использование chmod для вновь созданных каталогов, используя параметр -m следующим образом:

mkdir -m 777 public

Запуск кода Python из сценариев Bash

Bash — отличный командный язык, который позволяет нам писать сценарии автоматизации на Unix или Unix-подобных платформах. В настоящее время большинство операционных систем, удобных для разработчиков, поставляются с предустановленной версией Bash, поэтому использование Bash для сценариев оболочки является более переносимым вариантом. Bash не предлагает современных языковых функций, и мы не можем использовать C API операционной системы непосредственно в Bash. Поэтому некоторые разработчики склонны писать скрипты автоматизации на Python или Node.js из-за этих недостатков Bash.

Есть быстрый способ вызвать Python из Bash, чтобы сделать то, что вы не можете или трудно сделать в Bash. Вы можете создать подоболочку и запустить интерпретатор Python с помощью переключателя командной строки -c, чтобы запустить код Python и получить вывод в Bash:

#!/bin/bash
a=10
b=20
code="
import json;
print(json.dumps({'a': $a, 'b': $b}, indent=2))
"
json=$(python3 -c "$code")
# Use json content
echo -e "$json" > output.json

Приведенный выше скрипт использует Python для создания красиво напечатанного документа JSON из нескольких переменных Bash. Я показал этот пример, чтобы показать вам еще один параметр командной строки для красивой печати JSON через Python. В Python 3.9 вы можете использовать переключатель --indent для модуля json.tool для красивой печати JSON:

echo '{"a": 10}' | python3.9 -m json.tool --indent 2

Точно так же вы можете использовать свой любимый интерпретатор, чтобы делать вещи, с которыми Bash вряд ли справится. Например, вы можете использовать node -e для запуска JavaScript в Bash.

Рекурсивный листинг и другие полезные опции в ls

Мы часто используем команду ls для просмотра содержимого каталога. В большинстве сценариев мы обычно используем ls без каких-либо параметров командной строки или с хорошо известным параметром -l (длинный список). Но команда ls предлагает больше параметров командной строки, которые мы можем использовать для повышения нашей ежедневной производительности программирования.

Большинство программистов обычно склонны устанавливать команду tree для рекурсивной визуализации содержимого каталога. Встроенный переключатель -R в ls также позволяет рекурсивно визуализировать содержимое каталога с минимальным форматированием:

Что делать, если вам нужно просмотреть статистику файла с помощью рекурсивного листинга? Затем вы можете использовать как -l, так и -R вместе как -lR.

Команда ls -l выводит размер файла в байтах, но вы можете сделать вывод команды более удобочитаемым с помощью опции -h. Как только вы используете переключатель -h, команда будет использовать килобайты, мегабайты и гигабайты вместо байтов:

Понимание этапов компиляции в GNU/GCC

Программисты вступают в мир программирования, изучая различные языки программирования. Некоторые программисты начинают программировать на C/C++ во время учебы. Между тем, большинство программистов-самоучек начинают программировать на современных отраслевых языках, таких как Java, C#, Go и JavaScript. Программирование на C дает программистам больше преимуществ в карьере разработчиков программного обеспечения. Итак, почти во всех университетах сначала преподают C, и программисты-самоучки также склонны экспериментировать с C.

В настоящее время все знают о GNU/GCC, который позволяет компилировать исходные файлы C. Вы знаете, как он обрабатывает фазы в процессе компиляции? Чтобы понять этапы компиляции, вам нужно знать только три параметра командной строки: -E, -S и -c.

Давайте поэкспериментируем со следующей простой программой на C:

#define ERR_CODE 100
int main() {
  return ERR_CODE;
}

Теперь выполните следующую команду, чтобы понять первый шаг компиляции:

gcc -E main.c

Опция -E останавливает процесс компиляции после препроцессинга и выводит препроцессированный код C:

int main() {
  return 100;
}

Следующая команда учит вас второму шагу компиляции:

gcc -S main.c

Опция -S останавливает процесс компиляции после процесса трансляции C-to-Assembly и выводит переведенный, удобочитаемый код сборки:

Наконец, следующая команда создает объектные файлы (т. е. main.o) и останавливает процесс компиляции перед линковкой:

gcc -c main.c

Следующая история объясняет больше об этих внутренних фактах в программировании:



Освоение команд cat и grep

Программисты часто используют команду cat в терминалах, чтобы просмотреть содержимое существующих файлов. По умолчанию команда cat отображает содержимое файла без номеров строк. Вы можете получить номера строк вместе с содержимым с помощью переключателя командной строки -n:

Команда cat также предлагает переключатель командной строки для отображения номеров строк только для непустых строк. Посмотрите на следующую команду:

cat -b languages.txt

В настоящее время современные программы-редакторы кода предлагают встроенные инструменты для поиска сегментов кода в каталогах, но упорные программисты по-прежнему используют grep в таких сценариях. Все мы знаем о ключе командной строки -rn, который рекурсивно ищет и печатает номера строк:

grep -rn "#include <stdio.h>"

Лишь немногие программисты знают о возможности управления контекстом в grep. -C (опция контекста) выводит окружающие строки совпавших строк следующим образом:

Кроме того, переключатель командной строки -c показывает количество совпавших текстовых сегментов для каждого файла! Практикуйте варианты -C и -c, чтобы использовать grep более продуктивно.

Заключение

Мы ежедневно используем команды Linux/Unix и другие программы командной строки. Но лишь немногие программисты просматривают руководства по этим командам, чтобы изучить скрытые, менее известные переключатели командной строки. Кроме того, некоторые разработчики программ CLI часто добавляют в свои программы новые параметры командной строки, ориентированные на производительность, чтобы сэкономить время пользователей CLI, поэтому хорошей идеей будет прочитать примечания к выпуску ваших любимых CLI.

Я нашел вышеупомянутые полезные переключатели командной строки, просматривая руководства. После того, как вы внимательно прочитаете руководства к своим любимым инструментам, вы найдете больше вариантов, ориентированных на производительность! Прочтите следующую историю, чтобы узнать о некоторых продвинутых методах написания сценариев Bash:



Спасибо за прочтение.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Размещение таких разработчиков, как вы, в топовых стартапах и технологических компаниях