Rust-ify Linux/GNU/macOS terminal tools
Tags: rust, terminal, programming, productivity
Published: 2022-10-17 17:00:31

Unix tools, generally written in C, are an exceptionally well-designed and maintained tool set for regular day-to-day terminal usage. Although these traditional GNU and Unix amazing, they are nowadays not enough and over 40-50 years old. So those were not designed keeping the modern computers & software in their mind. We need more cool fancier and feature rich tools that save time and also make us look savage

## Rust to the saving

Rust, slowly taking place into the realm of modern computing and crazy terminal space, actually has some cool and brilliant solutions for the old GNU and Unix based CLI problems. Although it might sound weird and out of the world, but surprisingly there’s a Rust based equivalent (mostly upgrade) for every single basic CLI (Command Line Interface) tools in Linux/macOS. This kind of thing unseen in the days of computing

Enough goof and trash talk (I hate myself for this), let’s see all gems now

We’ll replace all the native terminal commands with their Rust equivalent using the `alias` property of the shell

### `cd` replacement - [Zoxide](https://github.com/ajeetdsouza/zoxide)

A smarter cd command. Supports all major shells. 

It remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes.

So if you go to a directory e.g `/home/batman/03842034sakdsuperrmanbadasd21/secret-identity` once, the second you can just type `z secret-identity` it’ll directly navigate to that same directory

 

![https://github.com/ajeetdsouza/zoxide/raw/main/contrib/tutorial.webp](https://github.com/ajeetdsouza/zoxide/raw/main/contrib/tutorial.webp)

So let’s bury `cd` with `zoxide`. Just do:

- open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias cd=z` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `cd ./<any-directory>` and live happily every after

### `ls` replacement - [Exa](https://github.com/ogham/exa)

exa is a modern replacement for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults. It uses colors to distinguish file types and metadata. It knows about symlinks, extended attributes, and Git

![https://github.com/ogham/exa/raw/master/screenshots.png](https://github.com/ogham/exa/raw/master/screenshots.png)

Now, let’s *unlist* `ls` with `exa`. Just do following:

- open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias ls=exa --icons --colors=always` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `ls <any-directory>` and live a colorful life

### `grep` replacement - [Rip grep](https://github.com/BurntSushi/ripgrep) (Dude got humor XD)

ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern. By default, ripgrep will respect gitignore rules and automatically skip hidden files/directories and binary files. In other word, RIP grep

![https://burntsushi.net/stuff/ripgrep1.png](https://burntsushi.net/stuff/ripgrep1.png)

Now, let’s execute (kill)  `grep` and repalce with `ripgrep`. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias grep=rg` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- Type `grep Life <any-file>` and … (are you even a human?)

### `cat` replacement - [Bat](https://github.com/sharkdp/bat)

A cat replacement with syntax highlighting and Git integration and line numbers

*Cat has nine lives.* The `cat` command has exactly 10 replacement and `bat` is the 10th attempt at making a better `cat` (character at)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p3n0pc4uvesj6q5g0ei4.png)


Now, let's kick off the ungrateful `cat` and replace it with `bat`. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias cat=bat` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `cat ./<any-file>` and fly out in the night sky and sleep in the day

### `top` repalcement - [bottom🙃](https://github.com/ClementTsang/bottom)

Yet another cross-platform graphical process/system monitor. It’s a customizable cross-platform graphical process/system monitor for the terminal. No matter what system stats/monitor tool anyone makes/writes, it’d still be better than `top`

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6wug26xgb8cnnxjw3qnf.png)

Now, let's remove `top` from the top and put `bottom` there

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias top=bottom` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `bottom` and find out why Chromes taking the 99% of RAM

> See kids, anyone(tool) can go from bottom to top
> 

### `sed` replacement - [Sd](https://github.com/chmln/sd)

`sd` is an intuitive find & replace CLI and the `sed` butcher. `sd` uses regex syntax that you already know from JavaScript and Python. Forget about dealing with quirks of `sed` or `awk`  - get productive immediately. It’s find & replace expressions are split up, which makes them easy to read and write. No more messing with unclosed and escaped slashes

Now, let's replace `sed` with `sd`. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias sed=sd` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- Example: type `echo 'lots((([]))) of special chars' | sed -s '((([])))' ''` and you’ll get the output as `lots of special chars`

### `cloc` repalcement - [Tokei](https://github.com/XAMPPRocky/tokei)

Tokei is a program that displays statistics about your code. Tokei will show the number of files, total lines within those files and code, comments, and blanks grouped by language. It’s a great replacement for cloc (count lines of code)

![https://user-images.githubusercontent.com/61944859/196231304-06031dbb-9a29-4160-b7cc-c5f67f493b70.png](https://user-images.githubusercontent.com/61944859/196231304-06031dbb-9a29-4160-b7cc-c5f67f493b70.png)

Now, let's count `cloc` off and use tokei instead. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias cloc=tokei` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `tokei ./` and it’ll output 0 lines of code ‘cause you didn’t write any

### `find` replacement - [Fd](https://github.com/sharkdp/fd)

`fd`  is a program to find entries in your file system. It is a simple, fast and user-friendly alternative to `find`. While it does not aim to support all of `find`'s powerful functionality, it provides sensible (opinionated) defaults for a majority of use cases.

It has an intuitive syntax: `fd PATTERN` instead of `find -iname '*PATTERN*'`. Supports Regular expression (default) and glob-based patterns. Superfast due to parallelized directory traversal. Uses colors to highlight different file types (same as `ls`). Ignores hidden directories, files & patterns from your`.gitignore`, by default. AND The command name is *50%* shorter[](https://github.com/ggreer/the_silver_searcher) than `find` :-)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/01r3j3u6pw7w6w06zeqf.png)

Now, let’s forget, `find` and replace it with `fd`. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias find=fd` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `find useful-files` and forget

### `du` repalcement - [Dust](https://github.com/bootandy/dust)

du + rust = dust. Like du but more intuitive. `dust` shows the disk usage more efficiently, fast and in a more organized way

![https://github.com/bootandy/dust/raw/master/media/snap.png](https://github.com/bootandy/dust/raw/master/media/snap.png)

Now, let's throw `du` to dust and replace it with `dust`. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias du=dust` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `du` and see the reason why your disk space at 69% (I know it’s all Pokémon movies)

### `ps` replacement - [Procs](https://github.com/dalance/procs)

procs is a modern replacement for ps. It has colored and human-readable outputs. Supports Multi-column keyword search. Additionally, it shows TCP/UDP port, read/write throughput, docker container name, more memory information too which `ps` can’t show

![https://user-images.githubusercontent.com/4331004/55446625-5e5fce00-55fb-11e9-8914-69e8640d89d7.png](https://user-images.githubusercontent.com/4331004/55446625-5e5fce00-55fb-11e9-8914-69e8640d89d7.png)

Now, lets SIGKILL `ps` and replace it with `procs`. Just do following:

- Open `~/.bashrc`/`~/.zshrc`/`~/. config/fish/config.fish`
- add `alias ps=procs` at the end of the file and save the file
- close and open the terminal or run `source <config-file-path>`
- type `ps` and to exit, press `q`

### `bash` repalcement (more like powershell) - [Nushell](https://github.com/nushell/nushell)

A new type of shell. It’s an alternative shell, quite different compared to bash, zsh or fish like terminals. Instead of thinking of files and data as raw streams of text, Nu looks at each input as something with structure. For example, when you list the contents of a directory what you get back is a table of rows, where each row represents an item in that directory. These values can be piped through a series of steps, in a series of commands called a 'pipeline'. (~ copied from the official doc)

It supports plugins which interacts with Nushell using JSON-IPC. Plugins are basically binaries available in the path and follows the `nu_plugin_*` naming convention

Nushell is extremely powerful and flexible and brings organization to the outputs. It structures the output in an intuitive and human-readable way. Nushell is basically the non-corporate open-source terminal, but keeping the UNIX spirit. It’s more like a PowerShell replacement. But in Linux/macOS it shines bright too. It needs more adaptation and updates and let's keep our finger crossed hoping it’ll one day become the top shell of all time

Nushell supports all major platforms (Linux, Windows, macOS). Now install it and then run `chsh -s $(which nu)` 

Without `sudo` it should work. If you use `sudo` it will change the shell not for your working user but **for root.** Finally, log out of your computer and log back in.

![https://github.com/nushell/nushell/raw/main/images/nushell-autocomplete6.gif](https://github.com/nushell/nushell/raw/main/images/nushell-autocomplete6.gif)

## What? You want more?

All the configurations at once for replacing the GNU/Unix tools. Put this on `~/.bashrc` / `~/.zshrc` etc shell configuration files and restart your Terminal

```bash
alias cd=z
alias ls=exa --icons --colors=always
alias cat=bat
alias find=fd
alias grep=rg
alias du=dust
alias sed=sd
alias cloc=tokei
alias ps=procs
```

Well, you can always support me for more 😊

<a href="https://www.buymeacoffee.com/krtirtho" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>

## Social

Follow me on:

- [Twitter](http://twitter.com/@KrTirtho)
- [LinkedIn](https://www.linkedin.com/in/kingkor-roy-tirtho-810b951b4/)
- [Github](https://github.com/KRTirtho)
- [DEVCommunity](http://dev.to/KRTirtho)
- [Medium](http://medium.com/@krtirtho)