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.


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:



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.




Serve current directory tree at http://$HOSTNAME:8000/

Terminal - Serve current directory tree at http://$HOSTNAME:8000/
python -m SimpleHTTPServer
2009-02-05 11:57:43
User: pixelbeat
Functions: python
Serve current directory tree at http://$HOSTNAME:8000/


There are 3 alternatives - vote for the best!

Terminal - Alternatives
python -m http.server
2010-12-17 12:52:45
User: Alanceil
Functions: python

In Python version 3, the module was merged into http.server. Gentlemen, change your aliases.

twistd -n web --path .
python -m SimpleHTTPServer
2011-08-29 03:19:26
Functions: python
Tags: python

This works on all versions of python 2.X.

Tested on Linux and bundled python versions on Mac OSX and Solaris / UNIX

Note: Serves globally on port 8000.

Ctrl+c to stop.

Don't start the server and leave it on a internet connected machine. :)

python3 -m http.server
python3 -m http.server

Know a better way?

If you can do better, submit your command here.

What others think

To use a different port:

python -m SimpleHTTPServer 8080
Comment by taoufix 271 weeks ago

Many thx to the both of you and python developers :)

Comment by AmadeusZull 269 weeks and 1 day ago
python -m SimpleHTTPServer

+Serving HTTP on port 8000 ...


Comment by grep 268 weeks and 4 days ago

Cool. I'd been using webfs for this.


Comment by Viaken 266 weeks and 3 days ago

This is great way to get something to open without configuring webserver.

I love it.

Comment by k00pa 265 weeks and 1 day ago

See also CGIHTTPServer

Comment by dstahlke 262 weeks and 4 days ago


Comment by d4n3sh 261 weeks and 1 day ago

How to kill the servers? :P

Comment by Meeko 261 weeks ago

I changed this up a bit and added it to my .bashrc. My function also logs into my web server via ssh and forwards a port back to me. It also copies the URL to my primary selection.

webshare () { local SSHHOST=hostname.of.server python -m SimpleHTTPServer & echo http://$SSHHOST:8000 | xclip echo Press enter to stop sharing, http://$SSHHOST:8000 copied to primary selection

/usr/bin/ssh -R 8000: $SSHHOST 'read'

kill `jobs -p | head` }
Comment by wonko 257 weeks and 2 days ago

Neat. I've been using a more complicated system:

# Create an index.html, trying to preserve names with whitespace

du -a | awk ?{ print $2,$3,$4,$5}? | \ until [[ -z $L ]];


read L;

echo ??$L??;

done > ./index.html;

#Instantiate an SSL web server on port 8080

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout \

server.pem -out server.pem -subj ?/C=XX/O=XX/OU=XX/CN=XX?;

openssl s_server -accept 8080 -WWW

Comment by lbonanomi 240 weeks and 4 days ago

Wow, quoting went horribly wrong there.

# Create an index.html, trying to preserve names with whitespace

du -a | awk '{ print $2,$3,$4,$5}' | until [[ -z $L ]];


read L;

echo ''$L'';

done > ./index.html;

#Instantiate an SSL web server on port 8080

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout \

server.pem -out server.pem -subj ?/C=XX/O=XX/OU=XX/CN=XX?;

openssl s_server -accept 8080 -WWW

Comment by lbonanomi 240 weeks and 4 days ago

nice ! tfs

Comment by sazwqa 219 weeks and 5 days ago

all of the hacking around detracts from the beautiful simplicity of this command. I'm totally in love with this. I'd up-vote it a 100 times if I could. Nice work.

Comment by 4fthawaiian 216 weeks and 6 days ago


Comment by warlock 216 weeks and 4 days ago


Comment by tunguyen 213 weeks ago

This is a great trick!

Does anyone know similar trick that invoke simple FTP server?

Comment by yorams70 212 weeks and 5 days ago

If you don't know how to kill the server (^c doesn't work) try the following

kill `ps | grep SimpleHTTP | grep -v grep | awk '{print $1}'`
Comment by jafraldo 208 weeks ago

In order to kill the server you can try:

killall python
Comment by samy 180 weeks and 6 days ago

killall python is too brutal. It may kill some useful python process accidently .

Comment by al_crow 151 weeks ago

Just run to view

firefox http://$HOSTNAME:8000/
Comment by totti 141 weeks and 6 days ago

This is awesome. Does anyone know how to do this with Python 2.3 or earlier?

Comment by adamlehenbauer 138 weeks ago


I found a python script that support uploading files. It's useful.

Comment by franzcai 84 weeks and 2 days ago

If the default port 8000 already in use, you can specify port on commandline:

python -m SimpleHTTPServer 9000

Comment by sesom42 45 weeks and 2 days ago

I tried using this to quickly send a folder full of games to some people on my LAN, but it would only let one person download at a time. Try

sudo apt-get install python-twistd-web twistd -no web


Comment by nkorth 10 weeks and 5 days ago

Your point of view

You must be signed in to comment.

Related sites and podcasts