Лабораторная работа. Поиск файлов - efanov/mephi GitHub Wiki

Подготовка

Изучите команды find, xargs, и grep с помощью команды man.

Создайте тестовый каталог. Свои команды проверять нужно находясь в каталоге test_finging

$ mkdir test_finding
$ cd test_finding
$ mkdir -p './-test dir/empty dir'
$ touch './-test dir'/{1..10}.sh
$ touch './-test dir'/{1..10}.txt
$ touch './-test dir'/{1..10}.bak
$ echo 'print echoing' > './-test dir'/1.sh
$ echo 'echo print' > './-test dir'/2.sh
$ echo 'too many errors' > './-test dir'/3.txt
$ echo 'are you looking an error here?' > './-test dir'/4.txt
$ echo 'There was a BIG ERROR.' > './-test dir'/5.txt

Задания

Используя команду find:

  1. Найдите все файлы и каталоги, имя которых содержит слово pass, поиск начните с корневого каталога.
  2. Найдите все файлы и каталоги, имя которых содержит слово pass без учёта регистра, поиск начните с корневого каталога.
  3. Найдите все файлы и каталоги, имя которых содержит слово pass, ограничив глубину поиска одним каталогом, поиск начните с корневого каталога.
  4. Найдите все файлы и каталоги, имена которых оканчиваются на .bin. Поиск необходимо выполнить в каталоге /home.
  5. Найдите все файлы (и только файлы) с расширением bak и удалите их.
  6. Найдите все файлы (и только файлы) с расширениями txt и sh.
  7. Найдите все файлы (и только файлы) в текущем каталоге и выведите только имя файла (без каталога), владельца, группу владельца, количество жёстких ссылок на этот файл и его размер в байтах.
  8. Найдите все пустые каталоги в текущем каталоге.
  9. Найдите все пустые каталоги в текущем каталоге и удалите их.
  10. Найдите и удалите все пустые файлы (и только файлы).
  11. Найдите все файлы (и только файлы) в текущем каталоге, на которые есть хотя бы одна жёсткая ссылка.
  12. Найдите файлы и каталоги в каталоге /etc, не принадлежащие пользователю root.
  13. Найдите все файлы (и только файлы), у которых нет расширения sh.
  14. Найдите все файлы (и только файлы), у которых количество жёстких ссылок более двух.
  15. Найдите все файлы (и только файлы) в каталоге /usr/bin, последний доступ к которым осуществлялся более трёх месяцев назад.
  16. Найдите все файлы (и только файлы) в каталогах /usr/bin и /usr/share, созданные или изменённые в течении последних 10 дней.
  17. Найдите и удалите все файлы (и только файлы) в каталоге /tmp, которые не менялись более двух недель.
  18. Найдите все файлы (и только файлы) в каталоге /usr/bin с установленным флагом suid/sgid.

Используя команды find и xargs или параметр -exec команды find:

  1. Найдите все файлы (и только файлы) с расширением txt и подсчитайте количество строк во всех этих файлах.
  2. Найдите все каталоги с названием .svn и удалите их, включая содержимое этих каталогов, попутно выводя список удалённых файлов на экран.
  3. Найдите все файлы (и только файлы) с расширением sh и добавьте им право на исполнение.
  4. Найдите все файлы (и только файлы) с расширением conf в каталоге /etc и подсчитайте их суммарный размер, используя команду du.

Протестируйте команды, которые вы написали выше, для файлов и каталогов, в именах которых содержатся пробелы и специальные символы, такие как ! и &.

Используя команду grep:

  1. Из файла /var/log/messages вывести строки, содержащие ключевое слово ERROR, без учёта регистра.
  2. Из файла /var/log/messages вывести количество строк, не содержащих ключевое слово ERROR, без учёта регистра.
  3. Из файла /var/log/messages вывести строки, содержащие только слово ERROR целиком, с учётом регистра.
  4. Вывести количество строк из файла /etc/group, совпадающих с шаблоном wheel.
  5. Найти во всех файлах из текущего каталога и вложенных подкаталогов строки, содержащие шаблон #!bin/bash.
  6. Изменить предыдущую команду таким образом, чтобы она выводила дополнительные 10 строк после каждого найденного шаблона.
  7. Найти во всех файлах с расширением sh из текущего каталога и вложенных подкаталогов строки, содержащие слово echo целиком. В выводе команды grep найденные слова выделите цветом.
  8. Измените предыдущую команду таким образом, чтобы команда grep отображала также имя файла и номер строки, в которой было обнаружено совпадение с шаблоном.

Отчёт по лабораторной работе

Скопируйте данную лабораторную работу в виде файла Markdown на свой компьютер, и под каждым заданием напишите ответ.

git clone https://github.com/efanov/mephi.wiki.git

Получившийся файл загрузите в собственный репозиторий.