2017-03-19 16:44:14 +07:00
|
|
|
#!/usr/bin/env bash
|
2017-03-19 15:40:25 +07:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
#
|
|
|
|
# Description: This file holds all my BASH configurations and aliases
|
|
|
|
#
|
|
|
|
# Sections:
|
|
|
|
# 1. Make Terminal Better (remapping defaults and adding functionality)
|
|
|
|
# 2. File and Folder Management
|
|
|
|
# 3. Searching
|
|
|
|
# 4. Process Management
|
|
|
|
# 5. Networking
|
|
|
|
# 6. System Operations & Information
|
|
|
|
# 7. Date & Time Management
|
|
|
|
# 8. Web Development
|
|
|
|
# 9. Reminders & Notes
|
|
|
|
#
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# -----------------------------
|
|
|
|
# 1. MAKE TERMINAL BETTER
|
|
|
|
# -----------------------------
|
|
|
|
|
|
|
|
alias cp='cp -iv' # Preferred 'cp' implementation
|
|
|
|
alias mv='mv -iv' # Preferred 'mv' implementation
|
|
|
|
alias mkdir='mkdir -pv' # Preferred 'mkdir' implementation
|
|
|
|
alias ll='ls -lAFh' # Preferred 'ls' implementation
|
|
|
|
alias less='less -FSRXc' # Preferred 'less' implementation
|
|
|
|
alias nano='nano -W -$' # Preferred 'nano' implementation
|
|
|
|
alias wget='wget -c' # Preferred 'wget' implementation (resume download)
|
|
|
|
cd() { builtin cd "$@"; ll; } # Always list directory contents upon 'cd'
|
|
|
|
alias cd..='cd ../' # Go back 1 directory level (for fast typers)
|
|
|
|
alias ..='cd ../' # Go back 1 directory level
|
|
|
|
alias ...='cd ../../' # Go back 2 directory levels
|
|
|
|
alias .3='cd ../../../' # Go back 3 directory levels
|
|
|
|
alias .4='cd ../../../../' # Go back 4 directory levels
|
|
|
|
alias .5='cd ../../../../../' # Go back 5 directory levels
|
|
|
|
alias .6='cd ../../../../../../' # Go back 6 directory levels
|
|
|
|
alias dud='du -d 1 -h' # Short and human-readable file listing
|
|
|
|
alias duf='du -sh *' # Short and human-readable directory listing
|
|
|
|
alias ~="cd ~" # ~: Go Home
|
|
|
|
alias c='clear' # c: Clear terminal display
|
|
|
|
alias path='echo -e ${PATH//:/\\n}' # path: Echo all executable Paths
|
|
|
|
alias show_options='shopt' # Show_options: display bash options settings
|
|
|
|
alias fix_stty='stty sane' # fix_stty: Restore terminal settings when screwed up
|
|
|
|
alias cic='set completion-ignore-case On' # cic: Make tab-completion case-insensitive
|
|
|
|
alias h='history | grep $1' # h: Find an executed command in .bash_history
|
|
|
|
alias src='source ~/.bashrc' # src: Reload .bashrc file
|
|
|
|
mcd () { mkdir -p "$1" && cd "$1"; } # mcd: Makes new Dir and jumps inside
|
|
|
|
|
|
|
|
# lr: Full Recursive Directory Listing
|
|
|
|
# ------------------------------------------
|
|
|
|
alias lr='ls -R | grep ":$" | sed -e '\''s/:$//'\'' -e '\''s/[^-][^\/]*\//--/g'\'' -e '\''s/^/ /'\'' -e '\''s/-/|/'\'' | less'
|
|
|
|
|
|
|
|
# mans: Search manpage given in agument '1' for term given in argument '2' (case insensitive)
|
|
|
|
# displays paginated result with colored search terms and two lines surrounding each hit. Example: mans mplayer codec
|
|
|
|
# --------------------------------------------------------------------
|
|
|
|
mans () {
|
|
|
|
man $1 | grep -iC2 --color=always $2 | less
|
|
|
|
}
|
|
|
|
|
|
|
|
# showa: to remind yourself of an alias (given some part of it)
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v '^\s*$' | less -FSRXc ; }
|
|
|
|
|
|
|
|
|
|
|
|
# -------------------------------
|
|
|
|
# 2. FILE AND FOLDER MANAGEMENT
|
|
|
|
# -------------------------------
|
|
|
|
|
|
|
|
zipf () { zip -r "$1".zip "$1" ; } # zipf: To create a ZIP archive of a folder
|
|
|
|
alias numFiles='echo $(ls -1 | wc -l)' # numFiles: Count of non-hidden files in current dir
|
|
|
|
alias make1mb='truncate -s 1m ./1MB.dat' # make1mb: Creates a file of 1mb size (all zeros)
|
|
|
|
alias make5mb='truncate -s 5m ./5MB.dat' # make5mb: Creates a file of 5mb size (all zeros)
|
|
|
|
alias make10mb='truncate -s 10m ./10MB.dat' # make10mb: Creates a file of 10mb size (all zeros)
|
|
|
|
|
|
|
|
# extract: Extract most know archives with one command
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
extract () {
|
|
|
|
if [ -f $1 ] ; then
|
|
|
|
case $1 in
|
|
|
|
*.tar.bz2) tar xjf $1 ;;
|
|
|
|
*.tar.gz) tar xzf $1 ;;
|
|
|
|
*.bz2) bunzip2 $1 ;;
|
|
|
|
*.rar) unrar e $1 ;;
|
|
|
|
*.gz) gunzip $1 ;;
|
|
|
|
*.tar) tar xf $1 ;;
|
|
|
|
*.tbz2) tar xjf $1 ;;
|
|
|
|
*.tgz) tar xzf $1 ;;
|
|
|
|
*.zip) unzip $1 ;;
|
|
|
|
*.Z) uncompress $1 ;;
|
|
|
|
*.7z) 7z x $1 ;;
|
|
|
|
*) echo "'$1' cannot be extracted via extract()" ;;
|
|
|
|
esac
|
|
|
|
else
|
|
|
|
echo "'$1' is not a valid file"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------
|
|
|
|
# 3. SEARCHING
|
|
|
|
# ---------------------------
|
|
|
|
|
|
|
|
alias qfind="find . -name " # qfind: Quickly search for file
|
|
|
|
ff () { /usr/bin/find . -name "$@" ; } # ff: Find file under the current directory
|
|
|
|
ffs () { /usr/bin/find . -name "$@"'*' ; } # ffs: Find file whose name starts with a given string
|
|
|
|
ffe () { /usr/bin/find . -name '*'"$@" ; } # ffe: Find file whose name ends with a given string
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------
|
|
|
|
# 4. PROCESS MANAGEMENT
|
|
|
|
# ---------------------------
|
|
|
|
|
|
|
|
# findPid: find out the pid of a specified process
|
|
|
|
# -----------------------------------------------------
|
|
|
|
# Note that the command name can be specified via a regex
|
|
|
|
# E.g. findPid '/d$/' finds pids of all processes with names ending in 'd'
|
|
|
|
# Without the 'sudo' it will only find processes of the current user
|
|
|
|
# -----------------------------------------------------
|
|
|
|
findPid () { lsof -t -c "$@" ; }
|
|
|
|
|
|
|
|
# memHogsTop, memHogsPs: Find memory hogs
|
|
|
|
# -----------------------------------------------------
|
|
|
|
alias memHogsTop='top -l 1 -o rsize | head -20'
|
|
|
|
alias memHogsPs='ps wwaxm -o pid,stat,vsize,rss,time,command | head -10'
|
|
|
|
|
|
|
|
# cpuHogs: Find CPU hogs
|
|
|
|
# -----------------------------------------------------
|
|
|
|
alias cpu_hogs='ps wwaxr -o pid,stat,%cpu,time,command | head -10'
|
|
|
|
|
|
|
|
# topForever: Continual 'top' listing (every 10 seconds)
|
|
|
|
# -----------------------------------------------------
|
|
|
|
alias topForever='top -l 9999999 -s 10 -o cpu'
|
|
|
|
|
|
|
|
# ttop: Recommended 'top' invocation to minimize resources
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
# Taken from this macosxhints article
|
|
|
|
# http://www.macosxhints.com/article.php?story=20060816123853639
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
alias ttop="top -R -F -s 10 -o rsize"
|
|
|
|
|
|
|
|
# my_ps: List processes owned by my user:
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------
|
|
|
|
# 5. NETWORKING
|
|
|
|
# ---------------------------
|
|
|
|
|
|
|
|
alias myip='curl ifconfig.co' # myip: Public facing IP Address
|
|
|
|
alias netCons='lsof -i' # netCons: Show all open TCP/IP sockets
|
|
|
|
alias lsock='sudo /usr/sbin/lsof -i -P' # lsock: Display open sockets
|
|
|
|
alias lsockU='sudo /usr/sbin/lsof -nP | grep UDP' # lsockU: Display only open UDP sockets
|
|
|
|
alias lsockT='sudo /usr/sbin/lsof -nP | grep TCP' # lsockT: Display only open TCP sockets
|
|
|
|
alias ipInfo0='ifconfig getpacket en0' # ipInfo0: Get info on connections for en0
|
|
|
|
alias ipInfo1='ifconfig getpacket en1' # ipInfo1: Get info on connections for en1
|
|
|
|
alias openPorts='sudo lsof -i | grep LISTEN' # openPorts: All listening connections
|
|
|
|
alias showBlocked='sudo ipfw list' # showBlocked: All ipfw rules inc/ blocked IPs
|
|
|
|
|
|
|
|
# ii: display useful host related informaton
|
|
|
|
# -------------------------------------------------------------------
|
|
|
|
ii() {
|
|
|
|
echo -e "\nYou are logged on ${red}$HOST"
|
|
|
|
echo -e "\nAdditionnal information:$NC " ; uname -a
|
|
|
|
echo -e "\n${red}Users logged on:$NC " ; w -h
|
|
|
|
echo -e "\n${red}Current date :$NC " ; date
|
|
|
|
echo -e "\n${red}Machine stats :$NC " ; uptime
|
|
|
|
#echo -e "\n${red}Current network location :$NC " ; scselect
|
|
|
|
echo -e "\n${red}Public facing IP Address :$NC " ;myip
|
|
|
|
#echo -e "\n${red}DNS Configuration:$NC " ; scutil --dns
|
|
|
|
echo
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------
|
|
|
|
# 6. SYSTEMS OPERATIONS & INFORMATION
|
|
|
|
# ---------------------------------------
|
|
|
|
|
|
|
|
alias mountReadWrite='/sbin/mount -uw /' # mountReadWrite: For use when booted into single-user
|
|
|
|
alias perm='stat --printf "%a %n \n "' # perm: Show permission of target in number
|
|
|
|
alias 000='chmod 000' # ---------- (no fucking permissions)
|
|
|
|
alias 640='chmod 640' # -rw-r----- (user: rw, group: r, other: -)
|
|
|
|
alias 644='chmod 644' # -rw-r--r-- (user: rw, group: r, other: -)
|
|
|
|
alias 755='chmod 755' # -rwxr-xr-x (user: rwx, group: rx, other: x)
|
|
|
|
alias 775='chmod 775' # -rwxrwxr-x (user: rwx, group: rwx, other: rx)
|
|
|
|
alias mx='chmod a+x' # ---x--x--x (user: --x, group: --x, other: --x)
|
|
|
|
alias ux='chmod u+x' # ---x------ (user: --x, group: -, other: -)
|
|
|
|
|
|
|
|
# batch_chmod: Batch chmod for all files & sub-directories in the current one
|
|
|
|
# -------------------------------------------------------------------
|
|
|
|
batch_chmod()
|
|
|
|
{
|
|
|
|
e_header "Restore all files and sub-directories permissions..."
|
|
|
|
progress 10 "Re-index file list..."
|
|
|
|
find . -type d -print0 | xargs -0 chmod 0755 && progress 40 "[1/2]"
|
|
|
|
find . -type f -print0 | xargs -0 chmod 0644 && progress 90 "[2/2]"
|
|
|
|
progress 100 "Done!"
|
|
|
|
echo "$(tput sgr0)"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------
|
|
|
|
# 7. DATE & TIME MANAGEMENT
|
|
|
|
# ---------------------------------------
|
|
|
|
alias bdate="date '+%a, %b %d %Y %T %Z'"
|
|
|
|
alias cal='cal -3'
|
|
|
|
alias da='date "+%Y-%m-%d %A %T %Z"'
|
|
|
|
alias daysleft='echo "There are $(($(date +%j -d"Dec 31, $(date +%Y)")-$(date +%j))) left in year $(date +%Y)."'
|
|
|
|
alias epochtime='date +%s'
|
|
|
|
alias mytime='date +%H:%M:%S'
|
|
|
|
alias secconvert='date -d@1234567890'
|
|
|
|
alias stamp='date "+%Y%m%d%a%H%M"'
|
|
|
|
alias timestamp='date "+%Y%m%dT%H%M%S"'
|
|
|
|
alias today='date +"%A, %B %-d, %Y"'
|
|
|
|
alias weeknum='date +%V'
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------
|
|
|
|
# 8. WEB DEVELOPMENT
|
|
|
|
# ---------------------------------------
|
|
|
|
|
|
|
|
alias apacheEdit='sudo edit /etc/httpd/httpd.conf' # apacheEdit: Edit httpd.conf
|
|
|
|
alias apacheRestart='sudo apachectl graceful' # apacheRestart: Restart Apache
|
|
|
|
alias editHosts='sudo edit /etc/hosts' # editHosts: Edit /etc/hosts file
|
|
|
|
alias herr='tail /var/log/httpd/error_log' # herr: Tails HTTP error logs
|
|
|
|
alias apacheLogs="less +F /var/log/apache2/error_log" # Apachelogs: Shows apache error logs
|
|
|
|
httpHeaders () { /usr/bin/curl -I -L $@ ; } # httpHeaders: Grabs headers from web page
|
|
|
|
|
|
|
|
# httpDebug: Download a web page and show info on what took time
|
|
|
|
# -------------------------------------------------------------------
|
|
|
|
httpDebug () { /usr/bin/curl $@ -o /dev/null -w "dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n" ; }
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------
|
|
|
|
# 9. REMINDERS & NOTES
|
|
|
|
# ---------------------------------------
|
|
|
|
|
|
|
|
# remove_disk: spin down unneeded disk
|
|
|
|
# ---------------------------------------
|
|
|
|
# diskutil eject /dev/disk1s3
|
|
|
|
|
|
|
|
# to change the password on an encrypted disk image:
|
|
|
|
# ---------------------------------------
|
|
|
|
# hdiutil chpass /path/to/the/diskimage
|
|
|
|
|
|
|
|
# to mount a read-only disk image as read-write:
|
|
|
|
# ---------------------------------------
|
|
|
|
# hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify
|
|
|
|
|
|
|
|
# mounting a removable drive (of type msdos or hfs)
|
|
|
|
# ---------------------------------------
|
|
|
|
# mkdir /Volumes/Foo
|
|
|
|
# ls /dev/disk* to find out the device to use in the mount command)
|
|
|
|
# mount -t msdos /dev/disk1s1 /Volumes/Foo
|
|
|
|
# mount -t hfs /dev/disk1s1 /Volumes/Foo
|
|
|
|
|
|
|
|
# to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil
|
|
|
|
# ---------------------------------------
|
|
|
|
# e.g.: mkfile 10m 10MB.dat
|
|
|
|
# e.g.: hdiutil create -size 10m 10MB.dmg
|
|
|
|
# the above create files that are almost all zeros - if random bytes are desired
|
|
|
|
# then use: ~/Dev/Perl/randBytes 1048576 > 10MB.dat
|