Command Line Interfaces

More of a reference for me than anyone else, but I use these commands quite frequently.


Useful shell aliases

# basic shell aliases
alias x="exit"
alias sl="ls"
alias dir="ls"
alias cls="clear"
alias cd..="cd .."
alias please="sudo"
alias fucking="sudo"
alias rl="echo '* shell profile reloaded!'; source ~/.bash_profile"
alias :q="echo 'this isnt VIM, dummy...'; sleep 1; exit"

# git aliases
alias gs="git status"
alias gl="git log --graph --pretty=format:'%Cred%h%Creset %Cgreen[%cr]%C(yellow)%d%Creset %s' --abbrev-commit"

# path helpers
export WEBDIR=~/code/sites
alias webdir="cd $WEBDIR" # used in other places, hence the export
alias nginx="cd /etc/nginx"

# irritate Linux fanboys
alias dos="PS1='C:\w/>'"; dos;

Allow ctrl+left and ctrl+right to jump words in the terminal

# place commands in ~/.inputrc
"\e[1;5C": forward-word      # ctrl+r_arrow
"\e[1;5D": backward-word     # ctrl+l_arrow
"\e[1;6C": end-of-line       # ctrl+shift+r_arrow
"\e[1;6D": beginning-of-line # ctrl+shift+l_arrow

Set my PS1 prompt to something useful

PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]\n\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[0m\]\n> '
username@machine ~/file/path/goes/here
> (cursor)

Move all visible AND hidden files to a new directory

mv /path/subfolder/{.,}* /path/

Generate a 12-character left-handed password

# password starts with lowercase alpha, excludes special characters that cause problems like $ and !
echo $(</dev/urandom tr -dc 'qwertasdfgzxcvb' | head -c 1)$(</dev/urandom tr -dc '12345@#%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c 11)

Run a single command as another user

# obviously change www-data to whatever user you need
webuser() { sudo -H -u www-data bash -c "$1 $2 $3 $4"; }
alias web=webuser

# usage example
web mkdir images

List all users with possible shell access

tail /etc/passwd | grep '\/sh\|bash\|dash\|zsh\|ksh\|tmux\|screen'

Find the 20 newest files in a directory

find . -printf "%T@ %Tx %TX %p\n" | sort -n -r | head -20

List all (only) filenames in a directory

list () {
  ls --format=single-column | egrep -v '\.'

Quick scan for potentially nasty code

find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream_socket_client|exec|system|passthru|eval|base64_) *\(" --color

Recursively replace text between two strings in all files

# Remove all text between /*STRING_1 and STRING_2*/ ... fucking hackers...
find . -type f -exec sed -i -e 's/\/\*STRING_1.*STRING_2\*\///i' {} +

Pipe ls search result to vi

vi $(ls | grep QUERY | awk '{ print $7 }')

Deploy a composer package in place

# install specific package and version in current directory
composer create-project laravel/laravel . 5.0 --prefer-dist

Random server power and service commands

sudo poweroff         # shut 'er down!
sudo shutdown -r now  # restart the system

sudo service nginx restart
sudo service apache2 restart


Install WordPress in about 10 seconds

# deploy the wordpress files

cd installdir
rm *
tar -xvzf latest.tar.gz
mv wordpress/{.,}* .
rmdir wordpress
rm latest.tar.gz
mv wp-config.sample.php ../wp-config.php
vi ../wp-config.php

# set proper permissions
sudo chown -R www-data:www-data *
sudo find . -type f -exec chmod 664 {} +
sudo find . -type d -exec chmod 755 {} +
sudo chmod 600 wp-config.php

Add SSH key to remote host

# assuming you already have your local public key in ~/.ssh/

[remote] $ mkdir ~/.ssh
[remote] $ touch ~/.ssh/authorized_keys
[remote] $ chmod 700 ~/.ssh
[remote] $ chmod 640 ~/.ssh/authorized
[local] $ cat ~/.ssh/ | ssh username@hostname 'cat >> ~/.ssh/authorized_keys'

I can never remember all the tar flags

# c - create a new archive
# v - verbosely list files which are processed
# z - filter the archive through gzip
# f - following is the archive file name
# x - extract files from archive 

# zip things up
$ tar cvzf archive_name.tar.gz dirname/

# unzip everything
$ tar xvfz archive_name.tar.gz

My preferred directory formatting

# -l : long format
# -B : ignore entries ending with ~ (ignore backups)
# -q : print ? instead of non-graphic characters
# --si : Sizes in human-readable format ^1024
# --color=auto : color files # --group-directories-first : c'mon, really? 
alias ls="ls -lBq --si --color=always --group-directories-first"

# don't have --group-directories-first?
alias ls='ls -lBq --color=always --si | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"'

Handy extraction abstraction

# function Extract for common file formats
# from

function extract {
  if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
    return 1
    for n in $@
      if [ -f "$n" ] ; then
        case "${n%,}" in
                       tar xvf "$n"       ;;
          *.lzma)      unlzma ./"$n"      ;;
          *.bz2)       bunzip2 ./"$n"     ;;
          *.rar)       unrar x -ad ./"$n" ;;
          *.gz)        gunzip ./"$n"      ;;
          *.zip)       unzip ./"$n"       ;;
          *.z)         uncompress ./"$n"  ;;
                       7z x ./"$n"        ;;
          *.xz)        unxz ./"$n"        ;;
          *.exe)       cabextract ./"$n"  ;;
                       echo "extract: '$n' - unknown archive method"
                       return 1
        echo "'$n' - file does not exist"
        return 1

Function: seek() – Scan directory for string instances

# useful for finding code snippets # search files recursively # replace all tab characters # replace multiple spaces # convert : to | # prefix line with > 
seek () {
  if [ -z "$1" ]
    echo "USAGE: seek "
    grep --color=always -r -i -n "$*" * | sed -e 's/\x09//g' | sed -e 's/ \+//g' | sed -e 's/\x1b\[K:/\x1b\[K | /g' | sed -e 's/^/ > /g'

MySQL Commands

Create a new database and user with appropriate permissions for an application

# run as root
mysql -e "CREATE DATABASE \`${appname}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;"
mysql -e "CREATE USER '${appname}'@'localhost' IDENTIFIED BY '${password}';"
mysql -e "GRANT ALL ON \`${appname}\`.* TO '${appname}'@'localhost';"

(old) Create DB and user from within MySQL

# create database

# to create
CREATE USER 'appname'@'localhost' IDENTIFIED BY 'p4ssw0rd';

# to confirm
SHOW GRANTS FOR 'appname'@'localhost';

Show all users in MySQL

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

How big are the tables in my database?

SET @dbname = "my-database";
SELECT table_name AS "Table", 
       ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" 
FROM information_schema.TABLES 
WHERE table_schema = @dbname 
ORDER BY (data_length + index_length) ASC;

How big are all my databases?

SELECT table_schema AS "Database", 
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" 
FROM information_schema.TABLES 
WHERE table_schema NOT IN ("mysql", "sys", "information_schema", "performance_schema") 
GROUP BY table_schema;

Windows Commands

Autoload command aliases from %USERPROFILE%/alias.cmd

Create a new registry entry in HKEY_CURRENT_USER/Software/Microsoft/Command Processor

Type: String
Name: AutoRun
Value: %USERPROFILE%\alias.cmd

Create a file in your %USERPROFILE% directory matching the above (alias.cmd)

@echo off
doskey x=exit
doskey ls=dir
doskey killall=taskkill /F /IM $* # killall chrome.exe