Из того, что я читал, IBM Thinkpad 240 не поддерживает начальную загрузку ни от какого устройства кроме внутреннего жесткого диска или дискеты. Так как дисковод для гибких дисков потерян, и я сомневаюсь, что Вы хотите найти и купить один, Вы застреваете с одной опцией: Удалите жесткий диск и подключите его к другому компьютеру и выполните установку ОС оттуда. Довольно хитрый.
Это изменит порядок IP-адресов.
OR
AWK довольно гибкий. :)[1189217].
Или в обычном старом оболочке:
CPU3 CPU2 CPU1 CPU0 Bin Hex
---- ---- ---- ---- --- ---
OFF OFF OFF ON = 0001 = 1
OFF OFF ON OFF = 0010 = 2
OFF OFF ON ON = 0011 = 3
OFF ON OFF OFF = 0100 = 4
OFF ON OFF ON = 0101 = 5
OFF ON ON OFF = 0110 = 6
OFF ON ON ON = 0111 = 7
ON OFF OFF OFF = 1000 = 8
ON OFF OFF ON = 1001 = 9
ON OFF ON OFF = 1010 = A
ON OFF ON ON = 1011 = B
ON ON OFF OFF = 1100 = C
ON ON OFF ON = 1101 = D
ON ON ON OFF = 1110 = E
ON ON ON ON = 1111 = F
Просто для любопытства...[1189653] с помощью [1189654] так[1189655] из GNU coreutils: дана переменная [1189656]ip[1189657] в виде [1189658]192. 168.1.1 [1189659] затем [12123], т.е. [12124] Чтобы завершить его, Ruby:
ruby -r ipaddr -e 'puts IPAddr.new(ARGV.first).reverse' 192.168.1.1
Который также поддерживает IPv6
2607:F8B0:4000:080A:0000:0000:0000:2000
=> 0.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.a.0.8.0.0.0.0.4.0.b.8.f.7.0.6.2.ip6.arpa
В Python
a = "192.168.1.122"
import re
m = re.search(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',a)
ip = m.group(4),m.group(3),m.group(2),m.group(1)
'.'.join(ip) + ".in-addr.arpa"
'122.1.168.192.in-addr.arpa'
IFS=. ; set -- ${0+192.168.1.2}
printf %b. $4 $3 $2 $1 in-addr.arpa\\c
IFS=. ; printf %s\\n \
in-addr.arpa ${0+192.168.1.2} |
sed '1!G;$s/\n/./gp;h;d'
IFS=. ; printf '[%b.] ' \
${0+192.168.1.2.]PPPPP\\c} |dc
echo in-addr.arpa
Другая возможность - использовать инструмент командной строки "dig" с переключателем "-x".
На самом деле он выполняет запрос к записи PTR, но если вы отфильтруете «PTR», он покажет вам одну прокомментированную строку (запрос) и, возможно, несколько ответов.
Использование «dig» может быть удобно для быстрого написания имени PTR без написания небольшого скрипта. В частности, если вам это нужно в интерактивном режиме (чтобы вырезать и вставить результат). Он также работает с IPv6.
С host
командой из dnsutils
:
$ host -t ptr 192.168.1.1 | cut -d' ' -f 2
1.1.168.192.in-addr.arpa.
Если вы хотите, чтобы он работал и с IPv6, вы можете использовать dig -x
.
Например:
$ dig -x 194.68.208.240 | egrep '^;.*PTR$' | cut -c 2- | awk '{print $1}'
240.208.68.194.in-addr.arpa.
$ dig -x 2001:db8:dc61:2a61::1 | egrep '^;.*PTR$' | cut -c 2- | awk '{print $1}'
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.a.2.1.6.c.d.8.b.d.0.1.0.0.2.ip6.arpa.
Una alternativa más corta a la respuesta de mattbianco con menos herramientas, pero usando pcregrep podría ser:
$ dig -x 194.68.208.240 | pcregrep -o1 '^;(\S+)\s+IN\s+PTR$'
240.208.68.194.in-addr.arpa.
$ dig -x 2001:db8:dc61:2a61::1 | pcregrep -o1 '^;(\S+)\s+IN\s+PTR$'
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.6.a.2.1.6.c.d.8.b.d.0.1.0.0.2.ip6.arpa.
Предположим, что var содержит ip:ip=192.168.2.1
. Если значение необходимо присвоить новой переменной, просто заключите любое решение в $()
и назначьте его переменной rr=$(...)
.
Возможны некоторые решения:
Простейший: printf 'arpa.in-addr.%s.' "$ip" | tac -s.
Большинство снарядов: IFS=. eval 'set -- $ip'; echo "$4.$3.$2.$1.in-addr.arpa"
Некоторые снаряды: IFS=. read d c b a <<<"$ip"; printf %s "$a.$b.$c.$d.in-addr.arpa."
авк: echo "$ip" | awk -F. '{OFS=FS;print $4,$3,$2,$1,"in-addr.arpa"}'
сед: echo "$ip" | sed -E 's/([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)$/\4.\3.\2.\1.in-addr.arpa./'
сед: echo "arpa.in-addr.$ip" | sed 'y/./\n/' | sed 'G;$s/\n/./gp;h;d'
перл: echo "$ip" | perl -F\\. -lane '$,=".";print( join(".",(reverse @F),"in-addr.arpa"))'
копать: dig -x "$ip" | awk -F '[; \t]+' '/^;.*PTR$/{print($2)}'
хост: host -t ptr 192.168.2.1 | cut -d' ' -f2
Оба решения — dig и host — работают с IPv6.
#!/bin/bash
# script file name reverseip.sh
if [ -z $1 ] || [ "help" == $1 ]
then
echo 'Convert a full ipv4 or ipv6 address to arpa notation'
echo "usage:"
echo./reverseip.sh "help"
echo./reverseip.sh "ipv4 address format: xxxx.xxxx.xxxx.xxxx"
echo./reverseip.sh "ipv6 address format: xxxx:xxxx:xxxx:xxxx::xxxx"
echo "examples:"
echo./reverseip.sh 216.58.207.35
echo./reverseip.sh 2a00:1450:4001:824::2003
exit
fi
# if ip address passed containing ':'
if [[ $1 = *':'* ]];
then
# invert ipv6 address e.g.: 2a00:1450:4001:824::2003 to 3.0.0.2.0.0.0.0.0.0.0.0.0.0.0.0.4.2.8.0.1.0.0.4.0.5.4.1.0.0.a.2.
# @see lsowen https://gist.github.com/lsowen/4447d916fd19cbb7fce4
echo "$1" | awk -F: 'BEGIN {OFS=""; }{addCount = 9 - NF; for(i=1; i<=NF;i++){if(length($i) == 0){ for(j=1;j<=addCount;j++){$i = ($i "0000");} } else { $i = substr(("0000" $i), length($i)+5-4);}}; print}' | rev | sed -e "s/./&./g" | echo "$(</dev/stdin)ip6.arpa."
else
# invert ipv6 address e.g.: 216.58.207.35 to 35.207.58.216.in-addr.arpa
# @see Stéphane Chazelas https://unix.stackexchange.com/questions/132779/how-to-read-an-ip-address-backwards
echo $(printf %s "$1." | tac -s.)in-addr.arpa
fi
Использовать следующую однострочную оболочку:
echo '192.168.1.1' | tr '.' '\n' | tac | paste -s -d '.' -