mirror of
https://github.com/smxi/inxi.git
synced 2024-11-17 00:31:19 +00:00
Improved -i to show IF lan nic IP using as first choice the ip tool from iproute, and to only use the deprecated ifconfig as a fallback.
This required recoding that function, so I also made -i show IPv6 with -x as well. Might as well start getting used to it. Also fixed and added wrapping for the -i output, that wasn't working right before, now is standardized to other lines.
This commit is contained in:
parent
6408e0a56b
commit
a6fd64fdae
186
inxi
186
inxi
|
@ -1,8 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
########################################################################
|
########################################################################
|
||||||
#### Script Name: inxi
|
#### Script Name: inxi
|
||||||
#### version: 1.7.7
|
#### version: 1.7.8
|
||||||
#### Date: June 21 2011
|
#### Date: June 22 2011
|
||||||
#### Patch Number: 01
|
#### Patch Number: 01
|
||||||
########################################################################
|
########################################################################
|
||||||
#### SPECIAL THANKS
|
#### SPECIAL THANKS
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
#### Note: requires user action for this feature to run as user (edit /etc/sudoers file)
|
#### Note: requires user action for this feature to run as user (edit /etc/sudoers file)
|
||||||
#### -G - full graphics output requires: glxinfo (mesa-utils); xdpyinfo (X11-utils);
|
#### -G - full graphics output requires: glxinfo (mesa-utils); xdpyinfo (X11-utils);
|
||||||
#### xrandr (x11-xserver-utils)
|
#### xrandr (x11-xserver-utils)
|
||||||
#### -i - IP information, local/wan - ifconfig (net-tools)
|
#### -i - IP information, local/wan - ip (iproute) legacy, not used if ip present: ifconfig (net-tools)
|
||||||
#### -Ix - view current runlevel while not in X window system (or with -x): runlevel (sysvinit)
|
#### -Ix - view current runlevel while not in X window system (or with -x): runlevel (sysvinit)
|
||||||
#### -o - for unmounted file system information in unmounted drives (root only default): file (file)
|
#### -o - for unmounted file system information in unmounted drives (root only default): file (file)
|
||||||
#### Note: requires user action for this feature to run as user (edit /etc/sudoers file)
|
#### Note: requires user action for this feature to run as user (edit /etc/sudoers file)
|
||||||
|
@ -513,9 +513,12 @@ main()
|
||||||
initialize_script_data
|
initialize_script_data
|
||||||
|
|
||||||
# Check for dependencies BEFORE running ANYTHING else except above functions
|
# Check for dependencies BEFORE running ANYTHING else except above functions
|
||||||
# Not all distro's have these depends installed by default
|
# Not all distro's have these depends installed by default. Don't want to run
|
||||||
check_script_depends
|
# this if the user is requesting to see this information in the first place
|
||||||
check_script_suggested_apps
|
if [[ $1 != '--recommends' ]];then
|
||||||
|
check_script_depends
|
||||||
|
check_script_suggested_apps
|
||||||
|
fi
|
||||||
|
|
||||||
### Only continue if depends ok
|
### Only continue if depends ok
|
||||||
SCRIPT_PATH=$( dirname $0 )
|
SCRIPT_PATH=$( dirname $0 )
|
||||||
|
@ -1500,6 +1503,7 @@ check_recommends_items()
|
||||||
file:file~file~file~:-o_unmounted_file_system
|
file:file~file~file~:-o_unmounted_file_system
|
||||||
hddtemp:hddtemp~hddtemp~hddtemp~:-Dx_show_hdd_temp
|
hddtemp:hddtemp~hddtemp~hddtemp~:-Dx_show_hdd_temp
|
||||||
ifconfig:net-tools~net-tools~net-tools~:-i_ip_lan
|
ifconfig:net-tools~net-tools~net-tools~:-i_ip_lan
|
||||||
|
ip:iproute~iproute2~iproute~:-i_ip_lan
|
||||||
sensors:lm-sensors~lm_sensors~lm-sensors~:-s_sensors_output
|
sensors:lm-sensors~lm_sensors~lm-sensors~:-s_sensors_output
|
||||||
lsusb:usbutils~usbutils~usbutils~:-A_usb_audio;-N_usb_networking
|
lsusb:usbutils~usbutils~usbutils~:-A_usb_audio;-N_usb_networking
|
||||||
modinfo:module-init-tools~module-init-tools~module-init-tools~:-Ax,-Nx_module_version
|
modinfo:module-init-tools~module-init-tools~module-init-tools~:-Ax,-Nx_module_version
|
||||||
|
@ -2112,13 +2116,14 @@ show_options()
|
||||||
print_screen_output "-x Show extra data (only works with verbose or line output, not short form): "
|
print_screen_output "-x Show extra data (only works with verbose or line output, not short form): "
|
||||||
print_screen_output " -C - bogomips on Cpu;"
|
print_screen_output " -C - bogomips on Cpu;"
|
||||||
print_screen_output " -d - Adds items to features line of optical drive; adds rev version to optical drive."
|
print_screen_output " -d - Adds items to features line of optical drive; adds rev version to optical drive."
|
||||||
|
print_screen_output " -D - Hdd temp with disk data if you have hddtemp installed, if you are root OR if you have added to"
|
||||||
|
print_screen_output " /etc/sudoers (sudo v. 1.7 or newer): <username> ALL = NOPASSWD: /usr/sbin/hddtemp (sample)"
|
||||||
|
print_screen_output " -G - Direct rendering status for Graphics (in X)."
|
||||||
|
print_screen_output " -G - (for single gpu, nvidia driver) screen number gpu is running on."
|
||||||
|
print_screen_output " -i - Show IPv6 as well for LAN interface (IF) devices."
|
||||||
print_screen_output " -N -A - Adds version/port(s)/driver version (if available) for Network/Audio;"
|
print_screen_output " -N -A - Adds version/port(s)/driver version (if available) for Network/Audio;"
|
||||||
print_screen_output " -N -A -G - Network, audio, graphics, shows PCI Bus ID/Usb ID number of card;"
|
print_screen_output " -N -A -G - Network, audio, graphics, shows PCI Bus ID/Usb ID number of card;"
|
||||||
print_screen_output " -S - Desktop toolkit if avaliable (GNOME/XFCE/KDE only); Kernel gcc version"
|
print_screen_output " -S - Desktop toolkit if avaliable (GNOME/XFCE/KDE only); Kernel gcc version"
|
||||||
print_screen_output " -G - Direct rendering status for Graphics (in X)."
|
|
||||||
print_screen_output " -G - (for single gpu, nvidia driver) screen number gpu is running on."
|
|
||||||
print_screen_output " -D - Hdd temp with disk data if you have hddtemp installed, if you are root OR if you have added to"
|
|
||||||
print_screen_output " /etc/sudoers (sudo v. 1.7 or newer): <username> ALL = NOPASSWD: /usr/sbin/hddtemp (sample)"
|
|
||||||
print_screen_output " -t - Adds memory use output to cpu (-xt c), and cpu use to memory (-xt m)."
|
print_screen_output " -t - Adds memory use output to cpu (-xt c), and cpu use to memory (-xt m)."
|
||||||
print_screen_output "-xx Show extra, extra data (only works with verbose or line output, not short form): "
|
print_screen_output "-xx Show extra, extra data (only works with verbose or line output, not short form): "
|
||||||
print_screen_output " -M - Adds chassis information, if any data for that is available."
|
print_screen_output " -M - Adds chassis information, if any data for that is available."
|
||||||
|
@ -4480,58 +4485,108 @@ get_networking_local_ip_data()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
|
|
||||||
local ifconfig_path=$( type -p ifconfig )
|
local ip_tool_command=$( type -p ip )
|
||||||
local temp_array=''
|
local temp_array='' ip_tool='ip'
|
||||||
|
# the chances for all new systems to have ip by default are far higher than
|
||||||
# lack of ifconfig will throw an error only upon it's usage
|
# the deprecated ifconfig. Only try for ifconfig if ip is not present in system
|
||||||
if [[ -n $ifconfig_path ]];then
|
if [[ -z $ip_tool_command ]];then
|
||||||
IFS=$'\n'
|
ip_tool_command=$( type -p ifconfig )
|
||||||
A_INTERFACES_DATA=( $( $ifconfig_path | gawk '
|
ip_tool='ifconfig'
|
||||||
|
else
|
||||||
|
ip_tool_command="$ip_tool_command addr"
|
||||||
|
fi
|
||||||
|
# lack of ip tool will throw an error only upon it's usage
|
||||||
|
if [[ -n "$ip_tool_command" ]];then
|
||||||
|
IFS=$'\n' # $ip_tool_command
|
||||||
|
A_INTERFACES_DATA=( $(
|
||||||
|
# important, because this can be 'ip addr' it MUST use eval ${...}
|
||||||
|
eval ${ip_tool_command} | gawk -v ipTool=$ip_tool '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
IGNORECASE=1
|
IGNORECASE=1
|
||||||
|
interface=""
|
||||||
|
ifIp=""
|
||||||
|
ifIpV6=""
|
||||||
|
ifMask=""
|
||||||
}
|
}
|
||||||
$0 !~ /^lo/ {
|
# skip past the lo item
|
||||||
# not clear on why inet is coming through, but this gets rid of it
|
/^lo/ || /^[0-9]+: lo:/ {
|
||||||
# as first line item.
|
while (getline && ( !/^$/ && !/valid(.*)lft/ ) ) {
|
||||||
interface = $1
|
# do nothing, just get past this entry item
|
||||||
gsub(/,/, " ", interface)
|
|
||||||
gsub(/^ +| +$/, "", interface)
|
|
||||||
gsub(/ [ \t]+/, " ", interface)
|
|
||||||
|
|
||||||
aInterfaces[interface]++
|
|
||||||
while (getline && !/^$/) {
|
|
||||||
if (/inet addr:/) {
|
|
||||||
ipAddresses[interface] = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 )
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/^[a-zA-Z]+[0-9]/ || /^[0-9]+: [a-zA-Z]+[0-9]+:/ {
|
||||||
|
# not clear on why inet is coming through, but this gets rid of it
|
||||||
|
# as first line item.
|
||||||
|
gsub(/,/, " ", $0)
|
||||||
|
gsub(/^ +| +$/, "", $0)
|
||||||
|
gsub(/ [ \t]+/, " ", $0)
|
||||||
|
if ( ipTool == "ifconfig" ) {
|
||||||
|
interface = $1
|
||||||
|
}
|
||||||
|
# prep this this: 2: eth0:
|
||||||
|
else if ( ipTool == "ip" ) {
|
||||||
|
interface = $2
|
||||||
|
sub(/:/, "", interface)
|
||||||
|
}
|
||||||
|
ifIp=""
|
||||||
|
ifIpV6=""
|
||||||
|
ifMask=""
|
||||||
|
aInterfaces[interface]++
|
||||||
|
|
||||||
|
while (getline && ( !/^$/ && !/valid(.*)lft/ )) {
|
||||||
|
if ( ipTool == "ifconfig" ) {
|
||||||
|
if (/inet addr:/) {
|
||||||
|
ifIp = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 )
|
||||||
|
if (/mask:/) {
|
||||||
|
ifMask = gensub( /mask:([0-9\.]+)/, "\\1", "g", $NF )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (/inet6 addr:/) {
|
||||||
|
ifIpV6 = $3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( ipTool == "ip" ) {
|
||||||
|
if ( $1 == "inet" ) {
|
||||||
|
ifIp = $2
|
||||||
|
}
|
||||||
|
if ( $1 == "inet6" ) {
|
||||||
|
ifIpV6 = $2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# slice off the digits that are sometimes tacked to the end of the address,
|
||||||
|
# like: /64 or /24
|
||||||
|
sub(/\/[0-9]+/, "", ifIp)
|
||||||
|
sub(/\/[0-9]+/, "", ifIpV6)
|
||||||
|
ipAddresses[interface] = ifIp "," ifMask "," ifIpV6
|
||||||
|
}
|
||||||
END {
|
END {
|
||||||
j=0
|
j=0
|
||||||
for (i in aInterfaces) {
|
for (i in aInterfaces) {
|
||||||
useInterfaceIp = ""
|
ifData = ""
|
||||||
a[j] = i
|
a[j] = i
|
||||||
if (ipAddresses[i] != "") {
|
if (ipAddresses[i] != "") {
|
||||||
useInterfaceIp = ipAddresses[i]
|
ifData = ipAddresses[i]
|
||||||
}
|
}
|
||||||
# create array primary item for master array
|
# create array primary item for master array
|
||||||
# tested needed to avoid bad data from above, if null it is garbage
|
# tested needed to avoid bad data from above, if null it is garbage
|
||||||
# this is the easiest way to handle junk I found, improve if you want
|
# this is the easiest way to handle junk I found, improve if you want
|
||||||
if ( useInterfaceIp != "" ) {
|
if ( ifData != "" ) {
|
||||||
print a[j] "," useInterfaceIp
|
print a[j] "," ifData
|
||||||
}
|
}
|
||||||
j++
|
j++
|
||||||
}
|
}
|
||||||
}') )
|
}'
|
||||||
|
) )
|
||||||
IFS="$ORIGINAL_IFS"
|
IFS="$ORIGINAL_IFS"
|
||||||
else
|
else
|
||||||
A_INTERFACES_DATA=( "Interfaces tool requires missing app: ifconfig" )
|
A_INTERFACES_DATA=( "Interfaces program 'ip' missing. Please check: $SCRIPT_NAME --recommends" )
|
||||||
fi
|
fi
|
||||||
temp_array=${A_INTERFACES_DATA[@]}
|
temp_array=${A_INTERFACES_DATA[@]}
|
||||||
log_function_data "A_INTERFACES_DATA: $temp_array"
|
log_function_data "A_INTERFACES_DATA: $temp_array"
|
||||||
eval $LOGFE
|
eval $LOGFE
|
||||||
}
|
}
|
||||||
|
# get_networking_local_ip_data;exit
|
||||||
get_optical_drive_data()
|
get_optical_drive_data()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
|
@ -6706,7 +6761,7 @@ print_networking_data()
|
||||||
fi
|
fi
|
||||||
card_string="${C1}Card$card_id${C2} ${a_network_working[0]} "
|
card_string="${C1}Card$card_id${C2} ${a_network_working[0]} "
|
||||||
card_data="$driver_data$port_data$pci_bus_id"
|
card_data="$driver_data$port_data$pci_bus_id"
|
||||||
if [[ $( calculate_line_length "$card_string$card_data" ) -gt $LINE_MAX ]];then
|
if [[ $( calculate_line_length "$card_string$card_data" ) -lt $LINE_MAX ]];then
|
||||||
network_data=$( create_print_line "$line_starter" "$card_string" )
|
network_data=$( create_print_line "$line_starter" "$card_string" )
|
||||||
line_starter=' '
|
line_starter=' '
|
||||||
card_string=''
|
card_string=''
|
||||||
|
@ -6776,8 +6831,10 @@ print_networking_ip_data()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
local ip=$( get_networking_wan_ip_data )
|
local ip=$( get_networking_wan_ip_data )
|
||||||
local ip_data='' a_interfaces_working='' interfaces='' interfaces_2='' i=''
|
local wan_ip_data='' a_interfaces_working='' interfaces='' i=''
|
||||||
local if_id='' if_ip=''
|
local if_id='' if_ip='' if_ipv6='' if_ipv6_string='' full_string='' if_string=''
|
||||||
|
local if_id_string='' if_ip_string=''
|
||||||
|
local line_max=$(( $LINE_MAX - 50 ))
|
||||||
|
|
||||||
# set A_INTERFACES_DATA
|
# set A_INTERFACES_DATA
|
||||||
get_networking_local_ip_data
|
get_networking_local_ip_data
|
||||||
|
@ -6789,8 +6846,7 @@ print_networking_ip_data()
|
||||||
ip=$FILTER_STRING
|
ip=$FILTER_STRING
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
ip_data=$( create_print_line " " "${C1}Wan IP:${C2} $ip" )
|
wan_ip_data="${C1}WAN IP:${C2} $ip "
|
||||||
|
|
||||||
# then create the list of local interface/ip
|
# then create the list of local interface/ip
|
||||||
i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1
|
i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1
|
||||||
while [[ -n ${A_INTERFACES_DATA[i]} ]]
|
while [[ -n ${A_INTERFACES_DATA[i]} ]]
|
||||||
|
@ -6800,29 +6856,45 @@ print_networking_ip_data()
|
||||||
IFS="$ORIGINAL_IFS"
|
IFS="$ORIGINAL_IFS"
|
||||||
if_id='N/A'
|
if_id='N/A'
|
||||||
if_ip='N/A'
|
if_ip='N/A'
|
||||||
if [[ -n ${a_interfaces_working[1]} ]];then
|
if_ipv6='N/A'
|
||||||
if [[ $B_OUTPUT_FILTER == 'true' ]];then
|
if_ipv6_string=''
|
||||||
if_ip=$FILTER_STRING
|
if [[ -z $( grep '^Interface' <<< ${a_interfaces_working[0]} ) ]];then
|
||||||
else
|
if [[ -n ${a_interfaces_working[1]} ]];then
|
||||||
if_ip=${a_interfaces_working[1]}
|
if [[ $B_OUTPUT_FILTER == 'true' ]];then
|
||||||
|
if_ip=$FILTER_STRING
|
||||||
|
else
|
||||||
|
if_ip=${a_interfaces_working[1]}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if_ip_string=" ${C1}ip${C2} $if_ip"
|
||||||
|
if [[ $B_EXTRA_DATA == 'true' ]];then
|
||||||
|
if [[ -n ${a_interfaces_working[3]} ]];then
|
||||||
|
if [[ $B_OUTPUT_FILTER == 'true' ]];then
|
||||||
|
if_ipv6=$FILTER_STRING
|
||||||
|
else
|
||||||
|
if_ipv6=${a_interfaces_working[3]}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if_ipv6_string=" ${C1}ip-v6${C2} $if_ipv6"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ -n ${a_interfaces_working[0]} ]];then
|
if [[ -n ${a_interfaces_working[0]} ]];then
|
||||||
if_id=${a_interfaces_working[0]}
|
if_id=${a_interfaces_working[0]}
|
||||||
fi
|
fi
|
||||||
if [[ $i -lt 3 ]];then
|
if_string="$wan_ip_data$if_string${C1}IF${C2} $if_id$if_ip_string$if_ipv6_string "
|
||||||
interfaces="$interfaces ${C1}IF IP:${C2} $if_id ${C1}-${C2} $if_ip"
|
wan_ip_data=''
|
||||||
else
|
if [[ $( calculate_line_length "$if_string" ) -gt $line_max ]];then
|
||||||
# space on end here for lining up with line starter
|
full_string=$( create_print_line " " "$if_string" )
|
||||||
interfaces_2="$interfaces_2${C1}IF IP:${C2} $if_id ${C1}-${C2} $if_ip "
|
print_screen_output "$full_string"
|
||||||
|
if_string=''
|
||||||
fi
|
fi
|
||||||
((i++))
|
((i++))
|
||||||
done
|
done
|
||||||
print_screen_output "$ip_data$interfaces"
|
|
||||||
# then wrap it if needed
|
# then print out anything not printed already
|
||||||
if [[ -n $interfaces_2 ]];then
|
if [[ -n $if_string ]];then
|
||||||
interfaces_2=$( create_print_line " " "$interfaces_2" )
|
full_string=$( create_print_line " " "$if_string" )
|
||||||
print_screen_output "$interfaces_2"
|
print_screen_output "$full_string"
|
||||||
fi
|
fi
|
||||||
eval $LOGFE
|
eval $LOGFE
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue