One of my favorite command line tips: you can add ‘comments’ full of keywords to shell commands, which makes searching your command history easier.
> obscure-cmd --with-weird-flags -Qdt # searchable comment keywords
Presumably you’re using something like fzf for history search, but this is still useful without it.
This is especially useful for cli tools with obscure names/flags, or when you can’t remember where a particular log file is.
Some examples from my history:
tail awesomewm logs:
tail -f ~/.cache/awesome/logs -n 2000 # tail follow log awesomewm
fix linux clock drift:
sudo ntpd -qg && sudo hwclock --systohc # fix linux clock time drift
copy ngrok public url to clipboard:
curl -s http://localhost:4040/api/tunnels | jq ".tunnels[0].public_url" | tr -d '"' | tr -d '\n' | xclip -selection clipboard -i # fetch ngrok url uri, copy to clipboard
sign ssh and gpg, then refresh the emacs keychain env:
keychain --agents gpg,ssh --eval id_rsa <some-gpg-id> && emacsclient -e '(keychain-refresh-environment)' # sign ssh,gpg password, refresh emacs env
Another gpg one:
git config commit.gpgsign false # disable gpg signing for this repo
Pacman/pamac commands, like listing orphaned packages:
pacman -Qdt # list orphans
pamac list -o # list orphans
xprop - super useful for debugging window management, for some reason i can never remember what it’s called:
xprop # mouse click window x11 linux describe info client helper whateveritscalled
Some helpers from my clawe project:
bb --config ~/russmatney/clawe/bb.edn -x clawe.sxhkd.bindings/reset-bindings # reset sxhkd bindings
bb --config ~/russmatney/clawe/bb.edn -x clawe.restart/reload # reload clawe
Aliases come to mind as well - in some cases that might be a better fit. I like this because it’s so low-lift.
One big caveat here: In Zsh (and maybe other shells) you might have to explictly enable comments in interactive sessions:
setopt interactivecomments
Nice tip, I will start doing it from now on. I recommend Atuin to keep and sync the shell history, although I don’t like its default bindings.
Interesting, syncing history across machines is pretty cool. While writing this I went looking for my yabai logs helper as an example, but of course, it’s on my other machine, haha
Security (sharing secrets from that history) comes to mind, so I feel compelled to mention that adding a space
setopt HIST_IGNORE_SPACE
Oh, I didn’t know that, thanks! Do you know any quick way to search and delete password contained commands in the history?
Great tip. This is simple enough to use on the daily.
Good idea.
Another tool in the same vein is tldr:
$ tldr tar tar Archiving utility. Often combined with a compression method, such as gzip or bzip2. More information: https://www.gnu.org/software/tar. - [c]reate an archive and write it to a [f]ile: tar cf path/to/target.tar path/to/file1 path/to/file2 ... - [c]reate a g[z]ipped archive and write it to a [f]ile: tar czf path/to/target.tar.gz path/to/file1 path/to/file2 ... - [c]reate a g[z]ipped archive from a directory using relative paths: tar czf path/to/target.tar.gz --directory=path/to/directory . - E[x]tract a (compressed) archive [f]ile into the current directory [v]erbosely: tar xvf path/to/source.tar[.gz|.bz2|.xz] - E[x]tract a (compressed) archive [f]ile into the target directory: tar xf path/to/source.tar[.gz|.bz2|.xz] --directory=path/to/directory - [c]reate a compressed archive and write it to a [f]ile, using [a]rchive suffix to determine the compression program: tar caf path/to/target.tar.xz path/to/file1 path/to/file2 ... - Lis[t] the contents of a tar [f]ile [v]erbosely: tar tvf path/to/source.tar - E[x]tract files matching a pattern from an archive [f]ile: tar xf path/to/source.tar --wildcards "*.html"
tealdear is my recommendation
Nice. Classic rust reimplementation.