What Even Is Linux?
Before you can use it, you need to understand what it actually is — and why it's so different from what you're used to.
The big difference: Windows hides everything behind pretty buttons. Linux exposes everything, and that exposure is where the power comes from. When something breaks, you can actually see why. When you want to automate something, you can. When you want a server running 24/7 with no desktop wasting RAM, you can do that too.
-
1It's free and runs on anythingProxmox, your containers (Nextcloud, Navidrome, Pi-hole), Debian inside those CTs — all Linux. Zero licensing cost. Your whole homelab runs on it for $0 in software.
-
2Servers don't need a desktopWindows wastes RAM running a full visual interface even when no one's looking at it. Linux can run everything through text commands, so 100% of your hardware goes to actual work.
-
3Docker basically requires itDocker was built for Linux. Every container you'll ever run — Jellyfin, Nextcloud, Frigate — was designed and tested on Linux first.
The Filesystem Tree
This is the most important concept in Linux. Everything — files, devices, network connections, settings — is a file inside a tree of folders. Once this clicks, everything else makes sense.
C:\, D:\, E:\ — separate drive letters for separate storage devices.Linux has one root, written as just
/ (a forward slash). Everything branches off from there. Drives, USB sticks, network shares — they all get mounted somewhere inside that single tree.
| Path | What it is | Your homelab example |
|---|---|---|
| /etc/ | Config files for everything on the system | Pi-hole config, Nextcloud settings, systemd services |
| /var/log/ | Log files — what happened and when | Where you read error logs when something breaks |
| /mnt/ | Mount point for drives and shares | Your SSHFS gaming PC mount lives at /mnt/hamster-storage |
| /home/ | User home directories | Where personal files live for non-root users |
| /root/ | Home folder for the root user | Your SSH keys live at /root/.ssh/hamsterpc |
| /tmp/ | Temporary files | Cleared on reboot. Good for scratch work. |
| /usr/bin/ | Programs you can run | Where nano, ffmpeg, etc. are stored |
~ symbol is a shortcut for your home directory. If you're logged in as root (which you are in Proxmox and your CTs), ~ means /root. So ~/scripts is the same as /root/scripts.
Why a Terminal Exists
You said you hate having to remember commands just to navigate. That's fair. Here's why it works this way, and why you'll actually come to appreciate it.
GUIs (graphical interfaces) are great for humans browsing around. But they can't do everything, and on a server — where no one's sitting there clicking around — a terminal running over SSH is way more efficient. No screen required. No mouse required. You can manage your server from across the house, or across the planet.
mkdir myfolder — done in 2 seconds. You can also write it in a script and run it on 50 machines at once. Or schedule it every night at midnight.That's exactly what this tutorial is for. You're building pattern recognition, not a command dictionary.
-
↑Up arrow = previous commandPress ↑ to scroll through your command history. Press ↑ twice to go further back. You'll reuse commands constantly — no retyping.
-
!!!! = repeat last commandType
!!and press Enter to run whatever you just ran. Super useful when you forgot to addsudo— just typesudo !! -
CtrlCtrl+C = stop whatever is runningIf a command is running and won't stop, or you started the wrong thing, press
Ctrl+Cto cancel it immediately. This is your escape key in the terminal. -
CtrlCtrl+L = clear the screenSame as typing
clear. Wipes the visible terminal output so you have a clean view. Your history still works, nothing is deleted.
Reading the Prompt
Before you type a single command, there's information right in front of you. The prompt tells you who you are, where you are, and whether you have power.
# in a prompt, you have root privileges. There's no "are you sure?" dialog box. One wrong command can delete critical files with no undo. When you're working as root, slow down and read before pressing Enter.
Root vs. Your User
Every Linux system has a concept of permissions. Not everyone can do everything. Here's how it works and why it matters for your homelab.
In your current setup, you log into Proxmox as root and drop into CT shells as root. This is fine for a personal homelab — it's simpler. Just be careful.
ls -la you'll see something like this:
-rw-r--r--) is the permission string. For now, just know: if Linux says "permission denied" when you run something, you probably need to use sudo or switch to root.
sudo command runs something with root power from a regular account. If you're already root, you don't need sudo.pct set 101 --mp0 from the Proxmox host shell — that's you being root. That's why it worked without asking for a password. In your CT shells, same thing: you're root inside the container.
pwd — Where Am I?
The first command every Linux user learns. It stands for Print Working Directory. It just tells you where you currently are in the filesystem.
pwd, press Enter, and it prints the full path of where you are. No options needed, no arguments. Just pwd.When to use it: Whenever you're not sure where you are. You'll get lost sometimes — that's normal. Just type
pwd to get your bearings.
ls — What's Here?
ls stands for list. It shows you what files and folders exist in the current directory. It's like opening a folder in Windows Explorer but faster.
| Command | What it does | When to use |
|---|---|---|
| ls | Basic list. Just names. | Quick glance at what's there. |
| ls -l | Long format: shows permissions, owner, size, date. | When you need details about files. |
| ls -a | Shows hidden files too (files starting with a dot). | When config files seem "missing". |
| ls -la | Both: long format + hidden files. | This is what you'll use most. |
| ls /etc | List a specific path without going there first. | Peek into a folder from anywhere. |
cd — Moving Around
cd = Change Directory. This is the one you already know. Here's how to use it without having to type full paths every time.
-
TabType the first few letters, then TabType
cd /etc/ngthen press Tab → fills in tocd /etc/nginx. You only typed 2 letters of "nginx". -
TabDouble-Tab shows all optionsIf there are multiple matches, press Tab twice and Linux lists all possibilities. Then type one more letter to narrow it down, Tab again.
-
TabWorks for commands too, not just pathsType
sysand press Tab → completes tosystemctl. TypedocTab →docker. This works for any installed program.
cd /e Tab → /etc/, then ng Tab → /etc/nginx/, then co Tab Tab to see what's inside. Full path built in seconds with almost no typing.
Absolute vs. Relative Paths
Understanding paths is what separates confused typing from confident navigation. There are two ways to describe any location in Linux.
/ and gives the complete address. Like a street address — it works no matter where you currently are.
/. It's directions from your current location. Like "turn left at the corner" vs. giving a full address.
| Symbol | Meaning | Example |
|---|---|---|
| . | Current directory (where you are right now) | ./run.sh = run the script that's right here |
| .. | Parent directory (one level up) | cd .. = go up one folder |
| ../.. | Two levels up | cd ../.. = go up two folders |
| ~ | Your home directory | cd ~/scripts = always goes to /root/scripts |
Reading Files: cat & less
Half of troubleshooting is reading the right file. Here's how to look inside files without a GUI.
cat stands for "concatenate" but you'll mostly use it to just dump a file's contents to the screen. Best for short files (config files, small scripts, etc.).
less opens a file in a scrollable reader. Use this for long log files, big config files — anything that would fly off the screen with cat.
| Key in less | What it does |
|---|---|
| ↑ ↓ | Scroll up and down line by line |
| Space | Page down (big jump) |
| G | Jump to the end of the file |
| g | Jump to the beginning |
| /word | Search for "word" in the file |
| q | Quit and return to the terminal |
tail is often more useful than cat or less for logs because you usually want to see what just happened, not the whole history.
Editing Files: nano
nano is the beginner-friendly text editor. Unlike vim (which has a learning curve that breaks people), nano works like you'd expect — just type to edit.
^X at the bottom, it means press Ctrl+X. This trips people up constantly — it's not the caret character, it's Control.
| Shortcut | What it does |
|---|---|
| Ctrl+X | Exit nano. Will ask if you want to save. |
| Ctrl+O | Save (write Out) without exiting. |
| Ctrl+W | Search for text (Where is). |
| Ctrl+K | Cut the entire current line. |
| Ctrl+U | Paste what you cut. |
| Ctrl+G | Help menu. |
🖥️ Practice Terminal
This is a simulated terminal. Type real commands and see how Linux responds. It won't break anything — it's a fake filesystem for practice. Try the hints below or freestyle it.
sudo — Why You Need Permission
Most of the time in your homelab you're already root, so you don't need sudo. But you'll see it everywhere, and understanding it matters.
sudo stands for Super User Do. It runs a single command as root, even if you're logged in as a regular user. It's like "Run as Administrator" on Windows but for one command at a time.In your CT shells and Proxmox, you're already root — so you won't need
sudo. But on your future R720xd, if you create a personal user account, you'll need sudo to do admin things.
sudo in your current setup. This lesson is for when you eventually create normal user accounts on the R720xd.
Services — systemctl
On Linux, programs that run in the background (like your SSHFS mounts, Pi-hole, web servers) are called services. systemctl is how you control them.
systemctl does all of that for Linux services.
/etc/systemd/system/sshfs-mounts.service. If your music or storage mounts stop working after a reboot, the first thing to check is systemctl status sshfs-mounts.
Decoding Error Messages
You said you freeze up when something doesn't work. This lesson is specifically for that. Error messages aren't random noise — they're usually telling you exactly what's wrong.
docekr instead of docker?2. If spelled right, install it:
apt install <name>3. If it's a script you made: you might need
./script.sh instead of just script.sh
sudo to the command. Or switch to root with su -2. If it's a script: make it executable with
chmod +x script.sh then run ./script.sh3. If it's a file: check ownership with
ls -la to see who owns it
ls at each step. ls /etc, then ls /etc/nginx, etc.2. Linux paths are case-sensitive.
/etc/Nginx and /etc/nginx are different.3. Use Tab autocomplete — it only completes paths that actually exist
systemctl status <service>2. Is the IP right?
ping 192.168.1.202 to test connectivity3. Is the port right? Check with
ss -tlnp to see what ports are actually open
fusermount -u /mnt/hamster-storage2. Remount it: run your mount script or
systemctl restart sshfs-mounts3. If that fails, check if the gaming PC is on:
ping 192.168.1.132
apt install was interrupted mid-way (maybe you cancelled it), or another package manager process is running.dpkg --configure -a to fix interrupted installs.If there's a lock:
rm /var/lib/dpkg/lock-frontend then try again.Wait a moment first — sometimes it's just another process finishing.
-
1Read the error message literallyDon't just see red text and panic. Read it word by word. It usually says exactly what went wrong. "No such file or directory" is not vague — it means the path doesn't exist.
-
2Check status of the related service
systemctl status <servicename>— this shows you the last few log lines which almost always contain the specific cause. -
3Check the logs
journalctl -u servicename -n 50shows the last 50 log lines for a service. This is where the real details are. -
4Copy the error message and search itCopy the specific error text (without your IP/paths) and paste it into Google or ask here. Most errors have been seen and documented a thousand times.
Copy, Move, Delete
The file management commands. These are powerful and mostly have no undo — especially delete.
rm -rf /something deletes instantly, permanently, with no confirmation. There is no undo. Double-check your path before pressing Enter. A misplaced space can be catastrophic: rm -rf / opt (with a space) would start deleting the entire root filesystem.
cp config.conf config.conf.bak. Takes 2 seconds and has saved countless homelab setups.
Reading Logs
Logs are Linux's black box recorder. When something breaks, logs tell you exactly what happened. This is the most powerful troubleshooting skill you can build.
journalctl reads the systemd journal — the central log for all system services. Every service you've set up (sshfs-mounts, etc.) logs here.
grep to find specific keywords: journalctl -u sshfs-mounts | grep -i error. The -i flag makes it case-insensitive. This is how you find the actual error in 200 lines of log output.
Processes — ps & kill
Every program running on Linux is a process with an ID number. Sometimes you need to find a stuck process and stop it manually.
Proxmox — Shell vs. CT Shell
One of the most important things to keep straight: where are you running commands? The host shell and a container shell are completely different environments.
pct commands and manage the SSHFS service. Root on the whole machine.| CT ID | Hostname / Prompt | Service | IP |
|---|---|---|---|
| 100 | root@pihole | Pi-hole DNS | 192.168.1.201 |
| 101 | root@nextcloud | Nextcloud | 192.168.1.202 |
| 102 | root@navidrome | Navidrome music | 192.168.1.191 |
| 103 | root@minecraft-bedrock | MC Bedrock | 192.168.1.192 |
| 104 | root@npm-docker | NPM + Docker | 192.168.1.193 |
| 106 | root@games-site | Games website | 192.168.1.194 |
| 107 | root@dashboard | Home dashboard | 192.168.1.195 |
Proxmox — Container Commands
pct is the Proxmox Container Toolkit. Run these from the host shell (root@pve) — not from inside a CT.
Docker — The Mental Model
Docker is confusing at first because it has its own vocabulary. Get the mental model right and the commands become obvious.
linuxserver/nextcloud) and use it to create containers. One image, many containers.-p 3000:3000 means "host port 3000 → container port 3000". That's how your Open WebUI is reachable at :3000.docker compose up and everything starts.Container = meal you cooked
Volume = the plate (persists)
Port = the door to serve it through
Container = running CT
Volume = mounted storage
Port = port forward in NPM
Docker — Core Commands
These are the commands you'll use constantly. Run them from inside CT104 (your Docker CT) or wherever Docker is installed.
docker exec -it containername bash) means you can inspect its files, check its internal config, run commands inside it — just like SSH-ing into a CT. Essential for debugging.
Docker Compose
Running a single container with docker run works, but real apps need multiple containers working together. Docker Compose describes your whole stack in one file.
docker-compose.yml file. Each service is a container. You write the config once and then just run one command to start everything.
/opt/stacks/. So: /opt/stacks/jellyfin/docker-compose.yml, /opt/stacks/nextcloud/docker-compose.yml, etc. Then Portainer can find and manage them all through its "Stacks" interface.
Portainer — The GUI Layer
Portainer is what makes Docker manageable without memorizing commands. You mentioned it — it's exactly what the name implies: a port (gateway) into your Docker environment.
docker ps needed.docker logs -f but visual.docker exec -it bash but without typing it.This is exactly like how Proxmox's web UI handles 90% of your work, but sometimes you drop into the host shell for the detailed stuff.