diff --git a/skills/bash-linux/SKILL.md b/skills/bash-linux/SKILL.md new file mode 100644 index 0000000..456b77a --- /dev/null +++ b/skills/bash-linux/SKILL.md @@ -0,0 +1,209 @@ +--- +name: bash-linux +description: "Bash/Linux terminal patterns. Critical commands, piping, error handling, scripting. Use when working on macOS or Linux systems." +risk: unknown +source: community +date_added: "2026-02-27" +--- + +# Bash Linux Patterns + +> Essential patterns for Bash on Linux/macOS. + +--- + +## 1. Operator Syntax + +### Chaining Commands + +| Operator | Meaning | Example | +|----------|---------|---------| +| `;` | Run sequentially | `cmd1; cmd2` | +| `&&` | Run if previous succeeded | `npm install && npm run dev` | +| `\|\|` | Run if previous failed | `npm test \|\| echo "Tests failed"` | +| `\|` | Pipe output | `ls \| grep ".js"` | + +--- + +## 2. File Operations + +### Essential Commands + +| Task | Command | +|------|---------| +| List all | `ls -la` | +| Find files | `find . -name "*.js" -type f` | +| File content | `cat file.txt` | +| First N lines | `head -n 20 file.txt` | +| Last N lines | `tail -n 20 file.txt` | +| Follow log | `tail -f log.txt` | +| Search in files | `grep -r "pattern" --include="*.js"` | +| File size | `du -sh *` | +| Disk usage | `df -h` | + +--- + +## 3. Process Management + +| Task | Command | +|------|---------| +| List processes | `ps aux` | +| Find by name | `ps aux \| grep node` | +| Kill by PID | `kill -9 ` | +| Find port user | `lsof -i :3000` | +| Kill port | `kill -9 $(lsof -t -i :3000)` | +| Background | `npm run dev &` | +| Jobs | `jobs -l` | +| Bring to front | `fg %1` | + +--- + +## 4. Text Processing + +### Core Tools + +| Tool | Purpose | Example | +|------|---------|---------| +| `grep` | Search | `grep -rn "TODO" src/` | +| `sed` | Replace | `sed -i 's/old/new/g' file.txt` | +| `awk` | Extract columns | `awk '{print $1}' file.txt` | +| `cut` | Cut fields | `cut -d',' -f1 data.csv` | +| `sort` | Sort lines | `sort -u file.txt` | +| `uniq` | Unique lines | `sort file.txt \| uniq -c` | +| `wc` | Count | `wc -l file.txt` | + +--- + +## 5. Environment Variables + +| Task | Command | +|------|---------| +| View all | `env` or `printenv` | +| View one | `echo $PATH` | +| Set temporary | `export VAR="value"` | +| Set in script | `VAR="value" command` | +| Add to PATH | `export PATH="$PATH:/new/path"` | + +--- + +## 6. Network + +| Task | Command | +|------|---------| +| Download | `curl -O https://example.com/file` | +| API request | `curl -X GET https://api.example.com` | +| POST JSON | `curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL` | +| Check port | `nc -zv localhost 3000` | +| Network info | `ifconfig` or `ip addr` | + +--- + +## 7. Script Template + +```bash +#!/bin/bash +set -euo pipefail # Exit on error, undefined var, pipe fail + +# Colors (optional) +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +# Script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Functions +log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +log_error() { echo -e "${RED}[ERROR]${NC} $1" >&2; } + +# Main +main() { + log_info "Starting..." + # Your logic here + log_info "Done!" +} + +main "$@" +``` + +--- + +## 8. Common Patterns + +### Check if command exists + +```bash +if command -v node &> /dev/null; then + echo "Node is installed" +fi +``` + +### Default variable value + +```bash +NAME=${1:-"default_value"} +``` + +### Read file line by line + +```bash +while IFS= read -r line; do + echo "$line" +done < file.txt +``` + +### Loop over files + +```bash +for file in *.js; do + echo "Processing $file" +done +``` + +--- + +## 9. Differences from PowerShell + +| Task | PowerShell | Bash | +|------|------------|------| +| List files | `Get-ChildItem` | `ls -la` | +| Find files | `Get-ChildItem -Recurse` | `find . -type f` | +| Environment | `$env:VAR` | `$VAR` | +| String concat | `"$a$b"` | `"$a$b"` (same) | +| Null check | `if ($x)` | `if [ -n "$x" ]` | +| Pipeline | Object-based | Text-based | + +--- + +## 10. Error Handling + +### Set options + +```bash +set -e # Exit on error +set -u # Exit on undefined variable +set -o pipefail # Exit on pipe failure +set -x # Debug: print commands +``` + +### Trap for cleanup + +```bash +cleanup() { + echo "Cleaning up..." + rm -f /tmp/tempfile +} +trap cleanup EXIT +``` + +--- + +> **Remember:** Bash is text-based. Use `&&` for success chains, `set -e` for safety, and quote your variables! + +## When to Use +This skill is applicable to execute the workflow or actions described in the overview. + +## Limitations +- Use this skill only when the task clearly matches the scope described above. +- Do not treat the output as a substitute for environment-specific validation, testing, or expert review. +- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.