Operating System#
From date manipulation to process control, mastering command-line utilities is essential for effective system administration. Here you’ll find practical examples for everyday tasks: parsing dates, searching files with find, managing processes, and handling compression—all organized for quick reference.
An interactive demo script is available at src/bash/os.sh to help you experiment with the concepts covered in this cheatsheet.
./src/bash/os.sh # Run all demos
./src/bash/os.sh date # Run date/time demo
./src/bash/os.sh find # Run find command demo
./src/bash/os.sh --help # Show all available sections
Date and Time#
The date command displays and manipulates system date and time. Format strings
control output, while GNU and BSD versions differ in syntax for date arithmetic.
Current Date and Time#
date # Full date and time
date +"%Y-%m-%d" # 2024-01-15
date +"%Y%m%d" # 20240115
date +"%H:%M:%S" # 14:30:45
date +"%Y-%m-%d %H:%M:%S" # 2024-01-15 14:30:45
date -Iseconds # ISO 8601 format with timezone
Common Format Specifiers#
%Y # Year (2024)
%m # Month (01-12)
%d # Day (01-31)
%H # Hour 24h (00-23)
%M # Minute (00-59)
%S # Second (00-59)
%s # Unix timestamp
%A # Weekday name (Monday)
%B # Month name (January)
%Z # Timezone (PST)
Date Arithmetic#
# Linux (GNU date)
date +%Y-%m-%d -d "1 day ago" # Yesterday
date +%Y-%m-%d -d "7 days ago" # 7 days ago
date +%Y-%m-%d -d "1 month ago" # 1 month ago
date +%Y-%m-%d -d "next monday" # Next Monday
date +%Y-%m-%d -d "2024-01-15 + 10 days"
# BSD/macOS
date -j -v-1d +"%Y-%m-%d" # Yesterday
date -j -v-7d +"%Y-%m-%d" # 7 days ago
date -j -v-1m +"%Y-%m-%d" # 1 month ago
date -j -v+10d +"%Y-%m-%d" # 10 days from now
Convert Timestamps#
# Unix timestamp to date (Linux)
date -d @1705334400
# Unix timestamp to date (BSD/macOS)
date -r 1705334400
# Current timestamp
date +%s
File Searching with find#
The find command recursively searches directories for files matching specified
criteria. It supports filtering by name, type, size, time, ownership, and permissions,
with actions to execute on matched files.
Basic Patterns#
find /path -name "*.py" # By extension
find /path -name "*test*" # By substring
find /path -iname "*.PY" # Case insensitive
find /path -path "**/test/*" # By path pattern
File Types#
find /path -type f # Regular files
find /path -type d # Directories
find /path -type l # Symbolic links
find /path -type f -name "*.py" # Combine filters
# Type codes: f=file, d=directory, l=symlink,
# b=block, c=character, p=pipe, s=socket
By Size#
find /path -type f -size +100M # Larger than 100MB
find /path -type f -size -1M # Smaller than 1MB
find /path -type f -size 50M # Exactly 50MB
# Size units: c=bytes, k=KB, M=MB, G=GB
By Time#
# Access time
find /path -type f -atime +7 # Accessed > 7 days ago
find /path -type f -atime -7 # Accessed < 7 days ago
find /path -type f -amin +60 # Accessed > 60 min ago
# Modification time
find /path -type f -mtime +30 # Modified > 30 days ago
find /path -type f -mmin -10 # Modified < 10 min ago
# Change time (metadata)
find /path -type f -ctime +7 # Changed > 7 days ago
# Newer than file
find /path -type f -newer ref.txt
By Ownership and Permissions#
find /path -type f -user root # Owned by root
find /path -type f -group admin # Group admin
find /path -type f -perm 644 # Exact permissions
find /path -type f -perm -644 # At least these permissions
find /path -type f -perm /u+x # User executable
Combining Conditions#
# AND (implicit)
find /path -type f -name "*.log" -size +1M
# OR
find /path \( -name "*.py" -o -name "*.sh" \)
# NOT
find /path -type f ! -name "*.txt"
# Complex
find /path -type f \( -name "*.py" -o -name "*.sh" \) ! -path "*/venv/*"
Actions#
# Delete matched files
find /path -type f -name "*.tmp" -delete
# Execute command for each file
find /path -type f -name "*.sh" -exec chmod +x {} \;
# Execute command with all files
find /path -type f -name "*.txt" -exec grep -l "pattern" {} +
# Delete directories recursively
find /path -type d -name "__pycache__" -exec rm -rf {} +
# Print with null delimiter (for xargs)
find /path -type f -print0 | xargs -0 ls -la
Loop Through Results#
# Using while loop (handles spaces in filenames)
find /path -type f -name "*.txt" -print0 | while IFS= read -r -d '' file; do
echo "Processing: $file"
done
# Process substitution (preserves variables)
count=0
while IFS= read -r -d '' file; do
((count++))
done < <(find /path -type f -print0)
echo "Found: $count files"
# Sort results
find /path -name "*.txt" -print0 | sort -z | xargs -r0 -I{} echo "{}"
System Information#
Commands for gathering system software and configuration information.
System Information#
uname -a # All system info
uname -s # Kernel name
uname -r # Kernel release
uname -m # Machine architecture
hostname # System hostname
uptime # System uptime
cat /etc/os-release # OS info (Linux)
sw_vers # macOS version
Process Management#
Commands for monitoring and controlling system processes.
Viewing Processes#
ps aux # All processes
ps aux | grep nginx # Filter by name
ps -ef # Full format listing
ps -p PID -o pid,ppid,cmd,%cpu,%mem # Specific process details
pgrep -l nginx # Find PID by name
pstree # Process tree
top # Interactive process viewer
htop # Enhanced top (if installed)
Process Control#
kill PID # Terminate (SIGTERM)
kill -9 PID # Force kill (SIGKILL)
kill -HUP PID # Reload config (SIGHUP)
killall nginx # Kill by name
pkill -f "python script.py" # Kill by pattern
Background Jobs#
command & # Run in background
jobs # List background jobs
fg %1 # Bring job 1 to foreground
bg %1 # Resume job 1 in background
disown %1 # Detach job from shell
nohup command & # Run immune to hangups
File Operations#
Commands for file manipulation, compression, and text processing.
File Management#
cp -r src dest # Copy recursively
mv old new # Move/rename
rm -rf dir # Remove recursively
mkdir -p a/b/c # Create nested dirs
ln -s target link # Symbolic link
chmod 755 file # Change permissions
chown user:group file # Change ownership
Compression#
# tar
tar -cvf archive.tar dir/ # Create tar
tar -xvf archive.tar # Extract tar
tar -czvf archive.tar.gz dir/ # Create gzipped tar
tar -xzvf archive.tar.gz # Extract gzipped tar
tar -cjvf archive.tar.bz2 dir/ # Create bz2 tar
tar -tzvf archive.tar.gz # List contents
# zip
zip -r archive.zip dir/ # Create zip
unzip archive.zip # Extract zip
unzip -l archive.zip # List contents
# gzip
gzip file # Compress (replaces file)
gunzip file.gz # Decompress
zcat file.gz # View without extracting
Viewing Files#
cat file # Print entire file
head -n 20 file # First 20 lines
tail -n 20 file # Last 20 lines
tail -f file # Follow file updates
less file # Paginated view
wc -l file # Line count
wc -w file # Word count
File Comparison#
diff file1 file2 # Line differences
diff -u file1 file2 # Unified format
diff -r dir1 dir2 # Compare directories
cmp file1 file2 # Byte comparison
comm file1 file2 # Common/unique lines (sorted)
md5sum file # MD5 checksum
sha256sum file # SHA256 checksum
Environment and Shell#
Commands for managing shell environment and configuration.
Environment Variables#
env # All environment variables
printenv PATH # Specific variable
export VAR=value # Set variable
unset VAR # Remove variable
echo $PATH # Print variable
Command Information#
which command # Command location
type command # Command type
whereis command # Binary/man/source locations
man command # Manual page
command --help # Help text
alias # List aliases
alias ll='ls -la' # Create alias
History#
history # Command history
history | grep pattern # Search history
!n # Execute command n
!! # Repeat last command
!$ # Last argument of previous command
ctrl+r # Reverse search