Goals: Introduction to the Linux File System, its structure and how to navigate around it, as well as creating, moving and copying files and folders.
What the file system is, and a typical organization / hierarchy.
Some high-level comparison to that of Windows.
Absolute vs relative paths.
Commands:
pwd
,cd
,ls
,mv
,cp
,mkdir
,rmdir
,rm
History:
history
File Ownership and Permissions.
Within this and following sections, we have tried to make the descriptions and examples generic.
If you are following along as part of a scheduled training or bootcamp, where you see
<project-name>
replace this with the project name being used for the workshop (which changes) and<username>
with your username.Also, the hostname that you might see might change depending on the cluster you’re using.
If you are training independently, please use your own project folder, but contact arcc-help@uwyo.edu if you would like a copy of the files and directories used in our examples.
Some high-level comparison to that of Windows
| Windows | Linux |
Structure | Uses (data) drives C:, D:, E:… | Uses a tree hierarchy starting at “ Known as the root directory. |
|
|
|
Syntax | Uses the back slash: “\” | Uses the forward slash: “/” |
Home folder |
|
|
Application Install |
|
|
Folder and Filenames | Case insensitive: FoLdEr = FOLDER | Case sensitive: FoLdEr ≠ FOLDER |
|
| Wherever you are within the hierarchy is known as your current working directory (cwd) |
Linux OS General Structure
Linux Hierarchical Structure: Example
Absolute Path: /home/arcc-t05/
Path starts with a “/”
Absolute Path: /home/arcc-t05/workshop/projects/p01/etc/
Relative Path: workshop/projects/p01/etc/
Path does not start with a “/”
Relative Path: p01/etc/
Ex: Starting at / (root), what is the absolute path to the bits folder?
Answer:
Ex: Starting in the home folder what is the relative path to the Jan folder?
Answer:
Commands:
Used to perform certain operating system tasks through the Command Line Interface, as directed by the interpreter (as opposed to a Graphical Interface Interpreter we would usually use).
<command --help>
Command | Description |
pwd | pwd: pwd [-LP] Print the name of the current working directory. |
cd | cd: cd [-L|[-P [-e]] [-@]] [dir] Change the shell working directory. |
ls | Usage: ls [OPTION]... [FILE]... List information about the FILEs (the current directory by default) |
mkdir | Usage: mkdir [OPTION]... DIRECTORY... Create the DIRECTORY(ies), if they do not already exist. |
mv | Usage: mv [OPTION]... [-T] SOURCE DEST or: mv [OPTION]... SOURCE... DIRECTORY or: mv [OPTION]... -t DIRECTORY SOURCE... Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY |
Commands: <command --help>
Command | Description |
cp | Usage: cp [OPTION]... [-T] SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY or: cp [OPTION]... -t DIRECTORY SOURCE... Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY. |
rmdir | Usage: rmdir [OPTION]... DIRECTORY... Remove the DIRECTORY(ies), if they are empty. |
rm | Usage: rm [OPTION]... [FILE]... Remove (unlink) the FILE(s). |
pwd: Print the name of the current working directory
If you get lost, then you can jump back to the home folder.
[<username>@blog1 ???]$ cd [<username>@blog1 ~]$
The ~
“tilda” character represents your home directory.
Use the pwd
to confirm your current working directory, which after the above command will be home.
[<username>@blog1 ~]$ pwd /home/<username>
cd: Change the shell working directory
Start by navigating back to home.
[<username>@blog1 ???]$ cd [<username>@blog1 ~]$
Move up one level, into the current folder’s parent.
[<username>@blog1 ~]$ cd .. [<username>@blog1 ~]$ pwd /home
Move up another level into the root folder.
[<username>@blog1 home]$ cd .. [<username>@blog1 /]$ pwd /
cd: Change working directory (cont)
Navigate into the opt
folder.
[<username>@blog1 /]$ cd opt [<username>@blog1 opt]$ pwd /opt
Question: Did we define an an absolute or relative path?
Answer:
Did we define an an absolute or relative path?
cd: Change the shell working directory
First reset back to home.
[<username>@blog1 opt]$ cd [<username>@blog1 ~]$
Navigate into the /usr/include/asm
folder.
[<username>@blog1 ~]$ cd /usr/include/asm [<username>@blog1 asm]$ pwd /usr/include/asm
Question: Did we define an absolute or relative path?
Answer:
Navigate up two levels:
[<username>@blog1 asm]$ cd ../.. [<username>@blog1 usr]$ pwd /usr
Navigate back home:
[<username>@blog1 usr]$ cd [<username>@blog1 ~]
ls: List information about the FILEs (cwd by default)
Take a look at the ls
command and some of the options it provides.
List files in the user’s home folder.
[<username>@blog1 ~]$ ls
List long format that includes ownership and permission details.
[<username>@blog1 ~]$ ls -l
List all files, including hidden files and folders start with “.”.
Notice how ‘short-name’ options are grouped.
[<username>@blog1 ~]$ ls –a
List all files with long format.
[<username>@blog1 ~]$ ls –al
List all files with long format, in reverse order.
[<username>@blog1 ~]$ ls –alr
List all files with long format, in reverse order, in human readable form.
<username>@blog1 ~]$ ls –alrh
Note how we can use multiple options together.
Demonstrate how to ls
to a folder outside cwd using an absolute path.
# Demonstrate how to ‘ls’ to a folder outside cwd [~]$ ls /project/<project-name>/arcc-t01 folder01 myfile.txt
mkdir: Create the DIRECTORY(ies), if they do not already exist
Navigating to you /home
and make a folder called folder01
.
$ cd [~]$ ls Desktop Documents Downloads [~]$ mkdir folder01 [~]$ ls Desktop Documents Downloads folder01
Try creating that folder again. What happens?
[~]$ mkdir folder01 mkdir: cannot create directory ‘folder01’: File exists
If a folder already exists, you can not make it again.
Navigate into this folder and print the current working directory.
[~]$ cd folder01/ [folder01]$ pwd /home/<username>/folder01
mkdir: Create the DIRECTORY(ies), if they do not already exist
Within folder01
, try creating two new folders called folder02
and folder03
.
Navigate into folder02
and print the current working directory.
[folder01]$ mkdir folder02 folder03 [folder01]$ ls folder02 folder03 [folder01]$ cd folder02/ [folder02]$ pwd /home/<username>/folder01/folder02
Notice: You can create multiple folders at the same time.
mv: Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
Renaming a file is the same as moving it to a new name.
Navigate to your home and create a file called myfil.txt
[]$ $ cd [~]$ touch myfil.txt [~]$ ls Desktop Documents Downloads folder01 myfil.txt
Move this file from myfil.txt
to myfile.txt
.
[~]$ mv myfil.txt myfile.txt [~]$ ls Desktop Documents Downloads folder01 myfile.txt
Notice how we have moved the file from one name to a new name - essentially renaming it.
mv: Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY
Move the myfile.txt
into folder01
.
[~]$ mv myfile.txt folder01/ [~]$ ls Desktop Documents Downloads folder01 [~]$ ls folder01/ folder02 myfile.txt
Notice how we used ls
to see what is in a relative folder.
cp: Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY
Navigate back home and create a file called myfile02.txt
.
[]$ cd [~]$ touch myfile02.txt [~]$ ls Desktop Documents Downloads folder01 myfile02.txt
Copy (duplicate) this file to a new file called myfile02b.txt
.
[~]$ cp myfile02.txt myfile02b.txt [~]$ ls Desktop Documents Downloads folder01 myfile02b.txt myfile02.txt
Copy file myfile02b.txt
into the existing folder02
folder.
[~]$ cp myfile02b.txt folder01/ [~]$ ls folder01/ folder02 folder03 myfile02b.txt myfile.txt
cp: folders
Navigate home and try copying the folder01
folder.
[~]$ cp folder01 cp: missing destination file operand after 'folder01' Try 'cp --help' for more information. [~]$ ls folder01 folder02 myfile02b.txt myfile.txt [~]$ cp folder01 folder04 cp: -r not specified; omitting directory 'folder01’
You can not use the cp
command with no options to copy a folder that has files within it.
Look at the options available. cp -h
In this specifically -r
that recursively copy a folder and all its contents.
[~]$ cp –r folder01 folder04 [~]$ ls Desktop Documents Downloads folder01 folder04 myfile02b.txt myfile02.txt [~]$ ls folder04 folder02 myfile02b.txt myfile.txt
rmdir: Remove the DIRECTORY(ies), if they are empty
The rmdir
command can only be used to remove an empty directory.
[~]$ ls Desktop Documents Downloads folder01 folder04 myfile02b.txt myfile02.txt [~]$ mkdir folder05 [~]$ ls Desktop Documents Downloads folder01 folder04 folder05 myfile02b.txt myfile02.txt # Can remove folder05 since it is empty. [~]$ rmdir folder05 [~]$ ls Desktop Documents Downloads folder01 folder03 myfile02b.txt myfile02.txt [~]$ rmdir folder04/ rmdir: failed to remove 'folder04/': Directory not empty
You can not use rmdir
to remove a directory that has files still within it. The folder must be empty.
rm: Remove (unlink) the FILE(s)
Look at one way at removing a folder that itself contains folders and files.
[~]$ cd [~]$ cd folder04 [folder04]$ ls folder02 myfile02b.txt myfile.txt [folder04]$ ls folder02/ [folder04]$ # ‘folder02’ is empty. [folder04]$ rmdir folder02/ [folder04]$ ls myfile02b.txt myfile.txt [folder04]$ rm myfile.txt [folder04]$ ls myfile02b.txt [folder04]$ rm myfile02b.txt
rm: Remove (unlink) the FILE(s)
[folder04]$ ls [folder04]$ # ‘folder04’ is now empty. [folder04]$ cd .. [~]$ rmdir folder04/ [~]$ ls Desktop Documents Downloads folder01 myfile02b.txt myfile02.txt
This has taken a lot of individual steps.
Can we do this quicker?
rm: folders and file(s)
Take a further look at the rm
command.
[~]$ cd [~]$ rm folder01/ rm: cannot remove 'folder01/': Is a directory
You can not use the rm
command with no options to remove a folder.
[~]$ rm --help Usage: rm [OPTION]... [FILE]... Remove (unlink) the FILE(s). ... -r, -R, --recursive remove directories and their contents recursively ...
Using help we found we can use the -r
option to remove a folder and all its contents.
[~]$ rm -r folder01/ [~]$ ls Desktop Documents Downloads myfile02b.txt myfile02.txt # Can remove multiple files. [~]$ rm myfile02b.txt myfile02.txt [~]$ ls Desktop Documents Downloads
Alternatively we could have removed the above 2 files with: rm myfile*
The *
character is a wildcard, so the rm myfile*
will remove all starting with the characters myfile
rm: WARNING
From the command-line there is NO trash bin!
Using rm
/rmdir
is FINAL!
history
The history
command allows you to look back at the last commands you’ve called.
[~]$ history --help history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...] Display or manipulate the history list. ... [~]$ history ... 219 rm -f folder01/ 220 rm -r folder01/ 221 ls 222 rm myfile02b.txt myfile02.txt 223 ls 224 history
You can repeat a command. Lets repeat the command labelled 223
:
[<username>@blog1 ~]$ !223 ls Desktop Documents Downloads
Exercises: Navigation
Questions:
How can you return to your home folder?
What command do you use if you’ve forgotten where you are in the folder hierarchy?
How can you list what is in a folder as well as any subfolders?
Go back through the command related slides are try for yourself.
Answers
1: How can you return to your home folder?
2: What command do you use if you’ve forgotten where you are in the folder hierarchy?
3: How can you list what is a folder as well as any subfolders?
File Ownership and Permissions
What does the output of ls –l
mean?
[<username>@blog1 ~]$ cd /project/<project-name>/intro_to_linux [<username>@blog1 intro_to_linux]$ ls -al total 54 drwxrwsr-x 4 <someuser> <project-name> 4096 Oct 6 08:09 . drwxrws--- 40 root <project-name> 4096 Oct 6 08:09 .. drwxrwsr-x 2 <someuser> <project-name> 4096 Oct 5 11:19 clusters drwxrwsr-x 6 <someuser> <project-name> 4096 Oct 5 14:56 data -rw-rw-r-- 1 <someuser> <project-name> 874 Oct 5 15:30 fruits.txt -rw-rw-r-- 1 <someuser> <project-name> 34472 Oct 5 10:57 software.csv -rw-rw-r-- 1 <someuser> <project-name> 1603 Oct 6 08:08 vegatables.txt -rw-rw-r-- 1 <someuser> <project-name> 26 Oct 5 07:20 workshop_all.txt -rw------- 1 <someuser> <project-name> 23 Oct 5 07:20 workshop_me.txt
The first character on the left indicates if it is a directory “d” or a file “-”.
drwxrwsr-x clusters # A folder. -rw-rw-r-- workshop_all.txt # A file.
File Ownership and Permissions
-rw-rw-r-- 1 <username> <project-name> 26 Oct 5 07:20 workshop_all.txt
User: This is the owner of the file/folder. By default, the person who created it becomes its owner.
<username>
is the owner
Group: A group is a collection of users. The primary purpose of the group is to define a set of privileges for a given resource that can be shared among the users within the group.
<project-name>
is the group.In general, for a workshop, all attending users / the
arcc-txx
users (if being used) have been setup to be within this group.
Other: This is any other user who has access to the file/folder. This person has neither created the file, nor do they belong to a user group.
Permission Denied
This demonstrates how permissions work. Bare in mind this assumes you’re logged in as user <username>
.
[]$ cd /project/<project-name>/ []$ ls -al ... # drwxr-sr-x 2 <username> <project-name> 4096 May 16 16:26 <username> ...
The middle set of permissions is “drwxr-sr-x” means no one other than <username>
has permission to write within this folder.
Try navigating into a <different-username>
folder within <project-name>
and creating a file.
[<project-name>]$ cd <different-username>/ # Can <username> create (write) a file within this folder? [<different-username]$ touch text.txt touch: cannot touch 'text.txt': Permission denied
No one, other than <different-username>
can create (write) a file within this folder.
If we change directories, and go to /project/<project-name>/intro_to_linux, what permissions do the contents of this directory have?
[<username>]$ cd ../intro_to_linux [<username>]$ ls -al # -rw-rw-r-- 1 <arcc-username> <project-name> 26 Oct 5 07:20 workshop_all.txt
Any user within the <project-name>
group can read/write the file workshop_all.txt
.
Everybody can read it. Do you want anyone outside of this project to be able to read this file?
[] ls -al # -rw------- 1 <arcc-username> <project-name> 23 Oct 5 07:20 workshop_me.txt [intro_to_linux]$ cat workshop_me.txt cat: workshop_me.txt: Permission denied
Only user <arcc-usernameusername>
can read/write this file. No one else, not even anyone within the <project-name>
group, can view this file.
Exercises: Permissions
Questions: In all cases be able to justify your answer.
Can you create a folder under
/project/<project-name>/username>/
?Can you
/project/<project-name>/intro_to_linux/
and viewworkshop_all.txt
?Can you
/project/<project-name>/intro_to_linux/
and viewworkshop_me.txt
?Can you
cd
into the/opt
folder?Can you
cd
into the/root
folder?
Answers
1. Can you create a folder under /project/<project-name>/username>/
?
2. Can you /project/<project-name>/intro_to_linux/
and view workshop_all.txt
?
3. Can you /project/<project-name>/intro_to_linux/
and view workshop_me.txt
?
4. Can you cd
into the /opt
folder?
5. Can you cd
into the /root
folder?
Previous | Workshop Home | Next |