19

By accident I ran chmod -u filename and it removed all of the permissions I had on filename.

The man page does not reference a -u option. Experimenting I was able to conclude that it removes not all permissions, but just read and execute access, leaving write access intact.

So what does this do exactly?


My conclusion above is wrong, I now think that what it does is remove the permissions that the owner has, from all categories.


I think the behavior is analogous to a=u, only it is - instead of = and a can be dropped just as it can with, for instance, a+x.

  • 6
    +1 for asking a basic question that is not in the man page. – jww Mar 23 at 1:42
  • 1
    "The format of a symbolic mode is [ugoa...][[-+=][perms...]...], where perms is either zero or more letters from the set rwxXst, or a single letter from the set ugo" (GNU chmod man page); POSIX is fairly obscure, but defines a "permcopy" production for the same effect. – Michael Homer Mar 23 at 1:42
  • 1
    @MichaelHomer It doesn't say what it does. – y_wc Mar 23 at 1:44
  • 1
    @y_wc "Instead of one or more of these letters, you can specify exactly one of the letters ugo: the permissions granted to the user who owns the file (u), the permissions granted to other users who are members of the file's group (g), and the permissions granted to users that are in neither of the two preceding categories (o)." – Michael Homer Mar 23 at 1:45
  • 1
    Yes, I read that. I don't see that it mentions what it does. It says that I can specify one of those letters. Specifying, for instance u, I'll be specifying the permissions granted to the user who owns the file. But it doesn't say what it does. What does specify even mean? – y_wc Mar 23 at 1:47
19

This is not an option, but a standard (but uncommon) way of specifying the permissions. It means to remove (-) the permissions associated with the file owner (u), for all users (no preceding u, g, or o). This is documented in the man page.

GNU chmod's man page documents this as:

The format of a symbolic mode is [ugoa...][[-+=][perms...]...], where perms is either zero or more letters from the set rwxXst, or a single letter from the set ugo

and later

Instead of one or more of these letters, you can specify exactly one of the letters ugo: the permissions granted to the user who owns the file (u), the permissions granted to other users who are members of the file's group (g), and the permissions granted to users that are in neither of the two preceding categories (o)

So -u means to remove (-) whatever permissions are currently enabled for the owner (u) for everybody (equivalently to a-u, except honouring the current umask). While that's not often going to be very useful, the analogous chmod +u will sometimes be, to copy the permissions from the owner to others when operating recursively, for example.


It's also documented in POSIX, but more obscurely defined: the permission specification is broadly who[+-=]perms (or a number), and the effect of those are further specified:

The permcopy symbols u, g, and o shall represent the current permissions associated with the user, group, and other parts of the file mode bits, respectively. For the remainder of this section, perm refers to the non-terminals perm and permcopy in the grammar.

and then

-

... If who is not specified, the file mode bits represented by perm for the owner, group, and other permissions, except for those with corresponding bits in the file mode creation mask of the invoking process, shall be cleared.

  • Thanks, Michael. The POSIX documentation is convincing. The GNU however... Please see this comment of mine. I don't see how what comes after "So" follows from what's before. perms can be u, that I got. Yes, u specifies the permissions or the owner. But how does it follow that -u removes the permissions of the owner (modulus umask) from all users? – y_wc Mar 23 at 2:01
  • Because that's what - always does: it removes the specified permissions from the specified class of users. -u is exactly analogous to -w or (closer) to ugo-u. – Michael Homer Mar 23 at 2:03
  • I was about to say I didn't come here to discuss documentation and that I was happy to just understand what's going on, but the docs just clicked. Thanks. – y_wc Mar 23 at 2:05
  • Could I trouble you with another chmod documentation question? Let me know if you think this deserves a seperate question. "and = causes them to be added and causes unmentioned bits to be removed except that a directory's unmentioned set user and group ID bits are not affected. " This, to me, is saying that, given a directory whose owner has only write access, chmod u=rx directory will leave the owner's permissions as rwx. But that's not what happens, instead they become the expected r-x. Am I misinterpreting someting? – y_wc Mar 23 at 2:09
  • It's saying that the setuid/setgid (s) bits are left alone if you don't mention them, and anything else you didn't specify is removed. – Michael Homer Mar 23 at 2:13
2

The answer is little bit similar to https://unix.stackexchange.com/a/429424/255251.

chmod -u file_name

doesn't removes all permission, but it consider umask value.

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

Now change umask value

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
  • 2
    Instructive, good to know and very useful, but I think this isn't really the issue, although it is very much related. Thanks. – y_wc Mar 23 at 2:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.