Introduction
I had heard words like “Linux” and “Ubuntu” over the years and basically glazed over. I thought “Only super geeks and people who are really into computers know that stuff and I am not one of those people.” I remember seeing one of my last companies Software Engineers doing ”simple” CLI commands and thought the guy was writing code… I remember having to ping a System Test engineer on how to exit VIM… I was clueless and thought it was too much of an effort to learn. Then I started seeing more of it used around the office and gained an interest in what words like “sudo”, “xargs”, “touch”, and “cat” really meant…
I asked one of my co-workers how I could get Linux to work on my computer, and he started talking about dual booting. Again, I glazed over and continued my day, still clueless.
Then COVID hit, I was working from home for I dont even remember how many months. I started going through COMPTIA material I had obtained through a friend and doing some online training course. Slowly learning more about computers with A+, and then how networks really work with Network+. I relished in my recent flood of knowledge, “How did I not learn this stuff sooner!?” I became fascinated with it all. Before this I basically know I could change my computers IP from dynamic to static so that I could interface with certain systems, but knew that was about it.
First Contact
I bought a Raspberry Pi 4 and followed the simple walk-through of installing RetroPie so I could play SNES and NES games with all the time I had on my hands. I quickly figured out that flashing the SD card with RetroPie was the same process as flashing it with a Ubuntu ISO… Things were starting to click, but I still hadn’t even gotten my hands dirty in the command line.
I told my buddy about my revelation and he sent me a free Linux “Zero to Hero” course on YouTube. I got Ubuntu up and running and started my Linux journey.
I started showing my wife the “magic” that I was doing with each of the practical exercises. Making 100 unique directories with a single command, I exclaimed “It would take you ten minutes to do this on Windows!” Embarrassing in retrospect, but it was a stepping stone. I still had no idea how I could use these skills practically…
Some of the commands I learned during this phase were
- cd
- ls
- pwd
- cp
- mv
- rm
- find
- touch
- mkdir
- echo
- cat
- man
- ping
- arp
- ifconfig
Obi-Wan Kenobi

I dabbled in the Command Line from time to time, and soon enough, my Raspberry Pi became my gateway to the Kingdom of Hyrule. I transitioned back to the office and start interfacing with people in real life again, one of the Engineers was leaving a 5G Project and I had a reputation for knowing 5G pretty well so the Engineering Lead brought me on to backfill the soon departing engineer.
I started using Network Testing tools we had in the lab that emulated 5G networks and 5G handsets. The handover notes that were left for me to follow were pretty bare bones, but they established exactly what I needed to do to start and stop these systems (which included a 5G Core on a bare metal server and a gNB/SDR that I could SSH into). Quickly, I reached the limit of my expertise and found out I couldn’t really do much else besides starting and stopping these machines.
Enter Mentor Mike.
Mike started asking me to do things beyond my skill set at the time. But like any good mentor, he would step away from his tasks, and he would show me how to interact with the matrix. “Here, change the default configuration with ‘ln -s’.”, “Use VIM to edit the config files.”, “Collect logs from this interface using ‘tcpdump’.”.
I was slowly learning, but it piqued my interest. I was using the command line every day to do different things and Mike was always around to answer my questions. This was a turning point in my career, and am lucky to have had someone with passion and patience to guide me.
- ssh
- scp
- tcpdump
- grep
- ln
- ip addr add
- tail -f
- vim
- ps aux
- kill
- iperf
- top
- head
- more
- less
- df -h
- du
- manipulating json configs
Florida Man
Fortunately and unfortunately, I decided to leave that job and pursue other endeavors. It was a tough decision since I enjoyed the work I was doing, but the company seemed to be heading in a less-than-favorable direction. I moved my family back to Florida and began working in a similar line of work, but not doing the same kind of work. I got the itch to do more of the work I was doing with 5G networks and using Linux as the medium for that.
I decided to just keep my chops up by playing around with other distributions of Linux to see what all the fuss was about. Arch Linux, Debian, NixOS, etc. I began dual booting laptops with distros, making virtual machines, and unintentionally breaking and then learning how to fix computers. I decided to start installing distros without the User Interface and reading more material on command line usage (LPIC material is a great resource).
I purchased a bladeRF SDR and realized I could only get so far with that hardware and using open-source software to emulate cellular networks. Open-source 5G networks were only supporting UHD RF Drivers and USRPs cost too much money for me to justify buying one for myself, at the time. I asked around my office if we had any extra units I could get my hands on to play around with and support some of the tasks I had. To my surprise, there was a brand new B210 that hadn’t even been assembled yet. It was dropped off at my office and I got to work putting together the board in the enclosure and installing the GPSDO module.
It was time to get to work…
- chmod
- lsusb
- lspci
- lsblk
- env
- set
- netstat
- nmcli
- dmesg
- uname
- compgen
- lshw
- lsmod
- systemctl
- traceroute
- pacman
- useradd
- usermod
- passwd
- groups
- mount
- umount
Do or do not, there is no try
I was attempting to learn Python to create some interesting 5G tools when I came across a GitHub page titled “Awesome 5G“. I started going through the list and seeing if I could use any of the projects for my own interest or to aid with my tasks at work. I came across Open5GS and srsRAN. The process seemed semi straight forward, I mean the install instructions are just copy and paste… or so I thought.
Sure, installing everything on Ubuntu was easy enough, and I dont know why I didn’t just stop there. Everything seemed to work, but I was having fun with Arch Linux so I decided to give that a whirl. It didn’t take long to figure out that not every distro is the same.
There were also some other learning curves in the process. Learning how to use a new SDR and the UHD driver install, MongoDB, node-js, running into build errors, changing the code before you run cmake and make to make changes to hard-coded parameters, etc. The best part of running into issues, is figuring them out, and believe it or not. You can pretty much find the answer to anything on internet, or just ask the questions you need answered. StackOverflow and GitHub discussions are great resources. The SDR community seems a little more old fashioned and is still something I am learning to navigate, but just dig deep enough and you might find what you’re looking for.
I spent a lot of time configuring my network properly to establish a PDU Session and connect my test phone to an end-to-end 5G data session. Then I figured, why not set the 5GC up on a remote server, srsRAN on another computer and connect them over a VPN!? That was another learning curve. Then get a data session to the phone with that VPN in place? Then why not change the VPN I’m using?
Maybe I’m a glutton for punishment, but I thoroughly enjoy figuring out things I do not know… As long as they interest me, I’m not out here trying to learn calculus. When I get to a point where I figure out the problem and everything is running the way it should, I start to think, “What could I change or do differently ?”
Right now I’m trying to figure out how to use docker with these programs and the advantages that has. I’ve got a list of other projects and configurations I am going to work through. Kubernetes, AWS, Spreading the 5GC across multiple VMs, and so on.
I also have a list of other projects and other software that I am learning to use or would like to know more about how they can help develop my skillset. Build my own Linux Kernel from scratch (https://www.linuxfromscratch.org/), node-red, SCAT, Python (still on my list), AWS, Build an IP Meshnet Radio, just to name a few.
- Building from source
- ssl keys
- iptables
- git
- wget
- cmake
- make
- node-js
- curl
- NAT IPv4/6 forwarding
- ufw
- shell scripting
- npm
- debug and trace logging
Lessons Learned
I am by no means a command line or Linux expert. But I know enough that I figured it wouldn’t hurt to start sharing and possibly mentoring others on the tricks of the trade. I began putting together a “basic Linux Command Line” course, which I recommend doing whether you plan on teaching or not. The process of doing this forced me to use commands and create scenarios I would not have done unless I was a system admin.
I started using my Macbook to ssh into my Linux machine or just use the VMs on my Mac to mess around with Linux. I saw all these developers and experts on YouTube who had custom shells, and I was tired of the same old Bash terminal. I decided on installing zsh and customizing it with oh-my-zsh and powerlevel10k themes. I would no longer not use the command line without syntax highlighting and auto suggestions. I’m sure there is a way to do it with Bash, but I haven’t even looked into it.

Learning the Linux File System has been very helpful as well. Knowing where to find config files, where to put programs, what files to edit, change or add environmental variables, configuring shared libraries, package manager source lists, the list goes on and on.


Leave a Reply