#!/bin/bash
# Experiment 4: Demonstrate ownership control using chown and chgrp
# Run: chmod +x 04_unix_chown_chgrp.sh && sudo ./04_unix_chown_chgrp.sh
# NOTE: chown/chgrp require root or appropriate privileges to change
#       ownership to another user/group. Use 'sudo' to test fully.

echo "============================================"
echo " UNIX Ownership: chown and chgrp"
echo "============================================"

mkdir -p sandbox
cd sandbox

touch sample.txt
echo
echo "--- Initial ownership ---"
ls -l sample.txt

echo
echo "Output columns: -rw-r--r--  1   USER   GROUP   size  date  name"
echo "                                ^^^^   ^^^^^"
echo "                                owner  group"

echo
echo "--- whoami / groups: see current user and groups ---"
whoami
groups

echo
echo "--- chown: change file OWNER ---"
echo "  Example (needs sudo):  chown root sample.txt"
echo "  Example with group  :  chown root:root sample.txt"
echo
if [ "$(id -u)" -eq 0 ]; then
    chown root sample.txt
    ls -l sample.txt
    chown "$SUDO_USER" sample.txt 2>/dev/null || chown "$(logname 2>/dev/null)" sample.txt
    ls -l sample.txt
else
    echo "  (skipping actual chown -- not running as root)"
fi

echo
echo "--- chgrp: change file GROUP ---"
echo "  Example: chgrp users sample.txt"
echo
if [ "$(id -u)" -eq 0 ]; then
    chgrp users sample.txt 2>/dev/null && ls -l sample.txt
else
    # Even without sudo, you can chgrp to a group you belong to
    MYGROUP=$(id -gn)
    chgrp "$MYGROUP" sample.txt
    ls -l sample.txt
fi

echo
echo "--- chown -R / chgrp -R: recursive on a directory ---"
mkdir -p mydir/sub
touch mydir/a.txt mydir/sub/b.txt
echo "  chown -R user:group mydir   # owner+group recursively for all files inside"
echo "  chgrp -R group       mydir  # group only, recursively"

echo
echo "Quick reference:"
echo "  chown user file        -> change owner"
echo "  chown user:group file  -> change owner AND group"
echo "  chgrp group file       -> change group only"
echo "  -R flag                -> apply recursively into a directory"
echo "  (root privileges usually required)"

cd ..
rm -rf sandbox
