The ls command (list a directory's files)
The ls command lists files and directories. You will use it every time
you log onto the myth computers.
In its no-argument form, it simply lists all the files in the directory:
$ ls
assign0 assign1 assign2 assign3 file1.txt file2.txt
$
There are many, many arguments you can use with ls. The most common is
probably the -l flag, which lists files with extra information:
$ ls -l
total 12
drwx------ 2 cgregg operator 2048 Sep 6 11:42 assign0
drwx------ 4 cgregg operator 2048 Sep 6 08:42 assign1
drwx------ 3 cgregg operator 2048 Sep 6 08:43 assign2
drwx------ 2 cgregg operator 2048 Sep 6 09:44 assign3
-rw------- 1 cgregg operator 18 Sep 6 11:50 file1.txt
-rw------- 1 cgregg operator 46 Sep 6 11:50 file2.txt
$
The first field of the listing shows whether or not the file is a directory ('d'), and then the "permissions" for the file. The permissions are not that important to know right now, but the "rwx" simply means that you have the ability to (r)ead, (w)rite, and (e)xecute a file or the files in a directory.
The next important field is the size of the file (directories on
myth have 2048 bytes by default). So, file1.txt is 18 bytes long,
and file2.txt is 46 bytes.
The date field tells you when the file was last modified, and it will contain the time if in the current year, and the year otherwise.
Finally, the file name is listed.
Another common flag is -a, which lists all files, including "hidden"
files, which begin with a period. You can use flags together, and they
combine effects. E.g.,
$ ls -al
total 16
drwx------ 6 cgregg operator 2048 Sep 6 12:02 .
drwx------ 7 cgregg operator 2048 Sep 6 08:46 ..
drwx------ 2 cgregg operator 2048 Sep 6 11:42 assign0
drwx------ 4 cgregg operator 2048 Sep 6 08:42 assign1
drwx------ 3 cgregg operator 2048 Sep 6 08:43 assign2
drwx------ 2 cgregg operator 2048 Sep 6 09:44 assign3
-rw------- 1 cgregg operator 4 Sep 6 12:02 .do_not_look.txt
-rw------- 1 cgregg operator 18 Sep 6 11:54 file1.txt
-rw------- 1 cgregg operator 46 Sep 6 11:55 file2.txt
-rw------- 1 cgregg operator 22 Sep 6 12:01 .this_is_hidden.txt
There are four "hidden" files above: ., .., .do_not_look.txt,
and .this_is_hidden.txt.
If you want to have a short listing that tells you which names are files,
which are executable, and which are directories, use the -F flag:
$ ls -F
hello* hello.c hello.c~ innerFolder/ readme.txt
$
Names that end in * are executable, names that end in / are directories,
and all other names are files. (Note: the ~ at the end of hello.c~ is
the designation for a backup file from the vim editor, and not part of
the shell (the "shell" is the program that runs the terminal and
interprets commands).
The same directory with the -al flags:
$ ls -al
total 32
drwx------ 3 cgregg operator 2048 Sep 6 12:06 .
drwx------ 6 cgregg operator 2048 Sep 6 12:02 ..
-rwx------ 1 cgregg operator 8558 Sep 6 08:42 hello
-rw------- 1 cgregg operator 99 Sep 6 08:42 hello.c
-rw------- 1 cgregg operator 4 Sep 6 12:05 hello.c~
drwx------ 2 cgregg operator 2048 Sep 6 12:06 innerFolder
-rw------- 1 cgregg operator 15015 Sep 6 12:05 readme.txt
$
Note that the hello program has the x attribute, meaning that it
is executable, or runnable (it is a program).
There are many, many arguments for ls. You can see the arguments
using the man ls command (q to quit). For instance, if you want to
see a directory list that shows all the files with the
most recently modified files at the end, you can do this:
$ ls -alrt
total 32
-rw------- 1 cgregg operator 99 Sep 6 08:42 hello.c
-rwx------ 1 cgregg operator 8558 Sep 6 08:42 hello
drwx------ 6 cgregg operator 2048 Sep 6 12:02 ..
-rw------- 1 cgregg operator 4 Sep 6 12:05 hello.c~
-rw------- 1 cgregg operator 15015 Sep 6 12:05 readme.txt
drwx------ 2 cgregg operator 2048 Sep 6 12:06 innerFolder
drwx------ 3 cgregg operator 2048 Sep 6 12:06 .