Очевидно, вы включили полное ведение журнала вывода в sudo (ers ).
Самый простой способ освободить место (возможно, удалив журналы sudo
) — либо войти в систему как root
, либо использовать su
, если это позволяют ваши настройки.
В зависимости от того, сколько /var/log
заполнено, эти процедуры могут быть успешными или нет. В худшем случае загрузка в одиночном режиме или из работающей системы позволит вам все исправить.
Если у вас нет особых потребностей в регистрации большого количества sudo
операций, я бы отредактировал /etc/sudoers
, чтобы изменить настройки ведения журнала. Такая подробная настройка снова быстро исчерпает доступное пространство.
Я бы использовал
#!/bin/bash
#nslookup but display only IP
nslookup -type=mx cathay.com.sg |
awk -F":" 'NF==2 {print $2}'
обратите внимание, что
|
находится в конце строки и используется как символ продолжения.NF==2
означает, что мы выбираем строку с 2 полями print $2
будет печатать также начальный пробел nslookup
Читая ваш запрос, вы пытаетесь отобразитьMXIP-адрес для домена.
Но nslookup
первые строки сообщают только имя и IP-адрес вашего настроенного DNS:
nslookup -type=mx cathay.com.sg | cat -n
1 Server: 192.168.1.1
2 Address: 192.168.1.1#53
3
4 Non-authoritative answer:
5 cathay.com.sg mail exchanger = 0 cathay-com-sg.mail.protection.outlook.com.
6
7 Authoritative answers can be found from:
8 cathay.com.sg nameserver = ns2.dreamhost.com.
9 cathay.com.sg nameserver = ns3.dreamhost.com.
10 cathay.com.sg nameserver = ns1.dreamhost.com.
11 ns1.dreamhost.com internet address = 64.90.62.230
12 ns2.dreamhost.com internet address = 208.97.182.10
13 ns3.dreamhost.com internet address = 66.33.205.230
Реальный ответ начинается после строки 4 и содержит только одну строку, сообщающую MX (с приоритетом = 0 )имеет имя:cathay-com-sg.mail.protection.outlook.com
.
После этого вы должны задать (хотя бы )один второй вопрос:
nslookup cathay-com-sg.mail.protection.outlook.com |cat -n
1 Server: 192.168.1.1
2 Address: 192.168.1.1#53
3
4 Non-authoritative answer:
5 Name: cathay-com-sg.mail.protection.outlook.com
6 Address: 104.47.124.36
7 Name: cathay-com-sg.mail.protection.outlook.com
8 Address: 104.47.126.36
Опять же, ответ начинается после строки 4 и содержит два Address:
.
dig
, под bash , можно было сделать просто:mapfile -t mxnames < <(dig +noall +answer mx cathay.com.sg)
mxnames=("${mxnames[@]##*[ $'\t']}")
mapfile -t mxips < <(dig +noall +answer ${mxnames[@]})
mxips=("${mxips[@]##*[ $'\t']}")
Потом
declare -p mxips mxnames
может вернуть что-то вроде:
declare -a mxips=([0]="67.205.10.249" [1]="77.32.207.225" [2]="104.47.125.36" [3]="104.47.126.36")
declare -a mxnames=([0]="cathay.com.sg." [1]="cathay-com-sg.mail.protection.outlook.com.")
Вы можете использовать
for ip in ${mxips[@]};do
ping -{c,W}1 $ip &>/dev/null && echo $ip ok || echo $ip -- &
sleep.02
done |
cat
77.32.207.225 ok
67.205.10.249 ok
104.47.125.36 --
104.47.126.36 --
Синтаксис dig +noall +answer <QUERY>
будет возвращать только одну строку ответа, например:
dig +noall +answer mx cathay.com.sg
cathay.com.sg. 12345 IN MX 0 cathay-com-sg.mail.protection.outlook.com.
dig +noall +answer $mxname
cathay-com-sg.mail.protection.outlook.com. 10 IN A 104.47.125.36
cathay-com-sg.mail.protection.outlook.com. 10 IN A 104.47.126.36
Для получения дополнительной информации см. man dig
.
Синтаксис ${var##* }
так называемый Расширение параметра , будет отбрасывать строку слева до последнего пробела .
mxname=${mxname##* }
Отбрасывает левую часть ответа dig
, затем сохраняет cathay-com-sg.mail.protection.outlook.com.
в $mxname
, например
mxips+=(${line##* })
добавит последнюю часть предыдущего ответа в массив$mxips
.
Посмотрите man bash
, найдитеРасширение параметра:man -P'less +"/^ *Parameter Expansion"' bash
.
nslookup
, но только с 1 запуском для 2 запросов:Поскольку nslookup
может работать в интерактивном режиме и, таким образом, может отвечать на несколько запросов, существует функция, использующая 1ответвление –nslookup
для запроса столько запросов, сколько необходимо для список всех IP-адресов для одного домена:
mxIps () {
local target=$1 line foo;
local -a mxnames=() mxips=();
mkfifo fifo-nsl; # Fifo for binding nslookup output
exec 7> >(stdbuf -i0 -o0 nslookup >fifo-nsl);
exec 6< fifo-nsl;
rm fifo-nsl; # As FD 6 and 7 are open, we could remove them
printf "set type=mx\n%s\n" $target 1>&7; # 1st query
read -u 6 line; # wait for answer and drop 1st line
while read -t.002 -u 6 line; do
[ "$line" ] && [ -z "${line%%$target*mail exchanger*}" ] &&
mxnames+=(${line##* }); # Add to mxnames array
done;
printf 'set type=A\n' 1>&7; # Set -type=A
for mxname in ${mxnames[@]%.};
do
echo $mxname 1>&7; # Next query
read -u 6 line; # Wait for answer and
read -u 6 line; # drops two first lines
while read -t.002 -u 6 line; do
[ "$line" ] && [ -z "${line%%Address:*}" ] &&
mxips+=(${line##* }); # Add to mxips array
done;
done;
echo exit 1>&7; # End nslookup sub process
exec 6>&-; # Close FD 6, then 7
exec 7>&-;
declare -p mxips # Dump result
}
Потом
mxIps cathay.com.sg
declare -a mxips=([0]="104.47.125.36" [1]="104.47.126.36")