Essential GNU/Linux commands – typical commands
The command line is your friend.
For advanced users, this is an obvious statement; for the beginner, not so friendly. Where do you start with that darn blinking cursor?
How many Linux commands are there? A whole bunch. Thousands. Tens of thousands depending on dependencies and packages. But don't worry, you don't have to learn them all.
Saying or writing something original about Linux commands is a bit difficult: far smarter, folks than I have written about, compiled, and battle-tested the multiple combinations of commands available to the Linux user. And this book is not intended to be about Linux commands. So instead, I will give you a handful of basic commands that I find myself consistently using on the BBB and also provide you with some of my favorite reference materials and cheat sheets that will give you a more comprehensive list of important commands.
Getting ready
Of course, we assume that if you intend to use some command line interface (CLI) commands, you have to have your command shell window open and gain root access:
sudo
Using sudo
as part of your command syntax is a requirement that often bedevils new Linux users. It is important to understand that many Linux commands demand what are known as "superuser" privileges, which grant you total control over the board and its software. Having full admin rights within a command prevents any casual user from coming along and destroying your hard work, by design or accident.
The "open sesame" of Debian Linux, the magic sudo
command (pronounced "soo-doo"), means "Super User do x-command" when dissected. If you don't append your command at the beginning with sudo
, your mkdir
command, for example, will return a "bad command" error.
sudo -i and root
Adding the -i
option (the sudo -i
command) provides even more control over the environment: the root user access. When running commands as a root user, there are ample opportunities to completely mangle your system, so exercise extreme caution in its use.
However, not all commands require superuser privileges. For instance, when you're really just poking around the system and not modifying files, directories, or the system itself, sudo
isn't necessary.
You should keep in mind several things when working with the command line:
- Lowercase: Using lowercase syntax is the shell's required expectation, with the exception of some options and arguments that are uppercase.
- Arguments and options: Most commands have multiple options or arguments that can be used to fine-tune your command. We will only be able to touch on a few instances of how and when these options are used.
- Help:
- Help (no hyphens): Typing
help
before a command outputs information about this command. An example of this is$ help cd
. - Help (hyphens): Many executable commands have more help and information about their options or arguments. An example of this is
$ mkdir --help
. - Man pages: Short for "manual pages", adding
man
to the beginning of many Linux commands opens up a manual for these commands. It can often yield too much information, but it can be helpful if you're looking for a deeper understanding of a command. An example of this is$ man chmod
.
- Help (no hyphens): Typing
- Tab command: This lists recent commands. In order to use this, you need to do the following:
- Type a letter (or a string of letters) and then press the Tab button. All commands that begin with this letter or string will be shown. This will prevent a vast majority of typing mistakes.
- Press Tab twice quickly, and it will show all the commands that are currently in your path.
Conventions
Early in the book, we will frequently use the entire line from the command line, including the user name, address, symbols connoting user type, directory, and so on. So, for example, you will see a line that looks similar to the following:
debian@beagle_bone:~$ mkdir
However, as we become more familiar with the shell, we will mostly shorten the command instruction to only include the command itself:
~$ mkdir
Alternatively, you will see a slight variation on the preceding command when we refer to a root user. Note the #
sign in place of the $
sign in the following command:
~# mkdir
Now, let's move on to the commands. A super-duper subset of commands, anyway. We've organized them into System navigational commands, Device and system insight, and Modify content/data commands.
System navigational command – change your directory – cd
To move from one directory to another, there are numerous variations on how to do it.
How to do it…
Perform the following steps:
- To change from your current default directory to the
Desktop
directory, type in these commands:debian@beaglebone:~$ cd Desktop debian@beaglebone:~/Desktop$
- To go back one directory level, use the following command lines:
debian@beaglebone:~/Desktop$ cd .. debian@beaglebone:~$
- Go to the
Home
directory using the following command:debian@beaglebone:~/Desktop$ cd ~ debian@beaglebone:~$
- Go back to the previous directory you were in by typing in the following commands:
debian@beaglebone:~$ cd - /home/debian/Desktop debian@beaglebone:~/Desktop$
There's more…
In addition to the preceding commands, you should be familiar with the four special directory symbols:
- The current directory (
.
) - The parent directory (
..
) - The root directory (
/
) - The home directory (
~
)
System navigational command – show your current directory – pwd
This stands for print working directory, a means to show the user where in the system they are currently working or the absolute path relative to the current directory.
How to do it…
Use the following command to show your current directory:
debian@beaglebone:~$ pwd /home/Debian
System navigational command – find a file – find
Looking for a file? One way to search for it is with the find function. Just be sure to add the -name
option so that the output shows the directory location. Add sudo
as well so that you do not get directory access errors.
How to do it…
Use the following command to find a file:
$ sudo find / -name <filename>
Device and system insight – shows what's inside a directory – ls
The ls
command lists the contents of your current directory.
How to do it…
Use the following command to see the list of contents in the current directory:
debian@beaglebone:~$ ls Desktop
At the moment, the only thing you will see is the Desktop
directory. As we continue adding content in subsequent chapters, there will be more that would be seen upon using ls
.
Adding the -lah
option at the end of the command gives more detailed information on the files, as follows:
debian@beaglebone:~$ ls -lah total 112K drwxr-xr-x 19 debian debian 4.0K May 4 23:37 . drwxr-xr-x 3 root root 4.0K May 5 00:05 .. -rw------- 1 debian debian 55 May 4 23:37 .Xauthority -rw------- 1 debian debian 2.4K May 5 01:41 .bash_history -rw-r--r-- 1 debian debian 220 Jan 1 2015 .bash_logout -rw-r--r-- 1 debian debian 3.4K Jan 1 2015 .bashrc drwxr-xr-x 6 debian debian 4.0K Mar 8 2015 .cache drwxr-xr-x 9 debian debian 4.0K Mar 4 23:51 .config drwx------ 3 debian debian 4.0K Mar 4 23:37 .dbus -rw-r--r-- 1 debian debian 35 Mar 4 23:37 .dmrc drwxr-xr-x 2 debian debian 4.0K Mar 8 2015 .fontconfig drwxr-xr-x 24 debian debian 4.0K Mar 8 2015 .gimp-2.8 drwx------ 3 debian debian 4.0K Mar 8 2015 .local
The options in the command now reveal a variety of things about the file: their permission status (column 1), owner and group (columns 3 and 4), file sizes (column 5) , and modification date (column 6). The l
option outputs in the list form, adding the a
forces the command to show any hidden files, and the h
option turns it all into a human readable format.
Device and system insight – find out what USB devices are connected – lsusb
This captures and lists all USB devices currently connected to the BBB while showing basic information about the device.
How to do it…
Use the following command to find out about the USB devices connected:
debian@beaglebone:~$ lsusb Bus 001 Device 002: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Note
Note that the first device here shows a connected USB audio dongle.
Device and system insight – get information about connected devices – cat/proc/bus/input/devices
Where lusb
leaves off, this command lists more detailed information about any device connected to the BBB. Note the difference in output for the same USB audio device (C-media) shown in our preceding recipe using lsusb
.
How to do it…
Use the following command to get information about connected devices:
debian@beaglebone:~$ cat /proc/bus/input/devices I: Bus=0000 Vendor=0000 Product=0000 Version=0000 N: Name="tps65217_pwr_but" P: Phys= S: Sysfs=/devices/ocp.3/44e0b000.i2c/i2c-0/0-0024/input/input0 U: Uniq= H: Handlers=kbd event0 B: PROP=0 B: EV=3 B: KEY=100000 0 0 0 I: Bus=0003 Vendor=0d8c Product=013c Version=0100 N: Name="C-Media Electronics Inc. USB PnP Sound Device" P: Phys=usb-musb-hdrc.1.auto-1/input3 S: Sysfs=/devices/ocp.3/47400000.usb/musb-hdrc.1.auto/usb1/1-1/1-1:1.3/input/input1 U: Uniq= H: Handlers=kbd event1 B: PROP=0 B: EV=13 B: KEY=78 0 e0000 0 0 0 B: MSC=10
There's more…
The stem of this command is cat
, which is one of the most popular commands to quickly read files without writing or modifying them:
$ cat file4
You can try it with any file to see how the screen output looks.
Device and system insight – get your version of Linux
You can find out which version and distribution of Linux you are running through several methods.
How to do it…
To find out your version of Linux, use the following command:
debian@beaglebone:~$ lsb_release -a
The screen output will look similar to this:
No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.6 (wheezy) Release: 7.6 Codename: wheezy
The preceding command is a good complement to the more typical way we determine the actual kernel version, which is as follows:
$ uname -r 3.8.13-boneXX
Device and system insight – find out running processes – ps
In Linux, applications are referred to as processes, and each is given a unique ID number or PID
. The
ps
(that is, process status) command provides information about the currently running tasks or processes. The output includes the PIDs.
How to do it…
This command takes a snapshot of your board. You can run the command unadulterated and with no options, as follows:
$ ps
But the output is a thin gruel:
debian@beaglebone:~$ ps PID TTY TIME CMD 1623 pts/0 00:00:00 bash 2035 pts/0 00:00:00 ps
So, it is often better to modify the output in order to get more insight into the running processes and display this information in a more orderly fashion, as in the following command:
$ ps aux
The following is the output:
The aux
series of options complement the basic command by doing the following:
- The
a
option shows the processes for all users. Historically,ps
requires different syntax depending on our flavor of Linux or Unix. This option simplifies the method required to add options. - Using the
u
option tells the command to display the user or owner of the process in the output. The reason you want to do this is that there are processes typically running at the root level and other processes running at a non-root-user level. However, we frequently want to see all processes running regardless of user, so this option is important. - The
x
option ensures that processes that are not currently running in a terminal window—which form the majority of running processes—are also in the output that we want to see.
Device and system insight – find out the resources used by running processes – top and htop
This command takes it a bit further than the ps
command as it dynamically updates not only the processes running but also the CPU resources used by the processes. The status is continuous and in real time.
How to do it…
Use this command line:
$ top
The output is as follows:
The top
command is adequate and one that you will hear most Linux users call upon, but there is now a much lovelier, easier way to read a package—htop
. Let's install it and compare it to top with the following command:
$ sudo apt-get install htop
Now, the output will be as follows:
As you can see, it has an output that is much cleaner and easier to read.
Device and system insight – quitting processes – kill
The typical way to force quit—or kill—an application is to use the kill
command and combine it with the process ID (PID), which you can derive from any of the preceding recipes to capture process information. Let's take a look at the basic method.
How to do it…
Use the following command to kill processes:
$ kill <process_id>
Here's a real example, which would force quit the top process shown in our prior recipe:
$ kill 4569
When you know the name of a process, you can use the pkill
command, which operates on the process name instead, as follows:
$ pkill -9 gdb
Naturally, there is yet another way to skin the cat while killing a process. For example, you may discover that there are several processes associated with one application, and killing them one by one gets a bit slippery. Instead, use killall
and kiss them goodbye:
$ killall chromium
Device and system insight – message reports – dmesg
As you already know, every time you boot up your device, a ton of messages quickly scrolls past on the screen. Unless you wear a blue leotard with a red cape and possess exceptionally fast eyes, you likely will not catch all these pearls of ASCII wisdom. Yet, these messages can be extremely useful at times, particularly when you need to troubleshoot a system problem.
How to do it…
The dmesg
command is used as follows:
$ dmesg
Typically, the output looks similar to this:
[ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.8.13-bone47 (root@imx6q-wandboard-2gb-0) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Fri Apr 11 01:36:09 UTC 2014 [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=50c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] Machine: Generic AM33XX (Flattened Device Tree), model: TI AM335x BeagleBone [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] On node 0 totalpages: 130816 [ 0.000000] free_area_init_node: node 0, pgdat c0824280, node_mem_map c089f000
The list goes on and on as your machine is full of activity! So, limiting dmesg
to output smaller chunks of information with a command option is primarily the course followed. In this case, we want to show the last ten events on the system, so we will use the following:
$ dmesg | tail
Alternatively, we can use the less
option, which allows us to advance forward in the list more methodically, as follows:
$ dmesg | less
Device and system insight – shows disk space – df -h
This command outputs information on your board's available disk space and displays it in human readable format.
How to do it…
Use the following command to find out the disk space:
debian@beaglebone:~$ df -h Filesystem Size Used Avail Use% Mounted on rootfs 7.2G 1.6G 5.4G 22% / udev 10M 0 10M 0% /dev tmpfs 100M 824K 99M 1% /run /dev/mmcblk0p2 7.2G 1.6G 5.4G 22% / tmpfs 249M 0 249M 0% /dev/shm tmpfs 249M 0 249M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user tmpfs 5.0M 0 5.0M 0% /run/lock /dev/mmcblk0p1 96M 71M 25M 75% /boot/uboot /dev/mmcblk1p2 1.7G 1.7G 0 100% /media/rootfs /dev/mmcblk1p1 96M 11M 86M 11% /media/boot
Device and system insight – explore network – Ifconfig
This lists all the network devices with network information. You will commonly find yourself using this command on the BBB when you need to troubleshoot a problem or set up network connections.
How to do it…
Use the following command to explore network configuration:
$ ifconfig
The output is as follows:
Modify content / data commands – make a new directory – mkdir
This command helps you create a directory (folder) where you want to work or place files.
How to do it…
Use the following command to make a new directory:
debian@beaglebone:~$ mkdir test
Now is a good time to check your work with the ls
command, as follows:
debian@beaglebone:~$ ls Desktop test
Modify content/data commands – remove a file or directory – rm
As the name implies, this command removes a file or directory that you designate.
How to do it…
Removing a file is very simple. You just need to type out the following:
$ rm file1
Adding the -i
option is good practice, especially for beginners, as it prompts you to confirm the file's removal as follows:
$ rm -ir file1 rm: remove regular file `file1'?
To remove directories, there are principally two commands you can use. Firstly, when you have an empty directory, the command is similar to the following:
$ rmdir dir1
However, rmdir
works only if the directory is empty. If you want to remove a directory with all its contents, you can use rm
with the -r
option. This option tells rm
to remove a directory recursively, as in the following command:
$ rmdir -r dir1
Tip
Red Alert!
Obviously, rm -r
can wreak havoc on your system and delete files and directories that you may actually need. To be cautious, the first few times you use this command, you might want to include the -i
option. This way, each time you delete a directory and its contents, you will get a prompt before each file is deleted.
Modify content / data commands – download files – wget
Running this command gives you control over grabbing and downloading files from web servers via HTTP, HTTPS, and FTP. Unlike the experience of downloading a file in a web browser, wget
is noninteractive. This means that you don't have to be logged on for the command to complete its task, which is potentially a great time-saver with large file downloads.
How to do it…
In order to download files, you can use a command such as the following:
$ wget http://
This will download the Major Tom page at www.hudsonwerks.com into your current directory and create a file named index.html
. Next, perform the following steps:
- Check your work using the following command:
$ ls Desktop test index.html
- Now, perform another
wget
; this time, download viaftp
. Here, we will grabwget
source code from the GNU site as follows:wget ftp://ftp.gnu.org/pub/gnu/wget/wget-1.15.tar.xz
- Check your work again, using the following command this time:
$ ls Desktop test index.html wget-1.15.tar.xz
There's more…
Where do we put the new tarballs, packages, and so on? It is good practice to create a directory called /home/username/Packages/
. This is where you can put tarballs, their extracted files, compiled code, backups of replaced files, and installation scripts. For this, you can use the following command:
$ mkdir /home/username/Packages/ $ wget -P /home/debian/packages <download-url>
Modify content / data commands – open a tar file – tar [options]
Working with files in the .tar
(tarball) format, a type of archived file, is common in Linux. The various options that come with the tar
command will considerably ease your management of the files that are not archived.
How to do it…
Use the following command to open a tar
file:
$ tar -zxvf file_name.tar.gz
Before actually running the command, let's understand a bit about the options:
-z
: This is used to uncompress the resulting archive with thegzip
command-x
: This is used to extract to disk from the archive-v
: This produces a verbose output, which means that it shows progress and file names while extracting files-f document.tar.gz
: This reads the archive from the file calleddocument.tar.gz
Other file types include .xz
, which is the actual file type we downloaded previously using wget
—wget-1.15.tar.xz
. So, here are the essential recipe steps:
- By default, files are extracted into your current directory. However, you can simultaneously extract your files and put them in a different directory with the
-C
option. Using the following command, we will extract files and put them in the/test
directory:$ wget-1.15.tar.xz -C test
- Check your work by navigating to the new directory created and running the following command:
$ cd /test/ wget-1.15
You should see all the unarchived
wget
source files with their accompanying directories.
The flip side of unarchiving is archiving. Here's how you can create a tar
file:
$ tar -cvf file.tar inputfile1 inputfile2
Replace inputfile1
and inputfile2
with the files and/or directories that you want to combine. You can use any name in the place of file.tar
; you should keep the .tar
extension, though.
There's more…
You may occasionally run into errors while opening tarballs (or other gzip
files). If so, one troubleshooting tip is to ensure that the file is actually a zipped archive with the following command:
$ file filename
This will show the file type and size; if it's not an archive, you can't run the tar
command on it.
Modify content / data commands – clean up files – autoclean
This command removes partial packages from the system.
How to do it…
Use the following command to clean up files:
$ sudo apt-get autoclean
Modify content / data commands – purge a package – apt-get purge, apt-get remove --purge
These commands completely get rid of packages and dependencies.
How to do it…
Use the following command to get rid of packages and dependencies:
$ sudo apt-get purge packagename
Alternatively, you can use the following command:
$ sudo apt-get remove --purge packagename
Modify content/data commands – shutdown the system – [options]
It is a bad idea to pull the plug on your board to turn it off. Doing so can often lead to a corrupted SD card or mangled files. Instead, here's how you power down your board gracefully.
How to do it…
If you want to shut down the BBB and reboot it, the following command will be useful:
sudo shutdown -r now
However, if you simply want to shut down the system and power down completely, then either of the following two options will do the trick:
sudo shutdown -h now
You can alternatively use the following command:
sudo poweroff
See also
- Linux in A Nutshell: The online version of this book delivers an abbreviated list of 687 commands (http://www.linuxdevcenter.com/cmd/)
- Working with commands: You can work with commands at http://linuxcommand.org/lc3_lts0060.php
You will find some of the best one-page cheat sheet references for Linux commands. Print them out and post them in an honored place!
- The table from Make use of: http://www.makeuseof.com/pages/linux-commands-reference-pdf
- Free electrons' command memento: This is well designed and comprehensive and can be found at http://free-electrons.com/doc/training/linux-kernel/command_memento.pdf
- An excellent cheat sheet that comes in different languages and printable PDFs can be found at http://fosswire.com/post/2007/08/unixlinux-command-cheat-sheet/
- You can read up more on cleaning up packages at http://www.stchman.com/cleanup.html