Skip to content

Instantly share code, notes, and snippets.

@sethbergman
Last active December 5, 2018 18:23
Show Gist options
  • Save sethbergman/f37f895d8ad3a72f6920b847234908db to your computer and use it in GitHub Desktop.
Save sethbergman/f37f895d8ad3a72f6920b847234908db to your computer and use it in GitHub Desktop.

Revisions

  1. sethbergman revised this gist Dec 5, 2018. 1 changed file with 0 additions and 3 deletions.
    3 changes: 0 additions & 3 deletions kubernetes-tips.sh
    Original file line number Diff line number Diff line change
    @@ -99,9 +99,6 @@ kubectl delete -f ./my-manifest.yaml
    ##############################################################################


    # Deploy Heapster from Github repository
    kubectl create -f deploy/kube-config/standalone/

    # Show metrics for nodes
    kubectl top node

  2. sethbergman revised this gist Dec 5, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion bash-tips.sh
    Original file line number Diff line number Diff line change
    @@ -384,7 +384,7 @@ cd; nano .bash_profile
    # to quickly go to a specific directory
    cd; nano .bashrc
    > shopt -s cdable_vars
    > export websites="/Users/mac/Documents/websites"
    > export websites="/Users/username/Documents/websites"

    source .bashrc
    cd $websites
  3. sethbergman revised this gist Aug 7, 2018. 2 changed files with 205 additions and 0 deletions.
    87 changes: 87 additions & 0 deletions docker-tips.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,87 @@
    ##############################################################################
    # DOCKER
    ##############################################################################


    docker build -t friendlyname . # Create image using this directory's Dockerfile
    docker run -p 4000:80 friendlyname # Run "friendlyname" mapping port 4000 to 80
    docker run -d -p 4000:80 friendlyname # Same thing, but in detached mode
    docker exec -it [container-id] bash # Enter a running container
    docker ps # See a list of all running containers
    docker stop <hash> # Gracefully stop the specified container
    docker ps -a # See a list of all containers, even the ones not running
    docker kill <hash> # Force shutdown of the specified container
    docker rm <hash> # Remove the specified container from this machine
    docker rm $(docker ps -a -q) # Remove all containers from this machine
    docker images -a # Show all images on this machine
    docker rmi <imagename> # Remove the specified image from this machine
    docker rmi $(docker images -q) # Remove all images from this machine
    docker login # Log in this CLI session using your Docker credentials
    docker tag <image> username/repository:tag # Tag <image> for upload to registry
    docker push username/repository:tag # Upload tagged image to registry
    docker run username/repository:tag # Run image from a registry
    docker system prune # Remove all unused containers, networks, images (both dangling and unreferenced), and optionally, volumes. (Docker 17.06.1-ce and superior)
    docker system prune -a # Remove all unused containers, networks, images not just dangling ones (Docker 17.06.1-ce and superior)


    ##############################################################################
    # DOCKER COMPOSE
    ##############################################################################


    docker-compose up # Create and start containers
    docker-compose up -d # Create and start containers in detached mode
    docker-compose down # Stop and remove containers, networks, images, and volumes
    docker-compose logs # View output from containers
    docker-compose restart # Restart all service
    docker-compose pull # Pull all image service
    docker-compose build # Build all image service
    docker-compose config # Validate and view the Compose file
    docker-compose scale <service_name>=<replica> # Scale special service(s)
    docker-compose top # Display the running processes


    ##############################################################################
    # DOCKER SERVICES
    ##############################################################################


    docker service create <options> <image> <command> # Create new service
    docker service inspect --pretty <service_name> # Display detailed information Service(s)
    docker service ls # List Services
    docker service ps # List the tasks of Services
    docker service scale <service_name>=<replica> # Scale special service(s)
    docker service update <options> <service_name> # Update Service options


    ##############################################################################
    # DOCKER STACK
    ##############################################################################


    docker stack ls # List all running applications on this Docker host
    docker stack deploy -c <composefile> <appname> # Run the specified Compose file
    docker stack services <appname> # List the services associated with an app
    docker stack ps <appname> # List the running containers associated with an app
    docker stack rm <appname> # Tear down an application


    ##############################################################################
    # DOCKER MACHINE
    ##############################################################################


    docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
    docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
    docker-machine env myvm1 # View basic information about your node
    docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm
    docker-machine ssh myvm1 "docker node inspect <node ID>" # Inspect a node
    docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token
    docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end
    docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm
    docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
    docker-machine start myvm1 # Start a VM that is currently not running
    docker-machine stop $(docker-machine ls -q) # Stop all running VMs
    docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
    docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir
    docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app
    118 changes: 118 additions & 0 deletions kubernetes-tips.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,118 @@

    ##############################################################################
    # KUBERNETES
    # PDF: https://sematext.com/kubernetes-cheat-sheet/
    # WEBSITE: https://kubernetes.io/
    # DOCUMENTATION: https://kubernetes.io/docs/home
    ##############################################################################


    ##############################################################################
    # CLIENT CONFIGURATION
    ##############################################################################


    # Setup autocomplete in bash; bash-completion package should be installed first
    source <(kubectl completion bash)

    # View Kubernetes config
    kubectl config view

    # View specific config items by json path
    kubectl config view -o jsonpath='{.users[?(@.name == "k8s")].user.password}'

    # Set credentials for foo.kuberntes.com
    kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword


    ##############################################################################
    # VIEWING, FINDING RESOURCES
    ##############################################################################


    # List all services in the namespace
    kubectl get services

    # List all pods in all namespaces in wide format
    kubectl get pods -o wide --all-namespaces

    # List all pods in json (or yaml) format
    kubectl get pods -o json

    # Describe resource details (node, pod, svc)
    kubectl describe nodes my-node

    # List services sorted by name
    kubectl get services --sort-by=.metadata.name

    # List pods sorted by restart count
    kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

    # Rolling update pods for frontend-v1
    kubectl rolling-update frontend-v1 -f frontend-v2.json

    # Scale a replicaset named 'foo' to 3
    kubectl scale --replicas=3 rs/foo

    # Scale a resource specified in "foo.yaml" to 3
    kubectl scale --replicas=3 -f foo.yaml

    # Execute a command in every pod / replica
    for i in 0 1; do kubectl exec foo-$i -- sh -c 'echo $(hostname) > /usr/share/nginx/html/index.html'; done


    ##############################################################################
    # MANAGE RESOURCES
    ##############################################################################


    # Get documentation for pod or service
    kubectl explain pods,svc

    # Create resource(s) like pods, services or daemonsets
    kubectl create -f ./my-manifest.yaml

    # Apply a configuration to a resource
    kubectl apply -f ./my-manifest.yaml

    # Start a single instance of Nginx
    kubectl run nginx --image=nginx

    # Create a secret with several keys
    cat <<EOF | kubectl create -f -
    apiVersion: v1
    kind: Secret
    metadata:
    name: mysecret
    type: Opaque
    data:
    password: $(echo "s33msi4" | base64)
    username: $(echo "jane"| base64)
    EOF

    # Delete a resource
    kubectl delete -f ./my-manifest.yaml


    ##############################################################################
    # MONITORING & LOGGING
    ##############################################################################


    # Deploy Heapster from Github repository
    kubectl create -f deploy/kube-config/standalone/

    # Show metrics for nodes
    kubectl top node

    # Show metrics for pods
    kubectl top pod

    # Show metrics for a given pod and its containers
    kubectl top pod pod_name --containers

    # Dump pod logs (stdout)
    kubectl logs pod_name

    # Stream pod container logs (stdout, multi-container case)
    kubectl logs -f pod_name -c my-container
  4. sethbergman created this gist Aug 7, 2018.
    428 changes: 428 additions & 0 deletions bash-tips.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,428 @@
    #!/bin/bash
    ##############################################################################
    # SHORTCUTS
    ##############################################################################


    CTRL+A # move to beginning of line
    CTRL+B # moves backward one character
    CTRL+C # halts the current command
    CTRL+D # deletes one character backward or logs out of current session, similar to exit
    CTRL+E # moves to end of line
    CTRL+F # moves forward one character
    CTRL+G # aborts the current editing command and ring the terminal bell
    CTRL+J # same as RETURN
    CTRL+K # deletes (kill) forward to end of line
    CTRL+L # clears screen and redisplay the line
    CTRL+M # same as RETURN
    CTRL+N # next line in command history
    CTRL+O # same as RETURN, then displays next line in history file
    CTRL+P # previous line in command history
    CTRL+R # searches backward
    CTRL+S # searches forward
    CTRL+T # transposes two characters
    CTRL+U # kills backward from point to the beginning of line
    CTRL+V # makes the next character typed verbatim
    CTRL+W # kills the word behind the cursor
    CTRL+X # lists the possible filename completions of the current word
    CTRL+Y # retrieves (yank) last item killed
    CTRL+Z # stops the current command, resume with fg in the foreground or bg in the background

    ALT+B # moves backward one word
    ALT+D # deletes next word
    ALT+F # moves forward one word

    DELETE # deletes one character backward
    !! # repeats the last command
    exit # logs out of current session


    ##############################################################################
    # BASH BASICS
    ##############################################################################

    env # displays all environment variables

    echo $SHELL # displays the shell you're using
    echo $BASH_VERSION # displays bash version

    bash # if you want to use bash (type exit to go back to your previously opened shell)
    whereis bash # finds out where bash is on your system
    which bash # finds out which program is executed as 'bash' (default: /bin/bash, can change across environments)

    clear # clears content on window (hide displayed lines)


    ##############################################################################
    # FILE COMMANDS
    ##############################################################################


    ls # lists your files in current directory, ls <dir> to print files in a specific directory
    ls -l # lists your files in 'long format', which contains the exact size of the file, who owns the file and who has the right to look at it, and when it was last modified
    ls -a # lists all files, including hidden files (name beginning with '.')
    ln -s <filename> <link> # creates symbolic link to file
    touch <filename> # creates or updates (edit) your file
    cat <filename> # prints file raw content (will not be interpreted)
    any_command > <filename> # '>' is used to perform redirections, it will set any_command's stdout to file instead of "real stdout" (generally /dev/stdout)
    more <filename> # shows the first part of a file (move with space and type q to quit)
    head <filename> # outputs the first lines of file (default: 10 lines)
    tail <filename> # outputs the last lines of file (useful with -f option) (default: 10 lines)
    vim <filename> # opens a file in VIM (VI iMproved) text editor, will create it if it doesn't exist
    mv <filename1> <dest> # moves a file to destination, behavior will change based on 'dest' type (dir: file is placed into dir; file: file will replace dest (tip: useful for renaming))
    cp <filename1> <dest> # copies a file
    rm <filename> # removes a file
    diff <filename1> <filename2> # compares files, and shows where they differ
    wc <filename> # tells you how many lines, words and characters there are in a file. Use -lwc (lines, word, character) to ouput only 1 of those informations
    chmod -options <filename> # lets you change the read, write, and execute permissions on your files (more infos: SUID, GUID)
    gzip <filename> # compresses files using gzip algorithm
    gunzip <filename> # uncompresses files compressed by gzip
    gzcat <filename> # lets you look at gzipped file without actually having to gunzip it
    lpr <filename> # prints the file
    lpq # checks out the printer queue
    lprm <jobnumber> # removes something from the printer queue
    genscript # converts plain text files into postscript for printing and gives you some options for formatting
    dvips <filename> # prints .dvi files (i.e. files produced by LaTeX)
    grep <pattern> <filenames> # looks for the string in the files
    grep -r <pattern> <dir> # search recursively for pattern in directory


    ##############################################################################
    # DIRECTORY COMMANDS
    ##############################################################################


    mkdir <dirname> # makes a new directory
    cd # changes to home
    cd <dirname> # changes directory
    pwd # tells you where you currently are


    ##############################################################################
    # SSH, SYSTEM INFO & NETWORK COMMANDS
    ##############################################################################


    ssh user@host # connects to host as user
    ssh -p <port> user@host # connects to host on specified port as user
    ssh-copy-id user@host # adds your ssh key to host for user to enable a keyed or passwordless login

    whoami # returns your username
    passwd # lets you change your password
    quota -v # shows what your disk quota is
    date # shows the current date and time
    cal # shows the month's calendar
    uptime # shows current uptime
    w # displays whois online
    finger <user> # displays information about user
    uname -a # shows kernel information
    man <command> # shows the manual for specified command
    df # shows disk usage
    du <filename> # shows the disk usage of the files and directories in filename (du -s give only a total)
    last <yourUsername> # lists your last logins
    ps -u yourusername # lists your processes
    kill <PID> # kills the processes with the ID you gave
    killall <processname> # kill all processes with the name
    top # displays your currently active processes
    bg # lists stopped or background jobs ; resume a stopped job in the background
    fg # brings the most recent job in the foreground
    fg <job> # brings job to the foreground

    ping <host> # pings host and outputs results
    whois <domain> # gets whois information for domain
    dig <domain> # gets DNS information for domain
    dig -x <host> # reverses lookup host
    wget <file> # downloads file


    ##############################################################################
    # VARIABLES
    ##############################################################################


    varname=value # defines a variable
    varname=value command # defines a variable to be in the environment of a particular subprocess
    echo $varname # checks a variable's value
    echo $$ # prints process ID of the current shell
    echo $! # prints process ID of the most recently invoked background job
    echo $? # displays the exit status of the last command
    export VARNAME=value # defines an environment variable (will be available in subprocesses)

    array[0]=valA # how to define an array
    array[1]=valB
    array[2]=valC
    array=([2]=valC [0]=valA [1]=valB) # another way
    array=(valA valB valC) # and another

    ${array[i]} # displays array's value for this index. If no index is supplied, array element 0 is assumed
    ${#array[i]} # to find out the length of any element in the array
    ${#array[@]} # to find out how many values there are in the array

    declare -a # the variables are treaded as arrays
    declare -f # uses function names only
    declare -F # displays function names without definitions
    declare -i # the variables are treaded as integers
    declare -r # makes the variables read-only
    declare -x # marks the variables for export via the environment

    ${varname:-word} # if varname exists and isn't null, return its value; otherwise return word
    ${varname:=word} # if varname exists and isn't null, return its value; otherwise set it word and then return its value
    ${varname:?message} # if varname exists and isn't null, return its value; otherwise print varname, followed by message and abort the current command or script
    ${varname:+word} # if varname exists and isn't null, return word; otherwise return null
    ${varname:offset:length} # performs substring expansion. It returns the substring of $varname starting at offset and up to length characters

    ${variable#pattern} # if the pattern matches the beginning of the variable's value, delete the shortest part that matches and return the rest
    ${variable##pattern} # if the pattern matches the beginning of the variable's value, delete the longest part that matches and return the rest
    ${variable%pattern} # if the pattern matches the end of the variable's value, delete the shortest part that matches and return the rest
    ${variable%%pattern} # if the pattern matches the end of the variable's value, delete the longest part that matches and return the rest
    ${variable/pattern/string} # the longest match to pattern in variable is replaced by string. Only the first match is replaced
    ${variable//pattern/string} # the longest match to pattern in variable is replaced by string. All matches are replaced

    ${#varname} # returns the length of the value of the variable as a character string

    *(patternlist) # matches zero or more occurrences of the given patterns
    +(patternlist) # matches one or more occurrences of the given patterns
    ?(patternlist) # matches zero or one occurrence of the given patterns
    @(patternlist) # matches exactly one of the given patterns
    !(patternlist) # matches anything except one of the given patterns

    $(UNIX command) # command substitution: runs the command and returns standard output


    ##############################################################################
    # FUNCTIONS
    ##############################################################################


    # The function refers to passed arguments by position (as if they were positional parameters), that is, $1, $2, and so forth.
    # $@ is equal to "$1" "$2"... "$N", where N is the number of positional parameters. $# holds the number of positional parameters.


    function functname() {
    shell commands
    }

    unset -f functname # deletes a function definition
    declare -f # displays all defined functions in your login session


    ##############################################################################
    # FLOW CONTROLS
    ##############################################################################


    statement1 && statement2 # and operator
    statement1 || statement2 # or operator

    -a # and operator inside a test conditional expression
    -o # or operator inside a test conditional expression

    # STRINGS

    str1 = str2 # str1 matches str2
    str1 != str2 # str1 does not match str2
    str1 < str2 # str1 is less than str2 (alphabetically)
    str1 > str2 # str1 is greater than str2 (alphabetically)
    -n str1 # str1 is not null (has length greater than 0)
    -z str1 # str1 is null (has length 0)

    # FILES

    -a file # file exists
    -d file # file exists and is a directory
    -e file # file exists; same -a
    -f file # file exists and is a regular file (i.e., not a directory or other special type of file)
    -r file # you have read permission
    -s file # file exists and is not empty
    -w file # your have write permission
    -x file # you have execute permission on file, or directory search permission if it is a directory
    -N file # file was modified since it was last read
    -O file # you own file
    -G file # file's group ID matches yours (or one of yours, if you are in multiple groups)
    file1 -nt file2 # file1 is newer than file2
    file1 -ot file2 # file1 is older than file2

    # NUMBERS

    -lt # less than
    -le # less than or equal
    -eq # equal
    -ge # greater than or equal
    -gt # greater than
    -ne # not equal

    if condition
    then
    statements
    [elif condition
    then statements...]
    [else
    statements]
    fi

    for x in {1..10}
    do
    statements
    done

    for name [in list]
    do
    statements that can use $name
    done

    for (( initialisation ; ending condition ; update ))
    do
    statements...
    done

    case expression in
    pattern1 )
    statements ;;
    pattern2 )
    statements ;;
    esac

    select name [in list]
    do
    statements that can use $name
    done

    while condition; do
    statements
    done

    until condition; do
    statements
    done

    ##############################################################################
    # COMMAND-LINE PROCESSING CYCLE
    ##############################################################################


    # The default order for command lookup is functions, followed by built-ins, with scripts and executables last.
    # There are three built-ins that you can use to override this order: `command`, `builtin` and `enable`.

    command # removes alias and function lookup. Only built-ins and commands found in the search path are executed
    builtin # looks up only built-in commands, ignoring functions and commands found in PATH
    enable # enables and disables shell built-ins

    eval # takes arguments and run them through the command-line processing steps all over again


    ##############################################################################
    # INPUT/OUTPUT REDIRECTORS
    ##############################################################################


    cmd1|cmd2 # pipe; takes standard output of cmd1 as standard input to cmd2
    < file # takes standard input from file
    > file # directs standard output to file
    >> file # directs standard output to file; append to file if it already exists
    >|file # forces standard output to file even if noclobber is set
    n>|file # forces output to file from file descriptor n even if noclobber is set
    <> file # uses file as both standard input and standard output
    n<>file # uses file as both input and output for file descriptor n
    n>file # directs file descriptor n to file
    n<file # takes file descriptor n from file
    n>>file # directs file description n to file; append to file if it already exists
    n>& # duplicates standard output to file descriptor n
    n<& # duplicates standard input from file descriptor n
    n>&m # file descriptor n is made to be a copy of the output file descriptor
    n<&m # file descriptor n is made to be a copy of the input file descriptor
    &>file # directs standard output and standard error to file
    <&- # closes the standard input
    >&- # closes the standard output
    n>&- # closes the ouput from file descriptor n
    n<&- # closes the input from file descripor n


    ##############################################################################
    # PROCESS HANDLING
    ##############################################################################


    # To suspend a job, type CTRL+Z while it is running. You can also suspend a job with CTRL+Y.
    # This is slightly different from CTRL+Z in that the process is only stopped when it attempts to read input from terminal.
    # Of course, to interrupt a job, type CTRL+C.

    myCommand & # runs job in the background and prompts back the shell

    jobs # lists all jobs (use with -l to see associated PID)

    fg # brings a background job into the foreground
    fg %+ # brings most recently invoked background job
    fg %- # brings second most recently invoked background job
    fg %N # brings job number N
    fg %string # brings job whose command begins with string
    fg %?string # brings job whose command contains string

    kill -l # returns a list of all signals on the system, by name and number
    kill PID # terminates process with specified PID

    ps # prints a line of information about the current running login shell and any processes running under it
    ps -a # selects all processes with a tty except session leaders

    trap cmd sig1 sig2 # executes a command when a signal is received by the script
    trap "" sig1 sig2 # ignores that signals
    trap - sig1 sig2 # resets the action taken when the signal is received to the default

    disown <PID|JID> # removes the process from the list of jobs

    wait # waits until all background jobs have finished


    ##############################################################################
    # TIPS & TRICKS
    ##############################################################################


    # set an alias
    cd; nano .bash_profile
    > alias gentlenode='ssh [email protected] -p 3404' # add your alias in .bash_profile

    # to quickly go to a specific directory
    cd; nano .bashrc
    > shopt -s cdable_vars
    > export websites="/Users/mac/Documents/websites"

    source .bashrc
    cd $websites


    ##############################################################################
    # DEBUGGING SHELL PROGRAMS
    ##############################################################################


    bash -n scriptname # don't run commands; check for syntax errors only
    set -o noexec # alternative (set option in script)

    bash -v scriptname # echo commands before running them
    set -o verbose # alternative (set option in script)

    bash -x scriptname # echo commands after command-line processing
    set -o xtrace # alternative (set option in script)

    trap 'echo $varname' EXIT # useful when you want to print out the values of variables at the point that your script exits

    function errtrap {
    es=$?
    echo "ERROR line $1: Command exited with status $es."
    }

    trap 'errtrap $LINENO' ERR # is run whenever a command in the surrounding script or function exits with non-zero status

    function dbgtrap {
    echo "badvar is $badvar"
    }

    trap dbgtrap DEBUG # causes the trap code to be executed before every statement in a function or script
    # ...section of code in which the problem occurs...
    trap - DEBUG # turn off the DEBUG trap

    function returntrap {
    echo "A return occurred"
    }

    trap returntrap RETURN # is executed each time a shell function or a script executed with the . or source commands finishes executing