Hide

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.


If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/

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.

Hide

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:

Hide

News

2011-03-12 - Confoo 2011 presentation
Slides are available from the commandlinefu presentation at Confoo 2011: http://presentations.codeinthehole.com/confoo2011/
2011-01-04 - Moderation now required for new commands
To try and put and end to the spamming, new commands require moderation before they will appear on the site.
2010-12-27 - Apologies for not banning the trolls sooner
Have been away from the interwebs over Christmas. Will be more vigilant henceforth.
2010-09-24 - OAuth and pagination problems fixed
Apologies for the delay in getting Twitter's OAuth supported. Annoying pagination gremlin also fixed.
Hide

Tags

Hide

Functions

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
3
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.

Alternatives

There are 8 alternatives - vote for the best!

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

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
4

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
0

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 222 weeks and 5 days ago

You are right, thx for the correction

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

Comment by bw 222 weeks and 5 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 44 weeks and 1 day ago

Your point of view

You must be signed in to comment.

Related sites and podcasts