Comprehensive Reference for man, echo, date, uname, bc, history & which
Every Linux distribution comes packaged with a collection of multipurpose helper utilities that do not fit exclusively into file or process management, yet are indispensable for daily shell scripting, environment diagnosis, precision mathematics, and system auditing. This masterclass covers the essential Linux utility commands every student and system engineer must master.
Linux includes complete offline documentation for every standard command, system call, and configuration file via man (manual pages). Manual pages are strictly partitioned into 8 standardized numerical categories:
| Section | Scope & Coverage | Example Lookup |
|---|---|---|
1 |
User Commands (standard shell programs) | man 1 ls or man 1 passwd |
2 |
Kernel System Calls (C wrappers for kernel) | man 2 fork or man 2 open |
3 |
C Standard Library Functions | man 3 printf or man 3 malloc |
4 |
Special Files & Device Drivers (in /dev) |
man 4 null or man 4 random |
5 |
File Formats and System Conventions | man 5 passwd or man 5 fstab |
7 |
Overview, Protocols, and Conventions | man 7 tcp or man 7 ip |
8 |
System Administration Commands & Daemons (root only) | man 8 useradd or man 8 iptables |
# 1. Distinguish between passwd command (Section 1) and /etc/passwd file (Section 5)
man 1 passwd
man 5 passwd
# 2. Search manual descriptions by keyword when you don't know the exact command name
apropos "compress files"
# Or:
man -k "firewall"
The echo command writes text and shell variable values to stdout, while printf provides robust C-style formatted strings:
# 1. Standard echo with newline
echo "Hello from Linux terminal"
# 2. Enable backslash escape sequences (-e for \n newline, \t tab, \e colors)
echo -e "Server:\tProduction\nStatus:\tOnline"
# 3. Print without trailing newline (-n)
echo -n "Enter password: "
# 4. Formatted output with printf (align columns and format numbers)
printf "%-15s %-10d %-8.2f\n" "WebNode01" 1420 98.45
Modern Linux servers synchronize time using NTP (Network Time Protocol) and systemd-timesyncd. Formatting timestamps correctly is critical for backup scripting and log parsing:
# 1. View current system time and timezone
date
# 2. Display formatted ISO-8601 timestamp (YYYY-MM-DD HH:MM:SS)
date +"%Y-%m-%d %H:%M:%S"
# 3. Generate timestamp string for automatic backup filenames
BACKUP_NAME="site_backup_$(date +%Y%m%d_%H%M%S).tar.gz"
echo $BACKUP_NAME
# Output: site_backup_20261102_104500.tar.gz
# 4. Display terminal monthly calendar
cal
# 5. Display entire current year calendar with highlighting
cal 2026
# 6. Check system timezone and NTP synchronization status
timedatectl status
The uname (Unix Name) command queries the Linux kernel for hardware architecture and OS release parameters:
# Print all kernel and system parameters
uname -a
# Linux ubuntu-server 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC x86_64 GNU/Linux
# -s : Kernel Name (Linux)
# -n : Network Hostname (ubuntu-server)
# -r : Kernel Release version (6.8.0-45-generic)
# -m : Machine Architecture (x86_64, aarch64, or armv7l)
# -o : Operating System (GNU/Linux)
# View distribution details from systemd metadata:
cat /etc/os-release
Bash's internal arithmetic ($(( 10 / 3 ))) only supports integer arithmetic and discards fractions. The bc (Basic Calculator) command provides arbitrary-precision decimal mathematics:
# 1. Integer math truncation in Bash:
echo $(( 10 / 3 ))
# Returns: 3 (decimals lost!)
# 2. Precision decimal math using bc:
echo "scale=4; 10 / 3" | bc
# Returns: 3.3333
# 3. Calculate free RAM percentage directly in Bash script:
FREE_RAM=$(free -m | awk '/Mem:/ {print $4}')
TOTAL_RAM=$(free -m | awk '/Mem:/ {print $2}')
echo "scale=2; ($FREE_RAM / $TOTAL_RAM) * 100" | bc
When running a command, how does Linux decide what binary to run? The differences among these three commands are a favorite technical interview topic:
| Command | How It Works | Key Distinction |
|---|---|---|
which |
Searches the directories listed in the current user's $PATH variable |
Returns the first matching executable binary path that executes when you type the command name. |
whereis |
Searches hardcoded standard binary, source code, and man page locations | Finds binaries, manual documentation paths, and configuration sources simultaneously. |
type |
Internal Bash builtin inspection | The most accurate tool! Correctly identifies whether a command is a shell builtin (cd), alias (ll), function, or disk executable. |
# Compare:
which cd
# Output: empty or /usr/bin/cd (misleading!)
type cd
# Output: cd is a shell builtin (Accurate! cd cannot be an external binary)
type ls
# Output: ls is aliased to `ls --color=auto'
The history builtin maintains an index of previously executed commands. It is configured via environment variables in ~/.bashrc:
# 1. View last 15 executed commands
history 15
# 2. Execute a specific command from history by its line number
!450
# 3. Clear current session history buffer
history -c
# 4. Write current history immediately to disk (~/.bash_history)
history -w
Terminal Lab Exercise: Open your terminal and run this diagnostic sequence combining miscellaneous utilities:
# Step 1: Query your kernel architecture
echo "Operating System: $(uname -o)"
echo "Kernel Release: $(uname -r)"
echo "Hardware Arch: $(uname -m)"
# Step 2: Test command type resolution
type -a echo
type -a ls
type -a which
# Step 3: Compute decimal math with bc
echo "scale=3; (1024 * 1024) / 1000" | bc
# Step 4: Display formatted time
date +"Current Server Time: %A, %B %d, %Y - %I:%M:%S %p %Z"
cd were an external binary program, the shell would fork() a child process to run it. The child would change its own working directory and exit, leaving the parent shell's directory unchanged. Therefore, cd must run internally inside the parent shell as a builtin.
which only searches directories declared in the user's current $PATH variable and returns the binary path. whereis searches standard Linux binary directories, man page manual locations, and source files simultaneously.
-e option enables the interpretation of backslash escape sequences such as \n (newline), \t (horizontal tab), and \e or \033 (ANSI escape color codes).
$(( ... ))) is strictly limited to integer mathematics. Any fractional decimal is truncated. bc is an arbitrary-precision mathematical calculator that supports decimal precision via the scale variable.
x86_64 (64-bit AMD/Intel) or aarch64 (64-bit ARM architecture, common on AWS Graviton, Apple Silicon, and Raspberry Pi).
clear simply clears the terminal viewport while keeping the terminal driver state unchanged. reset completely reinitializes terminal settings, restoring corrupted character sets or unreadable terminal state caused by accidentally catting a binary file.
HISTCONTROL=ignorespace or ignoreboth is set in ~/.bashrc, prefixing any command with a single leading space prevents it from being recorded into ~/.bash_history.
apropos searches the short descriptions and header summaries of all manual pages for a given keyword, returning commands that match the search term. It is identical to running man -k.
/etc/os-release (or /usr/lib/os-release), which provides machine-readable key-value pairs like NAME, VERSION_ID, and ID_LIKE across all modern Linux distributions.
sudo timedatectl set-timezone Asia/Kolkata. You can list all available timezones with timedatectl list-timezones.
sqrt() function in bc: echo "scale=4; sqrt(144)" | bc. Note that the scale parameter defines the number of decimal places in the result.
history > my_history.txt. This writes your indexed command history into a clean text file for reference or auditing.
date +%s outputs the Unix Epoch timestamp (the number of seconds elapsed since January 1, 1970 UTC). It is used for timing execution and calculating date differentials in shell scripts.
command -v command_name. For example: if command -v git >/dev/null 2>&1; then echo "Git is installed"; fi.