This post was originally published on go2linux.org. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. When you have multiple operating systems installed, the GRUB bootloader shows a menu at startup. By default the ti…
This post was originally published on go2linux.org. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. SSH is one of those tools that works so well you only notice it when it breaks. When it does break, the error mess…
Originally published on go2linux.org in March 2007. Although I no longer own that domain, I am the original author. This version has been updated for 2026 and republished here on garron.me. Introduction If you have two servers, cross-backups are a smart safety net: if one fails, you can restore from…
Introduction This is an updated guide for running Apache 2.4 with Event MPM, PHP 8.3 via PHP-FPM, and MariaDB 11 on FreeBSD 14. All packages are installed via pkg, the binary package manager — no compiling from ports required. If you are looking for the older guide using FreeBSD 10 and PHP 5.6, it i…
WireGuard is a modern VPN protocol built into the Linux kernel since version 5.6. Compared to OpenVPN, it is significantly simpler to configure, faster, and has a much smaller attack surface (~4000 lines of code vs ~100,000 for OpenVPN). Prefer OpenVPN? See How to set up an OpenVPN server and client…
This post was originally published on go2linux.org on October 10, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction chgrp changes the group associated with a file or directory. Every file on Linux …
This post was originally published on go2linux.org on February 9, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction xrandr is the command-line interface to the X Resize and Rotate extension. It let…
This post was originally published on go2linux.org on January 4, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction The Bash history command lists your recent commands. Once you have found the one y…
This post was originally published on go2linux.org on August 10, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. The problem Linux file and directory names are case-sensitive. If you have a directory named My…
This post was originally published on go2linux.org on February 24, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction basename strips the directory path from a file name, and optionally removes a tr…
In 2012, I wrote an article on how to set up a VPN using OpenVPN. With so many companies offering VPN services nowadays, I thought it would be a good idea to run your own VPN service; however, WireGuard is a much better fit for this goal. WireGuard is a modern VPN protocol built into the Linux kerne…
Introduction GoAccess is an open-source real-time web log analyzer. It works directly in the terminal as an interactive ncurses dashboard, and can also generate self-contained HTML reports with charts. It supports Apache, Nginx, Caddy, Amazon S3, Elastic Load Balancing, and any server that writes st…
This post was originally published on go2linux.org on February 22, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction bc is a precision arithmetic calculator available on almost every Linux and Unix…
This post was originally published on go2linux.org on January 5, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction Many system commands open a text editor when needed — visudo, crontab -e, git comm…
This post was originally published on go2linux.org on February 11, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction In Linux, groups control what resources a user can access. When you add a user t…
This post was originally published on go2linux.org on July 29, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction chown changes the owner and/or group associated with a file or directory. Only root …
This post was originally published on go2linux.org on October 4, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction chage (change age) manages password aging information for user accounts. As a syst…
This post was originally published on go2linux.org on August 6, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction The at command schedules a command or script to run once at a specific time in the …
This post was originally published on go2linux.org on March 31, 2010. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction A for loop executes a block of commands repeatedly, once for each item in a list. I…
This post was originally published on go2linux.org on March 13, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction Both apt-get and aptitude are front-ends for the APT package management system on D…
This post was originally published on go2linux.org on March 20, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction The hostname is the name that identifies your machine on a network. On modern Linux…
This post was originally published on go2linux.org on February 7, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction When you compile software from source and run make install, the files get scatter…
I have been trying to host all my own services, from email to web servers, also Asterisk and lots of other examples, as written on my personal blog I also see some good points about hosting your own email server. If you want to host your own email server, Mailcow is one of the best options available…
diff compares two files line by line and shows you what is different between them. It is one of the most useful commands on Linux — you will reach for it every time you need to check what changed in a config file, review a patch, or verify that two directories are in sync. Syntax diff [options] file…
This post was originally published on go2linux.org on May 18, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. When you need to know how much space is used on your disks and how much is free, df (Disk Free) is…
This post was originally published on go2linux.org on May 1, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. When you need to know how much space a file or directory is using, du (Disk Usage) is the right too…
This post was originally published on go2linux.org on March 30, 2009. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Continuing with my review of performance tools, I will now introduce you to iotop, a top-like to…
This post was originally published on go2linux.org on August 6, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Almost every Linux user has used top to check how the system is doing — running processes, CPU u…
This post was originally published on go2linux.org on August 15, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. Introduction grep is a utility to look for specific strings in files, searching line by line. Y…
This post was originally published on go2linux.org on December 20, 2008. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. history is one of those commands I use every day. Once you learn a few tricks around it, you …
This post was originally published on go2linux.org on May 5, 2007. The domain is no longer mine, but I am the original author. I am republishing it here on garron.me with corrections and improvements. This command is related to head, but opposite — instead of displaying the beginning of a file, it d…
As mentioned in this post about garron.me coming back, this site is self-hosted again. I have been self-hosting my sites since 2008 with Go2Linux, back when it was Drupal running on a Linode VPS, through the years I have experimented with Varnish, Nginx and written posts about all of that. This time…
The site is back, after being offline for almost two years and going three years without new content. The site went down when I migrated servers, and because it was generated with Middleman, it was complicated to get it online again. Now, with the help of AI (more about this later), I was able to br…
Introduction Docker launched in 2011, but was founded in 2010 by Solomon Hykes, and was finally released to the public in 2013. Docker is an Open Source project, that allows running virtualized containers where complete applications run. It is like Virtual Machines, but, a lot lighter, because the K…
If you need to check the logs of a Docker compose created container, just go to the folder where the docker-compose.yml file is and run these commands. docker-compose ps That will have an output like this: Name Command State Ports ---------------------------------------------------------------------…
Introduction Just a small tip for me to remember when this happens again, as it was not easy to solve. Arch Linux error When trying to install something from AUR, after downloading it with git, I got this error. ==> Making package: caddy2 2.1.1-3 (Thu 09 Jul 2020 08:21:05 PM UTC) ==> Checking runtim…
Introduction You can log into Linux servers using passwords, or log in with no password, using ssh key, but there are times when it is not you who create the private/public key pair, or when you want to use a diferente key pair to log to another server. One key pair for one server and another for th…
Introduction Wallabag is an open source alternative for Pocket and similar services or tools, it is Open Source and you can run it on your server. You can read my Wallabag review if you like. Installation Preparing the server We will need to prepare the server first sudo apt update && sudo apt upgra…
Today while configuring my other blog to be hosted at vercel and moving it out from Apache, I had the need to create a redirect file from my htaccess file, so I needed first to print extract the file-names from a long string, the good thing was that the file-names were between a slash /. These are t…
Part of the maintenance tasks of a Linux system are repetitive, fortunately Linux offers you cronjobs. What are cronjobs? Cron jobs are repetitive tasks executed by the cron daemon, and a deamon is a program that runs all the time in a Linux system, so cron deamon takes care of these tasks and execu…
Linux as all Unix like operating systems are multi users, that means that multiple users can log into the system, actually multiple users can be logged at the same time, all of then using the computer resources. Users can also be asigned to groups, that gives Linux systems a lot of flexibility. If y…
Some years ago ArchLinux started to use systemd instead of init scripts, I like init scripts more, but you have to adapt. So, How to add a new service to be managed by systemd? We'll see just the basic options, systemd has its files at: /etc/systemd/system, so if you want your service to managed by …
Introduction Debian backports are according to its homepage Backports are packages taken from the next Debian release (called "testing"), adjusted and recompiled for usage on Debian stable. Because the package is also present in the next Debian release, you can easily upgrade your stable+backports s…
The problem I needed to install ruby 2.3.x actually, it was 2.3.3, I am trying to do it on Ubuntu 20.04, I have followed this guide, but it stops with this error. Last 10 log lines: installing rdoc: /home/user/.rbenv/versions/2.3.3/share/ri/2.3.0/system installing capi-docs: /home/user/.rbenv/versio…
If you are running Ubuntu you can install Zoom in two different ways Option number 1 Be sure you have your system up to date sudo apt update Install dependencies sudo apt install libglib2.0-0 libgstreamer-plugins-base0.10-0 libxcb-shape0 libxcb-shm0 libxcb-xfixes0 libxcb-randr0 libxcb-image0 libfont…
Pip is a tool to manage Python modules, it lets you find, install, updated and remove packages, just like apt does for Debian. Python Version Ubuntu 20.04 comes with python3 installed by default, and if you are starting a new project python3 is what you have to use, phthon2 can be installed, but it …
The latest version of Windows 10 at the time of this writing, is able to access files on Linux installed in WSL through Windows Explorer. There are two ways. From Linux Go to the folder you want to acces in Windows, and enter this command. explorer.exe . Fron Windows Explorer Open Windows Explorer a…
To work with Python projects, it is advisable to create virtual environment, that way each project can have its own modules, and even differente versions of modules and does not interfere with another one. We are going to use python3 and Ubuntu 20.04 for this tutorial. Install python venv sudo apt i…
How to install NodeJS on Ubuntu If you want to install NodeJS in a different version than the one that comes with your Ubuntu distribution, you may proceed this way. First thing, you need to install needed packages. apt-get install build-essential Now, choose one of the next lines, depending on the …
Installing ruby on Ubuntu 20.04 using rbenv is at the time of this writing the most recommenden method. First things first, update your computer. sudo apt update && sudo apt upgrade Then install dependencies sudo apt install zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite…