Tag Archives: Terminal

Command Line – Copying Files

Copying files via the CLI is easily achieved by using the command ‘cp’:

cp file dest

The limitation with the ‘cp’ command is the lack of status or progress of the file copy. There are a couple of alternative approaches:

Use the ‘watch’ command via a new CLI window or use ‘rsync’.

The ‘watch’ command is a command to watch and refresh the display of the CLI with a specific command and time duration i.e:

watch -n 2 ls -l

Will simply refresh the CLI every 2 seconds with command ls -l. You will be able to see the file size updating every 2 seconds if listing the destination folder. This isn’t a clean solution, requires two windows and separate commands.

Rsync is a command that is vastly superior to the standard cp command. Remote and local hosts are supported and there is checking of files during the copy process. The example:

Rsync — progress file dest

Will show a progress bar of the file copying process.

As a recommendation, once large files have been copied it is always ensuring that the md5 checksum is consistent i.e. the file isnt corrupted. This can be done via the command:

md5sum file

Compare this checksum against the master/original copy. If there is a difference, this means the file is not the same and thus corrupted.

If you are copying large files >4GB onto FAT32 filesystems, then the file will need to be split. One method can achieve this by tar and splitting:

tar -cvj file | split -b 2000m -d – “targetname.tar.bz.”

This will create a tar file, split into 2GB files with a name targetname.tar.bz.xx. If a file is 4.5GB in size then there will be three files targetname.tar.bz.00, targetname.tar.bz.01, targetname.tar.bz.02

Linux Terminal

The terminal under Linux provides a Command Line Interface (CLI) for entering commands to navigate around the file system, perform troubleshooting activities and to execute scripts.

There are many different types of terminals, one of my personal favorites is the ‘Terminator’, which provides advanced layout features and the loading of profiles. If you spend a lot of your time using the CLI, for example I have an IRC application, htop (CPU performance counter), emacs (script editor) and a CLI mp3 player all running in various terminal windows. Using the terminator I can split the main window into different segments, with each segment for its own command/application.

An example is illustrated below:


Getting started:

For Debian OSs (Ubuntu/Crunchbang etc)

sudo apt-get install terminator

For CentOS/RHEL:

sudo yum install terminator

Once installed, run the application ‘terminator’

Split the screen by right click, select vertical or horizontal. When a new screen is created, follow the same process again.

Once the layout is created, right click then choose preferences. A dialog box is displayed, select Layouts tab, select Add to create the layout, and enter a name. For each terminal option you can specify a custom command i.e. top. Click close to save your changes.

To load your terminator layouts simply enter ‘terminator –layout=mylayoutname’

This can be assigned to an application launcher or desktop shortcut, or an alias via the CLI. You could have multiple layouts, maybe one for development/coding, another for personal use.