shell 和 环境变量

时间:2022-12-12 22:29:18

1、shell的基本概念

       管理整个计算机硬件的其实是操作系统的核心 (kernel),这个核心是需要被保护的! 所以我们一般使用者就只能透过 shell 来跟核心沟通,以让核心达到我们所想要达到的工作。

       shell是使用者来和操作系统沟通的一个工具。

    我们必须要透过Shell将我们输入的命令与 Kernel (操作系统)沟通,好让 Kernel 可以控制硬件来正确无误的工作! 基本上,我们可以透过底下这张图来说明一下:

shell 和 环境变量

操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测,如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃!因为操作系统管理的就是整个硬件功能嘛! 所以当然不能够随便被一些没有管理能力的终端用户随意使用啰!

         但是我们总是需要让用户操作系统的,所以就有了在操作系统上面发展的应用程序啦!用户可以透过应用程序来指挥核心,让核心达成我们所需要的硬件任务!

         其实壳程序(shell)的功能只是提供用户操作系统的一个接口,这个壳程序需要可以呼叫其他软件。我们在第五章到第十章提到过很多命令,包括 man, chmod, chown, vi, fdisk, mkfs 等等命令,这些命令都是独立的应用程序, 但是我们可以透过壳程序 (就是命令列模式)来操作这些应用程序,让这些应用程序呼叫核心来运行所需的工作

         总结:shell就是一个软件,是一个构建在操作系统上面的软件,任何软件都可以看成是用户操作系统的一个工具。用户通过软件向操作系统发送命令。在shell中执行命令,其实是向操作系统发送命令,让操作系统去调用用户想执行的可执行程序。

         举例:

         1、ls -l。

         ls是可执行的程序,在bash中输入ls -l,就是调度可执行程序ls到CPU上运行了。

         2、./p (p是可执行文件)

         外壳(shell)调用操作系统一个叫加载器的函数,它拷贝可执行文件p中的代码和数据到存储器,然后将控制转移到这个程序的开头。

       3、./run.py(bash中调用脚本文件)

       在run.py中,首句是: #!/usr/bin/env python3.意思是,shell 通知操作系统,调用python3解释器来解释脚本run.py,然后执行该脚本。

  4、python3 run.py

       python文件的首句有无#!/usr/bin/env python3都没关系,shell通知操作系统调用python3解释器,解释文件,然后执行。


2、系统上shell的版本

    shell只是一个软件,在一个系统上,可以有很多版本的shell。有多少我们可以使用的 shells 呢? 你可以检查一下 /etc/shells 这个文件,至少就有底下这几个可以用的 shells:

shell 和 环境变量

3、shell的环境变量

影响 bash 环境操作的变量

           某些特定变量会影响到 bash 的环境!举例来说,我们前面已经提到过很多次的那个 PATH 变量!你能不能在任何目录下运行某个命令,与 PATH这个变量有很大的关系。例如你下达 ls 这个命令时,系统就是透过PATH 这个变量里面的内容所记录的路径顺序来搜寻命令的呢!如果在搜寻完 PATH 变量内的路径还找不到 ls 这个命令时, 就会在屏幕上显示command not found的错误信息了。所以,要在bash中执行某个命令,该命令的可执行文件一定要在bash的PATH变量中,不然就找不到该命令。也就是提醒了源码安装软件时,想在bash执行该软件,一定要让bash可以找到该可执行文件。

常见的方法:

例如:系统中预装了python2.7,但我想装python3.

查看目录:/usr/bin绝大部分的用户可使用指令都放在这里

-rwxr-xr-x 1 root   root      30284 Jun 19  2013 dh_python2
lrwxrwxrwx 1 root   root         23 Dec 19  2014 pdb2.7 -> ../lib/python2.7/pdb.py
lrwxrwxrwx 1 root   root          9 Jun 19  2013 python -> python2.7
lrwxrwxrwx 1 root   root          9 Jun 19  2013 python2 -> python2.7
-rwxr-xr-x 1 root   root    2985296 Dec 19  2014 python2.7
lrwxrwxrwx 1 root   root         30 Nov 26 10:08 python3 -> /opt/python3.3.2/bin/python3.3
lrwxrwxrwx 1 root   root         29 Jun 19  2013 pyversions -> ../share/python/pyversions.py

我使用源码安装的python3.3,其可执行文件在/opt/python3.3.2/bin/python3.3,在/usr/bin下新建一个软链接,使得bash可以找到,python3.3的可执行文件。python3 -> /opt/python3.3.2/bin/python3.3