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

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
657
Serve current directory tree at http://$HOSTNAME:8000/

Alternatives

There is 1 alternative - vote for the best!

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

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
2

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
python -m SimpleHTTPServer
2011-02-12 11:40:56
User: soissons
Functions: python
-1

"this command line isn't mine but i find it very useful" ^^

This one-liner starts a dedicated server hosting (web server) on port 8000 with the contents of current directory on all the interfaces (address 0.0.0.0), not just localhost. If you have "index.html" or "index.htm" files, it will serve those, otherwise it will list the contents of the currently working directory.

It works because python comes with a standard module called SimpleHTTPServer. The -m argument makes python to search for a module named SimpleHTTPServer.py in all the possible system locations (listed in sys.path and $PYTHONPATH shell variable). Once found, it executes it as a script. If you look at the source code of this module, you'll find that this module tests if it's run as a script if __name__ == '__main__', and if it is, it runs the test() method that makes it run a web server in the current directory.

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 223 weeks and 3 days ago

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

Comment by AmadeusZull 221 weeks and 4 days ago
python -m SimpleHTTPServer

+Serving HTTP on 0.0.0.0 port 8000 ...

....

Comment by grep 221 weeks ago

Cool. I'd been using webfs for this.

http://linux.bytesex.org/misc/webfs.html

Comment by Viaken 218 weeks and 6 days ago

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

I love it.

Comment by k00pa 217 weeks and 4 days ago

See also CGIHTTPServer

Comment by dstahlke 215 weeks ago

Awesome!!

Comment by d4n3sh 213 weeks and 5 days ago

How to kill the servers? :P

Comment by Meeko 213 weeks and 4 days 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:127.0.0.1:8000 $SSHHOST 'read'

kill `jobs -p | head` }
Comment by wonko 209 weeks and 5 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 ]];

do

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 193 weeks 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 ]];

do

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 193 weeks ago

nice ! tfs

Comment by sazwqa 172 weeks and 1 day 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 169 weeks and 2 days ago

nice

Comment by warlock 169 weeks and 1 day ago

awesome

Comment by tunguyen 165 weeks and 3 days ago

This is a great trick!

Does anyone know similar trick that invoke simple FTP server?

Comment by yorams70 165 weeks and 2 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 160 weeks and 3 days ago

In order to kill the server you can try:

killall python
Comment by samy 133 weeks and 2 days ago

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

Comment by al_crow 103 weeks and 4 days ago

Just run to view

firefox http://$HOSTNAME:8000/
Comment by totti 94 weeks and 2 days ago

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

Comment by adamlehenbauer 90 weeks and 3 days ago

http://ubuntuguide.net/http-server-support-uploading-files-from-windows-in-ubuntu

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

Comment by franzcai 36 weeks and 5 days ago

Your point of view

You must be signed in to comment.

Related sites and podcasts