📅  最后修改于: 2023-12-03 15:21:38.025000             🧑  作者: Mango
当你在 Ubuntu 终端上工作时,碰到一台有多个 IP 地址的机器,你是否希望有一个简单而易于记忆的方式来引用它们?那么,你可以使用 Shell/Bash 脚本为这些本地机器上的 IP 地址重新命名。
首先,通过以下命令获取本地机器的 IP 地址列表:
ifconfig | grep 'inet addr:' | awk '{print $2}' | awk -F ':' '{print $2}'
该命令使用管道来将 ifconfig 命令的输出传递给 grep 命令,以过滤出包含inet addr:
的行。接着,该命令使用 awk 命令从过滤后的行中提取 IP 地址。最后,使用 awk 命令去掉 IP 地址中的冒号。
输出结果应如下所示:
127.0.0.1
192.168.1.103
然后,我们可以将这些 IP 地址与我们为它们命名的名称存储在一个名为ips
的数组中,如下所示:
ips=(["hub"]="127.0.0.1" ["laptop"]="192.168.1.103")
在这个示例中,我们为本机命名为“hub”,192.168.1.103 命名为“laptop”。
现在,让我们使用以下 Bash 函数为这些机器上的 IP 地址重新命名:
nickip () {
if [ ! -z $1 ] && [ ! -z $2 ]; then
sudo -- sh -c "echo $2 > /etc/hosts.d/$1"
echo "$1 is now $2!"
else
echo "usage: nickip <nickname> <ip_address>"
fi
}
该函数需要两个参数:nickname
和ip_address
。它会将 ip_address
写入到/etc/hosts.d/nickname
文件中,以将 nickname
与 ip_address
相关联。然后,它会输出“nickname is now ip_address!
”的消息来确认新的映射关系。
你可以调用该函数并传递两个参数来为本机添加新的映射关系,如下所示:
nickip laptop 192.168.1.103
在上面的示例中,我们将 192.168.1.103 与名称 “laptop” 相关联。
最后,你可以使用以下 Bash 函数来获取机器的名称,如下所示:
getname () {
ip=$1
if [ -z $ip ]; then echo "usage: getname <ip>"; return 1; fi
for i in ${!ips[@]}; do
if [ "${ips[$i]}" == "$ip" ]; then
echo $i
return 0
fi
done
echo "no name found"
return 1
}
该函数需要一个参数:ip
。它会在 ips
数组中搜索相应的 IP 地址,并返回关联的名称。
你可以调用该函数并传递一个参数来获取某个 IP 地址的名称,如下所示:
getname 192.168.1.103
如果该 IP 地址与数组ips
中的某个名称关联,则该函数将返回该名称。
在本文中,我们演示了如何使用 Bash 脚本为 Ubuntu 机器上的 IP 地址重新命名。通过掌握上述这些技巧,你将能够更轻松地管理你的本地网络。