bash скрипты установка пакетов
Bash скрипты установка пакетов
Один из читателей просил написать статью про создание скрипта, чтобы автоматически добавить нужные репозитории и установить из них нужные нам пакеты.
То есть, чтобы переустановка системы не доставляла нам проблем с установкой нужных приложений и подключения репозиториев.
Вот собственно об этом и пойдет речь в данной статье.
Для начала опишу команды:
Приступим к практике.
Открываем текстовым редактором.
Для начала нужно обязательно поставить вверху следующее обозначение:
Важное замечание!
Не вводите команды в скрипт используя команду sudo, так как скрипт вы будете запускать с помощью этой команды, и следовательно все команды внутри скрипта будут выполняться от суперпользователя.
А если внесете эту команду в скрипт, то будет спрашивать ввод пароля, а при долгой выполнении одной из команд, прервется сессия суперпользователя, вы пойдете пить чай, а в командной строке будет висеть выполнение задачи. Думаю смысл ясен.
Итак сначала мы записываем команду для обновления информации о пакетах:
Что я хочу донести до вас?
То есть Вы прописываете те команды, что вводите в консоле без sudo для установки тех пакетов что вам нужно.
Только здесь удобнее сначала добавить все репозитории и ключи, а потом уже список пакетов поставить сразу.
После того, как добавили список репозиториев, теперь нужно записать команду для обновления информации о пакетах в репозиториях:
PACKAGES=»p7zip libgcc faad gimp conky»
В этот список вы записываете все пакеты через запятую, которые хотите установить.
Вот таким образом у вас должно получиться нечто такое (для увеличения картинки кликните по ней):
gsettings set org.gnome.gedit.preferences.encodings auto-detected «[‘UTF-8’, ‘WINDOWS-1251’, ‘CURRENT’, ‘ISO-8859-15’, ‘UTF-16’]»
В принципе всё, если будут еще какие-то вопросы специфичные по этому поводу, задавайте в комментариях.
Я постараюсь ответить и в случае чего дополнить статью.
Скрипт автоматической установки приложений
Подскажите, что нужно написать в текстовом файле, чтоб при запуске автоматически устанавливались несколько программ. Пробовал :sudo apt-get install audacity gimp», но толку от этого нету. Спасибо
#!/bin/bash
sudo apt-get install audacity gimp
сделать исполняемым и запустить
Спасибо, сейчас попробую
А запускать его не от рута надо ли? Разве указанное в башевом скрипте судо будет работаь? Его ж надо вроде еще настроить, чтобы пароль на спрашивал.
А как сделать так, чтоб устанавливались проги, названия которых состоят из нескольких слов? Напр. Adobe Flash Player
Вы ничего не перепутали? И вообще, сабж сам по себе странный, зачем вам при каждой загрузке устанавливать софт?
>Вы ничего не перепутали? И вообще, сабж сам по себе странный, зачем вам при каждой загрузке устанавливать софт?
один минимальный набор софта на все машины, не?
и про каждую загрузку вроде нет речи.
Этот скрипт не для автозапуска, я хочу его использовать на свежеустановленной системе, чтоб установить убунту, затем 2 раза кликнуть, 1 раз стукнуть по бубну и все нужные и удобные для меня проги уже установлены. Так как это реализовать?))
точнее просто набор необходимого софта
не вбивать же на каждой одно и тоже )
мне кажется вы изобретаете велосипед, анпишите sudo aptitude install и нужные проги, зачем скрипт-то?
вот если не на одну машину, а на несколько ставить одно и тоже то можно заморочиться
Ну со скриптом интереснее + писать много тоже не охота, темболее все программы не запомнишь.. Напишите пожалуйста пример скрипта)
Хм, как-то даже не подумал. Если собирать свой, то да, вероятно имеет смысл.
sudo убери и запускай как
sudo sh скрипт
например
Что-то я упоролся. Теперь всё понял. :>
Ага, а как устанавливать программы типо furius iso mount, ну тоесть как записать установку в скрипт?
#!/bin/bash
aptitude install xserver-xorg-core xinit openbox obconf lxterminal lxappearance slim leafpad pcmanfm tint2
Synaptic умеет работать со списками отметок. За аналог в APT не интересовался.
А как ты в скрипте определеяешь, установилось приложение или нет? Ведь все части алгоритма скрипт будетв ыполнять мгновенно, если не пописаны задержки. А, стало быть, если при запущенном дпкг (ну или что там у тебя), пока у тебя не выполнится установка первого пункта, второй не будет устанавливаться. Точнее скрипт то вродк как отработает, или ошибку напишет, но приложение поставлено не будет.
хм, а как реализовать задержки, или запуск установки сразу по окончании предыдущей?
между командами вставлять && не?
самое простое
хм, а как реализовать задержки, или запуск установки сразу по окончании предыдущей?
Хотя если ты напишешь так, как написал влан, то все будет хорошо. Я что-то тоже упоротый какой-то, решил, что ты все будет писать в виде
Создаешь файл и редактишь его редактором нано
Делаешь его исполняемым (запускаемым)
Скрипт для тех, кому лень разбираться в Linux
Да мне и самому надоело лазить по специализированным форумам, каждый раз, когда приходится сделать шаг влево или шаг вправо относительно того, что я уже научился делать. Именно поэтому, со временем, все типовые вещи я свёл в один скрипт с дружелюбным интерфейсом, который умеет делать всё сам. Начиналась всё с малого. Скрипт просто автоматизировал установку нужного мне софта. Но за полгода он превратился уже в весьма серьёзную утилиту весом более 100 Кб, в которой около 2,5 тысяч строк кода. Скрипт ранее нигде не выкладывался. Использовался только в личных целях мной и несколькими моими товарищами. Пришло время им поделиться с публикой. Уверен, многим людям он способен сэкономить кучу времени.
Чтобы понять, что он умеет, проще всего глянуть на заглавный скриншот:
Информация о системе
Этот раздел в дружелюбной форме выводит информацию об этом сервере. Что за железо, какая ОС, какой IP-адрес. Причём, IP адрес он сначала пытается определить по интерфейсу, но т.к. бывают VPS без выделенного IP-адреса (за NAT), далее скрипт лезет в интернет и с помощью сторонних сайтов смотрит с какого IP пришли запросы и показывает реальный внешний IP-адрес (на это тратится пара секунд). Выглядит это информационное окно так:
Работа с ОС
В этом разделе собрано несколько как мелких утилит, типа смены пароля root, установки часового пояса, обновление ОС, добавление репозитория, установка популярных приложений (типа midinght commander), так и несколько более серьезных, на которых остановлюсь подробнее:
Установка панели управления хостингом
Очень часто Linux используется именно для хостинга, но руками настраивать там все сервисы типа: Apache, Nginx, PHP, MySQL, почтовый демон и так далее — совсем непросто для новичков. Большинство предпочитает установить какую-либо панель управления. Но даже её нужно сначала как-то установить. В своём скрипте я собрал пять бесплатных панелей управления сайтом (Vesta CP, Webuzo, CWP, ZPanel, Ajenti) и платную ISPmanager (которая является, пожалуй, самой распространенной панелью в России). Про каждую панель есть небольшое описание, системные требования. Выбираем нужную панель, скрипт сам её скачает с официального сайта (свежую версию) и установит.
Работа с VPN
В последнее время многие заводят себе VPN для того, чтобы получить преимущества пользователей других географических зон. Например, обход запретов РосКомНадзора, использование каких-то внутренних американских или европейских сервисов и так далее. Многие для этого покупают готовые VPN-сервисы. Но значительно дешевле купить себе VPS в нужной стране и поднять свой собственный VPN. Вот только не все умеют его настраивать. С помощью этого скрипта вам нужно просто отвечать на вопросы и всё. Весь нужный софт установится сам, в firewall пропишутся нужные правила. Вы сможете просматривать, добавлять и удалять пользователей, которым разрешен доступ. Причём скрипт проанализирует какая у вас ОС и сделает всё, учитывая особенности конкретно этой ОС.
Работа с Proxy
Работа с файлами и программами
В этом разделе можно установить нужную программу (пакет) или удалить. Причём самое полезное там — это именно правильное удаление. Дело в том, что при установке какой-либо программы очень часто к ней устанавливается несколько сопутствующих пакетов, необходимых для её работы. И зачастую, размер этих дополнительных пакетов превышает размер собственно той программы, которую вы устанавливали. Но вот при удалении вашей программы удалится только сама программа, а все пакеты, которые были нужны для её (и только её) работы — останутся и продолжат занимать место. В моём скрипте я предусмотрел полное удаление программы — со всем дополнительным софтом, который ставился вместе с ней. В скрипте просто указываем название программы, дальше скрипт всё сделает сам.
Очистка системы
В случае активного использования сервера под хостинг, часто копится огромное количества логов доступа к сайтам. Объём всего этого мусора иногда может достигать гигабайт. Не все знают где и как это удалять. В этом разделе можно почистить эти логи. Удаляются логи Apache и Nginx, как целиком, так и конкретного пользователя. Кроме этого, из этого раздела можно удалить старые установочные пакеты, которые по умолчанию остаются на диске после установки софта и продолжают занимать место.
На этом, собственно, пока всё. В планах, конечно, много что ещё хочется добавить. Например, бенчмарк, для оценки производительности различных компонентов сервера. Расширить поддержку других ОС и так далее. По мере сил и времени, я собственно этим и занимаюсь. Но, уже сейчас, он выполняет довольно много функций, востребованных новичками и способен сильно упростить им жизнь.
Теперь собственно, очень важный вопрос. А на каких дистрибутивах Linux всё это работает? На всех версиях CentOS. А также, на всех прочих производных от Red Hat Enterprise Linux дистрибутивах (например, Scientific Linux). Почему именно RHEL? Ну скрипт я писал для себя, а мне CentOS ближе. Ну и если говорить о целевой аудитории данного скрипта (новички), то им, как правило, без разницы на каком дистрибутиве работать. Ведь обычно они одинаково плохо знают любой из них. А RHEL весьма неплох, стабилен, нетребователен к ресурсам, ну и, самое главное, присутствует почти у каждого хостера VPS. Версию CentOS при этом можно выбрать любую (5, 6, 7), как и разрядность. Для всех действий скрипт анализирует какая версия дистрибутива и учитывает специфику именно этой версии. Я, обычно, выбираю дистрибутив CentOS 6.x (можно Minimal) с разрядностью 64 бита.
Ну и самое главное. Как собственно обзавестись этим скриптом? Вот тут можно посмотреть весь исходный код. Также проект выложен на гитхабе. Ссылка: github.com/Brizovsky/Breeze-Easy-Shell
Всё что вам нужно, чтобы его использовать — это создать файл [название].sh и засунуть в него это содержимое. После чего запустить командой «sh [название].sh». Создать его можно как на сервере, так и на своем компьютере, а потом скопировать на сервер. Есть еще один вариант установки — выкачать на сервере прямо с гитхаба. Лично я делаю это вот так:
После этого под рутом в терминале одной командой «breeze» запускаю его.
P.S. Вообще, частенько возникает вопрос доверия использования чужих скриптов и это правильно. Но прелесть скриптов на bash в том, что перед их запуском можно открыть и посмотреть его. И убедиться в том, что он не делает ничего плохого. Функцию обновления скрипта вас использовать никто не заставляет. В общем-то, вас вообще никто не заставляет его использовать. Всегда можно просто посмотреть как настраивается VPN, Proxy и прочие вещи и вручную вколотить пару десятков команд, разобравшись в них. Обилие комментариев в коде даже поможет в них разобраться.
UPD: За год скрипт прилично обновился. Во-первых, теперь он культурно обновляется с гитхаба, а не из подозрительных источников (в самой статье ссылки заменил), во-вторых, появилось много нового. Например, свое развитие получила функция очистки диска, стала очищать намного больше [кому-то ненужных] логов. Появилась функция бенчмарка (проверяем скорость работы диска и процессора), что позволяет сравнивать и оценивать различные VPS между собой.
Основные команды bash, git, npm и yarn, а также немного о package.json и semver
Доброго времени суток, друзья!
Предлагаю вашему вниманию небольшую шпаргалку по основным командам bash, git, npm, yarn, package.json и semver.
Условные обозначения: [dir-name] — означает название директории, | — означает «или».
Рекомендую вводить каждую команду в терминале и внимательно изучать вывод, так вы быстро их запомните и определите, какие команды вам нужны, а какие нет.
Приношу извинения за возможные ошибки и опечатки. Буду рад любым замечаниям и предложениям.
Без дальнейших предисловий.
bash представляет собой инструмент командной строки, позволяющий выполнять некоторые распространенные действия.
Установка: в моем случае bash был установлен вместе с git.
Выход из терминала:
Путь к текущей директории:
Копирование, перемещение и удаление файла:
Вывод в терминал строки:
git представляет собой распределенную систему контроля версий, позволяющую контролировать процесс внесения изменений в проект.
Удаление файлов и директорий:
Просмотр состояния репозитория:
Добавление сообщения (коммита):
Просмотр разницы между коммитами:
Просмотр истории изменений:
Разрешение конфликтов при слиянии:
Сохранение незакоммиченных изменений:
Автозавершение повторных конфликтов:
npm представляет собой пакетный менеджер, позволяющий устанавливать зависимости проекта.
npm устанавливается вместе с Node.js.
Также вместе с Node.js устанавливается npx, позволяющий запускать исполняемые файлы без установки: npx create-react-app my-app.
Список доступных команд:
Принудительная переустановка зависимостей:
Установка только продакшн-пакетов:
Добавление зависимости для разработки:
Глобальная установка/обновление/удаление пакета:
Определение устаревших пакетов:
Список установленных зависимостей:
Информация о пакете:
Запуск скрипта/выполнение команды:
Удаление дублирующихся пакетов:
Удаление посторонних пакетов:
Обнаружение уязвимостей (угроз безопасности):
Автоматическое исправление уязвимостей:
yarn, как и npm, представляет собой пакетный менеджер, позволяющий устанавливать зависимости проекта.
Команда «yarn dlx» позволяет запускать исполняемые файлы без установки: yarn dlx create-react-app my-app. Для этого yarn необходимо обновить до второй версии: yarn set version berry.
Список доступных команд:
Принудительная переустановка зависимостей:
Установка только продакшн-пакетов:
Добавление зависимости для разработки:
Глобальная установка/обновление/удаление пакета:
Список установленных зависимостей:
Информация о пакете:
Запуск скрипта/выполнение команды:
package.json
Файлы «package-lock.json» и «yarn.lock» содержат более полную информацию об установленных пакетах, чем package.json, например, конкретные версии пакетов вместо диапазона допустимых версий.
Версионирование
Каждый пакет имеет версию, состоящую из трех цифр (например, 1.0.0), где первая цифра — мажорная версия (major), вторая — минорная версия (minor), третья — патчевая версия (патч, patch). Выпуск новой версии называется релизом.
Увеличение каждой из этих цифр согласно правилам семантического версионирования (semver) означает следующее:
Bash-скрипты: начало
Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.
Сценарии командной строки — это наборы тех же самых команд, которые можно вводить с клавиатуры, собранные в файлы и объединённые некоей общей целью. При этом результаты работы команд могут представлять либо самостоятельную ценность, либо служить входными данными для других команд. Сценарии — это мощный способ автоматизации часто выполняемых действий.
Итак, если говорить о командной строке, она позволяет выполнить несколько команд за один раз, введя их через точку с запятой:
На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd выводит на экран сведения о текущей рабочей директории, потом команда whoami показывает данные о пользователе, под которым вы вошли в систему.
Используя подобный подход, вы можете совмещать сколько угодно команд в одной строке, ограничение — лишь в максимальном количестве аргументов, которое можно передать программе. Определить это ограничение можно с помощью такой команды:
Командная строка — отличный инструмент, но команды в неё приходится вводить каждый раз, когда в них возникает необходимость. Что если записать набор команд в файл и просто вызывать этот файл для их выполнения? Собственно говоря, тот файл, о котором мы говорим, и называется сценарием командной строки.
Как устроены bash-скрипты
Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:
Тут, так же, как и в командной строке, можно записывать команды в одной строке, разделяя точкой с запятой. Однако, если писать команды на разных строках, файл легче читать. В любом случае оболочка их обработает.
Установка разрешений для файла сценария
Попытка запуска файла сценария с неправильно настроенными разрешениями
Сделаем файл исполняемым:
Теперь попытаемся его выполнить:
После настройки разрешений всё работает как надо.
Успешный запуск bash-скрипта
Вывод сообщений
Вот что получится после запуска обновлённого скрипта.
Вывод сообщений из скрипта
Использование переменных
Переменные позволяют хранить в файле сценария информацию, например — результаты работы команд для использования их другими командами.
Нет ничего плохого в исполнении отдельных команд без хранения результатов их работы, но возможности такого подхода весьма ограничены.
Существуют два типа переменных, которые можно использовать в bash-скриптах:
Переменные среды
Иногда в командах оболочки нужно работать с некими системными данными. Вот, например, как вывести домашнюю директорию текущего пользователя:
Использование переменной среды в сценарии
А что если надо вывести на экран значок доллара? Попробуем так:
В подобной ситуации поможет использование управляющего символа, обратной косой черты, перед знаком доллара:
Теперь сценарий выведет именно то, что ожидается.
Использование управляющей последовательности для вывода знака доллара
Пользовательские переменные
В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.
Как и в случае с системными переменными, к пользовательским переменным можно обращаться, используя знак доллара:
Вот что получится после запуска такого сценария.
Пользовательские переменные в сценарии
Подстановка команд
Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её переменным, что позволяет использовать эту информацию где угодно в файле сценария.
Сделать это можно двумя способами.
При втором подходе то же самое записывают так:
А скрипт, в итоге, может выглядеть так:
Скрипт, сохраняющий результаты работы команды в переменной
Математические операции
Математические операции в сценарии
Управляющая конструкция if-then
А вот рабочий пример:
В данном случае, если выполнение команды pwd завершится успешно, в консоль будет выведен текст «it works».
Вот что получается после запуска этого скрипта.
В этом примере, если пользователь найден, скрипт выведет соответствующее сообщение. А если найти пользователя не удалось? В данном случае скрипт просто завершит выполнение, ничего нам не сообщив. Хотелось бы, чтобы он сказал нам и об этом, поэтому усовершенствуем код.
Управляющая конструкция if-then-else
Напишем такой скрипт:
Запуск скрипта с конструкцией if-then-else
Ну что же, продолжаем двигаться дальше и зададимся вопросом о более сложных условиях. Что если надо проверить не одно условие, а несколько? Например, если нужный пользователь найден, надо вывести одно сообщение, если выполняется ещё какое-то условие — ещё одно сообщение, и так далее. В подобной ситуации нам помогут вложенные условия. Выглядит это так:
Сравнение чисел
В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.
В качестве примера опробуем один из операторов сравнения. Обратите внимание на то, что выражение заключено в квадратные скобки.
Вот что выведет эта команда.
Сравнение чисел в скриптах
Значение переменной val1 больше чем 5, в итоге выполняется ветвь then оператора сравнения и в консоль выводится соответствующее сообщение.
Сравнение строк
В сценариях можно сравнивать и строковые значения. Операторы сравнения выглядят довольно просто, однако у операций сравнения строк есть определённые особенности, которых мы коснёмся ниже. Вот список операторов.
Вот пример сравнения строк в сценарии:
В результате выполнения скрипта получим следующее.
Сравнение строк в скриптах
Вот одна особенность сравнения строк, о которой стоит упомянуть. А именно, операторы «>» и « » как команду перенаправления вывода.
Вот как работа с этими операторами выглядит в коде:
Вот результаты работы скрипта.
Сравнение строк, выведенное предупреждение
Обратите внимание на то, что скрипт, хотя и выполняется, выдаёт предупреждение:
Теперь всё работает как надо.
Она отсортирует строки из файла так:
Если его запустить, окажется, что всё наоборот — строчная буква теперь больше прописной.
Команда sort и сравнение строк в файле сценария
В командах сравнения прописные буквы меньше строчных. Сравнение строк здесь выполняется путём сравнения ASCII-кодов символов, порядок сортировки, таким образом, зависит от кодов символов.
Проверки файлов
Пожалуй, нижеприведённые команды используются в bash-скриптах чаще всего. Они позволяют проверять различные условия, касающиеся файлов. Вот список этих команд.
Эти команды, как впрочем, и многие другие рассмотренные сегодня, несложно запомнить. Их имена, являясь сокращениями от различных слов, прямо указывают на выполняемые ими проверки.
Опробуем одну из команд на практике:
Этот скрипт, для существующей директории, выведет её содержимое.
Вывод содержимого директории
Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.
Итоги
Сегодня мы рассказали о том, как приступить к написанию bash-скриптов и рассмотрели некоторые базовые вещи. На самом деле, тема bash-программирования огромна. Эта статья является переводом первой части большой серии из 11 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.
Уважаемые читатели! Просим гуру bash-программирования рассказать о том, как они добрались до вершин мастерства, поделиться секретами, а от тех, кто только что написал свой первый скрипт, ждём впечатлений.