What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again.

Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Get involved!

You can sign-in using OpenID credentials, or register a traditional username and password.

First-time OpenID users will be automatically assigned a username which can be changed after signing in.

Universal configuration monitoring and system of record for IT.

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for:



May 19, 2015 - A Look At The New Commandlinefu
I've put together a short writeup on what kind of newness you can expect from the next iteration of clfu. Check it out here.
March 2, 2015 - New Management
I'm Jon, I'll be maintaining and improving clfu. Thanks to David for building such a great resource!

Top Tags



Psst. Open beta.

Wow, didn't really expect you to read this far down. The latest iteration of the site is in open beta. It's a gentle open beta-- not in prime-time just yet. It's being hosted over at UpGuard (link) and you are more than welcome to give it a shot. Couple things:

  • » The open beta is running a copy of the database that will not carry over to the final version. Don't post anything you don't mind losing.
  • » If you wish to use your user account, you will probably need to reset your password.
Your feedback is appreciated via the form on the beta page. Thanks! -Jon & CLFU Team

clone an USB stick using dd + see its process

Terminal - clone an USB stick using dd + see its process
dd if=/dev/sdc of=/dev/sdd conv=notrunc & while killall -USR1 dd; do sleep 5; done
2010-01-12 14:09:40
User: bw
Functions: dd killall sleep
clone an USB stick using dd + see its process

The following command will clone usb stick inside /dev/sdc to /dev/sdd

Double check you got the correct usb sticks (origional-clone)with fdisk -l.


There is 1 alternative - vote for the best!

Terminal - Alternatives
pv sourcefile > destfile
2010-03-20 20:55:18
User: edo
Tags: pv

pv allows a user to see the progress of data through a pipeline, by giving information such as time elapsed, percentage completed (with progress bar), current throughput rate, total data transferred, and ETA. (man pv)

dd if=fromfile of=tofile & DDPID=$! ; sleep 1 ; while kill -USR1 $DDPID ; do sleep 5; done
2010-01-12 15:01:44
User: deltaray
Functions: dd kill sleep
Tags: dd kill while sleep

This is a more accurate way to watch the progress of a dd process. The $DDPID=$! is needed so that you don't get the PID of the sleep. The sleep 1 is needed because in my testing at least, if you run kill -USR1 against dd too quickly, it will kill it off instead of display the status. So you need to wait a second, probably so that it can configure itself to trap the USR1 signal.

dc3dd progress=on bs=512 count=2048 if=/dev/zero of=/dev/null
watch ls -lh /path/to/folder
2014-03-27 10:51:36
User: vonElfensenf
Functions: ls watch
Tags: pv

forgot to use a pv or rsync and want to know how much has been copied.

Know a better way?

If you can do better, submit your command here.

What others think

I think you meant to use just one & in the above command. Otherwise it won't run the while killall until the dd is done.

The problem with doing this is that if you do this as root or something on a multiuser system, you are going to end up sending the USR1 signal to any dd that is running. So you can imagine if another user was running dd and suddenly they say the status output from it, they might wonder what the hell is going on. You could use $! to get the PID of the last process you ran.

However, in the interest of improving upon your idea, I found out something interesting about the dd command. Apparently, if you pass the USR1 signal to it too quickly, it just dies.

If you just do something like this:

dd if=/dev/sdc of=/dev/sdd conv=notrunc & while kill -USR1 $! ; do sleep 5 ; done

At least on my system, the dd dies immediately, I guess because it received the USR1 signal before it could set it self up to trap it. So you have to do this in order to delay it enough so that you don't kill the dd:

dd if=/dev/sdc of=/dev/sdd conv=notrunc & DDPID=$! ; sleep 1 ; while kill -USR1 $DDPID ; do sleep 5 ; done

The DDPID=$! is needed otherwise you'd get he PID of the sleep 1 process.

Comment by deltaray 353 weeks and 4 days ago

You are right, thx for the correction

I noticed your observation too btw! About the dd dying.

Comment by bw 353 weeks and 4 days ago

On OSX (Mountain Lion) dd wants `-SIGINFO`, not `-USR1` and also for some reason DDPID was being assigned the process *before* the current one so I had to run the signal loop in a separate terminal window after `ps aux | grep dd`-ing to get the process number. Thx though. I've learned a lot just now!

Comment by harikaram 175 weeks ago

Your point of view

You must be signed in to comment.