CHMOD(1)                        User Commands                       CHMOD(1)
NAME
       chmod - change the permissions mode of a file
SYNOPSIS
       chmod [
-fR] 
absolute-mode file ...       
chmod [
-fR] 
symbolic-mode-list file ...       
chmod [
-fR] 
acl_operation file ...       
chmod [
-fR] [
-@ named_attribute]...
attribute_specification_list file ...
DESCRIPTION
       The 
chmod utility changes or assigns the mode of a file.       
chmod can also be used to modify Access Control Lists (ACLs) on files
       and directories, and to modify boolean read-write system attributes
       on regular files, directories, and opaque extended attribute files.
   Absolute Mode
       An absolute mode command line has the following format:       
chmod [
options] 
absolute-mode file ...
       where 
absolute-mode is specified using octal numbers 
nnnn defined as
       follows:       
n            a number from 
0 to 
7. An absolute mode is constructed from the
            OR of any of the following modes:            
4000                        Set user 
ID on execution.            
20#0                        Set group 
ID on execution if 
# is 
7, 
5, 
3, or 
1.
                        Enable mandatory locking if 
# is 
6, 
4, 
2, or 
0.
                        For directories, files are created with BSD
                        semantics for propagation of the group ID. With this
                        option, files and subdirectories created in the
                        directory inherit the group ID of the directory,
                        rather than of the current process. For directories,
                        the set-gid bit can only be set or cleared by using
                        symbolic mode.            
1000                        Turn on sticky bit. See 
chmod(2).            
0400                        Allow read by owner.            
0200                        Allow write by owner.            
0100                        Allow execute (search in directory) by owner.            
0700                        Allow read, write, and execute (search) by owner.            
0040                        Allow read by group.            
0020                        Allow write by group.            
0010                        Allow execute (search in directory) by group.            
0070                        Allow read, write, and execute (search) by group.            
0004                        Allow read by others.            
0002                        Allow write by others.            
0001                        Allow execute (search in directory) by others.            
0007                        Allow read, write, and execute (search) by others.
       For directories, the 
setgid bit cannot be set (or cleared) in
       absolute mode; it must be set (or cleared) in symbolic mode using 
g+s       (or 
g-s).
   Symbolic Mode
       A symbolic mode command line has the following format:       
chmod [
options] 
symbolic-mode-list file ...
       where 
symbolic-mode-list is a comma-separated list (with no
       intervening white space) of symbolic mode expressions of the form:
       [
who] 
operator [
permissions]
       Operations are performed in the order given. Multiple 
permissions       letters following a single operator cause the corresponding
       operations to be performed simultaneously.       
who                     zero or more of the characters 
u, 
g, 
o, and 
a                     specifying whose permissions are to be changed or
                     assigned:                     
u                          user's permissions                     
g                          group's permissions                     
o                          others' permissions                     
a                          all permissions (user, group, and other)
                     If 
who is omitted, it defaults to 
a, but the setting of
                     the file mode creation mask (see 
umask in 
sh(1) or                     
csh(1) for more information) is taken into account.
                     When 
who is omitted, 
chmod does not override the
                     restrictions of your user mask.       
operator                     either 
+, 
-, or 
=, signifying how permissions are to be
                     changed:                     
+                             Add permissions.
                             If 
permissions are omitted, nothing is added.
                             If 
who is omitted, add the file mode bits
                             represented by 
permissions, 
except for the
                             those with corresponding bits in the file mode
                             creation mask.
                             If 
who is present, add the file mode bits
                             represented by the 
permissions.                     
-                             Take away permissions.
                             If 
permissions are omitted, do nothing.
                             If 
who is omitted, clear the file mode bits
                             represented by 
permissions, 
except for those
                             with corresponding bits in the file mode
                             creation mask.
                             If 
who is present, clear the file mode bits
                             represented by 
permissions.                     
=                             Assign permissions absolutely.
                             If 
who is omitted, clear all file mode bits; if                             
who is present, clear the file mode bits
                             represented by 
who.
                             If 
permissions are omitted, do nothing else.
                             If 
who is omitted, add the file mode bits
                             represented by 
permissions, 
except for the
                             those with corresponding bits in the file mode
                             creation mask.
                             If 
who is present, add the file mode bits
                             represented by 
permissions.
                     Unlike other symbolic operations, 
= has an absolute
                     effect in that it resets all other bits represented by                     
who. Omitting 
permissions is useful only with 
= to take
                     away all permissions.       
permission                     any compatible combination of the following letters:                     
l                              mandatory locking                     
r                              read permission                     
s                              user or group set-ID                     
t                              sticky bit                     
w                              write permission                     
x                              execute permission                     
X                              execute permission if the file is a directory
                              or if there is execute permission for one of
                              the other user classes                     
u,
g,
o                              indicate that 
permission is to be taken from
                              the current user, group or other mode
                              respectively.
                     Permissions to a file can vary depending on your user
                     identification number (UID) or group identification
                     number (GID). Permissions are described in three
                     sequences each having three characters:
                     User   Group   Other
                     rwx    rwx     rwx
                     This example (user, group, and others all have
                     permission to read, write, and execute a given file)
                     demonstrates two categories for granting permissions:
                     the access class and the permissions themselves.
                     The letter 
s is only meaningful with 
u or 
g, and 
t only
                     works with 
u.
                     Mandatory file and record locking (
l) refers to a
                     file's ability to have its reading or writing
                     permissions locked while a program is accessing that
                     file.
                     In a directory which has the set-group-ID bit set
                     (reflected as either 
-----s--- or 
-----l--- in the
                     output of 
'ls -ld'), files and subdirectories are
                     created with the group-ID of the parent directory--not
                     that of current process.
                     It is not possible to permit group execution and enable
                     a file to be locked on execution at the same time. In
                     addition, it is not possible to turn on the set-group-
                     ID bit and enable a file to be locked on execution at
                     the same time.  The following examples, therefore, are
                     invalid and elicit error messages:
                       chmod g+x,+l 
file                       chmod g+s,+l 
file                     Only the owner of a file or directory (or the super-
                     user) can change that file's or directory's mode. Only
                     the super-user can set the sticky bit on a non-
                     directory file. If you are not super-user, 
chmod masks
                     the sticky-bit but does not return an error. In order
                     to turn on a file's set-group-ID bit, your own group ID
                     must correspond to the file's and group execution must
                     be set.
   ACL Operation
       An ACL Operation command line has the following format:
         chmod [
options] A[
number]- 
file ...
         chmod [
options] A-
acl_specification file ...
         chmod [
options] A[
index]{+|=}
acl_specification file ...
       Where 
acl_specification is a comma-separated list (with no
       intervening white space) of an ACL specification of the form:       
A[index]+
acl_specification                                     Prepends the access control entries
                                     (ACE) specified in 
acl_specification to
                                     the beginning of the file's ACL.
                                     Depending on the file system, the ACL
                                     can be reordered when applied to the
                                     file. If "optional" number is specified
                                     then new ACEs are inserted before
                                     specified number.       
A-                                     Removes all ACEs for current ACL on
                                     file and replaces current ACL with new
                                     ACL that represents only the current
                                     mode of the file.       
Aindex-
                                     Removes ACE specified by 
index number.       
A-acl_specification                                     Removes ACEs specified by                                     
acl_specification, if they exist in
                                     current file's ACL.       
A=acl_specification                                     Replaces a files entire ACL with                                     
acl_specification.       
A[index]=
acl_specification                                     Replaces ACEs starting at a specific
                                     index number in the current ACL on the
                                     file. If multiple ACEs are specified,
                                     then each subsequent ACE in                                     
acl_specification replaces the
                                     corresponding ACE in the current ACL.       
POSIX-draft ACL Specification (as supported by UFS)       POSIX-draft ACLs (as supported by UFS) are specified as colon (
:)
       separated fields of the following.       
user::perms           File owner permissions.       
user:username:perms
           Permissions for a specific user.       
group::perms           File group owner permissions.       
group:groupname:perms
           Permissions for a specific group.       
other::perms           Permissions for user other than the file owner or members of file
           group owner.       
mask:perms           The ACL mask. The mask entry specifies the maximum permissions
           allowed for user (other than that the owner) and for groups.       
default:user::perms           Default file owner permissions.       
default:user:username:perms
           Default permissions for a specific user.       
default:group::perms           Default file group owner permissions.       
default:group:groupname:perms
           Default permissions for a specific group.       
default:other:perms           Default permissions for user other than the file owner or members
           of the file group owner.       
default:mask:perms           Default ACL mask.
       The above specification allows for ACLs to be specified such as:
         user:tom:rw-,mask:rwx,group:staff:r-x       
NFSv4 ACL Specification (as supported by NFSv4 and ZFS)       NFSv4 ACLs provide richer ACL semantics. They provide both allow and
       deny entries, finer grained permissions, and enhanced inheritance
       control.
       NFSv4 ACLs are specified as colon (
:) separated fields of the
       following.       
owner@:<perms>[:inheritance flags]:<allow|deny>           Permissions for file owner.       
group@:<perms>[:inheritance flags]:<allow|deny>           Permissions for file group owner.       
everyone@:<perms>[:inheritance flags]:<allow|deny>           Permissions for everyone, including file owner and group owner.       
user:<username>:<perms>[:inheritance flags]:<allow|deny>           Permissions for a specific user.       
usersid:<sid string>:<perms>[:inheritance flags]:<allow|deny>           Permissions for a specific user, but user is specified by SID.       
group:<groupname>:<perms>[:inheritance flags]:<allow|deny>           Permissions for a specific group.       
groupsid:<sid string>:<perms>[:inheritance flags]:<allow|deny>           Permissions for a specific group, but group is specified by SID.       
sid:<sid string>:<perms>[:inheritance flags]:<allow|deny>           Permissions for a specific SID, but it doesn't matter if it is a
           user or a group.
       Permissions can be specified in three different 
chmod ACL formats:
       verbose, compact, or positional. The verbose format uses words to
       indicate that the permissions are separated with a forward slash (
/)
       character. Compact format uses the permission letters and positional
       format uses the permission letters or the hyphen (
-) to identify no
       permissions.
       The permissions for verbose mode and their abbreviated form in
       parentheses for compact and positional mode are described as follows:       
read_data (r)
                               Permission to read the data of a file.       
list_directory (r)
                               Permission to list the contents of a
                               directory.       
write_data (w)
                               Permission to modify a file's data. anywhere
                               in the file's offset range.       
add_file (w)
                               Permission to add a new file to a directory.       
append_data (p)
                               The ability to modify a file's data, but only
                               starting at EOF.
                               Currently, this permission is not supported.       
add_subdirectory (p)
                               Permission to create a subdirectory to a
                               directory.       
read_xattr (R)
                               Ability to read the extended attributes of a
                               file.       
write_xattr (W)
                               Ability to create extended attributes or
                               write to the extended attribute directory.       
execute (x)
                               Permission to execute a file.       
read_attributes (a)
                               The ability to read basic attributes (non-
                               ACLs) of a file.       
write_attributes (A)
                               Permission to change the times associated
                               with a file or directory to an arbitrary
                               value.       
delete (d)
                               Permission to delete a file.       
delete_child (D)
                               Permission to delete a file within a
                               directory.       
read_acl (c)
                               Permission to read the ACL of a file.       
write_acl (C)
                               Permission to write the ACL of a file.       
write_owner (o)
                               Permission to change the owner of a file.       
synchronize (s)
                               Permission to access file locally at server
                               with synchronize reads and writes.
                               Currently, this permission is not supported.
       Using the compact ACL format, permissions are specified by using 14
       unique letters to indicate permissions.
       Using the positional ACL format, permissions are specified as
       positional arguments similar to the 
ls -V format. The hyphen (
-),
       which indicates that no permission is granted at that position, can
       be omitted and only the required letters have to be specified.
       The letters above are listed in the order they would be specified in
       positional notation.
       Permissions can be specified with these letters in the following way:
         rwx--D--------
       The hyphens can be removed to compact the string as follows:
         rwxD
       Several special permission sets or aliases are also supported. The
       following permission sets are used the same way that verbose
       permissions are specified.       
full_set                     All permissions.       
modify_set                     All permissions except 
write_acl and 
write_owner.       
read_set                     read_data, read_acl, read_attributes, and 
read_xattr.       
write_set                     write_data, append_data, write_attributes, and                     
write_xattr       The optional inheritance flags can be specified in the three formats.
       The first format uses words to indicate the various inheritance flags
       separated with a forward slash (
/) character.       
file_inherit (f)
                           Inherit to all newly created files.       
dir_inherit (d)
                           Inherit to all newly created directories.       
inherit_only (i)
                           When placed on a directory, do not apply to the
                           directory, only to newly created files and
                           directories. This flag requires that either                           
file_inherit and or 
dir_inherit is also
                           specified.       
no_propagate (n)
                           Indicates that ACL entries should be inherited to
                           objects in a directory, but inheritance should
                           stop after descending one level. This flag is
                           dependent upon either 
file_inherit and or                           
dir_inherit also being specified.       
successful_access (S)
                           Indicates whether an alarm or audit record should
                           be initiated upon successful accesses. Used with
                           audit/alarm ACE types.       
failed_access (F)
                           Indicates whether an alarm or audit record should
                           be initiated when access fails. Used with
                           audit/alarm ACE types.       
inherited (I)
                           ACE was inherited.
       The inheritance flags listed can also be specified in the compact
       format or as positional arguments similar to the 
ls -V format. A
       hyphen character indicates that the inheritance flag at that position
       is not specified in the positional ACL format.
       The inheritance flags can be specified with these letters in any of
       the following equivalent ways.
         file_inherit/dir_inherit/no_propagate
         fd-n---
         fdn
       With this inheritance model, an ACL entry can be specified such as:
         user:tom:read_data/write_data/read_attributes:file_inherit:allow
         user:fred:read_data:file_inherit/dir_inherit:deny
         user:bob:read_data:allow
   Attribute Operation
       An attribute operation command line has the following format:
         chmod [
options] 
attribute_specification_list file ...
       where 
attribute_specification_list is the character 
S followed by a
       comma-separated list of one or more 
attribute_specifications. Each       
attribute_specification is of the form:
         [
operator]
attribute_specifier       An 
operator is one of the following:       
+            Each attribute specified by the associated 
attribute_specifier            is adjusted to match the value specified by the            
attribute_specifier.       
-            Each attribute specified by the associated 
attribute_specifier            is adjusted to match the inverse of the value specified by the            
attribute_specifier.       
=            Each attribute specified by the associated 
attribute_specifier            is adjusted to match the value specified by the            
attribute_specifier. Any boolean read-write extended system
            attributes associated with the current file that are not
            specified by 
attribute_specifier is cleared.
       If an 
operator is not specified in an 
attribute_specification, 
chmod       behaves as if 
+ had been specified.
       An 
attribute_specifier takes one of the following forms:       
a           Set all boolean read-write extended system attributes associated
           with the current file.       
c[compact_attribute_list]       
c'{'compact_attribute_list'}'
           Set each boolean read-write extended system attribute identified
           by 
compact_attribute_list.       
v[verbose_attribute_setting]       
v['{'verbose_attribute_setting_list'}']
           Set each boolean read-write extended system attribute identified
           by 
verbose_attribute_setting.
       A 
compact_attribute_list is a list of zero or more adjacent attribute
       abbreviation characters from  list of 
Attribute Names and       Abbreviation Characters later in this section. An arbitrary number of
       hyphen (
-) characters can be included in a 
compact_attribute_list.
       These are ignored.
       A 
verbose_attribute_setting is an attribute name from the  list of       
Attribute Names and Abbreviation Characters later in this section,
       optionally, immediately preceded by 
no. If the attribute name is used
       without 
no, the attribute is set; otherwise the attribute is cleared.
       A 
verbose_attribute_setting_list is zero or more comma-separated       
verbose_attribute_settings.
       Multiple operations specified for a file are accumulated and are all
       set for a file operand as a single attribute setting operation. If an
       attribute is specified more than once in an       
attribute_specification_list, the last specified operation is
       applied.
       The following is a list of 
Attribute Names and Abbreviation       Characters:       
Attribute Name                         Abbreviation Character       hidden                         H       system                         S       readonly                         R       archive                         A       nounlink                         u       immutable                         i       appendonly                         a       nodump                         d       av_quarantined                         q       av_modified                         m       offline                         O       sparse                         sOPTIONS
       The following options are supported:       
-f                             Force. 
chmod does not complain if it fails to
                             change the mode of a file.       
-R                             Recursively descend through directory
                             arguments, setting the mode for each file. When
                             symbolic links are encountered, the mode of the
                             target file is changed, but no recursion takes
                             place.       
-@ named_attribute                             Perform the attribute operation on the named
                             extended attribute file of each file operand
                             instead of the file operand itself. If multiple                             
-@ operations are supplied, the attribute
                             specification mode is applied to each of the
                             named attribute files.
                             A named attribute of 
* carries meaning to                             
chmod, and is considered to mean all extended
                             attribute files associated with a file operand.
                             This does not refer to the special files 
. and                             
...
                             A named attribute of 
.. carries special meaning
                             to 
chmod, and is considered to mean the file
                             operand itself. This allows 
chmod, in a single
                             call, to apply the attribute specification mode
                             to the specified named attribute file of the
                             file operand and the file operand itself.
OPERANDS
       The following operands are supported:       
absolute-mode       symbolic-mode-list           Represents the change to be made to the file mode bits of each
           file named by one of the 
file operands. See 
Absolute Mode and           
Symbolic Mode in the 
DESCRIPTION section of this manual page for
           more information.       
acl_operation           Represents the modification to be performed on the file's ACL.
           See 
ACL Operation in the 
DESCRIPTION section for more
           information.           
acl_operation is one of the following:             
A[number] -             A-acl_specification             A[index]{+|=}acl_specification       attribute_specification_list           Represents the modification to performed on the file's
           attributes. See Attribute Operation in the 
DESCRIPTION section of
           this manual page for more information.       
file           A path name of a file whose file mode bits are to be modified.
USAGE
       See 
largefile(7) for the description of the behavior of 
chmod when
       encountering files greater than or equal to 2 Gbyte (2^31 bytes).
EXAMPLES
       Example 1: Denying execute Permission
       The following example denies execute permission to everyone:
         % chmod a-x 
file       Example 2: Allowing read-only Permission
       The following example allows only read permission to everyone:
         % chmod 444 
file       Example 3: Making a File readable and writable
       The following example makes a file readable and writable by the group
       and others:
         % chmod go+rw 
file         % chmod 066 
file       Example 4: Locking a File From Access
       The following example locks a file from access:
         $ chmod +l 
file       Example 5: Granting read, write, execute, and set group-ID Permission
       on a File
       The following example grants everyone read, write, and execute
       permissions on the file, and turns on the set group-ID:
         $ chmod a=rwx,g+s 
file         $ chmod 2777 
file       Example 6: Prepending a New ACL Entry on a ZFS File
       The following example prepends a new ACL entry on a ZFS file.
       First, display the current ACL:
         $ ls -v file.3
         -rw-r--r--   1 marks    staff          0 Oct  9 15:49 file.3
               0:owner@:execute:deny
               1:owner@:read_data/write_data/append_data/write_xattr/
                  write_attributes/write_acl/write_owner:allow
               2:group@:write_data/append_data/execute:deny
               3:group@:read_data:allow
               4:everyone@:write_data/append_data/write_xattr/execute/
                 write_attributes/write_acl/write_owner:deny
               5:everyone@:read_data/read_xattr/read_attributes/read_acl/
                  synchronize:allow
       Issue the following command:
         $ chmod A+user:lp:read_data:deny file.3
       Display the new ACL:
         $ ls -v file.3
         -rw-r--r--+  1 marks    staff          0 Oct  9 15:49 file.3
               0:user:lp:read_data:deny
               1:owner@:execute:deny
               2:owner@:read_data/write_data/append_data/write_xattr/
                   write_attributes/write_acl/write_owner:allow
               3:group@:write_data/append_data/execute:deny
               4:group@:read_data:allow
               5:everyone@:write_data/append_data/write_xattr/execute/
                   write_attributes/write_acl/write_owner:deny
               6:everyone@:read_data/read_xattr/read_attributes/read_acl/
                   synchronize:allow
       Example 7: Prepending a New POSIX-draft ACL Entry on a UFS File
       The following example prepends a new POSIX-draft ACL entry on a UFS
       file.
       First, display the current ACL:
         $ ls -v file.2
         -rw-r--r--   1 marks    staff          0 Oct  9 15:52 file.2
               0:user::rw-
               1:group::r--           #effective:r--
               2:mask:r--
               3:other:r--
       Issue the following command:
         $ chmod A+user:lp:-wx file.2
       Display the new ACL:
         $ ls -v file.2
         -rw-r--r--+  1 marks    staff          0 Oct  9 15:52 file.2
               0:user::rw-
               1:user:lp:-wx          #effective:---
               2:group::r--           #effective:r--
               3:mask:r--
               4:other:r--
       Example 8: Inserting an ACL Entry in a Specific Position on a ZFS file
       The following example inserts an ACL entry in a specific position on
       a ZFS file system. It also illustrates the compact ACL format.
       First, display the ACL to pick a location to insert a new ACE.
         % ls -V file.1
         -rw-r--r--+  1 root     root           0 Oct  6 12:16 file.1
              user:lp:rw------------:-------:allow
               owner@:--x-----------:-------:deny
               owner@:rw-p---A-W-Co-:-------:allow
               group@:-wxp----------:-------:deny
               group@:r-------------:-------:allow
            everyone@:-wxp---A-W-Co-:-------:deny
            everyone@:r-----a-R-c--s:-------:allow
       Next, insert a new entry in location 3.   This  causes  the  entries
       that  are currently in position 3 - 6 to be pushed down.
       Issue the following command:
         $ chmod A3+user:marks:r:deny file.1
       Display the new ACL:
         $ ls -V file.1
         -rw-r--r--+  1 root     staff          0 Feb  3 14:13 file.1
              user:lp:rw------------:-------:allow
               owner@:--x-----------:-------:deny
               owner@:rw-p---A-W-Co-:-------:allow
           user:marks:r-------------:-------:deny
               group@:-wxp----------:-------:deny
               group@:r-------------:-------:allow
            everyone@:-wxp---A-W-Co-:-------:deny
            everyone@:r-----a-R-c--s:-------:allow
       Example 9: Inserting a POSIX-draft ACL in a Specific Position on a UFS
       File
       The file system reorders ACLs when they are stored in the file
       system. The following example illustrates this behavior.
         $ ls -v file.1
         -rw-r--r--+  1 root     root           0 Sep 29 16:10 file.1
               0:user::rw-
               1:user:lp:rw-          #effective:r--
               2:group::r--           #effective:r--
               3:mask:r--
               4:other:r--
       Now, insert an entry at index position 3.  The command works, but the
       file system reorders the ACL.
         $ chmod A3+user:marks:rw- file.1
         $ ls -v file.1
         -rw-r--r--+  1 root     root           0 Sep 29 16:10 file.1
               0:user::rw-
               1:user:lp:rw-           #effective:r--
               2:user:marks:rw-        #effective:r--
               3:group::r--            #effective:r--
               4:mask:r--
               5:other:r--
       Rather than inserting the ACL entry in position 3 as requested, it
       actually ends up in position 2.
       Example 10: Removing an ACL Entry on a ZFS File
       The following example removes the 
lp entry from an ACL:
         $ ls -v file.3
         -rw-r--r--+  1 marks    staff          0 Oct  9 15:49 file.3
               0:user:lp:read_data:deny
               1:owner@:execute:deny
               2:owner@:read_data/write_data/append_data/write_xattr/
                  write_attributes/write_acl/write_owner:allow
               3:group@:write_data/append_data/execute:deny
               4:group@:read_data:allow
               5:everyone@:write_data/append_data/write_xattr/execute/
                  write_attributes/write_acl/write_owner:deny
               6:everyone@:read_data/read_xattr/read_attributes/read_acl/
                  synchronize:allow
         $ chmod A-user:lp:read_data:deny file.3
         $ ls -v file.3
         -rw-r--r--   1 marks    staff          0 Oct  9 15:49 file.3
               0:owner@:execute:deny
               1:owner@:read_data/write_data/append_data/write_xattr/
                  write_attributes/write_acl/write_owner:allow
               2:group@:write_data/append_data/execute:deny
               3:group@:read_data:allow
               4:everyone@:write_data/append_data/write_xattr/execute/
                  write_attributes/write_acl/write_owner:deny
               5:everyone@:read_data/read_xattr/read_attributes/read_acl/
                  synchronize:allow
       Example 11: Removing a POSIX-draft ACL on a UFS File
       The following example removes the 
lp entry from an ACL:
         $ ls -v file.2
         -rw-r--r--+  1 marks    staff          0 Oct  9 15:52 file.2
               0:user::rw-
               1:user:lp:-wx           #effective:---
               2:group::r--            #effective:r--
               3:mask:r--
               4:other:r--
         $ chmod A-user:lp:-wx file.2
         $ ls -v file.2
         -rw-r--r--   1 marks    staff          0 Oct  9 15:52 file.2
               0:user::rw-
               1:group::r--            #effective:r--
               2:mask:r--
               3:other:r--
       Example 12: Removing a Specific ACL Entry by Index Number on a ZFS
       File
       Consider the following ACL:
         $ ls -v file
             0:group:staff:read_data/write_data/execute/read_acl:allow
             1:user:bin:read_data:deny
             2:user:bin:read_data:allow
             3:owner@:write_data/append_data:deny
             4:owner@:read_data/write_xattr/execute/write_attributes/write_acl
                 /write_owner:allow
             5:group@:write_data/append_data:deny
             6:group@:read_data/execute:allow
             7:everyone@:write_data/append_data/write_xattr/write_attributes
                 /write_acl/write_owner:deny
             8:everyone@:read_data/read_xattr/execute/read_attributes/read_acl
                 /synchronize:allow
       Remove the second user entry for bin.
         $ chmod A2- file
         $ ls -v file
             0:group:staff:read_data/write_data/execute/read_acl:allow
             1:user:bin:read_data:deny
             2:owner@:write_data/append_data:deny
             3:owner@:read_data/write_xattr/execute/write_attributes/write_acl
                /write_owner:allow
             4:group@:write_data/append_data:deny
             5:group@:read_data/execute:allow
             6:everyone@:write_data/append_data/write_xattr/write_attributes
                /write_acl/write_owner:deny
             7:everyone@:read_data/read_xattr/execute/read_attributes/read_acl
                /synchronize:allow
       Example 13: Removing a Specific POSIX-draft ACL Entry on a UFS File
       The following example removes the lp entry by index number from the
       following ACL:
         $ ls -v file.1
         -rw-r--r--+  1 root     root           0 Sep 29 16:10 file.1
               0:user::rw-
               1:user:lp:rw-              #effective:r--
               2:group::r--               #effective:r--
               3:mask:r--
               4:other:r--
               $ chmod A1- file.1
               $ ls -v
         -rw-r--r--+  1 root     root           0 Sep 29 16:10 file.1
               0:user::rw-
               1:group::r--               #effective:r--
               2:mask:r--
               3:other:r--
       Example 14: Removing All ACLs From a File
       The following command works with either NFSv4/ZFS or POSIX-draft
       ACLs.
       Consider the following ACL:
         $ ls -v file.3
         -rw-r--r--+  1 marks    staff          0 Oct  9 15:49 file.3
               0:user:lp:read_data/write_data:allow
               1:user:marks:read_acl:allow
               2:owner@:execute:deny
               3:owner@:read_data/write_data/append_data/write_xattr/
                  write_attributes/write_acl/write_owner:allow
               4:group@:write_data/append_data/execute:deny
               5:group@:read_data:allow
               6:everyone@:write_data/append_data/write_xattr/execute/
                  write_attributes/write_acl/write_owner:deny
               7:everyone@:read_data/read_xattr/read_attributes/read_acl/
                  synchronize:allow
       The existing ACL is effectively removed and is replaced with an ACL
       that represents the permission bits of the file.
         $ chmod A- file.3
         $ ls -v file.3
         -rw-r--r--  1 marks    staff          0 Oct  9 15:49 file.3
              0:owner@:execute:deny
              1:owner@:read_data/write_data/append_data/write_xattr/
                 write_attributes/write_acl/write_owner:allow
              2:group@:write_data/append_data/execute:deny
              3:group@:read_data:allow
              4:everyone@:write_data/append_data/write_xattr/execute/
                 write_attributes/write_acl/write_owner:deny
              5:everyone@:read_data/read_xattr/read_attributes/read_acl/
                synchronize:allow
       Example 15: Replacing an Entire ACL Entry on a ZFS File
       Use the following 
chmod syntax if you want to replace an ACL in its
       entirety:
         $ chmod A=owner@:read_data/write_data:allow,group@:read_data/
                        write_data:allow,user:lp:read_data:allow file.4
         $ ls -v file.4
         -rw-rw----+  1 marks    staff          0 Oct  9 16:12 file.4
                0:owner@:read_data/write_data:allow
                1:group@:read_data/write_data:allow
                2:user:lp:read_data:allow
       Example 16: Replacing an Entire POSIX-draft ACL on a UFS File
       This operation is a little more complicated.  The replacement ACL
       needs the necessary entries to represent the file owner, file group
       owner, other, mask and any additional entries you wish to set.
         $ chmod A=user::rw-,group::rw-,other::---,mask:r--,
                       user:lp:r-- file.3
         $ ls -v file.3
         -rw-r-----+  1 root     root           0 Oct  9 16:14 file.3
                 0:user::rw-
                 1:user:lp:r--        #effective:r--
                 2:group::rw-         #effective:r--
                 3:mask:r--
                 4:other:---
       Example 17: Replacing a Specific Entry on a ZFS File
       Consider the following ACL.
         $ ls -v file.5
         -rw-r--r--+  1 marks    staff          0 Oct  9 16:18 file.5
              0:user:marks:read_data:allow
              1:owner@:execute:deny
              2:owner@:read_data/write_data/append_data/write_xattr/
                 write_attributes/write_acl/write_owner:allow
              3:group@:write_data/append_data/execute:deny
              4:group@:read_data:allow
              5:everyone@:write_data/append_data/write_xattr/execute/
                 write_attributes/write_acl/write_owner:deny
              6:everyone@:read_data/read_xattr/read_attributes/read_acl/
                 synchronize:allow
       Now, change the allow access to a deny for user marks:
         $ chmod A0=user:marks:read_data:deny file.5
         $ ls -v file.5
         -rw-r--r--+  1 marks   staff          0 Aug 23 09:11 file.5
         0:user:marks:read_data:deny
         1:owner@:read_data/write_data/append_data/write_xattr/write_attributes
              /write_acl/write_owner:allow
         2:group@:write_data/append_data/execute:deny
         3:group@:read_data:allow
         4:everyone@:write_data/append_data/write_xattr/execute/write_attributes
              /write_acl/write_owner:deny
         5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
              :allow
       Example 18: Replacing a Specific POSIX-draft ACL on a UFS File
       Consider the following ACL.
         $ ls -v file.4
         -rw-r--r--+  1 marks    staff          0 Oct  9 16:21 file.4
                 0:user::rw-
                 1:user:lp:rwx         #effective:r--
                 2:group::r--          #effective:r--
                 3:mask:r--
                 4:other:r--
       Now, change the permission on 
lp from 
rwx to 
r--:
         $ chmod A1=user:lp:r-- file.4
         $ ls -v file
         -rw-r--r--+  1 marks    staff          0 Oct  9 16:21 file.4
                 0:user::rw-
                 1:user:lp:r--         #effective:r--
                 2:group::r--          #effective:r--
                 3:mask:r--
                 4:other:r--
       Example 19: Setting ACL Inheritance Flags on a ZFS File
       You can only set inheritance flags on ZFS files. When setting ACLs on
       directories,  several inheritance flags can be optionally set.
       Suppose you have an ACL entry for user 
lp that you want to be
       inherited to newly created files in a directory.  First, you need to
       create an inheritable ACL entry on the directory:
         $ chmod A+user:lp:read_data:file_inherit:allow test.dir
         $ ls -dv test.dir
         drwxr-xr-x+  2 marks   staff          2 Aug 23 09:08 test.dir/
         0:user:lp:read_data:file_inherit:allow
         1:owner@::deny
         2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
              /append_data/write_xattr/execute/write_attributes/write_acl
              /write_owner:allow
         3:group@:add_file/write_data/add_subdirectory/append_data:deny
         4:group@:list_directory/read_data/execute:allow
         5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
              /write_attributes/write_acl/write_owner:deny
         6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
              /read_acl/synchronize:allow
       The 
lp entry is inherited to newly created files in the directory       
test.dir.
         $ touch test.dir/file.test
         $ ls -v test.dir/file.test
         -rw-r--r--+  1 marks    staff          0 Oct  9 16:29 test.dir/file.test
              0:user:lp::deny
              1:user:lp:read_data:allow
              2:owner@:execute:deny
              3:owner@:read_data/write_data/append_data/write_xattr/
                  write_attributes/write_acl/write_owner:allow
              4:group@:write_data/append_data/execute:deny
              5:group@:read_data:allow
              6:everyone@:write_data/append_data/write_xattr/execute/
                  write_attributes/write_acl/write_owner:deny
              7:everyone@:read_data/read_xattr/read_attributes/read_acl/
          synchronize:allow
       The user 
lp entry is inherited to the newly created file. Multiple
       combinations of the inheritance flags can be specified. For example,
       if you wanted the 
lp entry to also be inherited to  directories, then
       the following command can be used:
         $ chmod A+user:lp:read_data:file_inherit/\
               dir_inherit:allow test.dir
       Example 20: Replacing System Attributes of a ZFS File
       The following examples replace system attributes of a ZFS file:
         $ chmod S=v{archive,hidden,readonly,system,appendonly,\
              nonodump,immutable,noav_modified,noav_quarantined,\
              nounlink,nooffline,nosparse} file1
       or
         $ chmod S=c{AHRSaiu} file1
       or
         $ chmod S=c{AHRSa-i--u--} file1
       or
         $ chmod S=cAHRSaiu file1
       or
         $ chmod -@ '..' S=cAHRSaiu file1
       Assuming appropriate privileges, this results in the following system
       attributes of 
file1 being set: 
archive, 
hidden, 
readonly, 
system,       
appendonly, 
immutable, and 
nounlink. Assuming appropriate privileges,
       the following system attributes of 
file1 are cleared: 
nodump,       
av_modified, 
av_quarantined, 
offline, and 
sparse.
       Example 21: Clearing All System Attributes of a ZFS File
       The following examples clears all system attributes of a ZFS file:
         $ chmod S-a file1
       or
         $ chmod -@ '..' S-a file1
       Assuming appropriate privileges, all boolean read-write system
       attributes are cleared on 
file1.
       Example 22: Setting a System Attribute of a Named Attribute File of a
       ZFS File
       The following example sets a system attribute of a named attribute
       file of a ZFS file, but not of the file itself:
         $ chmod -@ myattr S+vhidden file1
       This results in the hidden system attribute being set for the named
       attribute file 
myattr of 
file1, but not the file itself.
       Example 23: Setting a System Attribute of All Named Attribute File of
       a ZFS File
       The following example sets a system attribute of all named attribute
       files of a ZFS file, but not of the file itself:
         $ chmod -@ '*' S+a file1
       Example 24: Setting a System Attribute of All Named Attribute Files of
       a ZFS File
       The following example sets a system attribute of all named attribute
       files of a ZFS file, as well as of the file itself:
         $ chmod -@ '..' -@ '*' S+vhidden file1
       This results in the hidden system attribute being set for all named
       attribute files of 
file1, as well as the file itself.
       Example 25: Recursively Descending Through a Directory Hierarchy
       The following example recursively descends through a directory
       hierarchy, and sets all system attributes of all named attribute
       files, the ZFS file operands, as well as of the directory itself:
         $ chmod -R -@ '..' -@ '*' S+a directory1
       This results in the hidden system attribute being set for all named
       attribute files of all regular files and directories within the
       directory hierarchy of 
directory1, as well as of 
directory1 itself.
       Example 26: Setting the hidden and system System Attributes of a ZFS
       File
       The following examples set the 
hidden and 
system system attributes of
       a ZFS file:
         $ chmod S+cHS file1
       or
         $ chmod S+vhidden,+vsystem file1
       or
         $ chmod S+v{hidden,system} file1
       or
         $ chmod S+c{-H-S--------} file1
       or
         $ chmod S-v{nohidden,nosystem} file1
       or
         $ chmod S-v{hidden,system},+v{hidden,system} file1
       Example 27: Clearing All System Attributes of a ZFS File
       The following example clears all system attributes of a ZFS file:
         $ chmod S-a file1
       or
         $ chmod S=v{} file1
       In the following two examples, the last attribute operation specified
       takes precedence.
       In this example, the replacement attribute name list (
{}) clears all
       system attributes for 
file1:
         $ chmod S+cHS,=v{} file1
       In this example, the clear attributes operation (
-a) clears all
       system attributes of 
file1:
         $ chmod S+vhidden,+vsystem,-a file1
       Example 28: Setting the Values of All Boolean read-write System
       Attributes of a File
       The following example sets the values of all boolean read-write
       system attributes of a file to the same as the boolean read-write
       system attributes of another file:
         $ chmod S=v`ls -/v file1|sed -n '2s/.*{/{/p'` file2
       Assuming appropriate privileges and that 
file1 and 
file2 have the
       same supported system attributes, all system attributes of 
file1 that
       are set are also set on 
file2. All system attributes of 
file1 that
       are cleared are also cleared on 
file2.
ENVIRONMENT VARIABLES
       See 
environ(7) for descriptions of the following environment
       variables that affect the execution of 
chmod: 
LANG, 
LC_ALL, 
LC_CTYPE,       
LC_MESSAGES, and 
NLSPATH.
EXIT STATUS
       The following exit values are returned:       
0             Successful completion.       
>0             An error occurred.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |CSI                 | Enabled         |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
SEE ALSO
       getfacl(1), 
ls(1), 
setfacl(1), 
chmod(2), 
fgetattr(3C), 
acl(7),       
attributes(7), 
environ(7), 
fsattr(7), 
largefile(7), 
standards(7)NOTES
       Absolute changes do not work for the set-group-
ID bit of a directory.
       You must use 
g+s or 
g-s.       
chmod permits you to produce useless modes so long as they are not
       illegal (for instance, making a text file executable). 
chmod does not
       check the file type to see if mandatory locking is meaningful.
       If the filesystem is mounted with the 
nosuid option, 
setuid execution
       is not allowed.
       If you use 
chmod to change the file group owner permissions on a file
       with 
ACL entries, both the file group owner permissions and the 
ACL       mask are changed to the new permissions. Be aware that the new 
ACL       mask permissions can change the effective permissions for additional
       users and groups who have 
ACL entries on the file. Use the 
getfacl(1)       or 
ls(1) command to make sure the appropriate permissions are set for
       all 
ACL entries.
                              November 24, 2014                     CHMOD(1)