目录
1. 怎么理解 I/O 重定向?
2. /dev/null 是什么?有什么用途?
3. 解释下列命令的结果:&> /dev/null 、2>> file
4. 怎么理解管道?管道和重定向有什么区别?
5. 在什么情况下需要使用 tee 命令?举例说明如何使用。
6. vim 是什么?vim 和 vi 有什么关系?
7. vim 里有几种运行模式,分别说明每种模式下的简单操作。
8. shell 会话是什么?一个用户可以启动多个shell会话吗?
9. 说明 shell 变量(或 bash 变量)和环境变量的区别。
10. PATH 环境变量有什么重要作用?
11. 分别在 /etc/profile、~/.bash_profile 和 ~/.bashrc 设置环境变量时有什么区别?
I/O 重定向是一种操作,用于改变命令的输入源或输出目的地。
在Linux 系统中,有三种标准的I/O 流:
① 标准输入( stdin ,文件描述符0):默认从键盘输入;
② 标准输出(stdout,文件描述符1):默认输出到终端;
③ 标准错误( stderr,文件描述符2):默认输出到终端。
(1)/dev/null 是一个特殊的设备文件,它丢弃一切写入它的数据,并且当从它读取时,会立即返回文件结尾(即空)。
(2)用途:通常用于丢弃不需要的输出或者作为一个空文件,可以用来测试命令是否成功执行,或者阻止输出显示在屏幕上。
(1)&> /dev/null:将命令的标准输出和标准错误都重定向到 /dev/null,即丢弃所有输出。
(2)2>> file:将命令的标准错误追加到文件file 的末尾。
(1)管道的理解:
管道:用| 符号连接两个命令,将一个命令的输出作为另一个命令的输入。
(2)重定向的理解:
重定向:改变命令的输入源或输出目的地,可以重定向到文件或设备。
(3)管道和重定向的区别:
重定向是改变 I/O 流的方向或目的地;而管道是连接两个命令的输出和输入。
(1)使用 tee 命令的情况:
当你需要同时将命令的输出输出到屏幕上和文件中时,可以使用 tee 命令。
(2)举例说明:
将 ls 命令的输出同时显示在屏幕上并保存到文件 list.txt 中:ls | tee list.txt
(1)vim:
vim 是一款功能强大的文本编辑器,常用于 Linux 和 Unix 系统。
(2)vim 与 vi 的关系:
vi:是vim 的前身,是一个基于行编辑的文本编辑器。vim 在 vi 的基础上增加了许多功能和改进,因此可以认为 vim 是 vi 的增强版。
① 普通模式(Normal mode):用于浏览和编辑文件;
② i :进入编辑模式;
③ dd :删除当前行;
④ yy :复制当前行;
⑤ :x :保存文件并退出;
⑥ :q :退出vim。
(1)shell 会话:
shell 会话是用户与操作系统交互的过程,通常通过终端或终端仿真器进行。每个打开的终端窗口或会话都是一个独立的Shell 会话。
(2)多个 shell 会话:
一个用户可以同时启动多个Shell 会话,每个会话都有自己的环境和状态。
(1)shell 变量(或 bash 变量)
shell 变量只在当前 shell 会话中有效,通常用于存储临时数据或设置 shell 的工作环境。
(2)环境变量:
环境变量是一种全局变量,对所有 shell 会话和其衍生的进程都可见,用于定义系统环境和配置。
(3)二者的区别:
① 作用范围:
shell 变量:shell 变量是在当前 shell(命令行界面)中定义的变量,仅在当前 shell 进程及其子进程中有效。
环境变量:环境变量是在操作系统的整个环境中可用的变量,对所有的子进程都可见。它们由操作系统传递给每个新创建的进程;环境变量通常用于设置常用的配置选项和路径信息。
② 设置方式:
shell 变量:shell 变量可以通过直接在 shell 中赋值来设置,也可以通过 shell 脚本或者命令行中的变量赋值语句来设置。
环境变量:环境变量通常在操作系统的配置文件中或者在启动Shell时通过命令行参数 -e 或 -E 来设置。
③ 可见性和继承性:
shell 变量:shell 变量只在当前的 shell 进程及其子进程中可见和继承。如果在子 shell 中重新定义一个与父 shell 同名的变量,则子 shell 中的定义会覆盖父 shell 的定义。
环境变量:环境变量在当前 shell 以及所有由当前 shell 创建的进程中都是可见的和继承的。子进程会继承父进程中已定义的所有环境变量,除非在子进程中显式地重新定义或修改了这些变量。
PATH 环境变量指定了操作系统搜索命令时的路径列表。
当输入一个命令时,操作系统会按照 PATH 中定义的顺序在这些路径中查找可执行文件,找到则执行。
① /etc/profile 作用于系统所有用户,.bash_profile 和 .bashrc 作用于单个用户。
② .bash_profile 在用户登录时执行,设置用户的环境变量和启动命令。
③ .bashrc 在每次新打开的交互式 shell 会话时执行,用于设置用户的 shell 运行时环境。