The beginning of a list of any functions I have created or found and deem useful:
This function will allow you to type “up ANY_NUMBER” and move that many directories up in the current directory tree you are in. If you you do not specify a number and instead just type ‘up’ by itself you will automatically go up just one directory.
function up () { if (( $#> 0 )); then COUNTER=$1; else COUNTER=1; fi; while (( ${COUNTER}> 0 )); do UP="${UP}../"; (( COUNTER=${COUNTER}-1 )); done; echo "cd $UP"; cd $UP; UP='' }
Some servers don’t have ‘watch’ installed so I’ve made my own function to replicate it’s basic functionality (updated to work with pipes!)
function mywatch () { while true do clear date +'%D %r' echo '' cmd=`echo $@` #echo "Command is '$cmd'" last=`echo $@ | awk {'print $NF'}` num='^[0-9]+$' if [[ $last =~ $num ]]; then cmd=`echo $cmd | sed "s^$last^^g"` eval "$cmd" sleep $last else eval "$cmd" sleep 2 fi clear done }
Useage:
mywatch "ls -al" 5
If a second parameter ($2) is not supplied (in this case 5) then 2 will be used and your watch will refresh every 2 seconds.
Easily locate problem directories when space is low on a server. Add the following function to your profile (.profile / .bashrc / etc)
function spaceHog () { du -k | sort -n | awk ' BEGIN { split("KB,MB,GB,TB", Units, ","); } { u = 1; while ($1>= 1024) { $1 = $1 / 1024; u += 1; } $1 = sprintf("%.1f %s", $1, Units[u]); print $0; }' }
Useage:
[17:25:51][user@server][ ~ ] [$]> spaceHog | tail -10 # To show the 10 largest, change this number as desired. 247.5 MB ./bin 247.8 MB ./.cache/google-chrome/Default 247.8 MB ./.cache/google-chrome 283.4 MB ./.cache 293.2 MB ./.wine/drive_c/Program Files (x86) 423.5 MB ./Downloads 653.6 MB ./IOS_APPS 655.1 MB ./.wine/drive_c 658.2 MB ./.wine 2.7 GB .
Delete (rm) a file by it’s inode number
Occassionally I will (or others will) run a command that ends up accidentally creating some goofy named files such as ‘?[01’. This is actually a character so you can’t just type it in to delete it. For this you can lookup the file name by it’s inode and then delete it.
You can do an ls with an -i option to get the inodes, for example:
[$]> ls -ali total 8 295188 drwxr-xr-x 2 sasowner sas 4096 Dec 30 11:26 . 295064 drwx------ 23 sasowner sas 4096 Dec 30 11:26 .. 295406 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file1 295407 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file2 295408 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file3 295409 -rw-r--r-- 1 sasowner sas 0 Dec 30 11:26 file4
You could then follow this up with a command such as:
[$]> find . -inum 295409 -exec rm {} \;
However, you probably won’t use this command often enough to remember it unless you are regularly familiar with the find command. Instead, I’ve create the following simple function:
function rmi () { find . -inum $1 -exec rm -i {} \; }
Then simply type the following after getting the inode of the file
[$]> rmi ######