Using curl to get help on Linux commands, programming languages and more. The most comprehensive cheat sheet.
If you are looking for a Linux and programming cheat sheet, please check
https://github.com/chubin/cheat.sh
It provides nicely colored help page, with plenty of examples in a CLI. Here are some sample runs I did.
Curl cheat sheet
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 daniel@hidmo:
/tmp
$ curl cheat.sh
/curl
# Download a single file
curl http:
//path
.to.the
/file
# Download a file and specify a new filename
curl http:
//example
.com
/file
.zip -o new_file.zip
# Download multiple files
curl -O URLOfFirstFile -O URLOfSecondFile
# Download all sequentially numbered files (1-24)
curl http:
//example
.com
/pic
[1-24].jpg
# Download a file and follow redirects
curl -L http:
//example
.com
/file
# Download a file and pass HTTP Authentication
curl -u username:password URL
# Download a file with a Proxy
curl -x proxysever.server.com:PORT http:
//addressiwantto
.access
# Download a file from FTP
curl -u username:password -O
ftp
:
//example
.com
/pub/file
.zip
# Get an FTP directory listing
curl
ftp
:
//username
:password@example.com
# Resume a previously failed download
curl -C - -o partial_file.zip http:
//example
.com
/file
.zip
# Fetch only the HTTP headers from a response
curl -I http:
//example
.com
# Fetch your external IP and network info as JSON
curl http:
//ifconfig
.me
/all/json
# Limit the rate of a download
curl --limit-rate 1000B -O http:
//path
.to.the
/file
# POST to a form
curl -F "name=user" -F "password=
test
" http:
//example
.com
# POST JSON Data
curl -H "Content-Type: application
/json
" -X POST -d
'{"user":"bob","pass":"123"}'
http:
//example
.com
# POST data from the standard in / share data on sprunge.us
curl -F
'sprunge=<-'
sprunge.us
Python lists cheat list
12345678910111213141516171819202122232425262728293031323334353637383940 daniel@hidmo:
/tmp
$ curl cheat.sh
/python/list
# python - Why does += behave unexpectedly on lists?
#
# The general answer is that += tries to call the __iadd__ special
# method, and if that isn't available it tries to use __add__ instead.
# So the issue is with the difference between these special methods.
#
# The __iadd__ special method is for an in-place addition, that is it
# mutates the object that it acts on. The __add__ special method returns
# a new object and is also used for the standard + operator.
#
# So when the += operator is used on an object which has an __iadd__
# defined the object is modified in place. Otherwise it will instead try
# to use the plain __add__ and return a new object.
#
# That is why for mutable types like lists += changes the object's
# value, whereas for immutable types like tuples, strings and integers a
# new object is returned instead (a += b becomes equivalent to a = a +
# b).
#
# For types that support both __iadd__ and __add__ you therefore have to
# be careful which one you use. a += b will call __iadd__ and mutate a,
# whereas a = a + b will create a new object and assign it to a. They
# are not the same operation!
>>> a1 = a2 = [1, 2]
>>> b1 = b2 = [1, 2]
>>> a1 += [3]
# Uses __iadd__, modifies a1 in-place
>>> b1 = b1 + [3]
# Uses __add__, creates new list, assigns it to b1
>>> a2
[1, 2, 3]
# a1 and a2 are still the same list
>>> b2
[1, 2]
# whereas only b1 was changed
# For immutable types (where you don't have an __iadd__) a += b and a =
# a + b are equivalent. This is what lets you use += on immutable types,
# which might seem a strange design decision until you consider that
# otherwise you couldn't use += on immutable types like numbers!
#
# [Scott Griffiths] [so/q/2347265] [cc by-sa 3.0]
Golang concurrency cheat sheet
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 daniel@hidmo:
/tmp
$ curl cheat.sh
/go/concurrency
/*
* go - When should I use concurrency
in
golang?
*
* Not an expert
in
Go (yet) but I'd say:
*
* Whenever it is easiest to
do
so.
*
* The beauty of the concurrency model
in
Go is that it is not
* fundamentally a multi-core architecture with checks and balances where
* things usually
break
- it is a multi-threaded paradigm that not only
* fits well into a multi-core architecture, it also fits well into a
* distributed system architecture.
*
* You
do
not have to
make
special arrangements
for
multiple goroutines
* to work together harmoniously - they just
do
!
*
* Here's an example of a naturally concurrent algorithm - I want to
* merge multiple channels into one. Once all of the input channels are
* exhausted I want to close the output channel.
*
* It is just simpler to use concurrency -
in
fact it doesn't even
look
* like concurrency - it looks almost procedural.
*/
/*
Multiplex a number of channels into one.
*/
func Mux(channels []chan big.Int) chan big.Int {
//
Count down as each channel closes. When hits zero - close ch.
var wg
sync
.WaitGroup
wg.Add(len(channels))
//
The channel to output to.
ch :=
make
(chan big.Int, len(channels))
//
Make one go per channel.
for
_, c := range channels {
go func(c <-chan big.Int) {
//
Pump it.
for
x := range c {
ch <- x
}
//
It closed.
wg.Done()
}(c)
}
//
Close the channel when the pumping is finished.
go func() {
//
Wait
for
everyone to be
done
.
wg.Wait()
//
Close.
close(ch)
}()
return
ch
}
/*
* The only concession I have to
make
to concurrency here is to use a
*
sync
.WaitGroup as a counter
for
concurrent counting.
*
* Note that this is not purely my own work - I had a great deal of help
* with this here (https:stackoverflow.com
/q/19192377/823393
).
*
* [OldCurmudgeon] [so
/q/19747950
] [cc by-sa 3.0]
*/
Please check
https://github.com/chubin/cheat.sh for more information on installation and using its comprehensive features.