Задания для зачета по факультативу Unix shell

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

В задачах 1-4 можно предполагать, что имена каталогов в $PATH не содержат пробелов.

  1. Напишите программу, которая находит самый длинный файл во всех каталогах, указанных в переменной среды PATH.
  2. Напишите программу, которая находит все файлы в во всех каталогах, указанных в переменной среды PATH, которые не являются исполняемыми.
  3. Напишите программу, которая выводит ls -l для всех файлов, являющихся символическими ссылками, во всех каталогах, указанных в переменной среды PATH.
  4. Напишите программу, которая формирует массив, каждый элемент которого соответствует одному каталогу из переменной среды PATH
  5. Найдите самый длинный исполняемый файл в файловой системе. Допускается игнорировать файлы в каталогах, к которым у вас нет доступа.
  6. Напишите шелловский скрипт, который для каждого аргумента, являющегося именем регулярного файла или каталога, выводит длину этого файла или каталога и его имя. Аргументы, не являющиеся именами файлов или каталогов, игнорируются. Длина каталога - это значение, которое для этого каталога выдает команда ls -ld, а не сумма длин всех файлов в этом каталоге.
  7. Подсчитайте общее количество файлов и других объектов файловой системы (каталогов, символических связей и т.д., кроме записей . и ..) в заданном каталоге и его подкаталогах. Допускается игнорировать содержимое подкаталогов, к которым у вас нет доступа.
  8. Напишите скрипт, который выводит слова man bear pig dog cat sheep, каждое на отдельной строке. Скрипт должен занимать не более трех строк. Строка #!/bin/bash не считается.
  9. Выведите список всех "живых" (отвечающих на ping) машин с адресами из диапазона от 10.4.16.1 до 10.4.16.254. Для проверки "живости" машины с адресом $IP используйте команду ping -w 1 -c 2 $IP (эта команда отправляет не более двух пакетов и ждет не более одной секунды).
  10. Для всех зарегистрированных в системе пользователей, выведите имена тех, в чьем домашнем каталоге или его подкаталогах есть хотя бы один исполняемый файл. Допускается игнорировать каталоги, к которым у вас нет доступа. Имена файлов и другие сообщения, в том числе сообщения об ошибках, выводить не следует.
  11. Выведите имена всех пользователей в системе, которым принадлежит хотя бы один файл с установленным битом setuid. Допускается игнорировать файлы в каталогах, к которым у вас нет доступа. Имена файлов и другие сообщения, в том числе сообщения об ошибках доступа к каталогам, выводить не следует.