4000 - set user id 2000 - set group id 1000 - sticky bit setuid means that when this program is running, it adopts as its userid, the owner of the program. setgid means that when this program is running, it adopts as its groupid, the group owner of the program. setgid bit is used far less frequently, but it lets the user assume a different group identity during the duration of the program, so they would be in a different group with access to those files owned by that group. The "sticky bit" is somewhat of a legacy permission. When a program has a "sticky bit" turned on, then the program remains in memory even after it terminates, so if it runs again it's already loaded up. However, modern architectures don't even acknowledge this function anymore. But if it's on a directory, then only the owner of a file or the owner of its directory (or the root) may delete the file. Normally, anyone with write access to the directory can delete a file in it, but with the sticky bit, that's not good enough. You need to own the file. The idea behind the "sticky bit" for folders is that there are some folders that multiple users use (notably /tmp). It is convenient to have multiple users in the folder, but you don't a user deleting other poeple's files. Everybody has to have write access to the folder because they need to add files to the folder, but you don't want them to have full deletion capability. With the sticky bit turned on, only owners can delete their own stuff. Editorializing: Having three sets of broad permissions (user, group, world) is too crude a file permission system to be useful in modern times. A better would allow for naming multiple users and multiple groups with different sorts of permissions. This is what modern Windows systems use. Most operating systems do something similar, not exactly the same as Linux. Most operating systems organize processes into a hierarchy, with parent processes and child processes. Most operating systems organize files into a hierarchy, with directories, subdirectories, and so forth. char *h = "HELLO"; h[0] = 'J'; printf ("HELLO"); On Windows 98, this prints JELLO