# chmod - perldoc - phpman

> **TLDR:** Change the access permissions of a file or directory.
>
- Give the [u]ser who owns a file the right to e[x]ecute it:
  `chmod u+x {{path/to/file}}`
- Give the [u]ser rights to [r]ead and [w]rite to a file/directory:
  `chmod u+rw {{path/to/file_or_directory}}`
- Remove e[x]ecutable rights from the [g]roup:
  `chmod g-x {{path/to/file}}`
- Give [a]ll users rights to [r]ead and e[x]ecute:
  `chmod a+rx {{path/to/file}}`
- Give [o]thers (not in the file owner's group) the same rights as the [g]roup:
  `chmod o=g {{path/to/file}}`
- Remove all rights from [o]thers:
  `chmod o= {{path/to/file}}`
- Change permissions recursively giving [g]roup and [o]thers the ability to [w]rite:
  `chmod {{-R|--recursive}} g+w,o+w {{path/to/directory}}`
- Recursively give [a]ll users [r]ead permissions to files. Also give e[X]ecute permissions to files that have at least one execution permission and to all sub-directories:
  `chmod {{-R|--recursive}} a+rX {{path/to/directory}}`

*Source: tldr-pages*

---

    chmod LIST
            Changes the permissions of a list of files. The first element of
            the list must be the numeric mode, which should probably be an
            octal number, and which definitely should *not* be a string of
            octal digits: 0644 is okay, but "0644" is not. Returns the
            number of files successfully changed. See also "oct" if all you
            have is a string.

                my $cnt = chmod 0755, "foo", "bar";
                chmod 0755, @executables;
                my $mode = "0644"; chmod $mode, "foo";      # !!! sets mode to
                                                            # --w----r-T
                my $mode = "0644"; chmod oct($mode), "foo"; # this is better
                my $mode = 0644;   chmod $mode, "foo";      # this is best

            On systems that support [fchmod(2)](https://www.chedong.com/phpMan.php/man/fchmod/2/markdown), you may pass filehandles
            among the files. On systems that don't support [fchmod(2)](https://www.chedong.com/phpMan.php/man/fchmod/2/markdown),
            passing filehandles raises an exception. Filehandles must be
            passed as globs or glob references to be recognized; barewords
            are considered filenames.

                open(my $fh, "<", "foo");
                my $perm = (stat $fh)[2] & 07777;
                chmod($perm | 0600, $fh);

            You can also import the symbolic "S_I*" constants from the
            "Fcntl" module:

                use Fcntl qw( :mode );
                chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables;
                # Identical to the chmod 0755 of the example above.

            Portability issues: "chmod" in perlport.

