Forked from zachbrowne/The Ultimate Bad Ass .bashrc File
Last active
July 25, 2020 19:16
-
-
Save aleohl/a0721d5b5ca798c11d2d7a12c28f14c4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
iatest=$(expr index "$-" i) | |
####################################################### | |
# SOURCED ALIAS'S AND SCRIPTS BY zachbrowne.me | |
####################################################### | |
# Source global definitions | |
if [ -f /etc/bashrc ]; then | |
. /etc/bashrc | |
fi | |
# Enable bash programmable completion features in interactive shells | |
if [ -f /usr/share/bash-completion/bash_completion ]; then | |
. /usr/share/bash-completion/bash_completion | |
elif [ -f /etc/bash_completion ]; then | |
. /etc/bash_completion | |
fi | |
####################################################### | |
# EXPORTS | |
####################################################### | |
# Disable the bell | |
if [[ $iatest > 0 ]]; then bind "set bell-style visible"; fi | |
# Expand the history size | |
export HISTFILESIZE=10000 | |
export HISTSIZE=500 | |
# Don't put duplicate lines in the history and do not add lines that start with a space | |
export HISTCONTROL=erasedups:ignoredups:ignorespace | |
# Check the window size after each command and, if necessary, update the values of LINES and COLUMNS | |
shopt -s checkwinsize | |
# Causes bash to append to history instead of overwriting it so if you start a new terminal, you have old session history | |
shopt -s histappend | |
PROMPT_COMMAND='history -a' | |
# Allow ctrl-S for history navigation (with ctrl-R) | |
stty -ixon | |
# Ignore case on auto-completion | |
# Note: bind used instead of sticking these in .inputrc | |
if [[ $iatest > 0 ]]; then bind "set completion-ignore-case on"; fi | |
# Show auto-completion list automatically, without double tab | |
if [[ $iatest > 0 ]]; then bind "set show-all-if-ambiguous On"; fi | |
# Set the default editor | |
export EDITOR=vim | |
export VISUAL=vim | |
# To have colors for ls and all grep commands such as grep, egrep and zgrep | |
export CLICOLOR=1 | |
export LS_COLORS='no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:' | |
#export GREP_OPTIONS='--color=auto' #deprecated | |
alias grep="/usr/bin/grep $GREP_OPTIONS" | |
unset GREP_OPTIONS | |
# Color for manpages in less makes manpages a little easier to read | |
export LESS_TERMCAP_mb=$'\E[01;31m' | |
export LESS_TERMCAP_md=$'\E[01;31m' | |
export LESS_TERMCAP_me=$'\E[0m' | |
export LESS_TERMCAP_se=$'\E[0m' | |
export LESS_TERMCAP_so=$'\E[01;44;33m' | |
export LESS_TERMCAP_ue=$'\E[0m' | |
export LESS_TERMCAP_us=$'\E[01;32m' | |
# Alias's to modified commands | |
alias cp='cp -i' | |
alias mv='mv -i' | |
alias rm='rm -iv' | |
alias mkdir='mkdir -p' | |
alias ps='ps auxf' | |
alias ping='ping -c 10' | |
alias less='less -R' | |
alias apt-get='sudo apt-get' | |
alias vi='vim' | |
# Change directory aliases | |
alias cd..='cd ..' | |
# Alias's for multiple directory listing commands | |
alias ls='ls -ltr --color=always --time-style=long-iso' # add colors and file type extensions | |
alias lr='command ls -ltrRh --color=always --time-style=long-iso' # recursive ls | |
alias ll='command ls -axltr --color=always --time-style=long-iso' # long listing format | |
# Search command line history | |
alias h="history | grep " | |
# Search running processes | |
alias topcpu="/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10" | |
# Search files in the current folder | |
alias f="find . | grep " | |
# To see if a command is aliased, a file, or a built-in command | |
alias checkcommand="type -t" | |
# Show current network connections to the server | |
alias ipview="netstat -anpl | grep :80 | awk {'print \$5'} | cut -d\":\" -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *\$//'" | |
# Show open ports | |
alias openports='netstat -nape --inet' | |
# Alias's to show disk space and space used in a folder | |
alias diskspace="du -S | sort -n -r |more" | |
alias tree='tree -CAhF --dirsfirst' | |
alias treed='tree -CAFd' | |
# Alias's for archives | |
alias mktar='tar -cvf' | |
alias mkbz2='tar -cvjf' | |
alias mkgz='tar -cvzf' | |
alias untar='tar -xvf' | |
alias unbz2='tar -xvjf' | |
alias ungz='tar -xvzf' | |
####################################################### | |
# SPECIAL FUNCTIONS | |
####################################################### | |
# Extracts any archive(s) (if unp isn't installed) | |
extract () { | |
for archive in $*; do | |
if [ -f $archive ] ; then | |
case $archive in | |
*.tar.bz2) tar xvjf $archive ;; | |
*.tar.gz) tar xvzf $archive ;; | |
*.bz2) bunzip2 $archive ;; | |
*.rar) rar x $archive ;; | |
*.gz) gunzip $archive ;; | |
*.tar) tar xvf $archive ;; | |
*.tbz2) tar xvjf $archive ;; | |
*.tgz) tar xvzf $archive ;; | |
*.zip) unzip $archive ;; | |
*.Z) uncompress $archive ;; | |
*.7z) 7z x $archive ;; | |
*) echo "don't know how to extract '$archive'..." ;; | |
esac | |
else | |
echo "'$archive' is not a valid file!" | |
fi | |
done | |
} | |
# Copy file with a progress bar | |
cpp() | |
{ | |
set -e | |
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \ | |
| awk '{ | |
count += $NF | |
if (count % 10 == 0) { | |
percent = count / total_size * 100 | |
printf "%3d%% [", percent | |
for (i=0;i<=percent;i++) | |
printf "=" | |
printf ">" | |
for (i=percent;i<100;i++) | |
printf " " | |
printf "]\r" | |
} | |
} | |
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0 | |
} | |
# Create and go to the directory | |
mkd () | |
{ | |
mkdir -p $1 | |
cd $1 | |
} | |
# Show the current distribution | |
distribution () | |
{ | |
local dtype | |
# Assume unknown | |
dtype="unknown" | |
# First test against Fedora / RHEL / CentOS / generic Redhat derivative | |
if [ -r /etc/rc.d/init.d/functions ]; then | |
source /etc/rc.d/init.d/functions | |
[ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat" | |
# Then test against SUSE (must be after Redhat, | |
# I've seen rc.status on Ubuntu I think? TODO: Recheck that) | |
elif [ -r /etc/rc.status ]; then | |
source /etc/rc.status | |
[ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse" | |
# Then test against Debian, Ubuntu and friends | |
elif [ -r /lib/lsb/init-functions ]; then | |
source /lib/lsb/init-functions | |
[ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian" | |
# Then test against Gentoo | |
elif [ -r /etc/init.d/functions.sh ]; then | |
source /etc/init.d/functions.sh | |
[ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo" | |
# For Mandriva we currently just test if /etc/mandriva-release exists | |
# and isn't empty (TODO: Find a better way :) | |
elif [ -s /etc/mandriva-release ]; then | |
dtype="mandriva" | |
# For Slackware we currently just test if /etc/slackware-version exists | |
elif [ -s /etc/slackware-version ]; then | |
dtype="slackware" | |
fi | |
echo $dtype | |
} | |
alias dist=distribution | |
# Show the current version of the operating system | |
ver () | |
{ | |
local dtype | |
dtype=$(distribution) | |
if [ $dtype == "redhat" ]; then | |
if [ -s /etc/redhat-release ]; then | |
cat /etc/redhat-release && uname -a | |
else | |
cat /etc/issue && uname -a | |
fi | |
elif [ $dtype == "suse" ]; then | |
cat /etc/SuSE-release | |
elif [ $dtype == "debian" ]; then | |
lsb_release -a | |
# sudo cat /etc/issue && sudo cat /etc/issue.net && sudo cat /etc/lsb_release && sudo cat /etc/os-release # Linux Mint option 2 | |
elif [ $dtype == "gentoo" ]; then | |
cat /etc/gentoo-release | |
elif [ $dtype == "mandriva" ]; then | |
cat /etc/mandriva-release | |
elif [ $dtype == "slackware" ]; then | |
cat /etc/slackware-version | |
else | |
if [ -s /etc/issue ]; then | |
cat /etc/issue | |
else | |
echo "Error: Unknown distribution" | |
exit 1 | |
fi | |
fi | |
} | |
# Automatically install the needed support files for this .bashrc file | |
install_bashrc_support () | |
{ | |
local dtype | |
dtype=$(distribution) | |
if [ $dtype == "redhat" ]; then | |
sudo yum install multitail tree joe | |
elif [ $dtype == "suse" ]; then | |
sudo zypper install multitail | |
sudo zypper install tree | |
sudo zypper install joe | |
elif [ $dtype == "debian" ]; then | |
sudo apt-get install multitail tree joe | |
elif [ $dtype == "gentoo" ]; then | |
sudo emerge multitail | |
sudo emerge tree | |
sudo emerge joe | |
elif [ $dtype == "mandriva" ]; then | |
sudo urpmi multitail | |
sudo urpmi tree | |
sudo urpmi joe | |
elif [ $dtype == "slackware" ]; then | |
echo "No install support for Slackware" | |
else | |
echo "Unknown distribution" | |
fi | |
} | |
# Show current network information | |
# TODO: Update to ip | |
netinfo () | |
{ | |
echo "--------------- Network Information ---------------" | |
/sbin/ifconfig | awk /'inet addr/ {print $2}' | |
echo "" | |
/sbin/ifconfig | awk /'Bcast/ {print $3}' | |
echo "" | |
/sbin/ifconfig | awk /'inet addr/ {print $4}' | |
/sbin/ifconfig | awk /'HWaddr/ {print $4,$5}' | |
echo "---------------------------------------------------" | |
} | |
# Trim leading and trailing spaces (for scripts) | |
trim() | |
{ | |
local var=$@ | |
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters | |
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters | |
echo -n "$var" | |
} | |
####################################################### | |
# Set the ultimate amazing command prompt | |
####################################################### | |
function __setprompt | |
{ | |
local LAST_COMMAND=$? # Must come first! | |
# Define colors | |
local LIGHTGRAY="\033[0;37m" | |
local WHITE="\033[1;37m" | |
local BLACK="\033[0;30m" | |
local DARKGRAY="\033[1;30m" | |
local RED="\033[0;31m" | |
local LIGHTRED="\033[1;31m" | |
local GREEN="\033[0;32m" | |
local LIGHTGREEN="\033[1;32m" | |
local BROWN="\033[0;33m" | |
local YELLOW="\033[1;33m" | |
local BLUE="\033[0;34m" | |
local LIGHTBLUE="\033[1;34m" | |
local MAGENTA="\033[0;35m" | |
local LIGHTMAGENTA="\033[1;35m" | |
local CYAN="\033[0;36m" | |
local LIGHTCYAN="\033[1;36m" | |
local NOCOLOR="\033[0m" | |
# Show error exit code if there is one | |
if [[ $LAST_COMMAND != 0 ]]; then | |
# PS1="\[${RED}\](\[${LIGHTRED}\]ERROR\[${RED}\])-(\[${LIGHTRED}\]Exit Code \[${WHITE}\]${LAST_COMMAND}\[${RED}\])-(\[${LIGHTRED}\]" | |
PS1="\[${DARKGRAY}\](\[${LIGHTRED}\]ERROR\[${DARKGRAY}\])-(\[${RED}\]Exit Code \[${LIGHTRED}\]${LAST_COMMAND}\[${DARKGRAY}\])-(\[${RED}\]" | |
if [[ $LAST_COMMAND == 1 ]]; then | |
PS1+="General error" | |
elif [ $LAST_COMMAND == 2 ]; then | |
PS1+="Missing keyword, command, or permission problem" | |
elif [ $LAST_COMMAND == 126 ]; then | |
PS1+="Permission problem or command is not an executable" | |
elif [ $LAST_COMMAND == 127 ]; then | |
PS1+="Command not found" | |
elif [ $LAST_COMMAND == 128 ]; then | |
PS1+="Invalid argument to exit" | |
elif [ $LAST_COMMAND == 129 ]; then | |
PS1+="Fatal error signal 1" | |
elif [ $LAST_COMMAND == 130 ]; then | |
PS1+="Script terminated by Control-C" | |
elif [ $LAST_COMMAND == 131 ]; then | |
PS1+="Fatal error signal 3" | |
elif [ $LAST_COMMAND == 132 ]; then | |
PS1+="Fatal error signal 4" | |
elif [ $LAST_COMMAND == 133 ]; then | |
PS1+="Fatal error signal 5" | |
elif [ $LAST_COMMAND == 134 ]; then | |
PS1+="Fatal error signal 6" | |
elif [ $LAST_COMMAND == 135 ]; then | |
PS1+="Fatal error signal 7" | |
elif [ $LAST_COMMAND == 136 ]; then | |
PS1+="Fatal error signal 8" | |
elif [ $LAST_COMMAND == 137 ]; then | |
PS1+="Fatal error signal 9" | |
elif [ $LAST_COMMAND -gt 255 ]; then | |
PS1+="Exit status out of range" | |
else | |
PS1+="Unknown error code" | |
fi | |
PS1+="\[${DARKGRAY}\])\[${NOCOLOR}\]\n" | |
else | |
PS1="" | |
fi | |
# Date | |
PS1+="${DARKGRAY}[${BLUE}$(date +'%H':%M:%S)\[${DARKGRAY}\]] " # Time | |
# Jobs | |
#PS1+="\[${DARKGRAY}\]:\[${MAGENTA}\]\j" | |
# Next line | |
PS1+="\n" | |
# User and server | |
local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'` | |
local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'` | |
if [ $SSH2_IP ] || [ $SSH_IP ] ; then | |
PS1+="[\[${RED}\]\u@\h" | |
else | |
PS1+="[\[${RED}\]\u" | |
fi | |
# Current directory | |
PS1+="\[${DARKGRAY}\]:\[${BROWN}\]\w\[${DARKGRAY}\]] " | |
# Skip to the next line | |
PS1+="\n" | |
if [[ $EUID -ne 0 ]]; then | |
PS1+="\[${GREEN}\]>\[${NOCOLOR}\] " # Normal user | |
else | |
PS1+="\[${RED}\]>\[${NOCOLOR}\] " # Root user | |
fi | |
# PS2 is used to continue a command using the \ character | |
PS2="\[${DARKGRAY}\]>\[${NOCOLOR}\] " | |
# PS3 is used to enter a number choice in a script | |
PS3='Please enter a number from above list: ' | |
# PS4 is used for tracing a script in debug mode | |
PS4='\[${DARKGRAY}\]+\[${NOCOLOR}\] ' | |
} | |
PROMPT_COMMAND='__setprompt' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment