From a secondary site of mine => https://learn-git.blog/2020/09/17/how-to-read-git-branches/
If you ask vague questions 👉🏻 you’ll get vague answers.
The opposite is also true:
Ask razor sharp questions 👉🏻 you’ll get razor sharp answers.
Specificity and Clarity are Super Powers 💪🏼💪🏼
Possible Alternatives To CentOS
Here are some alternatives identical to CentOS: 100% binary clones of Red Hat
Infograph Showing Where CentOS Stream Will “Sit”
CentOS Stream will be a rolling release operating system, similar to Arch Linux.
Therefore, it will NOT have version numbers and will site between Fedora and Red Hat. For contrast, CentOS sat AFTER every Red Hat release.
Stated another way:
- CentOS was downstream to Red Hat: Fedora > Redhat > CentOS
- CentOS Stream will be upstream to Red Hat: Fedora > CentOS Stream > Redhat
CentOS 7 and 8 End Of Life
CentOS 7 => June 30, 2024
CentOS 8 => December 31, 2021
Here I’m going to show you how to easily connect to your Raspberry Pi over the network from your Windows 10 machine.
This is going to be accomplished with the Remote Desktop Protocol (RDP).
This will allow you to quickly and conveniently access the Raspberry Pi’s graphical desktop without having to disconnect and move any of your cables (USB, HDMI, etc.) around.
A real pain in the butt!
Then you can easily experiment and test all of the open source software that the Raspberry Pi platform has to offer:
Here are a few quick examples:
Opensource Alternative to Microsoft Office
2.) Programming In Python For Beginners
Any Linux platform is going to come with amazing programming IDEs for dozens of popular programming languages: C, C++, Ruby, Python, Perl, you name it!
Raspberry Pi has one in particular for Python beginners.
Thonny Python IDE (to name just one of dozens)
3.) Raspberry Pi Documentation
If you want to go down the Raspberry Pi and/or Debian rabbit hole, you can access all of their References, Guides, and Help files:
Raspberry Pi OS Commands
To get this RDP solution implemented, we will need to:
- Install the latest Raspberry Pi OS updates (as a Best Practice)
- Install the open source version of RDP onto your Raspberry Pi: Xrdp
sudo apt-get update #update list of available updates sudo apt-get upgrade #actually installs latest software versions sudo apt-get install xrdp #installs XRDP onto Raspberry Pi
“RDP” to your Raspberry Pi
From your Windows 10 machine, type mstsc into your search bar and select Remote Desktop Connection
Enter your Raspberry Pi’s IP Address and click Connect
Click Yes if you see the following warning:
Enter the username and password of a valid Raspberry Pi account.
The one you use to Putty with should work.
Then you will be presented with the Raspberry Pi’s graphical desktop:
HAVE FUN EXPLORING!!
Curated from the following website: https://pimylifeup.com/raspberry-pi-remote-desktop
If you don’t understand this fundamental concept I demonstrate:
Then nothing else in Git (or Github) will ever make sense.
Credit to original info-graphic ➡ https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F
If your goal is to learn Linux and all you have is a Windows 10 machine, this post is for you.
You have to enable a feature called Windows Subsystem for Linux (WSL).
As of writing this article, there is the new and improved WSL 2, but I will only cover WSL 1 in this post.
WSL 1 is simpler to enable, supported on more Windows 10 versions, and is perfect for getting you started with Linux ASAP.
Enable WSL 1 on Windows 10
Install Ubuntu for WSL
Microsoft’s WSL Store: https://aka.ms/wslstore
I performed a logrotate on a log file which performed the following transformation:
service.log => service.log.1
which is pretty straight forward, but here was the problem:
After logrotate did its thing, logs were being written to the archived log file service.log.1 and NOT service.log.
This of course defeats to whole purpose of logrotate, so to begin troubleshooting, I needed to answer this question:
What process (or processes) are keeping a handle on that file being logrotated?
So my first step was to figure out what command I could start with to answer my question.
After a quick google search and testing, I found fuser to be a great spring board.
I began my testing by using the common binary file /usr/sbin/sshd:
root@raspberrypi:~# fuser /usr/sbin/sshd /usr/sbin/sshd: 406e 776e 846e
Now, according to man 1 fuser, it:
outputs only the PIDs to stdout, everything else is sent to stderr.
Hence, the following will clean up the original output a bit:
root@raspberrypi:~# fuser /usr/sbin/sshd 2> /dev/null 406 776 846root@raspberrypi:~#
(No newline is printed at the end of the output so the prompt was returned back on the same line.)
Now, if we pipe the output to xargs, it will work and give use the information we want. But not in most user-friendly format:
root@raspberrypi:~# fuser /usr/sbin/sshd 2> /dev/null | xargs -n1 ps -p PID TTY TIME CMD 406 ? 00:00:00 sshd PID TTY TIME CMD 776 ? 00:00:00 sshd PID TTY TIME CMD 846 ? 00:00:00 sshd
Not too pretty.
Reason being, it ran a ps -p on EACH PID.
Instead, we want to run a single ps -p on ALL PIDs at once:
Here’s a way to run ps -p on ALL PIDS at once (-f added to ps command):
root@raspberrypi:~# ps -p $(fuser /usr/sbin/sshd 2> /dev/null | tr -s ' ' | sed -e 's/ /,/g' -e 's/^,//') -f UID PID PPID C STIME TTY TIME CMD root 406 1 0 22:30 ? 00:00:00 /usr/sbin/sshd -D root 776 406 0 22:31 ? 00:00:00 sshd: pi [priv] pi 846 776 0 22:31 ? 00:00:00 sshd: pi@pts/0
Let’s pause here and make a couple of quick observations:
- The end result is getting more useful
- But getting there (the code) is starting to outgrow the shell
- And, its not easy to re-run this code on ANY filename
If we “parameterize” the filename AND make it a script, the end result will look something like this:
root@raspberrypi:~/Documents# sh ./list_filehandles.sh /usr/sbin/sshd
Here is the source code for ./list_processhandles.sh:
#!/bin/sh echo "******************************************" echo "*" echo -n "* Parameter passed in: " echo $1 echo "*" echo "******************************************" export MYFILE=$1 ps -p $(fuser $MYFILE 2> /dev/null | tr -s ' ' | sed -e 's/ /,/g' -e 's/^,//') -f
Now we can fuser ANY file we want to investigate (30 second demo below):