Linux Basics
This page provides a basic introduction to using Linux, specifically geared toward the Linux systems at Thayer School.
Logging In
In order to log into any of our Linux systems, you will need to use your NetID and your Dartmouth password. See NetID Username and Managing Passwords for details about these credentials.
The Linux File System
The Linux file system is a hierarchical filesystem that begins with the "root" directory - '/' All other directories descend from this. On all of our Linux systems, the ThayerFS shares are mounted under the /thayerfs directory and jumbo shares under the /jumbo directory. Although this appears and behaves as a local directory, it is in fact remote. Here is a partial example of the directory structure on our systems:
/ |-- bin |-- dev |-- etc |-- lib |-- sbin |-- jumbo | `-- bigdata |-- thayerfs | |-- common | |-- courses | |-- home | `-- d12345q |-- tmp |-- usr | `-- local | `-- bin `-- var `-- log
The Shell
If you are at the console of one of Linux systems (for example in MacLean M210 or Cummings C115), you can use the graphical user interface to do much of what you need to do with the system. However, if you are using systems remotely or as you need to access advanced functionality, you will need to begin using the shell - also referred to as the command line. This is analogous to the command prompt in Windows.
If you use ssh to connect to one of our systems remotely, you will already be at a shell prompt. If you are at the console of a Linux Lab system, you can either right-click on the desktop and select "Open Terminal," or select the Terminal application from the Applications->Thayer pull-down menu.
As you will find with Linux, there are many ways to do almost everything - the shell is no exception. On our systems, the default shell is called bash (the Bourne-again shell, named after one of the original authors). The are other shells that can be used which have slightly different characteristics - everything on this page will be specific to the bash shell.
Shell Prompt
When the shell opens, you will get a message about your home quota usage and you will then see the shell prompt, which should look like:
vanguard:~$
The first part of the prompt is the machine on which the shell is running, then a colon, and then the current directory. The tilde (~) character is shorthand for your home directory - the actual directory is something like /thayerfs/home/d12345q. Finally, the shell prompt ends in a dollar sign ($) character.
Navigation
One of the fundamental things to understand at the shell prompt is filesystem navigation. As you do things at the shell prompt, you will likely need to change your location, since commands that your type will act on files that exist in your current location, unless you specify otherwise. To determine your current location, you can either look at your prompt, which should have your current directory in it, or you can use the pwd
(print working directory) command:
vanguard:~$ pwd /thayerfs/home/d12345q
To list the files in the current directory, you use the ls
command:
vanguard:~$ ls Desktop Documents Music Pictures Public Templates Videos web
The behavior of most Linux commands can be changed by adding "switches" to the command. With the ls
command, if you want to see all the file information, including dates and sizes, you can use the -l
(lower-case L) switch:
vanguard:~$ ls -l total 32 drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Desktop drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Documents drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Music drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Pictures drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Public drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Templates drwxr-xr-x 2 d12345q +thayerusers 4096 2009-01-07 10:08 Videos
This listing shows the permissions (an initial 'd' indicates a directory), the file owner and group, and the modification date and time.
To change the current directory, you use the cd
command. For example, to change to the top-level ThayerFS courses directory, you could type:
vanguard:~$ cd /thayerfs/courses/ vanguard:/thayerfs/courses$
To create a new directory, you use the mkdir
command. This command will only work in a directory for which you have write permission (e.g. your home directory):
vanguard:~$ mkdir new_folder vanguard:~$ cd new_folder/ vanguard:~/new_folder$ pwd /thayerfs/home/d12345q/new_folder
Two special directory "shortcuts" may be useful as well. The directory .
(a single period) refers to the current directory, and the directory ..
(two periods) refers to the "parent" of the current directory. So, if you wanted to go up a level in the directory hierarchy, you could type cd ..
:
vanguard:~$ pwd /thayerfs/home/d12345q vanguard:~$ cd .. vanguard:/thayerfs/home$ pwd /thayerfs/home
Execution Path
When you type a command at the shell, this command must be in the execution path in order to be found. You can see your current execution path by looking at the PATH
environment variable:
vanguard:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/thayerf s/apps/other:/thayerfs/apps/abaqus/bin:/thayerfs/apps/ansys/current/Framework/bi n/Linux64:/thayerfs/apps/ansys/current/fluent/bin:/thayerfs/apps/cadence/bin:/th ayerfs/apps/comsol/bin:/thayerfs/apps/eclipse:/thayerfs/apps/fiji:/thayerfs/apps /gams:/thayerfs/apps/idl/bin:/thayerfs/apps/julia/bin:/thayerfs/apps/maple/bin:/ thayerfs/apps/mathematica/bin:/thayerfs/apps/matlab/bin:/thayerfs/apps/maya/bin: /thayerfs/apps/netgen/bin:/thayerfs/apps/paraview/bin:/thayerfs/apps/sagemath:/t hayerfs/apps/synopsys/pcmstudio/bin:/thayerfs/apps/synopsys/sentaurus/bin:/thaye rfs/apps/tecplot/bin:/thayerfs/apps/totalview/bin:/thayerfs/apps/turbovnc/opt/Tu rboVNC/bin:/thayerfs/apps/visit/bin:/thayerfs/apps/xilinx/bin
A consequence of this is that your current directory is not usually in the execution path. To run a command that is not in your execution path, you need to specify the path explicitly. For commands in your current directory, you can use the directory ./
to run it. For example, if I have a program called myprog, I can run it like this:
vanguard:~$ ./myprog
Case Sensitivity
In Linux, the filesystem is case sensitive. This means that it is perfectly valid to have two files, one called newfile
and another called NewFile
. This is different from the Windows filesystem, which is simply case-preserving.
Other basic commands
Here are a few other basic commands that will be useful:
- cat - Display the contents of a file to the screen
- less - Display the contents of a file, one screen-full at a time
- mv - Move or rename a file or directory
- cp - Copy a file
- rm - Delete a File
- rmdir - Remove a directory
And, perhaps most importantly, is the man
command. This is short for manual, and provides help on nearly any command. To use this you type man command
where command
is the command for which you'd like help. For example, to learn all about the ls command, you would type:
vanguard:~$ man ls
Editing Files
When working with text files, there are several options for editing the files. If you are at the console, a good general-purpose editor is gedit. This can be run by selecting Text Editor from the Applications->Accessories drop-down menu. You can also run it from the shell by simply typing gedit
. You can also type an existing filename after gedit
to open this file specifically"
vanguard:~$ gedit myfile.txt
There are several text-based editors that can be used from either the console or remotely. Some of the most widely-used are:
- vim
- emacs
- nano
Each of these operates differently. To use any of these, you can view the man page (e.g. man vim) and/or search for information about them on the internet. Here are a couple of good pages to start with:
- vim: Using vi, the Unix Visual Editor
- emacs: Absolute Beginner's Guide to Emacs
- nano: nano Manual
Compiling
In order to run C or Fortran programs, they need to be compiled into binaries that the system can execute. We have many different compilers available (see the Linux Services page), but here are some very basic examples.
If you created a very simple C program in a file named hello.c:
#include <stdio.h> main() { printf ("Hello World!\n"); }
you could compile it with this command:
$ gcc -o hello hello.c
This uses the GNU C Compiler (gcc) to compile the file hello.c
into the executable file hello
. The file can then be run like this (remember that the working directory is likely not in your path, so you must use the ./
to specify where it is):
$ ./hello Hello World!
Similarly, if you have a basic Fortran program in a file named hello.f
: Note, each line is indented 6 spaces. This is an historical artifact from when the first 6 spaces were reserved for line numbers. If you name your file with a .f95
extension, gfortran will compile without requiring line indents.
program hello print *,"Hello World!" end program hello
you could compile it with the GNU Fortran 95 compiler:
$ gfortran -o hello hello.f
If you use external libraries in your program, for example curl_encode.c
:
#include <stdio.h> #include <curl/curl.h> main() { CURL *curl = curl_easy_init(); if(curl) { char *output = curl_easy_escape(curl, "data to convert", 15); if(output) { printf("Encoded: %s\n", output); curl_free(output); } } }
trying to compile will result in an error:
$ gcc -o curl_encode curl_encode.c /tmp/ccNeOnuH.o: In function `main': curl_encode.c:(.text+0x99): undefined reference to `curl_easy_init' curl_encode.c:(.text+0xba): undefined reference to `curl_easy_escape' curl_encode.c:(.text+0xe7): undefined reference to `curl_free' collect2: error: ld returned 1 exit status
In order to compile this, you need to "link" the executable program to the curl (libcurl) library, which contains the actual compiled code for the curl functions:
$ gcc -o curl_encode curl_encode.c -lcurl $ ./curl_encode Encoded: data%20to%20convert
Further Reading
Here are some other external sites that have more basic Linux information: