From 4f3e5877aed97648b43c453909af2db88f745057 Mon Sep 17 00:00:00 2001 From: MajorLinux Date: Fri, 13 Mar 2026 23:33:38 -0400 Subject: [PATCH] wiki: add dev-tools section with tmux, screen, and rsync articles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add three new articles to 03-opensource/dev-tools/: - tmux: persistent terminal sessions, background jobs, capture-pane - screen: lightweight alternative, comparison table - rsync: flags reference, resumable transfers, SSH usage Update all indexes (SUMMARY, section index, main index, README). Article count: 28 → 31. Remove tmux from writing backlog. Co-Authored-By: Claude Sonnet 4.6 --- 03-opensource/dev-tools/rsync.md | 102 ++++++++++++++++++++++++++++++ 03-opensource/dev-tools/screen.md | 76 ++++++++++++++++++++++ 03-opensource/dev-tools/tmux.md | 93 +++++++++++++++++++++++++++ 03-opensource/index.md | 4 +- MajorWiki-Deploy-Status.md | 2 +- README.md | 16 +++-- SUMMARY.md | 3 + index.md | 16 +++-- 8 files changed, 298 insertions(+), 14 deletions(-) create mode 100644 03-opensource/dev-tools/rsync.md create mode 100644 03-opensource/dev-tools/screen.md create mode 100644 03-opensource/dev-tools/tmux.md diff --git a/03-opensource/dev-tools/rsync.md b/03-opensource/dev-tools/rsync.md new file mode 100644 index 0000000..774e3a4 --- /dev/null +++ b/03-opensource/dev-tools/rsync.md @@ -0,0 +1,102 @@ +# rsync — Fast, Resumable File Transfers + +## Problem + +Copying large files or directory trees between drives or servers is slow, fragile, and unresumable with `cp`. A dropped connection or a single error means starting over. You also want to skip files that already exist at the destination without re-copying them. + +## Solution + +`rsync` is a file synchronization tool that only transfers what has changed, preserves metadata, and can resume interrupted transfers. It works locally and over SSH. + +### Installation (Fedora) + +```bash +sudo dnf install rsync +``` + +### Basic Local Copy + +```bash +rsync -av /source/ /destination/ +``` + +- `-a` — archive mode: preserves permissions, timestamps, symlinks, ownership +- `-v` — verbose: shows what's being transferred + +**Trailing slash on source matters:** +- `/source/` — copy the *contents* of source into destination +- `/source` — copy the source *directory itself* into destination + +### Resume an Interrupted Transfer + +```bash +rsync -av --partial --progress /source/ /destination/ +``` + +- `--partial` — keeps partially transferred files so they can be resumed +- `--progress` — shows per-file progress and speed + +### Skip Already-Transferred Files + +```bash +rsync -av --ignore-existing /source/ /destination/ +``` + +Useful when restarting a migration — skips anything already at the destination regardless of timestamp comparison. + +### Dry Run First + +Always preview what rsync will do before committing: + +```bash +rsync -av --dry-run /source/ /destination/ +``` + +No files are moved. Output shows exactly what would happen. + +### Transfer Over SSH + +```bash +rsync -av -e ssh /source/ user@remotehost:/destination/ +``` + +Or with a non-standard port: + +```bash +rsync -av -e "ssh -p 2222" /source/ user@remotehost:/destination/ +``` + +### Exclude Patterns + +```bash +rsync -av --exclude='*.tmp' --exclude='.Trash*' /source/ /destination/ +``` + +### Real-World Use + +Migrating ~286 files from `/majorRAID` to `/majorstorage` during a RAID dissolution project: + +```bash +rsync -av --partial --progress --ignore-existing \ + /majorRAID/ /majorstorage/ \ + 2>&1 | tee /root/raid_migrate.log +``` + +Run inside a `tmux` or `screen` session so it survives SSH disconnects: + +```bash +tmux new-session -d -s rsync-migrate \ + "rsync -av --partial --progress /majorRAID/ /majorstorage/ | tee /root/raid_migrate.log" +``` + +### Check Progress on a Running Transfer + +```bash +tail -f /root/raid_migrate.log +``` + +--- + +## Tags + +#rsync #linux #storage #file-transfer #sysadmin #dev-tools diff --git a/03-opensource/dev-tools/screen.md b/03-opensource/dev-tools/screen.md new file mode 100644 index 0000000..e772913 --- /dev/null +++ b/03-opensource/dev-tools/screen.md @@ -0,0 +1,76 @@ +# screen — Simple Persistent Terminal Sessions + +## Problem + +Same problem as tmux: SSH sessions die, jobs get killed, long-running tasks need to survive disconnects. screen is the older, simpler alternative to tmux — universally available and gets the job done with minimal setup. + +## Solution + +`screen` creates detachable terminal sessions. It's installed by default on many systems, making it useful when tmux isn't available. + +### Installation (Fedora) + +```bash +sudo dnf install screen +``` + +### Core Workflow + +```bash +# Start a named session +screen -S mysession + +# Detach (keeps running) +Ctrl+a, d + +# List sessions +screen -list + +# Reattach +screen -r mysession + +# If session shows as "Attached" (stuck) +screen -d -r mysession +``` + +### Start a Background Job Directly + +```bash +screen -dmS mysession bash -c "long-running-command 2>&1 | tee /root/output.log" +``` + +- `-d` — start detached +- `-m` — create new session even if already inside screen +- `-S` — name the session + +### Capture Current Output Without Attaching + +```bash +screen -S mysession -X hardcopy /tmp/screen_output.txt +cat /tmp/screen_output.txt +``` + +### Send a Command to a Running Session + +```bash +screen -S mysession -X stuff "tail -f /root/output.log\n" +``` + +--- + +## screen vs tmux + +| Feature | screen | tmux | +|---|---|---| +| Availability | Installed by default on most systems | Usually needs installing | +| Split panes | Basic (Ctrl+a, S) | Better (Ctrl+b, ") | +| Scripting | Limited | More capable | +| Config complexity | Simple | More options | + +Use screen when it's already there or for quick throwaway sessions. Use tmux for anything more complex. See [tmux](tmux.md). + +--- + +## Tags + +#screen #terminal #linux #ssh #productivity #dev-tools diff --git a/03-opensource/dev-tools/tmux.md b/03-opensource/dev-tools/tmux.md new file mode 100644 index 0000000..09fd2d8 --- /dev/null +++ b/03-opensource/dev-tools/tmux.md @@ -0,0 +1,93 @@ +# tmux — Persistent Terminal Sessions + +## Problem + +SSH sessions die when your connection drops, your laptop closes, or you walk away. Long-running jobs — storage migrations, file scans, downloads — get killed mid-run. You need a way to detach from a session, come back later, and pick up exactly where you left off. + +## Solution + +`tmux` is a terminal multiplexer. It runs sessions that persist independently of your SSH connection. You can detach, disconnect, reconnect from a different machine, and reattach to find everything still running. + +### Installation (Fedora) + +```bash +sudo dnf install tmux +``` + +### Core Workflow + +```bash +# Start a named session +tmux new-session -s mysession + +# Detach from a session (keeps it running) +Ctrl+b, d + +# List running sessions +tmux ls + +# Reattach to a session +tmux attach -t mysession + +# Kill a session when done +tmux kill-session -t mysession +``` + +### Start a Background Job Directly + +Skip the interactive session entirely — start a job in a new detached session in one command: + +```bash +tmux new-session -d -s rmlint2 "rmlint /majorstorage// /mnt/usb// /majorRAID 2>&1 | tee /majorRAID/rmlint_scan2.log" +``` + +The job runs immediately in the background. Attach later to check progress: + +```bash +tmux attach -t rmlint2 +``` + +### Capture Output Without Attaching + +Read the current state of a session without interrupting it: + +```bash +tmux capture-pane -t rmlint2 -p +``` + +### Split Panes + +Monitor multiple things in one terminal window: + +```bash +# Horizontal split (top/bottom) +Ctrl+b, " + +# Vertical split (left/right) +Ctrl+b, % + +# Switch between panes +Ctrl+b, arrow keys +``` + +### Real-World Use + +On **majorhome**, all long-running storage operations run inside named tmux sessions so they survive SSH disconnects: + +```bash +tmux new-session -d -s rmlint2 "rmlint ..." # dedup scan +tmux new-session -d -s rsync-migrate "rsync ..." # file migration +tmux ls # check what's running +``` + +--- + +## tmux vs screen + +Both work. tmux has better split-pane support and scripting. screen is simpler and more universally installed. I use both — tmux for new jobs, screen for legacy ones. See the [screen](screen.md) article for reference. + +--- + +## Tags + +#tmux #terminal #linux #ssh #productivity #dev-tools diff --git a/03-opensource/index.md b/03-opensource/index.md index 4c3af23..da60713 100644 --- a/03-opensource/index.md +++ b/03-opensource/index.md @@ -6,7 +6,9 @@ A curated collection of my favorite open-source tools and privacy-respecting alt - [rmlint: Duplicate File Scanning](productivity/rmlint-duplicate-scanning.md) ## 🛠️ Development Tools -- *Coming soon* +- [tmux: Persistent Terminal Sessions](dev-tools/tmux.md) +- [screen: Simple Persistent Sessions](dev-tools/screen.md) +- [rsync: Fast, Resumable File Transfers](dev-tools/rsync.md) ## 🎨 Media & Creative - *Coming soon* diff --git a/MajorWiki-Deploy-Status.md b/MajorWiki-Deploy-Status.md index b70251f..d37ac1d 100644 --- a/MajorWiki-Deploy-Status.md +++ b/MajorWiki-Deploy-Status.md @@ -31,7 +31,7 @@ DNS record and Caddy entry have been removed. ## Content -- 23 articles across 5 domains +- 31 articles across 5 domains - Source of truth: `MajorVault/20-Projects/MajorTwin/08-Wiki/` - Deployed via Gitea webhook (push from MajorAir → auto-pull on majorlab) diff --git a/README.md b/README.md index 4ff8afd..6d776bc 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > A growing reference of Linux, self-hosting, open source, streaming, and troubleshooting guides. Written by MajorLinux. Used by MajorTwin. > **Last updated:** 2026-03-13 -**Article count:** 28 +**Article count:** 31 ## Domains @@ -11,7 +11,7 @@ |---|---|---| | 🐧 Linux & Sysadmin | `01-linux/` | 9 | | 🏠 Self-Hosting & Homelab | `02-selfhosting/` | 8 | -| 🔓 Open Source Tools | `03-opensource/` | 1 | +| 🔓 Open Source Tools | `03-opensource/` | 4 | | 🎙️ Streaming & Podcasting | `04-streaming/` | 1 | | 🔧 General Troubleshooting | `05-troubleshooting/` | 9 | @@ -73,6 +73,11 @@ ### Productivity - [rmlint: Duplicate File Scanning](03-opensource/productivity/rmlint-duplicate-scanning.md) — extremely fast duplicate file finding and storage reclamation +### Development Tools +- [tmux: Persistent Terminal Sessions](03-opensource/dev-tools/tmux.md) — detachable sessions for long-running jobs over SSH +- [screen: Simple Persistent Sessions](03-opensource/dev-tools/screen.md) — lightweight terminal multiplexer, universally available +- [rsync: Fast, Resumable File Transfers](03-opensource/dev-tools/rsync.md) — incremental file sync locally and over SSH, survives interruptions + --- ## 🎙️ Streaming & Podcasting @@ -99,15 +104,15 @@ | Date | Article | Domain | |---|---|---| +| 2026-03-13 | [tmux: Persistent Terminal Sessions](03-opensource/dev-tools/tmux.md) | Open Source | +| 2026-03-13 | [screen: Simple Persistent Sessions](03-opensource/dev-tools/screen.md) | Open Source | +| 2026-03-13 | [rsync: Fast, Resumable File Transfers](03-opensource/dev-tools/rsync.md) | Open Source | | 2026-03-13 | [Gemini CLI Manual Update](05-troubleshooting/gemini-cli-manual-update.md) | Troubleshooting | | 2026-03-13 | [rmlint: Duplicate File Scanning](03-opensource/productivity/rmlint-duplicate-scanning.md) | Open Source | | 2026-03-13 | [SnapRAID & MergerFS Storage Setup](01-linux/storage/snapraid-mergerfs-setup.md) | Linux | | 2026-03-13 | [Qwen2.5-14B OOM on RTX 3080 Ti (12GB)](05-troubleshooting/gpu-display/qwen-14b-oom-3080ti.md) | Troubleshooting | | 2026-03-13 | [Apache Outage: Fail2ban Self-Ban + Missing iptables Rules](05-troubleshooting/networking/fail2ban-self-ban-apache-outage.md) | Troubleshooting | | 2026-03-12 | [Docker & Caddy Recovery After Reboot](05-troubleshooting/docker-caddy-selinux-post-reboot-recovery.md) | Troubleshooting | -| 2026-03-11 | [MajorWiki Setup & Pipeline](05-troubleshooting/majwiki-setup-and-pipeline.md) | Troubleshooting | -| 2026-03-11 | [Obsidian Cache Hang Recovery](05-troubleshooting/obsidian-cache-hang-recovery.md) | Troubleshooting | -| 2026-03-11 | [yt-dlp JS Challenge Fix on Fedora](05-troubleshooting/yt-dlp-fedora-js-challenge.md) | Troubleshooting | --- @@ -121,4 +126,3 @@ | Pi-hole setup and local DNS | Self-Hosting | Medium | No | | OBS audio routing on Linux (PipeWire) | Streaming | Medium | No | | Nextcloud setup with Docker | Self-Hosting | Medium | No | -| tmux basics | Linux | Low | No | diff --git a/SUMMARY.md b/SUMMARY.md index c639add..0081f0d 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -5,6 +5,9 @@ * [Introduction](02-selfhosting/index.md) * [Open Source & Alternatives](03-opensource/index.md) * [rmlint: Duplicate File Scanning](03-opensource/productivity/rmlint-duplicate-scanning.md) + * [tmux: Persistent Terminal Sessions](03-opensource/dev-tools/tmux.md) + * [screen: Simple Persistent Sessions](03-opensource/dev-tools/screen.md) + * [rsync: Fast, Resumable File Transfers](03-opensource/dev-tools/rsync.md) * [Streaming](04-streaming/index.md) * [Introduction](04-streaming/index.md) * [Troubleshooting](05-troubleshooting/index.md) diff --git a/index.md b/index.md index c115bc5..0b56f9a 100644 --- a/index.md +++ b/index.md @@ -3,7 +3,7 @@ > A growing reference of Linux, self-hosting, open source, streaming, and troubleshooting guides. Written by MajorLinux. Used by MajorTwin. > > **Last updated:** 2026-03-13 -> **Article count:** 28 +> **Article count:** 31 ## Domains @@ -11,7 +11,7 @@ |---|---|---| | 🐧 Linux & Sysadmin | `01-linux/` | 9 | | 🏠 Self-Hosting & Homelab | `02-selfhosting/` | 8 | -| 🔓 Open Source Tools | `03-opensource/` | 1 | +| 🔓 Open Source Tools | `03-opensource/` | 4 | | 🎙️ Streaming & Podcasting | `04-streaming/` | 1 | | 🔧 General Troubleshooting | `05-troubleshooting/` | 9 | @@ -73,6 +73,11 @@ ### Productivity - [rmlint: Duplicate File Scanning](03-opensource/productivity/rmlint-duplicate-scanning.md) — extremely fast duplicate file finding and storage reclamation +### Development Tools +- [tmux: Persistent Terminal Sessions](03-opensource/dev-tools/tmux.md) — detachable sessions for long-running jobs over SSH +- [screen: Simple Persistent Sessions](03-opensource/dev-tools/screen.md) — lightweight terminal multiplexer, universally available +- [rsync: Fast, Resumable File Transfers](03-opensource/dev-tools/rsync.md) — incremental file sync locally and over SSH, survives interruptions + --- ## 🎙️ Streaming & Podcasting @@ -99,15 +104,15 @@ | Date | Article | Domain | |---|---|---| +| 2026-03-13 | [tmux: Persistent Terminal Sessions](03-opensource/dev-tools/tmux.md) | Open Source | +| 2026-03-13 | [screen: Simple Persistent Sessions](03-opensource/dev-tools/screen.md) | Open Source | +| 2026-03-13 | [rsync: Fast, Resumable File Transfers](03-opensource/dev-tools/rsync.md) | Open Source | | 2026-03-13 | [Gemini CLI Manual Update](05-troubleshooting/gemini-cli-manual-update.md) | Troubleshooting | | 2026-03-13 | [rmlint: Duplicate File Scanning](03-opensource/productivity/rmlint-duplicate-scanning.md) | Open Source | | 2026-03-13 | [SnapRAID & MergerFS Storage Setup](01-linux/storage/snapraid-mergerfs-setup.md) | Linux | | 2026-03-13 | [Qwen2.5-14B OOM on RTX 3080 Ti (12GB)](05-troubleshooting/gpu-display/qwen-14b-oom-3080ti.md) | Troubleshooting | | 2026-03-13 | [Apache Outage: Fail2ban Self-Ban + Missing iptables Rules](05-troubleshooting/networking/fail2ban-self-ban-apache-outage.md) | Troubleshooting | | 2026-03-12 | [Docker & Caddy Recovery After Reboot](05-troubleshooting/docker-caddy-selinux-post-reboot-recovery.md) | Troubleshooting | -| 2026-03-11 | [MajorWiki Setup & Pipeline](05-troubleshooting/majwiki-setup-and-pipeline.md) | Troubleshooting | -| 2026-03-11 | [Obsidian Cache Hang Recovery](05-troubleshooting/obsidian-cache-hang-recovery.md) | Troubleshooting | -| 2026-03-11 | [yt-dlp JS Challenge Fix on Fedora](05-troubleshooting/yt-dlp-fedora-js-challenge.md) | Troubleshooting | --- @@ -120,4 +125,3 @@ | Troubleshooting NVIDIA on Linux | Troubleshooting | Medium | No | | Pi-hole setup and local DNS | Self-Hosting | Medium | No | | Nextcloud setup with Docker | Self-Hosting | Medium | No | -| tmux basics | Linux | Low | No |