Chmod Permission Calculator

Convert Linux file permissions between octal, symbolic and plain-English — with an ls -l preview, ready-to-run chmod commands and special-bit warnings, 100% in your browser.

Type an octal value like 755, a symbolic form like rwxr-xr-x or a chmod-style change like u+x,g-w, or tick the boxes — all three stay in sync, and the preview, description and warnings update as you go.

🔒 100% private — nothing is uploaded or stored. Every permission you type or tick is processed entirely in your browser. Nothing is sent to our servers, written to disk, or logged — and the page keeps working if your internet connection drops.
Quick presets:

Set the permissions

3 or 4 digits (0–7). A 4th leading digit holds the special bits: 4 = SetUID, 2 = SetGID, 1 = sticky.

Full form rwxr-xr-x (sets everything) or chmod-style changes like u+x,g-w,o=r (applied to the current permissions).

read write exec Owner Group Others

Result

755
octal
rwxr-xr-x
symbolic

    How chmod permissions work

    How the octal number is built

    Each of the three classes — owner, group, others — is one octal digit. Each permission is a bit: r = 4, w = 2, x = 1. Add the bits that are set:

    PermissionsBitsDigitPermissionsBitsDigit
    rwx4+2+17r-x4+0+15
    rw-4+2+06r--4+0+04
    -wx0+2+13-w-0+2+02
    -w-0+2+02--x0+0+11
    r--4+0+04---0+0+00

    So 755 means owner rwx (7), group r-x (5), others r-x (5). A 4th leading digit carries the special bits — 4 = SetUID, 2 = SetGID, 1 = sticky — which is why /usr/bin/passwd is 4755 and /tmp is 1777.

    Symbolic notation

    A chmod-style change is a comma-separated list of clauses, each with three parts:

    • Who — u owner, g group, o others, a all (the default when you omit it).
    • Operator — = set exactly, + add, - remove (defaults to +).
    • What — r read, w write, x execute, s SetUID/SetGID, t sticky.

    Examples: chmod u+x script.sh makes a script executable for its owner; chmod g-w,o-r notes.txt strips group write and everyone-else read; chmod a=r file leaves exactly read for everybody; chmod u+s,g+s app sets both special bits. The 9-character form rwxr-xr-x is the same idea written out in full — it sets everything at once, which is why it is safer when you want an exact result rather than a tweak.

    The special bits

    • SetUID (4) — on a file, the program runs with the owner's privileges no matter who runs it (that is how passwd can write /etc/shadow).
    • SetGID (2) — on a file, the program runs with the group's privileges; on a directory, new files inherit the directory's group — the standard setup for shared project directories (e.g. 2770).
    • Sticky (1) — on a directory, only a file's owner (or the directory's owner) can delete or rename it — that is why /tmp is 1777: everyone can write, but nobody can delete anyone else's files.

    ls shows these in the execute slots: s/t when execute is also set, uppercase S/T when the bit is set but execute is missing.

    Common mistakes

    • 777 on a script or config file — anyone on the system can modify it, which is code execution or config tampering for the person running it.
    • A world-writable directory without the sticky bit — anyone can delete or rename other users' files in it.
    • Forgetting the sticky bit on a shared scratch directory (you want 1777, not 777).
    • A shared directory without SetGID — new files land in each user's own group, so teammates can't read them (you want 2770).

    Luke Keam
    Thank you for reading. Get in touch
    Luke Keam | techgeek.biz