---
layout: post.html
title: Things I've Learned About Linux
date-written: 23 April 2024
---

If you are a Linux beginner, this blog post may help you get started. This is a resource that I wish I had when I was new to Linux.

## Things To Keep In Mind

### 1. Linux is not Windows

And it never will be. Don't attempt to run all of your Windows programs on Linux through Wine. It's not that simple.

### 2. Linux is FOSS (Free & Open Source Software)

Linux is proudly maintained by its own community. So are most of its applications. Installing proprietary software goes against Linux's morals. That doesn't mean you can't install proprietary software, but it may require extra steps.

### 3. Linux is full of opinions

There is no right answer when it comes to choosing Linux distributions, desktop environments, applications, etc. Anyone that claims otherwise is wrong. Use the software that works the best for you. Even if it is proprietary.

## Desktop Environments

Most Linux guides will start with having you choose a Linux distribution (distro for short). To me, what is more important is the desktop environment that you choose. This will determine how you actually use the distro. Here is a list of common desktop environments:

- GNOME; A unique workflow from Windows and macOS. It is designed to be consistent all around.
- KDE Plasma; Known for its customizability. Loved by tinkerers (including myself).
- XFCE; Lightweight and functional. It "just works".
- Cinnamon; Perhaps the most Windows-like desktop environment on this list.
- MATE; An active fork of older GNOME. Great for those that miss the simpler times.
- i3 / Sway; A tiling window manager. Recommended for those that don't like mice.

Some Linux distributions let you choose a desktop environment during the installation process. Others provide ISOs for each desktop environment that they support.

## Package Types

On Windows, there is .exe. On Linux, there are:

- apt packages (or .deb); Built for Debian, Ubuntu, etc.
- dnf packages (or .rpm); Built for Fedora, OpenSUSE, etc.
- pacman packages; Built for Arch, etc.
- flatpaks; Sandboxed packages. Great for proprietary software.
- snaps; Designed with servers in mind. Ubuntu comes with them.
- AppImages; Portable apps. Similar to macOS's applications.
- binaries; Executables in the wild. Handle with care.
- And likely more!

The package type determines how the package runs and how you manage it, so keep that in mind. This will make much more sense over time.

## Terminal Commands

Here are some important commands to help you maintain your system. Most of these will begin with "sudo" which will elevate your privelages to the root user. If you are logged in as the root user, you do not have to use sudo.

### apt

NOTE: This section assumes that you are using a distro that has the APT package manager. Other package managers may work similarly, but not always. Be sure to learn more about the package manager on your system before attempting to run commands.

These two work together to update the packages on your system:

$ sudo apt update
$ sudo apt upgrade

These commands allow you to search for a packages, install them, and remove them:

$ sudo apt search firefox
$ sudo apt install firefox
$ sudo apt remove firefox

When you install a package, the package manager will also install the dependencies that the package needs.

### chmod

If you have a file that needs the ability to be executed, run this command:

$ sudo chmod +x filepath

Replace "filepath" with the name of the path to the file (i.e. /home/username/script.sh).

### kill

$ kill firefox

This is one of the ways of force-quitting an application on Linux. It is similar to ending a task with the task manager on Windows.

## Other Useful Things

There are many things about Linux that make life convenient. Here are some examples.

### Easy Access to Configurations

Most native apps store their configurations in /home/username/.config/. You can easily transfer these files across computers. This can save you the hassle of reconfiguring your apps.

### ".desktop" Files

These are how applications launchers keep track of apps on your machine. Apps that are installed system-wide place desktop files in /usr/share/applications/. However, you can also make your own .desktop files and put them in /home/username/.local/share/applications/.

### Scripts

If you want to quickly run your own custom scripts in a terminal, open /home/username/.bashrc and add this line:

export PATH="${HOME}/.local/bin:${PATH}"

Then, in the terminal, run this:

$ source ~/.bashrc

Now, any script that you put in /home/username/.local/bin/ can be executed simply by typing the script's name in the terminal. For example, I have a "gvusb2" script that launches my GVUSB2 capture card driver.
