У меня была аналогичная проблема после обновления с Leap 15.0 до Leap 15.1:nslookup
работало, но ping
или что-либо еще, требующее разрешения DNS, не работало. Я сделал все стандартные проверки (resolv.conf
, nsswitch.conf
, /etc/sysconfig/network/config
), и они были в порядке. Переключение с wicked
на NetworkManager
и включение dnsmasq
, как указано выше, изначально решило мою проблему.
Я копнул немного глубже и нашел здесь подсказку, что это может быть связано с проблемами в конфигурации apparmor:https://forums.opensuse.org/showthread.php/536437-DNS-problem-after-upgrade-from-15-0?p=2906092#post2906092
Аналогично тому потоку в моей системе, в /etc/apparmor.d/abstractions/nameservice.rpmnew
была обновленная конфигурация, которая разрешила доступ к дополнительным каталогам, используемым nscd
. Как только я скопировал этот новый файл конфигурации и очистил кэш apparmor, как описано в этом посте, wicked
начал работать, и я смог вернуть конфигурацию моего сетевого менеджера обратно к исходной версии без необходимости использовать dnsmasq
.
Эта строка не совсем синтаксически правильна (, но bash
обрабатывает ее):
if [ $USER == 'root' ]
Вы должны использовать ==
только с [[
... ]]
и =
в остальных случаях. Я бы также рекомендовал вам двойную кавычку -$USER
, если вы остаетесь с синтаксисом [
... ]
if [[ "$USER" == 'root' ]]
или
if [ "$USER" = 'root' ]
В zsh
=cmd
— это оператор расширения имени файла, который заменяется на путь команды cmd
. =cmd
аналогично $commands[cmd]
.
Итак, здесь, с ==
в одном из аргументов команды [
, это расширяет его до пути команды =
. Поскольку в вашем $PATH
нет команды с именем =
, это вызывает ошибку.
Сравните:
$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found
Оператор равенства в команде [
имеет вид =
. Команда [
выполняет только тесты, она не выполняет никаких присваиваний, поэтому нет необходимости различать оператор присваивания и оператор сравнения на равенство, как в некоторых других языках (с =
против ==
. как в C или :=
против =
в некоторых других и т. д. ).
Так и должно быть:
[ "$USER" = root ]
Тем не менее [
из zsh
, как и ksh
, также поддерживает ==
в качестве альтернативы =
, но если вы не отключите параметр equals
(, как в ksh
. ] emulation ), вам нужно будет заключить хотя бы первый =
в кавычки, чтобы избежать этого =cmd
оператора:
[ "$USER" '==' root ]
Обратите внимание, что хотя $USERNAME
автоматически устанавливается с помощью zsh
, $USER
не является (, хотя он устанавливается как переменная окружения некоторыми вещами, такими какlogin
).
Чтобы проверить, есть ли у вас привилегии суперпользователя, более надежно проверить, что ваш эффективный идентификатор пользователя равен 0, что можно сделать в zsh
или bash
с помощью [ "$EUID" -eq 0 ]
или (( EUID == 0 ))
.
См. также: