This is not an answer but rather a lengthy comment about aliases.
Aliases don't have to be trivial
A few examples
# Window Identification
alias wid='ps $(xprop | (pid=$(command grep PID); echo ${pid##*=}))'
puts the shrugg ASCII emoji in the clipboard
alias shrugg='echo -n "¯_(ツ)/¯" | xclip -i; echo "¯\(ツ)_/¯ copied to the clipboard"'
Capturing desktop with ffmpeg, video = wo/ sound, av = w/ sound.
alias desktop.capture.video='ffmpeg -f x11grab -r 25 -s 1900x1000 -i :0.0+0,24 -vcodec libx264 -threads 0'
alias desktop.capture.av='ffmpeg -f x11grab -r 25 -s 1900x1000 -i :0.0+0,24 -vcodec libx264 -threads 0 -f alsa -i hw:0 '
how many days I've been working @ my current job.
$ work
2828 days, 0:00:00
$
alias work='python -c "import datetime; print datetime.date.today() - datetime.date(2014,11,17)"'
grep an IP address
alias grep.ip="grep '([[:digit:]]{1,3}.){3}[[:digit:]]{1,3}'"
Remove blanks and comments from text files
Useful when you want to see that config file in a single terminal page
alias pretty.remove.blanks+comments="egrep -v '(^[[:space:]]#|^$|^[[:space:]]//|^[[:space:]]*;)'"
+--------------------+
| system information |
+--------------------+
alias sys.distro="for file in /etc/{issue,version,release}; do [[ -f $file ]] && cat $file && break; done;"
alias sys.processes.cpu.highest="ps ux | sort -k3nr | head -1"
alias sys.processes.rss.highest="ps ux | sort -k6nr | head -1"
alias sys.processes.mem.highest="sys.processes.rss.highest"
Aliases can be used to suite your own way of thinking about things.
Why do I have to remember the command to print my local IP and the other command for my public IP? Let's have all IP related commands aliased with a net.ip prefix. This also leverages the power of tab completion when looking for such commands so I don't even have to remember them, I just access them.
alias net.ip.private="ifdata -pa $INTERFACE"
alias net.ip.public='curl ifconfig.me; echo'
Have all package related commands under the package prefix
alias package.is.installed="dpkg-query -W"
alias package.search.byname="apt-cache search"
alias package.search.byfile="apt-file search"
alias package.install='_asroot apt-get install'
alias package.remove='_asroot apt-get remove'
Aliases don't have to be oneliners
See this example
# _extract_clean_line : used to parse postfix log files
#
# $ _extract_mail_to_mail /var/log/mail.log | head -2
# Aug 15 06:30:02 messagerie amavis[52012]: (52012-17) Passed CLEAN {RelayedOpenRelay}, [127.0.0.1] <root@messagerie.algerian-radio.dz> -> <root@messagerie.algerian-radio.dz>, Message-ID: <20220815053002.7185A3A8009B@messagerie.algerian-radio.dz>, mail_id: qJKvO_yRwa1V, Hits: -0.011, size: 1434, queued_as: BC2573A80097, 293 ms
# Aug 15 06:30:16 messagerie amavis[53456]: (53456-14) Passed CLEAN {RelayedOpenRelay}, [127.0.0.1] <root@messagerie.algerian-radio.dz> -> <root@messagerie.algerian-radio.dz>, Message-ID: <20220815053015.AE00B3A8009B@messagerie.algerian-radio.dz>, mail_id: V89PBpOj6gnr, Hits: -0.011, size: 13257, queued_as: 716C23A80097, 756 ms
# $ _extract_mail_to_mail /var/log/mail.log | head -2 | _extract_clean_line
# Aug 15 06:30:02 [127.0.0.1] <root@messagerie.algerian-radio.dz> -> <root@messagerie.algerian-radio.dz>, Hits: -0.011
# Aug 15 06:30:16 [127.0.0.1] <root@messagerie.algerian-radio.dz> -> <root@messagerie.algerian-radio.dz>, Hits: -0.011
# $
#
alias _extract_clean_line="
sed -u "
removes prefixes like
messagerie amavis[31953]: (31953-20) Passed SPAMMY {RelayedTaggedInbound},
s/messagerie[^}]+}, //;
removes trailing info like
Queue-ID: DFFC83A800A5, Message-ID: <20220602084656.1D3656E2A270B3FA@algerian-radio.dz>, mail_id: UXj46jSTdsyC, Hits: 7.857,
becomes :
Hits: 7.857,
s/(Queue|Message)-ID.*Hits/Hits/;
removes trailing line after Hits w/o removing Hits itself
Hits: 7.857, size: 25552, queued_as: 7286B3A800A7, 5432 ms
becomes
Hits: 7.857
s/, size.*//;
puts e-mail addresses on their own lines, instead of all in one line.
s/,<([[:alnum:].@-]+)>/\n <\1>/g""
Aliases can be combined
mail.exchange.live is an alias composed of aliases
alias _extract_mail_to_mail="egrep --line-buffered \"<$REGX_EMAIL> -> <$REGX_EMAIL>\""
alias mail.exchange.live='tail -f /var/log/mail.log | _extract_mail_to_mail | _extract_clean_line'
_extract_clean_line was already pasted above
both _extract_clean_line and _extract_mail_to_mail are used in many other aliases and functions
alias mail.spam.report="_extract_mail_to_mail /var/log/mail.log | grep SPAM | _extract_clean_line"
alias mail.exchange.from.outside="_extract_mail_to_mail /var/log/mail.log | grep -v 'mydomain.tld> ->' | _extract_clean_line"
function mail.exchange.from(){
_extract_mail_to_mail /var/log/mail.log | grep -- "$1.*->" | _extract_clean_line
}
function mail.exchange.to(){
_extract_mail_to_mail /var/log/mail.log | grep -- "->.*$1" | _extract_clean_line
}
if you're curious about what these do, here are two examples :
1/ mail.exchange.to
$ mail.exchange.to a.chaouche@algerian-radio.dz | tail -5
Aug 16 11:07:03 [168.100.1.4]:15043 [217.182.79.147] <owner-postfix-users@postfix.org> -> <a.chaouche@algerian-radio.dz>, Hits: -1.557
Aug 16 11:49:34 LOCAL [10.10.10.123]:64801 <PODCAST-RAI@algerian-radio.dz> -> <a.chaouche@algerian-radio.dz>, Hits: -0.769
Aug 16 12:17:49 [168.100.1.4]:60799 [2604:8d00:189::2] <owner-postfix-users@postfix.org> -> <a.chaouche@algerian-radio.dz>, Hits: -1.557
Aug 16 12:22:10 [168.100.1.4]:55331 [2604:8d00:189::2] <owner-postfix-users@postfix.org> -> <a.chaouche@algerian-radio.dz>, Hits: -1.557
Aug 16 12:33:56 [185.49.141.25]:33725 [2a04:b900::1:0:0:15] <unbound-users-bounces@lists.nlnetlabs.nl> -> <a.chaouche@algerian-radio.dz>, Hits: -3.412
$
2/ mail.spam.report
$ mail.spam.report | tail -5
Aug 16 10:21:52 [197.112.10.13]:17337 [197.112.10.13] <mehdi.assem@yahoo.fr> -> <contact@radioalgerie.dz>, Hits: 8.538
Aug 16 12:07:45 LOCAL [192.168.211.95]:36104 <a.chaouche@algerian-radio.dz> -> <list@spammers.dontlike.us>, Hits: 7.891
Aug 16 12:17:30 [63.209.32.180]:39282 [197.201.1.54] <list-bounces@spammers.dontlike.us> -> <a.chaouche+sdlu@algerian-radio.dz>, Hits: 5.907
Aug 16 12:19:05 [192.249.57.241]:59942 [194.111.216.102] <list-bounces@spammers.dontlike.us> -> <a.chaouche+sdlu@algerian-radio.dz>, Hits: 5.907
Aug 16 12:34:44 [178.62.40.198]:43976 [46.183.222.41] <kites@enterpreneurdirection.info> -> <webmaster@radioalgerie.dz>, quarantine: e/spam-eaU9U0MofNq1.gz, Hits: 17.991
$
Aliases may contain loops and variables
You just have to be careful to escape the dollar sign when creating and using variables inside aliases. For example :
alias flow.tasks.list="for file in ~/NOTES/LOG/TASKS/*.flow; do echo file \$file; echo '---------------------------------------------------'; egrep -h '^\*\* \[[0-9]' \$file; echo; done | less"
This produces the following output
/home/ychaouche/NOTES/LOG/TASKS/dns.www.ibm.com.12s.flow
---------------------------------------------------
** [1] dns query taking too long
** [1.1] query time
/home/ychaouche/NOTES/LOG/TASKS/download-podcasts.flow
** [1] see if savefrom.net works again
** [2] search for alternatives to savefrom.net
/home/ychaouche/NOTES/LOG/TASKS/erreur-certificat.flow
** [1] erreur
** [2] copy-heading.flow
/home/ychaouche/NOTES/LOG/TASKS/exploration-de-la-base-roundcube.flow
** [1] joins
** [2] requêtes sur la table contacts
** [3] cacher le mot de pass
Aliases may be called like commands
Consider this example
alias sys.window.pid="pid=\$(xprop | grep PID); echo \${pid##*=}; unset pid"
alias sys.window.trace="_asroot strace -p \$(sys.window.pid)"
Use sys.window.trace to run strace on any window by point and click. This uses sys.window.pid, also an alias that returns the pid of any window by point and click.
Notice how sys.window.pid is called like a command substitution. Without the $, you'd get strace complaining that sys.window.pid is an invalid pid.
+1 for the childlike faith that it was OK for you to omit the null subset.
– Thomas L Holaday Aug 26 '13 at 15:16