- QA
Lecture 11 QA
source script.sh 和 ./script.sh 有什么区别?
- 这两种情况
script.sh
都会在 bash 会话中被读取和执行,不同点在于哪个会话执行这个命令。 对于source
命令来说,命令是在当前的 bash 会话中执行的,因此当source
执行完毕,对当前环境的任何更改(例如更改目录或是定义函数)都会留存在当前会话中。 单独运行./script.sh
时,当前的bash会话将启动新的bash会话(实例),并在新实例中运行命令script.sh
。 因此,如果script.sh
更改目录,新的bash会话(实例)会更改目录,但是一旦退出并将控制权返回给父bash会话,父会话仍然留在先前的位置(不会有目录的更改)。 同样,如果script.sh
定义了要在终端中访问的函数,需要用source
命令在当前bash会话中定义这个函数。否则,如果你运行./script.sh
,只有新的bash会话(进程)才能执行定义的函数,而当前的shell不能。
★各种软件包和工具存储在哪里?引用过程是怎样的? /bin 或 /lib 是什么?
/bin
- 基本命令二进制文件/sbin
- 基本的系统二进制文件,通常是 root 运行的/dev
- 设备文件,通常是硬件设备接口文件/etc
- 主机特定的系统配置文件/home
- 系统用户的主目录/lib
- 系统软件通用库/opt
- 可选的应用软件/sys
- 包含系统的信息和配置/tmp
- 临时文件(/var/tmp
) 通常重启时删除/usr/
- 只读的用户数据/usr/bin
- 非必须的命令二进制文件/usr/sbin
- 非必须的系统二进制文件,通常是由 root 运行的/usr/local/bin
- 用户编译程序的二进制文件
/var
-变量文件 像日志或缓存
Docker和虚拟机有什么区别?
Docker 基于容器这个更为概括的概念。关于容器和虚拟机之间最大的不同是,虚拟机会执行整个的 OS 栈,包括内核(即使这个内核和主机内核相同)。与虚拟机不同,容器避免运行其他内核实例,而是与主机分享内核。在Linux环境中,有LXC机制来实现,并且这能使一系列分离的主机像是在使用自己的硬件启动程序,而实际上是共享主机的硬件和内核。因此容器的开销小于完整的虚拟机。
另一方面,容器的隔离性较弱而且只有在主机运行相同的内核时才能正常工作。例如,如果你在macOS 上运行 Docker,Docker 需要启动 Linux虚拟机去获取初始的 Linux内核,这样的开销仍然很大。最后,Docker 是容器的特定实现,它是为软件部署而定制的。基于这些,它有一些奇怪之处:例如,默认情况下,Docker 容器在重启之间不会有以任何形式的存储。