Ubuntu 20 slow and freezes often

I’ve used Ubuntu since version 8 or about 2009/2010ish. It used to be super fast. You used to be able to run it on ANYTHING. It was easy to use. I can’t take the damn slowness these days.

Update. Apparently Gnome is the culprit plus some other useless crap. Some say Kubuntu is faster. I don’t have time to dink around with this right now.

Here is a total list of all the things that still suck on ALL linux desktops in 2022 Major Linux problems on the desktop 2022 edition.

These days Ubuntu is SLOWER THAN MOLASSES IN THE WINTER IN SIBERIA. So slow I am HONESTLY thinking about switching back to Windows just so I can work. I rather spend my time working than investigating and typing utter bullshit cryptic commands into the command line.

nothing works meme
Ubuntu 20

Booting is extra slow, 3 to 5 minutes on an i7 with 16Gb ram. That is purely insane. I think this is a record honestly.

Opening any program is slower than hell, whether it is a browser or an IDE, Slow. Slow and slow.


Linux has a special trick called freeze…

And once this MOFO freezes, you can’t do shit. Nothing works.  No combination of keys on the keyboard will give any result. Your only option with Ubuntu/Linux desktop is to un-plug your PC.


I don’t feel like digging into any files to figure out WTF this pile of bile is doing. I am guessing Ubuntu/Mint (this all happens on another PC I am running mint on) TOTALLY SUCKS at memory management, as the freezes almost always happen when I am using a browser. Honestly I use my computer to get shit done not to screw around playing with the command line trying to get everything working so I can feel extra smart.

That shit is for kids. In adultland we need our PC to turn on and run programs and function and shit like that.

sarcastic kid meme

But the slowness and freezing really sucks and is pushing me to move back to Windows for web development and programming. Plus most of the image editing, video editing, etc. etc. etc. software for Linux desktop is not worth the shit. Hell most of the software for linux desktop is chock full o bugs.

I sent someone my resume I created with LibreOffice they sent me an email back saying they couldn’t open it. Yay, we still have that old ass issue in 2021???

homer simpson meme
My first encounter with an app using an ORM

Then you got the damn issues with print drivers and video drivers and drivers in general. In reality you are lucky if you get a PC to run Linux desktop properly. And don’t give me this shit about flavor xxx is better. They are all built from the same damn kernel, which is what most functionality is built on.

Right now I need my computer to work. I have too much to do to stop and investigate why Linux is not working and dig through logs and google and go to forum after forum, for 2 damn days.

Screw that and soon screw Linux desktop too.

I am over the sluggishness.

Over the super hard freezes.

Over the slow startups.

Over the slow everything and piss poor memory management.

It probably doesn’t even use all 8 cores either. And to think you used to be able to run Ubuntu on tiny devices.
I bet the Linux Fanboys are having some hyperventilating butthurt right now, gonna leave me lots of comments. They never read the article, then leave the dumbest comments.

I love you guys too and I want to help you heal that butthurt.

Web Development

WordPress : Update failed: The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.

So you got this error when trying to update one of your plugins or upload an image or something else?

I was confused by this message right after creating a new wordpress website and then migrating my content.

I did a bad, bad no, no while updating and lost the entire site, so I had to start again from a bakcup. Yes I have lost this entire site. Thank god for backups. You’d be amazed how quickly you learn when you have no other choice. LOL. I highly suggest jetpack backups. The cheapest jetpack package is all I have and it is AMAZING.

The migration seemed to work fine. All my articles appeared. All my images appeared. I felt I had achieved a great success.

borat great success meme
I had a great success. NOT!!!

Then I tried to write an article and add an image. I got a failed to upload image message. The odd thing is I could go to old articles and still upload images.

WTF is going on here
So why doesn’t this work?

I thought that was weird. Then I got a notice in my dashboard that a plugin needed updating. I tried to update it and got the error that lead you here.

I was lazy and ignored it a few days, thought it was just the plugin. Then another plugin needed updating. When I tried to update it I got the error again.

Update failed: The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.

I’ve done a lot of server admin work so I knew it was a simple permission issue. The only problem I had no idea what directories/folders needed permission changes and what they needed to be.

So I did a little research.

Doing Research!!!

And the reason the name of this article is so long? Because nothing I typed matched a damn thing and I figured someone would be having this issue soon. LOL

You will need to login to your server either with SSH or many hosting companies now have a way to open a terminal right in your user interface.

First you will need to update the user permissions with usermod. After this your files owner and group will be something like www-data that is what my server (Nginx) was named. Here is a link to how to find out what yours is named.

sudo usermod -aG www-data $USER

The above line adds your current user to your servers group (Apache/Nginx). More on that here on Stackexchange if you look for the above command in the answers.

If you need to know where your wordpress is installed type the following using find command again.

find -name wordpress

That command will output something like /var/www/html/…/…/…/wordpress  It finds anything with the name wordpress.

Next set the permissions on the files under your wordpress directory. Mine was located at /var/www/html/ so I used.

find /var/www/html/ -type f -exec chmod 664 {} \;

This uses the find Linux command and exec with chmod command. Basically this line of code is using the find command to find all the files (f) in the directories in or below /var/www/html/ and it applies chmod to them with permissions of 664. This means the owner and group have the read/write permissions but other users can only read. No one has the execute permissions not even root because this could cause security issues.

Next you need to change the directory permissions so that wordpress plugins can write to them and images can be uploaded etc. This will use the find command too, but slightly different syntax. This time use a d to find the directories in or below /var/www/html/ like so. Again your path may differ

find /var/www/html/ -type d -exec chmod 775 {} \;

I think I originally tried something more restrictive than 775 and something failed. Like something during a plugin update needs to have that permission level to work. 775 means the owner and groups can read/write and execute. I’ll be working on this again soon and see if I can get the permissions tighter and update this article.

That should make your wordpress work. Your site may be located in a directory different from /var/www/html/ you will need to look in your Server (nginx/apache) settings for the root directory or use the find -name wordpress command shown. That is where the permissions need changing. This all depends on who installed your wordpress, but I believe the above is default.

More about using exec with find

cool stuff meme
Cool stuff man.
Random Software Development

How to go back multiple directories in a linux terminal command line

Often when I am using the command line in a terminal on Linux I need to go back more than one directory. Usually you use the command

cd ..

Which takes you back one level in a directory. For example if you are in /var/www/http and you type cd .. you will be in directory /var/www/.

But what if you are super deep in the directory and need to get back to www directory. Say you are in /var/www/http/website/public and you want to get back to /var/www/http you can either type:
cd .. ( inside /var/www/http/website/ )
cd .. (inside /var/www/http/ now )

But you can type the following and get all the way back to the /www/http/ directory in one line
cd ../..
That line will take you back two directories. If you need to go further back just continue adding ../..

Software Development

Why doesn’t bash script recognize aliases

Here I won’t be doing much explaining, just listing links so people can read about this befuddling issue.

It often boggles my mind how differently you must write shell scripts vs the command line commands. It is often very inconsistent, I hate inconsistencies.

Basically Aliases within Linux shell are not recognized without some fancy hacky code, WOOHOO. So you will lose your mind if you are trying to set and use aliases in shell scripts.

You can set aliases all day long, but your scripts wont use them.

Yes you read that correctly. You can set aliases in your script, even right before you want to use it and Linux is like GTFO, I have no idea what that is. It even fails without a notice/error most times. What you can do is set a normal variable and use it in place of an alias though.

Say you had a script named  and it was located deep in a directory like /etc/directory/directory/directory/directory/do-echo “$yarnBin” > /etc/profile.d/
You could do the following in BASH

not_alias=/etc/directory/directory/directory/directory/do-this-thing.shalias not working inside bash shell script

bash not_alias

The above would execute the file. You can also permanently set aliases in your Shell script. This is handy even if you can’t use the aliases in your script directly, you can use them in the terminal command line later.

To permanently set aliases alias when not working inside bash shell script place them in your .bashrc file for the user you are logged in   This is usually located in /home/username/.bashrc  or you can put it in the user profile .profile file or other places.
How you do this varies by Linux shell.

Links to more info

Why doesn’t my Bash script recognize aliases?

Alias not working inside bash shell script

Creating permanent executable aliases

How to create permanent Linux Aliases

How to create a permanent Bash alias on Linux/Unix 

Software Development Web Development

How to switch users in Linux Bash Shell script and execute multiple commands as different user

If you search you will find different answers to this. You can do this in multiple ways, here I will talk about 2 ways, single command and multiple commands.

First the idea is to switch from say root user to a named user you created or was created for you on your Linux server to run commands as not the root user. The reason you want to do this is so that everything isn’t owned by the root user. Or you are installing something like PHP Composer which barfs on you if you run it as root user.

You will see some saying to use su others saying to use sudo (some bs options etc.) You will also see really wrong answers on Stack. I have no idea why you would use sudo over su, you can google that. But I do know that su switches users. Here is an article goes into more detail of su vs sudo and when you use both.

Single command syntax

So the first way is to run a single command directly inline. If you are the root user you simply use su The syntax to do so is as follows:

su - username "commandToExecute [command options and arguments]"

It has been my experience that the Double ” Quotes are required or else the shell gets confused. You may be able to use single quotes if you don’t use any variables within the quotes.

Multiple commands syntax

To more easily issue multiple commands or long commands you need to use Linux heredoc syntax.
Heredoc uses <

su - $username <<SHT
     cd $serverDir
     php $composerFile install

Like I said you can use any Delimiter you want. It is tradition to use all caps for the word, it makes it easier to spot. The ending word (EOF here) has to have no spaces or words before it. You can list any number of commands within that syntax and all will be executed by the user.

NOTE: After the ending EOF the shell returns the user to whatever user you were/are logged in as before the lines of code. If you are logged in as root, you are returned to root. Also when you issue the su command you are moved out of the directory you are in. That is why I used cd to move back to the directory I needed to be in.

More links

More info about changing users on stack here.

Here is a link to heredoc syntax explanation and examples

More information and examples about heredoc in bash

Bash how write large amounts of text to a file


Bash how write large amounts of text to a file

I searched and tried for days to find the answer to this. All I wanted to do was be able to basically create a file and write text to it exactly as I had entered it in a shell script. Every suggestion on the internet was fubar.

Note : to run these commands, put them in a folder like and use chmod 755 to make it executable then type bash or sh or /

I wanted to put something like this in a file from within a shell script.

Line one text
   Line two text
   line three text
   lets talk about some text

I tried everything. I googled for days and I finally found this article  where someone had basically the same need as me. Basically the syntax to put a bunch of text into a file from shell script is this.

if [ ! -e $testFile ]; then
    touch $testFile
outside_var="Some text from outside hell"

cat <<TEST  >> $testFile
Line one text
   Line two text
   line three text
NEWVAR = values
lets talk about some $NEWVAR
or not
but look at some outside text $outside_var

This uses <<HEREDOC syntax but it also redirects the input with >>. This is the oddest syntax I have ever seen so I can’t explain why it works. I would expect the redirect to be at the end of the closing TEST, but that doesn’t work. Bash heredocs are the weirdest thing other than if statements I’ve come across. Learning bash has been like traveling back in time to the 70’s or 80’s the syntax is beyond odd.

Also you will notice I tried defining a variable in the heredoc. That doesn’t work. You can copy and paste the code above and see what I mean. You don’t get errors but the variable doesn’t expand. I don’t know if it is supposed to or not. Here is a link to some info about heredoc. However what you can do is define variables outside the heredoc and use them within, see the $outside_var.

If you read the “info about heredoc” link above( in links below too) it shows this alternate syntax which works too, and makes more sense. I honestly don’t know how or why  the above ugly mess works.

if [ ! -e $testFile ]; then
    touch $testFile
outside_var="Some text from outside hell"

cat > $testFile <<TEST
Line one text
   Line two text
   line three text

   but look at some outside text $outside_var

This looks a little better to me than the other version. So there you have it that is how you write lots of text to a file.  I had to search for days to figure this out so I hope this saves at least one person some time.

Version 1 heredoc syntax
Version 2 heredoc syntax

Resources Software Development

How to make linux shell scripts wait for a command to finish before running another

I am writing this so when other people google how to do it, they have something to find to save them time.

For days I tried to figure out how to make sure a command finished before another was run. I couldn’t find any information anywhere. If you are like me you may be thinking ( or wondering if ) that the shell just zooms through the commands you put in a script file without waiting for each to finish. It seems like this because everything is rushing by so quickly you can’t read it.

For days I was running scripts to install and configure my servers and it kept hanging so bad I couldn’t even ping the server.

I was running the following for example

sudo apt-get update
sudo apt-get dist-upgrade -y
sudo apt-get reboot

And since my server instances were hard freezing right up, I figured it must be zooming right on through causing an error.

Well come to find out after much research and someone on twitter finally confirmed to me that the shell automatically waits for each command to finish before executing the next. The shell doesn’t automatically run all commands encountered at the same time.

Now I must figure out what is actually locking my server instances up.

now you know
Resources Software Development

What does a dollar sign followed by a square bracket $[…] mean in bash?

I saw something similar to this in some code in one of my books
var=$[ $var1 - $var2 ]

I wanted to know what it did and why it was used. I’m a perfectionist with OCD.

Turns out it is deprecated from the BASH language.
Originally $[] was used to do math in Bash scripts to do Math known as arithmetic expansion.

So the new way in BASH is to use the following syntax.

var=$(( $var1 - $var2))

Basically what this syntax does is it allows you to do math more easily. Without the above syntax you have to escape certain characters like >< With the above syntax you can basically do math without escaping plus youcan use post-increment $var++, post-decrement $var– , logical and &&, logical or || bitwise math etc. It really helps you out.

Further links, resources and information

More info on stackexchange Same as the link above

Another good source of info about the (()) syntax as used in if and while statements is found in the book Linux Command Line and Shell Scripting Bible.  starting on page 325 If you don’t own the book I highly suggest it. I’ve found one errata so far and that is what this post is about.

More links and resources to BASH scripting

More links and linux resources

Software Development Web Development

Linux bash scripting command substitution aka $(command)

Linux has this syntax that looks like so:

This is called command substitution. This allows you to get information about the execution of the command instead of having it it directed to STDOUT aka the terminal screen as usual.

That is very useful actually because you can run a command and store the output in a variable and use it anywhere you want later.

A simple example you can easily play with:

DIR_LISTINGS=$(ls -al)

This is so simple you don’t even have to add it to a script you can run it straight in your terminal in any directory you user owns.

More information can be found in this excellent book Linux command line and shell scripting bible page 277

More info about command substitution.

Bash manual reference.

Resources Software Development

Debian Ubuntu Linux debconf resources and information

The debconf programmers tutorial – excellent tutorial on what debconf is and how to use it.

debconf documentation

Using debconf to configure a system – article about using debconf, gives a little more explanation of what it is.

Installing MySQL with debconf – good article