| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #!/bin/bash
- # This is a script to generate "awkward" files and directories as test cases,
- # to check that exa can actually handle them: symlinks that point at
- # themselves, directories that you aren't allowed to view, files with strange
- # extended attributes, that sort of thing.
- ## -- configuration --
- # Directory that the files should be generated in.
- DIR=testcases
- if [[ -e "$DIR" ]]
- then
- echo "'$DIR' already exists - aborting" >&2
- exit 2
- fi
- # You! Yes, you, the name of the user running this script.
- YOU=`whoami`
- # Someone with *higher* privileges than yourself, such as root.
- ROOT=root
- # A UID that doesn't map to any user on the system.
- INVALID_UID=666
- # A GID that doesn't map to any group on the system.
- INVALID_GID=616
- # List commands as they are run
- # set -x
- # Abort on any error!
- abort() { echo 'Hit an error - aborting' >&2; exit 1; }
- trap 'abort' ERR
- # Get confirmation from the user before running.
- # echo "This script will generate files into the $DIR directory."
- # echo "It requires sudo for the '$ROOT' user."
- # echo "You probably want to edit this file before running it."
- # read -r -p "Continue? [y/N] " response
- # if [[ ! $response =~ ^([yY][eE][sS]|[yY])$ ]]
- # then
- # exit 2
- # fi
- mkdir "$DIR"
- ## -- links --
- mkdir "$DIR/links"
- ln -s / "$DIR/links/root"
- ln -s /usr "$DIR/links/usr"
- ln -s nowhere "$DIR/links/broken"
- ## -- users and groups --
- mkdir "$DIR/passwd"
- # sudo is needed for these because we technically aren't a member of the
- # groups (because they don't exist), and chown and chgrp are smart enough to
- # disallow it!
- touch "$DIR/passwd/unknown-uid"
- sudo -u "$ROOT" chown $INVALID_UID "$DIR/passwd/unknown-uid"
- touch "$DIR/passwd/unknown-gid"
- sudo -u "$ROOT" chgrp $INVALID_GID "$DIR/passwd/unknown-gid"
- ## -- permissions --
- mkdir "$DIR/permissions"
- touch "$DIR/permissions/all-permissions"
- chmod 777 "$DIR/permissions/all-permissions"
- touch "$DIR/permissions/no-permissions"
- chmod 000 "$DIR/permissions/no-permissions"
- mkdir "$DIR/permissions/forbidden-directory"
- chmod 000 "$DIR/permissions/forbidden-directory"
- ## -- extended attributes --
- mkdir "$DIR/attributes"
- touch "$DIR/attributes/none"
- touch "$DIR/attributes/one"
- xattr -w greeting hello "$DIR/attributes/one"
- touch "$DIR/attributes/two"
- xattr -w greeting hello "$DIR/attributes/two"
- xattr -w another_greeting hi "$DIR/attributes/two"
- touch "$DIR/attributes/forbidden"
- xattr -w greeting hello "$DIR/attributes/forbidden"
- chmod +a "$YOU deny readextattr" "$DIR/attributes/forbidden"
- mkdir "$DIR/attributes/dirs"
- mkdir "$DIR/attributes/dirs/empty-with-attribute"
- xattr -w greeting hello "$DIR/attributes/dirs/empty-with-attribute"
- mkdir "$DIR/attributes/dirs/full-with-attribute"
- touch "$DIR/attributes/dirs/full-with-attribute/file"
- xattr -w greeting hello "$DIR/attributes/dirs/full-with-attribute"
- mkdir "$DIR/attributes/dirs/full-but-forbidden"
- touch "$DIR/attributes/dirs/full-but-forbidden/file"
- xattr -w greeting hello "$DIR/attributes/dirs/full-but-forbidden"
- chmod 000 "$DIR/attributes/dirs/full-but-forbidden"
- chmod +a "$YOU deny readextattr" "$DIR/attributes/dirs/full-but-forbidden"
|