Как я могу изменить пользователя внутри функции

Bios

Чтобы максимизировать ваши шансы, убедитесь, что в вашей системе установлена ​​последняя версия BIOS (всегда делайте такое обновление, когда кондиционер надежно закреплен и находится в неподвижном состоянии).Сравните настройки со значениями по умолчанию (что вам следовало бы сделать, если вы перезагрузили настройки по умолчанию после перепрошивки - заранее запишите свои предыдущие настройки!) И убедитесь, что у вас нет экзотических настроек перед установкой.

Быстрый запрос lspci на сайте HCL

Я полагаю, что для поддерживаемой архитектуры Linux будет работать, если не будет настоящего демонстратора, а не наоборот. Linux работает , и разработчики думают и о наследии. Ссылка на Список совместимого оборудования , представленная в комментариях, - очень простой способ провести частичное расследование любой серьезной проблемы. У меня есть этот старый компьютер примерно 2009 года. Давайте посмотрим (если у вас нет доступа к сайту, просто введите lspci и проведите конкретное исследование на основе результатов):

PCI ID  Works?  Vendor  Device  Driver  Kernel
808629e0    Yes Intel Corporation   82X38/X48 Express DRAM Controller   x38_edac    v2.6.29-
808629e9        Intel Corporation   82X38/X48 Express Host-Secondary PCI Express Bridge     
80862937        Intel Corporation   82801I (ICH9 Family) USB UHCI Controller #4     
80862938        Intel Corporation   82801I (ICH9 Family) USB UHCI Controller #5     
80862939        Intel Corporation   82801I (ICH9 Family) USB UHCI Controller #6     
8086293c        Intel Corporation   82801I (ICH9 Family) USB2 EHCI Controller #2        
8086293e    Yes Intel Corporation   82801I (ICH9 Family) HD Audio Controller    snd-hda-intel   v3.1.0-
80862940        Intel Corporation   82801I (ICH9 Family) PCI Express Port 1     
80862944        Intel Corporation   82801I (ICH9 Family) PCI Express Port 3     
80862934        Intel Corporation   82801I (ICH9 Family) USB UHCI Controller #1     
80862935        Intel Corporation   82801I (ICH9 Family) USB UHCI Controller #2     
80862936        Intel Corporation   82801I (ICH9 Family) USB UHCI Controller #3     
8086293a        Intel Corporation   82801I (ICH9 Family) USB2 EHCI Controller #1        
8086244e    Yes Intel Corporation   82801 PCI Bridge    i810_rng    
80862916    Yes Intel Corporation   82801IR (ICH9R) LPC Interface Controller    iTCO_wdt    v2.6.25-
80862922    Yes Intel Corporation   82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode]  ahci    v2.6.25-
80862930    Yes Intel Corporation   82801I (ICH9 Family) SMBus Controller   i2c-i801    v2.6.25-
10de104a        NVIDIA Corporation  GF119 [GeForce GT 610]      
10de0e08        NVIDIA Corporation  GF119 HDMI Audio Controller     
11ab4364    Yes Marvell Technology Group Ltd.   88E8056 PCI-E Gigabit Ethernet Controller   sky2    v2.6.25-

В подключенном мире большая часть время, когда вы захотите определить марку и модель вашего Ethernet / Wi-Fi компонента (ов) и наличие или отсутствие драйвера (принимая во внимание ограничения инструмента, подробно описанные на сайте). Второе распространенное соображение - графический адаптер . Если есть какие-либо красные флажки в отношении оборудования, важно изучить документацию самого дистрибутива на сайте дистрибутива или его официальной вики.

Текущая, стабильная

Если вы не можете быстро определить задокументированную проблему, почему бы просто не установить стабильную версию дистрибутива, которая вам нравится, и посмотреть, есть ли у вас действительно какие-либо проблемы с ней.Сопровождающие стремятся выпустить стабильную упакованную версию ядра в соответствии со своей философией и правилами, относящимися к их модели распространения. И само собой разумеется, что очень много работы было вложено в само ядро ​​Linux, и тем более каждый день. Я полагаю, это означает, что есть больше функций, и совместимость, безусловно, является функцией. На мой взгляд, производители ноутбуков всегда были неоригинальны, а их оборудование - не ракетостроение. Мне никогда не приходило в голову устанавливать что-либо, кроме последнего стабильного ядра из используемого мной дистрибутива, каким бы аппаратным ни было и пока все хорошо.

1
21.02.2019, 23:08
2 ответа

Вам необходимо выполнить команды в оболочке, с которой вы начинаете sudo.

$ f() {
sudo -Eu root bash -c whoami
}
$ f
root
1
27.01.2020, 23:15

Не делай этого.

Получение двух строк вывода в неправильном порядке должно было быть намеком на то, что что-то не так.

При выполнении скрипта с помощью

ssh centos@myhost.com 'bash -s' < script.sh

происходит следующее:

  1. Сценарий передается bash -sв стандартный поток ввода оболочки.
  2. Сценарий определяет функцию testи вызывает ее.
  3. Команда sudo bashв функции запускает корневую оболочку.
  4. Эта оболочка наследует стандартный поток ввода, то есть скрипт.
  5. Корневая оболочка продолжает чтение скрипта с точки после вызова функции. Он делает это, потому что именно здесь находится поток в данный момент.

Теперь у вас есть корневая оболочка, запущенная из функции test, которая выполняет инструкции после вызова test.

  1. Он запускает вторую корневую оболочку, которая наследует стандартный поток ввода (, то есть поток сценария оболочки ).

Теперь у вас есть centosоболочка, выполняющая корневую оболочку, выполняющая корневую оболочку.

  1. Вторая корневая оболочка выполняет echo "outside $(whoami)"вывод outside root, который является последней строкой скрипта.
  2. Читать больше нечего, поэтому второй корневой шелл завершает работу.
  3. То же самое и с первой корневой оболочкой.
  4. Исходная оболочка bash -sвыполняет echo "inside $(whoami)"(, потому что это часть функции, которую она начала выполнять ранее ), выводя inside centos.
  5. Вызов функции оболочки завершается, и поскольку остальная часть скрипта уже прочитана двумя корневыми оболочками, исходной оболочке больше нечего читать, и она завершается.

sudoстрого для выполнения другой команды (или запуска интерактивной оболочки ). Изменение пользователя предназначено только для этой другой команды. Когда команда завершится, вы снова станете первоначальным пользователем.Вы не можете использовать sudoдля «переключения на другого пользователя» в середине сценария, а затем запускать часть этого сценария от имени этого другого пользователя (, если, конечно, вы преднамеренно не пишете свой сценарий должен быть выполнен причудливым образом, распутанным выше, но такой вид кодирования относится к состязаниям по запутанному коду ).

Чтобы выполнить набор команд от имени пользователя root в сценарии, вы должны передать эти команды вызову sudo. Например:

sudo bash -c 'echo "Now running as $USER"; echo "whoami outputs $(whoami)"'

После выхода из команды sudo bash -cвы вернетесь к исходному пользователю. Всегда.

4
27.01.2020, 23:15

Теги

Похожие вопросы