Så här blir output:
Här försvinner ett par kolumner pga. att phpBB klipper av bilden...
Det här är vad som egentligen ska visas:
- Devicefile
Den [block]fil i /dev som är kopplad till disken. - Volume
Namnet på den volym som disken eller partitionen utgör. - Disktype
Blir normalt SSD eller HDD, partitioner blir automatiskt det som disken är. - FStype
Typen av filsystem, t.ex "ext4" (information om windowsdiskar kan inte avläsas så här) - Size
Storlek på disken eller partitionen. - Free
Hur mycket utrymme som är fritt på disken. - UsedPct
Hur många procent av disken som är använt. Här blir siffran röd när 85% är använt på en SSD och när 75% är använt på en HDD. Detta är till för att prestanda riskerar att försämras vid dessa siffror. - Created
Datum och klockslag för när filsystemet på disken eller partitionen skapades. Alltså första gången den användes i sin nuvarande skapnad. - Checked
Datum och klockslag för när disken senast kontrollerades (fsck). - LastMnt
Den monteringspunkt som disken senast monterades på. - OpnFile
Antal filer som för tillfället är öppna på disken eller partitionen. En alltför hög siffra kan innebära att man bör flytta något från disken, för att sprida lasten.
- Kod: Markera allt
#! /bin/bash
#
#####################################################################
#
#BLINK="\e[5m"
BLINK=""
RED="\e[31m"
BOLD="\e[1m\e[31m"
OFF="\e[0m"
function usage {
cat << EOD
usage: $CMDNAME [-a] [-g] [-h] [partition]
Show info about a partition.
-a | --all
Show information about all Linux partitions.
-g | --gui | --graphic
-h | --help
Show this.
-n | --no-headers
Print no header line at all.
-y | --yad
Use "yad" as graphic handler.
-z | --zenity
Use "zenity" as graphic handler (this is the default).
EOD
exit
}
#
function check4null {
if [[ -z $FILEVOL ]]; then
$FILEVOL == "-"
fi
if [[ -z $DISKTYPE ]]; then
$DISKTYPE == "-"
fi
if [[ -z $FSTYPE ]]; then
$FSTYPE == "-"
fi
if [[ -z $HSIZE ]]; then
$HSIZE == "-"
fi
if [[ -z $HFREE ]]; then
$HFREE == "-"
fi
if [[ -z $USEDPCT ]]; then
$USEDPCT == "-"
fi
if [[ -z $FILECRE ]]; then
$FILECRE == "-"
fi
if [[ -z $LASTCHK ]]; then
$LASTCHK == "-"
fi
if [[ -z $LASTMNT ]]; then
$LASTMNT == "-"
fi
if [[ -z $MOUNTPNT ]]; then
$MOUNTPNT == "-"
fi
if [[ -z $MOUNTED ]]; then
$MOUNTED == "-"
fi
if [[ -z $LSOF ]]; then
$LSOF == "-"
fi
}
function checkIfExist {
DEV=$1
EXIST=false
DEVS=$(/home/base/bin/alldisks --part --linux)
for DV in $DEVS; do
if [[ $DEV == $DV ]]; then
EXIST=true
break
fi
done
if [[ $EXIST == false ]]; then
echo
echo " $DEV does not exist or is not in Linux format..."
echo
exit
fi
}
function isMounted {
mount | grep ^$1 >> /dev/null
if [[ $? == 0 ]]; then
MOUNTED="1"
else
MMOUNTED="=>$?"
MOUNTED="-"
fi
}
#
function printDev {
DEV=$1
FSTYPE=$(blkid -o value -s TYPE $DEV)
UUID=$(tune2fs -l $DEV | grep "Filesystem UUID" | awk -F \: '{ print $2 }' | xargs)
DEV=$(ls -l /dev/disk/by-uuid/$UUID | awk -F \> '{ print $2 }' | xargs | sed 's=../..=/dev=g')
BSIZE=$(blockdev --getsize64 $DEV)
FREE=$(df | grep $DEV | awk '{ print $4 }')
let KSIZE=$BSIZE/1024
HSIZE=$(ktoh $KSIZE)
HFREE=$(ktoh $FREE)
USEDPCT=$(df | grep $DEV | awk '{ print $5 }')
USEDNUM=$(df | grep $DEV | awk '{ print $5 }' | sed 's/%//g')
if [[ -z $USEDPCT ]]; then
USEDPCT="-"
HFREE="-"
USEDNUM=0
fi
NOWMNT=$(mount | grep $DEV | awk '{ print $3 }')
DEVNAME=$(echo $DEV | rev | awk -F / '{ print $1 }' | rev)
ROTA=$(lsblk -o NAME,ROTA | grep $DEVNAME | awk '{ print $2 }')
if [[ $ROTA == 0 ]]; then
DISKTYPE="SSD"
LIMIT=15
elif [[ $ROTA == 1 ]]; then
DISKTYPE="HDD"
LIMIT=25
else
LIMIT=100
DISKTYPE="$ROTA"
fi
let FULL=100-$LIMIT
LSOF=$(lsof $DEV 2> /dev/null | tail -n +2 | wc -l)
MOUNTPNT=$(LC_ALL=C tune2fs -l $DEV | grep -e "Last mounted on" | awk -F "on:" '{ print $2 }' | sed 's/^[ \t]*//')
LASTMNT=$(LC_ALL=C tune2fs -l $DEV | grep -e "Last mount time" | awk -F "time:" '{ print $2 }' | sed 's/^[ \t]*//')
LASTCHK=$(LC_ALL=C tune2fs -l $DEV | grep -e "Last checked" | awk -F "checked:" '{ print $2 }' | sed 's/^[ \t]*//')
FILECRE=$(LC_ALL=C tune2fs -l $DEV | grep -e "Filesystem created" | awk -F "created:" '{ print $2 }' | sed 's/^[ \t]*//')
FILEVOL=$(LC_ALL=C tune2fs -l $DEV | grep -e "Filesystem volume name" | awk -F "name:" '{ print $2 }' | sed 's/^[ \t]*//')
isMounted $DEV
check4null
if [[ $USEDNUM -gt $FULL ]]; then
if [[ $GUI == false ]]; then
printf " %-18s%-10s %-10s %-8s%9s %9s $BLINK$BOLD%-10s$OFF%-28s%-28s%-28s%-13s%-5s%8s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF"
else
printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF" >> $GUIFILE
fi
else
if [[ $GUI == false ]]; then
#printf " %-18s%-10s %-10s %-8s%9s %9s %10s%-28s%-28s%-28s%-13s%-5s%8s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF"
printf " %-18s%-10s %-10s %-8s%9s %9s %-10s%-28s%-28s%-28s%-13s%-5s%8s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF"
else
printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" "$DEV" "$FILEVOL" "$DISKTYPE" "$FSTYPE" "$HSIZE" "$HFREE" "$USEDPCT" "$FILECRE" "$LASTCHK" "$LASTMNT" "$MOUNTPNT" "$MOUNTED" "$LSOF" >> $GUIFILE
fi
fi
}
#
function printHdr {
if [[ $GUI == false && $HDR == true ]]; then
echo
printf "%-18s%-10s%-12s%-9s%-13s%-13s%-11s%-28s%-28s%-28s%-10s%-9s%8s\n" " Devicefile" "Volume" "Disktype" "FStype" " Size" " Free" "UsedPct" "Created" "Last checked" "Last mounted" "MountPnt" "Mounted" "OpnFiles"
printf "%-18s%-10s%-12s%-9s%-13s%-13s%-11s%-28s%-28s%-28s%-10s%-9s%8s\n" " ----------" "------" "--------" "------" " ----" " ----" "-------" "-------" "------------" "------------" "--------" "-------" "--------"
elif [[ $GUI == true ]]; then
GUIFILE=$(mktemp --suffix=".gui" "LASTMNT_XXX")
fi
}
#
function showGraphic {
$GRAPH --list --text="Information about all Linux-formatted disks in the system" \
--title="Diskinfo" \
--width=1690 \
--height=400 \
--column="Devicefile " --column="Volume " --column="Disktype" --column="FStype" --column="Size " --column="Free " --column="UsedPct" --column="Created " --column="Last checked " --column="Last mounted " --column="MountPnt " --column="Mounted" --column="OpnFiles" \
$(cat $GUIFILE | sed 's/ /_/g' | sed 's/,/ /g') 2> /dev/null
rm $GUIFILE
}
#
#####################################################################
#
TEMP=`getopt -oaghn --long all,gui,graphic,no-headers,help -n $(basename $0) -- "$@"`
if [[ $? -ne 0 ]]; then
usage
fi
eval set -- "$TEMP"
ALL=false
GUI=false
HDR=true
YAD=false
ZENITY=true
GRAPH="zenity"
CMDNAME=$(basename $0)
while true; do
case $1 in
-h|--help)
usage
exit
;;
-a|--all)
ALL=true
shift
;;
-g|--gui|--graphic)
GUI=true
shift
;;
-n|--no-headers)
HDR=false
shift
;;
-y|--yad)
YAD=true
ZENITY=false
GRAPH="yad"
shift
;;
-z|--zenity)
YAD=false
ZENITY=true
GRAPH="zenity"
shift
;;
--)
shift
break
;;
*)
echo "-Got a star... [$1]"
exit
;;
esac
done
P1=$1
P2=$2
P3=$3
P4=$4
#
#####################################################################
#
if [[ ! -z $1 && $ALL == true ]]; then
echo
echo "-Not possible to use a name and --all at the same time..."
echo
exit
elif [[ -z $1 && $ALL == false ]]; then
echo
alldisks --part --linux | column
read -p "_Device: " DV
if [[ -z $DV ]]; then
echo
exit
fi
if [[ -z $(echo $DV | grep "/dev/") ]]; then
DEVICE="/dev/$DV"
else
DEVICE=$DV
fi
else
DV=$1
if [[ -z $(echo $DV | grep "/dev/") ]]; then
DEVICE="/dev/$DV"
else
DEVICE=$DV
fi
fi
#
if [[ $ALL == false ]]; then
checkIfExist $DEVICE
printHdr
printDev $DEVICE
else
printHdr
DEVS=$(/home/base/bin/alldisks --part --linux)
for DEVICE in $DEVS; do
printDev $DEVICE
done
fi
#
if [[ $GUI == true ]]; then
showGraphic
else
if [[ $HDR == true ]]; then
echo
fi
fi