Is it possible to have write but not read permission on a file in Linux? What about execute but not read and write permission?


4 Answers 4


Yes, although execute permission without read permission is meaningless on a non-binary file (since you need to read a script to execute it). On a directory, execute without read means you can traverse the directory, but not list it or do anything else with its contents. Consider the following path:


If directory foo has mode 0711 (full permission for owner, execute only for group and world), while directory bar has mode 0755 (full permission for owner, read and execute for everyone else), then accounts other than user may cd /home/user/foo/bar and find that bar behaves as any ordinary directory; however, while cd /home/user/foo will work, ls and any other command in that directory will fail due to insufficient permissions (i.e., you can't read the directory to list its contents).

Write permission without read permission on a file does just what it implies: you can write to the file, but you can't read back what you've written. This might be useful in a case where processes under multiple accounts write to a single logfile, but a process belonging to one user must not be able to read the (presumably sensitive) log entries from a process belonging to another user.

  • About your last paragraph: What if one process is malicious/buggy and decides to delete that file/write garbage into it (because it has write privileges), this would be a disaster for the other processes accesing it, maybe there is a way too just append instead of write? Jul 10, 2019 at 1:50
  • 1
    Unix permissions don't support that use case as far as I know; there may be some implementations that do, but I wouldn't want to rely on it cross-platform. In that circumstance, I'd gate access to the file in question through a process that could do its own access control, and ran under the same account that owned the file. Appenders would talk to the process instead of writing directly to the file. Jul 11, 2019 at 15:22
[benji@laptop ~]$ ./hello
Hello world!
[benji@laptop ~]$ chmod 000 hello #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello #make it executable
[benji@laptop ~]$ cat hello #try to read it, but can't
cat: hello: Permission denied
[benji@laptop ~]$ ./hello #try to run it, it works!
Hello world!
[benji@laptop ~]$

[benji@laptop ~]$ cat hello.sh
echo 'Hello world!'
[benji@laptop ~]$ chmod 000 hello.sh #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +x hello.sh #make it executable
[benji@laptop ~]$ cat hello.sh #try to read it; FAIL
cat: hello.sh: Permission denied
[benji@laptop ~]$ ./hello.sh #try to run it, but the shell interpreter (bash) cannot read it; FAIL
/usr/bin/bash: ./hello.sh: Permission denied
[benji@laptop ~]$ 

It is possible to have execute only permissions only if the file is not a shell script; a shell script needs to be read (and therefore needs read permissions) by the shell interpreter. Otherwise, for binary executable files, read permissions are not required; just execute permissions.

[benji@laptop ~]$ echo hello >file
[benji@laptop ~]$ chmod 000 file #no permissions, start out with a clean slate
[benji@laptop ~]$ chmod +w file #write-only permissions
[benji@laptop ~]$ cat file #cannot read it
cat: file: Permission denied
[benji@laptop ~]$ echo hello again >file #but *can* write it

So yes, it is possible to have write but not read permissions on a file.


The read, write, execute permissions in Unix generically are totally independent.

Unix distinbguishes between user permissions (for the owner of the file), group permissions (for anybpdy belonging to the file's group) and others. The permissions are checked strictly in this order; i.e., if the user tries an access, the user permissions apply, and nothing else is checked; if not the user but belongs to the group, group permissions apply; if none of the above, others permissions apply.

Permissions are shown by ls(1) as rwx thrice (user, group, others). So r-- means read-only, rw- is read-write, and --x is execute only. The command chown(1) is normally fed octal numbers giving the permissions, but you can also use the above notation, i.e., chown u+r,g-x,o=rw somefile means "add r for user, subtract x for group, set r and w exactly for others".


One way of approaching chmod is to use the chmod math where read=4 write=2 execute=1. the positioning of the number you want goes in the order U=user G=group O=Others the command 'chmod UGO' will set permissions.

If you want user to have full permissions it would be read(4)+write(2)+execute(1)=7

If you want group to have read and execute it would be read(4)+execute(1)=5

If you want other to have no access it would be 0

the command to set those permissions would be: chmod 750 file

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .