Files, Permissions, Binary

That escalated quickly

We’ve spent a fair amount of time poking around on our systems and we’ve seen plenty of files and directories while using the ls command. Today we’re going to dig a bit deeper into the concept of files and what to do with them.

First, lets create a new directory to work in. Be sure you are in your home directory, and then use the mkdir (make directory) command to create a directory called “cotcli” (or whatever else you’d like to call it):

$ cd
$ mkdir cotcli
$ cd cotcli
$ pwd

Great, now lets create a file here. You can use the touch command to create a new empty file:

$ touch a-new-file
$ ls -l
total 0
-rw-r--r--  1 gabe  gabe  0 Oct 11 15:35 a-new-file

Using the ‘-l’ option to the ls command gives us a fair amount of information about the file we just created.

In order, we have “total 0” this is the total size (in blocks, which are 512 bytes each, let’s just ignore that for now) of the files in this directory.

Then we have a column that looks like this:


This represents the file “mode” for this file, and encodes information such as what different users are allowed to do to this file, and what type of file it is. In the first position we have a “-” which means this is a “regular file” other things this could be are “d” for “directory”, “l” for “symbolic link”, “b” for block special file, etc. All the different types are referenced in the ls(1) manual page. The next 9 positions represent the permission information for this file: rw-r--r--

Those 9 positions are really 3 sets of 3 permissions broken down as follows: Three for the owner, three for the group, and three for the world. The owner is generally the user that created the file (in this case you), the group is generally the primary group of the user that created the file (we’ll cover groups in more detail later), and the world refers to all other users on the system. So, for this particular file we have:

Owner: rw-  (read and write permissions)
Group: r--  (read permission only)
World: r--  (read permission only)

The permissions are always listed in this order (r)ead, (w)rite, e(x)ecute. And the sets of permissions are always listed in owner, group, world order as well.

Since I created this file (or you, in your case) I’m the owner and I am allowed to both read and write to this file. I can also erase this file since I own it, but we won’t worry about that now.

One of the things I find interesting about the file permissions is that they are one of the places where a normal user can peek into the inner workings of the computer. Each permission can be thought of as 3 bits (a zero or a one) each bit determining if that permission is set or not.

decimal		binary		english
0		000		no permissions
1		001		execute only
2		010		write only
3		011		write and execute only
4		100		read only
5		101		read and execute only
6		110		read and write only
7		111		read, write, and execute

The binary column shows where each permission is enabled (a 1) or disabled (a 0). The decimal column shows what the binary number for that set of permissions corresponds to in decimal, and the english column is the english explanation of what those 0’s and 1’s mean. So, instead of saying that my file has user write and read permissions, group read permissions, and world read permissions, I can say the file’s mode is: 644

If you’ve ever heard one of your computer nerd friends say something like, “Oh, I see the problem, the file is 770 when it should be 775”, this is what she was talking about.

Here is another table that tries to show the relationship:

Owner | 110  (in decimal: 6)
Group | 100  (in decimal: 4)
World | 100  (in decimal: 4)

I’ve actually told a bit of a lie, the decimal numbers here are really octal numbers (base 8) but to keep things simple for the time being we will just pretend they are decimals.

Next week, we’ll finish going through the rest of the information the ls command provides on our newly created file as well as talking about the e(x)ecute permission, and what that does.

New Terms

  • touch - Technically this command is for updating the last time a file was accessed or changed, but a side effect of this command is that if the file you are “touching” doesn’t exist, it will be created. man 1 touch for more information.
  • permissions - The rules that govern who is allowed to do what to a file.
  • owner - The person who owns a given file, usually the user who created that file.
  • group - Users can be lumped into groups and then that group can be given permissions to different files.
  • world - On Unix systems this referes to “anyone” with an account on the system.
  • binary - base 2 number system where the only possible values are 0 or 1.
  • octal - base 8 number system where the only possible values are from 0 to 7.