Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • ownCloud
    • JupyterHub
    • JupyterHub 2
    • VNC
    • Soft
  1. ИСиТ
  2. Системное программирование
  3. Практика
  4. Лаб. работа “Язык командного энтерпритатора Shell”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”

Содержание

  • Цель лабораторной работы
  • Задачи лабораторной работы
  • Краткие теоретические сведения
    • Структура скрипта Shell
    • Переменные
    • Операторы ветвления
    • Операторы циклов
    • Вызов сторонних программ
    • Математические вычисления
    • Пользовательские функции
  • Порядок выполнения работы
  • Контрольные вопросы
  1. ИСиТ
  2. Системное программирование
  3. Практика
  4. Лаб. работа “Язык командного энтерпритатора Shell”

Лаб. работа “Язык командного энтерпритатора Shell”

Системное программирование
Практика
Автор

Бизюк Андрей

Дата публикации

22 апреля 2024 г.

Цель лабораторной работы

Освоение основ работы с языком командного интерпретатора Shell, изучение основных команд и возможностей Shell, а также развитие навыков написания простых скриптов для автоматизации задач в операционной системе Unix/Linux.

Задачи лабораторной работы

  1. Знакомство с командной строкой Unix/Linux:
    • Ознакомиться с основными командами Shell (например, ls, cd, pwd, cp, mv, rm).
    • Понять структуру и синтаксис командной строки.
    • Научиться навигации по файловой системе с помощью команд Shell.
  2. Изучение команд обработки файлов и каталогов:
    • Научиться использовать команды для работы с файлами и каталогами (touch, mkdir, rmdir, nano, cat, less, more).
    • Освоить команды для поиска файлов (find, grep).
  3. Изучение перенаправления ввода/вывода и работы с конвейерами:
    • Изучить основы перенаправления ввода/вывода с помощью символов >, >>, <.
    • Понять принципы работы с конвейерами (pipes) с использованием символа |.
  4. Автоматизация задач с помощью скриптов:
    • Научиться писать простые скрипты на Shell, включая использование переменных и операторов управления (if, for, while).
    • Ознакомиться с созданием и использованием функций в скриптах Shell.
  5. Работа с системными процессами:
    • Изучить команды для управления процессами (ps, top, kill, bg, fg, jobs).
    • Понять, как отслеживать и контролировать выполнение программ в Shell.
  6. Основы безопасности и прав доступа:
    • Изучить команды для управления правами доступа к файлам и каталогам (chmod, chown, chgrp).
    • Понять основы работы с пользователями и группами в Unix/Linux.
  7. Практическое применение:
    • Выполнить ряд практических заданий, направленных на применение изученных команд и написание скриптов для автоматизации реальных задач.

Краткие теоретические сведения

Структура скрипта Shell

Рассмотрим структуру скрипта Shell:

#!/bin/bash

# Комментарий: Начало скрипта

# Объявление переменных
VAR1="Hello"
VAR2="World"

# Основная часть скрипта
echo "$VAR1 $VAR2"   # Выводит "Hello World"

# Завершение скрипта
exit 0
  1. Шебанг (Shebang): #!/bin/bash - это строка в начале скрипта, указывающая на то, какой интерпретатор использовать. В данном случае используется интерпретатор Bash.

  2. Комментарии: Комментарии помогают описать, что делает скрипт. Они начинаются с символа # и игнорируются интерпретатором.

  3. Объявление переменных: Здесь объявляются переменные VAR1 и VAR2, которые содержат строки “Hello” и “World” соответственно.

  4. Основная часть скрипта: Это место, где выполняются основные действия. В данном случае, скрипт просто выводит содержимое переменных с помощью команды echo.

  5. Завершение скрипта: Команда exit 0 указывает на успешное завершение скрипта. Код 0 обычно означает успешное выполнение, а другие значения могут указывать на различные ошибки или условия завершения.

Переменные

Переменные в shell играют ключевую роль, позволяя хранить и использовать данные в скриптах.

  1. Объявление переменных: Переменные объявляются без использования ключевых слов, просто путем присваивания значения. Например:

    VAR="value"
  2. Использование переменных: Для использования переменной в тексте скрипта нужно указать её имя, предваряя его символом доллара $. Например:

    echo $VAR
  3. Специальные переменные: В shell есть множество специальных переменных, таких как $0, $1, $2, и т.д., которые хранят аргументы командной строки. Например:

    echo "Имя этого скрипта: $0"
  4. Чтение значений из ввода: Можно использовать команду read, чтобы прочитать значение из ввода и присвоить его переменной. Например:

    read NAME
    echo "Привет, $NAME!"
  5. Удаление переменных: Для удаления переменной используется команда unset. Например:

    unset VAR
  6. Интерполяция переменных: Переменные могут быть интерполированы в строковых значениях. Например:

    GREETING="Hello"
    echo "$GREETING, world!"
  7. Переменные окружения: Все переменные, которые вы экспортируете из shell, становятся переменными окружения для любых запущенных подкоманд или программ. Например:

    export MY_VAR="value"
  8. Именованные переменные: В bash и других расширениях shell можно использовать ассоциативные массивы для хранения данных. Например:

    declare -A fruits
    fruits[apple]="red"
    fruits[banana]="yellow"
    echo "Apple is ${fruits[apple]}"

Специальные переменные

Специальные переменные в shell представляют собой переменные, которые предопределены и предназначены для выполнения определенных задач.

  • $0: Имя исполняемого файла скрипта (имя команды).

  • $1, $2, …, $N: Параметры командной строки. $1 содержит первый аргумент, $2 — второй, и так далее.

  • $@: Список всех аргументов командной строки.

  • $#: Количество аргументов командной строки.

  • $?: Код возврата (exit code) последней выполненной команды.

  • $$: PID (идентификатор процесса) текущего shell.

  • $!: PID последнего запущенного в фоновом режиме процесса.

  • $*: Похоже на $@, но сохраняет аргументы как одну строку.

  • $IFS: Разделитель полей (Internal Field Separator). Это строка символов, которая определяет, где shell должен разбивать строки на поля, при чтении из ввода или из переменной.

  • $PWD: Текущий рабочий каталог (полный путь).

  • $OLDPWD: Предыдущий рабочий каталог.

Переменные окружения

Переменные окружения представляют собой переменные, которые могут быть установлены в системе операционной или виртуальной среде и доступны для всех процессов, запущенных в этой среде. Они могут содержать различную информацию о системе, пользователе, конфигурации и многое другое.

  • PATH: Содержит список каталогов, в которых операционная система ищет исполняемые файлы.

  • HOME: Путь к домашнему каталогу текущего пользователя.

  • USER: Имя текущего пользователя.

  • LANG: Определяет язык, используемый для отображения сообщений и форматирования даты и времени.

  • TERM: Определяет тип терминала, используемого для взаимодействия с пользователем.

  • PWD: Текущий рабочий каталог.

  • SHELL: Путь к оболочке, используемой текущим пользователем.

  • DISPLAY: Определяет, на каком дисплее должны отображаться графические приложения.

  • TMP, TEMP: Пути к временным каталогам.

  • EDITOR, VISUAL: Определяют текстовый редактор, используемый по умолчанию.

  • TZ: Определяет часовой пояс системы.

  • HOSTNAME: Имя хоста (имя компьютера).

  • PS1, PS2: Переменные, используемые для настройки приглашения командной строки.

  • LD_LIBRARY_PATH: Список каталогов, в которых операционная система ищет библиотеки, используемые программами.

  • JAVA_HOME: Путь к установленной JDK (Java Development Kit).

Эти переменные можно использовать в shell скриптах для доступа к информации о среде выполнения и для настройки поведения программы в соответствии с окружением. Для просмотра всех переменных окружения в вашей текущей среде выполнения вы можете использовать команду env в большинстве Unix-подобных систем.

Операторы ветвления

Операторы ветвления в shell используются для принятия решений на основе условий и выполнения различных действий в зависимости от результатов этих условий.

  • if-then-else:

    if условие; then
        команды_если_условие_истинно
    else
        команды_если_условие_ложно
    fi

    Пример:

    if [ $x -gt 10 ]; then
        echo "x больше 10"
    else
        echo "x не больше 10"
    fi
  • if-then (без else):

    if условие; then
        команды_если_условие_истинно
    fi

    Пример:

    if [ -e $FILE ]; then
        echo "$FILE существует"
    fi
  • if-elif-else:

    if условие1; then
        команды_если_условие1_истинно
    elif условие2; then
        команды_если_условие2_истинно
    else
        команды_если_все_условия_ложны
    fi

    Пример:

    if [ $x -gt 10 ]; then
        echo "x больше 10"
    elif [ $x -eq 10 ]; then
        echo "x равно 10"
    else
        echo "x меньше 10"
    fi
  • case:

    case выражение in
        паттерн1)
            команды_если_паттерн1_соответствует
            ;;
        паттерн2)
            команды_если_паттерн2_соответствует
            ;;
        *)
            команды_если_нет_соответствия_ни_одному_паттерну
            ;;
    esac

    Пример:

    case $VAR in
        "value1")
            echo "Переменная равна value1"
            ;;
        "value2")
            echo "Переменная равна value2"
            ;;
        *)
            echo "Переменная не равна ни value1, ни value2"
            ;;
    esac

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

Предикаты

В контексте программирования “предикат” обычно означает выражение, которое оценивается как истинное или ложное. В языках программирования, включая shell, предикаты используются в операторах ветвления (например, в операторах if, while, case и других) для принятия решений на основе условий.

  • Сравнение чисел:

    • -eq: равно
    • -ne: не равно
    • -gt: больше
    • -lt: меньше
    • -ge: больше или равно
    • -le: меньше или равно

    Например:

    if [ $x -gt 10 ]; then
        echo "x больше 10"
    fi
  • Сравнение строк:

    • =: равно
    • !=: не равно
    • -z: пустая строка
    • -n: не пустая строка

    Например:

    if [ "$var" = "value" ]; then
        echo "Переменная равна value"
    fi
  • Файловые предикаты:

    • -e: файл существует
    • -f: обычный файл
    • -d: каталог
    • -r: доступен для чтения
    • -w: доступен для записи
    • -x: доступен для выполнения

    Например:

    if [ -e $FILE ]; then
        echo "$FILE существует"
    fi
  • Логические операции:

    • -a: логическое “и”
    • -o: логическое “или”
    • !: логическое “не”

    Например:

    if [ "$var" = "value1" -o "$var" = "value2" ]; then
        echo "Переменная равна value1 или value2"
    fi

Эти предикаты позволяют создавать условия в операторах ветвления, которые позволяют программам принимать решения и выполнять различные действия на основе этих условий.

Операторы циклов

В shell скриптах часто используются циклы для повторения определенных действий определенное количество раз или до выполнения определенного условия.

  • Цикл while:

    while условие; do
        команды
    done

    Например:

    counter=0
    while [ $counter -lt 10 ]; do
        echo $counter
        ((counter++))
    done
  • Цикл until:

    until условие; do
        команды
    done

    Например:

    counter=0
    until [ $counter -eq 10 ]; do
        echo $counter
        ((counter++))
    done
  • Цикл for (для перебора элементов в списке):

    for переменная in список; do
        команды
    done

    Например:

    for i in {1..5}; do
        echo $i
    done
  • Цикл for (для перебора элементов в массиве или списке):

    for переменная in элемент1 элемент2 ... элементN; do
        команды
    done

    Например:

    for color in red green blue; do
        echo "Color: $color"
    done
  • Цикл select (для создания интерактивного меню):

    select переменная in список; do
        команды
    done

    Например:

    select fruit in apple banana orange; do
        echo "Вы выбрали: $fruit"
        break
    done

Эти циклы могут использоваться для автоматизации повторяющихся задач, обработки данных, итерации по спискам и многих других вещей в shell скриптах.

Вызов сторонних программ

Вызов сторонних программ из shell скриптов - обычная практика, которая позволяет скриптам взаимодействовать с другими программами и выполнять различные задачи. Для вызова сторонней программы используются команды, которые могут быть исполнены внутри скрипта.

  • Вызов программы по её имени:

    программа_или_команда аргументы

    Например:

    ls -l
  • Использование переменных в качестве аргументов:

    переменная="аргументы"
    программа_или_команда $переменная

    Например:

    directory="/path/to/directory"
    ls $directory
  • Подстановка вывода другой команды:

    программа_или_команда $(другая_команда)

    Например:

    files_count=$(ls | wc -l)
    echo "В текущем каталоге $files_count файлов"
  • Использование обратных кавычек для подстановки вывода команды (устаревший метод):

    программа_или_команда `другая_команда`

    Например:

    files_count=`ls | wc -l`
    echo "В текущем каталоге $files_count файлов"
  • Пайплайны (|) для передачи вывода одной команды в качестве входных данных другой:

    команда1 | команда2

    Например:

    ls | grep ".txt"
  • Перенаправление вывода (stdout и stderr):

    программа_или_команда > файл
    программа_или_команда >> файл (для добавления в конец файла)

    Например:

    ls > file_list.txt
  • Перенаправление ввода:

    программа_или_команда < файл

    Например:

    sort < unsorted_file.txt

Это основные способы вызова сторонних программ из shell скриптов. Они позволяют взаимодействовать со стандартными командами операционной системы, а также с любыми другими программами, доступными в вашей среде выполнения.

Математические вычисления

В shell скриптах можно выполнить математические вычисления несколькими способами.

  • Арифметическое выражение с помощью встроенной команды let:

    let "результат = выражение"

    Например:

    let "x = 10 + 5"
    echo $x   # Выведет 15
  • Арифметическое выражение с помощью двойных круглых скобок ((...)):

    результат=$((выражение))

    Например:

    x=$((10 + 5))
    echo $x   # Выведет 15
  • Использование команды expr:

    результат=$(expr выражение)

    Например:

    x=$(expr 10 + 5)
    echo $x   # Выведет 15
  • Использование конструкции $((...)):

    результат=$((выражение))

    Например:

    x=$((10 + 5))
    echo $x   # Выведет 15
  • Использование встроенной команды bc для вычисления выражений с плавающей запятой:

    результат=$(echo "выражение" | bc)

    Например:

    x=$(echo "10.5 * 3" | bc)
    echo $x   # Выведет 31.5

Каждый из этих методов имеет свои особенности и подходит для разных типов вычислений. Например, let и ((...)) работают только с целыми числами, в то время как bc поддерживает вычисления с плавающей запятой.

Пользовательские функции

В shell скриптах вы можете определять пользовательские функции для организации и структурирования вашего кода. Вот пример определения и вызова пользовательской функции:

# Определение функции
function my_function {
    echo "Привет, это моя пользовательская функция!"
}

# Вызов функции
my_function

Этот пример определяет функцию с именем my_function, которая выводит приветственное сообщение. После определения функции она вызывается с помощью my_function.

Ниже приведены некоторые дополнительные концепции, которые могут быть полезны при работе с пользовательскими функциями:

  1. Передача аргументов в функцию:

    function my_function {
        echo "Привет, $1!"
    }
    
    my_function "Мир"

    Этот пример передает строку “Мир” в функцию my_function, которая выводит “Привет, Мир!”.

  2. Возврат значений из функции:

    function add_numbers {
        local result=$(( $1 + $2 ))
        echo $result
    }
    
    sum=$(add_numbers 5 3)
    echo "Сумма: $sum"

    Этот пример определяет функцию add_numbers, которая принимает два аргумента, складывает их и возвращает результат. Результат сохраняется в переменной sum.

  3. Локальные переменные в функции:

    function my_function {
        local name="John"
        echo "Привет, $name!"
    }
    
    my_function
    echo "Имя: $name"  # Это вызовет ошибку, потому что переменная name является локальной для функции

    В этом примере переменная name является локальной для функции my_function и недоступна за её пределами.

  4. Рекурсивные функции:

    function factorial {
        if [ $1 -le 1 ]; then
            echo 1
        else
            local prev=$(factorial $(( $1 - 1 )))
            echo $(( $1 * $prev ))
        fi
    }
    
    result=$(factorial 5)
    echo "Факториал 5: $result"

    В этом примере определена рекурсивная функция для вычисления факториала числа. Функция вызывает саму себя до тех пор, пока не достигнет базового случая.

Порядок выполнения работы

  1. Переменные Shell:
    • Создайте скрипт, который запрашивает у пользователя его имя и приветствует его с использованием этого имени.
    • Напишите скрипт, который запрашивает у пользователя два числа и выводит их сумму.
  2. Переменные окружения:
    • Напишите скрипт, который выводит значения некоторых системных переменных окружения, таких как $HOME, $PATH, $USER, и т.д.
    • Создайте скрипт, который выводит список всех переменных окружения.
  3. Операторы ветвления:
    • Напишите скрипт, который проверяет, является ли введенное пользователем число четным или нечетным, и выводит соответствующее сообщение.
    • Создайте скрипт, который запрашивает у пользователя его возраст и сообщает, является ли он совершеннолетним или нет.
  4. Оператор выбора:
    • Напишите скрипт, который запрашивает у пользователя его любимый сезон и выводит сообщение о том, какие виды активностей связаны с этим сезоном.
    • Создайте скрипт, который проверяет введенную пользователем строку на наличие ключевого слова и выводит соответствующее сообщение.
  5. Операторы циклов:
    • Напишите скрипт, который выводит числа от 1 до 10 с использованием цикла for.
    • Создайте скрипт, который запрашивает у пользователя число и выводит таблицу умножения этого числа.
  6. Создание и использование пользовательских функций:
    • Создайте функцию greet, которая принимает имя в качестве аргумента и выводит приветствие.
    • Вызовите функцию greet с вашим именем.
  7. Использование команд для работы с файлами:
    • Создайте текстовый файл example.txt.
    • Запишите в него строку “Пример текста”.
    • Используйте команду cat для чтения содержимого файла example.txt.

Контрольные вопросы

  1. Основы работы с командной строкой:
    • Какие команды используются для навигации по файловой системе в Shell?
    • Как узнать текущий рабочий каталог в командной строке?
    • Какие команды используются для управления файлами и каталогами?
  2. Перенаправление ввода/вывода и конвейеры:
    • Какие символы используются для перенаправления вывода команды в файл?
    • Чем отличаются символы > и >> при перенаправлении вывода?
    • Что такое конвейер (pipe) в Shell, и как он используется?
  3. Написание скриптов на Shell:
    • Как объявить переменную в Shell скрипте?
    • Как передать аргументы в скрипт при его вызове?
    • Какие операторы управления используются в Shell скриптах, и как они работают?
  4. Управление процессами:
    • Как узнать список запущенных процессов в системе?
    • Как отправить сигнал процессу для его завершения?
    • Как перевести процесс в фоновый режим или вернуть его в передний план?
  5. Безопасность и права доступа:
    • Как изменить права доступа к файлу или каталогу в Shell?
    • Как изменить владельца и группу файла или каталога?
    • Какие команды используются для работы с пользователями и группами в Unix/Linux?
  6. Практические навыки:
    • Как написать скрипт, который будет искать все файлы в заданном каталоге с расширением “.txt” и выводить их список?
    • Как создать скрипт, который будет резервировать копию заданного каталога и его содержимого?
    • Как можно использовать командный интерпретатор для автоматизации рутинных задач на вашем компьютере?
Наверх
Лаб. работа “Работа с виртуальной машиной Linux”
Лаб. работа “Работа с файлами в Linux”