Ubuntu Technical

Ubuntu technical problems and solutions reference, a modern cookbook.

Tag Archives: shell script

Customized GPG

Gpg encryption is cool. It’s so cool, that I want to keep all my important files (that means back-up files) encrypted on my external storage.

Using gpg is fairly straight forward:

1) Generate a private key.

gpg --gen-key

After answering some standard questions, the key is ready.
Note: You better not forget the password you choose, or else your encrypted files are lost forever.

2) Check you key:

gpg --list-keys

This will display a list of all available keys.

3) Encrypt a file

gpg --encrypt --recipient 'key name' foo.txt

This will generate the encrypted file: foo.txt.gpg

4) Decrypt a file

gpg --output foo2.txt --decrypt foo.txt.gpg

foo2.txt file will be created.

So, until now I presented a quick guide to encrypt/decrypt a file. However, this wasn’t enough for me. I wanted to go a little further. I wanted to be able to encrypt folders as well, and the possibility to delete the original file, and keep only the encrypted one. So, I though I write my own function.
And so, tec was born.

In short tec stands for: tar, encrypt, clean. Long description: Tarballs and encrypts the TARGET using gpg (GnuPG) encrypton. Optionally it deletes the TARGET.

I have created a repository for my function on Gitorious, feel free to check the Projects page and download it if you like.

Just copy tec.sh into /usr/bin, and you’re good to go.

cd <download directory>
sudo cp tec.sh /usr/bin

For general help, type:

tec.sh --help

Basic usage:

# with delete option, to delete the original file, and keep the encrypted one
tec.sh -dr <key> <file>
# without delete option
tec.sh -r <key> <file>

The project is in it’s early phases. Currently it only encrypts. For decryption the standard gpg commands have to be used. I plan to maintain the function, and try to add as much functionality as I can.


Flattr this


Compress and Extract files with tar.gz

Or simply building a “tarball” as it is sometimes called. Even though this is a trivial task, I found myself quite often looking for the command, better yet for the options, because I tend to forget. So why not look for the command on my own blog.

Creating a tar archive

cd location_of_files_to_be_archived
tar cvzf name_of_archive.tar.gz *

Parameters explained:
– c – create
– v – verbose output
– z – –gzip, –gunzip, –ungzip filter the archive through gzip
– f – use the following file for archive

Note: The f option needs to be the last in the list of parameters. Whatever characters are following f, will be the name of the tarball.

Extract a tar archive

cd location_of_files_to_be_archived
tar xvzf name_of_archive.tar.gz *

Parameters explained:
– x – extract


Flattr this

Stop or start BOINC daemon after boot

I have installed BOINC client, to subscribe to some projects meant to discovery alien life or at least some new pulsars.
However, I have noticed that the client, in contrast to it’s Windows counterpart, didn’t have an option in Preferences for auto-start on system boot. Of course it was starting up automatically and that’s not good in my book. So I started digging a little bit, and came across the documentation page

In a nutshell, the “init” script is:


The following commands (with self-explanatory options) can be directly run on the script:

./etc/init.d/boinc-client start
./etc/init.d/boinc-client stop
./etc/init.d/boinc-client restart
./etc/init.d/boinc-client status

As I have now found out, in a Debian-based Linux distributions you use the update-rc.d command to turn a system service (daemon) on or off at boot time (I needed to use the -f force option to remove boinc-client, don’t know exactly why):

# tells the system to start the BOINC client as a daemon at boot time
sudo update-rc.d boinc-client defaults 98
# tells the system not to start the BOINC client at boot time
sudo update-rc.d -f boinc-client remove


Flattr this

Sync directories excluding file types

I have recently needed to find a solution to moving the content of a directory from one folder into another, but excluding certain file types. After digging through the documentation I have found the rsync command.
Short extract from it’s man pages:

Rsync is a fast and extraordinarily versatile file copying tool. It can copy locally, to/from another host over any remote shell, or to/from a remote rsync daemon. It offers a large number of options that control every aspect of its behavior and permit very flexible specification of the set of files to be copied. It is famous for its delta-transfer algorithm, which reduces the amount of data sent over the network by sending only the differences between the source files and the existing files in the destination. Rsync is widely used for backups and mirroring and as an improved copy command for everyday use.

So, here is the script to copy files from one place to another ignoring certain file types (in this example I exclude .avi files):

rsync /source/folder -av --exclude='*.avi' /destination/folder

The -v option is for verbose, so that we can see in the output what’s being synced.

Flattr this

Calling shell script from Unity Launcher

I have already written in the past a post regarding how to create a custom unity launcher.
Yesterday, I’ve come across an issue. I’ve downloaded Pentaho’s Data Integration tool Kettle, and the executable is a shell script. Meaning that it needs to be called from a terminal in order to run. Now, even though I’ve added the shell script into a Unity Launcher, the software didn’t start after pressing the icon in the dash.
So, I figured out that I need to create another shell script which calls the gnome-terminal and passes the call to the kettle shell script.
In order to achieve this, I used expect (install)

So, I’ve created a script called call_tool.sh:

#!/usr/bin/expect -f

# Get a Bash shell
spawn -noecho bash

# Wait for a prompt
expect "$ "

# Send the dir to kettle and then send the command for spoon.
send "cd /path to script\n"
send "./spoon.sh\n"

# Hand over control to the user

The \n character is needed for the enter.

After that I’ve made the script executable:

sudo chmod +x call_tool.sh

Then pointed my Unity launcher to call_tool.sh, and that’s it. It works.

Flattr this

%d bloggers like this: