env命令詳解

2021-09-07 17:16:04 字數 1636 閱讀 6218

env命令時gnu的coreutils包內的乙個軟體,它的功能是:在乙個修改後的環境裡執行命令。

通俗的講:乙個linux軟體可能被安裝在好幾個地方,舉個例子:在最新的centos中perl的版本為5.16,而我在home目錄下安裝了最新的5.26.1版本,這樣在同乙個系統內,有2個perl的執行程式:

[root@noi ~]# man env

[root@noi ~]# which -a perl

/root/perl5/perlbrew/perls/perl-5.26.1/bin/perl

/usr/bin/perl

到底執行哪乙個,取決於path環境變數內路徑的排列順序

[root@noi ~]# echo $path

/root/perl5/perlbrew/bin:/root/perl5/perlbrew/perls/perl-5.26.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

在被環境中,顯然執行的是home目錄下的5.26版本。但是這個時候,我想執行乙個程式在5.16版本下,我可以使用:

[root@noi ~]# /usr/bin/perl --version

this

is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi

(with

33 registered patches, see perl -v for

more detail)

同時,我也可以利用env命令,來達到相同的目的:

[root@noi ~]# env path=/usr/bin perl --version

this

is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi

(with

33 registered patches, see perl -v for more detail)

注意:這裡path變數被我修改為 /usr/bin ,這就是man手冊說的,env可以在乙個修改了的環境下,執行命令的含義。看下面,沒有修改path時,執行的情況:

[root@noi ~]# env perl --version

this

is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-linux

(with

1 registered patch, see perl -v for more detail)

看到沒,執行的是home目錄版本,也就是依據上面path原值,來執行的。

依據這個特性,有時候我們在寫指令碼,比如perl指令碼的時候,如果想執行當前perl環境下的指令碼,而不是固定目錄的 /usr/bin/perl ,可以用下面的寫法替代 /usr/bin/perl

#!/usr/bin/env perl

這樣寫,其實就是把perl放到當前環境下,來執行perl了。

如何執行sudo命令時保留當前使用者env變數

在linux環境中我們經常使用sudo命令執行root許可權,但預設情況下sudo執行時,會預設重置環境變數為安全的環境變數,也即,但前設定的變數都會失效。可以通過如下設定來取消這種設定 1 編輯sudoers檔案 vim etc sudoers 注釋掉 defaults env reset def...

如何執行sudo命令時保留當前使用者env變數

在linux環境中我們經常使用sudo命令執行root許可權,但預設情況下sudo執行時,會預設重置環境變數為安全的環境變數,也即,但前設定的變數都會失效。可以通過如下設定來取消這種設定 1 編輯sudoers檔案 vim etc sudoers 注釋掉 defaults env reset def...

PHP增加 ENV變數

前言 在日常開發過程中,我們常常會將一些系統或模組配寫在配置檔案裡。這樣便於程式維護與修改。通常的配置檔案有.ini xml等。配置檔案的好處在於 1,便於管理。2,可讀性高。但是,使用配置檔案也會有壞外,即 1,安全性差。如果採用加密方法,會帶來解密效能上的開銷。2,多伺服器佈署時,容易造成檔案內...