Search This Blog

Saturday, July 27, 2019

dd

dd is a command-line utility for Unix and Unix-like operating systems, the primary purpose of which is to convert and copy files.
dd stands for copy and convert (called dd because cc is already in use by C compiler).

[Options]
bs : BYTES read and write up to BYTES bytes at a time (default: 512)
if : FILE read from FILE instead of stdin
of : FILE write to FILE instead of stdout
status : LEVEL The LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses the final transfer statistics, 'progress' shows periodic transfer statistics

[Examples]
1 - Wipe the disk partition
# dd if=/dev/zero out=/dev/sd<?><n>

2  - Make USB stick bootable
Step 1 : Find device name of USB stick using lsblk
Step 2 : Copy ISO
# dd if=/home/user/download/arch.iso of=/dev/sd<?> status=progress

? = disk name
n = partition number

Reverse of making USB stick bootable
# dd if=/dev/sd<?> of=backup.iso status=progess

Above command can be used to create single image of stick containing all the partitions/data which then can be restored on another machine by simply mounting image using
# mount backup.iso /mnt/pd -o loop

Monday, July 8, 2019

Special shell parameters

The shell treats several parameters specially.
These parameters may only be referenced; assignment to them is not allowed.

1 - $?
It expands to the exit status of the most recently executed foreground *pipeline.
0 exit status means the command was successful without any errors.
non-zero (1-255 values) exit status means command was failure.

*Pipeline: In Unix-like computer operating systems, a pipeline is a mechanism for inter-process communication using message passing. A pipeline is a set of processes chained together by their standard streams, so that the output text of each process (stdout) is passed directly as input (stdin) to the next one.

2 - $_
The underscore variable is set at shell startup and contains the absolute file name of the shell or script being executed as passed in the argument list.
i.e: if you create a shell script with just echo $_ it will spit out the path of that script.

Subsequently, it expands to the last argument to the previous command.
e.g:
$ mkdir /home/xbot/foo/bar/dir
$ cd $_
$ echo $?
0
$ pwd
/home/xbot/foo/dir