If you've ever worked at
the command line of Linux, then you are probably using
the Terminal, the XTerm, or some similar type
of terminal program. And as we go through
this video, you'll notice that the commands
that we're running in Linux are also the same commands
you can run in macOS. That's because macOS is
derived from Unix, which is also where Linux is derived. So a number of these commands
are identical between the two operating systems. If you'd like to try these
commands on your own version of Linux, you can
run a live CD version or install Linux on
a virtual machine and run it on your workstation. All of the commands
I'll be showing you are running in Ubuntu on a
virtual machine on my desktop. And if you find yourself running
into a problem understanding the syntax of a
particular command, you can use the man command,
which stands for the manual. So if you wanted to see
more information on the grep command, you simply
type in man grep, and it will give you
all of the details for that particular command. Here's my Ubuntu Linux desktop. It is a default configuration
with nothing on the desktop. There are a number of icons
on the left hand side, and at the bottom left is a
view of show applications. And from there, I
can type terminal, and that's going to bring
up the terminal option. And if I click that, I'll
get a terminal screen that I can then use
to input commands directly to the Linux
operating system. Let's start our tour
of these Linux commands by learning how
to list directory contents in the window. If you've worked at the
Windows command line, then you're probably familiar
with the dir command. There is a similar command
in Linux called ls, which stands for list directory. This will list the
files, the directories, the symbolic links,
and anything else that might be stored in
this particular folder. It can also color code
some of this information so you might notice
that directories have a different
color than the files. This isn't necessarily supported
across every Linux version, but you may find that feature
inside of your terminal. You can view a longer form
view of this directory by using the ls command
with the -l option. If this is a very
large group of files that would extend
a number of pages, you may want to use the more
command to limit the output to show you one page at a time. To do this we would
use the ls -l command, but we would pipe it
with the vertical bar to the more command. This will present
the output one page at a time, which allows us to
see everything on the screen before continuing. Let's see what files
are on my system. I'm going to use the
ls command, and you can see there are a
number of directories. I have desktop, downloads,
pictures, videos, and more. There is a file in this
directory called first.txt. I can also use the
long version of ls by using ls -l, which shows me
exactly the same information. You can see all of the
different subdirectories and the first.txt
file, but notice there's a lot more
information on the screen. On the left side is a
list of permissions. We'll go through
those in just a bit. There's a list of the owner
of the file and the group that owns the file, the
size of the file itself, and then a date associated
with the last update. If you're looking for
a particular file, or you just like
to see what files are available in a
particular directory, you would use the ls command. You may have noticed
when we were using the ls command that it was not obvious
what the name of the directory was where all of these
files were stored. You can use the PWD command,
or Print Working Directory, to show exactly what the current
directory name happens to be. If you have a lot of
windows on the screen and you're connected to
a lot of remote systems, the PWD command
can really help you understand exactly where you're
working in a particular file system. And indeed, looking
back at the ls command, it's not very obvious what
directory we happen to be in. So I'm going to use the
PWD command and hit enter. And you can see that the
directory that we're working in is /home/professor. If you need to change the
name of a file or directory, you would use the mv
command inside of Linux. MV stands for move. So if you need to move a file
from one name to the other, you're effectively
renaming that file. The syntax for the mv command
is to use the source file name and then specify the
destination file name. So if you'd like
to rename a file, you would use the mv command,
you would specify the file that you'd like to rename,
in this case first.txt, and you would rename it
to the file second.txt. Let's try that on
our Linux system. We do have a
first.txt file so I'm going to use the mv command. I'm going to specify
first.txt, but I'll type in phi and hit the tab key to
autocomplete that file. And then I'll
specify what I would like to move this name
to, which in this case would be second.txt. And when I hit enter, we
simply get a prompt back. So if we perform
another ls, we can see that our first.txt
file is no longer listed, and the file name is
currently called second.txt. Instead of changing the name
of the file from one name to another, we can
create a copy of the file so that we have two
versions on our system. We would use the cp
command to copy a file, and it uses the same
syntax as the move command. We would use the CP
with the source name first, followed by
the destination name. Let's copy that file second.txt
to a file called third.txt. I'll use the cp command. I'll specify second
text, and now, we need the output
name of third.txt. And if I hit enter and
perform another ls, you can see we now have
two versions of this file. We have the one originally
called second.txt and a new file that contains
exactly the same information called third.txt. Of course, there's
also going to be times when we would like to
remove a file from the file system. We would do that with the rm
command, or remove command. This will remove both
files and directories. But if you're planning
to remove a directory, you have to make sure the
directory is empty before you perform the rm command. Let's try this on
our list of files. We have the second.txt
and third.txt. I would like to remove
the second text file. So we'll use the rm command
and specify second.txt. And if we perform
another ls, you can see that the only file left
in this directory is third.txt. I mentioned earlier
that when we looked at the long version of
the directory listing, we saw all of these
letters on the left side. There's d's, and
r's, and w's, and x's and these correlate
back to permissions associated with the file. The r stands for read access,
the w stands for write access, and the x stands
for execute access. This is the way
that we can define how a particular file
may be used or viewed by different users
inside of Linux. You can view this
by breaking out all of the letters
that are contained within that long string. The first column designates
the type of file this is. If it's a simple file, like
second.txt or script.sh, it'll simply have a
dash, or a hyphen. But if this is a
directory, there will be a d in that column. If it's a symbolic link, there
will be an s in that column. And there are other options
within Linux, as well. To view the permissions
of this file, we would then separate
the next nine characters into three different groups
of three characters each. So the first three are
the user permissions, the middle three are
the group permissions, and the last three characters
are the permissions associated with everyone else. To be able to change these
permissions, or modes as we call it in Linux, you
would use the chmod command. You would specify the mode that
you'd like to change it to, and then you specify
the name of the file that you would like to modify. This mode, being these
three characters, are associated with these
values that we see here between zero and seven, seven
being read, write, and execute, which is effectively
full permission. and a zero would be none
of those, or no permission. So in this example where we're
changing the mode of script.sh to seven, four,
four, the seven means that the user will have read,
write, and execute permission. Anyone who belongs to the
group that owns that file will have four, which
is read-only permission. And everyone else who's
neither a user or group, will also have the permission of
four, which is also read-only. If you remember your conversions
between binary and decimal, you'll notice that
these values are associated with the
binary representation of the r, the w, and the x. If the x is in the one column,
the w is in the two column, and the f is and
the four column, you can see that having four plus
tw plus one is equal to seven. In the case of the number
four, read-only, we just have a single character
in the fourth column, which is why that one is
designated as number four. So if we were to use the chmod
command with a seven, four, four on file
first.txt, that would mean that the user would be
associated with the seven, or read, write,
and execute access. The group would be associated
with the four, which is read-only access. And everyone else would have
access of four, or read-only. You can also use letters
instead of numbers with the chmod command
as long as you remember what those letters refer to. So in the command
chmod a-w first.txt, the a stands for all
users, and the -w means we're going to disable
any right functionality to that particular file. Here's a similar command. chmod u+x on the file
script.sh means that the u, which is the user or owner of
the file would have plus x, or enabled, execution rights
to the file script.sh. Let's change the mode
of our file third.txt. And if we look, we can see
that third.txt is a file, does not have the
d in front of it. So it's not a directory. It has an rw dash for
the user or the owner, which means the owner has
both read and write access to the file. We have rwx for the group,
which means the group would have also read and write access. And you'll notice the last
three characters are all dashes. So everyone else on the system
has no access to third.txt. Let's modify this so that
anyone else on the system would have read-only
access to third.txt. So let's run the
chmod command, but we don't want to change the
values of the first two for the user or the group. We only want to change those
last values for everyone else. We can see that rw- is
listed for the user, which is the same as the group. And if we look
back at our chart, or we perform the
binary conversion, we can see that rw- is the
same as the number six. So let's run the chmod command. Our user remains at six. Our group remains at six. And for the last
three values, we want to enable the r column,
which is in the four column. So I'll specify
four, and then we'll specify the file
name of third.txt. Now when I perform
an ls -l, you could see that the permissions have
changed for the third.txt. It's now rw-, rw-, r--, which
means that everyone else on the system has read
access now to third.txt. Not only can you change
permissions associated with the owner and group. You can change the name of the
owner and the name of the group with the chown command. You would use sudo because
this requires additional rights and permissions in
Linux, the chown command. You would specify the
name of the owner. You could optionally
also put a colon and include the name
of a group, and then you specify the
name of the file. In the Ubuntu Linux that
I'm using, by default, it creates a username
and creates a group from that same username. So you'll notice that all of
my users are named professor, and the group is
also named professor. In this case, let's change
the ownership of the third.txt file so that instead
of it being professor, the owner will actually
be called Messer. That is the name of
another user that's defined on this Linux system. So let's use the chown command. I'll specify the name that we
would like to move this to, which is Messer, and
then we'll specify the name of the file,
which is third.txt. You'll notice that this command
doesn't work because we don't have elevated
permissions, and Linux isn't going to allow just anyone
to change the owner of a file. You have to have administrative,
or root, permissions on Linux to be able to make this change. To be able to do this,
we'll use the sudo command, which gives us elevated
rights and permissions for this single command. Well then choose chown
messer third.txt. And when I hit enter, it
will ask me to authenticate with my root credentials. So I'll put in my password,
and it gives us a prompt back. We now look at our long view. We can see that the
third.txt file does have a new name associated
with that owner, and the new owner's
name is Messer. This ability to run a
command with elevated rights and permissions is very similar
to the function of Windows to run a command
as administrator. In Linux, the administrator
is the superuser, and that's why we use
su, or sudo, to provide that elevated permission. As we've already seen, putting
sudo in front of a command runs that command as the
superuse on the system. You could optionally
use a flag to run this command as a different user
on this Linux system, as well. And when this finishes
executing the command, it goes back to the
regular permissions for all subsequent commands. If you would like to
have an entire session inside of the terminal
run as the superuser, you could start the session
with the su command. And now, every subsequent
command you type in will always run
as the superuser. When you're finished running
commands as the superuser, you can use the
exit command, which puts you back into the terminal
with your normal rights and permissions. There will certainly
be times when you're using Linux
where you will need to install or uninstall
a particular application on that operating system. And depending on the Linux
version you're using, there may be different commands
that provide this management. On some Linux distributions,
it's the apt-get command. Apt stands for advanced
packaging tool, and it allows you to
install or uninstall entire packages or
applications inside of Linux. So if you'd like to
install a new application, such as Wireshark, we
would use the command sudo apt-get install and Wireshark. Let's try this on my
Linux distribution. To install a file, you will need
elevated rights and permissions so we already know we're
going to start this command with the sudo option. We'll specify apt-get
as our command. We want to install an
application, and in this case, we want to install Wireshark. We hit Enter, and we'll
find out all of the files that we need to be able to run
this particular application. And if it has enough
room on the drive, it will begin unpacking,
setting up, and installing that application. Now that Wireshark is
available at my system, I can run the command line
options for Wireshark, or we can go to
the list of apps, and I can type in Wireshark. And there's the application. I simply click that, and now,
I can begin capturing packets from the network. If you're using a Linux
distribution that's based on one of the Red
Hat versions of Linux, then you probably don't
have apt-get available in your distribution. Instead, you would use yum,
or the Yellowdog Updater, Modified. This allows you to
add, modify, or remove packages following the RPM
style, or Red Hat Package Manager format. This is something
you'll have to look into your specific
distribution to find out which package manager is used
by your version of Linux. And then from that
point, you'll know whether to use apt-get or yum. There may be times when
you need more information about the network
config inside of Linux, and one of the ways
that you could do this is by using the ip command. IP allows you to perform a
number of different networking functions, but if
you simply want to look at the
current configuration, you would use the
command ip address. You can also look at a routing
table list by using ip route. And if you'd like to add or
modify an IP address associated with a network adapter,
you can use sudo with the ip address option. Choose add, and then specify
the IP address, the subnet mask, and then specify the device,
or the name of the adapter, by adding dev for
device and then the name of that particular adapter. Let's look at the IP
configuration on my machine. I'm going to use the
ip address command. You can see that
the first adapter is the lo, or loopback, adapter. And if you're familiar with
the loopback address for IPv4, you can see that it's
set to 127.0.0.1. We also have another
adapter on this device, which is an ethernet adapter. This ethernet adapter
name is end0s5, and you can see the IP address
associated with this adapter is 10.1.10.65, with a
subnet mask of /24. Before you begin
installing new applications and making changes to
your operating system, you may want to know
how much free space is available on your system. Linux has the command
df, or disk free, to show you how much
free space is available. The default for
df is to show you the amount of space available
in number of 1K blocks. This may not be very
intuitive for people that are trying to determine
exactly how much space is being used. So fortunately, df
comes with a -h command, which shows us this information
in megabytes, gigabytes, and other human readable values. Let's see how much space is
available on the different file points that are in my
Linux distribution. If I run the df
command, indeed, it shows us 1K blocks, how many
of those blocks are used, how many are available, and
the percentage that's in use. So at the mounting point, where
it is the root of my drive, you can see that we're
using 19% of the drive. But it's very difficult
to understand exactly how much room that really is. Let's use df with the
-h option, and you can see on that route Mount
that it is a 63-gig partition. I'm using 11
gigabytes, which leaves us 49 gigabytes available
for other applications. If you've ever had to look
through a very large file for a very specific piece of
information, then how much of a challenge that can be
without some type of automated search function. Fortunately, Linux
includes this type of search in a
command called grep. Grep will find a
piece of text that's located in any file
that's on the system, and you can use
the syntax of grep with the pattern
you're looking for. And then the name of the file. Let's look through a file
to see how many times a particular word appears in
an authentication log file. Let's perform the grep command. I'll specify the word
opened because that's the word I'm looking
for inside of this file. And the location of
the file is in var/log, and it's called auth.log. You can see there are a number
of lines inside of this file that have the word opened. You can see where it's
highlighted where that name is. So you can see how
many lines are inside of that single file that have
the word that we were searching for with the grep command. If you've ever used the
Windows Task Manager, then you can view a list of all
of the different processes that are currently running
in a Windows system. There's a similar command in
Linux called ps, the process command, where you can view
all of those processes that are happening behind the scenes. To view just the processes
running for yourself, or your user name, you would
simply use the ps command. But if you'd like to view
all of the processes running on the system, you
would use ps-d. You're probably going to
see a lot of processes go by so it might be a good idea
to pipe the output to the more command. There's not many
applications that are running on this Linux
system right now so I'm going to simply use
the ps option to see what's running on my user. And we can see there is a bash. Process that's the terminal
process we see in front of us. You can also see that it shows
the ps command is currently executing. So by running the
ps command, we're able to see that we are
running the ps command. Let's look at all the commands
used by everyone on the system. I'll use ps with the -e
option, and you can see a lot of information went by. So we're going to hit the arrow
up to use this command again, and I'm going to pipe
the results of this into the more utility. Now, it's going to show me
the first page of the output, and it's going to stop
after the first page and put a more option
down at the bottom. If I hit spacebar, it will
move it to the next page, and it will wait with the
more option at the bottom. I could also use the
enter key, and it will move one line at a time. And if I want to stop
this from paginating and simply get back to the Linux
prompt, I can use the q option. Well, as you can
already tell, it might be a challenge to try
to find exactly the process that you're looking for. And if you want to get an update
to the number of processes, you have to run the
ps command again. Fortunately, there
is a command very similar to the Task Manager
inside of Windows called top. The top command will
give you an overview of all of the processes
running, and it shows you the
percentage of CPU memory and other resources
that are used by the individual processes. This makes it very easy to find
the processes using the most number of resources because
it will put those processes at the top of the list. This also has a list
of loads at the top. You can see this load
average, and then there are three values. This is the load on this
Linux system in one, five, and 15-minute interval. So you can get a view
of historical use by simply looking over
the load average numbers. The top command has extensive
options and hot keys available, and you can get a list
of what all of those might be by running
the man top command. Let's run top on this Linux
system and see what we get. We type top and
hit enter, and you can see all of the
different processes are being shown on the screen. And we're getting updates
every second that shows us the current status. If we hit the enter
key, it will also give us a more responsive
view of what's going on. So if you don't want to
wait every second for this to refresh, you can refresh it
manually with the enter key. In this view, we're
simply reading or viewing what the different
processes happen to be doing on the system, but
you can also kill, or halt, different processes
from the top command. Make sure you check
the documentation if you would like to
extend those capabilities and know exactly what
keystrokes can provide you with that management function. If you would like to stop
viewing the top information and get back to the
Linux command prompt, we simply hit the
q key for quit. There will certainly be
times on a Linux system where you're not able to find
a particular file that you know is located somewhere
in the file system. Fortunately, Linux
has the find command that can help you find a name
or an extension of a file. You would simply
use the find option. You would specify
where you would like to begin this search. If you use the period, it
starts in your current folder. Use the -name option, and then
specify the name of the file you're looking for. If you'd like to see all of
the files that have a .txt extension, you could use
a quote with an asterisk, .txt and end the quote. Let's confirm our
working directory before we perform
the find command. We'll use the PWD command to
print the working directory, and currently, we are working
out of /home/professor. Now, I'd like to use the find
command to find all of the text files that are located under
/home/professor and all of the folders that are
located within that, as well. Let's try find with the dot
to specify that we're starting on our current directory. We want to find everything that
has a particular name so we use -name. And then in quotes,
we'll put *.txt. And if we hit enter, you can see
all of the different files that are located in this entire
set of folders that end with a .txt. One of the things you may notice
when using a browser session is we rarely refer to a
website with its IP address. It's difficult to remember
IP addresses for all of the different
sites we might visit, but it's very easy to remember
their fully qualified domain name. For example, if you'd like to
visit www.professormesser.com, simply type that
into your browser. And behind the scenes,
there's a resolution that occurs between the
fully qualified domain name and the IP address
that it needs to communicate with that web server. If you would like to see what
this resolution looks like, you can use the dig
command inside of Linux. This will provide
you with a list of all of the IP addresses
associated with a fully qualified domain name. It can also provide you with
a fully qualified domain name if you provide it
with an IP address. Although dig is not
automatically included with Windows, you can download
and install a version of dig by visiting the ISC.org
website under /downloads/bind. Let's perform a name
resolution and determine what the IP addresses might
be for ProfessorMesser.com. I'll run the dig
command, and I'll specify www.ProfessorMesser.com. If we hit enter, it tells us
that we are running dig 9.18.1. Our question, or the
query that we're posing, is to find
www.ProfessorMesser.com And you can see that we got
three answers from the name server with three
different IP addresses that could all be used to
connect to my web server. There may be times when you
have information in one file and information in
another file, and you would like all of
that information to be in one single file. In Linux, there's a
command that allows you to concatenate
these together, and that is the cat command. The syntax for
the cat command is cat, the name of the
first file, and the name of the second file. If you don't use any
other parameters, it will take everything in
both of those files and output all of that to the screen. If you would like,
instead, to take the contents of those files and
copy it to a new third file, you would use the same
cat command with file one and file two, but you
would use a greater than sign, which
redirects everything that would normally go to the
screen and redirects it to the name of a file. And the file that we would
use would be, in this case, both.txt. On our system, we
do have two files, one that's called file1.txt
and another called file2.txt. Let's concatenate
those files together by using the cat command. We'll specify file1.txt
and then specify file2.txt. We use the greater than sign
to redirect this to a file. Then we're going to
call this file both.txt. And if we now look
at the directory, we can see that we have a
file one and a file two, which is still there, but we
have a new file that we've created called both.txt. And you'll notice
the size of both.txt is exactly the same size
as both the file one and file two added together. There may be times when
you need to edit a file or change the configuration
of a file inside of Linux, and one type of editor
that you could use for this is the nano editor. The nano editor is very
commonly included in most Linux distributions, and if it
isn't, can always install it as a separate application. This is a full-screen editor. Allows you to copy
and paste, you can modify and see the
results of the modification on the screen. And using Control
keys, you can get help, you can save files, and
perform other functions within the editor. Let's make some changes
to the both.txt file that we created earlier. I'll use the nano command
and specify both.txt. Now, we're in a full-screen
mode with a cursor that we can use to move around. We can add lines and modify
information on the screen. And when we want to write this
out, or save this information, we would use the Control-O
option to write out. If I press that it, says
what file name would you like to write it to? I'd like to write it to the same
file, in this case both.txt. And it wrote 23
lines to the disk. To exit out of nano, we would
use the Control-X option, and we're back at the
Linux command prompt. If nano is not available
on your system, you can always
use apt-get or yum to be able to install it on
your current Linux distribution.