Embeded boards run Linux, this is why when interracting with them you might need some basic notions concerning this operating system in case you haven't come across it so far.
The Shell is a window that allows you to interact with the board. It waits for you to enter a command and it executes it. Once you open a Shell, you will see the prompt. That means everything works fine and the Shell is waiting for your command.
The prompt also offers you some information. First of all, it shows you the user currently logged in. The user's name is that you see before @. It also shows the host name of your board. The most important information the prompt displays is the working directory. That is the directory where you are currently working in. It is displayed right after the colon in the prompt. You will notice that the default working directory is ~. That is the user's home directory and its equivalent is /home/username.
In order to access a certain file or directory, you have to take into account the path to it. There are two different paths you can use: absolute and relative.
In Linux, the directories' structure is like a tree. The root directory is / and it contains all the other directories and files.
If you use an absolute path to a file or a directory, that means that you build the path to it starting with the root directory. Thus, you can say that any path that starts with / is an absolute path.
On the other hand, you can use a relative path, which means that you build it starting from the directory you are working in, your working directory. Thus, all the files and directories are relative to it.
When building paths, there are three symbols you should be familiar with:
The pwd command makes the Shell print the working directory. It is important to know which directory you are working in and sometimes it is difficult to get it from the prompt. So, anytime you feel lost, use pwd.
ls makes the Shell print all the files and directories located in the working directory. If you want to see la contents of some other directory, you can pass that directory as an argument to the command. For instance, if you want to print all the files and directories in /, you will write: ls / .
You already know that once you open a Shell, the working directory is your home directory. However, you will need to work in other directories too. In order to change the working directory, you will have to use cd followed by the directory you want to go to.
For example, if your home directory contains a directory called homework and you want to have that as the working directory, you use cd homework. You can notice that you used an absolute path. Some other alternatives would be cd /home/pi/homework or cd ~/homework. In the last two examples you used an absolute path to refer to homework directory.
cat asks the Shell to print the contents of a file. However, it must be clear that you can only see its contents, you cannot modify them. For that you need an editor.
Just like with the cd command, cat gets as an argument the file it should display.
Example: cat /etc/passwd
By using the htop command you can see real-time all the processes that run on your board. Once you entered the command you will notice that the prompt does not appear, that is because you cannot enter another command until you are finished with displaying the processes. So, if you want to go back to what you were doing, just hit the q key.
For each process displayed, you can see its PID (Process ID), the user who launched the process, how much CPU and memory it is using, the command that started the process and other information.
What you are most interested in is the PID. That is because each process can be identified by its PID and if you want to interact with it, you have to know its process ID.
You know that you can use htop to find a process' ID in order to be able to interact with it. kill is the command that allows us to interact with another process.
Two processes can interact by using signals. A signal is a number a process sends to another. Both processes know that each number represents an action. you can refer to a signal either by the number or by its name.
The format of the kill command is the following: kill -signal pid, where signal is the number representing the action you want to process to do and pid is the process ID.
The two signals you are most interested in are SIGTERM (number 15) and SIGKILL (number 9).
SIGTERM tells the process to stop its execution. Normally, the process should save all its data and stop running. However, this signal can be ignored by the process. There are times when you cannot kill a process by using SIGTERM.
On the other hand, SIGKILL, kills the process no matter what. The downside is that the process does not have the opportunity to save its data, so killing it like this can result in loss of data. Neverthless, if something happened and your process must be forced to stop, you have to use SIGKILL.
In case the running process has a Shell attached and you can access it, you can simply use a key combination to send the SIGTERM signal to it and make it stop, Ctrl+C .
killall has the same effect as kill, except that you do not have to know the PID of the process, but its name. Instead of passing the process ID as an argument, you have to pass the process name.
Getting used to working with a Linux Shell is not difficult, especially if you know the following tricks: