Update tech_docs/primitives.md
This commit is contained in:
@@ -103,5 +103,115 @@ You're absolutely right that tools built on solid, fundamental primitives tend t
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### **Key Insight:**
|
||||||
|
The tools that last are the ones that **expose underlying system realities** rather than abstract them away. Learn the primitives they’re built on (text streams, processes, files, networks), and you’ll adapt to any "modern" tool that comes and goes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
You're absolutely right that tools built on solid, fundamental primitives tend to outlast fleeting "modern" alternatives. Here's a **reasonable list of primitives** (and associated tools) that have stood the test of time, categorized by domain:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **1. Text Processing (The Unix Philosophy)**
|
||||||
|
- **Core Primitives**: Lines, streams, regular expressions, fields/delimiters.
|
||||||
|
- **Tools to Master**:
|
||||||
|
- `grep` – Filtering by pattern.
|
||||||
|
- `sed` – Stream editing (substitutions, deletions).
|
||||||
|
- `awk` – Field-based text processing (awk is almost a language itself).
|
||||||
|
- `cut` / `paste` / `join` – Column and table operations.
|
||||||
|
- `sort` / `uniq` – Sorting and deduplication.
|
||||||
|
- `tr` – Character-level transformations.
|
||||||
|
- `xargs` – Construct commands from input.
|
||||||
|
|
||||||
|
**Why?** These tools compose endlessly and handle 90% of text wrangling tasks.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **2. System & Process Control**
|
||||||
|
- **Core Primitives**: Files, processes, signals, permissions, pipes.
|
||||||
|
- **Tools to Master**:
|
||||||
|
- `find` – File system search with powerful predicates.
|
||||||
|
- `ps` / `top` / `htop` – Process inspection.
|
||||||
|
- `kill` / `pkill` / `killall` – Process management.
|
||||||
|
- `cron` / `systemd` (timers) – Scheduling.
|
||||||
|
- `lsof` – List open files/sockets.
|
||||||
|
- `strace` / `perf` – Debugging and profiling.
|
||||||
|
|
||||||
|
**Why?** Understanding processes and system state is forever relevant.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **3. Networking**
|
||||||
|
- **Core Primitives**: Sockets, ports, packets, DNS, HTTP.
|
||||||
|
- **Tools to Master**:
|
||||||
|
- `curl` / `wget` – HTTP/HTTPS interactions.
|
||||||
|
- `ssh` / `scp` / `rsync` – Remote access and file transfer.
|
||||||
|
- `netstat` / `ss` – Socket inspection.
|
||||||
|
- `nc` (`netcat`) – Arbitrary TCP/UDP connections.
|
||||||
|
- `tcpdump` / `Wireshark` – Packet inspection.
|
||||||
|
- `dig` / `nslookup` – DNS debugging.
|
||||||
|
- `iptables` / `nftables` – Firewalling (still foundational despite newer abstractions).
|
||||||
|
|
||||||
|
**Why?** Networking is universal, and these tools expose the underlying reality.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **4. Files & Storage**
|
||||||
|
- **Core Primitives**: Inodes, blocks, mounts, symlinks, permissions.
|
||||||
|
- **Tools to Master**:
|
||||||
|
- `dd` – Low-level file/device operations.
|
||||||
|
- `mount` / `umount` / `df` / `du` – Disk management.
|
||||||
|
- `tar` / `gzip` / `xz` – Archiving and compression.
|
||||||
|
- `ln` – Hard/soft links.
|
||||||
|
- `chmod` / `chown` / `acl` – Permissions.
|
||||||
|
- `rsync` – Efficient file synchronization.
|
||||||
|
|
||||||
|
**Why?** Filesystems don’t change as fast as abstractions built atop them.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **5. Version Control (The Primitive: Diffs & Patches)**
|
||||||
|
- **Tool to Master**: `git` (but understand its internals: objects, refs, the index).
|
||||||
|
- **Bonus**: Learn `diff` / `patch` for low-level changes.
|
||||||
|
|
||||||
|
**Why?** Git won. Knowing it deeply pays dividends.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **6. Shell Scripting**
|
||||||
|
- **Core Primitives**: Variables, loops, conditionals, subshells, exit codes.
|
||||||
|
- **Tools to Master**:
|
||||||
|
- `bash` (or `zsh`) – The dominant shells.
|
||||||
|
- `jq` – JSON processing (for modern APIs).
|
||||||
|
- `make` – Dependency-based workflows (not just for C!).
|
||||||
|
|
||||||
|
**Why?** Automation is eternal, and shell is the lingua franca.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **7. Performance & Debugging**
|
||||||
|
- **Core Primitives**: CPU, memory, I/O, latency.
|
||||||
|
- **Tools to Master**:
|
||||||
|
- `perf` / `strace` / `ltrace` – Profiling and tracing.
|
||||||
|
- `vmstat` / `iostat` / `sar` – System metrics.
|
||||||
|
- `gdb` – Debugging binaries.
|
||||||
|
- `time` – Measuring command runtime.
|
||||||
|
|
||||||
|
**Why?** Performance bottlenecks always resurface in new forms.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **What to Master vs. Know?**
|
||||||
|
- **Master**: `grep`, `awk`, `sed`, `find`, `git`, `ssh`, `iptables`, `jq`, `curl`, `bash`.
|
||||||
|
- **Know Well Enough**: `strace`, `tcpdump`, `perf`, `dd`, `make`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **Avoid Overinvesting In:**
|
||||||
|
- Fad tools that abstract too much (e.g., overly "declarative" systems that hide the underlying primitives).
|
||||||
|
- GUI-only tools (unless they’re irreplaceable, like Wireshark).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### **Key Insight:**
|
### **Key Insight:**
|
||||||
The tools that last are the ones that **expose underlying system realities** rather than abstract them away. Learn the primitives they’re built on (text streams, processes, files, networks), and you’ll adapt to any "modern" tool that comes and goes.
|
The tools that last are the ones that **expose underlying system realities** rather than abstract them away. Learn the primitives they’re built on (text streams, processes, files, networks), and you’ll adapt to any "modern" tool that comes and goes.
|
||||||
Reference in New Issue
Block a user