Abstract
In the last chapter, we learned a few more commands of intermediate difficulty. We are very comfortable now with the command prompt and can navigate the filesystem of Linux and other Unix-like OSs. We can use simple file and directory commands. We are also comfortable with various operators and piping.
Access provided by Autonomous University of Puebla. Download chapter PDF
In the last chapter, we learned a few more commands of intermediate difficulty. We are very comfortable now with the command prompt and can navigate the filesystem of Linux and other Unix-like OSs. We can use simple file and directory commands. We are also comfortable with various operators and piping.
In this chapter, we will learn advanced commands and tools in Unix. The following is the list of topics we will learn in this chapter:
-
Shell and environment variables
-
Useful Linux commands
-
Useful Unix tools
After this chapter, we will be very comfortable with advanced tools in Unix. We will find these commands and concepts useful for learning shell scripting in the next chapter.
Shell and Environment Variables
Let us see how we can define variables in the shell. We can define numeric and string types of variables as follows:
a=2 str1='ASHWIN'
We do not have to declare them as we do in programming languages like C or Java. These variables are known as shell variables. We can access them by prefixing the variable names with a $ symbol as follows:
echo $a echo $str1
The preceding statements will print the values stored in the variables. We can assign values belonging to any data type to a variable. Thus, the variables in the shell are not confined to storing values of any single data type.
An environment variable is a variable whose value is set with the functionality built into the operating system or shell. An environment variable is made up of a name and value pair. All system-related information is stored in the environment variable. We can see the list of environment variables by running the following command:
env
It will print a very long list of variables, and it will consume several pages. We have already seen that the variable SHELL stores the name of the executable file of the current shell. So we will have a look at the important environment variables. Run the following command to know the Bash shell version:
echo $BASH_VERSION
Run the following command to know the hostname of your RPi:
echo $HOSTNAME
Run the following command to know the location of the history file:
echo $HISTFILE
The following command returns the location of the home directory of the current logged user (in our case, the user pi):
echo $HOME
To know the directory location the shell searches for the executable files when we run any command, use the following command:
echo $PATH
Useful Linux Commands
Let us see a few useful commands in Linux. The command w shows who are logged in and what they are doing. Run the command and see the output.
The command uptime shows for how long the system is running:
pi@raspberrypi:~ $ uptime 17:05:24 up 19:10, 3 users, load average: 0.24, 0.22, 0.18
The command who shows who is logged in:
pi@raspberrypi:~ $ who pi tty1 2020-08-24 21:54 pi pts/0 2020-08-25 16:42 (192.168.0.100) pi pts/1 2020-08-25 16:59 (192.168.0.100)
The command whoami prints the ID of the current user as follows:
pi@raspberrypi:~ $ whoami pi
We can get information about the system with the following command:
pi@raspberrypi:~ $ uname -a Linux raspberrypi 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux
We can get information about the current processes and utilization of resources using the commands htop and top. Run them to see the output.
We can see a snapshot of current processes with the command ps:
pi@raspberrypi:~ $ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Aug24 ? 00:00:04 /sbin/ini root 2 0 0 Aug24 ? 00:00:00 [kthreadd root 3 2 0 Aug24 ? 00:00:00 [rcu_gp]
This is the partial output of the execution of the command.
The command df reports the details of the filesystem:
pi@raspberrypi:~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 15G 6.5G 7.3G 47% / devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.7M 1.9G 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mmcblk0p1 253M 54M 199M 22% /boot tmpfs 378M 4.0K 378M 1% /run/user/1000
We can see the list of connected USB devices as follows with the command lsusb:
pi@raspberrypi:~ $ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 046d:081b Logitech, Inc. Webcam C310 Bus 001 Device 004: ID 046d:c077 Logitech, Inc. M105 Optical Mouse Bus 001 Device 003: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
We can see processor information with the commands lscpu and cat /proc/cpuinfo. Run both the commands to see the output.
We can use the following commands to see information related to memory:
pi@raspberrypi:~ $ free -m total used free shared buff/cache available Mem: 3776 121 3320 36 334 3491 Swap: 99 0 99 pi@raspberrypi:~ $ cat /proc/meminfo MemTotal: 3867184 kB MemFree: 3399896 kB MemAvailable: 3575016 kB
Unix commands are binary executable files. We can locate them with the commands which and whereis. The command which tells us the location of a binary executable:
pi@raspberrypi:~ $ which python3 /usr/bin/python3
We can retrieve information about the man page and documentation about the command with the command whereis as follows:
pi@raspberrypi:~ $ whereis python3 python3: /usr/bin/python3.7m /usr/bin/python3 /usr/bin/python3.7-config /usr/bin/python3.7 /usr/bin/python3.7m-config /usr/lib/python3 /usr/lib/python3.7 /etc/python3 /etc/python3.7 /usr/local/lib/python3.7 /usr/include/python3.7m /usr/include/python3.7 /usr/share/python3 /usr/share/man/man1/python3.1.gz
There is another Raspberry Pi OS–specific utility that can retrieve a lot of system information. It is vcgencmd. We can learn more about it at www.raspberrypi.org/documentation/raspbian/applications/vcgencmd.md.
The following are the examples of the execution:
pi@raspberrypi:~ $ vcgencmd measure_temp temp=35.0'C pi@raspberrypi:~ $ vcgencmd get_mem arm && vcgencmd get_mem gpu arm=896M gpu=128M
The first example shows the CPU temperature, and the second example shows the memory split (in megabytes) between CPU and GPU.
Useful Unix Tools
Let us study a few useful UNIX tools. These useful UNIX commands are found in all the distributions of Linux and other Unix-like operating systems. Let us create a simple CSV file for the demonstration. I have created a small CSV file for the demo, and its contents are as follows:
pi@raspberrypi:~ $ cat abc.csv ASHWIN, 20k, INDIA THOR, 10k, Asgard JANE, 15k, UK IRON MAN, 100k, USA
We can check the statistics of the file (number of words, lines, and characters including blank spaces) with the command wc as follows:
pi@raspberrypi:~ $ wc abc.csv 4 13 71 abc.csv pi@raspberrypi:~ $ wc -c abc.csv 71 abc.csv pi@raspberrypi:~ $ wc -w abc.csv 13 abc.csv pi@raspberrypi:~ $ wc -l abc.csv 4 abc.csv
The first example shows all the statistics of a file. The next three examples show the counts of characters, words, and lines, respectively. We can also use the command cut on this file for more practice. Have a look at the following examples:
pi@raspberrypi:~ $ cut -c 2-5 abc.csv SHWI HOR, ANE, RON pi@raspberrypi:~ $ cut -d "," -f 2- abc.csv 20k, INDIA 10k, Asgard 15k, UK 100k, USA
We can use the command grep to find patterns of texts. For example, if I want to find my name in a text file, I can use the command grep as follows:
pi@raspberrypi:~ $ grep ASHWIN abc.csv ASHWIN, 20k, INDIA
If I want the search to be case insensitive, then I can use it the following way:
pi@raspberrypi:~ $ grep -i asgard abc.csv THOR, 10k, Asgard
We can sort data with the command sort as follows:
pi@raspberrypi:~ $ sort abc.csv ASHWIN, 20k, INDIA IRON MAN, 100k, USA JANE, 15k, UK THOR, 10k, Asgard
We can find out unique data items as follows:
pi@raspberrypi:~ $ sort abc.csv | uniq ASHWIN, 20k, INDIA IRON MAN, 100k, USA JANE, 15k, UK THOR, 10k, Asgard
To see the command in action, before running it, insert a duplicate line in the file abc.csv:
The following are the date and calendar commands in action:
pi@raspberrypi:~ $ date Tue 25 Aug 2020 09:03:01 PM IST pi@raspberrypi:~ $ cal August 2020 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Finally, if we want to find a file, then we can use the command find as follows:
pi@raspberrypi:~ $ find . -name "*.conf" ./.config/lxterminal/lxterminal.conf ./.config/lxsession/LXDE/desktop.conf ./.config/pcmanfm/LXDE/desktop-items-0.conf
The command is followed by the path (in our case, it is the current directory, hence .) and criteria for the search. Here, we are searching for the configuration files in the current directory.
Summary
In this chapter, we learned many advanced Linux commands. We will use all the commands we learned in this and previous chapters to prepare shell scripts in the next chapter.
The next chapter will have detailed instructions on how to prepare and execute shell scripts on Linux.
Author information
Authors and Affiliations
Rights and permissions
Copyright information
© 2021 Ashwin Pajankar
About this chapter
Cite this chapter
Pajankar, A. (2021). Useful Unix Commands and Tools. In: Practical Linux with Raspberry Pi OS. Apress, Berkeley, CA. https://doi.org/10.1007/978-1-4842-6510-9_5
Download citation
DOI: https://doi.org/10.1007/978-1-4842-6510-9_5
Published:
Publisher Name: Apress, Berkeley, CA
Print ISBN: 978-1-4842-6509-3
Online ISBN: 978-1-4842-6510-9
eBook Packages: Professional and Applied ComputingApress Access BooksProfessional and Applied Computing (R0)