Chmod

From RHS Wiki
Jump to navigation Jump to search

chmod <octal_value> file

The octal (0-7) value is calculated by adding up the values for each digit
User (rwx) = 4+2+1 = 7
Group(rx) = 4+1 = 5
World (rx) = 4+1 = 5
chmode mode = 0755

Examples

  • 4 = r--
  • 6 = rw-
  • 7 = rwx


x------------------------x-----------x
|chmod u=rwx,g=rwx,o=rx  | chmod 775 | 
|chmod u=rwx,g=rx,o=     | chmod 760 |
|chmod u=rw,g=r,o=r      | chmod 644 |
|chmod u=rw,g=r,o=       | chmod 640 |
|chmod u=rw,go=          | chmod 600 |
|chmod u=rwx,go=         | chmod 700 |
x------------------------x-----------x
test: Du=rwx,go=rx,Fu=rw,og=r

Sitcky bit:
When assigned to a directory, the elements inside it can only be renamed by:

  • the owner of the element
  • the owner of the directory
  • root
chmod +t dir_name
chmod -t dir_name


chmod 400 file - Read by owner
chmod 040 file - Read by group
chmod 004 file - Read by world

chmod 200 file - Write by owner
chmod 020 file - Write by group
chmod 002 file - Write by world

chmod 100 file - execute by owner
chmod 010 file - execute by group
chmod 001 file - execute by world

To combine these, just add the numbers together:
chmod 444 file - Allow read permission to owner and group and world
chmod 777 file - Allow everyone to read, write, and execute file

Change permissions only for directories

chmod 755 $(find /path/to/base/dir -type d)

Change permissions only for files

chmod 640 $(find /path/to/base/dir -type f)
for fi in $(find /Pilaf -type f); do chmod 640 $fi;done  # if there are many files

Chmod Script

#!/bin/sh
# syntax: setperm.s destdir
#
if [ -z $1 ] ; then echo "Requires single argument: <directoryname>" ; exit 1 ;                                       fi

destdir=$1

dirmode=0770
filemode=0660

YN=no

printf "\nThis will RECURSIVELY change the permissions for this entire branch:\n                                      "
printf "\t$destdir\n"
printf "\tDirectories chmod = $dirmode\tFiles chmod = $filemode\n"
printf "Are you sure want to do this [$YN]? "

read YN

case $YN in
        [yY]|[yY][eE][sS])
        # change permissions on files and directories.
        find $destdir -type f -print0 | xargs -0 chmod $filemode $i
        find $destdir -type d -print0 | xargs -0 chmod $dirmode $ii ;;

        *) echo "\nBetter safe than sorry I always say.\n" ;;
esac