Определение типа RHEL (Рабочая станция и сервер )для RHEL8

Различия между оболочками связаны с различиями в настройке процессов. dashустанавливает перенаправления перед разветвлением, поэтому /proc/selfуказывает на оболочку; bashи zshустановили их после разветвления, поэтому /proc/selfуказывает на новый процесс. Вы можете увидеть, как это происходит сstrace -f:

  • strace -f dash -c '/bin/cat /proc/self/comm - среди прочего показывает ()

      open("/proc/self/comm", O_RDONLY)       = 3
      fcntl(0, F_DUPFD, 10)                   = 10
      close(0)                                = 0
      fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
      dup2(3, 0)                              = 0
      close(3)                                = 0
      clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f12581299d0) = 7743
      strace: Process 7743 attached
      [pid  7742] wait4(-1,  
      [pid  7743] execve("/bin/cat", ["/bin/cat", "/proc/self/comm", "-"], [/* 43 vars */]) = 0
    

    (/proc/self/commоткрывается перед системным вызовом clone, в котором процесс разветвляется );

  • strace -f bash -c '/bin/cat /proc/self/comm - показывает

      clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fb506bdee10) = 8106
      strace: Process 8106 attached
      [... snip a ton of signal-handling setup...]
      [pid  8106] open("/proc/self/comm", O_RDONLY) = 3
      [pid  8106] dup2(3, 0)                  = 0
      [pid  8106] close(3)                    = 0
      [pid  8106] execve("/bin/cat", ["/bin/cat", "/proc/self/comm", "-"], [/* 43 vars */]) = 0
    

    (/proc/self/commоткрывается после вызова clone,в дочернем процессе 8106 ).

Понимание того, почему environотображается пустым, требует дополнительных объяснений. Когда /proc//environоткрывается , ядро ​​сохраняет копию указателя на задачу mm_struct, которая содержит указатели на среду. Но execve, который используется для запуска процесса cat, создает новый mm_structдля процесса . Таким образом, перенаправление в конечном итоге указывает на устаревшую информацию, и когда catсчитывает свой ввод, он не видит своего реального окружения. Среда, которую он видит , должна быть копией родительской, но вовлеченные оболочки очищают ее перед разветвлением и настройкой новой среды (, которая устанавливаетсяexecve).

0
15.06.2021, 15:34
2 ответа

В RHEL 8 вы можете использовать syspurposeдля определения настроенной цели системы, , например.

$ sudo syspurpose show
{
  "role": "Red Hat Enterprise Linux Workstation",
  "usage": "Production"
}

Однако настраивать это необязательно. Чтобы настроить назначение системы, запустите

sudo syspurpose --set-role="Red Hat Enterprise Linux Server"

(роль может быть одной из «Red Hat Enterprise Linux Server», «Red Hat Enterprise Linux Workstation», «Red Hat Enterprise Linux Compute Node»).

Если вас интересует тип подписки, который используется в системе, запустите

sudo subscription-manager list --consumed | grep "Roles:"

Это будет указывать роль системы как подписанной.

2
28.07.2021, 11:25

Вы можете использовать subscription-manager list --consumedдля просмотра подписки, прикрепленной к вашей системе. В выводе этой команды у вас будет строка, начинающаяся с Имя подписки:. Эта строка сообщит вам, какую подписку использует ваша система.Однако это не является гарантией того, что ваша система действительно относится к типу, указанному в подписке.

0
28.07.2021, 11:25

Теги

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