My question was somewhat simple: DOS vs. Linux and basically why is DOS easy to navigate while Linux seems to have an endless (and confusing) number of command options.
This is because DOS is simple, and Linux distributions complex.
One big difference is due to privilege separation. DOS has none, Linux has full user-group model
and independent capabilities models.
Another is device support. DOS supports parallel and serial port, floppy drives, hard drives, and a NUL: device (IIRC), but Linux supports a lot of different devices, down to GPIO pins if your computer or device has those.
Third is the kernel configurability and interfaces, i.e. the
/proc and
/sys pseudo-filesystems providing direct access to the kernel internals.
For example, in DOS, you cannot know what TSR (terminate-stay-resident) programs are currently running. In Linux, we have the
/proc/PID/ pseudo-directories exposing every one, including kernel threads doing userspace tasks.
The comparison is therefore not very fair, because Linux-kerneled operating systems are so much
more than DOS ever was. But that is the core reason for the huge difference in complexity as well. We'd have to strip most of what is Linux to get down to the simplicity DOS was. So, why don't we? Because those "added" features are what makes Linux useful. It is often not easy to see that, because those features are used internally by the utilities we do use.
Story time:
When I developed a self-replicating USB stick that was used to measure high-performance computing nodes – run and time specific gromacs, vasp, and dalton simulations compiled as static x86-64 binaries with generic optimization –, I started with a very DOS-like environment. Basically, all I had were GNU coreutils:
cat chgrp chmod chown cp date dd df dir echo false ln ls mkdir mknod mktemp mv pwd readlink rm rmdir sleep stty sync touch true uname vdir [ arch b2sum base32 base64 basename chcon cksum comm csplit cut dircolors dirname du env expand expr factor fmt fold groups head hostid id install join link logname md5sum mkfifo nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx realpath runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sort split stat stdbuf sum tac tail tee test timeout tr truncate tsort tty unexpand uniq unlink users wc who whoami yes md5sum.textutils.
It had a custom kernel with an initial ramdisk (initrd) with all relevant drivers (mostly raid stuff, really) compiled as modules, but not even an init system.
(This was just before systemd. I'm not even sure you could do this with Debian anymore, or any other systemd-based system.)
I used the venerable SystemV init binary to provide a tty interface (loginless/passwordless bash shell) to be used to examine the USB stick, and to replicate the stick itself via a command if wanted, with
/etc/rc (if I recall correctly) running the actual measurement system, automatically shutting down (after some 8 hours of calculations) when done.
If that sort of thing interests you, I recommend taking a look at
Linux From Scratch. It is basically an online book by Gerard Beekmans, Matthew Burgess, Bruce Dubbs, and others, for how to build a Linux system directly from sources. Not only is it very informative and teaches one a lot about how the userspace part of the operating system (as opposed to the kernel) is put together. The environment you have at the end of the LFS book is very DOS-like.
Which shell has push/pop rather than the usual pushd/popd?
Anyone who has
alias push=pushd alias pop=popdin their profile? After all, you yourself have something like
alias l='ls -laF --color=auto'don't you?
Me, I even have
alias dir='ls -laF --color=auto' myself. Some habits die hard, let's not be too judgy!