how to see time stamps in bash history

April 9, 2018 - Reading time: 2 minutes

Press Ctrl+Alt+T to open a terminal, then run one of the commands below:

HISTTIMEFORMAT="%d/%m/%y %T "  # for e.g. “29/02/99 23:59:59”
HISTTIMEFORMAT="%F %T "        # for e.g. “1999-02-29 23:59:59”

To make the change permanent for the current user run:

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc  # or respectively
echo 'HISTTIMEFORMAT="%F %T "' >> ~/.bashrc
source ~/.bashrc

To test the effects run:

history

For commands that were run before HISTTIMEFORMAT was set, the current time will be saved as the timestamp. Commands run after HISTTIMEFORMAT was set will have the proper timestamp saved.


ffmpeg - transform mp4 to same high-quality avi

April 2, 2018 - Reading time: ~1 minute
Here is my 2-pass (Advanced Simple Profile) I use now and then.

pass 1:

ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -pass 1 -an -threads 0 -f rawvideo -y /dev/null

pass 2:

ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -pass 2 -threads 0 -f avi file.avi


switch monitors from the command line

February 20, 2018 - Reading time: ~1 minute

With the commands

xrandr --output VGA-0 --auto
xrandr --output LVDS --off 

The screen automatically transfers to the external display. It doesn't even need sudo powers. To find out the name of the displays just do:

xrandr -q

Which should give something like:

VGA-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
...
LVDS connected (normal left inverted right x axis y axis)
...

Extending the displays can probably be achieved in a similar manner.


converting between image formats

January 10, 2018 - Reading time: 9 minutes

qemu-img convert: raw, qcow2, qed, vdi, vmdk, vhd

The qemu-img convert command can do conversion between multiple formats, including qcow2, qed, raw, vdi, vhd, and vmdk.

Installing qemu-img:

[ ~]# yum install qemu-img
qemu-img format strings

Image format

Argument to qemu-img

QCOW2 (KVM, Xen)

qcow2

QED (KVM)

qed

raw

raw

VDI (VirtualBox)

vdi

VHD (Hyper-V)

vpc

VMDK (VMware)

vmdk

This example will convert a raw image file named image.img to a qcow2 image file.

$ qemu-img convert -f raw -O qcow2 image.img image.qcow2

Run the following command to convert a vmdk image file to a raw image file.

$ qemu-img convert -f vmdk -O raw image.vmdk image.img

Run the following command to convert a vmdk image file to a qcow2 image file.

$ qemu-img convert -f vmdk -O qcow2 image.vmdk image.qcow2
 
Note

The -f format flag is optional. If omitted, qemu-img will try to infer the image format.

When converting an image file with Windows, ensure the virtio driver is installed. Otherwise, you will get a blue screen when launching the image due to lack of the virtio driver. Another option is to set the image properties as below when you update the image in the Image service to avoid this issue, but it will reduce virtual machine performance significantly.

$ openstack image set --property hw_disk_bus='ide' image_name_or_id

VBoxManage: VDI (VirtualBox) to raw

If you’ve created a VDI image using VirtualBox, you can convert it to raw format using the VBoxManage command-line tool that ships with VirtualBox. On Mac OS X, and Linux, VirtualBox stores images by default in the ~/VirtualBox VMs/ directory. The following example creates a raw image in the current directory from a VirtualBox VDI image.

$ VBoxManage clonehd ~/VirtualBox\ VMs/image.vdi image.img --format raw

Converting qcow2 image to raw image format using qemu-img:
[ ~]# qemu-img convert -f qcow2 -O raw image.qcow2 image.img

Converting raw image to qcow2 image format using qemu-img:

[ ~]# qemu-img convert -f raw -O qcow2 image.img image.qcow2


    3 Steps to Perform SSH Login Without Password Using ssh-keygen & ssh-copy-id

    November 8, 2017 - Reading time: 6 minutes

    You can login to a remote Linux server without entering password in 3 simple steps using ssky-keygen and ssh-copy-id as explained in this article.

    ssh-keygen creates the public and private keys. ssh-copy-id copies the local-host’s public key to the remote-host’s authorized_keys file. ssh-copy-id also assigns proper permission to the remote-host’s home, ~/.ssh, and ~/.ssh/authorized_keys.

    This article also explains 3 minor annoyances of using ssh-copy-id and how to use ssh-copy-id along with ssh-agent.

    Step 1: Create public and private keys using ssh-key-gen on local-host

    jsmith@local-host$ [Note: You are on local-host here]
    
    jsmith@local-host$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]
    Enter passphrase (empty for no passphrase): [Press enter key]
    Enter same passphrase again: [Pess enter key]
    Your identification has been saved in /home/jsmith/.ssh/id_rsa.
    Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
    The key fingerprint is:
    33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 jsmith@local-host

    Step 2: Copy the public key to remote-host using ssh-copy-id

    jsmith@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
    jsmith@remote-host's password:
    Now try logging into the machine, with "ssh 'remote-host'", and check in:
    
    .ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting.

    Note: ssh-copy-id appends the keys to the remote-host’s .ssh/authorized_key.

    Step 3: Login to remote-host without entering the password

    jsmith@local-host$ ssh remote-host
    Last login: Sun Nov 16 17:22:33 2008 from 192.168.1.2
    [Note: SSH did not ask for password.]
    
    jsmith@remote-host$ [Note: You are on remote-host here]


    The above 3 simple steps should get the job done in most cases.

    We also discussed earlier in detail about performing SSH and SCP from openSSH to openSSH without entering password.

    If you are using SSH2, we discussed earlier about performing SSH and SCP without password from SSH2 to SSH2 , from OpenSSH to SSH2 and from SSH2 to OpenSSH.

    Using ssh-copy-id along with the ssh-add/ssh-agent

    When no value is passed for the option -i and If ~/.ssh/identity.pub is not available, ssh-copy-id will display the following error message.

    jsmith@local-host$ ssh-copy-id -i remote-host
    /usr/bin/ssh-copy-id: ERROR: No identities found


    If you have loaded keys to the ssh-agent using the ssh-add, then ssh-copy-id will get the keys from the ssh-agent to copy to the remote-host. i.e, it copies the keys provided by ssh-add -L command to the remote-host, when you don’t pass option -i to the ssh-copy-id.

    jsmith@local-host$ ssh-agent $SHELL
    
    jsmith@local-host$ ssh-add -L
    The agent has no identities.
    
    jsmith@local-host$ ssh-add
    Identity added: /home/jsmith/.ssh/id_rsa (/home/jsmith/.ssh/id_rsa)
    
    jsmith@local-host$ ssh-add -L
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsJIEILxftj8aSxMa3d8t6JvM79DyBV
    aHrtPhTYpq7kIEMUNzApnyxsHpH1tQ/Ow== /home/jsmith/.ssh/id_rsa
    
    jsmith@local-host$ ssh-copy-id -i remote-host
    jsmith@remote-host's password:
    Now try logging into the machine, with "ssh 'remote-host'", and check in:
    
    .ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting.
    [Note: This has added the key displayed by ssh-add -L]

    Three Minor Annoyances of ssh-copy-id

    Following are few minor annoyances of the ssh-copy-id.

    1. Default public key: ssh-copy-id uses ~/.ssh/identity.pub as the default public key file (i.e when no value is passed to option -i). Instead, I wish it uses id_dsa.pub, or id_rsa.pub, or identity.pub as default keys. i.e If any one of them exist, it should copy that to the remote-host. If two or three of them exist, it should copy identity.pub as default.
    2. The agent has no identities: When the ssh-agent is running and the ssh-add -L returns “The agent has no identities” (i.e no keys are added to the ssh-agent), the ssh-copy-id will still copy the message “The agent has no identities” to the remote-host’s authorized_keys entry.
    3. Duplicate entry in authorized_keys: I wish ssh-copy-id validates duplicate entry on the remote-host’s authorized_keys. If you execute ssh-copy-id multiple times on the local-host, it will keep appending the same key on the remote-host’s authorized_keys file without checking for duplicates. Even with duplicate entries everything works as expected. But, I would like to have my authorized_keys file clutter free.

    ffmpeg - transform mp4 to same high-quality avi

    August 13, 2017 - Reading time: ~1 minute
    Here is my 2-pass (Advanced Simple Profile) I use now and then.

    pass 1:

    ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -pass 1 -an -threads 0 -f rawvideo -y /dev/null
    

    pass 2:

    ffmpeg -i file.mp4 -vcodec mpeg4 -vtag XVID -b 990k -bf 2 -g 300 -s 640x360 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -pass 2 -threads 0 -f avi file.avi