# Command line

* `rsync` is a better `cp`. You can easily get a copy with progress bar by just using `rsync -P file_a file_b` It also has a ton of other useful functions. Originally picked it up from this post: <https://solovyov.net/blog/2011/rsync-better-cp/>
* To get the full processor name on Mac:

```
➜ sysctl -n machdep.cpu.brand_string
Intel(R) Core(TM) i7-3740QM CPU @ 2.70GHz
```

* To create a zero-filled file of specified size:

```bash
dd if=/dev/zero of=32mb.bin bs=32m count=1
```

* To run a program and report its maximum memory usage and other interesting things we can use usual GNU `time`(on Mac: `brew install gnu-time` will install it as `gtime`).

```
➜  gtime -v target/release/c
iterator returned: 384

	Command being timed: "target/release/c"
	User time (seconds): 0.77
	System time (seconds): 0.62
	Percent of CPU this job got: 99%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.40
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 3125868
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 0
	Minor (reclaiming a frame) page faults: 781620
	Voluntary context switches: 3
	Involuntary context switches: 112
	Swaps: 0
	File system inputs: 0
	File system outputs: 0
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0
```

* Or even simpler, to just print maximum resident set size at the end: `gtime -f %M program_name`
* Convert an SVG files to multiple PNG files with different resolutions and pack them all in an ICO file:

```
# install `svgexport` and `imagemagick`:
brew install imagemagick
npm install -g svgexport

# this worked better than ImageMagick for me:
svgexport favicon.svg 16.png 16:16
svgexport favicon.svg 32.png 32:32

# and so on, and then combine them:
convert 16.png 24.png 32.png -colors 256 favicon.ico
```

* Run a command every 5 seconds: `watch -n5 command`
* Convert GPS routes from .gpx to .kml without creating lots of points:

  ```
  gpsbabel -i gpx -f input.gpx -o kml,points=0 -F output.kml
  ```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://notes.iveselov.info/bits-and-pieces/command-line.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
