Часть 1: Управление пакетами (APT)
Базовые команды:
bash
# Обновление списка пакетов (уже знаете) sudo apt update # Установка конкретного пакета sudo apt install nano # Установка нескольких пакетов sudo apt install htop wget curl # Установка конкретной версии пакета sudo apt install python3=3.8.10-0ubuntu1~20.04 # Просмотр доступных версий пакета apt list -a python3 # Поиск пакета apt search "текст поиска" apt search python | grep python3 # Показать информацию о пакете apt show python3 # Показать зависимости пакета (что нужно для установки) apt depends python3 # Показать, какие пакеты зависят от этого apt rdepends python3 # Удаление пакета sudo apt remove nano # Удаление пакета с конфигурационными файлами sudo apt purge nano # Автоудаление ненужных зависимостей sudo apt autoremove
Пример 1: Установка определенной версии Node.js
bash
# 1. Посмотреть какие версии доступны apt list -a nodejs # 2. Установить конкретную версию sudo apt install nodejs=12.22.9~dfsg-1ubuntu3 # 3. Проверить установленную версию node --version
Пример 2: Ручная установка зависимостей
bash
# Допустим, нужно установить пакет 'nginx'
# 1. Смотрим зависимости
apt depends nginx
# 2. Можем скачать пакет и все зависимости локально
mkdir ~/nginx_packages
cd ~/nginx_packages
# Скачиваем пакет и зависимости
apt download nginx $(apt-cache depends nginx | grep Depends | awk '{print $2}')
# 3. Устанавливаем из локальных файлов
sudo dpkg -i *.deb
Пример 3: Работа с .deb пакетами
bash
# Скачать .deb пакет вручную wget https://example.com/package.deb # Установить локальный .deb файл sudo dpkg -i package.deb # Если не хватает зависимостей, исправить sudo apt --fix-broken install # Создать список установленных пакетов dpkg --get-selections > installed_packages.txt # Восстановить из списка на другой системе sudo dpkg --set-selections < installed_packages.txt sudo apt-get dselect-upgrade
Задачи по управлению пакетами:
Задача 1: Установить специфичное ПО
text
1. Установите текстовый редактор vim 2. Установите версию Python 3.8 (если доступна) 3. Установите старую версию curl (например, 7.68.0) 4. Удалите vim, но оставьте конфигурационные файлы
Задача 2: Исследование зависимостей
text
1. Узнайте, какие пакеты зависят от 'libc6' 2. Найдите все пакеты, содержащие 'docker' в названии 3. Скачайте пакет 'htop' и все его зависимости в папку ~/htop_deps 4. Установите htop из локальных файлов
Задача 3: Чистка системы
text
1. Найдите и удалите неиспользуемые зависимости 2. Найдите пакеты, установленные вручную (не как зависимости) 3. Сохраните список всех установленных пакетов в файл
Часть 2: Работа с переменными окружения
Базовые команды:
bash
# Показать текущую оболочку (echo $0 - вы уже знаете) echo $SHELL # Показать все переменные окружения env printenv # Показать конкретную переменную echo $PATH echo $HOME echo $USER # Создать переменную (локальная для сессии) MY_VAR="Hello World" echo $MY_VAR # Экспортировать переменную (для дочерних процессов) export MY_GLOBAL_VAR="Global Value" # Проверить, является ли переменная экспортированной export | grep MY_GLOBAL_VAR # Добавить путь к PATH export PATH=$PATH:/home/user/my_scripts # Сделать изменение постоянным (добавить в ~/.bashrc) echo 'export MY_VAR="value"' >> ~/.bashrc source ~/.bashrc # Создать переменную только для чтения readonly MY_CONSTANT="Cannot change me" # Удалить переменную unset MY_VAR
Пример 4: Настройка PATH для скриптов
bash
# 1. Создадим папку для своих скриптов mkdir -p ~/my_scripts # 2. Создадим простой скрипт echo '#!/bin/bash echo "Hello from custom script!"' > ~/my_scripts/hello.sh # 3. Дадим права на выполнение chmod +x ~/my_scripts/hello.sh # 4. Добавим папку в PATH временно export PATH=$PATH:~/my_scripts # 5. Теперь можем запускать отовсюду hello.sh # 6. Сделать постоянным echo 'export PATH=$PATH:~/my_scripts' >> ~/.bashrc source ~/.bashrc
Пример 5: Переменные в скриптах
bash
#!/bin/bash
# script.sh
# Чтение переменных окружения
DB_HOST=${DATABASE_HOST:-"localhost"}
DB_PORT=${DATABASE_PORT:-5432}
echo "Connecting to $DB_HOST:$DB_PORT"
# Использование позиционных параметров
echo "Script name: $0"
echo "First argument: $1"
echo "All arguments: $@"
echo "Number of arguments: $#"
# Специальные переменные
echo "Process ID: $$"
echo "Exit code of last command: $?"
echo "Home directory: $HOME"
Пример 6: Установка версий через переменные
bash
#!/bin/bash # install_specific_version.sh # Определяем версию через переменную NODE_VERSION="18.17.0" # Используем переменную в командах echo "Installing Node.js version $NODE_VERSION" # Скачиваем архив wget "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" # Распаковываем tar -xf "node-v$NODE_VERSION-linux-x64.tar.xz" # Добавляем в PATH export PATH=$PATH:$(pwd)/node-v$NODE_VERSION-linux-x64/bin
Задачи по переменным окружения:
Задача 4: Настройка рабочей среды
text
1. Создайте переменную PROJECT_HOME, указывающую на ~/projects 2. Создайте alias 'll' для 'ls -la' 3. Настройте PS1 (приглашение командной строки) чтобы показывало: [время] пользователь@хост:текущая_папка$ 4. Сделайте все изменения постоянными
Задача 5: Скрипт с параметрами
text
Создайте скрипт backup.sh который: 1. Принимает первый аргумент как имя файла для бэкапа 2. Второй аргумент (опционально) как целевую папку 3. По умолчанию бэкапит в ~/backups 4. Использует переменную окружения BACKUP_DIR если задана 5. Выводит информацию о процессе
Задача 6: Управление версиями ПО
text
Напишите скрипт, который: 1. Проверяет установленную версию Python 2. Если версия ниже 3.8, устанавливает Python 3.8 3. Создает виртуальное окружение в папке проекта 4. Устанавливает зависимости из requirements.txt
Часть 3: Продвинутое управление пакетами
Пример 7: PPA (Personal Package Archive)
bash
# Добавление стороннего репозитория sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update # Теперь доступны новые версии Python sudo apt install python3.11 # Удаление PPA sudo add-apt-repository --remove ppa:deadsnakes/ppa # Просмотр добавленных репозиториев ls /etc/apt/sources.list.d/
Пример 8: Snap пакеты
bash
# Установка snap (если нет) sudo apt install snapd # Поиск snap пакетов snap find postgresql # Установка snap пакета sudo snap install postgresql10 --channel=10/stable # Просмотр установленных snap snap list # Установка определенной версии/канала sudo snap install kubectl --classic --channel=1.28/stable
Пример 9: Установка из исходников
bash
# Пример установки Redis из исходников # 1. Установить зависимости для компиляции sudo apt install build-essential tcl # 2. Скачать исходники wget http://download.redis.io/releases/redis-7.0.12.tar.gz tar xzf redis-7.0.12.tar.gz cd redis-7.0.12 # 3. Компиляция make # 4. Тестирование make test # 5. Установка sudo make install # 6. Создать конфигурацию и запустить mkdir /etc/redis cp redis.conf /etc/redis/
Пример 10: Создание своего .deb пакета
bash
# Установка инструментов для создания пакетов sudo apt install dh-make debhelper devscripts # Создание структуры пакета mkdir mypackage_1.0-1 cd mypackage_1.0-1 dh_make --createorig -s -y # Редактирование файлов в debian/ # Сборка пакета dpkg-buildpackage -us -uc # Установка собранного пакета sudo dpkg -i ../mypackage_1.0-1_amd64.deb
Задачи продвинутого уровня:
Задача 7: Установка и настройка PostgreSQL
text
1. Добавьте официальный PostgreSQL PPA 2. Установите PostgreSQL 15 3. Настройте пароль для пользователя postgres 4. Создайте базу данных 'testdb' 5. Настройте удаленный доступ (если нужно)
Задача 8: Создание Docker образа с зависимостями
text
Создайте Dockerfile который: 1. Использует Ubuntu 22.04 как базовый образ 2. Устанавливает Python 3.9, pip и зависимости из requirements.txt 3. Копирует ваше приложение 4. Экспортирует порт 8000 5. Запускает приложение при старте контейнера
Задача 9: Автоматизация установки
text
Напишите скрипт install_server.sh который: 1. Обновляет систему 2. Устанавливает: nginx, python3, pip, git 3. Клонирует репозиторий с приложением 4. Устанавливает Python зависимости 5. Настраивает nginx как reverse proxy 6. Создает systemd службу для приложения
Часть 4: Полезные комбинации команд
Пример 11: Мониторинг установленных пакетов
bash
# Показать топ-10 самых больших установленных пакетов
dpkg-query -W --showformat='${Installed-Size}\t${Package}\n' | sort -nr | head -10
# Найти файлы, принадлежащие пакету
dpkg -L nginx
# Найти пакет, которому принадлежит файл
dpkg -S /usr/bin/python3
# Показать историю установки/удаления
grep " install " /var/log/dpkg.log
# Создать список всех установленных пакетов с версиями
dpkg --get-selections | grep -v deinstall > packages.list
Пример 12: Управление версиями через alternatives
bash
# Для управления несколькими версиями одного ПО sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 2 # Выбрать версию интерактивно sudo update-alternatives --config python # Просмотр текущей конфигурации update-alternatives --display python
Практический проект: Веб-сервер
Финальная задача: Развертывание веб-приложения
text
Цель: Развернуть Python Flask приложение на чистой Ubuntu Шаги: 1. Обновить систему 2. Установить Python 3.10 3. Установить и настроить nginx 4. Установить и настроить PostgreSQL 5. Создать пользователя для приложения 6. Клонировать репозиторий с кодом 7. Создать виртуальное окружение 8. Установить зависимости 9. Настроить systemd службу 10. Настроить nginx как reverse proxy 11. Настроить брандмауэр 12. Протестировать работу
Пример решения (частично):
bash
#!/bin/bash # deploy.sh set -e # Выйти при первой ошибке echo "=== Начало развертывания ===" # 1. Обновление системы sudo apt update sudo apt upgrade -y # 2. Установка Python sudo apt install -y python3.10 python3.10-venv python3.10-dev # 3. Установка nginx sudo apt install -y nginx # 4. Установка PostgreSQL sudo apt install -y postgresql postgresql-contrib # 5. Создание пользователя sudo useradd --system --create-home --shell /bin/bash appuser # 6. Клонирование репозитория sudo -u appuser git clone https://github.com/yourrepo/app.git /home/appuser/app # ... и так далее
Полезные советы:
Для отладки:
bash
# Проверить синтаксис bash скрипта bash -n script.sh # Запустить скрипт с выводом всех команд bash -x script.sh # Проверить, какие команды будут выполнены (dry run) apt install --dry-run package_name
Безопасность:
bash
# Никогда не запускайте скрипты из непроверенных источников # Всегда проверяйте содержимое: cat unknown_script.sh # Используйте официальные репозитории # Проверяйте GPG подписи пакетов
Дополнительные задания для практики:
Задание A: Системный монитор
text
Напишите скрипт, который: 1. Проверяет свободное место на диске 2. Проверяет использование памяти 3. Проверяет загрузку CPU 4. Если что-то превышает порог - отправляет уведомление 5. Запускается по cron каждые 5 минут
Задание B: Резервное копирование
text
Напишите систему бэкапа которая: 1. Архивирует указанные папки 2. Хранит бэкапы за последние 7 дней 3. Удаляет старые бэкапы автоматически 4. Логирует все действия 5. Отправляет отчет на email
Задание C: Автоматическое обновление
text
Напишите скрипт который: 1. Проверяет доступные обновления 2. Обновляет security updates автоматически 3. Для major updates требует подтверждения 4. Создает бэкап системы перед обновлением 5. Отправляет отчет об обновлениях
Проверка знаний:
Попробуйте ответить на вопросы:
- Чем отличается
apt installотdpkg -i? - Как сделать переменную окружения доступной для всех пользователей?
- Что делает команда
apt-cache policy package_name? - Как посмотреть историю установки пакета?
- Что такое PPA и когда его использовать?
- Как установить пакет без его зависимостей?
- Чем отличается
export VAR=valueотVAR=value?
Следующий шаг: Когда освоите эти основы, перейдем к:
- Systemd и управление службами
- Управление пользователями и правами
- Сетевые настройки
- Bash скриптинг продвинутый уровень
Начните с простого: Выполните первые 3 задачи и покажите что получилось. Я помогу исправить ошибки и дам следующую порцию знаний!