Shell基础
Shell 基础
Shell 与终端
当Shell启动时,操作系统为它提供三个文件来工作:stdin、stdout和stderr。当从终端运行时,stdin连接到键盘输入。你写的内容被传递到终端。这通过一个称为电传打字机或tty的文件发生。stdout和stderr也连接到tty,这就是为什么你运行的任何命令的输出和错误都会显示在终端中。

你打开的每个终端都会通过tty分配一个新文件,这样来自一个终端的命令不会破坏另一个终端的命令。你可以通过tty命令找出你的终端连接的文件:
管道(Pipes)

管道,|,将两个进程连接在一起。它表示对pipe()的系统调用,它所做的只是为进程重定向stdin和stdout。

上图是一个轻微的简化,用于解释管道重定向:
上层的bash分叉另一个连接到
tty的bash,它产生ls的输出由于上层的bash是从下层分叉的,它继承了下层的文件描述符
下层的bash没有分叉新进程,因为
echo是内置命令

注意stderr总是直接路由到tty。你可以在管道之前切换流,并将stderr而不是stdout重定向到管道。
变量
局部变量是你在shell中创建的变量。它们是局部的,因此不会传递给子进程(记住,每个非内置命令都在一个新的shell中,没有这些局部变量)。
环境变量(env vars)类似于全局变量。它们被传递给子进程。但是,子进程中环境变量的更改不能传递给父进程(记住,子进程和父进程之间除了退出码外没有通信)。
Shell 类型
Bash (Bourne Again Shell)
最常用的Linux shell
功能丰富,兼容性好
Zsh (Z Shell)
更现代化的shell
强大的自动补全功能
Fish (Friendly Interactive Shell)
用户友好的shell
智能建议和语法高亮
Sh (Bourne Shell)
最基础的shell
所有shell的兼容基础
Shell 脚本基础
常用Shell命令
Shell 配置文件
~/.bashrc- Bash的配置文件~/.bash_profile- 登录时执行的配置~/.profile- 通用配置文件/etc/bashrc- 系统级配置文件
参考资料
How Unix Works: Become a Better Software Engineer - 深入了解UNIX工作原理
Bash Reference Manual - Bash参考手册
Advanced Bash-Scripting Guide - 高级Bash脚本编写指南
最后更新于