Basic Shell Concepts
What is a Shell?
- Command processor that provides interface to the kernel
- Executes commands, navigates filesystem, sets environment variables, and handles scripting
Types of Shells
- sh: Original Bourne Shell
- csh: C Shell with improved interactive features
- bash: Enhanced version of sh, default in many Linux distributions
- zsh: Modern shell with extensive features and customization options
Useful Shell Features
- Auto-completion: Press
Tab to complete commands or filenames (double Tab shows options)
- Command history: Access previous commands with
β and β keys
- Command history search: Use
Ctrl+r to search through command history
File System Navigation
Directory Structure
/ - Root directory (top-level directory)
- Key directories:
/home - User home directories
/usr - User programs, libraries, and header files
/etc - System configuration files
/var - Variable data and logs
/tmp - Temporary files
/boot - Boot loader and kernel files
/dev - Device files
/opt - Optional/add-on software
Path Concepts
- Current directory: Working directory (check with
pwd)
- Absolute path: Complete path from root (starts with
/)
- Relative path: Path relative to current location
. - Current directory
.. - Parent directory
~ - Home directory
- Example:
../bin/python (when in /usr/lib)
Navigation Commands
pwd - Print working directory
cd [directory] - Change directory
cd / - Go to root directory
cd ~ - Go to home directory
cd .. - Go up one directory
ls - List files and directories
ls -l - Detailed listing
ls -a - Show hidden files
ls -F - Show file types with indicators
ls -lh - Human-readable file sizes
File and Directory Operations
File Viewing
cat [file] - Display entire file content
cat -n [file] - Display with line numbers
head [file] - Display first lines (default: 10)
head -n 5 [file] - Show first 5 lines
tail [file] - Display last lines (default: 10)
tail -n 7 [file] - Show last 7 lines
less [file] - View file with scrolling
- Navigate:
β/β keys, Space for page down, q to quit
File and Directory Management
mkdir [directory] - Create directory
mkdir -p [path] - Create nested directories
rmdir [directory] - Remove empty directory
touch [file] - Create empty file or update timestamp
rm [file] - Remove file
rm -r [directory] - Remove directory and contents
rm -f [file] - Force removal without prompt
cp [source] [destination] - Copy file or directory
cp -r [source_dir] [destination] - Copy directory recursively
mv [source] [destination] - Move/rename file or directory
Links
- Create hard link:
ln [target] [link_name]
- References same file data (inode)
- Cannot span different filesystems or link directories
- Create symbolic link:
ln -s [target] [link_name]
- Like shortcuts in Windows
- Can link to directories and across filesystems
File Search
find [path] [options] - Search for files
find . -name "filename" -print - Find by name in current directory
find . -name "file*" -type f -print - Find files starting with βfileβ
- File types:
f (file), d (directory), l (symbolic link)
Command Help and Documentation
Getting Help
- Basic help:
[command] --help
- Manual pages:
man [command]
- Info pages:
info [command]
Finding Commands
which [command] - Show full path of command
whereis [command] - Show binary, source, and manual locations
- Command search path stored in
$PATH environment variable
Text Editing with Vim
Basic Vim Usage
- Open file:
vim [filename]
- Modes:
- Command mode (default): For navigation and commands
- Insert mode: Enter with
i, exit with Esc
- Saving and quitting:
:w - Save
:q - Quit
:wq or :x - Save and quit
:q! - Quit without saving
Shell Customization
Aliases
- Create command shortcuts
- Temporary:
alias ls='ls -F'
- Permanent: Add to
~/.bashrc
Prompt Customization
- Controlled by
PS1 environment variable
- Check current:
echo $PS1
- Change:
PS1='bash> '
- Common placeholders:
\u - Username
\h - Hostname
\w - Current directory (full path)
\W - Current directory (basename only)
\d - Date
\t - Time
\$ - Shows # for root, $ for normal users
Environment Variables
- View all:
printenv
- Set variable:
export VARIABLE=value
- Configuration files:
/etc/profile - System-wide settings
~/.profile - User-specific login settings
~/.bashrc - User-specific shell settings
File Permissions
Understanding Permissions
- File listing shows:
[type][user perms][group perms][others perms]
- Permission types:
r - Read
w - Write
x - Execute
- Example:
-rw-r--r--
- - Regular file
rw- - Owner can read and write
r-- - Group can only read
r-- - Others can only read
Changing Permissions
- Symbolic mode:
chmod u+w [file] - Add write permission for user
chmod g-x [file] - Remove execute permission for group
chmod o=r [file] - Set others permission to read only
- Numeric mode:
chmod 644 [file] - Set to -rw-r--r--
chmod 755 [file] - Set to -rwxr-xr-x
- Number calculation: read(4) + write(2) + execute(1)
Super User Operations
- Switch to root:
su
- Execute as root:
sudo [command]
- Add user to sudo group:
sudo usermod -aG sudo [username]
- Edit sudo configuration:
sudo visudo
Redirecting Output
[command] > [file] - Redirect output, overwrite file
[command] >> [file] - Redirect output, append to file
[command] 2> [file] - Redirect error output
[command] &> [file] - Redirect both standard and error output
[command] < [file] - Use file as input source
Pipes
[command1] | [command2] - Send output of command1 as input to command2
- Example:
ls /usr/bin/gcc* | wc -l - Count gcc files
Package Management (APT)
Basic APT Commands
- Update package list:
sudo apt update
- Install package:
sudo apt install [package]
- Remove package:
sudo apt remove [package]
- Search for package:
apt search [keyword]
- List installed packages:
dpkg -l
- Show package info:
dpkg -L [package]
Compiler Installation
- Install GCC:
sudo apt install -y gcc
- Check installation path:
which gcc
- List compiler files:
ls -alth $(which gcc)*
- List toolchain tools:
ls -alth /usr/bin/$(gcc --dumpmachine)*
Library Management
- Install library:
sudo apt install -y libjpeg-dev
- Check package info:
dpkg -l | grep jpeg
- Check library location:
dpkg -L libjpeg-turbo8
- Analyze library:
readelf -a /usr/lib/x86_64-linux-gnu/libjpeg.so.8.2.2 | grep SONAME