Linux Tutorials
===============
In the following we will show some basic commands, shortcuts, and tricks for playing with Linux.
Tab Key Auto-completion
-----------------------
- The most commonly used one is the ``Tab`` key.
This auto-completion feature is universal in all Linux systems.
If you cannot auto-complete the command you are currently typing,
**this means that your command is wrong** and Linux is not able to recognize it.
Try entering the following command in your terminal and press ``Tab`` key on the keyboard.
.. code-block:: bash
roscd ee106
- You will see that it becomes
.. code-block:: bash
roscd ee106s25
- This means that Linux can identify an **unique** name of the directory
by just seeing the first five characters.
- You can try the following command again and press ``Tab`` key once.
.. code-block:: bash
roscd e
- Nothing happens, right? Because in this case, Linux cannot **uniquely** identify
which command you want to enter, and hence cannot help complete it.
There are many ROS packages starting with "e" in your system.
- In this case, you can try **double** pressing the ``Tab`` key,
then you can see all the possible options starting with "e" in your system.
Terminal and Shell
------------------
- You may have already seen some files ended up with a suffix ``.bash`` or ``.sh``.
Though Linux does not count on suffix to determine the file type, but this indicates
that they are Shell scripts.
Similar to Python scripts, Shell scripts are those that can be executed by a shell program in the terminal.
In general, its syntax consists of most of the commands that you can directly type in the terminals.
- One example to see the relationship between terminal and shell. Try command
.. code-block:: bash
pstree | grep bash
- This will show you current running programs related to the keyword ``bash``.
You can see that ``bash`` is running after the ``gnome-terminal``,
and the ``grep`` command is running after ``bash``.
- In general, there are many types of terminals and shells available in Linux.
Specifically, in Ubuntu 20.04, it has ``gnome-terminal`` as the default terminal
and ``bash`` as the default shell.
- Roughly speaking, you can think of terminal as the frontend GUI and shell as the actual program
that executes your commands in the backend (GUI is also a program though).
You may Google keywords "gnome-terminal" or "sh, zsh, bash" for more information.
- If you go to the ``devel`` folder in the ROS workspace,
you can see that the ROS ``setup`` file is available for three kinds of shells: sh, zsh, and bash.
.. code-block:: bash
cd ~/catkin_ws/devel
ls
Terminal and File Manager
-------------------------
Similarly, there are `many types of file managers
`_ available in Linux.
Ubuntu 20 has ``nautilus`` as the default file manager.
We can go back and forth between terminal and file manager at any working directory.
- Suppose that you are now at your home directory.
(``cd`` command by itself without any argument will take you to the home directory.)
.. code-block:: bash
cd
- You can open file manager from terminal by command
.. code-block:: bash
nautilus .
- where ``nautilus`` is the name of the program you are trying to run,
and ``.`` is the argument passing into ``nautilus`` that represents the current directory.
- You can also open a file manager at any other working directory.
For example, go to the ``ee106s25`` package and open a file manager from this directory.
.. code-block:: bash
roscd ee106s25
nautilus .
- On the other hand, at any level of file manager, you can open a new terminal by just
a right click and select "Open in Terminal".
- Note that if a program is currently running in Terminal,
you will lose the ability to interact with it by typing new commands.
(You can tell this by seeing if you have ``username@hostname:~$`` prompted in your terminal,
where ``~`` can be another working directory.)
If you want to reuse the same terminal for new commands, you can do
.. code-block:: bash
roscd ee106s25
nautilus . &
- where ``&`` can combine two commands. In this case, no new command is given,
and hence it takes you back to your terminal and has the previous command run in the backend.
- You can also use this trick when you open ``gedit`` editor or other graphic tools like ``rqt_graph``.
This can free your current terminal while opening other software.
.. code-block:: bash
roscd ee106s25/launch
gedit gazebo.launch &
Shortcuts
---------
- To open a new terminal, press key combination ``Ctrl + Alt + T``, where T stands for Terminal.
- To copy and paste a file, you can use ``Ctrl + Shift + C`` and ``Ctrl + Shift + V`` in terminals,
and use ``Ctrl + C`` and ``Ctrl + V`` anywhere else.
- To terminate a program in the terminal, press key combination ``Ctrl + C``.
- To show hidden files in your file manager, press key combination ``Ctrl + H``, where H stands for Hidden.
- To show hidden files in the terminal, use command ``ls -a``, where ``a`` stands for ``all``.
This command will list all files including hidden ones.
In Linux, files start with ``.`` (i.e. only have suffixes) are hidden files.
- In terminal, you can use up ``↑`` and down ``↓`` arrow keys to go through your command history.
- ``.`` stands for the current working directory; ``..`` stands for the parent working directory;
and ``~`` stands for the default home directory under your account.
For example, ``cd ..`` can take you one-level back to the parent directory,
and ``cd .`` will keep you staying at the current directory (does nothing).
- To zoom in and zoom out in the terminal,
use key combination ``Ctrl + Shift + "+"`` and ``Ctrl + "-"``, respectively.
- To reset your robot to its initial pose in Gazebo, use key combination "Ctrl + R", where R stands for reset.
Environment Variables
---------------------
This is an advanced concept that might be out of the scope of this course. List it here for your information.
- You can check ROS-related environment variables by command
.. code-block:: bash
env | grep ROS
Reading Materials
-----------------
- `What is a bashrc file and what does it do?
`_
- `What does source do? `_
- `How do I save terminal output to a file?
`_
- `Apt command guide `_