Linux Bash
Expert guidance for Linux bash operations, scripting, and system administration.
Core Commands
File Operations
-
ls -lah
-
List files with details, including hidden
-
find /path -name "pattern"
-
Find files by name
-
grep -r "pattern" /path
-
Recursive text search
-
chmod +x file
-
Make file executable
-
chown user:group file
-
Change ownership
-
tar -czf archive.tar.gz dir/
-
Create compressed archive
-
tar -xzf archive.tar.gz
-
Extract archive
Process Management
-
ps aux | grep process
-
Find running processes
-
top / htop
-
Monitor system resources
-
kill -9 PID
-
Force kill process
-
nohup command &
-
Run command in background
-
jobs
-
List background jobs
-
fg %1
-
Bring job to foreground
System Information
-
df -h
-
Disk usage human-readable
-
du -sh dir/
-
Directory size
-
free -h
-
Memory usage
-
uname -a
-
System information
-
lsb_release -a
-
Distribution info
Text Processing
-
cat file | head -n 10
-
First 10 lines
-
tail -f log.txt
-
Follow log file
-
sed 's/old/new/g' file
-
Replace text
-
awk '{print $1}' file
-
Print first column
-
sort file | uniq
-
Remove duplicates
Shell Scripting Best Practices
Script Template
#!/bin/bash set -euo pipefail # Exit on error, undefined vars, pipe failures
Script description
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
main() { # Your logic here echo "Hello, World!" }
main "$@"
Error Handling
Check command success
if ! command -v tool &> /dev/null; then echo "Error: tool not found" >&2 exit 1 fi
Trap errors
trap 'echo "Error on line $LINENO"' ERR
Variables
Constants (uppercase)
readonly CONFIG_FILE="/etc/app.conf"
Variables (lowercase)
user_input="$1"
Arrays
files=("file1.txt" "file2.txt") for file in "${files[@]}"; do echo "$file" done
Common Patterns
Check if file exists
if [[ -f "file.txt" ]]; then echo "File exists" fi
Loop through files
for file in *.txt; do echo "Processing $file" done
Read user input
read -p "Enter value: " user_value
Function definition
my_function() { local arg1="$1" echo "Received: $arg1" }
Tips
-
Quote variables: Always use "$variable" to prevent word splitting
-
Use [[ ]] for tests: More features than [ ]
-
Shellcheck: Use shellcheck script.sh to validate scripts
-
Exit codes: Use $? to check last command status
-
Debugging: Use set -x to trace execution
Safety First
-
Always test scripts in safe environment first
-
Use set -e to exit on errors
-
Validate input parameters
-
Quote file paths to handle spaces
-
Use absolute paths when possible