Cascadia Code is an open-source monospaced font made by Microsoft first released in 2020 and serves as the default typeface for the official Windows Terminal app.
Similar to Intel’s One Mono, JetBrains’ Mono and IBM’s Plex, Cascadia Code is an clear, legible, modern monospaced font tailored for terminal and code editing and offering a wide range of programming ligatures.
Earlier this month the font received its first update in nearly 3 years and, as per release announcement, it’s a sizeable uplift.
Check out other popular Nerd Fonts here and if you’re a Linux user, maybe try replacing bash with zsh and customise it with oh-my-zsh, p10k and a Nerd font of your choice (MesloLGS NF recommended).
The Linux shell can be replaced with zsh to open up a world of extra plugins, features and themes. And it’s a pretty nice UX/UI upgrade from bash tbh.
My zsh shown below, has been complimented with oh-my-zsh and the p10k theme with customised prompt elements.
The left-side prompt elements are: battery (86%), os_icon (ElementaryOS), dir, disk_usage (8%).
The right-side prompt elements are: status (exit status 0), load (load average 1.11), time (11:02:59).
There are other prompt elements available and they are listed at the end of this post. Have fun!
Your mileage may vary between different terminals, e.g. blackbox, gnome-terminal etc. Try opening alternative terminal emulators once zsh is set up to see the differences if any, and just stick with the one that works best for you.
Installation
sudo apt-get update && sudo apt-get install zsh git
chsh -s $(which zsh)
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLo "MesloLGS NF Regular.ttf" https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf
curl -fLo "MesloLGS NF Bold.ttf" https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf
curl -fLo "MesloLGS NF Italic.ttf" https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf
curl -fLo "MesloLGS NF Bold Italic.ttf" https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf
fc-cache -fv
In your terminal of choice, replace the default font with "MesloLGS NF"
You could also try Cascadia Code Nerd Font or some of the others listed here
Install oh-my-zsh
Install oh-my-zsh to enable a framework that allows easy customisation of zsh.
sudo apt install curl wget
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Use the omz command to administer oh-my-zsh
After modification to the ~/.zshrc file, reload the config with,
source ~/.zshrc
When you first run the shell with the p10k theme installed, there is no config file set up, so a convenient wizard will automatically ask you some questions. More on the wizard here, but it’s fairly self-explanatory.
p10k has a number of customisable prompt elements. You will be prompted by a wizard upon first execution of the theme and it will run through various options/choices to create the .p10k.zsh config file sourced by your .zshrc file.
vi ~/.p10k.zsh and edit the left and right prompt elements contained in the following two sections.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon
dir
vcs
...
)
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
status
command_execution_time
background_jobs
...
)
After any changes,
source ~/.p10k.zsh
Add syntax-highlighting, auto-suggestion and auto-correction
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Auto-correctionexemptions
If you make a mistake, zsh will offer a correction. If you have certain commands or words that are repeatedly prompted with autocorrection options, you can add them to the exemption list in ~/.oh-my-zsh/lib/correction so those words will be ignored.
Find and edit the load plugins line in ~/.zshrc
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
source ~/.zshrc
If you're happy everything works, change your default shell in /etc/passwd for your user to /usr/bin/zsh permanently. This will not affect the root user when you sudo su - to elevate your privs to change to the root user for your system.
Lastly, for vi editing to work in zsh, you'll need to add the following line to your .zshrc file in your home directory.
bindkey -v
Prompt Elements
os_icon: Operating system icon.
dir: Current directory.
vcs: Version control system (e.g., Git status).
prompt_char: Prompt character.
status: Exit status of the last command.
command_execution_time: Duration of the last command.
background_jobs: Indicator for background jobs.
history: Command history number.
time: Current time.
date: Current date.
battery: Battery status.
user: Current user.
hostname: Hostname of the machine.
ip: IP address.
load: System load.
disk_usage: Disk usage.
ram: RAM usage.
swap: Swap usage.
cpu: CPU usage.
kubecontext: Kubernetes context.
node_version: Node.js version.
python_version: Python version.
ruby_version: Ruby version.
go_version: Go version.
php_version: PHP version.
java_version: Java version.
aws: AWS profile.
azure: Azure account.
gcloud: Google Cloud account.
terraform: Terraform workspace.
nix_shell: Nix shell.
context: Context (e.g., user@hostname).
Did you like this? Tip cyberfella with Cryptocurrency
Running Kali as a daily driver is doable since it’s Debian Linux, but is it suitable or really necessary. No. Not really. You should have a dedicated laptop for running it and only run it to use the tools when ethical or approved to do so.
But there are some features in the Kali UX that you might want to see in your daily driver distro.
One of these features for me is the zsh prompt. I really like the Kali prompt but I use bash.
To make your Linux bash prompt look like the zsh one in Kali Linux, you need to customize the Bash prompt by modifying the .bashrc file in your home directory. The Kali Linux terminal prompt is typically configured to display the username, hostname, and current working directory with specific colors and formats. Here’s how you can achieve a similar look:
Open the Terminal: Open your terminal on your Linux distribution.
Edit the .bashrc File: Use a text editor to open the .bashrc file in your home directory. You can use nano, vim, or any other text editor you prefer. Here, we will use nano:
nano ~/.bashrc
Modify the PS1 Variable: Find the line that defines the PS1 variable. It might look something like this:
PS1=’${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ‘ Comment it out (never delete anything!) with a hash and replace it with the following configuration to mimic the Kali Linux prompt:
Note: You can limit the number of components in the working directory path by setting the PROMPT_DIRTRIM environment variable in your ~/.bashrc file. This is worth doing if you work with exceptionally deep directory paths.
Here’s what each part of this configuration does:
[\033[01;32m]: Sets the color to green. \u: Displays the username. @: Adds the “@” character. \h: Displays the hostname. [\033[00m]: Resets the color. :: Adds a colon character. [\033[01;34m]: Sets the color to blue. \w: Displays the current working directory. [\033[00m]: Resets the color. \$ : Adds the dollar sign for normal users or a hash for the root user, followed by a space. Save the Changes: Save the changes in nano by pressing Ctrl+O, then Enter, and exit by pressing Ctrl+X.
Apply the Changes: To apply the changes you made to the .bashrc file, either close and reopen the terminal or source the .bashrc file:
source ~/.bashrc After completing these steps, your terminal prompt should look similar to the one in Kali Linux, displaying the username, hostname, and current working directory with the specified colors.
This cool little website allows you to generate custom PS1 prompts for bash that contain just the elements you want. Alternatively, just install zsh and enjoy the additional features that come with it.
Did you like this? Tip cyberfella with Cryptocurrency
The following shell script automates a ping test across a list of hosts. The format of the expected host-list file is…
<hostname1> <ipaddress1>
<hostname2> <ipaddress2>
<hostname3> <ipaddress3>
…etc
You can easily tailor the script to suit your list if you only have a list of hostnames or ip addresses.
The hosts that respond are logged to a file, ping_log.
Note that the script was written in Bash on a Red Hat Linux server, and the syntax may differ from a fully POSIX compliant script written in Ksh on HPUX, where variables are encapsulated in {} brackets and tests are double [[ ]] bracketed.
Did you like this? Tip cyberfella with Cryptocurrency
If you’re tasked with generating a list / creating a spreadsheet of all user accounts in AD but are worried you might miss out an OU when manually going through and exporting the list using the Active Directory Users and Computers MMC Snap-in, then use Powershell to generate a list instead, safe in the knowledge it’ll find everything.
If you’re really keen you can subsequently use GNUWin32 to give you neat command line tools usually only available to a bash command prompt on a Linux/UNIX OS to chop columns out of the exported csv file using cut, awk, sort and uniq. Or just use Excel to achieve it. More on GNUWin32 here.
Open a Powershell and type the following to export all users in the directory to a csv file…
Import-moduleactivedirectory
get-aduser-filter*|Export-Csvc:\myusers.csv
Since the OU Path’s are themselves comma separated, it throws the keys in the csv out of alignment, making it challenging to extract the columns to the right of it that contains the samAccountName “Logon Name”. To get over this hurdle, go back to PowerShell and be more specific about the exact key (or Label) you want, e.g. if you just want a list of Logon Names for all users in AD, then this command works…
You can combine the Labels above in a single command with a comma in the select-object section, for example to extract all logon names and whether or not the account is disabled…
Wouldn’t it be nice if you could pipe the output from windows commands into non-windows commands like grep, cut, awk, sort etc that are available to you on alternative unix-based operating systems?
Download and install GNUWin32 from here and the CoreUtils package here and Grep here that should do it. There are more packages available though here
Once installed, add the path to the bin directory to your Windows System Environment Variable Path
A few useful commands will now be available on the command line. My favourite is comm which compares files and can be quite flexible with the output with the -1 -2 or -3 switches to suppress lines that appear in file1, file2 or both files respectively. You can also combine them e.g. -12 -23, 13 to affect the output, so that only the desired output is achieved. This takes a bit of playing around with, but is very powerful and very simple. So much so, that it is my number 1 go to tool for file comparison. Examples shown the in the screenshots below.
Note: Some Windows tools such as icacls export text to a format other than ANSI. When viewed using Notepad or Notepad++, all appears fine, but if you cat them , you’ll see there are effectively spaces between each character, meaning grep won’t work. Such text files will need to be saved in ANSI format first. You can do this using Notepad++. After selecting Encode in ANSI, save it, then retry grep for a more successful pattern match!
Did you like this? Tip cyberfella with Cryptocurrency
Ever started a job and thought “this is running on a bit longer than I expected”, then wondered whats going to happen when you go home and come back in to work tomorrow morning to find your remote session gone, which leaves you wondering “did that job complete?”.
Mmm, me too, which is where the nohup or disown commands come in. nohup (no hangup) is a well known job control utility which will prevent a process from reacting to the hangup signal when a shell is disconnected. Usually you’d preceed your actual command with it, e.g.
nohup rsync -auvc /Source/* /Destination/
but if your command is already running, you’re left wishing you’d nohup‘d it to start with – unless you’re running Solaris or AIX in which case the nohup command has a convenient -p switch to specify the process id (use ps -ef | grep rsync to obtain the PID of that long running data migration process, then nohup -p 9675 (or whatever the PID is of your running job).
If you’re not running Solaris or AIX, then pray you started the command in the bash shell (Linux default shell so more likely than not). If you did, then you can
CTRL-Z
to pause the current job running in the foreground, then use the
jobs
command to determine its job number (most likely 1 if there’s no other sysadmins running backgrounded jobs), then background the process with
bg 1
then finally
disown %1
to disconnect the process from the current shell. Running
jobs
again will show that your job is no longer in the list, but
ps -ef
will reveal that it is in fact still running.
Your shell can now be closed without the fear of your running job being killed with it. Yay.
[paypal-donation]
Did you like this? Tip cyberfella with Cryptocurrency
I can’t take credit for this one – that goes to Rahul Nag http://techosolutions.wordpress.com/2013/10/10/a-z-linux-commands/ but it’s just too useful to not have in my notes. I’ve also added some extras and will continue to do so as I think of them/use them myself.
Command Description alias Create an alias opposite of unalias apropos Search manual for keyword at Schedule a job to run in the future. awk Find and Replace text within file(s) or show specific columns only
basename Opposite of dirname
break Exit from a loop builtin Run a shell builtin bunzip2 Decompress file from bzip2 format bzip2 Compress file to bzip2 format cal Display a calendar case Conditionally perform a command cat Concatenate files to standard output opposite of tac cd Change Directory cfdisk Partition table manipulator for Linux chgrp Change group ownership chmod Change access permissions chown Change file owner and group chroot Run a command with a different root directory chvt Change the virtual Terminal cksum Print CRC checksum and byte counts clear Clear terminal screen cmp Compare two files comm Compare two sorted files line by line command Run a command – ignoring shell functions compress Compress file(s) to old Unix compress format continue Resume the next iteration of a loop convmv A perl script that converts filenames from one encoding to another cp Copy one or more files to another location
cpio Copy files to and from archives
cron Daemon to execute scheduled commands at predefined time crontab Schedule a command to run at a later time csplit Split a file into context-determined pieces cut Divide a file into several parts date Display or change the date & time dc Desk Calculator dd Data Dump – Convert and copy a file declare Declare variables and give them attributes df Display free disk space diff Display the differences between two files diff3 Show differences among three files dir Briefly list directory contents dircolors Colour setup for `ls’ dirname Convert a full pathname to just a path dirs Display list of remembered directories
df Disk space free stats.
du Estimate file space usage echo Display message on screen ed A line-oriented text editor (edlin) egrep Search file(s) for lines that match an extended expression eject Eject CD-ROM enable Enable and disable builtin shell commands env Disp, set, or remove environment variables eval Evaluate several commands/arguments exec Execute a command (used with find)
exit Exit the shell expand Convert tabs to spaces opposite of unexpand export Set an environment variable expr Evaluate expressions factor Print prime factors false Do nothing, unsuccessfully opposite of true fdformat Low-level format a floppy disk fdisk Partition table manipulator for Linux fgrep Search file(s) for lines that match a fixed string file Determine type of file find Search for files that meet a desired criteria fmt Reformat paragraph text fold Wrap text to fit a specified width. for Expand words, and execute commands format Format disks or tapes free Disp, s memory usage fsck Filesystem consistency check and repair. fstat List open files function Define Function Macros fuser Identify process using file gawk Find and Replace text within file(s) getopts Parse positional parameters grep Search file(s) for lines that match a given pattern groups Print group names a user is in gunzip Decompress file(s) from GNU zip format gzcat Show contents of compressed file(s) gzip Compress file(s) to GNU zip format hash Remember the full pathname of a name argument head Output the first part of file(s) history Command History hostname Print or set system name iconv Converts the encoding of characters from one code page encoding scheme to another. id Print user and group id’s if Conditionally perform a command import Capture an X server screen and save the image to file info Help info install Copy files and set attributes join Join lines on a common field kill Stop a process from running less Display output one screen at a time let Perform arithmetic on shell variables ln Make links between files local Create variables locate Find files logname Print current login name logout Exit a login shell lpc Line printer control program lpr Off line print lprint Print a file lprintd Abort a print job lprintq List the print queue lprm Remove jobs from the print queue ls List information about file(s) ll #ls -l List information about file(s) lsof List open files m4 Macro processor makewhatis Rebuild whatis database man Print manual pages mkdir Create new folder(s) mkfifo Make FIFOs (named pipes) mknod Make block or character special files more Display output one screen at a time mount Mount a file system mtools Manipulate MS-DOS files mv Move or rename files or directories netconfig Configure your network nice Set the priority of a command or job nl Number lines and write files nohup Run a command immune to hangup od View binary files passwd Modify a user password paste Merge lines of files pathchk Check file name portability popd Restore the previous value of the current directory opposite of pushd pr Convert text files for printing printcap Printer capability database printenv Print environment variables printf Format and print data ps Process status pushd Save and then change the current directory pwd Print Working Directory quota Display disk usage and limits quotacheck Scan a file system for disk usage quotactl Set disk quotas pax Archive file(s) ram ram disk device rcp Copy files between two machines. read read a line from standard input readonly Mark variables/functions as readonly remsync Synchronize remote files via email return Exit a shell function rm Remove (delete) files rmdir Remove folder(s) rpm RPM Package Manager (was RedHat Package Manager) rsync Remote file copy (Synchronize file trees) screen Terminal window manager sdiff Merge two files interactively sed Stream Editor used to perform search and replace select Accept keyboard input seq Print numeric sequences set Manipulate shell variables and functions opposite of unset shift Shift positional parameters shopt Shell Options shutdown Shutdown or restart linux sleep Delay for a specified time sort Sort text files often used with | uniq but can just sort -u source Run commands from a file `.’ split Split a file into fixed-size pieces strings print the strings of printable characters in (binary) files. su Substitute user identity sum Print a checksum for a file symlink Make a new name for a file sync Synchronize data on disk with memory tac Print files out in reverse line order opposite of cat tail Output the last part of files tar Tape ARchiver tee Redirect output to multiple files as well as to the screen -better than just using > or >>(tee -a)
test Evaluate a conditional expression time Measure Program Resource Use times User and system times
timex preceed a command to show how long it ran for upon completion
timidity Play midi files and set up software synth to play midi files with other commands. touch Change file timestamps top List processes running on the system traceroute Trace Route to Host trap Run a command when a signal is set(bourne) tr Translate, squeeze, and/or delete characters change uppercase to lowercase true Do nothing, successfully opposite of false tsort Topological sort tty Print filename of terminal on stdin type Describe a command ulimit Limit user resources umask Users file creation mask umount Unmount a filesystem unalias Remove an alias opposite of alias uname Print system information unexpand Convert spaces to tabs opposite of expand uniq Uniquify files (remove all duplicate lines) can also use sort -u to sort | uniq units Convert units from one scale to another unset Remove variable or function names opposite of set
unshar Unpack shell archive scripts until Execute commands (until error) useradd Create new user account usermod Modify user account users List users currently logged in uuencode Encode a binary file into 7-bit ASCII characters uudecode Decode a file created by uuencode v Verbosely list directory contents (`ls -l -b’) vdir Verbosely list directory contents (`ls -l -b’)
vi The greatest shell text editor ever
vim The greatest shell text editor ever – improved
watch Execute/display a program periodically whatis List manual pages by name wc Print byte, word, and line counts of a file whereis Report all known instances of a command which Locate a program file in the user’s path. while Execute commands who Print all usernames currently logged in whoami Print the current user id and name (`id -un’) xargs Execute utility, passing constructed argument list(s) yes Print a string until interrupted zcat Show contents of compressed file(s) zip Compress and archive file(s) to zip format
Did you like this? Tip cyberfella with Cryptocurrency
Although it has a reputation for having a steep initial learning curve, in fact Linux / UNIX is great fun to learn and use, and obviously much more is possible with its command line due to the many decades of constant evolution and improvement that have been put into it by the thousands of active developers in the open source community.
This makes it very rewarding to use.
Here are some commands that are purely about fun and serve little to no purpose in the serious workplace. They can each be installed using apt-get install or yum install depending on whether you’re using a debian or redhat based distribution.
Enjoy.
moo – displays a cow
sl – lists files in a directory like ls but if you get the syntax wrong, a train will drive across your screen
figlet – useful to turn text into big chunky letters
cowsay (and xcowsay) -displays a cow that says whatever you tell it to say as text (or graphic)
oneko – displays a little ASCII cat that chases your mouse around the screen
rev – reverses text
fortune – displays random quotes/nonsense. Can be used in conjunction with cowsay e.g. fortune -s | cowsay
Did you like this? Tip cyberfella with Cryptocurrency