Harddisk with labeling technology build into it. (We need a

On Saturday, September 28, 2019 at 4:12:18 PM UTC+2, skybu...@hotmail.com wrote:
On Tuesday, September 24, 2019 at 11:30:49 PM UTC+2, Robert Baer wrote:
skybuck2000@hotmail.com wrote:
Imagine following scenerio:

HD-LBA-235235235235234
HD-LBA-235235235423523

One of these drives is source, one of these drives is backup drive.

How the fuck do you tell which is which ?!

This is problem with current harddisk technology.

No proper labelling.

This is scary a fuck for disk-to-disk backup purposes.

Is this the best IT technology has to offer ?! Very shamefull !

Excellent example of this horrific situation is the super poor open source software called "Clonezilla" it makes absolutely no attempt to identify drives in any meaningfull way by for example reading NTFS labels to give the users some clue as to which drive is which. There may be some info inspection option in it's menu or not... I have not even used this software, just watched some youtube videos.

I do however use windows and it has the same problem and it's very annoying when I need to identify which is the boot drive and which is something totally else.

Surely hardware manufacturers can find some flashable ep-rom chip somewhere to allow users to properly label their hardware ?!

This has to change for the better !

Some simple "label-technology-chip" could be created which can be added to products, this would make me feel goooooood.

Label meaning letters and digits at the very least.

So user can for example rename hardware as follows:

SystemDisk
DataDisk
BackupDisk

That'd be nice.

Bye,
Skybuck.

Well, i hate to tell you,but there is writable RAM on the hard
drives, and even a fairly decent CPU on them.
Absolutely no need for more of the same.
There is something called a LABEL which can be used in Windoze ,
simply click on the name and rename it to what you want.
Clonezilla ALSO has the option to change the name of a drive.

Go back to school.

HERE YOU GO YOU DUMB BITCH:

The very first google on "where is volume label stored" returns this information without even clicking the link:

"
From a Windows internals perspective, the label name is stored per volume in a NTFS metafile called $Volume. A file record within exists called $Volume_Name that contains the label name.Aug 24, 2014
"

THAT MEANS VOLUME LABELS ARE SOFTWARE STORED ON THE DISK and THUS CAN BE WHIPED AND THUS YOUR HARDWARE DISK BECOMES UNIDENTIFIEABLE BY VOLUME LABEL CAUSE THE VOLUME LABEL IS NOT THERE.

HERE IS MY QUESTION FOR YOU RETARD:

HOW WILL YOU IDENTIFY YOUR DISK IF THERE IS NO VOLUME LABEL, WHEN THERE IS NO FILE SYSTEM.

YOU NOT CAPABLE OF UNDERSTANDING THIS MARKS YOU AS EITHER:

1. A VERY INEXPERIENCED NOOB WHO HAS ALWAYS HAD ONLY ONE DRIVE.
2. OR HAS NEVER DONE ANY VIRTUAL DISK OPERATINGS IN WINDOWS CAUSE THEN YOU WOULD HAVE NOTICED THIS DIFFICULTY OF IDENTIFIEING DRIVES AND VIRTUAL HARDDISKS WHICH MIGHT EVEN HAVE THE SAME PROBLEM. FIGURING OUT ON WHICH PHYSICAL DRIVE A VIRTUAL DRIVE IS IS ONE OF THESE EXAMPLES.
3. OR A COMPLETE RETARD DOESN'T UNDERSTAND SHIT LOL.
4. OR A TROLL.

TIME TO WISE UP AND READ THE INFO ABOVE.

SEE YA.

ALSO BUY TWO DISKS AND START USING DISK MANAGEMENT IN WINDOWS AND GET A CLUE.

HERE IS A NICE CHALLENGE FOR YOU:

1. LABEL THE DISKS ANYWAY YOU WANT.
2. FORMAT YOUR DISKS/DELETE WINDOWS
3. SEE IF THE LABELS ARE STILL THERE LOLOLOLOLOLOLOLOLOLOLOL

(AND NO SERIAL NUMBERS DON'T CUT IT WHICH WAS THE WHOLE POINT OF THIS THREAD)

BYE,
SKYBUCK.

LOL EVEN SERIAL NUMBERS (volume serial numbers) ARE SOFTWARE DEPENDENT:

"
https://www.lifewire.com/volume-serial-number-2626046

volume serial number, sometimes seen as VSN, is a unique, hexadecimal number assigned to a drive during the creation of the file system during the format process.

The volume serial number is stored in the disk parameter block part of the volume boot record.

Microsoft and IBM added the volume serial number to the format process in 1987 when they were working together to develop the OS/2 operating system.
"

SO IT IS COMPLETELY USELESS TO IDENTIFIEING ACTUALY HARDWARE DEVICES/DISKS.

(IT CAN EVEN BE FAKED POSSIBLY) IT REQUIRES A FILE SYSTEM AND FILESYSTEM SPECIFIC SOFTWARE.

THESE CLONE TOOLS DON'T LIKE THAT.

I DON'T LIKE IT AS WELL.

I WANT HARDWARE IDENTIFICATION WITH HARDWARE LABELS.

NOT SOME STUPID SOFTWARE FUCK UP.

Bye,
Skybuck.
 
John Robertson <spam@flippers.com> wrote in
news:L-mdnRCSZtaA8RLAnZ2dnUU7-Y2dnZ2d@giganews.com:

On 2019/09/24 3:30 p.m., Robert Baer wrote:
skybuck2000@hotmail.com wrote:
Imagine following scenerio:

HD-LBA-235235235235234
HD-LBA-235235235423523

One of these drives is source, one of these drives is backup
drive.

How the fuck do you tell which is which ?!

This is problem with current harddisk technology.

No proper labelling.

This is scary a fuck for disk-to-disk backup purposes.

Is this the best IT technology has to offer ?! Very shamefull !

Excellent example of this horrific situation is the super poor
open source software called "Clonezilla" it makes absolutely no
attempt to

identify drives in any meaningfull way by for example reading
NTFS labels to give the users some clue as to which drive is
which. There may be some info inspection option in it's menu or
not... I have not even used this software, just watched some
youtube videos.

I do however use windows and it has the same problem and it's
very annoying when I need to identify which is the boot drive
and which is

something totally else.

Surely hardware manufacturers can find some flashable ep-rom
chip somewhere to allow users to properly label their hardware
?!

This has to change for the better !

Some simple "label-technology-chip" could be created which can
be added to products, this would make me feel goooooood.

Label meaning letters and digits at the very least.

So user can for example rename hardware as follows:

SystemDisk
DataDisk
BackupDisk

That'd be nice.

Bye,
   Skybuck.

  Well, i hate to tell you,but there is writable RAM on the
hard

drives, and even a fairly decent CPU on them.
  Absolutely no need for more of the same.
  There is something called a LABEL which can be used in
Windoze
,
simply click on the name and rename it to what you want.
  Clonezilla ALSO has the option to change the name of a drive.

  Go back to school.

How about a piece of tape? You know, a label? (ducking)

However a write-protect would be all you need in this case,
unfortunately I don't know of such a beast for hard drives -
unlike CF!

John :-#)#

Write protection for hard drives is at the file system, volume
level currently, as in mounting the drive read only.

There used to be a jumper one could set on those *old* drives that
had them (some IDE, SCSI, ESDI, MFM, etc.).

But no hard, physical switches on SATA that I am aware of.
 
skybuck2000@hotmail.com wrote in
news:157ec44b-c576-45f9-b51a-4f053c1f1c2a@googlegroups.com:

LOL EVEN SERIAL NUMBERS (volume serial numbers) ARE SOFTWARE
DEPENDENT:

But physical drive identifiers are not.
 
skybuck2000@hotmail.com wrote in news:157ec44b-c576-45f9-b51a-
4f053c1f1c2a@googlegroups.com:

I WANT HARDWARE IDENTIFICATION WITH HARDWARE LABELS.

NOT SOME STUPID SOFTWARE FUCK UP.

Then when you first power up your new, bare drive, get its
identifier and write it down, BOY!

Then, LEARN how to find that data later, when your bloomers are in
less of a bunch.

Then, IF you have a brain, when you NAME a volume you create on it,
YOU might intuitively INCLUDE a familiar physical drive ID YOU enjoy
using.

That way, ANY volume YOU examine will immediately tell YOU what
physical drive it is also on, because YOU used YOUR two brain cells
when YOU established what YOUR naming convention would be, way back
when YOU actually claimed to be learning about this computing realm
YOU seemed to have taken a swan dive into, without a net..
 
On Saturday, September 28, 2019 at 4:20:22 PM UTC+2, John Robertson wrote:
On 2019/09/24 3:30 p.m., Robert Baer wrote:
skybuck2000@hotmail.com wrote:
Imagine following scenerio:

HD-LBA-235235235235234
HD-LBA-235235235423523

One of these drives is source, one of these drives is backup drive.

How the fuck do you tell which is which ?!

This is problem with current harddisk technology.

No proper labelling.

This is scary a fuck for disk-to-disk backup purposes.

Is this the best IT technology has to offer ?! Very shamefull !

Excellent example of this horrific situation is the super poor open
source software called "Clonezilla" it makes absolutely no attempt to
identify drives in any meaningfull way by for example reading NTFS
labels to give the users some clue as to which drive is which. There
may be some info inspection option in it's menu or not... I have not
even used this software, just watched some youtube videos.

I do however use windows and it has the same problem and it's very
annoying when I need to identify which is the boot drive and which is
something totally else.

Surely hardware manufacturers can find some flashable ep-rom chip
somewhere to allow users to properly label their hardware ?!

This has to change for the better !

Some simple "label-technology-chip" could be created which can be
added to products, this would make me feel goooooood.

Label meaning letters and digits at the very least.

So user can for example rename hardware as follows:

SystemDisk
DataDisk
BackupDisk

That'd be nice.

Bye,
   Skybuck.

  Well, i hate to tell you,but there is writable RAM on the hard
drives, and even a fairly decent CPU on them.
  Absolutely no need for more of the same.
  There is something called a LABEL which can be used in Windoze ,
simply click on the name and rename it to what you want.
  Clonezilla ALSO has the option to change the name of a drive.

  Go back to school.

How about a piece of tape? You know, a label? (ducking)

However a write-protect would be all you need in this case,
unfortunately I don't know of such a beast for hard drives - unlike CF!

John :-#)#

ARE YOU FUCKING RETARDED ?!

HAVE YOU SEEN HOW SMALL SSD'S HAVE BECOME ?!

THEY CAN FIT BETWEEN YOUR TEETH NOWADAYS !

BYE,
SKYBUCK.

(We need new labelling technology... clearly ;))

(holygrams maybe would be cool lol)
 
On Thursday, September 26, 2019 at 2:01:51 PM UTC+2, DecadentLinux...@decadence.org wrote:
whit3rd <whit3rd@gmail.com> wrote in
news:605c4c9a-adcb-407d-ab84-43e4d19fe5e3@googlegroups.com:

snip

I'm likely to change the volume label(s) at a whim, it is unlikely
to match a paper attached to a drive. There's a 'System
Information' way to find which interfaces have which hardware
attached, so wire-tracing can work. That tool also grabs disk
serial numbers (but those aren't always easy to locate on physical
drives).


There is a linux bash script that yields copius amounts of system
information. There is a drives section that is pretty comprehensive.

Linfo1.sh by Marek Novotny (the github page is gone now)
Quote:

#!/bin/bash

#############################################################
#
# script : linfo.sh
# version : 2.36
# About : Simple Linux System Information
# Updated : 2016-11-04
# Written by : Marek Novotny
# Contributors : Chris Davies
# : Jonathan N. Little
# : Bit Twister
# : Andrew
# : Gamo
# Testers : Wildman
# : Mike Easter
#
# license : GPL v2 (only)
# github : https://github.com/marek-novotny/linfo
#
#############################################################

option=$1
message=()
let networkStatusResult=1
let pingResult=1
let dnsResult=1
let webTestResult=1
let mtab=16
IFS=$'\n'
recdLine=""

# requirements

reqCmds=()

# setup path
export PATH=$PATH:/sbin:/usr/sbin

# check first argument for -p or --prompt to run in prompt mode

if [ "$option" == "-p" -o "$option" == "--prompt" ] ; then
prompt="yes"
priv=sudo
$priv -v
else
prompt="no"
unset priv
fi

Ver='2.36'
VDate='2016-11-04'
printf "%*s\n" "$(tput cols)" "$(date)"
printf "%*s\n" "$(tput cols)" "Linfo Version $Ver, released: $VDate"
printf "%*s\n" "$(tput cols)" "github: https://github.com/marek-
novotny/linfo"
printf "%*s\n" "$(tput cols)" "Written by: Marek Novotny"

divider ()
{
printf "%s:\n" "$1"
printf "%$(tput cols)s\n\n" "" | tr ' ' '='
}

foldText ()
{
paramError ()
{
printf "$(basename $0) error! Incorrect parameters sent to
foldText function from ln: $recdLine\n $1\n" >&2
exit $2
}

# usage foldText {numeric tab} {item name} {item value string}
{option -s or blank}

mtab="$1" # set the tab column
item="$2" # set the string name
string="$3" # set the string itself
option="$4" # set the option type -s for fold at space
# or leave blank for hard cut
let y=1 # set the counter so the first line
# printed gets the item name only.

# make sure in script parameters are appropriate

if [ $# -lt 3 -o $# -gt 4 ] ; then
paramError "Incorrect number of arguments ($#)" 2
fi

regEx='^[0-9]+$'
if ! [[ $1 =~ $regEx ]] ; then
paramError "mtab is not set to a numeric value" 3
fi

if [ "$option" != "-s" ] ; then
option=""
fi

if [ -z "$string" ] ; then
paramError "The string is empty" 4
fi

# set the column length to fold at

let foldCol=$(( $(tput cols) - ($mtab + 4) ))

# take long string and wrap it nicely around the edge of the
terminal
# taking into account the item name + tab size

oldIFS=$IFS ; IFS=$'\n'
if [ ${#string} -gt $foldCol ] ; then
array=( $(echo $string | fold $option -w$foldCol) )
for x in ${array[@]} ; do
if [ $y -eq 1 ] ; then
printf "%${mtab}s: %s\n" "$item" "$x"
((y++))
else
printf "%${mtab}s: %s\n" "" "$x"
((y++))
fi
done
else
printf "%${mtab}s: %s\n" "$item" "$string"
fi
IFS=$oldIFS
}

# report distribution info

divider "Distribution Info"
distribution="Not Detected"

array=(
/etc/release # 0 Mageia
/etc/system-release # 1 RedHat / CentOS / Scientific Linux
/etc/slackware-version # 2 Slackware
/etc/issue # 3 Debian / Ubuntu
)

for (( x = 0 ; x <= ${#array[@]} ; x++ )) ; do
if [ -r ${array[$x]} ] ; then
case $x in
0 ) distribution=$(head -n1 /etc/release) ; break ;;
1 ) distribution=$(head -n1 /etc/system-release) ; break
;;
2 ) distribution=$(head -n1 /etc/slackware-version) ;
break ;;
3 ) distribution=$(head -n1 /etc/issue | cut -d' ' -f1,2)
; break ;;
esac
fi
done

foldText $mtab "Distribution" "$distribution" -s

# Report boot loader type and version

grubVersion ()
{
grub-install --version &> /dev/null
if [ $? -eq 0 ] ; then
cmd="grub-install"
fi
grub2-install --version &> /dev/null
if [ $? -eq 0 ] ; then
cmd="grub2-install"
fi
gver=$($cmd --version | sed -e 's/grub-install (//g;s/grub2-
install (//g;s/)//g')
}

bLoader="Not Detected"

array=(
/etc/lilo.conf # 0 lilo
/boot/grub/menu.lst # 1 Grub Legacy
/boot/burg/burg.cfg # 2 Burg (Grub 2 Fork)
/boot/burg # 3 Burg (Grub 2 Fork)
/boot/grub/grub.cfg # 4 Grub 2
/boot/grub/grub2.cfg # 5 Grub 2
/boot/grub2/grub.cfg # 6 Grub 2
/boot/grub2/grub2.cfg # 7 Grub 2
/boot/grub2 # 8 Grub 2
)

for (( x = 0 ; x <= ${#array[@]} ; x++ )) ; do
if [ -f ${array[$x]} -o -d ${array[$x]} ] ; then
case $x in
0 ) bLoader="Lilo" ; break ;;
1 ) bLoader="Grub Legacy" ; grubVersion ; break ;;
2 ) bLoader="Burg (Grub 2 Fork)" ; break ;;
3 ) bLoader="Burg (Grub 2 Fork)" ; break ;;
4 ) bLoader="Grub 2" ; grubVersion ; break ;;
5 ) bLoader="Grub 2" ; grubVersion ; break ;;
6 ) bLoader="Grub 2" ; grubVersion ; break ;;
7 ) bLoader="Grub 2" ; grubVersion ; break ;;
8 ) bLoader="Grub 2" ; grubVersion ; break ;;
esac
fi
done

printf "%${mtab}s: %s\n" "Boot Loader" "$bLoader"
if [ -n "$gver" ] ; then
printf "%${mtab}s: %s\n" "Grub Version" "$gver"
fi

# Kernel Release

printf "%${mtab}s: %s\n" "Kernel Release" "$(uname -r)"

# Kernel Taint Status

taintStatus=$(cat /proc/sys/kernel/tainted)
if [ $taintStatus -ne 0 ] ; then
taintResults="Tainted ($taintStatus)"
else
taintResults="Not Tainted ($taintStatus)"
fi
printf "%${mtab}s: %s\n" "Taint Status" "$taintResults"

# Report Systemd release if running systemd

which systemctl &> /dev/null
if [ $? -eq 0 ] ; then
sysdver=$(systemctl --version | head -n1)
printf "%${mtab}s: %s\n" "Systemd Version" "$sysdver"
fi

# users via user command and by searching the active processes

excludeSearch="grep |sudo su |sudo /bin/su"
array=($(ps aux | grep -Ev "$excludeSearch" | grep -E "/su | su " |
awk '{print $(NF-0)}' | sort))
array+=($(ps aux | grep -Ev "$excludeSearch" | grep -E "sudo -i" |
awk '{print $1}'))
array+=($(users | xargs -n1 | sort -u | xargs))
userCount=$(echo "(${#array[@]}) ${array[@]}")

# uptime & load averages

UpTime=$(uptime | awk -F',' '{print $1}' | cut -c 2-)
LoadAverage=$(uptime | awk -F "load average: " '{print $2}')

recdLine=$((LINENO + 1))
foldText $mtab "Users" "$userCount" -s
printf "%${mtab}s: %s\n" "Uptime" "$UpTime"
printf "%${mtab}s: %s\n\n" "Load Average" "$LoadAverage"

# report kernel taint status if any

taintStatus=$(cat /proc/sys/kernel/tainted)
if [ $taintStatus -ne 0 ] ; then
taintArray=(
"A module with a non-GPL license has been loaded, which includes
modules with no license set by modutils >= 2.4.9 and module-init-
tools."
"A module was force loaded by insmod -f set by modutils >= 2.4.9
and module-init-tools."
"Unsafe SMP processors: SMP with CPUs not designed for SMP."
"A module was forcibly unloaded from the system by rmmod -f."
"A hardware machine check error occurred on the system."
"A bad page was discovered on the system."
"The user has asked that the system be marked tainted. This
could be because they are running software that directly modifies the
hardware, or for other reasons."
"The system has died."
"The ACPI DSDT has been overridden with one supplied by the user
instead of using the one provided by the hardware."
"A kernel warning has occurred."
"A module from drivers/staging was loaded."
"The system is working around a severe firmware bug."
"An out-of-tree module has been loaded."
"An unsigned module has been loaded in a kernel supporting
module signature."
"A soft lockup has previously occurred on the system."
"The kernel has been live patched."
)

divider "Linux Kernel Taint Status Description"
let z=0 ; values=()
for (( a=1 ; a < 35000 ; a = a * 2 )) ; do
values+=( $a )
done
for mask in ${values[@]} ; do
if (( taintStatus & mask )) ; then
recdLine=$((LINENO + 1))
foldText $mtab $mask "${taintArray[$z]}" -s
printf "\n"
fi
((z++))
done
fi

# report SELinux status if running

which sestatus &> /dev/null
if [ $? -eq 0 ] ; then
oldmtab=$mtab
let mtab=30
oldIFS=$IFS
IFS=$'\n\:'

divider "SELinux Status"
sestatus | while read item status ; do
status=$(echo $status | awk '{print $1}')
printf "%${mtab}s: %s\n" "$item" "$status"
done
echo
mtab=$oldmtab
IFS=$oldIFS
fi

# report user info

divider "User Info"
set -- "User Name" "Pass" "User ID" "Primary Group" "Full Name" "Home
Directory" "Shell"
for x in {1..7} ; do
field=$(grep ^$USER /etc/passwd | head -n1 | cut -d: -f$x)
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
done
printf "\n"

# group reporting

divider "Group Info"
Groups=( $(grep $USER /etc/group | cut -d: -f1,3 | tr ':' ' ') )
for x in ${Groups[@]} ; do
oldIFS=$IFS
IFS=$' '
read GrpName GrpID < <(echo $x)
printf "%${mtab}s: %s\n" "$GrpName" "$GrpID"
IFS=$oldIFS
done
printf "\n"

# parse encrypted password from shadow file

cryptoParse ()
{
ep="Encrypted Password"
et="Encryption Type"
id=$(echo "$field" | cut -d'$' -f2)
salt=$(echo "$field" | cut -d'$' -f3)
rounds=$salt
cryptoPass=$(echo "$field" | cut -d'$' -f4)

case $id in
1 ) eType="MD5" ; m=1 ;;
2? ) eType="Blowfish" ; m=2 ;;
5 ) eType="SHA-256" ; m=3 ;;
6 ) eType="SHA-512" ; m=4 ;;
* ) eType="unknown ($id)" ; m=0 ;;
esac

printf "%${mtab}s: %s\n" "$et" "$eType"

if [ $id == "2a" -o $id == "2y" ] ; then
printf "%${mtab}s: %s\n" "Encryption Rounds" "$rounds"
else
printf "%${mtab}s: %s\n" "Encryption Salt" "$salt"
fi
recdLine=$((LINENO + 1))
foldText $mtab "$ep" "${cryptoPass:="Not Set"}"
}

# Encryption Definitions

crypto ()
{
cryptoDefs=(
"UNKNOWN"
"The security of the MD5 has been severely compromised, with its
weaknesses having been exploited in the field, most infamously by the
Flame malware in 2012. The CMU Software Engineering Institute
considers MD5 essentially cryptographically broken and unsuitable for
further use."
"Blowfish is known to be susceptible to attacks on reflectively
weak keys."
"This hashing algorithm implementation with a 32 byte output,
and the resulting output is 256-bits. A 256 bit hash, although
strong, is not strong enough, mostly due to rainbow tables. The salt
adds strength to the hash. A string is chosen at random from the
following characters: a-z, A-Z, 0-9, . and /. There are 64 possible
characters per character chosen in the random salt. If a salt of just
8 random characters is used then there are 64 to the 8th power or
281,474,976,710,656 possible combinations in the salt. This salt is
added to the hash making the hash much more random."
"This hashing algorithm implementation with a 64 byte output,
and the resulting output is 512-bits. A 512 bit hash, although
strong, is not strong enough, mostly due to rainbow tables. The salt
adds strength to the hash. A string is chosen at random from the
following characters: a-z, A-Z, 0-9, . and /. There are 64 possible
characters per character chosen in the random salt. If a salt of just
8 random characters is used then there are 64 to the 8th power or
281,474,976,710,656 possible combinations in the salt. This salt is
added to the hash making the hash much more random."
)

recommendation=(
"UNKNOWN"
"Change password algo to SHA-512 and update your password."
"Change password algo to SHA-512 and update your password."
"Consider upgrading to SHA-512"
"Choose an effective password and change it periodically."
)

instructions=(
"$ sudo authconfig --test | grep hashing"
"$ sudo authconfig --passalgo=sha512 --update"
"$ sudo passwd $USER"
)

if [ $m -ge 1 -o $m -le 4 ] ; then
recdLine=$(( LINENO + 1))
foldText $mtab "$eType" "${cryptoDefs[$m]}" -s
printf "\n"
recdLine=$(( LINENO + 1))
foldText $mtab "Recommendation" "${recommendation[$m]}" -s
printf "\n"
fi

if [ $m -eq 1 -o $m -le 3 ] ; then
printf "%${mtab}s: %s\n" "Instructions" "${instructions
[0]}"
printf "%${mtab}s: %s\n" "" "${instructions[1]}"
printf "%${mtab}s: %s\n" "" "${instructions[2]}"
printf "\n"
fi

if [ $m -eq 4 ] ; then
printf "%${mtab}s: %s\n" "Instructions" "${instructions
[2]}"
printf "\n"
fi
}

# report shadow info if using sudo or root

if [ $(id -u) -eq 0 -o $prompt == "yes" ] ; then

divider "Shadow Info"

oldmtab=$mtab
let mtab=32
set -- "Login Name" "Encrypted Password" "Date of Last Password
Change" \
"Minimum Password Age" "Maximum Password Age" "Password
Warning Period" \
"Password Inactivity Period" "Account Expiration Date"
"Reserved Field"

for x in {1..9} ; do
field=$($priv egrep "^$USER\:" /etc/shadow | cut -d: -f$x
| tr ':' ' ')
if [ $x -eq 1 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
elif [ $x -eq 2 ] ; then
if [ $(tr -dc '$' <<<"$field" | wc -c) -eq 3 ] ; then
cryptoParse "$field"
fi
shift
elif [ $x -eq 3 ] ; then
printf "%${mtab}s: %s\n" "$1" "$(date -d "01/01/1970
+${field}days" +%F)"
shift
elif [ $x -gt 3 -a $x -lt 8 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Unset"}
Days"
shift
elif [ $x -eq 8 ] ; then
printf "%${mtab}s: %s\n" "$1" "$(date -d "01/01/1970
+${field}days" +%F)"
shift
elif [ $x -eq 9 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
fi
done
mtab=$oldmtab
printf "\n"

crypto
fi

# environment reporting

divider "Environment Variables"

printf "%${mtab}s: %s\n" "Time Zone" "$(date +%Z)"
printf "%${mtab}s: %s\n" "Term" ${TERM:="Not Set"}
printf "%${mtab}s: %s x %s\n" "Term Size" "$(tput cols)" "$(tput
lines)"
printf "%${mtab}s: %s\n" "Shell" ${SHELL:="Not Set"}
printf "%${mtab}s: %s\n" "Language" ${LANG:="Not Set"}
printf "%${mtab}s: %s\n" "News Server" ${NNTPSERVER:="Not Set"}
printf "%${mtab}s: %s\n" "Editor" ${EDITOR:="Not Set"}

systemdDefault=$(systemctl get-default 2> /dev/null)
if [ $? -eq 0 ] ; then
printf "%${mtab}s: %s\n" "Default Target" "$systemdDefault"
else
runLevel=$(runlevel 2> /dev/null | awk '{print $2}')
printf "%${mtab}s: %s\n" "Run Level" "$runLevel"
fi
printf "\n"

screenInfo ()
{

# screen dimensions reporting

divider "Screen Dimensions"

# detect number of displays

oldIFS=$IFS ; IFS=$'\n\t '

displays=$(xrandr -d :0 -q | grep ' connected' | wc -l)
printf "%${mtab}s: %s\n\n" "Displays" "$displays"

# detect primary display

read display_device b c display_res e f g h i j k l display_dim \
< <(xrandr -d :0 -q | grep ' connected' | grep primary)

printf "%${mtab}s: %s\n" "Primary" "$display_device"
printf "%${mtab}s: %s\n" "Resolution" "${display_res%%+*}"
printf "%${mtab}s: %s\n\n" "Dimensions" "$display_dim"

# destect any additional displays (non-primary)

xrandr -d :0 -q | grep ' connected' | grep -v primary \
| while read display_device b display_res e f g h i j k l
display_dim
do
printf "%${mtab}s: %s\n" "other" "$display_device"
printf "%${mtab}s: %s\n" "Resolution" "${display_res%%+*}"
printf "%${mtab}s: %s\n\n" "Dimensions" "$display_dim"
done

# display screen dimensions overall

xdpyTest=$(xdpyinfo 2> /dev/null | grep -c resolution)
if [ $xdpyTest -ge 1 ] ; then
read a Dimensions c < <(xdpyinfo | grep dimensions)
read a Resolution < <(xdpyinfo | grep resolution)
printf "%${mtab}s: %s\n" "Dimensions" "$Dimensions"
printf "%${mtab}s: %s\n\n" "Resolution" "$Resolution"
fi

IFS=$oldIFS
}

xrandr -d :0 -q &> /dev/null
if [ $? -eq 0 ] ; then
if [ $(xrandr -d :0 -q | grep ' connected' | wc -l) -ge 1 ]
then
screenInfo
fi
fi

# tmux session reporting

temp=$(tmux list-sessions 2> /dev/null)
if [ $? -eq 0 ] ; then
sessions=($(tmux list-sessions | awk '{print $1 $11}'))
divider "Tmux Sessions"
for b in "${sessions[@]}" ; do
printf "%${mtab}s: %s\n" "Session Name" "$b"
done
printf "\n"
fi

# screen session reporting

which screen &> /dev/null
if [ $? -eq 0 ] ; then
if [ -d /var/run/screen/S-${USER} ] && [ $(ls /var/run/screen/S-
${USER} | wc -l) -ge 1 ] ; then
scnSessions=( $(screen -list | grep -vi "there" | grep -vi
"socket" | grep -v "^[[:space:]]*$" | awk '{print $1, $2}') )
divider "Screen Sessions"
for x in "${scnSessions[@]}" ; do
printf "%${mtab}s: %s\n" "Session Name" "${x}"
done
printf "\n"
fi
fi

# detect Firmware Mode, Legacy BIOS or UEFI

divider "Machine Info"
detectFirmware=$(awk '{ if ($1 != "#" && $2 == "/boot/efi") print $2
}' /etc/fstab)
if [ "$detectFirmware" == "/boot/efi" ] ; then
firmware="UEFI"
else
firmware="BIOS/MBR"
fi
printf "%${mtab}s: %s\n" "Firmware" "$firmware"

# CPUs and Sockets

sockets=$(lscpu | grep -i socket\(s\) | awk '{print $2}')
CPU=$(awk -F ": " '/model name/{print $2 ; exit}' /proc/cpuinfo)
printf "%${mtab}s: %s\n" "Sockets" "$sockets"
printf "%${mtab}s: %s\n" "Processor" "$CPU"

# CPU cores, siblings and HyperThreading

cores=$(lscpu | grep -i core\(s\) | awk '{print $4}')
if [ ${#cores} -eq 0 ] ; then
cores="Not Detected"
fi

# gather siblings info and report on potential hyper threading

Siblings=$(lscpu | grep -i thread\(s\) | awk '{print $4}')
if [ $Siblings -eq 2 ] ; then
hyperThreading="(HyperThreading)"
else
hyperThreading=""
fi
printf "%${mtab}s: %s %s\n" "CPU Cores" "$cores" "$hyperThreading"

# Memory Info

Mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
IFS=$' ' eval set -- $(vmstat | tail -n1)
VMswpd=$3 ; VMfree=$4 ; VMbuff=$5 ; VMcache=$6

printf "%${mtab}s: %'.0f\n" "Total Memory" "$Mem"
printf "%${mtab}s: %'.0f\n" "VM Swap" "$VMswpd"
printf "%${mtab}s: %'.0f\n" "VM Free" "$VMfree"
printf "%${mtab}s: %'.0f\n" "VM Buffer" "$VMbuff"
printf "%${mtab}s: %'.0f\n" "VM Cache" "$VMcache"

# Report Sound Modules

if [ -r /proc/asound/modules ] ; then
soundMod=( $(cat /proc/asound/modules 2> /dev/null | awk '{print
$1,$2}' | tr '_' ' ') )
if [ "${#soundMod[@]}" -eq 0 ] ; then
soundMod=("Not Detected")
fi
else
soundMod=("Not Detected")
fi

for x in "${soundMod[@]}" ; do
printf "%${mtab}s: %s\n" "Sound Module" "$x"
done

# report sound driver

if [ -r /proc/asound/version ] ; then
soundDrv=$(cat /proc/asound/version | awk -F "[Dd]river "
'{print $2}')
if [ "${#soundDrv}" -eq 0 ] ; then
soundDrv="Not Detected"
fi
else
soundDrv="Not Detected"
fi

printf "%${mtab}s: %s\n\n" "Sound Driver" "$soundDrv"

# graphics adapter reporting

graphicsType=$(lspci -k | awk -F ": " '/VGA/{print $2}')
slotNum=$(lspci -k | grep -i vga | awk 'NR==1 {print $1}')
graphicsInfo=($($priv lspci -v -s $slotNum | grep -v $slotNum))
driver=$(printf "%s\n" "${graphicsInfo[@]}" | grep -i kernel | awk
'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i version | awk
'NR==1 {print $1}')

if [ ! -z "$tempVar" ] ; then
if [[ "$tempVar" == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null | grep -i
version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Graphics Adapter"
printf "%s\n\n" "${graphicsType}"
printf "%s\n" "${graphicsInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:}"
printf "\n"

# ethernet adapter reporting

lspci -k | grep -i ethernet | grep -i -v wireless &> /dev/null
if [ $? -eq 0 ] ; then
ethernetType=$(lspci -k | awk -F ": " '/Ethernet/{print $2}')
slotNum=$(lspci -k | grep -i ethernet | grep -i -v wireless |
awk 'NR==1 {print $1}')
ethernetInfo=($($priv lspci -v -s $slotNum | grep -v $slotNum))
driver=$(printf "%s\n" "${ethernetInfo[@]}" | grep -i kernel |
awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i version |
awk 'NR==1 {print $1}')
if [ ! -z "$tempVar" ] ; then
if [[ "$tempVar" == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null |
grep -i version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Ethernet Adapter Info"
printf "%s\n\n" "${ethernetType}"
printf "%s\n" "${ethernetInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:}"
printf "\n"
fi

# wireless ethernet reporting

if [[ $(lspci -k | egrep -i '(network|centrino|wireless)') ]] ; then
wirelessType=$(lspci -k | egrep -i
'(network|centrino|wireless)' | cut -d':' -f3 | cut -c 2-)
slotNum=$(lspci -k | egrep -i '(network|centrino|wireless)' |
awk 'NR==1 {print $1}')

if [ $? -eq 0 ] ; then
wirelessInfo=($($priv lspci -v -s $slotNum | grep -v
$slotNum))
driver=$(printf "%s\n" "${wirelessInfo[@]}" | grep -i
kernel | awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i
version | awk 'NR==1 {print $1}')
if [ ! -z "$tempVar" ] ; then
if [[ $tempVar == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null
| grep -i version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Wireless Adapter Info"
printf "%s\n\n" "${wirelessType}"
printf "%s\n" "${wirelessInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:*}"
printf "\n"
fi
fi

webTest ()
{
# host testing

divider "Host Testing"
let count=0
sites=("www.redhat.com" "www.ubuntu.com" "www.google.com"
"www.yahoo.com")
for ix in ${sites[@]} ; do
wget -q -t1 -T5 --spider --timeout=10 $ix

if [ $? -eq 0 ] ; then
((count++))
printf "%${mtab}s: %s --> %s: %s\n" "Status" "Pass"
"Host" "$ix"
else
printf "%${mtab}s: %s --> %s: %s\n" "Status" "Fail"
"Host" "$ix"
fi
done
printf "\n"

# if any of the four domains pass the web crawl test consider
the web test a success

if [ $count -ge 1 ] ; then
let webTestResult=0
else
let webTestResult=1
fi
}

outsideNetwork ()
{
# Gather external IP address and use it to reverse lookup

divider "External Network Info"
ExternalIP=$(wget -4 -qO- --timeout=10 --tries=1 icanhazip.com)
ISP=$(wget -4 -qO- --timeout=10 --tries=1 ipinfo.io/
$ExternalIP/org)

if [ $? -ne 0 ] ; then
which whois &> /dev/null
if [ $? -eq 0 ] ; then
IFSBAK=$IFS ; IFS=$'\n\t '
read a ISP < <(whois $ExternalIP | grep -i custname)
IFS=$IFSBAK
fi
fi

ReverseLookup=$(dig +short -x $ExternalIP)
HName=$(hostname -s)

printf "%${mtab}s: %s\n" "ISP" "${ISP:=Not Detected}"
printf "%${mtab}s: %s\n" "External IP" "${ExternalIP:=Not
Detected}"
printf "%${mtab}s: %s\n" "Reverse Lookup" "${ReverseLookup:=Not
Detected}"
printf "%${mtab}s: %s\n" "Hostname" "${HName:=Not Detected}"

# obtain the domain name if possible

dnsdomainname &> /dev/null
if [ $? -eq 0 ] ; then
FQDNcondition="FQDN"
DomainName=$(dnsdomainname)
else
FQDNcondition="HOST + rDNS"
DomainName="$ReverseLookup"
fi

FQDN="${HName}.${DomainName}"

which nm-tool &> /dev/null
if [ $? -eq 0 ] ; then
DNSIP=$(nm-tool | grep $assignedIP -A5 | awk /DNS/'{print
$2;exit}')
else
DNSIP=$(dig redhat.com | grep -i server | tr '#()' ' ' |
awk '{print $3}')
fi

if [ $(dig +short -x $DNSIP) ] ; then
DNSName=$(dig +short -x $DNSIP)
else
DNSName="None Detected"
fi

printf "%${mtab}s: %s\n" "Domain Name" "$DomainName"
printf "%${mtab}s: %s\n" "${FQDNcondition}" "${FQDN}"

# Obtain mail exchange if possible

MailExchange=$(dig +short $DomainName MX | head -n1 | awk
'{print $2}')
if [ -z $MailExchange ] ; then
MailExchange="None Detected"
fi
printf "%${mtab}s: %s\n" "Mail Exchange" "$MailExchange"

# Collect nameserver and DNS Name

if [ $(dig +short $DomainName NS | head -n1) ] ; then
NameServer=$(dig +short $DomainName NS | head -n1)
else
NameServer="None Detected"
fi

printf "%${mtab}s: %s\n" "Name Server" "$NameServer"
printf "%${mtab}s: %s\n" "DNS" "$DNSIP"
printf "%${mtab}s: %s\n" "DNS Name" "$DNSName"
printf "\n"
}

insideNetwork ()
{
oldIFS=$IFS
IFS=$'\n\t '

pingTest ()
{
# ping test routine

ping -c 1 $addr &> /dev/null
if [ $? -eq 0 ] ; then
let pingResult=0
printf " (Pass)\n"
else
let pingResult=1
printf " (Fail)\n"
fi
}

dnsTest ()
{
# DNS test routine

dig redhat.com @$x &> /dev/null
if [ $? -eq 0 ] ; then
let dnsResult=0
printf " (Pass)\n"
else
let dnsResult=1
printf " (Fail)\n"
fi
}

# test if network is up and if so obtain IP address and device
ID

ip addr | grep -i "state up" &> /dev/null
if [ $? -eq 0 ] ; then
let networkStatusResult=0

# get local IP address

set -- $(ip route get 8.8.8.8)
while [ "$1" != "src" ] ; do
shift
assignedIP="$2"
done

# get local device ID

set -- $(ip route get 8.8.8.8)
while [ "$1" != "dev" ] ; do
shift
deviceID="$2"
done

# find the gateway IP address

set -- $(ip route get 8.8.8.8)
while [ "$1" != "via" ] ; do
shift
gatewayIP="$2"
done

# find dns ip address

which nm-tool &> /dev/null
if [ $? -eq 0 ] ; then
DNS=$(nm-tool | grep $assignedIP -A5 | awk
/DNS/'{print $2}')
else
DNS=$(dig redhat.com | grep -i server | tr '#()' ' '
| awk '{print $3}')
fi

# print the local device and assigned ip and perform ping
test on it

divider "Inside Network"
printf "%${mtab}s: %s %s" "Assigned IP" "$assignedIP"
"($deviceID)"
addr=$assignedIP
pingTest

# print thee local gateway and perform ping test on it

printf "%${mtab}s: %s" "Gateway" "$gatewayIP"
addr=$gatewayIP
pingTest

# print the found dns listings

for x in ${DNS[@]} ; do
printf "%${mtab}s: %s" "DNS" "$x"
dnsTest
done
printf "\n"
else
let networkStatusResult=1
fi
IFS=$oldIFS
}

# test inside network, if successful, test hosts, if successful, get
outside network

insideNetwork
if [ $pingResult -eq 0 -a $dnsResult -eq 0 ] ; then
webTest
if [ $webTestResult -eq 0 ] ; then
outsideNetwork
fi
fi

# report device status if network is up

if [ $networkStatusResult -eq 0 ] ; then

divider "Interface Status"
let line=1
scnSize=$(( $(tput cols) - 4 ))
array=($(ip -s link show $deviceID | sed -e 's/^[1-9]\: //'))
for x in "${array[@]}" ; do
if [ $line -eq 1 ] ; then
printf "\t%s\n\n" "$x" | fmt -c -w$scnSize
else
printf "\t%s\n" "$x"
fi
((line++))
done
printf "\n"
fi

# report device block info from available options

which lsblk &> /dev/null
if [ $? -eq 0 ] ; then
options=(NAME SIZE FSTYPE LABEL MOUNTPOINT PARTLABEL UUID)
for x in ${options[@]} ; do
lsblk -o $x &> /dev/null
if [ $? -eq 0 ] ; then
params+=( $x )
fi
cmdOptions=$(echo ${params[@]} | tr ' ' ',')
done
divider "Device Info"
lsblk -o $cmdOptions
printf "\n"
fi

# report mounted volumes

divider "Volume Info"
df -hTP
printf "\n"

## end linfo.sh ##

LOL.

THE RETARDNESS WITH THIS IS STRONG.

I MUST NUKE IT WITH SOME ANTI-RETARDNESS.

HERE YA GO:

HARDDISK LABEL API (INVENTED BY SKYBUCK RIGHT NOW LOL)

Pseudo Design:

GetStorageDeviceCount()

GetStorageDeviceLabel(Number)

Actual code:

var
I : integer;
begin

for I:=0 to GetStorageDeviceCount()-1 do
begin
writeln( 'Storage Device ', I, ' Label: ', GetStorageDeviceLabel(I) );
end;

end.

Doesn't need to be any more complex than that.

Slight optimization and more safe to if a device is removed during this loop or not... api implementation must be safe for that though:



var
I : integer;
begin

C := GetStorageDeviceCount();
for I:=0 to C-1 do
begin
writeln( 'Storage Device ', I, ' Label: ', GetStorageDeviceLabel(I) );
end;

end.

Bye,
Skybuck.
 
On Wednesday, September 25, 2019 at 10:33:25 AM UTC+2, DecadentLinux...@decadence.org wrote:
skybuck2000@hotmail.com wrote in
news:01f9ebb2-a803-4cf0-8100-32c244a554e3@googlegroups.com:

Imagine following scenerio:

HD-LBA-235235235235234
HD-LBA-235235235423523

One of these drives is source, one of these drives is backup
drive.

How the fuck do you tell which is which ?!

This is problem with current harddisk technology.

No proper labelling.

This is scary a fuck for disk-to-disk backup purposes.

Is this the best IT technology has to offer ?! Very shamefull !

Excellent example of this horrific situation is the super poor
open source software called "Clonezilla" it makes absolutely no
attempt to identify drives in any meaningfull way by for example
reading NTFS labels to give the users some clue as to which drive
is which. There may be some info inspection option in it's menu or
not... I have not even used this software, just watched some
youtube videos.

I do however use windows and it has the same problem and it's very
annoying when I need to identify which is the boot drive and which
is something totally else.

Surely hardware manufacturers can find some flashable ep-rom chip
somewhere to allow users to properly label their hardware ?!

This has to change for the better !

Some simple "label-technology-chip" could be created which can be
added to products, this would make me feel goooooood.

Label meaning letters and digits at the very least.

So user can for example rename hardware as follows:

SystemDisk
DataDisk
BackupDisk

That'd be nice.

Bye,
Skybuck.

User level 1 thru ten... You rate a two.

Computer tech skill 1 through ten, you rate a 1.

LOL KEEP IT KISS STUPID !

Bye,
Skybuck.
 
On Thursday, September 26, 2019 at 2:01:51 PM UTC+2, DecadentLinux...@decadence.org wrote:
whit3rd <whit3rd@gmail.com> wrote in
news:605c4c9a-adcb-407d-ab84-43e4d19fe5e3@googlegroups.com:

snip

I'm likely to change the volume label(s) at a whim, it is unlikely
to match a paper attached to a drive. There's a 'System
Information' way to find which interfaces have which hardware
attached, so wire-tracing can work. That tool also grabs disk
serial numbers (but those aren't always easy to locate on physical
drives).


There is a linux bash script that yields copius amounts of system
information. There is a drives section that is pretty comprehensive.

Linfo1.sh by Marek Novotny (the github page is gone now)
Quote:

#!/bin/bash

#############################################################
#
# script : linfo.sh
# version : 2.36
# About : Simple Linux System Information
# Updated : 2016-11-04
# Written by : Marek Novotny
# Contributors : Chris Davies
# : Jonathan N. Little
# : Bit Twister
# : Andrew
# : Gamo
# Testers : Wildman
# : Mike Easter
#
# license : GPL v2 (only)
# github : https://github.com/marek-novotny/linfo
#
#############################################################

option=$1
message=()
let networkStatusResult=1
let pingResult=1
let dnsResult=1
let webTestResult=1
let mtab=16
IFS=$'\n'
recdLine=""

# requirements

reqCmds=()

# setup path
export PATH=$PATH:/sbin:/usr/sbin

# check first argument for -p or --prompt to run in prompt mode

if [ "$option" == "-p" -o "$option" == "--prompt" ] ; then
prompt="yes"
priv=sudo
$priv -v
else
prompt="no"
unset priv
fi

Ver='2.36'
VDate='2016-11-04'
printf "%*s\n" "$(tput cols)" "$(date)"
printf "%*s\n" "$(tput cols)" "Linfo Version $Ver, released: $VDate"
printf "%*s\n" "$(tput cols)" "github: https://github.com/marek-
novotny/linfo"
printf "%*s\n" "$(tput cols)" "Written by: Marek Novotny"

divider ()
{
printf "%s:\n" "$1"
printf "%$(tput cols)s\n\n" "" | tr ' ' '='
}

foldText ()
{
paramError ()
{
printf "$(basename $0) error! Incorrect parameters sent to
foldText function from ln: $recdLine\n $1\n" >&2
exit $2
}

# usage foldText {numeric tab} {item name} {item value string}
{option -s or blank}

mtab="$1" # set the tab column
item="$2" # set the string name
string="$3" # set the string itself
option="$4" # set the option type -s for fold at space
# or leave blank for hard cut
let y=1 # set the counter so the first line
# printed gets the item name only.

# make sure in script parameters are appropriate

if [ $# -lt 3 -o $# -gt 4 ] ; then
paramError "Incorrect number of arguments ($#)" 2
fi

regEx='^[0-9]+$'
if ! [[ $1 =~ $regEx ]] ; then
paramError "mtab is not set to a numeric value" 3
fi

if [ "$option" != "-s" ] ; then
option=""
fi

if [ -z "$string" ] ; then
paramError "The string is empty" 4
fi

# set the column length to fold at

let foldCol=$(( $(tput cols) - ($mtab + 4) ))

# take long string and wrap it nicely around the edge of the
terminal
# taking into account the item name + tab size

oldIFS=$IFS ; IFS=$'\n'
if [ ${#string} -gt $foldCol ] ; then
array=( $(echo $string | fold $option -w$foldCol) )
for x in ${array[@]} ; do
if [ $y -eq 1 ] ; then
printf "%${mtab}s: %s\n" "$item" "$x"
((y++))
else
printf "%${mtab}s: %s\n" "" "$x"
((y++))
fi
done
else
printf "%${mtab}s: %s\n" "$item" "$string"
fi
IFS=$oldIFS
}

# report distribution info

divider "Distribution Info"
distribution="Not Detected"

array=(
/etc/release # 0 Mageia
/etc/system-release # 1 RedHat / CentOS / Scientific Linux
/etc/slackware-version # 2 Slackware
/etc/issue # 3 Debian / Ubuntu
)

for (( x = 0 ; x <= ${#array[@]} ; x++ )) ; do
if [ -r ${array[$x]} ] ; then
case $x in
0 ) distribution=$(head -n1 /etc/release) ; break ;;
1 ) distribution=$(head -n1 /etc/system-release) ; break
;;
2 ) distribution=$(head -n1 /etc/slackware-version) ;
break ;;
3 ) distribution=$(head -n1 /etc/issue | cut -d' ' -f1,2)
; break ;;
esac
fi
done

foldText $mtab "Distribution" "$distribution" -s

# Report boot loader type and version

grubVersion ()
{
grub-install --version &> /dev/null
if [ $? -eq 0 ] ; then
cmd="grub-install"
fi
grub2-install --version &> /dev/null
if [ $? -eq 0 ] ; then
cmd="grub2-install"
fi
gver=$($cmd --version | sed -e 's/grub-install (//g;s/grub2-
install (//g;s/)//g')
}

bLoader="Not Detected"

array=(
/etc/lilo.conf # 0 lilo
/boot/grub/menu.lst # 1 Grub Legacy
/boot/burg/burg.cfg # 2 Burg (Grub 2 Fork)
/boot/burg # 3 Burg (Grub 2 Fork)
/boot/grub/grub.cfg # 4 Grub 2
/boot/grub/grub2.cfg # 5 Grub 2
/boot/grub2/grub.cfg # 6 Grub 2
/boot/grub2/grub2.cfg # 7 Grub 2
/boot/grub2 # 8 Grub 2
)

for (( x = 0 ; x <= ${#array[@]} ; x++ )) ; do
if [ -f ${array[$x]} -o -d ${array[$x]} ] ; then
case $x in
0 ) bLoader="Lilo" ; break ;;
1 ) bLoader="Grub Legacy" ; grubVersion ; break ;;
2 ) bLoader="Burg (Grub 2 Fork)" ; break ;;
3 ) bLoader="Burg (Grub 2 Fork)" ; break ;;
4 ) bLoader="Grub 2" ; grubVersion ; break ;;
5 ) bLoader="Grub 2" ; grubVersion ; break ;;
6 ) bLoader="Grub 2" ; grubVersion ; break ;;
7 ) bLoader="Grub 2" ; grubVersion ; break ;;
8 ) bLoader="Grub 2" ; grubVersion ; break ;;
esac
fi
done

printf "%${mtab}s: %s\n" "Boot Loader" "$bLoader"
if [ -n "$gver" ] ; then
printf "%${mtab}s: %s\n" "Grub Version" "$gver"
fi

# Kernel Release

printf "%${mtab}s: %s\n" "Kernel Release" "$(uname -r)"

# Kernel Taint Status

taintStatus=$(cat /proc/sys/kernel/tainted)
if [ $taintStatus -ne 0 ] ; then
taintResults="Tainted ($taintStatus)"
else
taintResults="Not Tainted ($taintStatus)"
fi
printf "%${mtab}s: %s\n" "Taint Status" "$taintResults"

# Report Systemd release if running systemd

which systemctl &> /dev/null
if [ $? -eq 0 ] ; then
sysdver=$(systemctl --version | head -n1)
printf "%${mtab}s: %s\n" "Systemd Version" "$sysdver"
fi

# users via user command and by searching the active processes

excludeSearch="grep |sudo su |sudo /bin/su"
array=($(ps aux | grep -Ev "$excludeSearch" | grep -E "/su | su " |
awk '{print $(NF-0)}' | sort))
array+=($(ps aux | grep -Ev "$excludeSearch" | grep -E "sudo -i" |
awk '{print $1}'))
array+=($(users | xargs -n1 | sort -u | xargs))
userCount=$(echo "(${#array[@]}) ${array[@]}")

# uptime & load averages

UpTime=$(uptime | awk -F',' '{print $1}' | cut -c 2-)
LoadAverage=$(uptime | awk -F "load average: " '{print $2}')

recdLine=$((LINENO + 1))
foldText $mtab "Users" "$userCount" -s
printf "%${mtab}s: %s\n" "Uptime" "$UpTime"
printf "%${mtab}s: %s\n\n" "Load Average" "$LoadAverage"

# report kernel taint status if any

taintStatus=$(cat /proc/sys/kernel/tainted)
if [ $taintStatus -ne 0 ] ; then
taintArray=(
"A module with a non-GPL license has been loaded, which includes
modules with no license set by modutils >= 2.4.9 and module-init-
tools."
"A module was force loaded by insmod -f set by modutils >= 2.4.9
and module-init-tools."
"Unsafe SMP processors: SMP with CPUs not designed for SMP."
"A module was forcibly unloaded from the system by rmmod -f."
"A hardware machine check error occurred on the system."
"A bad page was discovered on the system."
"The user has asked that the system be marked tainted. This
could be because they are running software that directly modifies the
hardware, or for other reasons."
"The system has died."
"The ACPI DSDT has been overridden with one supplied by the user
instead of using the one provided by the hardware."
"A kernel warning has occurred."
"A module from drivers/staging was loaded."
"The system is working around a severe firmware bug."
"An out-of-tree module has been loaded."
"An unsigned module has been loaded in a kernel supporting
module signature."
"A soft lockup has previously occurred on the system."
"The kernel has been live patched."
)

divider "Linux Kernel Taint Status Description"
let z=0 ; values=()
for (( a=1 ; a < 35000 ; a = a * 2 )) ; do
values+=( $a )
done
for mask in ${values[@]} ; do
if (( taintStatus & mask )) ; then
recdLine=$((LINENO + 1))
foldText $mtab $mask "${taintArray[$z]}" -s
printf "\n"
fi
((z++))
done
fi

# report SELinux status if running

which sestatus &> /dev/null
if [ $? -eq 0 ] ; then
oldmtab=$mtab
let mtab=30
oldIFS=$IFS
IFS=$'\n\:'

divider "SELinux Status"
sestatus | while read item status ; do
status=$(echo $status | awk '{print $1}')
printf "%${mtab}s: %s\n" "$item" "$status"
done
echo
mtab=$oldmtab
IFS=$oldIFS
fi

# report user info

divider "User Info"
set -- "User Name" "Pass" "User ID" "Primary Group" "Full Name" "Home
Directory" "Shell"
for x in {1..7} ; do
field=$(grep ^$USER /etc/passwd | head -n1 | cut -d: -f$x)
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
done
printf "\n"

# group reporting

divider "Group Info"
Groups=( $(grep $USER /etc/group | cut -d: -f1,3 | tr ':' ' ') )
for x in ${Groups[@]} ; do
oldIFS=$IFS
IFS=$' '
read GrpName GrpID < <(echo $x)
printf "%${mtab}s: %s\n" "$GrpName" "$GrpID"
IFS=$oldIFS
done
printf "\n"

# parse encrypted password from shadow file

cryptoParse ()
{
ep="Encrypted Password"
et="Encryption Type"
id=$(echo "$field" | cut -d'$' -f2)
salt=$(echo "$field" | cut -d'$' -f3)
rounds=$salt
cryptoPass=$(echo "$field" | cut -d'$' -f4)

case $id in
1 ) eType="MD5" ; m=1 ;;
2? ) eType="Blowfish" ; m=2 ;;
5 ) eType="SHA-256" ; m=3 ;;
6 ) eType="SHA-512" ; m=4 ;;
* ) eType="unknown ($id)" ; m=0 ;;
esac

printf "%${mtab}s: %s\n" "$et" "$eType"

if [ $id == "2a" -o $id == "2y" ] ; then
printf "%${mtab}s: %s\n" "Encryption Rounds" "$rounds"
else
printf "%${mtab}s: %s\n" "Encryption Salt" "$salt"
fi
recdLine=$((LINENO + 1))
foldText $mtab "$ep" "${cryptoPass:="Not Set"}"
}

# Encryption Definitions

crypto ()
{
cryptoDefs=(
"UNKNOWN"
"The security of the MD5 has been severely compromised, with its
weaknesses having been exploited in the field, most infamously by the
Flame malware in 2012. The CMU Software Engineering Institute
considers MD5 essentially cryptographically broken and unsuitable for
further use."
"Blowfish is known to be susceptible to attacks on reflectively
weak keys."
"This hashing algorithm implementation with a 32 byte output,
and the resulting output is 256-bits. A 256 bit hash, although
strong, is not strong enough, mostly due to rainbow tables. The salt
adds strength to the hash. A string is chosen at random from the
following characters: a-z, A-Z, 0-9, . and /. There are 64 possible
characters per character chosen in the random salt. If a salt of just
8 random characters is used then there are 64 to the 8th power or
281,474,976,710,656 possible combinations in the salt. This salt is
added to the hash making the hash much more random."
"This hashing algorithm implementation with a 64 byte output,
and the resulting output is 512-bits. A 512 bit hash, although
strong, is not strong enough, mostly due to rainbow tables. The salt
adds strength to the hash. A string is chosen at random from the
following characters: a-z, A-Z, 0-9, . and /. There are 64 possible
characters per character chosen in the random salt. If a salt of just
8 random characters is used then there are 64 to the 8th power or
281,474,976,710,656 possible combinations in the salt. This salt is
added to the hash making the hash much more random."
)

recommendation=(
"UNKNOWN"
"Change password algo to SHA-512 and update your password."
"Change password algo to SHA-512 and update your password."
"Consider upgrading to SHA-512"
"Choose an effective password and change it periodically."
)

instructions=(
"$ sudo authconfig --test | grep hashing"
"$ sudo authconfig --passalgo=sha512 --update"
"$ sudo passwd $USER"
)

if [ $m -ge 1 -o $m -le 4 ] ; then
recdLine=$(( LINENO + 1))
foldText $mtab "$eType" "${cryptoDefs[$m]}" -s
printf "\n"
recdLine=$(( LINENO + 1))
foldText $mtab "Recommendation" "${recommendation[$m]}" -s
printf "\n"
fi

if [ $m -eq 1 -o $m -le 3 ] ; then
printf "%${mtab}s: %s\n" "Instructions" "${instructions
[0]}"
printf "%${mtab}s: %s\n" "" "${instructions[1]}"
printf "%${mtab}s: %s\n" "" "${instructions[2]}"
printf "\n"
fi

if [ $m -eq 4 ] ; then
printf "%${mtab}s: %s\n" "Instructions" "${instructions
[2]}"
printf "\n"
fi
}

# report shadow info if using sudo or root

if [ $(id -u) -eq 0 -o $prompt == "yes" ] ; then

divider "Shadow Info"

oldmtab=$mtab
let mtab=32
set -- "Login Name" "Encrypted Password" "Date of Last Password
Change" \
"Minimum Password Age" "Maximum Password Age" "Password
Warning Period" \
"Password Inactivity Period" "Account Expiration Date"
"Reserved Field"

for x in {1..9} ; do
field=$($priv egrep "^$USER\:" /etc/shadow | cut -d: -f$x
| tr ':' ' ')
if [ $x -eq 1 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
elif [ $x -eq 2 ] ; then
if [ $(tr -dc '$' <<<"$field" | wc -c) -eq 3 ] ; then
cryptoParse "$field"
fi
shift
elif [ $x -eq 3 ] ; then
printf "%${mtab}s: %s\n" "$1" "$(date -d "01/01/1970
+${field}days" +%F)"
shift
elif [ $x -gt 3 -a $x -lt 8 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Unset"}
Days"
shift
elif [ $x -eq 8 ] ; then
printf "%${mtab}s: %s\n" "$1" "$(date -d "01/01/1970
+${field}days" +%F)"
shift
elif [ $x -eq 9 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
fi
done
mtab=$oldmtab
printf "\n"

crypto
fi

# environment reporting

divider "Environment Variables"

printf "%${mtab}s: %s\n" "Time Zone" "$(date +%Z)"
printf "%${mtab}s: %s\n" "Term" ${TERM:="Not Set"}
printf "%${mtab}s: %s x %s\n" "Term Size" "$(tput cols)" "$(tput
lines)"
printf "%${mtab}s: %s\n" "Shell" ${SHELL:="Not Set"}
printf "%${mtab}s: %s\n" "Language" ${LANG:="Not Set"}
printf "%${mtab}s: %s\n" "News Server" ${NNTPSERVER:="Not Set"}
printf "%${mtab}s: %s\n" "Editor" ${EDITOR:="Not Set"}

systemdDefault=$(systemctl get-default 2> /dev/null)
if [ $? -eq 0 ] ; then
printf "%${mtab}s: %s\n" "Default Target" "$systemdDefault"
else
runLevel=$(runlevel 2> /dev/null | awk '{print $2}')
printf "%${mtab}s: %s\n" "Run Level" "$runLevel"
fi
printf "\n"

screenInfo ()
{

# screen dimensions reporting

divider "Screen Dimensions"

# detect number of displays

oldIFS=$IFS ; IFS=$'\n\t '

displays=$(xrandr -d :0 -q | grep ' connected' | wc -l)
printf "%${mtab}s: %s\n\n" "Displays" "$displays"

# detect primary display

read display_device b c display_res e f g h i j k l display_dim \
< <(xrandr -d :0 -q | grep ' connected' | grep primary)

printf "%${mtab}s: %s\n" "Primary" "$display_device"
printf "%${mtab}s: %s\n" "Resolution" "${display_res%%+*}"
printf "%${mtab}s: %s\n\n" "Dimensions" "$display_dim"

# destect any additional displays (non-primary)

xrandr -d :0 -q | grep ' connected' | grep -v primary \
| while read display_device b display_res e f g h i j k l
display_dim
do
printf "%${mtab}s: %s\n" "other" "$display_device"
printf "%${mtab}s: %s\n" "Resolution" "${display_res%%+*}"
printf "%${mtab}s: %s\n\n" "Dimensions" "$display_dim"
done

# display screen dimensions overall

xdpyTest=$(xdpyinfo 2> /dev/null | grep -c resolution)
if [ $xdpyTest -ge 1 ] ; then
read a Dimensions c < <(xdpyinfo | grep dimensions)
read a Resolution < <(xdpyinfo | grep resolution)
printf "%${mtab}s: %s\n" "Dimensions" "$Dimensions"
printf "%${mtab}s: %s\n\n" "Resolution" "$Resolution"
fi

IFS=$oldIFS
}

xrandr -d :0 -q &> /dev/null
if [ $? -eq 0 ] ; then
if [ $(xrandr -d :0 -q | grep ' connected' | wc -l) -ge 1 ]
then
screenInfo
fi
fi

# tmux session reporting

temp=$(tmux list-sessions 2> /dev/null)
if [ $? -eq 0 ] ; then
sessions=($(tmux list-sessions | awk '{print $1 $11}'))
divider "Tmux Sessions"
for b in "${sessions[@]}" ; do
printf "%${mtab}s: %s\n" "Session Name" "$b"
done
printf "\n"
fi

# screen session reporting

which screen &> /dev/null
if [ $? -eq 0 ] ; then
if [ -d /var/run/screen/S-${USER} ] && [ $(ls /var/run/screen/S-
${USER} | wc -l) -ge 1 ] ; then
scnSessions=( $(screen -list | grep -vi "there" | grep -vi
"socket" | grep -v "^[[:space:]]*$" | awk '{print $1, $2}') )
divider "Screen Sessions"
for x in "${scnSessions[@]}" ; do
printf "%${mtab}s: %s\n" "Session Name" "${x}"
done
printf "\n"
fi
fi

# detect Firmware Mode, Legacy BIOS or UEFI

divider "Machine Info"
detectFirmware=$(awk '{ if ($1 != "#" && $2 == "/boot/efi") print $2
}' /etc/fstab)
if [ "$detectFirmware" == "/boot/efi" ] ; then
firmware="UEFI"
else
firmware="BIOS/MBR"
fi
printf "%${mtab}s: %s\n" "Firmware" "$firmware"

# CPUs and Sockets

sockets=$(lscpu | grep -i socket\(s\) | awk '{print $2}')
CPU=$(awk -F ": " '/model name/{print $2 ; exit}' /proc/cpuinfo)
printf "%${mtab}s: %s\n" "Sockets" "$sockets"
printf "%${mtab}s: %s\n" "Processor" "$CPU"

# CPU cores, siblings and HyperThreading

cores=$(lscpu | grep -i core\(s\) | awk '{print $4}')
if [ ${#cores} -eq 0 ] ; then
cores="Not Detected"
fi

# gather siblings info and report on potential hyper threading

Siblings=$(lscpu | grep -i thread\(s\) | awk '{print $4}')
if [ $Siblings -eq 2 ] ; then
hyperThreading="(HyperThreading)"
else
hyperThreading=""
fi
printf "%${mtab}s: %s %s\n" "CPU Cores" "$cores" "$hyperThreading"

# Memory Info

Mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
IFS=$' ' eval set -- $(vmstat | tail -n1)
VMswpd=$3 ; VMfree=$4 ; VMbuff=$5 ; VMcache=$6

printf "%${mtab}s: %'.0f\n" "Total Memory" "$Mem"
printf "%${mtab}s: %'.0f\n" "VM Swap" "$VMswpd"
printf "%${mtab}s: %'.0f\n" "VM Free" "$VMfree"
printf "%${mtab}s: %'.0f\n" "VM Buffer" "$VMbuff"
printf "%${mtab}s: %'.0f\n" "VM Cache" "$VMcache"

# Report Sound Modules

if [ -r /proc/asound/modules ] ; then
soundMod=( $(cat /proc/asound/modules 2> /dev/null | awk '{print
$1,$2}' | tr '_' ' ') )
if [ "${#soundMod[@]}" -eq 0 ] ; then
soundMod=("Not Detected")
fi
else
soundMod=("Not Detected")
fi

for x in "${soundMod[@]}" ; do
printf "%${mtab}s: %s\n" "Sound Module" "$x"
done

# report sound driver

if [ -r /proc/asound/version ] ; then
soundDrv=$(cat /proc/asound/version | awk -F "[Dd]river "
'{print $2}')
if [ "${#soundDrv}" -eq 0 ] ; then
soundDrv="Not Detected"
fi
else
soundDrv="Not Detected"
fi

printf "%${mtab}s: %s\n\n" "Sound Driver" "$soundDrv"

# graphics adapter reporting

graphicsType=$(lspci -k | awk -F ": " '/VGA/{print $2}')
slotNum=$(lspci -k | grep -i vga | awk 'NR==1 {print $1}')
graphicsInfo=($($priv lspci -v -s $slotNum | grep -v $slotNum))
driver=$(printf "%s\n" "${graphicsInfo[@]}" | grep -i kernel | awk
'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i version | awk
'NR==1 {print $1}')

if [ ! -z "$tempVar" ] ; then
if [[ "$tempVar" == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null | grep -i
version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Graphics Adapter"
printf "%s\n\n" "${graphicsType}"
printf "%s\n" "${graphicsInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:}"
printf "\n"

# ethernet adapter reporting

lspci -k | grep -i ethernet | grep -i -v wireless &> /dev/null
if [ $? -eq 0 ] ; then
ethernetType=$(lspci -k | awk -F ": " '/Ethernet/{print $2}')
slotNum=$(lspci -k | grep -i ethernet | grep -i -v wireless |
awk 'NR==1 {print $1}')
ethernetInfo=($($priv lspci -v -s $slotNum | grep -v $slotNum))
driver=$(printf "%s\n" "${ethernetInfo[@]}" | grep -i kernel |
awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i version |
awk 'NR==1 {print $1}')
if [ ! -z "$tempVar" ] ; then
if [[ "$tempVar" == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null |
grep -i version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Ethernet Adapter Info"
printf "%s\n\n" "${ethernetType}"
printf "%s\n" "${ethernetInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:}"
printf "\n"
fi

# wireless ethernet reporting

if [[ $(lspci -k | egrep -i '(network|centrino|wireless)') ]] ; then
wirelessType=$(lspci -k | egrep -i
'(network|centrino|wireless)' | cut -d':' -f3 | cut -c 2-)
slotNum=$(lspci -k | egrep -i '(network|centrino|wireless)' |
awk 'NR==1 {print $1}')

if [ $? -eq 0 ] ; then
wirelessInfo=($($priv lspci -v -s $slotNum | grep -v
$slotNum))
driver=$(printf "%s\n" "${wirelessInfo[@]}" | grep -i
kernel | awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i
version | awk 'NR==1 {print $1}')
if [ ! -z "$tempVar" ] ; then
if [[ $tempVar == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null
| grep -i version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Wireless Adapter Info"
printf "%s\n\n" "${wirelessType}"
printf "%s\n" "${wirelessInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:*}"
printf "\n"
fi
fi

webTest ()
{
# host testing

divider "Host Testing"
let count=0
sites=("www.redhat.com" "www.ubuntu.com" "www.google.com"
"www.yahoo.com")
for ix in ${sites[@]} ; do
wget -q -t1 -T5 --spider --timeout=10 $ix

if [ $? -eq 0 ] ; then
((count++))
printf "%${mtab}s: %s --> %s: %s\n" "Status" "Pass"
"Host" "$ix"
else
printf "%${mtab}s: %s --> %s: %s\n" "Status" "Fail"
"Host" "$ix"
fi
done
printf "\n"

# if any of the four domains pass the web crawl test consider
the web test a success

if [ $count -ge 1 ] ; then
let webTestResult=0
else
let webTestResult=1
fi
}

outsideNetwork ()
{
# Gather external IP address and use it to reverse lookup

divider "External Network Info"
ExternalIP=$(wget -4 -qO- --timeout=10 --tries=1 icanhazip.com)
ISP=$(wget -4 -qO- --timeout=10 --tries=1 ipinfo.io/
$ExternalIP/org)

if [ $? -ne 0 ] ; then
which whois &> /dev/null
if [ $? -eq 0 ] ; then
IFSBAK=$IFS ; IFS=$'\n\t '
read a ISP < <(whois $ExternalIP | grep -i custname)
IFS=$IFSBAK
fi
fi

ReverseLookup=$(dig +short -x $ExternalIP)
HName=$(hostname -s)

printf "%${mtab}s: %s\n" "ISP" "${ISP:=Not Detected}"
printf "%${mtab}s: %s\n" "External IP" "${ExternalIP:=Not
Detected}"
printf "%${mtab}s: %s\n" "Reverse Lookup" "${ReverseLookup:=Not
Detected}"
printf "%${mtab}s: %s\n" "Hostname" "${HName:=Not Detected}"

# obtain the domain name if possible

dnsdomainname &> /dev/null
if [ $? -eq 0 ] ; then
FQDNcondition="FQDN"
DomainName=$(dnsdomainname)
else
FQDNcondition="HOST + rDNS"
DomainName="$ReverseLookup"
fi

FQDN="${HName}.${DomainName}"

which nm-tool &> /dev/null
if [ $? -eq 0 ] ; then
DNSIP=$(nm-tool | grep $assignedIP -A5 | awk /DNS/'{print
$2;exit}')
else
DNSIP=$(dig redhat.com | grep -i server | tr '#()' ' ' |
awk '{print $3}')
fi

if [ $(dig +short -x $DNSIP) ] ; then
DNSName=$(dig +short -x $DNSIP)
else
DNSName="None Detected"
fi

printf "%${mtab}s: %s\n" "Domain Name" "$DomainName"
printf "%${mtab}s: %s\n" "${FQDNcondition}" "${FQDN}"

# Obtain mail exchange if possible

MailExchange=$(dig +short $DomainName MX | head -n1 | awk
'{print $2}')
if [ -z $MailExchange ] ; then
MailExchange="None Detected"
fi
printf "%${mtab}s: %s\n" "Mail Exchange" "$MailExchange"

# Collect nameserver and DNS Name

if [ $(dig +short $DomainName NS | head -n1) ] ; then
NameServer=$(dig +short $DomainName NS | head -n1)
else
NameServer="None Detected"
fi

printf "%${mtab}s: %s\n" "Name Server" "$NameServer"
printf "%${mtab}s: %s\n" "DNS" "$DNSIP"
printf "%${mtab}s: %s\n" "DNS Name" "$DNSName"
printf "\n"
}

insideNetwork ()
{
oldIFS=$IFS
IFS=$'\n\t '

pingTest ()
{
# ping test routine

ping -c 1 $addr &> /dev/null
if [ $? -eq 0 ] ; then
let pingResult=0
printf " (Pass)\n"
else
let pingResult=1
printf " (Fail)\n"
fi
}

dnsTest ()
{
# DNS test routine

dig redhat.com @$x &> /dev/null
if [ $? -eq 0 ] ; then
let dnsResult=0
printf " (Pass)\n"
else
let dnsResult=1
printf " (Fail)\n"
fi
}

# test if network is up and if so obtain IP address and device
ID

ip addr | grep -i "state up" &> /dev/null
if [ $? -eq 0 ] ; then
let networkStatusResult=0

# get local IP address

set -- $(ip route get 8.8.8.8)
while [ "$1" != "src" ] ; do
shift
assignedIP="$2"
done

# get local device ID

set -- $(ip route get 8.8.8.8)
while [ "$1" != "dev" ] ; do
shift
deviceID="$2"
done

# find the gateway IP address

set -- $(ip route get 8.8.8.8)
while [ "$1" != "via" ] ; do
shift
gatewayIP="$2"
done

# find dns ip address

which nm-tool &> /dev/null
if [ $? -eq 0 ] ; then
DNS=$(nm-tool | grep $assignedIP -A5 | awk
/DNS/'{print $2}')
else
DNS=$(dig redhat.com | grep -i server | tr '#()' ' '
| awk '{print $3}')
fi

# print the local device and assigned ip and perform ping
test on it

divider "Inside Network"
printf "%${mtab}s: %s %s" "Assigned IP" "$assignedIP"
"($deviceID)"
addr=$assignedIP
pingTest

# print thee local gateway and perform ping test on it

printf "%${mtab}s: %s" "Gateway" "$gatewayIP"
addr=$gatewayIP
pingTest

# print the found dns listings

for x in ${DNS[@]} ; do
printf "%${mtab}s: %s" "DNS" "$x"
dnsTest
done
printf "\n"
else
let networkStatusResult=1
fi
IFS=$oldIFS
}

# test inside network, if successful, test hosts, if successful, get
outside network

insideNetwork
if [ $pingResult -eq 0 -a $dnsResult -eq 0 ] ; then
webTest
if [ $webTestResult -eq 0 ] ; then
outsideNetwork
fi
fi

# report device status if network is up

if [ $networkStatusResult -eq 0 ] ; then

divider "Interface Status"
let line=1
scnSize=$(( $(tput cols) - 4 ))
array=($(ip -s link show $deviceID | sed -e 's/^[1-9]\: //'))
for x in "${array[@]}" ; do
if [ $line -eq 1 ] ; then
printf "\t%s\n\n" "$x" | fmt -c -w$scnSize
else
printf "\t%s\n" "$x"
fi
((line++))
done
printf "\n"
fi

# report device block info from available options

which lsblk &> /dev/null
if [ $? -eq 0 ] ; then
options=(NAME SIZE FSTYPE LABEL MOUNTPOINT PARTLABEL UUID)
for x in ${options[@]} ; do
lsblk -o $x &> /dev/null
if [ $? -eq 0 ] ; then
params+=( $x )
fi
cmdOptions=$(echo ${params[@]} | tr ' ' ',')
done
divider "Device Info"
lsblk -o $cmdOptions
printf "\n"
fi

# report mounted volumes

divider "Volume Info"
df -hTP
printf "\n"

## end linfo.sh ##

LOLLOLOLOLOLOLOLOLOLOLOLOLOL

WHAT VERSION WAS THIS SCRIPT WRITTEN AGAINST ?!

WHAT DOES ONE EVEN NEED TO RUN THIS LOL ?!

HOW MANY DEPENDENCIES DOES IT HAVE LOL ?!

HOW MANY TIMES WILL THIS SCRIPT BREAK.... because of new software UPDATES LOL.

YOU HAVE M?UCH TO LEARN YO:U?NG ONE... MUC?H ! LOL.

Bye,
skybuck.

Gonna leave those fucked up keyboard things in there it looks very jedi like lol.
 
On Saturday, September 28, 2019 at 4:43:08 PM UTC+2, DecadentLinux...@decadence.org wrote:
skybuck2000@hotmail.com wrote in
news:b56023bb-715d-451d-bf14-fd21fdac6cde@googlegroups.com:


SOLVE THIS FUCKING PROBLEM FOR GOD'S SAKES.

LOL.

MORE IMPORTANT THAN EVER BEFORE WITH THESE CONSTANT WINDOWS 10
UPGRADE PROGRRAMMING TECH DUMBASS FUCKUPS and BAD SSD TECHNOLOGY.

HENCE THE QUESTION OF THIS GUY IS SUPER RELEVANT.

Bye,
Skybuck.

Bullshit. The script I posted would show them and their
indentifiable differences. That is where their hard coded
serialization comes in.

Do you wanna make any bets on how many supposedly linux systems that script doesn't run for whatever reason ?! LOL.

I'll take your money thank you.

Bye,
Skybuck ;) =D
 
On Thursday, September 26, 2019 at 8:00:11 PM UTC+2, Jeff Liebermann wrote:
On Tue, 24 Sep 2019 13:57:54 -0700 (PDT), skybuck2000@hotmail.com
wrote:

Imagine following scenerio:
HD-LBA-235235235235234
HD-LBA-235235235423523
One of these drives is source, one of these drives is backup drive.
How the fuck do you tell which is which ?!
This is problem with current harddisk technology.
No proper labelling.
This is scary a fuck for disk-to-disk backup purposes.

This is a common problem when cloning identical model and size drives.
I run into it all the time. Most programs that do cloning will
provide something more than the drive model. Usually, there is info
on exact drive size, partition sizes, partition names, diskspace used,
operating system version, drive serial numbers, and such. That's
usually sufficient to identify the source and the destination.

However, I sometimes run into the situation when I'm cloning identical
drive types, which might have identical partition layouts. Then, I
need to identify which drive is which by the serial number, which is
usually not easily accessible if the drive is buried inside a machine.
So, I extract ONE of the two drives, run the program again, and it
will tell me the serial number of the remaining drive in the machine.
Knowing that, I can now tell which drive is which.

Sometimes, like last night, I was too tired and brain dead to do the
job correctly. I started with a Dell Precision M6800 laptop, with two
identical Toshiba hybrid 500GB drives. The plan was to clone the boot
drive to a Samsung 860 500GB SSD. Rather than risk screwing things
up, I decided to:
1. Make an image backup of the boot drive with Macrium Reflect to an
external USB 3.0 hard disk.
2. Remove the unused second drive (D:).
3. Remove the boot (C:) drive and replace it with the SSD drive.
4. Restore the boot drive C: from the USB 3.0 hard disk to the SSD.
5. Replace the unused second drive (D:).
This took longer than a direct drive to drive cloning copy, but since
only one drive was in the machine at a time, there was no risk of
overscribbling the wrong drive. It also gave me an image backup on
the USB 3.0 hard disk just in case I somehow managed to clobber the
boot drive(s). Better safe, than sorry.

This logic is ofcourse completely flawed cause phyisal serial numbers can still be confused as source vs dest drive or vice versa.

The only something decent solution is my solution.

To LABEL the drives:

System
Backup

And then tell software to perform copy:

From: System
To: Backup

Then ask:

Are you sure you want to copy system to backup drive ? Y/N.

There ya go..

Only this would make me feel somewhat safe.

Bye,
Skybuck.
 
skybuck2000@hotmail.com wrote in news:b9bf7606-5b67-4c9b-ab0c-
519fc9310d1e@googlegroups.com:

end.

Bye,
Skybuck.

You're a goddamned retard.
end
 
skybuck2000@hotmail.com wrote in
news:b9bf7606-5b67-4c9b-ab0c-519fc9310d1e@googlegroups.com:

On Thursday, September 26, 2019 at 2:01:51 PM UTC+2,
DecadentLinux...@decadence.org wrote:
whit3rd <whit3rd@gmail.com> wrote in
news:605c4c9a-adcb-407d-ab84-43e4d19fe5e3@googlegroups.com:

snip

I'm likely to change the volume label(s) at a whim, it is
unlikely to match a paper attached to a drive. There's a
'System Information' way to find which interfaces have which
hardware attached, so wire-tracing can work. That tool also
grabs disk serial numbers (but those aren't always easy to
locate on physical drives).


There is a linux bash script that yields copius amounts of
system
information. There is a drives section that is pretty
comprehensive.

Linfo1.sh by Marek Novotny (the github page is gone now)
Quote:

#!/bin/bash

#############################################################
#
# script : linfo.sh
# version : 2.36
# About : Simple Linux System Information
# Updated : 2016-11-04
# Written by : Marek Novotny
# Contributors : Chris Davies
# : Jonathan N. Little
# : Bit Twister
# : Andrew
# : Gamo
# Testers : Wildman
# : Mike Easter
#
# license : GPL v2 (only)
# github : https://github.com/marek-novotny/linfo
#
#############################################################

option=$1
message=()
let networkStatusResult=1
let pingResult=1
let dnsResult=1
let webTestResult=1
let mtab=16
IFS=$'\n'
recdLine=""

# requirements

reqCmds=()

# setup path
export PATH=$PATH:/sbin:/usr/sbin

# check first argument for -p or --prompt to run in prompt mode

if [ "$option" == "-p" -o "$option" == "--prompt" ] ; then
prompt="yes"
priv=sudo
$priv -v
else
prompt="no"
unset priv
fi

Ver='2.36'
VDate='2016-11-04'
printf "%*s\n" "$(tput cols)" "$(date)"
printf "%*s\n" "$(tput cols)" "Linfo Version $Ver, released:
$VDate" printf "%*s\n" "$(tput cols)" "github:
https://github.com/marek- novotny/linfo"
printf "%*s\n" "$(tput cols)" "Written by: Marek Novotny"

divider ()
{
printf "%s:\n" "$1"
printf "%$(tput cols)s\n\n" "" | tr ' ' '='
}

foldText ()
{
paramError ()
{
printf "$(basename $0) error! Incorrect parameters sent
to
foldText function from ln: $recdLine\n $1\n" >&2
exit $2
}

# usage foldText {numeric tab} {item name} {item value
string}
{option -s or blank}

mtab="$1" # set the tab column
item="$2" # set the string name
string="$3" # set the string itself
option="$4" # set the option type -s for fold at space
# or leave blank for hard cut
let y=1 # set the counter so the first line
# printed gets the item name only.

# make sure in script parameters are appropriate

if [ $# -lt 3 -o $# -gt 4 ] ; then
paramError "Incorrect number of arguments ($#)" 2
fi

regEx='^[0-9]+$'
if ! [[ $1 =~ $regEx ]] ; then
paramError "mtab is not set to a numeric value" 3
fi

if [ "$option" != "-s" ] ; then
option=""
fi

if [ -z "$string" ] ; then
paramError "The string is empty" 4
fi

# set the column length to fold at

let foldCol=$(( $(tput cols) - ($mtab + 4) ))

# take long string and wrap it nicely around the edge of the
terminal
# taking into account the item name + tab size

oldIFS=$IFS ; IFS=$'\n'
if [ ${#string} -gt $foldCol ] ; then
array=( $(echo $string | fold $option -w$foldCol) )
for x in ${array[@]} ; do
if [ $y -eq 1 ] ; then
printf "%${mtab}s: %s\n" "$item" "$x"
((y++))
else
printf "%${mtab}s: %s\n" "" "$x"
((y++))
fi
done
else
printf "%${mtab}s: %s\n" "$item" "$string"
fi
IFS=$oldIFS
}

# report distribution info

divider "Distribution Info"
distribution="Not Detected"

array=(
/etc/release # 0 Mageia
/etc/system-release # 1 RedHat / CentOS / Scientific Linux
/etc/slackware-version # 2 Slackware
/etc/issue # 3 Debian / Ubuntu
)

for (( x = 0 ; x <= ${#array[@]} ; x++ )) ; do
if [ -r ${array[$x]} ] ; then
case $x in
0 ) distribution=$(head -n1 /etc/release) ; break ;;
1 ) distribution=$(head -n1 /etc/system-release) ;
break
;;
2 ) distribution=$(head -n1 /etc/slackware-version) ;
break ;;
3 ) distribution=$(head -n1 /etc/issue | cut -d' '
-f1,2)
; break ;;
esac
fi
done

foldText $mtab "Distribution" "$distribution" -s

# Report boot loader type and version

grubVersion ()
{
grub-install --version &> /dev/null
if [ $? -eq 0 ] ; then
cmd="grub-install"
fi
grub2-install --version &> /dev/null
if [ $? -eq 0 ] ; then
cmd="grub2-install"
fi
gver=$($cmd --version | sed -e 's/grub-install (//g;s/grub2-
install (//g;s/)//g')
}

bLoader="Not Detected"

array=(
/etc/lilo.conf # 0 lilo
/boot/grub/menu.lst # 1 Grub Legacy
/boot/burg/burg.cfg # 2 Burg (Grub 2 Fork)
/boot/burg # 3 Burg (Grub 2 Fork)
/boot/grub/grub.cfg # 4 Grub 2
/boot/grub/grub2.cfg # 5 Grub 2
/boot/grub2/grub.cfg # 6 Grub 2
/boot/grub2/grub2.cfg # 7 Grub 2
/boot/grub2 # 8 Grub 2
)

for (( x = 0 ; x <= ${#array[@]} ; x++ )) ; do
if [ -f ${array[$x]} -o -d ${array[$x]} ] ; then
case $x in
0 ) bLoader="Lilo" ; break ;;
1 ) bLoader="Grub Legacy" ; grubVersion ; break ;;
2 ) bLoader="Burg (Grub 2 Fork)" ; break ;;
3 ) bLoader="Burg (Grub 2 Fork)" ; break ;;
4 ) bLoader="Grub 2" ; grubVersion ; break ;;
5 ) bLoader="Grub 2" ; grubVersion ; break ;;
6 ) bLoader="Grub 2" ; grubVersion ; break ;;
7 ) bLoader="Grub 2" ; grubVersion ; break ;;
8 ) bLoader="Grub 2" ; grubVersion ; break ;;
esac
fi
done

printf "%${mtab}s: %s\n" "Boot Loader" "$bLoader"
if [ -n "$gver" ] ; then
printf "%${mtab}s: %s\n" "Grub Version" "$gver"
fi

# Kernel Release

printf "%${mtab}s: %s\n" "Kernel Release" "$(uname -r)"

# Kernel Taint Status

taintStatus=$(cat /proc/sys/kernel/tainted)
if [ $taintStatus -ne 0 ] ; then
taintResults="Tainted ($taintStatus)"
else
taintResults="Not Tainted ($taintStatus)"
fi
printf "%${mtab}s: %s\n" "Taint Status" "$taintResults"

# Report Systemd release if running systemd

which systemctl &> /dev/null
if [ $? -eq 0 ] ; then
sysdver=$(systemctl --version | head -n1)
printf "%${mtab}s: %s\n" "Systemd Version" "$sysdver"
fi

# users via user command and by searching the active processes

excludeSearch="grep |sudo su |sudo /bin/su"
array=($(ps aux | grep -Ev
"$excludeSearch" | grep -E "/su | su " | awk '{print $(NF-0)}' |
sort)) array+=($(ps aux | grep
-Ev "$excludeSearch" | grep -E "sudo -i" | awk '{print $1}'))
array+=($(users | xargs -n1 | sort -u | xargs))
userCount=$(echo "(${#array[@]}) ${array[@]}")

# uptime & load averages

UpTime=$(uptime | awk -F',' '{print $1}' | cut -c 2-)
LoadAverage=$(uptime | awk -F "load average: " '{print $2}')

recdLine=$((LINENO + 1))
foldText $mtab "Users" "$userCount" -s
printf "%${mtab}s: %s\n" "Uptime" "$UpTime"
printf "%${mtab}s: %s\n\n" "Load Average" "$LoadAverage"

# report kernel taint status if any

taintStatus=$(cat /proc/sys/kernel/tainted)
if [ $taintStatus -ne 0 ] ; then
taintArray=(
"A module with a non-GPL license has been loaded, which
includes
modules with no license set by modutils >= 2.4.9 and module-init-
tools."
"A module was force loaded by insmod -f set by modutils >=
2.4.9
and module-init-tools."
"Unsafe SMP processors: SMP with CPUs not designed for SMP."
"A module was forcibly unloaded from the system by rmmod
-f." "A hardware machine check error occurred on the
system." "A bad page was discovered on the system."
"The user has asked that the system be marked tainted. This
could be because they are running software that directly modifies
the hardware, or for other reasons."
"The system has died."
"The ACPI DSDT has been overridden with one supplied by the
user
instead of using the one provided by the hardware."
"A kernel warning has occurred."
"A module from drivers/staging was loaded."
"The system is working around a severe firmware bug."
"An out-of-tree module has been loaded."
"An unsigned module has been loaded in a kernel supporting
module signature."
"A soft lockup has previously occurred on the system."
"The kernel has been live patched."
)

divider "Linux Kernel Taint Status Description"
let z=0 ; values=()
for (( a=1 ; a < 35000 ; a = a * 2 )) ; do
values+=( $a )
done
for mask in ${values[@]} ; do
if (( taintStatus & mask )) ; then
recdLine=$((LINENO + 1))
foldText $mtab $mask "${taintArray[$z]}" -s
printf "\n"
fi
((z++))
done
fi

# report SELinux status if running

which sestatus &> /dev/null
if [ $? -eq 0 ] ; then
oldmtab=$mtab
let mtab=30
oldIFS=$IFS
IFS=$'\n\:'

divider "SELinux Status"
sestatus | while read item status ; do
status=$(echo $status | awk '{print $1}')
printf "%${mtab}s: %s\n" "$item" "$status"
done
echo
mtab=$oldmtab
IFS=$oldIFS
fi

# report user info

divider "User Info"
set -- "User Name" "Pass" "User ID" "Primary Group" "Full Name"
"Home Directory" "Shell"
for x in {1..7} ; do
field=$(grep ^$USER /etc/passwd | head -n1 | cut -d: -f$x)
printf "%${mtab}s: %s\n" "$1" "${field:="Not Set"}"
shift
done
printf "\n"

# group reporting

divider "Group Info"
Groups=( $(grep $USER /etc/group | cut -d: -f1,3 | tr ':' ' ') )
for x in ${Groups[@]} ; do
oldIFS=$IFS
IFS=$' '
read GrpName GrpID < <(echo $x)
printf "%${mtab}s: %s\n" "$GrpName" "$GrpID"
IFS=$oldIFS
done
printf "\n"

# parse encrypted password from shadow file

cryptoParse ()
{
ep="Encrypted Password"
et="Encryption Type"
id=$(echo "$field" | cut -d'$' -f2)
salt=$(echo "$field" | cut -d'$' -f3)
rounds=$salt
cryptoPass=$(echo "$field" | cut -d'$' -f4)

case $id in
1 ) eType="MD5" ; m=1 ;;
2? ) eType="Blowfish" ; m=2 ;;
5 ) eType="SHA-256" ; m=3 ;;
6 ) eType="SHA-512" ; m=4 ;;
* ) eType="unknown ($id)" ; m=0 ;;
esac

printf "%${mtab}s: %s\n" "$et" "$eType"

if [ $id == "2a" -o $id == "2y" ] ; then
printf "%${mtab}s: %s\n" "Encryption Rounds" "$rounds"
else
printf "%${mtab}s: %s\n" "Encryption Salt" "$salt"
fi
recdLine=$((LINENO + 1))
foldText $mtab "$ep" "${cryptoPass:="Not Set"}"
}

# Encryption Definitions

crypto ()
{
cryptoDefs=(
"UNKNOWN"
"The security of the MD5 has been severely compromised, with
its
weaknesses having been exploited in the field, most infamously by
the Flame malware in 2012. The CMU Software Engineering Institute
considers MD5 essentially cryptographically broken and unsuitable
for further use."
"Blowfish is known to be susceptible to attacks on
reflectively
weak keys."
"This hashing algorithm implementation with a 32 byte
output,
and the resulting output is 256-bits. A 256 bit hash, although
strong, is not strong enough, mostly due to rainbow tables. The
salt adds strength to the hash. A string is chosen at random from
the following characters: a-z, A-Z, 0-9, . and /. There are 64
possible characters per character chosen in the random salt. If a
salt of just 8 random characters is used then there are 64 to the
8th power or 281,474,976,710,656 possible combinations in the
salt. This salt is added to the hash making the hash much more
random."
"This hashing algorithm implementation with a 64 byte
output,
and the resulting output is 512-bits. A 512 bit hash, although
strong, is not strong enough, mostly due to rainbow tables. The
salt adds strength to the hash. A string is chosen at random from
the following characters: a-z, A-Z, 0-9, . and /. There are 64
possible characters per character chosen in the random salt. If a
salt of just 8 random characters is used then there are 64 to the
8th power or 281,474,976,710,656 possible combinations in the
salt. This salt is added to the hash making the hash much more
random."
)

recommendation=(
"UNKNOWN"
"Change password algo to SHA-512 and update your password."
"Change password algo to SHA-512 and update your password."
"Consider upgrading to SHA-512"
"Choose an effective password and change it periodically."
)

instructions=(
"$ sudo authconfig --test | grep hashing"
"$ sudo authconfig --passalgo=sha512 --update"
"$ sudo passwd $USER"
)

if [ $m -ge 1 -o $m -le 4 ] ; then
recdLine=$(( LINENO + 1))
foldText $mtab "$eType" "${cryptoDefs[$m]}" -s
printf "\n"
recdLine=$(( LINENO + 1))
foldText $mtab "Recommendation" "${recommendation[$m]}"
-s printf "\n"
fi

if [ $m -eq 1 -o $m -le 3 ] ; then
printf "%${mtab}s: %s\n" "Instructions" "${instructions
[0]}"
printf "%${mtab}s: %s\n" "" "${instructions[1]}"
printf "%${mtab}s: %s\n" "" "${instructions[2]}"
printf "\n"
fi

if [ $m -eq 4 ] ; then
printf "%${mtab}s: %s\n" "Instructions" "${instructions
[2]}"
printf "\n"
fi
}

# report shadow info if using sudo or root

if [ $(id -u) -eq 0 -o $prompt == "yes" ] ; then

divider "Shadow Info"

oldmtab=$mtab
let mtab=32
set -- "Login Name" "Encrypted Password" "Date of Last
Password
Change" \
"Minimum Password Age" "Maximum Password Age"
"Password
Warning Period" \
"Password Inactivity Period" "Account Expiration Date"
"Reserved Field"

for x in {1..9} ; do
field=$($priv egrep "^$USER\:" /etc/shadow | cut -d:
-f$x
| tr ':' ' ')
if [ $x -eq 1 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Not
Set"}" shift
elif [ $x -eq 2 ] ; then
if [ $(tr -dc '$' <<<"$field" | wc -c) -eq 3 ] ;
then
cryptoParse "$field"
fi
shift
elif [ $x -eq 3 ] ; then
printf "%${mtab}s: %s\n" "$1" "$(date -d
"01/01/1970
+${field}days" +%F)"
shift
elif [ $x -gt 3 -a $x -lt 8 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Unset"}
Days"
shift
elif [ $x -eq 8 ] ; then
printf "%${mtab}s: %s\n" "$1" "$(date -d
"01/01/1970
+${field}days" +%F)"
shift
elif [ $x -eq 9 ] ; then
printf "%${mtab}s: %s\n" "$1" "${field:="Not
Set"}" shift
fi
done
mtab=$oldmtab
printf "\n"

crypto
fi

# environment reporting

divider "Environment Variables"

printf "%${mtab}s: %s\n" "Time Zone" "$(date +%Z)"
printf "%${mtab}s: %s\n" "Term" ${TERM:="Not Set"}
printf "%${mtab}s: %s x %s\n" "Term Size" "$(tput cols)" "$(tput
lines)"
printf "%${mtab}s: %s\n" "Shell" ${SHELL:="Not Set"}
printf "%${mtab}s: %s\n" "Language" ${LANG:="Not Set"}
printf "%${mtab}s: %s\n" "News Server" ${NNTPSERVER:="Not Set"}
printf "%${mtab}s: %s\n" "Editor" ${EDITOR:="Not Set"}

systemdDefault=$(systemctl get-default 2> /dev/null)
if [ $? -eq 0 ] ; then
printf "%${mtab}s: %s\n" "Default Target" "$systemdDefault"
else
runLevel=$(runlevel 2> /dev/null | awk '{print $2}')
printf "%${mtab}s: %s\n" "Run Level" "$runLevel"
fi
printf "\n"

screenInfo ()
{

# screen dimensions reporting

divider "Screen Dimensions"

# detect number of displays

oldIFS=$IFS ; IFS=$'\n\t '

displays=$(xrandr -d :0 -q | grep ' connected' | wc -l)
printf "%${mtab}s: %s\n\n" "Displays" "$displays"

# detect primary display

read display_device b c display_res e f g h i j k l display_dim \
(xrandr -d :0 -q | grep ' connected' | grep primary)

printf "%${mtab}s: %s\n" "Primary" "$display_device"
printf "%${mtab}s: %s\n" "Resolution" "${display_res%%+*}"
printf "%${mtab}s: %s\n\n" "Dimensions" "$display_dim"

# destect any additional displays (non-primary)

xrandr -d :0 -q | grep ' connected' | grep -v primary \
| while read display_device b display_res e f g h i j k l
display_dim
do
printf "%${mtab}s: %s\n" "other" "$display_device"
printf "%${mtab}s: %s\n" "Resolution"
"${display_res%%+*}" printf "%${mtab}s: %s\n\n"
"Dimensions" "$display_dim"
done

# display screen dimensions overall

xdpyTest=$(xdpyinfo 2> /dev/null | grep -c resolution)
if [ $xdpyTest -ge 1 ] ; then
read a Dimensions c < <(xdpyinfo | grep dimensions)
read a Resolution < <(xdpyinfo | grep resolution)
printf "%${mtab}s: %s\n" "Dimensions" "$Dimensions"
printf "%${mtab}s: %s\n\n" "Resolution" "$Resolution"
fi

IFS=$oldIFS
}

xrandr -d :0 -q &> /dev/null
if [ $? -eq 0 ] ; then
if [ $(xrandr -d :0 -q | grep ' connected' | wc -l) -ge 1 ]
then
screenInfo
fi
fi

# tmux session reporting

temp=$(tmux list-sessions 2> /dev/null)
if [ $? -eq 0 ] ; then
sessions=($(tmux list-sessions | awk '{print $1 $11}'))
divider "Tmux Sessions"
for b in "${sessions[@]}" ; do
printf "%${mtab}s: %s\n" "Session Name" "$b"
done
printf "\n"
fi

# screen session reporting

which screen &> /dev/null
if [ $? -eq 0 ] ; then
if [ -d /var/run/screen/S-${USER} ] && [ $(ls
/var/run/screen/S-
${USER} | wc -l) -ge 1 ] ; then
scnSessions=( $(screen -list | grep -vi "there" | grep -vi
"socket" | grep -v "^[[:space:]]*$" | awk '{print $1, $2}') )
divider "Screen Sessions"
for x in "${scnSessions[@]}" ; do
printf "%${mtab}s: %s\n" "Session Name" "${x}"
done
printf "\n"
fi
fi

# detect Firmware Mode, Legacy BIOS or UEFI

divider "Machine Info"
detectFirmware=$(awk '{ if ($1 != "#" && $2 == "/boot/efi") print
$2 }' /etc/fstab)
if [ "$detectFirmware" == "/boot/efi" ] ; then
firmware="UEFI"
else
firmware="BIOS/MBR"
fi
printf "%${mtab}s: %s\n" "Firmware" "$firmware"

# CPUs and Sockets

sockets=$(lscpu | grep -i socket\(s\) | awk '{print $2}')
CPU=$(awk -F ": " '/model name/{print $2 ; exit}' /proc/cpuinfo)
printf "%${mtab}s: %s\n" "Sockets" "$sockets"
printf "%${mtab}s: %s\n" "Processor" "$CPU"

# CPU cores, siblings and HyperThreading

cores=$(lscpu | grep -i core\(s\) | awk '{print $4}')
if [ ${#cores} -eq 0 ] ; then
cores="Not Detected"
fi

# gather siblings info and report on potential hyper threading

Siblings=$(lscpu | grep -i thread\(s\) | awk '{print $4}')
if [ $Siblings -eq 2 ] ; then
hyperThreading="(HyperThreading)"
else
hyperThreading=""
fi
printf "%${mtab}s: %s %s\n" "CPU Cores" "$cores"
"$hyperThreading"

# Memory Info

Mem=$(grep MemTotal /proc/meminfo | awk '{print $2}')
IFS=$' ' eval set -- $(vmstat | tail -n1)
VMswpd=$3 ; VMfree=$4 ; VMbuff=$5 ; VMcache=$6

printf "%${mtab}s: %'.0f\n" "Total Memory" "$Mem"
printf "%${mtab}s: %'.0f\n" "VM Swap" "$VMswpd"
printf "%${mtab}s: %'.0f\n" "VM Free" "$VMfree"
printf "%${mtab}s: %'.0f\n" "VM Buffer" "$VMbuff"
printf "%${mtab}s: %'.0f\n" "VM Cache" "$VMcache"

# Report Sound Modules

if [ -r /proc/asound/modules ] ; then
soundMod=( $(cat /proc/asound/modules 2> /dev/null | awk
'{print
$1,$2}' | tr '_' ' ') )
if [ "${#soundMod[@]}" -eq 0 ] ; then
soundMod=("Not Detected")
fi
else
soundMod=("Not Detected")
fi

for x in "${soundMod[@]}" ; do
printf "%${mtab}s: %s\n" "Sound Module" "$x"
done

# report sound driver

if [ -r /proc/asound/version ] ; then
soundDrv=$(cat /proc/asound/version | awk -F "[Dd]river "
'{print $2}')
if [ "${#soundDrv}" -eq 0 ] ; then
soundDrv="Not Detected"
fi
else
soundDrv="Not Detected"
fi

printf "%${mtab}s: %s\n\n" "Sound Driver" "$soundDrv"

# graphics adapter reporting

graphicsType=$(lspci -k | awk -F ": " '/VGA/{print $2}')
slotNum=$(lspci -k | grep -i vga | awk 'NR==1 {print $1}')
graphicsInfo=($($priv lspci -v -s $slotNum | grep -v $slotNum))
driver=$(printf "%s\n" "${graphicsInfo[@]}" | grep -i kernel |
awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i version |
awk 'NR==1 {print $1}')

if [ ! -z "$tempVar" ] ; then
if [[ "$tempVar" == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null | grep
-i
version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Graphics Adapter"
printf "%s\n\n" "${graphicsType}"
printf "%s\n" "${graphicsInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:}"
printf "\n"

# ethernet adapter reporting

lspci -k | grep -i ethernet | grep -i -v wireless &> /dev/null
if [ $? -eq 0 ] ; then
ethernetType=$(lspci -k | awk -F ": " '/Ethernet/{print
$2}') slotNum=$(lspci -k | grep -i ethernet | grep -i -v
wireless |
awk 'NR==1 {print $1}')
ethernetInfo=($($priv lspci -v -s $slotNum | grep -v
$slotNum)) driver=$(printf "%s\n" "${ethernetInfo[@]}" |
grep -i kernel |
awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i version
|
awk 'NR==1 {print $1}')
if [ ! -z "$tempVar" ] ; then
if [[ "$tempVar" == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2> /dev/null |
grep -i version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Ethernet Adapter Info"
printf "%s\n\n" "${ethernetType}"
printf "%s\n" "${ethernetInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:}"
printf "\n"
fi

# wireless ethernet reporting

if [[ $(lspci -k | egrep -i '(network|centrino|wireless)') ]] ;
then
wirelessType=$(lspci -k | egrep -i
'(network|centrino|wireless)' | cut -d':' -f3 | cut -c 2-)
slotNum=$(lspci -k | egrep -i '(network|centrino|wireless)'
|
awk 'NR==1 {print $1}')

if [ $? -eq 0 ] ; then
wirelessInfo=($($priv lspci -v -s $slotNum | grep -v
$slotNum))
driver=$(printf "%s\n" "${wirelessInfo[@]}" | grep -i
kernel | awk 'NR==1 {print $5}')
tempVar=$(modinfo "${driver}" 2> /dev/null | grep -i
version | awk 'NR==1 {print $1}')
if [ ! -z "$tempVar" ] ; then
if [[ $tempVar == *"version"* ]] ; then
driverVersion=$(modinfo "${driver}" 2
/dev/null
| grep -i version | awk 'NR==1 {print $2}')
fi
fi

if [ -z $driverVersion ] ; then
driverVersion="Not Detected"
fi

divider "Wireless Adapter Info"
printf "%s\n\n" "${wirelessType}"
printf "%s\n" "${wirelessInfo[@]}"
printf "\tDriver version: %s\n" "${driverVersion%*:*}"
printf "\n"
fi
fi

webTest ()
{
# host testing

divider "Host Testing"
let count=0
sites=("www.redhat.com" "www.ubuntu.com" "www.google.com"
"www.yahoo.com")
for ix in ${sites[@]} ; do
wget -q -t1 -T5 --spider --timeout=10 $ix

if [ $? -eq 0 ] ; then
((count++))
printf "%${mtab}s: %s --> %s: %s\n" "Status"
"Pass"
"Host" "$ix"
else
printf "%${mtab}s: %s --> %s: %s\n" "Status"
"Fail"
"Host" "$ix"
fi
done
printf "\n"

# if any of the four domains pass the web crawl test
consider
the web test a success

if [ $count -ge 1 ] ; then
let webTestResult=0
else
let webTestResult=1
fi
}

outsideNetwork ()
{
# Gather external IP address and use it to reverse lookup

divider "External Network Info"
ExternalIP=$(wget -4 -qO- --timeout=10 --tries=1
icanhazip.com) ISP=$(wget -4 -qO- --timeout=10 --tries=1
ipinfo.io/
$ExternalIP/org)

if [ $? -ne 0 ] ; then
which whois &> /dev/null
if [ $? -eq 0 ] ; then
IFSBAK=$IFS ; IFS=$'\n\t '
read a ISP < <(whois $ExternalIP | grep -i
custname) IFS=$IFSBAK
fi
fi

ReverseLookup=$(dig +short -x $ExternalIP)
HName=$(hostname -s)

printf "%${mtab}s: %s\n" "ISP" "${ISP:=Not Detected}"
printf "%${mtab}s: %s\n" "External IP" "${ExternalIP:=Not
Detected}"
printf "%${mtab}s: %s\n" "Reverse Lookup"
"${ReverseLookup:=Not
Detected}"
printf "%${mtab}s: %s\n" "Hostname" "${HName:=Not Detected}"

# obtain the domain name if possible

dnsdomainname &> /dev/null
if [ $? -eq 0 ] ; then
FQDNcondition="FQDN"
DomainName=$(dnsdomainname)
else
FQDNcondition="HOST + rDNS"
DomainName="$ReverseLookup"
fi

FQDN="${HName}.${DomainName}"

which nm-tool &> /dev/null
if [ $? -eq 0 ] ; then
DNSIP=$(nm-tool | grep $assignedIP -A5 | awk
/DNS/'{print
$2;exit}')
else
DNSIP=$(dig redhat.com | grep -i server | tr '#()' ' '
|
awk '{print $3}')
fi

if [ $(dig +short -x $DNSIP) ] ; then
DNSName=$(dig +short -x $DNSIP)
else
DNSName="None Detected"
fi

printf "%${mtab}s: %s\n" "Domain Name" "$DomainName"
printf "%${mtab}s: %s\n" "${FQDNcondition}" "${FQDN}"

# Obtain mail exchange if possible

MailExchange=$(dig +short $DomainName MX | head -n1 | awk
'{print $2}')
if [ -z $MailExchange ] ; then
MailExchange="None Detected"
fi
printf "%${mtab}s: %s\n" "Mail Exchange" "$MailExchange"

# Collect nameserver and DNS Name

if [ $(dig +short $DomainName NS | head -n1) ] ; then
NameServer=$(dig +short $DomainName NS | head -n1)
else
NameServer="None Detected"
fi

printf "%${mtab}s: %s\n" "Name Server" "$NameServer"
printf "%${mtab}s: %s\n" "DNS" "$DNSIP"
printf "%${mtab}s: %s\n" "DNS Name" "$DNSName"
printf "\n"
}

insideNetwork ()
{
oldIFS=$IFS
IFS=$'\n\t '

pingTest ()
{
# ping test routine

ping -c 1 $addr &> /dev/null
if [ $? -eq 0 ] ; then
let pingResult=0
printf " (Pass)\n"
else
let pingResult=1
printf " (Fail)\n"
fi
}

dnsTest ()
{
# DNS test routine

dig redhat.com @$x &> /dev/null
if [ $? -eq 0 ] ; then
let dnsResult=0
printf " (Pass)\n"
else
let dnsResult=1
printf " (Fail)\n"
fi
}

# test if network is up and if so obtain IP address and
device
ID

ip addr | grep -i "state up" &> /dev/null
if [ $? -eq 0 ] ; then
let networkStatusResult=0

# get local IP address

set -- $(ip route get 8.8.8.8)
while [ "$1" != "src" ] ; do
shift
assignedIP="$2"
done

# get local device ID

set -- $(ip route get 8.8.8.8)
while [ "$1" != "dev" ] ; do
shift
deviceID="$2"
done

# find the gateway IP address

set -- $(ip route get 8.8.8.8)
while [ "$1" != "via" ] ; do
shift
gatewayIP="$2"
done

# find dns ip address

which nm-tool &> /dev/null
if [ $? -eq 0 ] ; then
DNS=$(nm-tool | grep $assignedIP -A5 | awk
/DNS/'{print $2}')
else
DNS=$(dig redhat.com | grep -i server | tr '#()' '
'
| awk '{print $3}')
fi

# print the local device and assigned ip and perform
ping
test on it

divider "Inside Network"
printf "%${mtab}s: %s %s" "Assigned IP" "$assignedIP"
"($deviceID)"
addr=$assignedIP
pingTest

# print thee local gateway and perform ping test on it

printf "%${mtab}s: %s" "Gateway" "$gatewayIP"
addr=$gatewayIP
pingTest

# print the found dns listings

for x in ${DNS[@]} ; do
printf "%${mtab}s: %s" "DNS" "$x"
dnsTest
done
printf "\n"
else
let networkStatusResult=1
fi
IFS=$oldIFS
}

# test inside network, if successful, test hosts, if successful,
get outside network

insideNetwork
if [ $pingResult -eq 0 -a $dnsResult -eq 0 ] ; then
webTest
if [ $webTestResult -eq 0 ] ; then
outsideNetwork
fi
fi

# report device status if network is up

if [ $networkStatusResult -eq 0 ] ; then

divider "Interface Status"
let line=1
scnSize=$(( $(tput cols) - 4 ))
array=($(ip -s link show $deviceID | sed -e 's/^[1-9]\:
//')) for x in "${array[@]}" ; do
if [ $line -eq 1 ] ; then
printf "\t%s\n\n" "$x" | fmt -c -w$scnSize
else
printf "\t%s\n" "$x"
fi
((line++))
done
printf "\n"
fi

# report device block info from available options

which lsblk &> /dev/null
if [ $? -eq 0 ] ; then
options=(NAME SIZE FSTYPE LABEL MOUNTPOINT PARTLABEL UUID)
for x in ${options[@]} ; do
lsblk -o $x &> /dev/null
if [ $? -eq 0 ] ; then
params+=( $x )
fi
cmdOptions=$(echo ${params[@]} | tr ' ' ',')
done
divider "Device Info"
lsblk -o $cmdOptions
printf "\n"
fi

# report mounted volumes

divider "Volume Info"
df -hTP
printf "\n"

## end linfo.sh ##

LOL.

THE RETARDNESS WITH THIS IS STRONG.

I MUST NUKE IT WITH SOME ANTI-RETARDNESS.

HERE YA GO:

HARDDISK LABEL API (INVENTED BY SKYBUCK RIGHT NOW LOL)

Pseudo Design:

GetStorageDeviceCount()

GetStorageDeviceLabel(Number)

Actual code:

var
I : integer;
begin

for I:=0 to GetStorageDeviceCount()-1 do
begin
writeln( 'Storage Device ', I, ' Label: ',
GetStorageDeviceLabel(I) );
end;

end.

Doesn't need to be any more complex than that.

Slight optimization and more safe to if a device is removed during
this loop or not... api implementation must be safe for that
though:



var
I : integer;
begin

C := GetStorageDeviceCount();
for I:=0 to C-1 do
begin
writeln( 'Storage Device ', I, ' Label: ',
GetStorageDeviceLabel(I) );
end;

end.

Bye,
Skybuck.

I'd be willing to bet without even looking that all you did was
copy and paste the part pertinent to your current condition, and
skipped over the formating and complete report compilation code.

In other words, punk... all you are is an industry interloper, at
best.

Go look that one up, punk... interloper.

While you fuck off and die.

Better yet, HOAD!
 
Also some kind of "write-protect" feature for harddisks, ssd's, storage devices might be nice... like floppy disks had.

So we lost labels and we lost write-protect functionality transitioning to these new media devices.

I am not amuzed by this.

Bye for now,
Skybuck.
 
Actually funny thing is the bigger SSD chip does have a "lock"... but not sure what the lock actually does... probably write protect lock... kinda funny.

It's very tiny easy to overlook... but I kinda knew it was there... but also easy to forget cause it's so tiny.

It's a two in one actually... the little detachable chip inside of it doesn't have the lock... so definetly lost functionality as it became tinier.

I wonder if my canon and drive actually respects the lock... gonna try it out

Yes at least windows 7 respect it funny enough ! =D

Gonna try cannon next.

It says "memory card locked"... ok so that's cool for now

Bye,
Skybuck (second account cause of google posting limitations... i ll probably stop posting now see ya).
 
skybuck2000@hotmail.com wrote in
news:c952e331-c839-4669-ae90-393b51772855@googlegroups.com:

LOLLOLOLOLOLOLOLOLOLOLOLOLOL

WHAT VERSION WAS THIS SCRIPT WRITTEN AGAINST ?!

What are you mumbling about, little boy?
WHAT DOES ONE EVEN NEED TO RUN THIS LOL ?!

You were mouthing off about clonzilla, you retarded dipshit.
It is a simple bash script (which I stated), anmd if you had ANY
computer knowledge you would know that clonzilla is a LINUX distro.

> HOW MANY DEPENDENCIES DOES IT HAVE LOL ?!

None, you retarded fuck. It is a bash script.

HOW MANY TIMES WILL THIS SCRIPT BREAK.... because of new software
UPDATES LOL.

ZERO, it is a bash script, you retarded fuck. IF you had actually
looked at it, you would know that. IF you really were a computer
dude, you would know that.

You are a childish, Usenet group invading, computer industry
interloping dumbfuck! AT THE VERY BEST.

> YOU HAVE M?UCH TO LEARN YO:U?NG ONE... MUC?H ! LOL.

You are a fucking nit wit. No... A nit wit would be insulted by
that claim.

I'd bet that others responding to your horseshit are either already
familiar with this very script, or upon examining it would say it is
very useful.

You? Not a goddamned thing you say matters. This very thread is
proof of that, because you are pitching a bitch about a non-problem.
And sorry, but that will include all those ditzy fucks, some of the
chat of which, you quoted.
 
skybuck2000@hotmail.com wrote in
news:bc8b931b-7dff-4e90-973a-4e68cd4cf42f@googlegroups.com:

On Saturday, September 28, 2019 at 4:43:08 PM UTC+2,
DecadentLinux...@decadence.org wrote:
skybuck2000@hotmail.com wrote in
news:b56023bb-715d-451d-bf14-fd21fdac6cde@googlegroups.com:


SOLVE THIS FUCKING PROBLEM FOR GOD'S SAKES.

LOL.

MORE IMPORTANT THAN EVER BEFORE WITH THESE CONSTANT WINDOWS 10
UPGRADE PROGRRAMMING TECH DUMBASS FUCKUPS and BAD SSD
TECHNOLOGY.

HENCE THE QUESTION OF THIS GUY IS SUPER RELEVANT.

Bye,
Skybuck.

Bullshit. The script I posted would show them and their
indentifiable differences. That is where their hard coded
serialization comes in.

Do you wanna make any bets on how many supposedly linux systems
that script doesn't run for whatever reason ?! LOL.

I'll take your money thank you.

Bye,
Skybuck ;) =D

You are an idiot. You were just asking about what it is, punk.

Now, you suddenly declare to know what it is and its capabilities.

Tell the punk fuck standing there helping you out (trying to) that
he is also a goddamned retard.

And then also spout off "for whatever reason". IOW you AND the
punk fuck trying to help is clueless.

Here's a hint, dipshit... it is a BASH SCRIPT.
 
On Saturday, September 28, 2019 at 5:02:56 PM UTC+2, skybu...@hotmail.com wrote:
On Saturday, September 28, 2019 at 4:20:22 PM UTC+2, John Robertson wrote:
On 2019/09/24 3:30 p.m., Robert Baer wrote:
skybuck2000@hotmail.com wrote:
Imagine following scenerio:

HD-LBA-235235235235234
HD-LBA-235235235423523

One of these drives is source, one of these drives is backup drive.

How the fuck do you tell which is which ?!

This is problem with current harddisk technology.

No proper labelling.

This is scary a fuck for disk-to-disk backup purposes.

Is this the best IT technology has to offer ?! Very shamefull !

Excellent example of this horrific situation is the super poor open
source software called "Clonezilla" it makes absolutely no attempt to
identify drives in any meaningfull way by for example reading NTFS
labels to give the users some clue as to which drive is which. There
may be some info inspection option in it's menu or not... I have not
even used this software, just watched some youtube videos.

I do however use windows and it has the same problem and it's very
annoying when I need to identify which is the boot drive and which is
something totally else.

Surely hardware manufacturers can find some flashable ep-rom chip
somewhere to allow users to properly label their hardware ?!

This has to change for the better !

Some simple "label-technology-chip" could be created which can be
added to products, this would make me feel goooooood.

Label meaning letters and digits at the very least.

So user can for example rename hardware as follows:

SystemDisk
DataDisk
BackupDisk

That'd be nice.

Bye,
   Skybuck.

  Well, i hate to tell you,but there is writable RAM on the hard
drives, and even a fairly decent CPU on them.
  Absolutely no need for more of the same.
  There is something called a LABEL which can be used in Windoze ,
simply click on the name and rename it to what you want.
  Clonezilla ALSO has the option to change the name of a drive.

  Go back to school.

How about a piece of tape? You know, a label? (ducking)

However a write-protect would be all you need in this case,
unfortunately I don't know of such a beast for hard drives - unlike CF!

John :-#)#

ARE YOU FUCKING RETARDED ?!

HAVE YOU SEEN HOW SMALL SSD'S HAVE BECOME ?!

THEY CAN FIT BETWEEN YOUR TEETH NOWADAYS !

BYE,
SKYBUCK.

(We need new labelling technology... clearly ;))

(holygrams maybe would be cool lol)

OOOHHHHH LOL.

I ment SD-cards LOL.

They can be considered drives too ! LOL.

Bye,
Skybuck.
 
skybuck2000@hotmail.com wrote in
news:18f2b502-1b2b-42a5-af66-203fc7e0ae8e@googlegroups.com:

Also some kind of "write-protect" feature for harddisks, ssd's,
storage devices might be nice... like floppy disks had.

Um.... nope.

It is called grow the fuck up.

GTFUCYMMWTUC!

You'll have to look that one up too.

So we lost labels and we lost write-protect functionality
transitioning to these new media devices.

It is called learn the fuck up.

> I am not amuzed by this.

It is called get the fuck out of the industry and stop bitching
about it.

If we were like you, we would come find you and hold you down on
the bed and beat you with soap in socks.

But I would convince everyone that D cell batteries (or large
padlocks) would work better. Then you would shut the fuck up.

Bye for now,
Skybuck.

Go away for good, you Usenet wrong group invading retarded punk
fuck.

Die, you piece of shit.

Your whore mother should be put in prison for failing to flush you,
the moment the severely ass reamed street slut shat you.
 
skybuck2000@hotmail.com wrote in news:965fb18c-643b-468f-aa0e-
0de854792748@googlegroups.com:

Are you sure you want to copy system to backup drive ? Y/N.

There ya go..

Only this would make me feel somewhat safe.

One single file timestamp compare would do it. And a person who
actually knows what the fuck he or she is doing.

Oh, and if you can't tell source and destination when performing a
backup, you should not be the one doing it, punk. At the very least
NOT UNTIL you find out the identities involved.

Sounds to me like YOU fucked up someone's system, and now you are
here barking out a bitch.

If you can't break the hardware by futzing with it, you'll fuck it
up some other way, eh?
 
bobcrazycracker@gmail.com wrote in
news:553a5a8f-7947-48b6-906c-3b8f1966d144@googlegroups.com:

Actually funny thing is the bigger SSD chip does have a "lock"...
but not sure what the lock actually does... probably write protect
lock... kinda funny.

What is funny is that you do not know. Have you not ever even read
the fucking packaging they come in? D'oh!
 

Welcome to EDABoard.com

Sponsor

Back
Top