Di mana saya menemukan variabel lingkungan SUDO_COMMAND?

8

Saat ini saya sedang mempelajari dasar-dasar Linux dengan Ubuntu dan ada sedikit aktivitas di mana saya perlu mencari informasi tentang variabel lingkungan. Saya sudah menemukan info 6/7 tetapi tidak dapat menemukannya SUDO_COMMAND. Beginilah daftarnya:

SHELL=/bin/bash
USER=student
SUDO_COMMAND=
PWD=/home
HOME=/home/student
LOGNAME=student
OLDPWD=/home/student 

Saya perhatikan bahwa informasi datang dalam urutan dan SUDO_COMMANDantara pengguna dan pwd. apakah saya melakukan kesalahan di suatu tempat?

kyle cruz
sumber
1
apakah Anda memiliki hak sudo?
ravery

Jawaban:

11

SUDO_COMMANDadalah variabel lingkungan yang ditetapkan oleh sudohanya di lingkungan proses yang dimulai olehnya (dan diwarisi oleh proses anak). Jika Anda menjalankan sudo some-command arg1 arg2, maka SUDO_COMMANDakan berisi path absolut ke some-command, dan arg1 arg2. Jika Anda menjalankan sudo -satau sudo -i, maka variabel akan ditetapkan ke shell yang dimulai. Bagaimanapun, Anda mungkin tidak akan melihatnya di luar pohon proses yang dimulai oleh sudo.

Sebagai contoh:

$ sudo sh -c 'echo $SUDO_COMMAND'
/bin/sh -c echo $SUDO_COMMAND

Atau:

$ sudo env
HOME=/home/muru
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
TERM=xterm-256color
LANG=en_US.UTF-8
LC_NUMERIC=en_GB.UTF-8
LC_TIME=en_GB.UTF-8
LC_MONETARY=en_GB.UTF-8
LC_PAPER=en_GB.UTF-8
LC_NAME=en_GB.UTF-8
LC_ADDRESS=en_GB.UTF-8
LC_TELEPHONE=en_GB.UTF-8
LC_MEASUREMENT=en_GB.UTF-8
LC_IDENTIFICATION=en_GB.UTF-8
MAIL=/var/mail/root
LOGNAME=root
USER=root
USERNAME=root
SHELL=/bin/bash
SUDO_COMMAND=/usr/bin/env
SUDO_USER=muru
SUDO_UID=1000
SUDO_GID=1000

Saya perhatikan bahwa informasi datang secara berurutan

Aku tidak tahu mana perintah yang Anda gunakan, tetapi Anda tidak dapat bergantung pada output set, declare, envatau printenvberada di beberapa urutan.

muru
sumber
Dan saya pikir sudo echo $SUDO_COMMANDbisa digunakan untuk membuat infinitive loop… :(
makanan penutup
5

Ini SUDO_COMMANDadalah variabel lingkungan yang diatur ke perintah yang dijalankan oleh sudo .

Seperti yang disebutkan oleh @muru - jika sudomenjalankan shell baru - variabel lingkungan ini akan ditampilkan di shell baru ini

Info lebih lanjut

man sudo memberikan detail berikut:

ENVIRONMENT
 sudo utilizes the following environment variables.  The security policy
 has control over the actual content of the command's environment.

 EDITOR           Default editor to use in -e (sudoedit) mode if neither
                  SUDO_EDITOR nor VISUAL is set.

 MAIL             Set to the mail spool of the target user when the -i
                  option is specified or when env_reset is enabled in
                  sudoers (unless MAIL is present in the env_keep list).

 HOME             Set to the home directory of the target user when the -i
                  or -H options are specified, when the -s option is
                  specified and set_home is set in sudoers, when
                  always_set_home is enabled in sudoers, or when env_reset
                  is enabled in sudoers and HOME is not present in the
                  env_keep list.

 LOGNAME          Set to the login name of the target user when the -i
                  option is specified, when the set_logname option is
                  enabled in sudoers or when the env_reset option is
                  enabled in sudoers (unless LOGNAME is present in the
                  env_keep list).

 PATH             May be overridden by the security policy.

 SHELL            Used to determine shell to run with -s option.

 SUDO_ASKPASS     Specifies the path to a helper program used to read the
                  password if no terminal is available or if the -A option
                  is specified.

 SUDO_COMMAND     Set to the command run by sudo.
Yaron
sumber
Saya tidak berpikir contoh Anda sebenarnya dapat direproduksi. SUDO_COMMANDhanya ada di lingkungan yang dimulai oleh sudo, jika SUDO_COMMANDbenar-benar di mana /bin/ls, maka Anda tidak akan mendapatkan shell untuk dijalankan echo $SUDO_COMMAND.
muru