#!/bin/bash set -e mnt=/mnt/test sudo mount -t libfs none "$mnt" fail() { echo "FAIL: $1" >&2 exit 1 } check_mode() { [ "$(stat -c '%a' "$1")" = "$2" ] || fail "$1 mode != $2" } check_owner() { [ "$(stat -c '%U' "$1")" = "$2" ] || fail "$1 owner != $2" } check_fail() { set +e "$@" status=$? set -e [ "$status" -ne 0 ] || fail "Expected failure: $*" } # 2. Права на директории check_mode "$mnt/books" 1777 check_mode "$mnt/authors" 777 # 3. Удаление/переименование books check_fail rmdir "$mnt/books" check_fail mv "$mnt/books" "$mnt/b" # 4. Создание файла sudo touch "$mnt/books/f1" echo "data" | sudo tee "$mnt/books/f1" > /dev/null [ "$(cat "$mnt/books/f1")" = "data" ] || fail "f1 content mismatch" # 5. mkdir и mkfifo в books check_fail mkdir "$mnt/books/dir" check_fail mkfifo "$mnt/books/fifo" # 6. mkdir в authors mkdir "$mnt/authors/u1" check_mode "$mnt/authors/u1" 1777 # 7. Переименование и удаление чужого каталога check_fail mv "$mnt/authors/u1" "$mnt/authors/u1-renamed" check_fail rmdir "$mnt/authors/u1-renamed" # 8. ссылки в authors ln "$mnt/books/f1" "$mnt/authors/u1/link1" check_fail ln -s "$mnt/books/f1" "$mnt/authors/u1/symlink" check_fail touch "$mnt/authors/u1/new.txt" check_fail mkdir "$mnt/authors/u1/dir1" # 9. удаление файла — должна исчезнуть ссылка sudo rm "$mnt/books/f1" [ ! -e "$mnt/authors/u1/link1" ] || fail "link1 not removed after f1 deletion" # 10. пересоздание f1 — ссылка не должна появиться sudo touch "$mnt/books/f1" [ ! -e "$mnt/authors/u1/link1" ] || fail "link1 appeared after f1 recreated" # 11. удалить только ссылку sudo touch "$mnt/books/f2" ln "$mnt/books/f2" "$mnt/authors/u1/link2" rm "$mnt/authors/u1/link2" [ -e "$mnt/books/f2" ] || fail "f2 removed with link2" # 12. удалить файл после удаления ссылки ln "$mnt/books/f2" "$mnt/authors/u1/link2" rm "$mnt/authors/u1/link2" sudo rm "$mnt/books/f2" # 13. remount check sudo umount "$mnt" sudo mount -t libfs none "$mnt" check_mode "$mnt/books" 1777 check_mode "$mnt/authors" 777 echo "All tests passed."