Здесь происходит несколько ключевых вещей:
Как объясняется в справочном руководстве bash , Простая команда Расширение, раздел «Если имя команды не дается, присвоение переменных влияет на текущую среду оболочки. В противном случае переменные добавляются в среду выполняемой команды и не влияют на текущую среду оболочки». Таким образом, когда вы говорите var = "something" command arg1 arg2
, команда будет выполняться, когда var
находится в среде команды и исчезает после выхода команды
. Демонстрация этого проста - доступ к среде команды из команды:
$ BAZ = "jake" python -c "import os; print os.environ ['BAZ']"
jake {{1 }}
Ничего удивительного. Такой синтаксис часто используется для запуска программ в модифицированной среде. Мои коллеги, пользователи unix.stackexchange.com и askubuntu.com, узнают этот пример: если пользователь использует немецкий язык, а вы говорите только по-английски, вы можете попросить их воспроизвести любую проблему, с которой они столкнулись, и получить вывод на английском языке следующим образом:
LC_ALL = команда C
Обратите внимание, что доступ к среде не является специфическим для python
. Это можно сделать с помощью C
или любого другого языка программирования.Так уж получилось, что сейчас он был моим «любимым оружием» и использовался только для этой демонстрации.
Расширение переменной происходит перед запуском чего-либо. Таким образом, когда вы запускаете что-то вроде BAZ = "foo" echo $ BAZ
, оболочка сначала просматривает свою среду, не находит там переменной BAZ и, таким образом, оставляет $ BAZ
пустым. Простая демонстрация этого:
$ BAZ = "jake" python -c "import sys; print 'ARG:', sys.argv [1]" $ BAZ
ARG:
Traceback (последний вызов последним):
Файл "", строка 1, в
IndexError: список индекса вне допустимого диапазона
Также важно обратите внимание, отличие от BAZ = jake; echo $ BAZ
, который представляет собой два отдельных командных оператора, и здесь BAZ = jake
останется в среде оболочки. Вариант использования зависит от ваших намерений. Если вы намереваетесь запустить несколько программ, которым нужна такая переменная, может быть желательно экспортировать
такую переменную. Если вам это нужно только в этот конкретный момент, то предыдущее присвоение переменных может быть предпочтительнее.
Этот метод устарел в текущей версии systemd, но я сохраню его здесь как ссылку для некоторых комментариев.
Самый быстрый способ -
sudo echo -e "bulldozer"> / etc / hostname
с последующей перезагрузкой.Сетевой стек Systemd должен подобрать его и применить при запуске.
Вы также можете использовать текстовый редактор и создать / отредактировать
/ etc / hostname
вручную. (Я рекомендуюnano
, но сначала вам нужно установить его вручную на Fedora)
Systemd hostnamectl
должен быть сегодня способом сделать это, это кажется.
Согласно этой статье , вы должны запустить hostnamectl set-hostname name
где name
] - желаемое имя хоста. Я полагаю, вам следует запустить это как root.
Это ужасный ответ, но он предоставлен для полноты. Сегодня обновил ядро. Старое ядро Fedora было 4.9.13-200.fc25.x86_64
. Новое ядро — 4.9.13-201.fc25.x86_64
.
После обновления ядра я вручную удаляю старое ядро из /boot
, используя rm
. Это стандартная процедура для меня в Linux (я всегда выполняю ее, чтобы удалить ненужный хлам). В этом случае я запустил:
su -
cd /boot
rm -rf *4.9.13-200*
rm -rf .*4.9.13-200*
После ручного удаления я регенерирую меню Grub и затем перезагружаюсь. Это также стандартная процедура для меня в Linux.
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
После перезагрузки старого имени больше не было:
$ dmesg | egrep -i '(bulldozer|skylake)'
[ 0.065941] Performance Events: PEBS fmt3+, Skylake events, 32-deep LBR, full-width counters, Intel PMU driver.
[ 1.096957] systemd[1]: Set hostname to <skylake>.
Итак, что-то повлияло на имя хоста, используемое systemd, но я не уверен, что именно.
Ранее я пытался регенерировать grub.cfg
, поэтому не уверен, что это правильный ответ. Я предполагаю, что пакет вызвал исправление, и после перезагрузки я заметил, что все было так, как и ожидалось.