Начнем с основ. Вот практический путь от новичка к уверенному пользователю Linux.

Часть 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. Отправляет отчет об обновлениях

Проверка знаний:

Попробуйте ответить на вопросы:

  1. Чем отличается apt install от dpkg -i?
  2. Как сделать переменную окружения доступной для всех пользователей?
  3. Что делает команда apt-cache policy package_name?
  4. Как посмотреть историю установки пакета?
  5. Что такое PPA и когда его использовать?
  6. Как установить пакет без его зависимостей?
  7. Чем отличается export VAR=value от VAR=value?

Следующий шаг: Когда освоите эти основы, перейдем к:

  1. Systemd и управление службами
  2. Управление пользователями и правами
  3. Сетевые настройки
  4. Bash скриптинг продвинутый уровень

Начните с простого: Выполните первые 3 задачи и покажите что получилось. Я помогу исправить ошибки и дам следующую порцию знаний!

Оставьте комментарий