4. linux shell、环境变量及与帐户的关系

来源:互联网 发布:人工智能技术失控 编辑:程序博客网 时间:2024/05/22 06:06

1. shell的环境变量

1.1 shell环境变量的分类

shell环境变量按生存周期可分为两类:

1.  永久型   2.临时型 

       永久型需要修改配置文件,临时型用export.

shell环境变量按作用范围可分为两类:

1.  全局型  2. 本地型 (所有用户与特定用户)

      全局型配置文件在/etc/profile  和 /etc/bash.bashrc
     
        本地型配置文件在主目录下的.bashrc 和 .profile。  
    
        注1: 不同文件的关系要看下文件说明部分。
        注2:环境变量立即生效使用source命令。

shell变量按读写权限可以分为两类

    只读变量与可读写变量。

    调用过readonly xxx命令的变量为只读变量

1.2 环境变量的查看

        env   查看全部环境变量(包括全局变量)
        set   查看本地环境变量

1.3 环境变量的设置

       例1:AAA=aaa
       例2:set AAA=aaa
       例3:export AAA=aaa         可向子shell传递变量值,注意是值传递。

      区别:
      例1:   
tony@ubuntu:~$ AAA=aaa            --------------》<span style="color:#cc33cc;">1 设置方式</span>tony@ubuntu:~$ set | grep AAA<span style="color:#cc0000;">AAA=aaa</span>tony@ubuntu:~$ su tonyPassword: tony@ubuntu:~$ set | grep AAAtony@ubuntu:~$ exit               --------------》<span style="color:#cc0000;">2.变量不能向子shell传递</span>exittony@ubuntu:~$ 
<pre name="code" class="plain">tony@ubuntu:~$ <span style="font-family: Arial, Helvetica, sans-serif;">su -m tony</span>
Password: 
tony@ubuntu:~$ set | grep AAA --------------------》3.使用-m选项也不能传递
tony@ubuntu:~$ 
<strong>   例2:</strong>
tony@ubuntu:~$ set AAA=aaa       ----------------》<span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#cc33cc;">1 设置方式</span></span>tony@ubuntu:~$ set | grep AAA<span style="color:#cc0000;">_=AAA=aaa</span>tony@ubuntu:~$ su tonyPassword: tony@ubuntu:~$ set | grep AAAtony@ubuntu:~$ exit               <span style="font-family: Arial, Helvetica, sans-serif;">----------------------》<span style="color:#ff0000;">2.变量不能向子shell传递</span></span>exittony@ubuntu:~$ 
tony@ubuntu:~$ su -m tonyPassword: tony@ubuntu:~$ set | grep AAA     ---------------》<span style="color:#cc0000;">3.使用-m选项也不能传递</span>tony@ubuntu:~$ 
<strong>  例3:</strong>
tony@ubuntu:~$ export AAA=aaa   <span style="font-family: Arial, Helvetica, sans-serif;">------------------------》</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#cc33cc;">1 设置方式</span></span>tony@ubuntu:~$ set | grep AAA<span style="color:#cc0000;">AAA=aaa_=AAA</span>tony@ubuntu:~$ su tonyPassword: tony@ubuntu:~$ set | grep AAAAAA=aaa                          <span style="font-family: Arial, Helvetica, sans-serif;">----------------------》</span><span style="font-family: Arial, Helvetica, sans-serif; color: rgb(255, 0, 0);">2.变量可以向子shell传递</span>tony@ubuntu:~$ exitexittony@ubuntu:~$

1.4环境变量的删除

    unset

2. 关于su及sudo:

1.   当新安装一个ubuntu,会创建一个账户,这个账户不是root帐户。
此时如果想用root 权限 可以使用sudo ,这是临时使用超级用户权限,提示输入的密码也不是超级用户密码,而是当前用户密码。

2.   当新安装一个ubuntu,会有一个root账户,此时root帐户是有密码的,但是是系统生成的密码,用户不可知。
             当想转为root用户时(su),会提示输入密码,但这时当前用户并不知道root帐户的密码是多少。此时需要为root帐户设置一个密码,使用sudo -i, 这是会提示设置密               码,设置完成后,再想转为root帐户时就可使用此密码。


命令:
      su : 用来切换帐户

       通用命令格式: su  [option] [login_usr_name], 当login_usr_name省略,则默认为超级用户。

       1. 可临时使用其它帐户执行shell命令。  su -c common login_usr_name  如:su -c ls tony。
       2. 切换当前帐户。  su -l login_usr_name 如:su -l tony, su -/-l  为切换为超级用户。
       3. 更改shell。 su -s /bin/sh tony,   su -s /bin/sh  默认切换为超级用户。
       4.  切换帐户,shell环境变量不变。 su -m .   具体哪些环境变量不变需要分辨一下。

3. 切换账户与shell的关系:

       1. 在shell下切换帐户会打开一起新子shell。
       2. export 命令用来使用当前shell下的变量对子shell可见,与帐户的切换无关。
           如在当前shell下exort a=b, 在子shell中可以使用变量a,在孙shell中同样可以使用变量a, 而与子shell与孙shell的用户帐户无关。
      3. 在一个shell下执行shell脚本,所执行的shell脚本也是当前shell的子shell.
      4. 帐户切换中,如改变了shell的类型,shell的父子关系不变,export依然有效。


总结:

         export 只与shell的父子关系有关,有用户账户及shell类型无关。export 的另一个效果是将shell中定义的局部变量加入到shell环境变量中。
经试验环境变量的传递是值传递,在子shell中修改变量的值,并不会影响子shell同名的变量。





0 0