Add script 'show-nfs-clients.sh'.
This commit is contained in:
		| @@ -1,33 +0,0 @@ | |||||||
| # ------------------------------------------- |  | ||||||
| # - Settings for script check-connectivity.sh |  | ||||||
| # ------------------------------------------- |  | ||||||
|  |  | ||||||
| # - IPV6_PRESENT |  | ||||||
| # - |  | ||||||
| # - Possible values: true/false |  | ||||||
| # - |  | ||||||
| # - Example: |  | ||||||
| # -    IPV6_PRESENT=false |  | ||||||
| # - |  | ||||||
| # - Default value: true |  | ||||||
| # - |  | ||||||
| #IPV6_PRESENT=true |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # - DNS_CHECK_HOSTS |  | ||||||
| # - |  | ||||||
| # - Blank sepatated list of hostnames checked by lokal nameservice simply |  | ||||||
| # - for their ip-addresses |  | ||||||
| # -  |  | ||||||
| # - Defaults to: DNS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de" |  | ||||||
| # - |  | ||||||
| #DNS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de www.debian.org" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # - HTTPS_CHECK_HOSTS |  | ||||||
| # - |  | ||||||
| # - Blank sepatated list of websites which will be checked for accessibility |  | ||||||
| # - |  | ||||||
| # - Defaults to: HTTPS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de" |  | ||||||
| # - |  | ||||||
| #HTTPS_CHECK_HOSTS="www.oopen.de www.google.com www.heise.de www.debian.org" |  | ||||||
							
								
								
									
										20
									
								
								conf/show-nfs-clients.conf.sample
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								conf/show-nfs-clients.conf.sample
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | # ----------------------------------------- | ||||||
|  | # - Settings for script show-nfs-clients.sh | ||||||
|  | # ----------------------------------------- | ||||||
|  |  | ||||||
|  | # NFS_SERVER_IPV4 | ||||||
|  | # | ||||||
|  | # The IP-Address where the nfs clients are connected | ||||||
|  | # | ||||||
|  | # If not given, script tries to determin th ip-address | ||||||
|  | # | ||||||
|  | #NFS_SERVER_IPV4="" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # NFS_SERVER_PORT | ||||||
|  | # | ||||||
|  | # The Port where the nfs service is listen | ||||||
|  | # | ||||||
|  | # Default: NFS_SERVER_PORT=2049 | ||||||
|  | # | ||||||
|  | #NFS_SERVER_PORT=2049 | ||||||
							
								
								
									
										289
									
								
								show-nfs-clients.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										289
									
								
								show-nfs-clients.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,289 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  |  | ||||||
|  | script_name="$(basename $(realpath $0))" | ||||||
|  | working_dir="$(dirname $(realpath $0))" | ||||||
|  |  | ||||||
|  | conf_file="${working_dir}/conf/${script_name%%.*}.conf" | ||||||
|  |  | ||||||
|  | LOCK_DIR="/tmp/$(basename $0).$$.LOCK" | ||||||
|  | log_file="${LOCK_DIR}/${script_name%%.*}.log" | ||||||
|  |  | ||||||
|  | # ---------- | ||||||
|  | # Base Function(s) | ||||||
|  | # ---------- | ||||||
|  |  | ||||||
|  | clean_up() { | ||||||
|  |  | ||||||
|  |    # Perform program exit housekeeping | ||||||
|  |    rm -rf "$LOCK_DIR" | ||||||
|  |    blank_line | ||||||
|  |    exit $1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | usage() { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    [[ -n  "$1" ]] && error "$1" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |    [[ $terminal ]] && echo -e " | ||||||
|  | \033[1mUsage:\033[m | ||||||
|  |  | ||||||
|  |    $(basename $0) | ||||||
|  |  | ||||||
|  | \033[1mDescription\033[m | ||||||
|  |  | ||||||
|  |    Script lists all connected NFS client ip-addresses. | ||||||
|  |  | ||||||
|  | \033[1mOptions\033[m | ||||||
|  |  | ||||||
|  |    No Options present | ||||||
|  |  | ||||||
|  | \033[1mFiles\033[m | ||||||
|  |  | ||||||
|  |    $conf_file: Configuration file | ||||||
|  |  | ||||||
|  | \033[1mExample:\033[m | ||||||
|  |  | ||||||
|  |    List connected NFS clients | ||||||
|  |  | ||||||
|  |       $(basename $0) | ||||||
|  |  | ||||||
|  | " | ||||||
|  |  | ||||||
|  |    clean_up 1 | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | echononl(){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo X\\c > /tmp/shprompt$$ | ||||||
|  |       if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then | ||||||
|  |          #echo -e -n "   $*\\c" 1>&2 | ||||||
|  |          echo -e -n "   $*\\c" | ||||||
|  |       else | ||||||
|  |          #echo -e -n "   $*" 1>&2 | ||||||
|  | 			echo -e -n "   $*" | ||||||
|  |       fi | ||||||
|  |       rm /tmp/shprompt$$ | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fatal(){ | ||||||
|  |    echo "" | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "   [ \033[31m\033[1mFatal\033[m ] $*" | ||||||
|  |    else | ||||||
|  |       echo -e "   [ Fatal ] $*" | ||||||
|  |    fi | ||||||
|  |    echo "" | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "             \033[1mScript terminated\033[m.." | ||||||
|  |    else | ||||||
|  |       echo -e "             Script terminated.." | ||||||
|  |    fi | ||||||
|  |    echo "" | ||||||
|  |    rm -rf $LOCK_DIR | ||||||
|  |    exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | error (){ | ||||||
|  |    echo "" | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "   [ \033[31m\033[1mError\033[m ] $*" | ||||||
|  |    else | ||||||
|  |       echo "   [ Error ] $*" | ||||||
|  |    fi | ||||||
|  |    echo "" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | info (){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo "" | ||||||
|  |       echo -e "   [ \033[32m\033[1mInfo\033[m ]  $*" | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | echo_skipped() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[75G[ \033[37m\033[1mskipped\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | echo_ok() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[75G[ \033[32mok\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  | echo_failed(){ | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo -e "\033[75G[ \033[1;31mfailed\033[m ]" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | blank_line() { | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | trim() { | ||||||
|  |     local var="$*" | ||||||
|  |     var="${var#"${var%%[![:space:]]*}"}"   # remove leading whitespace characters | ||||||
|  |     var="${var%"${var##*[![:space:]]}"}"   # remove trailing whitespace characters | ||||||
|  |     echo -n "$var" | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ---------- | ||||||
|  | # - Jobhandling | ||||||
|  | # ---------- | ||||||
|  |  | ||||||
|  | # - Run 'clean_up' for signals SIGHUP SIGINT SIGTERM | ||||||
|  | # - | ||||||
|  | trap clean_up SIGHUP SIGINT SIGTERM | ||||||
|  |  | ||||||
|  | # - Create lock directory '$LOCK_DIR" | ||||||
|  | # | ||||||
|  | mkdir "$LOCK_DIR" | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # ---------- | ||||||
|  | # - Some checks .. | ||||||
|  | # ---------- | ||||||
|  |  | ||||||
|  | # - Running in a terminal? | ||||||
|  | # - | ||||||
|  | if [[ -t 1 ]] ; then | ||||||
|  |    terminal=true | ||||||
|  | else | ||||||
|  |    terminal=false | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # - Print help? | ||||||
|  | # - | ||||||
|  | if [[ "$(trim $*)" = "-h" ]] || [[ "$(trim $*)" = "--help" ]] ; then | ||||||
|  |     usage | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # ========== | ||||||
|  | # - Begin Main Script | ||||||
|  | # ========== | ||||||
|  |  | ||||||
|  | # ---------- | ||||||
|  | # - Headline | ||||||
|  | # ---------- | ||||||
|  |  | ||||||
|  | if $terminal ; then | ||||||
|  |    echo "" | ||||||
|  |    echo -e "\033[1m----------\033[m" | ||||||
|  |    echo -e "\033[32m\033[1mRunning script \033[m\033[1m$script_name\033[32m .. \033[m" | ||||||
|  |    echo -e "\033[1m----------\033[m" | ||||||
|  |    echo "" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Redirect all errors to $log_file | ||||||
|  | # | ||||||
|  | exec 2> "$log_file" | ||||||
|  | echononl "Redirect all errors to '\$log_file'.." | ||||||
|  | if [[ $? -eq 0 ]] ; then | ||||||
|  | 	echo_ok | ||||||
|  | else | ||||||
|  | 	echo_failed | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # ---------- | ||||||
|  | #  Read Configurations from $conf_file | ||||||
|  | # ---------- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # - Give your default values here | ||||||
|  | # - | ||||||
|  | DEFAULT_NFS_SERVER_PORT="2049" | ||||||
|  |  | ||||||
|  | echononl "Load Configurations from file '$(basename "$conf_file")'." | ||||||
|  | if [[ -f "$conf_file" ]]; then | ||||||
|  |    source "$conf_file" | ||||||
|  |    echo_ok | ||||||
|  | else | ||||||
|  |    echo_skipped | ||||||
|  |    msg="No configuration file found. Script default values are loaded.." | ||||||
|  |    if $terminal ; then | ||||||
|  |       echo "" | ||||||
|  |       echo -e "   [ \033[33m\033[1mWarn\033[m ]  $msg" | ||||||
|  |       echo "" | ||||||
|  |    fi | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ -z "$NFS_SERVER_IPV4" ]] ; then | ||||||
|  |    NFS_SERVER_IPV4="$(ip a | grep "inet " | grep -v "127\.0" | awk '{print$2}' | cut -d '/' -f1)" | ||||||
|  |    if [[ -z "$NFS_SERVER_IPV4" ]] ; then | ||||||
|  |       fatal "No NFS Server IP Address present." | ||||||
|  |    fi | ||||||
|  | fi | ||||||
|  | [[ -z "$NFS_SERVER_PORT" ]] && NFS_SERVER_PORT="$DEFAULT_NFS_SERVER_PORT" | ||||||
|  |  | ||||||
|  | # Get NFS client list | ||||||
|  | # | ||||||
|  | #	netstat -an | grep 192.168.112.10:2049 \ | ||||||
|  | #    | awk '{print"   "$5}' \ | ||||||
|  | #    | cut -d ':' -f1 \ | ||||||
|  | #    | sort | ||||||
|  | # | ||||||
|  | echononl "Get NFS client list.." | ||||||
|  | netstat -an \ | ||||||
|  | 	| grep  ${NFS_SERVER_IPV4}:$NFS_SERVER_PORT \ | ||||||
|  | 	| awk '{print"   "$5}' \ | ||||||
|  | 	| cut -d ':' -f1 \ | ||||||
|  | 	| sort >> ${LOCK_DIR}/nfs-clients.list | ||||||
|  | if [[ -s "$log_file" ]]; then | ||||||
|  | 	echo_failed | ||||||
|  | 	error "$(cat "$log_file")" | ||||||
|  | 	> "$log_file" | ||||||
|  | else | ||||||
|  | 	echo_ok | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Create array of connected clients: | ||||||
|  | # | ||||||
|  | echononl "Create array of connected clients.." | ||||||
|  | declare -a NFS_CLIENT_ARR=() | ||||||
|  | while read _nfs_client ; do | ||||||
|  | 	NFS_CLIENT_ARR+=("$(trim "$_nfs_client")") | ||||||
|  | done < "${LOCK_DIR}/nfs-clients.list" | ||||||
|  | if [[ -s "$log_file" ]]; then | ||||||
|  | 	echo_failed | ||||||
|  | 	error "$(cat "$log_file")" | ||||||
|  | 	> "$log_file" | ||||||
|  | else | ||||||
|  | 	echo_ok | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | if $terminal ; then | ||||||
|  | 	echo "" | ||||||
|  | 	echo "" | ||||||
|  | 	echo "   ----------------------" | ||||||
|  | 	echo -e "   \033[37m\033[1mConnected NFS Clients:\033[m" | ||||||
|  | 	echo "   ----------------------" | ||||||
|  | 	echo "" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [[ ${#NFS_CLIENT_ARR[@]} -gt 0 ]]; then | ||||||
|  |  | ||||||
|  | 	for _nfs_client in "${NFS_CLIENT_ARR[@]}" ; do | ||||||
|  | 		echo -e  "   \033[33m$_nfs_client\033[m" | ||||||
|  | 	done | ||||||
|  |  | ||||||
|  | 	info "Number of connected clients: \033[1m${#NFS_CLIENT_ARR[@]}\033[m" | ||||||
|  |  | ||||||
|  | else | ||||||
|  | 	info "No NFS Client connected." | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
|  | clean_up 0 | ||||||
		Reference in New Issue
	
	Block a user