Command-line Interface Articles

How to delete Docker images

Still plagued by my undersized root / partition, I’ve had to learn a thing or two about freeing up disk space. Recently, after a string of adventures with containers, I came to realize that Docker stores it’s images in the root partition, by default at least. To remove the images […]

Linux distro conditionals in shell script

It’s happening again. I’ve grown a bit tired of Debian, and have started to long for all the bleeding edge glory that is Arch. As this is a semi-frequent occurrence in my life, I’ve gotten pretty good at juggling distributions within my shell scripts, specifically in my dotfiles. Since each […]

How to connect to Wi-Fi from the command-line on Debian

Recently I decided to try to eliminate some unnecessary wires from my home network. One of the offending items was our home server that was hard wired to one of our mesh network routers. The original thought was that by having the server wired, we’d have a more reliable connected […]

Identifying large packages installed on Debian

Last week I talked about my quick fix to freeing up disk space on the root / partition of my Debian system. I also talked about potentially resizing my partitions at some point to help stave off the issue of root / filling up so quickly. Since the system is […]

Free up disk space on Debian by cleaning your apt cache

The other day one of my Debian systems locked up, due to the root / partition being filled up. Kind of a “same problem, different distro” scenario as a few years back I ran into the same dilemma on Arch Linux At some point, I’ll probably bite the bullet and […]

Command not found csc on Debian

I recently inherited a .NET application, written in C#. I know little to nothing about any of the aforementioned, but I do know how to use a web search and/or AI chat bot to figure things out. That being said, I installed Mono locally, as one does when they are […]

Repository 'Debian bookworm' changed its 'non-free component' value from 'non-free' to 'non-free non-free-firmware'

While not nearly as frequent as the weirdness I used to experience with Arch Linux, Debian has it’s fair share of unique problems to solve. This week’s cropped up while running an apt update before running an apt upgrade. Fortunately, most of the stuff I run into on Debian is […]

Unzipping multiple files from the command-line

Ran into an issue recently where I attempting to unzip a directory of files, but the “Extract” and “Extract to” options stopped showing up in the GNOME Files app. Before realizing that the issue was due to there being a non-ZIP archive in the directory that I had selected, I […]

Check cluster size of FAT32 disk in Linux

After venturing into retro gaming by way of an Anbernic RG35XX and a PowKiddy v90, I decided it was time to dust off my old Nintendo 3DS XL and get it a bit more battle ready to do some retro gaming. Part of the spring cleaning was to upgrade the […]

Parsing arguments in shell script

I write a good amount of shell scripts, but I tend to use arguments pretty sparingly. Because of this, my implementation to handle said arguments tends to be pretty weak. Some good examples are the arguments needing to be passed in a specific order and a lack of using long […]

Removing unneeded Firefox ESR language packs on Debian

I went to run an apt upgrade today and came to realize that I had over 60 language packs for Firefox ESR installed. Seems somewhere along the way I accidentally installed these language packs, or perhaps installed the meta package firefox-esr-l10n-all that pulls in every single language pack that’s available. […]

Wait for open port before running command

There comes a time in every software engineer’s life, when they need to run a command, but only after a port has been opened by a completely separate process. Sure, you could sit around and wait for the port to open up before running your command, but what’s the fun […]

Enabling and disabling unattended upgrades on Debian and Ubuntu

The unattended-upgrades package on Debian is absolutely fantastic. It takes cares of the stable packages that can be installed safely automatically, leaving you with fewer manual upgrades that you have to deal with yourself. Sadly though, I ran into an issue recently where the unattended-upgrades script was running in the […]

Key is stored in legacy trusted.gpg keyring

One of the more noticeable things to come out of me switching from Arch Linux back over to Debian, is that I’m rarely running into any issues. Because I’m not running into any weirdness, it’s been at a detriment to my blog, as my time on Arch was a constant […]

Node.js REPL history

Node.js has included a persistent history with it’s REPL (real-eval-print loop) for quite some time now. It’s a fantastic quality of life feature, and it even supports reverse-i-search. The other day, I got to wondering, where the heck does this history even live? Turns out, it’s just living in a […]

Show hidden files with tree

The tree command is one of my favorites. As the name of the command suggests, it simply lists the contents of a directory in a tree-like format. Think of it like ls *, which outputs the contents of each directory, but instead of a flat list, the files are shown […]

Reinstalling packages on Debian and Ubuntu

My recent migration from Arch Linux to Debian (testing) has been an extremely smooth one, but not without it’s issues. A small issue I ran into early on was a problem with totem, the video app, crapping out. While I’m not sure exactly what the heck went wrong, the quick […]

Generating lowercase UUIDs with uuidgen on macOS

The implementation of uuidgen on Linux returns all lowercase letters by default. The implementation of uuidgen on macOS returns all uppercase letters by default. This triggers the hell out of me, by default. Usually when I approach consistency between macOS and Linux, both of which I use daily, I will […]

How to search for installable packages on Debian

The thing that I miss most of all since moving from Arch Linux back over to Debian is the Arch User Repository (AUR). Every package I ever needed was there, sometimes multiple times based on different forks that folks were maintaining. Even without the AUR, Debian has a massive number […]

Using multiple profiles with aws-cli

One of the best aspects of Amazon Web Services (AWS) is that a full featured command-line utility exists for it. If you’ve ever spent a decent amount of time in the AWS Console (their web interface) then you understand why this is a good thing. As you venture into better […]

How to use an SSH tunnel to forward ports

Security is important. Bastion hosts (or jump servers) are an easy way to wall off your private servers from the outside world. Improved security is always a good thing, but it isn’t always convenient. With a bastion host in place, you shouldn’t be able to connect directly to a private […]

Execute command in timed intervals

Running a command (script, program, et cetera) on a regularly timed interval can be accomplished a few different ways. One way, is to leverage the crontab utility, which schedules runs to run one or more times per day. While a fantastic utility, crontab can be a bit heavy at times, […]

How to run a command after changing directories in zsh

About once a year or so, I go through my dotfiles and do some clean up. Usually around spring time, but also, usually after I discover some new hotness that I had not known about that I want to leverage. This year, it’s both. Spring is nearly in the air, […]

Reattaching to a still attached GNU Screen session

While tmux is my daily driver for local terminal multiplexing, I still use GNU screen when I’m working on remote servers. The primary reason for this is to avoid nesting tmux sessions. I can use tmux locally, ssh to a remote server, start up a screen session and I’m off […]

Associative arrays in Bash

Arrays, both indexed and associative are a powerful and versatile data type, regardless of the language you’re utilizing them in. At one point in Bash’s history, pre-version 4.0, Bash only had indexed arrays. These indexed arrays were defined as such: # Initialize an array with values arr=("first" "second" "third") # […]