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/
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.
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
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:
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 are 5 alternatives - vote for the best!
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)
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.
Requires the dc3dd package - available at http://dc3dd.sourceforge.net
If you can do better, submit your command here.
You must be signed in to comment.
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.
You are right, thx for the correction
I noticed your observation too btw! About the dd dying.
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!