es
Feedback
DevOps | Вопросы собесов

DevOps | Вопросы собесов

Ir al canal en Telegram
5 502
Suscriptores
-324 horas
-107 días
-530 días
Archivo de publicaciones
🤔 Что такое Kubernetes — Open Standards (OCI, CRI, CNI, CSI, SMI, CPI)? 1. OCI (Open Container Initiative): стандарты для контейнеров и их выполнения. 2. CRI (Container Runtime Interface): интерфейс взаимодействия Kubernetes с контейнерными движками. 3. CNI (Container Network Interface): стандарты сетевой интеграции контейнеров. 4. CSI (Container Storage Interface): интерфейс для подключения различных систем хранения данных. 5. SMI (Service Mesh Interface): стандарт взаимодействия между сервисами в сетях. 6. CPI (Cloud Provider Interface): взаимодействие Kubernetes с облачными провайдерами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как бы вы настроили уведомления для сервисов которые находятся без интернета полностью локализованы закрыты от всего извне? Для настройки уведомлений в изолированной сети без доступа к интернету используйте локальные инструменты и системы. Основные методы включают локальные почтовые серверы, мессенджеры и системы управления инцидентами. 🚩Локальный почтовый сервер (SMTP) 1⃣Установка
sudo apt update
sudo apt install postfix   
2⃣Настройка Отредактируйте /etc/postfix/main.cf
myhostname = local.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination   
3⃣Перезапуск Postfix
sudo systemctl restart postfix   
4⃣Проверка
echo "Test email" | mail -s "Test Subject" user@example.com
🚩Локальный мессенджер (Mattermost) 1⃣Установка Mattermost Следуйте [документации](https://docs.mattermost.com/install/self-managed-install.html). 2⃣Настройка Создайте каналы и пользователей. 3⃣Интеграция с мониторингом Используйте веб-хуки Mattermost для уведомлений. 🚩Системы управления инцидентами (Zabbix) 1⃣Установка Zabbix Следуйте [документации](https://www.zabbix.com/download). 2⃣Настройка Настройте хосты, триггеры и действия. 3⃣Настройка уведомлений Медиатипы: Настройте Email и SMS. Пользователи: Создайте пользователей и уведомления. 🚩Локальный стек мониторинга (Prometheus, Alertmanager) 1⃣Установка Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
tar xvf prometheus-2.26.0.linux-amd64.tar.gz
cd prometheus-2.26.0.linux-amd64
./prometheus --config.file=prometheus.yml   
2⃣Установка Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar xvf alertmanager-0.21.0.linux-amd64.tar.gz
cd alertmanager-0.21.0.linux-amd64
./alertmanager --config.file=alertmanager.yml   
3⃣Настройка алертинга в Prometheus
groups:
  - name: example-alerts
    rules:
      - alert: HighCPUUsage
        expr: avg_over_time(node_cpu_seconds_total{mode="idle"}[5m]) < 20
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage detected"
          description: "CPU usage is above 80% for more than 2 minutes"   
4⃣Настройка Alertmanager
global:
  smtp_smarthost: 'localhost:25'
  smtp_from: 'alertmanager@local.example.com'
route:
  receiver: 'email-notifications'
receivers:
  - name: 'email-notifications'
    email_configs:
      - to: 'admin@local.example.com'
        send_resolved: true   
Ставь 👍 и забирай 📚 Базу знаний

💣 Хардкорный тест для ДевОпсов! ➡️Пройдите полный тест из 25 вопросов и узнайте, сможете ли вы осилить онлайн-курс «DevOps п
+1
💣 Хардкорный тест для ДевОпсов! ➡️Пройдите полный тест из 25 вопросов и узнайте, сможете ли вы осилить онлайн-курс «DevOps практики и инструменты» от OTUS (четверть абитуриентов не могут пройти тест). 💻 В программе курса — все актуальные инструменты, необходимые для роста до ДевОпса. Работодатели - партнёры OTUS уже ждут выпускников! ➡️ ПРОЙТИ ТЕСТ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🤔 Сколько мастеров в Kubernetes должно быть и почему? Минимум три мастера для обеспечения высокой доступности (HA). 1. Три мастера позволяют достичь кворума в распределённой системе хранения данных (etcd). 2. Это защищает от сбоев одного или двух мастеров и гарантирует стабильность кластера. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как осуществляли деплой на kubernetes? Развертывание приложения на Kubernetes включает несколько шагов, таких как подготовка конфигурационных файлов, настройка окружения и выполнение команд для развертывания. 🚩Шаги для деплоя 1⃣Подготовка Docker-образа Первый шаг — подготовить Docker-образ приложения. Пример Dockerfile
# Используем официальный образ Python
FROM python:3.8-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем все файлы в контейнер
COPY . /app

# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt

# Определяем команду запуска
CMD ["python", "app.py"]
Создание и загрузка Docker-образа в Docker Hub
docker build -t username/myapp:latest .
docker push username/myapp:latest
2⃣Создание конфигурационных файлов Kubernetes Для развертывания приложения на Kubernetes, необходимо создать манифесты для деплоя (Deployment), сервиса (Service) и других необходимых ресурсов. Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: username/myapp:latest
        ports:
        - containerPort: 80
Service
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
3⃣Применение конфигураций Применение манифестов для создания ресурсов в кластере Kubernetes:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
4⃣Проверка статуса Проверка статуса развертывания и сервисов:
kubectl get deployments
kubectl get services
kubectl get pods
5⃣Настройка автоскейлинга (по желанию) Для обеспечения высокой доступности и масштабируемости можно настроить горизонтальное авто-масштабирование:
kubectl autoscale deployment myapp-deployment --cpu-percent=50 --min=1 --max=10
6⃣Обновление приложения Для обновления приложения необходимо изменить образ в деплойменте и применить изменения: Обновление Docker-образа
docker build -t username/myapp:v2 .
docker push username/myapp:v2
Обновление манифеста Deployment
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: username/myapp:v2
Применение изменений
kubectl apply -f deployment.yaml
🚩Пример полного пайплайна Пример .gitlab-ci.yml для автоматизации деплоя
stages:
  - build
  - push
  - deploy

variables:
  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG

build:
  stage: build
  script:
    - docker build -t $DOCKER_IMAGE .
  only:
    - main

push:
  stage: push
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push $DOCKER_IMAGE
  only:
    - main

deploy:
  stage: deploy
  script:
    - kubectl apply -f deployment.yaml
    - kubectl apply -f service.yaml
  only:
    - main
Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличается Docker от KVM? 1. Docker: контейнеризация, обеспечивающая изоляцию на уровне ОС, с минимальным оверхедом. 2. KVM: гипервизор, обеспечивающий изоляцию на уровне аппаратного обеспечения через полные виртуальные машины. 3. Docker быстрее, а KVM обеспечивает более строгую изоляцию и подходит для более сложных сред. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что нужно сделать чтобы после того как вы создали репозиторий с этим репозиторием можно было работать? После создания нового репозитория, будь то локальный или удаленный, необходимо выполнить несколько шагов для начала полноценной работы с ним. Эти шаги включают инициализацию репозитория, настройку удаленного репозитория, добавление файлов, коммит и настройку синхронизации с удаленным репозиторием. 🚩Основные шаги 1⃣Создание нового репозитория Перейдите на GitHub и войдите в свой аккаунт. Нажмите на кнопку "New" для создания нового репозитория. Введите имя репозитория, описание (опционально), выберите публичный или приватный доступ, инициализируйте с README (если нужно). Нажмите "Create repository". 2⃣Клонирование или инициализация репозитория Если репозиторий уже существует на GitHub
git clone https://github.com/yourusername/your-repository.git
cd your-repository
Если вы создаете новый локальный репозиторий
mkdir your-repository
cd your-repository
git init
3⃣Добавление файлов и коммит начального состояния Создайте или добавьте файлы
echo "# Your Repository" > README.md   
Добавьте файлы в индекс
git add README.md   
Сделайте первый коммит
git commit -m "Initial commit"   
4⃣Настройка удаленного репозитория Если вы инициализировали локальный репозиторий, вам нужно настроить удаленный репозиторий.
git remote add origin https://github.com/yourusername/your-repository.git
5⃣Пуш изменений в удаленный репозиторий Отправьте ваши изменения в удаленный репозиторий
git push -u origin master
🚩Дополнительные шаги для совместной работы 1⃣Создание веток Для разработки новых функций или исправлений багов рекомендуется создавать отдельные ветки
git checkout -b feature-branch   
2⃣Создание Pull Request (PR) После завершения работы в ветке создайте Pull Request на GitHub для обзора и слияния. 3⃣Настройка файлов `.gitignore` Добавьте файл .gitignore для исключения ненужных файлов из коммитов.
echo "node_modules/" > .gitignore
git add .gitignore
git commit -m "Add .gitignore"
   
4⃣Настройка CI/CD Подключите сервисы Continuous Integration/Continuous Deployment, такие как GitHub Actions, Travis CI или Jenkins, для автоматизации тестирования и развертывания.
# Пример файла .github/workflows/ci.yml для GitHub Actions
name: CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'
      - run: npm install
      - run: npm test   
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как посчитать размер ноды в Kubernetes? 1. Используйте команду kubectl describe node <node-name> для просмотра доступной памяти и CPU. 2. Ресурсы также можно получить через метрики (kubectl top nodes). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Удалил файлы, но место не очищается, в чем дело? Если вы удалили файлы, но место на диске не освободилось, это может происходить по нескольким причинам. 🚩Файл все еще используется процессом Если файл удален, но он открыт каким-либо процессом, его содержимое остается в памяти или файловой системе до завершения работы этого процесса. Это называется "удаление с дескриптором". 🟠Как проверить: Используйте команду lsof (list open files), чтобы найти процессы, удерживающие файл
lsof | grep deleted
🟠Как исправить Перезапустите процесс или завершите его с помощью kill:
kill -9 <PID>
🚩Файл удален, но он находился в другом файловом пространстве Например: - Файл был удален внутри Docker-контейнера, но место занято в образе. - Файл находился на смонтированном диске, и удаление произошло в другом контексте. 🟠Как проверить Убедитесь, что вы работаете в правильной файловой системе:
df -h
🟠Как исправить Убедитесь, что удаление происходит в нужной директории или файловой системе. 🚩Файл был удален из директории, но находится в другой ссылке (hard link) Если файл имеет несколько жестких ссылок, удаление одного из них не освободит место до тех пор, пока не удалены все ссылки. 🟠Как проверить Используйте команду find, чтобы найти оставшиеся ссылки:
find / -samefile <имя_файла>
🟠Как исправить Удалите все ссылки на файл. 🚩Файл был удален, но находился в файловой системе с квотой Если используется файловая система с ограничением (например, квоты пользователей или групп), возможно, квота пользователя исчерпана, и это мешает очистке. 🟠Как проверить Проверьте квоты:
quota -u <username>
🟠Как исправить Убедитесь, что квоты настроены правильно, или освободите больше места. 🚩Кэшированные данные или временные файлы Иногда удаленные файлы остаются в виде кэша, временных данных или не удаляются из корзины. 🟠Как проверить Очистите кэш или проверьте корзину. Например, для очистки временных файлов
sudo du -sh /tmp
sudo rm -rf /tmp/*
🟠Как исправить Удалите временные файлы, очистите кэш:
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches
Ставь 👍 и забирай 📚 Базу знаний

🤔 Опишите идеальный конвейер. 1. CI/CD: автоматизация сборки, тестирования, деплоя. 2. Тесты: юнит, интеграционные и end-to-end тесты. 3. Мониторинг: проверка производительности и логов после релиза. 4. Масштабируемость: возможность быстрого изменения и расширения инфраструктуры. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Когда вы создаёте файл какие права создаются по умолчанию? Права доступа по умолчанию зависят от базовых прав доступа и значения umask. Базовые права доступа — это значения, которые система использует для определения разрешений перед применением маски umask. 🟠Файлы: 666 (rw-rw-rw-) Это означает, что по умолчанию все пользователи могут читать и записывать в файл. 🟠Каталоги: 777 (rwxrwxrwx) Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог. 🚩Значение umask: 022 Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение umask указывается в восьмеричной системе счисления. 🟠Создание файла Базовые права доступа: 666 Значение umask: 022 Окончательные права доступа: 666 - 022 = 644 (rw-r--r--) 🟠Создание каталога Базовые права доступа: 777 Значение umask: 022 Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x) 🚩Создание файла с umask 0022 1⃣Установка umask
umask 0022   
2⃣Создание файла
touch myfile   
3⃣Проверка прав доступа
ls -l myfile   
Вывод Права доступа: 644 (rw-r--r--)
-rw-r--r-- 1 user user 0 Jul 26 12:00 myfile    
🚩Создание каталога с umask 0027 1⃣Установка umask
umask 0027   
2⃣Создание каталога
mkdir mydir   
3⃣Проверка прав доступа
ls -ld mydir   
Вывод Права доступа: 750 (rwxr-x---)
drwxr-x--- 2 user user 4096 Jul 26 12:00 mydir     
🚩Дополнительные замечания 🟠umask в скриптах Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
#!/bin/bash
umask 027
touch file1
mkdir dir1  
🟠Проверка прав доступа в разных ситуациях Для файлов: По умолчанию права доступа 666 минус umask. Для каталогов: По умолчанию права доступа 777 минус umask. Ставь 👍 и забирай 📚 Базу знаний

🤔 Этапы загрузки в Linux и загрузчики: 1. BIOS/UEFI: выполняет начальную инициализацию оборудования. 2. Загрузчик (GRUB, LILO): выбирает и загружает ядро ОС. 3. Ядро Linux: инициализирует устройства, монтирует корневую файловую систему. 4. Init/Systemd: запускает пользовательские процессы и сервисы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем разница между IaaS, PaaS и SaaS? Это три модели облачных вычислений, которые различаются уровнем предоставляемых услуг и степенью ответственности между пользователем и провайдером. 🚩IaaS (Infrastructure as a Service) IaaS предоставляет инфраструктуру как услугу. Пользователь получает доступ к виртуализированным вычислительным ресурсам, таким как серверы, хранилища, сети и операционные системы. 🟠Что предоставляет Виртуальные машины, диски, сетевые ресурсы и другие элементы инфраструктуры. 🟠Примеры провайдеров AWS EC2, Google Compute Engine, Microsoft Azure VMs. 🟠Что делает пользователь Настраивает операционные системы, устанавливает ПО, управляет сетью и обеспечивает безопасность. 🟠Пример использования Компания разворачивает свои приложения в облаке, используя виртуальные машины и настройку сети по своим потребностям. 🚩Плюсы и минусы ➕Высокая гибкость и контроль. ➕Подходит для создания кастомных решений. ➖Требуется больше времени и усилий на настройку и управление. 🚩PaaS (Platform as a Service) PaaS предоставляет платформу для разработки, тестирования и развертывания приложений. Провайдер управляет инфраструктурой, а пользователь сосредотачивается на написании и запуске приложений. 🟠Что предоставляет Среду для разработки, включая операционную систему, базы данных, серверы приложений, инструменты разработки и т. д. 🟠Примеры провайдеров AWS Elastic Beanstalk, Google App Engine, Heroku, Microsoft Azure App Service. 🟠Что делает пользователь Пишет код, тестирует приложения и развертывает их на платформе. - Пример использования: Разработчики используют платформу для быстрого развертывания веб-приложений без необходимости управления серверами и сетями. 🚩Плюсы и минусы ➕Быстрое развертывание приложений. ➕Не нужно беспокоиться об управлении инфраструктурой. ➖Ограниченная гибкость по сравнению с IaaS. ➖Зависимость от поставщика платформы. 🚩SaaS (Software as a Service) SaaS предоставляет готовые приложения как услугу. Пользователь просто использует программное обеспечение через интернет. 🟠Что предоставляет Полностью готовое приложение, доступное через браузер или клиентскую программу. 🟠Примеры провайдеров Gmail, Microsoft 365, Google Drive, Salesforce, Slack. 🟠Что делает пользователь Пользуется функциональностью приложения, не заботясь о технической стороне. 🟠Пример использования Организация использует Google Workspace для корпоративной электронной почты и совместной работы. 🚩Плюсы и минусы ➕Простота использования. ➕Не требуется установка и управление ПО. ➖Ограниченная кастомизация. ➖Данные находятся на стороне провайдера. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем разница между PVC и Full Stack? 1. PVC (Persistent Volume Claim): запрос на выделение хранилища в Kubernetes, связанный с конкретным подом. 2. Full Stack: общий термин, описывающий весь стек технологий разработки, включая фронтенд, бэкенд и инфраструктуру. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Сколько часов живёт один вал Prometeus CICD? Вал (или "валидность данных") в Prometheus определяется настройками временного диапазона хранения данных. Обычно данные в Prometheus живут столько, сколько задано в параметре --storage.tsdb.retention.time, который устанавливает период хранения временных рядов. 🟠По умолчанию Если не указать параметр --storage.tsdb.retention.time, данные хранятся 15 дней. Это соответствует 360 часам. 🟠Как изменить время жизни данных Вы можете настроить период хранения данных, передав значение параметра при запуске Prometheus: CLI-параметр:
prometheus --storage.tsdb.retention.time=30d
🟠Конфигурационный файл Если Prometheus запускается как часть системы CI/CD через Docker Compose, Kubernetes или другой инструмент, параметр указывается в соответствующем разделе.
services:
  prometheus:
    image: prom/prometheus
    command:
      - '--storage.tsdb.retention.time=7d' # 7 дней (168 часов)
🚩Почему это важно? 🟠Оптимизация дискового пространства Большие периоды хранения требуют больше дискового пространства. Если валидация данных больше не нужна, лучше очищать старые временные ряды. 🟠Баланс производительности Длительное хранение может замедлить обработку запросов, особенно если используемые метрики застарелые или редко запрашиваются. 🟠Потребности CI/CD Для CI/CD-пайплайнов обычно достаточно короткого периода (например, 7–15 дней), чтобы сохранять данные релевантными и свежими. 🟠Пример настройки в CI/CD контексте Если вы хотите, чтобы метрики для CI/CD жили 12 часов (подходящий срок для проверки тестов и сборок), настройте
prometheus:
  image: prom/prometheus
  command:
    - '--storage.tsdb.retention.time=12h'
🚩**Как проверить текущий срок хранения?** 🟠В интерфейсе Prometheus Перейдите на страницу /status/status/flags, где можно увидеть значение параметра --storage.tsdb.retention.time. 🟠Через командную строку Проверьте журнал запуска Prometheus или конфигурационный файл. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что за компонент kubelet? Это агент, работающий на каждой ноде Kubernetes. 1. Он управляет запуском, мониторингом и завершением контейнеров через взаимодействие с контейнерным рантаймом. 2. Также отвечает за регистрацию ноды в кластере и выполнение инструкций от мастера. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как в docker compose вместо yaml файла использовать json файл? Docker Compose поддерживает использование JSON-файлов вместо стандартного YAML-файла. Формат JSON полностью совместим с YAML, так как YAML является надмножеством JSON. Для этого достаточно создать JSON-файл с описанием конфигурации контейнеров и передать его с помощью опции -f. 🚩Шаги по использованию 🟠Создайте JSON-файл конфигурации Файл должен содержать описание сервисов в формате JSON. Например, вместо YAML
version: "3.9"
services:
  web:
    image: nginx
    ports:
      - "80:80"
В формате JSON будет так
{
    "version": "3.9",
    "services": {
        "web": {
            "image": "nginx",
            "ports": ["80:80"]
        }
    }
}
🟠Запустите Docker Compose с этим файлом Используйте флаг -f, чтобы указать Docker Compose, какой файл использовать
docker-compose -f docker-compose.json up
🟠Проверка работы Вы можете проверить статус контейнеров, как обычно:
docker-compose -f docker-compose.json ps
🚩Почему использовать JSON? 🟠Совместимость JSON часто используется в API, CI/CD-пайплайнах и других инструментах, которые могут генерировать конфигурации автоматически. 🟠Простота обработки JSON легко парсить программно, что может быть полезно в скриптах и интеграциях. 🟠Стандартизация Некоторые команды и проекты могут предпочитать JSON как более строгий и распространенный формат. 🚩Пример использования 1⃣Создайте файл docker-compose.json
{
    "version": "3.8",
    "services": {
        "app": {
            "image": "python:3.9",
            "volumes": ["./app:/app"],
            "working_dir": "/app",
            "command": "python app.py"
        }
    }
}
2⃣Запустите
docker-compose -f docker-compose.json up
Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем контейнер отличается от пода? 1. Контейнер: единичная изолированная среда с приложением и его зависимостями. 2. Под (Pod): минимальная единица деплоя в Kubernetes, содержащая один или несколько контейнеров, которые разделяют сетевые и хранилищные ресурсы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что возвращает функция в bash? В Bash функция возвращает код завершения (exit status), который представляет собой числовое значение от 0 до 255. Это значение используется для указания успешного или неуспешного выполнения функции. По умолчанию, если явно не указано возвращаемое значение, функция возвращает код завершения последней выполненной команды внутри нее. 🚩Как возвращать значения из функции? 🟠Код завершения (exit status) Чтобы явно задать код завершения функции, используется команда return.
my_function() {
    if [[ $1 -gt 0 ]]; then
        return 0  # Успех
    else
        return 1  # Ошибка
    fi
}

my_function 5
echo $?  # Выведет 0 (успех)
🟠Вывод данных через `echo` Для передачи данных из функции (например, строки или числа) можно использовать echo. Вывод можно перехватить через подстановку команд $()
my_function() {
    echo "Hello, $1!"
}

result=$(my_function "world")
echo "$result"  # Выведет "Hello, world!"
🟠Изменение глобальных переменных Функция может менять значения глобальных переменных, которые затем используются за ее пределами
my_function() {
    result=$(( $1 + $2 ))
}

my_function 3 7
echo $result  # Выведет 10
🚩Почему это важно? 🟠Код завершения Используется в сценариях для проверки, выполнилась ли функция успешно. Значение 0 обычно означает успех, а любое другое число — ошибку. 🟠Вывод через `echo` Удобен для передачи данных из функции. 🟠Изменение переменных Полезно, если функция должна сохранять данные для дальнейшей обработки.
# Функция проверки файла
check_file() {
    if [[ -f $1 ]]; then
        echo "Файл $1 существует."
        return 0
    else
        echo "Файл $1 не найден."
        return 1
    fi
}

# Вызов функции
check_file "/etc/passwd"
status=$?  # Сохраняем код завершения
if [[ $status -eq 0 ]]; then
    echo "Продолжаем работу..."
else
    echo "Останавливаемся из-за ошибки."
fi
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое системные вызовы и системные сигналы? 1. Системные вызовы: интерфейс между приложениями и ядром ОС, который позволяет программам запрашивать ресурсы, например, операции ввода-вывода, управление процессами или памятью. 2. Системные сигналы: механизмы ОС для уведомления процессов о событиях, таких как завершение работы (SIGTERM) или ошибка (SIGSEGV). Ставь 👍 и забирай 📚 Базу знаний