Learning the Linux command line is not strictly necessary — but I found it changed how I think about computing. After decades on MS-DOS and Windows, I was already comfortable with Microsoft's command line. Switching to Linux, I expected a straightforward translation. What I got was something more useful: a system with a coherent underlying logic that Windows never quite had. Along the way, the skills transferred further than I anticipated — to macOS, to remote servers, to any UNIX-based environment I encountered. This post is what I wish someone had handed me at the start.
Note: This article is written for users with experience in MS-DOS or the Windows command line. If you have no command line experience at all, or if you are coming from macOS, the links at the end of this article will point you to better starting points.
The first hurdle was straightforward: learning the commands. Many have Windows equivalents; plenty do not. But the commands were only the surface. What took longer to appreciate was that Linux works from a different set of assumptions — about where files live, how permissions work, how storage is organised. None of it is difficult, but it does require unlearning some Windows habits.
Looking back, the things that tripped me up most were predictable: some syntax differences, a filesystem that looked nothing like C:\, and a permissions model that works different than what I was used to in Windows. The sections below cover each of these in turn — not as an exhaustive reference, but as the things I actually had to adjust to.
The most immediate difference is the commands themselves. Some are close enough to guess (cd and mkdir); others are entirely new. DataEngineerJourney.com offers a useful translation table comparing Windows, Linux, and macOS commands — worth keeping open during the first few weeks. For a full Linux command reference, see: linuxconfig.org/linux-commands.
Beyond the commands themselves, the syntax works differently in four ways that caught me out early:
rmdir /? becomes rmdir --help in Linux.ls works; LS does not. Windows treats DIR and dir as identical — Linux treats them as being entirely different./home/user; Windows uses C:\Users\user. The direction of the slash is easy to get wrong by habit.fu bar, you type ls fu\ bar — the backslash signals that the space is part of the name, not a separator between arguments. Note that using quotes will also work, just it does in WIndows: ls "fu bar"Note: Linux allows you to create files and folders with special characters in their names. Being able to do something, does not make it a good idea. Simple names cause fewer problems.
Both Linux and Windows support * and ? for pattern matching, but Linux goes further. A pattern like file[1-3].txt matches file1.txt, file2.txt, and file3.txt — without needing a separate loop or script. Once you start using this regularly, going back feels limiting.
For a practical overview: Wildcards in the Linux terminal on HowToGeek.
What Windows calls a folder, Linux calls a directory. Same thing, different word — though in Linux, the word matters more, because directories are everywhere. The filesystem is not just a place to store documents. System configuration, hardware devices, running processes: all of these are accessible as files in directories. It sounds odd at first. In practice, it makes the system far more transparent and flexible than Windows ever was.
This beginner-friendly overview of the Linux directory structure is highly recommended: LinuxHandbook.com.
This was one of the more disorienting early adjustments. Linux has no C:\, no D:\. Instead, all storage — internal drives, USB sticks, optical discs — is attached at mount points within a single directory tree. A USB drive might appear at /media/usb; a CD at /media/cdrom. The exact location depends on what distribution you use. Once I stopped looking for drive letters and started navigating the tree, it all made perfect sense: everything is neatly in one place.
In Linux, file extensions are informational, not functional. A file does not execute because it ends in .exe — it executes because it has been granted execute permission. Linux identifies file types by content, and controls what can run through a permissions model applied to every file and directory.
The chmod command manages these permissions. For example, chmod a+x fubar grants all users permission to execute the fubar file. Hidden files work differently too: any file whose name begins with a dot — for example .bashrc — is hidden by default, with no separate attribute required.
For more detail: chmod explanation and the related chown explanation.
Most of this is also accessible from the graphical desktop. In KDE Plasma's Dolphin file manager, you can rename a folder to add a leading dot, or right-click any file, choose Properties, and edit its permissions directly.
Coming from Windows, software installation meant downloading an installer and running it. Linux uses package managers — tools that install, update, and remove software from curated repositories, resolving dependencies automatically. The most common ones for beginners:
apt — Debian and Ubuntu based distributionssnap — Ubuntudnf — Red Hat, Fedora, and related distributionsyast — openSUSEflatpak — available on most beginner-friendly distributionsAs a Kubuntu user, I find that I consistently prefer Flatpak for its simplicity, more up-to-date software versions, and improved security. If software is not available as a Flatpak, I try to find it via apt. Ubuntu based distributions also include snap, but I prefer the greater transparency, better performance, and stronger security of Flatpak. Still, if you want to set up your own server, snap may be the thing for you.
Some newcomers may think that installation via the graphical tools comes with disadvantages. This is not the case — they achieve the same result.
Windows has administrator accounts and UAC prompts. Linux has the root account — and sudo command. Rather than logging in as root directly, the standard approach is to prefix commands with sudo (SuperUser DO). This executes a single command with elevated privileges, then immediately returns to your normal account. The practical effect is that you stay in a safe context by default, and elevated privileges are only used upon your explicit request. This limits the damage from a moment of inattention.
For example, sudo touch /etc/fu creates a file called fu in the protected /etc directory. The moment the command completes, you are back to your normal user account. Read more: sudo explanation.
As on Windows, the graphical desktop prompts for your password automatically whenever an action requires elevated privileges. You rarely need to think about this in normal use.
The Linux command line has a reputation for being difficult that it does not entirely deserve. The adjustment is real — but it is front-loaded. The syntax, the filesystem layout, the permissions model: these take some getting used to, but quickly become second nature. After that, the shell starts to feel less like a workaround and more like the most direct way to interact with the system.
The broader benefit, which I did not fully anticipate, is portability. The same skills apply on macOS, on remote servers, on any UNIX-based system. This includes most of the infrastructure on the Internet.
There is no pressure to start. The graphical desktop is capable and comfortable. The command line is there when you want it — and the investment, when you make it, tends to pay back more than expected.
Comment and discuss this article...
For beginners with no prior command line experience:
For macOS terminal users:
References: