Archive for the ‘ Miscellaneous ’ Category

ten basic Linux commands

Top 10 basic Linux commands for beginners

1. id – display information about user.

id will print the user and group information of the given argument, if no argument is given, it will show the information of the currently logged in user.

$ id
uid=1000(daniel) gid=1000(daniel) groups=1000(daniel),4(adm),27(sudo)
$ id -u -n
$ id root
uid=0(root) gid=0(root) groups=0(root)
$ id sshd
uid=110(sshd) gid=65534(nogroup) groups=65534(nogroup)

2. ls – list files in a directory.

ls lists the contents of current directory if not arguments are given. It has probably one of the largest number of options compared to other Linux commands.

$ pwd            # our current working directory
$ ls             # content of current directory
demo.txt  mail  nfs  redhat  samba
$ ls -l          # long listing
total 20
-rw-rw-r-- 1 daniel daniel   21 Apr 15 01:04 demo.txt
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 mail
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 nfs
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 redhat
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 samba
$ ls -1         # list one file per line
$ ls -a        # show all, including ones starting with . (dot)
.  ..  demo.txt  .hidden  mail  nfs  redhat  samba
$ ls -al       # long listen plus show all 
total 32
drwxrwxr-x  6 daniel daniel 4096 Apr 15 01:04 .
drwxr-xr-x 18 daniel daniel 4096 Apr 15 01:06 ..
-rw-rw-r--  1 daniel daniel   21 Apr 15 01:04 demo.txt
-rw-rw-r--  1 daniel daniel   32 Apr 15 01:03 .hidden
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:04 mail
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:04 nfs
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:04 redhat
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:04 samba
#  ls --format=verbose    # same as ls -l
total 20
-rw-rw-r-- 1 daniel daniel   21 Apr 15 01:04 demo.txt
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 mail
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 nfs
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 redhat
drwxrwxr-x 2 daniel daniel 4096 Apr 15 01:04 samba
$ ls -F                  # classify: / for directory, * for executable, @ for symbolic link
demo-link@  demo.txt  mail/  nfs/  redhat/*  samba/

$ ls -ls /etc/h*         # sort by size, smallest first for all files starting with h in /etc/ directory
8 -rw-r--r-- 1 root root 4781 Mar 17  2016 /etc/hdparm.conf
4 -rw-r--r-- 1 root root   92 Oct 22  2015 /etc/host.conf
4 -rw-r--r-- 1 root root   12 Feb 18 01:21 /etc/hostname
4 -rw-r--r-- 1 root root  191 Feb 18 01:21 /etc/hosts
4 -rw-r--r-- 1 root root  411 Feb 18 01:29 /etc/hosts.allow
4 -rw-r--r-- 1 root root  711 Feb 18 01:29 /etc/hosts.deny

3. cat – concatenate files and print on the standard output.

cat conCATenates one or more files given as argument and prints those on the standard output (console).
If no file or ‘-‘ (dash) is given, it reads from standard input until EOF (Ctrl+D) is pressed and prints is to standard output.

$ ls -l linus         # ls to make sure file exists
-rw-rw-r-- 1 daniel daniel 403 Apr 15 01:20 linus

$ cat linus           # print content of file to stdout
Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.
This has been brewing since april, and is starting to get ready.
I'd like any feedback on things people like/dislike in minix,
as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).

$ cat -n linus       # show line numbers with -n
     1	Hello everybody out there using minix -
     3	I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones.
     4	This has been brewing since april, and is starting to get ready.
     5	I'd like any feedback on things people like/dislike in minix,
     6	as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).

$ cat          # read from stdin(keyboard) and print to stdout(screen), repeats after me until I press Ctr+D to end it.
from standard inpu
from standard inpu
pressing Ctr+D now
pressing Ctr+D now

$ cat << EOF > file-from-stdin       # Reads from keyboard until EOF is pressed and saves(redirects) the text to a file.
  I read this from stdin
  end of file

$ ls -l file-from-stdin               # printing content of file we created above.
-rw-rw-r-- 1 daniel daniel 35 Apr 15 01:22 file-from-stdin

$ cat file-from-stdin 
I read this from stdin
end of file

4. clear – clears the terminal screen.

clear is self-explanatory, it clears the terminal display and places your cursor at the top left corner. Similar to “cls” command in DOS/Windows/PowerShell.

$ clear

5. rm – removes one or more files.

 ls           # list of files/dirs in current directory
demo-link  demo.txt  file-from-stdin  linus  mail  myfile  nfs  redhat  samba

$ ls myfile    # file exists

$ rm myfile      # delete file

$ ls myfile      # we should get an error
ls: cannot access 'myfile': No such file or directory

$ rm -i linus    # prompt for confirmation before removing file
rm: remove regular file 'linus'? y

$ rm -v demo.txt   # add verbosity, explain what is being done.
removed 'demo.txt'

$ rm -d mail -v     # remove empty directory
removed directory 'mail'

$ rm redhat/         # try to delete directory with rm, should get an error
rm: cannot remove 'redhat/': Is a directory

$ rm -d redhat        # error again, not empty
rm: cannot remove 'redhat': Directory not empty

$ rm -r redhat/ -v     # use -r for recursive removal of directory and its contents.
removed 'redhat/version7'
removed 'redhat/version6'
removed directory 'redhat/'

Use rmdir to delete the named directory, not its contents. To completely wipe out a directory and its contents use ‘rm -r’.

6. mkdir – make or create one or more directories.

mkdir is used to create one or more directories under current directory if no directory argument is given. The user creating the directory must have the permission to create a directory under the specified directory.

$ whoami                  # regular user

$ mkdir /root/mydir       # trying to create directory under root user's home directory, should get permission error.
mkdir: cannot create directory ‘/root/mydir’: Permission denied

$ pwd                      # current working directory, my home directory

$ mkdir april-15           # create directory here
$ ls
april-15  demo-link  file-from-stdin  nfs

$ mkdir nfs -v             # can't overwrite an existing directory
mkdir: cannot create directory ‘nfs’: File exists
$ mkdir newdir/seconddir/thriddir    # can't create a series of directories without parent directories existing
mkdir: cannot create directory ‘newdir/seconddir/thriddir’: No such file or directory

$ mkdir -p newdir/seconddir/thriddir  # -p makes parent directories as well, solves above problem.

$ ls -R newdir/                       # recursive (-R) listing with ls shows all directories created.



7. mv – moves a file or directory to another location.

mv is most commonly used for renaming files and directories. You can specify more than two directory arguments,
it will move the all directory, except the last one to the last (destination) directory.

$ mv -v   # -v is for verbose, move file.
'' -> ''

$ ls run*                      # file has been renamed.

$ mv samba/ nfs/ redhat/ -v          # move first two directories to the last one
'samba/' -> 'redhat/samba'
'nfs/' -> 'redhat/nfs'

$ ls redhat/
nfs  samba      

8. cp – copy files and directories.

cp is used to copy files as well as directories, most commonly to take backups.

$ ls
april-15  demo  demo-link  demo.txt  file-from-stdin  hosts-backup  linus  mail  myfile  newdir  redhat

$ cp demo demo-new -v    # copying directory
cp: omitting directory 'demo'

$ cp -r demo demo-new -v    # recursive(-r) copy, with verbose(-v) mode.
'demo' -> 'demo-new/demo'
'demo/one' -> 'demo-new/demo/one'

$ cp -av redhat /tmp/      # archive, preserve the specified attributes
'redhat' -> '/tmp/redhat'
'redhat/nfs' -> '/tmp/redhat/nfs'
'redhat/samba' -> '/tmp/redhat/samba'
'redhat/newdir' -> '/tmp/redhat/newdir'
'redhat/newdir/seconddir' -> '/tmp/redhat/newdir/seconddir'
'redhat/newdir/seconddir/thriddir' -> '/tmp/redhat/newdir/seconddir/thriddir'

$ls -al /tmp/redhat/
total 20
drwxrwxr-x  5 daniel daniel 4096 Apr 15 01:55 .
drwxrwxrwt 13 root   root   4096 Apr 15 01:58 ..
drwxrwxr-x  3 daniel daniel 4096 Apr 15 01:55 newdir
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:04 nfs
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:51 samba

$ touch demo/one mail/one

$ cp demo/one mail/one        # overwrite file

$ cp -i demo/one mail/one     # prompt before overwriting a file
cp: overwrite 'mail/one'? y

$ cp -s demo-link  demo-link2  # copy as symbolic link

$ ls -l
lrwxrwxrwx  1 daniel daniel    8 Apr 15 01:51 demo-link -> demo.txt
lrwxrwxrwx  1 daniel daniel    9 Apr 15 02:02 demo-link2 -> demo-link
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:58 demo-new
$ cp demo-link demo-link3     # copies target or dereferenced file, not symbolic link.

$ ls -l
drwxrwxr-x  2 daniel daniel 4096 Apr 15 02:00 demo
lrwxrwxrwx  1 daniel daniel    8 Apr 15 01:51 demo-link -> demo.txt
lrwxrwxrwx  1 daniel daniel    9 Apr 15 02:02 demo-link2 -> demo-link
-rw-rw-r--  1 daniel daniel   21 Apr 15 02:02 demo-link3
drwxrwxr-x  2 daniel daniel 4096 Apr 15 01:58 demo-new
-rw-rw-r--  1 daniel daniel   21 Apr 15 01:51 demo.txt

9. cd – change directory.

cd is actually a built-in shell command, you won’t find it in the file system as the other commands above. It is used to change working directory.
Use it with “pwd” to show your current directory.

$ pwd        # our current working directory
$ cd demo    # changing to demo/ directory
$ pwd
$ cd -       # switch back to previous directory, "-" (dash) does the trick.
$ pwd
$ cd /root/   # you need permission to switch to protected directories.
-bash: cd: /root/: Permission denied

10. man – display information from the man pages.

The man command provides and interface to the on-line reference manuals. man will search through all the sections of the man pages.
If the section number is given, it will search only that section.

$ man man       # search the man  pages for information about the man command.

$ man ls          # help on ls

$ man 5 crontab   # search in section 5 of the man pages

$ man -k mkdir    # show short description of mkdir keyword.
mkdir (1)            - make directories
mkdir (2)            - create a directory
mkdirat (2)          - create a directory

How to get your first online freelancing assignment

Getting your first online freelancing assignment is not that easy. In general, there is lots of competition but most of all the established professional on the particular online platform will take most of the bids. That makes it really difficult for new sign ups to win any of the bids as they haven’t built any reputation within that platform. Online freelancing platforms such as Upwork, allow the freelancers or contractors to create a profile – more like an online resume – plus all the feedback and ratings they have received from the employers on the particular platform. So when a new assigned is posted, the employers will in nearly all cases look for someone who has been rated well and that doesn’t give new comers any chance.

Here are some of the tips you can use to improve your chances of getting your first bid, as that is really crucial whether you will make it in a particular freelancing platform or not. If you have a presence in several freelancing sites, your ratings and feedback don’t get transferred to other sites, which means you have to start from scratch to prove your worth.

Let us get to the tips –

1. Be patient, be patient, be patient – it takes time, landing your first assignment is tough but once you get it and your employers leaves you a good feedback with a high rating, upcoming bids become a lot easier. This could take weeks or even months for some folks.

2. Do not overcharge – In fact, I would say set your rate way below the average for your particular area of work. Look at the other bidders, and make sure you get noticed for your much lower fees. Remember, at this point your highest priority is not money, it is the feedback and rating. You will have plenty of time to hike your fees later 🙂

3. Read the job description carefully – Since most of the bids get lots of bidders, the way the employers try to narrow down the candidates is by picking the ones who follow the instructions. The employer will put some information in the job description, such as respond with “the text XYZ” at the top of your response email. Anyone who doesn’t follow the instruction will not get a chance. Besides, reading the job description carefully will help you figure out whether this task is the right one for you or not.

4. Bid to an assignment that you know you will accomplish it really well – remember this is your first task, pick it carefully. You have to be confident that you can accomplish this task really well and get a good feedback. You will pick and choose later, don’t be picky now.

5. Create a stellar profile – as a newbie freelancer for this particular freelancing site, most potential employers won’t look at your profile, they filter out candidates based on how long they have been on the site, how many ratings they have, total number of assignments they worked on etc. But if for some reason an employer decides to give you a chance, you better make sure they find all the information they need in your profile.

6. Respond fast to emails/text from potential employers – show them that you won’t vanish when an urgent assignment comes in! Most of the employers have to report to someone too, and they will ask for your progress status etc. Make sure that they can reach out to you in a predictable manner. Let them know your working hours, and how long it might take you to respond and the communication channel that they can reach you, whether it is through messaging service provided by the freelancing site, skype, gmail etc.

7. Don’t burn bridges – it is a small world, make sure you leave on good terms.

8. Research the employers – There are good and bad employers in the online freelancing world, make sure to research the employers as well. Look at their profile in the platform, check how other candidates rated them. Especially pay attention to how many jobs they posted and how many hires they actually made, this ratio is very important.

9. Don’t sound needy or desperate – I know you really want to get your first assignment, and I am sure you will get it with enough perseverance. But don’t be too needy in your communication with potential employers. Be confident and use language which shows that you are familiar with the task and that you will deliver.

10. Watch out for impostors – some will try to get answers without signing a contract, some might try to blackmail you knowing that this is your first assignment and how desperate you are to get a good feedback and rating from them. So make sure to research the employers as well.

I hope this list of tips helps, Good luck with winning your first bid!

List of some freelancing sites –

Other relevant tips –

Marketing tricks and scams to be aware of – for people interested in personal finance and financial independence

You earned it, and yet all kinds of tactics and tricks will be thrown around to part you from your money. Here are some of the tricks you might need to keep an eye on –

1. Only 1 item left or promotion code valid for 24 hours only ( sense of urgency) : It is meant to create a false scarcity or sense of urgency to urge buyers to spend their money in a rash. Just stay calm, do your own research and make a rational decision before you fall to this trap.


2. Up to $1000 bonus, up to 75% off – “Up to” makes any statement always true and thus deceiving. Keep an eye for this word. It is also heavily used by corporate Public Relations(PR) personnel in the media – say a big company claiming they gave a bonus of up to 10,000 to their employees. In reality, only 1 person might have received 10k, while the rest less than 100 dollars. Very tricky word.

3. Prize scams – applies mostly to online scams telling you that you have won something and you need to wire some money to insure delivery of the prize. Just label the email as spam. The FTC has details on this –

4. Recurring payments ( death by thousand cuts) – businesses love this because most of the consumers who signed up for recurring payment don’t use the service as much. Evaluate all your recurring payments and cancel the service if you don’t need it.
When you sign up for a service which has renewal options, such as buying a domain name, insurance etc., the system might default to automatic renewal and keep your payment method in their system. Always make sure to check all the options on the site to turn this off. Paypal is notorious for this, if you make payments using Paypal, chances are the automatic payment is enabled. Paypal makes it difficult to find the option to turn recurring payment off –

5. For sale banner with price in small fonts – From a distance you will see the a house for sale banner for “200s” in big ont and if you look closely there is a “mid” word right in front of 200s with a very small text. All kinds of pricing tricks here –

6. Store tricks – dairy products and other essentials on the back wall and Pricier items at eye level.

7. Work from home scams – if it is too good to be true, it is most likely a scam :

8. Amyway recruiters ? Multilevel Marketing (MLMs) – They mostly target people sitting on their own, use phrases such as “be your own boss”, “generate passive income”, “work from home”, “what would you do if you had a million dollars?”. They will strike a conversation with you as if they want to be your friend, and pretend like they admire something about you or your smart phone or whatever.

Ansible : rolling upgrades or updates.

Making a change to live servers in production is something which has to be done with extreme care and planning. Several deployment types such as blue/green, canary, rolling update are in use today to minimize user impact. Ansible can be used to orchestrate a zero-downtime rolling change to a service.

A typical upgrade of an application, such as patching, might go like this –

  1. disable monitoring alerts for a node
  2. disable or pull out from load balancer
  3. make changes to server
  4. Reboot node
  5. wait for node to be UP and do sanity check
  6. put node back to load balancer
  7. turn on monitoring of node

Rinse and repeat.

Ansible would be a great choice in orchestrating above steps. Let us start with an inventory of web servers, a load balancer and a monitoring node with nagios –




The web servers are running apache2, and we will patch apache and the kernel. For the patch to take effect, the servers need to be recycled. We will perform the patching one node at a time, wait for the node to be healthy and go to the next. The first portion of our playbook would be something like this –

- hosts: webservers
  serial: 1

  - name: Stop apache service
    service: name=httpd state=stopped

  - name: update apache
    yum: name=httpd state=latest
  - name: Update Kernel
    yum: name=kernel state=latest
  - name: Reboot server
    shell: /sbin/reboot -r +1

  - name: Wait for webserver to come up
    wait_for: host={{ inventory_hostname }} port=80 state=started delay=65 timeout=300

I haven’t included the playbook tasks for disabling/enabling monitoring as well as removing/adding node to the load balancer. The procedures might differ depending on what type of monitoring system or load balancer technology you are using. In addition to this, the sanity check show is a simple port 80 probing, in reality a much more sophisticated validation can be done.

References –

Getting started with Google Cloud Platform(GCP)

Google provides the same cloud services as other cloud providers such as Amazon Web Services(AWS) and Microsoft (Azure). It refers it as Google Cloud Platform or GCP. You can easily get started by signing up for free –

List of all products provided in GCP –

Google provides several ways to interact with its services-

1. GCP console (web ui)
GCP console is a web user interface which lets you interact with GCP resources. You can view, create, update and delete cloud resources from this page.

How to create a Linux vm(instance) using the console –

2. Command Line Interface (gcloud cli toolset)
Install gcloud :

The gcloud toolkit is a command line interface tool to interact with GCP resources. Very useful in automating cloud tasks, with its command completion and help pages, it is almost a necessity to familiarize yourself with this tool.

How to create an instance using gcloud cli –

3. Cloud deployment manager
GCP deployment manager allows you to create, delete and update GCP resources in parallel by declaring a set of templates written in jinja2 or python. Templates can be shared with other teams and can be re-used with little modification.

What deployment manager is and how it works –

How to deploy an a GCP instance using deployment manager –

4. APIs
Google provides application programming interface(APIs) to interact with its GCP services. Google recommends using the client libraries over directly calling the RESTful apis.

a. Client libraries

List of client libraries for different programming languages –

How to interact with Google Compute Engine(GCE) using the Python client library –

b. RESTful or raw APIs

API Reference –

Method for creating an instance –

References –
Google Cloud Platform Services overview

Ansible – How to run a portion of a playbook using tags.

If you have a large playbook it may become useful to be able to run a specific part of it or only a single task without running the whole playbook. Both plays and tasks support a “tags:” attribute for this reason.

In this specific scenario, I have a playbook which configures all productions servers from the moment the servers boot till they start taking traffic. While testing the plays in dev environment, I was debugging an issue on the parts which does dns configuration. This is where the “tags” attributes comes handy –

1. Tag the task –

- name: Configure resolv.conf
  template: src=resolv.conf.j2 dest=/etc/resolv.conf
  when: ansible_hostname != "ns1"
    - dnsconfig

2. Run only the tasks tagged with a specific name –

root@linubuvma:/etc/ansible# ansible-playbook -i dc1/hosts dc1/site.yml --tags "dnsconfig" --check

PLAY [Setup data center 1 servers] *****************************************************

TASK: [common | Configure resolv.conf] ****************************************
skipping: [ns1]
changed: [docker]
ok: [ns2]
ok: [whitehat]
ok: [mail]
ok: [www]
ok: [ftp]

PLAY RECAP ********************************************************************
whitehat                   : ok=1    changed=0    unreachable=0    failed=0
docker                     : ok=1    changed=1    unreachable=0    failed=0
ns1                        : ok=0    changed=0    unreachable=0    failed=0
ns2                        : ok=1    changed=0    unreachable=0    failed=0
mail                        : ok=1    changed=0    unreachable=0    failed=0
www                   : ok=1    changed=0    unreachable=0    failed=0
ftp                   : ok=1    changed=0    unreachable=0    failed=0

Ansible playbook will run only the task with the specified tag, it will skip the rest of the tasks in the playbook. Use the ‘–list-tags’ flag to view all the tags.

References –