Hello, I’m going to be getting a new computer soon and have thought about linux. Questions inside
With the new computer and the newer Microsoft Windows updates they have really jam packed their OS with bloat and spyware. That being said I have no idea what I’m doing with Linux, need help with where to start.? What are some general tips? I understand there’s a lot of prebuilt Linux distributions or something what are some first timer friendly ones? Really any help is appreciated because the biggest barrier to entry is the perceived difficulty of actually doing it.
As others have said, Linux Mint is probably the best distro for absolute beginners. You'll have several desktop environments to choose from (the software suite that gives you things like window frames, the taskbar, the application launcher...). I like KDE Plasma and Cinnamon - Plasma is a lot more customizable, but Cinnamon is more robust and (IMO) better suited for beginners.
You'll have to unlearn a lot of Windows habits.
:q! is very important, remember it.
You won't download application installers from the internet, you'll have to either use the system's own package manager in the terminal (APT for Mint), a GUI front-end, or Flatpak.
You won't be able to choose where software are installed.
There are no lettered drives. There is a single root filesystem (equivalent to C:\ on Windows), and every other partition has to be mounted somewhere within that filesystem. Most graphical file manager applications take care of that automatically.
Updates are very important. Fortunately they are much less of a pain in the ass. Graphical package manager apps usually offer automatic reminders, or you can use the terminal to update manually.
The terminal is much more important compared to Windows, and you should learn basic things like navigating the filesystem, handling files and directories, how to use sudo (eq. run as admin), how to manage running processes (top, kill/pkill/killall), and how to use the package manager.
Use manuals and the man command. The Arch Wiki is an invaluable tool for every distribution.
Ask your questions. There will be dickheads, but most people will be happy to help.
I swear to God this is my biggest gripe with Linux, not being able to choose where stuff gets installed. Like yeah cool I want to have the OS on a SSD but that doesn't mean I also want my packages to go to it too, the HDD is for that
Usually each distro decides which packages go in / and which in /usr based on how critical, more or less, a package is to the system. It's often not very easy to configure these choices because it affects other distro decisions, including filesystem structure and paths, and boot sequence. Beware that "just the OS" on a typical distribution is usually a lot less functionality than you get with "just" Windows NT.
There's also /usr/local for packages you install on your own, apart from the distro package manager, and /opt, for closed source binary only packages or for anything else that doesn't want to conform to the bin, lib, include, share schema.
What are you trying to separate from the OS files? If it's just personal documents and stuff like that, I don't see why you can't just keep those in your home directory. Or are you saying you want your installed programs separate from the Linux kernel? Then you can just put the boot partition on one drive and have the root partition on the other (including home). I guess I'm just a little confused as to what it is you're trying to separate here. What do you mean when you say "separate from the OS"?
@Ozzy@rtxn I just thought of this, could one, create symbolic links that point to /lib (for ex.) to "repoint" the directory a package gets installed to?
Not sure if this would work, but was curious if someone's attempted it before.
Yeah I was thinking the same thing too, technically if we would recreate the file structure on the second drive, move everything there and set up soft links to those folders instead it might work? I need to try it out in a vm
Some directories can be moved, but you risk messing up your boot process if /lib, /etc, /bin, /sbin, and /dev are not on your root partition. Having /usr on a separate partition is sort-of possible, but even on Gentoo that's an uncommon configuration, and I'd expect less flexible distros not to allow it at all. /var, /opt, /root, and /home can be wherever, though.
It may be possible to put only selected files in your /lib and so on, and then mount another partition on a different drive on top of the minimal one late in the boot process, or even to stopgap things with a carefully-designed initramfs, but I think you'd be looking at some trial and error (and make it more difficult to update basic system packages).
Also, defining what is "just the OS" on Linux is not as easy as you may think. The smallest possible configuration that will get you a running system is a Linux kernel + busybox (a set of cut-down system tools that includes a simple init system, a shell, and a basic device manager). Most of what your distro packages is not part of the OS, strictly speaking—it's optional add-ons that the people making the distro think most users will find useful.
@Ozzy Exactly what I was thinking. Kind of a PiTA if everyone needed to do that, but maybe an excuse to throw up an open-source script on github for it.
I am more concerned about the life of the SSD than it filling up. I'd like to minimize the amounts of write operations and since I have a perfectly capable HDD that doesn't suffer from such a thing I want to offload all of that work.
Also thanks for mentioning mounting, completely forgot about that and it might actually be easier to do
I wouldn't worry too much about SSD wear. It's not nearly as big an issue for PCs, and wear balancing can stretch that ~10000-write lifetime to many years, especially if most of the SSD is empty. I bought my oldest SSD around 2015 and it still works perfectly. SMART barely reports any errors.
If you want frequently written files to be on the HDD, start with /var, /run, and ~/.cache. Those files are likely far bigger contributors to wear than anything inside /usr.