ДУБЛИРОВАНИЕ...
важен, но скорее в том смысле, что он является источником большой путаницы . Это действительно очень просто. Этот ответ - просто «радикальная» иллюстрация.
Принятый ответ хорош, но слишком длинный и подчеркивает «дублирование».
Q мудро заканчивается на:
The use of the word duplication seems a little strange to me in this context. Perhaps that is throwing me.
Я использую нотацию bash и определяю переменные «один» и «два» как дескрипторы файлов «1» и «2». (выходной )оператор перенаправления >
является присваиванием =
. &
и $
означают «значение».
Примеры man bash (с добавленным значением по умолчанию "1")
ls 1>dirlist 2>&1 # both to dirlist
ls 2>&1 1>dirlist # 1 to dirlist, 2 stays on tty/screen
стать:
one=dirlist two=$one
и
two=$one one=dirlist
И даже это не -автоматически для меня и некоторых других, я думаю. Первая строка оставляет вам $one
и $two
, содержащие «dirlist». Конечно.
Вторая строка начинается с бесполезного присвоения. Оба начинаются по определению с "TTY" (немного символического )в качестве их направления ; это присваивание не изменяет никакого значения, а с переменными, как и с файловыми дескрипторами, ничего магическим образом не связывается. На переменную two
не влияют следующие one=dirlist
. Конечно, нет.
Кто-то здесь (6 лет назад )предложил "указать" вместо "копировать" или "дублировать", а потом понял :, что это тоже сбивает с толку.
Эта семантика дублирования или указателя даже не нужна. Может быть, это амперсанд, который требует большего внимания. «Значение» оператора/токена/что угодно.
Если -и только если -вы ищете способ получить неожиданный номер задания на вашей консоли , то сообщение «Готово» плюс в качестве бонуса файл с именем «2 ", тогда иди:
ls 1>2& 2>/dev/null
Обычно это читается как "копировать"/"дублировать" от 1 до 2, а затем оба вместе дают null . Но идея неверна, а также синтаксис. (но нет синтаксической ошибки, это действительно)
Правильный способ планирования — перенаправить любой из двух на null, а затем перенаправить ДРУГОЙ в то же место:
ls 1>/dev/null 2>&1
# or
ls 2>/dev/null 1>&2
(ведущую "1" можно опустить)
(ОК согл. A не слишком длинный, но слишком длинный список -или :очень хорошая визуализация, не очень хорошее объяснение)
Я думаю, проблема здесь в NetworkManager, который заполняет ваш файл resolv.conf.
Чтобы отключить обновления DNS.
1 -Откройте файл conf с помощью редактора:
sudo vi /etc/NetworkManager/NetworkManager.conf
2 -Добавить указанное выше в секцию [main] :dns=none
3 -Перезапустите NetworkManager:
sudo service network-manager restart
ПОСЛЕ ПОСЛЕДНЕГО РЕДАКТИРОВАНИЯ:
Как я вижу, вы используете NetworkManager.service:
A -Если вы используете dhcp для своего интерфейса, проверьте настройку DNS вашим DHCP-сервером:
cat /var/lib/NetworkManager/*.lease | grep 'domain-name-servers'
Вы можете напрямую указать свои DNS-записи, необходимые в этом случае, и отключить их предоставление DHCP:
# Edit dhclient configuration file
vi /etc/dhcp/dhclient.conf
# Set the fixed your dns server entries
supersede domain-name-servers 84.200.69.80, 84.200.70.40;
B -Здесь ясно, что ваш /etc/resolv.conf явно управляется службой разрешений systemd -.
Таким образом, вы можете отключить эту службу или позволить ей работать и отредактировать ее конфигурацию в /etc/systemd/resolved.conf ,поэтому, чтобы отключить его:
1 -Сначала проверьте выходные данные текущего файла systemd -resolve.conf и проверьте, работает ли systemd -resolve:
sudo cat /run/systemd/resolve/resolv.conf
sudo systemd-resolve status
2 -Остановить/отключить службу:
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved.service
3 -Установите режим обработки DNS в NetworkManager, чтобы он больше не управлялся ни systemd -, ни NetworKService (Редактировать /etc/NetworkManager/NetworkManager.conf):
[main]
dns=none
4 -Уничтожить символическую ссылку /etc/resolv.conf -> /run/systemd/resolve/resolv.conf:
sudo unlink /etc/resolv.conf
5 -Перезапустите NetworkManager:
sudo systemctl restart NetworkManager
6 -Воссоздать файл resolv.conf:
sudo touch /etc/resolv.conf
sudo chown root:root /etc/resolv.conf
sudo chmod 644 /etc/resolv.conf
7 -Заполнить вручную файл resolv.conf:
echo 'nameserver 84.200.70.40
nameserver 84.200.69.80
nameserver 192.168.4.1
nameserver 192.168.4.1
nameserver 192.168.1.1
nameserver 1.1.1.1' > /etc/resolv.conf
Я сделал скрипт для постоянного изменения resolv.conf
файла:
#!/usr/bin/env bash
f="/etc/resolv.conf"
chattr -i "$f"
rm -f "$f"
echo "nameserver 1.1.1.1" >> "$f"
echo "nameserver 8.8.8.8" >> "$f"
chattr +i "$f"
Этот сценарий делает файл неизменяемым, поэтому он не будет изменен и не может быть удален. Для удаления файла нужно использовать команду:
chattr -i /etc/resolv.conf
Затем удалите файл.