Обложка: Сборка программ и утилиты терминала Linux. Часть третья

Сборка программ и утилиты терминала Linux. Часть третья

20

Мы уже рассказали об основных командах терминала Linux, а также инструментах для начинающих вроде tmux, GnuPG и Bash. В этой части рассмотрим сборку программ и утилиты терминала Linux.

Инструменты для сборки программ

Речь пойдёт про интерпретируемые программные платформы, доступные в большинстве систем — Python, Perl, awk, Bash. Кроме того, вам понадобится система сборки кода Make.

Код, который пишет программист, часто разделяется на файлы заголовков .h и файлы исходного кода .c.

При этом компилятор gcc делает следующее:

  • При компиляции -S исходный код преобразуется с .c в код сборки .s.
  • При компиляции -c код сборки трансформируется в объектный код .o.
  • Ссылка -l — это ссылка на стандартные библиотеки для создания исполняемого файла.

По умолчанию gcc объединяет вышеуказанные этапы, создавая исполняемый файл.

gcc hello.c — создает a.out, а не .o или .s-файлы.

Система сборки Make

Данная система автоматизирует компиляцию нескольких исходных файлов в сложном проекте, упорядочивает зависимые действия и выполняет их по порядку. После чего ею считывается конфигурация из файла «сборки», обычно именуемого Makefile. В итоге Makefile действует как программный компонент процесса сборки проекта.

Makefile

Процесс работы make-команды

make будет считывать данные из Makefile и запускать команды, чтобы построить конечную цель. Например, в Makefile, показанном выше, make будет запускать команды для правил 2–4, за которыми последует правило 1:

gcc -c dep1.c # создать dep1.o
gcc -c dep2.c # создать dep2.o
gcc -c main.c # создать main.o

gcc -o an_exe main.o dep1.o dep2.o -lm

Утилиты терминала Linux

Чтобы запустить команду в определённое время, используйте at:

at 17:00
at> log_days_activities.sh # иногда можно сократить: at> prompt [Ctrl+D]

at предлагает использование ключевых слов, таких как now, noon, today, tomorrow (сейчас, полдень, сегодня, завтра), а также различные опции, например, часы и дни, которые можно указывать с символом +.

at noon
at now + 1 year
at 3:08pm + 1 day
at 15:01 December 19, 2018

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

Утилита терминала Linux cron позволяет настроить периодический запуск посредством файла crontab, который управляет процессом и определяет, что и когда требуется выполнить. Запись может быть создана в любом файле и добавлена в систему с помощью команды crontab следующим образом:

echo '15 18 30 6 * find /home -mtime +30 -print' > f00
crontab f00 # добавить предыдущую команду в систему crontab

crontab -l # список записей crontab
crontab -r # удалить записи crontab

Вывод команды cron будет осуществляться через почту (в качестве альтернативы она может быть перенаправлена в файл с помощью >).

Анатомия записи в crontab:

crontab

В данном случае получаем следующее: выполнение команды find ежегодно 30 июня в 18:15.

Применение математики

  • Генерация случайных чисел с помощью shuf (может потребоваться установка):
    shuf -i 1-100 -n 1
  • Форматирование чисел с помощью numfmt:
    numfmt --to=si 1000
    1.0K
    numfmt --from=iec 1K
    1024
  • Использование bc в качестве универсального калькулятора:
    bc <<< 48+36 # без пробелов по обе стороны от +
    echo 'obase = 16; ibase = 10; 56 '| bc # десятичное в шестнадцатеричное
    echo 'scale=8; 60/7.02' |bc # произвольная точность

Python-утилиты

  • Если вам нужно установить простой веб-сервер менее чем за минуту, то просто используйте:
    python3 -m http.server 35000
  • Если требуется распечатать файл json:
    python3 -m json.tool afile.json
  • Если требуется запустить небольшие программы на Python:
    python -c "import math; print (str (math.pi) [: 7])"
  • Если требуется применить математику:
    python -c "print(6*6+20)"
    python -c "fctrl=lambda x:0**x or x*fctrl(x-1);
    print(fctrl(6))" # вычислить факториал

Различные полезности

Далее будут приведены всевозможные команды, которые во многом облегчат жизнь рядовому пользователю и сэкономят его время.

  • Чтобы выполнить команду в течение указанного времени с использованием тайм-аута:
    timeout 2 ping google.com
  • Отобразить изменяющуюся переменную:
    watch -n 5 free -m
  • Используйте yes для автоматического подтверждения операций:
    yes | pip install pkg --upgrade
    yes "this is a test" | head -50 > testfile.txt # позволяет создать файл с произвольным количеством строк
  • Создание PDF-файла из текста с помощью vim:
    vim states.txt -c "hardcopy> states.ps | q" &&
    ps2pdf states.ps # позволяет преобразовать .ps в .pdf
  • Запуск команды от имени другой группы Linux:
    sg grpgit -c 'git push'
  • Отображение CSV-файла в формате столбца или таблицы:
    column -t -s , filename.csv
  • В случае, если возникли трудности с отправкой двоичных исполняемых файлов по электронной почте:
    xxd f.exe f.hex # hexdump exe, необходимо просто отправить его по e-mail
    xxd -r f.hex f.exe # конвертируем приёмник обратно в exe
  • Если требуется сгенерировать пароль:
    head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8
    openssl rand 8 -base64 | cut -c1-8 # -base64 8 для конкретной версии
  • Pandoc для конвертации файлов (md, tex, txt, html, docx, pdf, odt):
    pandoc manual.md -o manual.pdf
    pandoc example.txt -o example.html
    pandoc -s example.txt -o example.docx
  • Также можно анализировать и читать файлы XML с помощью xmllint.
  • Чтобы разделить большой файл на небольшие части (например, для отправки в виде вложения по почте):
    split -b 20M large.tgz parts_ # блоки по 20 МБ
    # отправить части__* по почте
    cat parts_a *> large.tgz # на принимающей стороне

Если вы пользуетесь не только Linux, но и Windows, посмотрите наше руководство по Windows PowerShell для начинающих.

Ксения Широкова
Перевод материала из GitHub-репозитория

Что думаете?