I’m currently doing so much Bash scripting that I always end up googling the stuff I should know by now so it’s time for me to write it all down once and for all.
Looping through a text file
Sometimes you build up a list that you want to process, let’s say you want to wget a few URLs.
for read line; do
wget "${line}"
done < ./urls.txt
It’s obviously a good idea to validate inputs but for the sake of this post it’s not necessary.
Redirecting STDERR
Redirecting to a file and just redirecting to STDOUT can be done two ways. I always forget the syntax so it’s always good to be reminded of it.
# STDERR to STDOUT
curl "${URL}" 2>&1
# STDERR and STDOUT to file
curl "${URL}" &> ./out.log
EOF syntax
In case you want to forward a multi-line string to a variable you can invoke cat with the EOF syntax:
cat <<EOF
Hello World!
Why So Serious?
EOF
The syntax can actually be a bit tricky since you define on the first line the keyword that will end the multi-line string, in this case EOF.
Mounting a RAM disk
RAM disks are quick and ideal if you need a fast scratch disk, they can be mounted to any folders just like any other kind of device:
mkdir /mnt/ram
mount -t tmpfs tmpfs /mnt/ram -o size=4096M
You can now read and write on your RAM disk through /mnt/ram
.
SSH tunnel
When you want to access services that are not available outside of a network you can open an SSH tunnel, which is like a VPN but not totally.
ssh -L 13306:127.0.0.1:3306 user@example.com
Here we bind the local port 13306 to the remote port 3306 through our localhost, we can then access a remote MySQL server through the SSH folder since there’s not good reason to have a MySQL server open to access on the internet.
Let’s manage ou MySQL server now:
mysql -h 127.0.0.1 -P 13306
Keep in mind that even though you can use this SSH command to proxy your network traffic, you will most certainly not achieve better performances than a standard VPN or OpenVPN setup.