本文介绍了Linux Shell环境,包括zsh的优点、配置信息、环境变量和持久化,以及使用SSH连接云主机的过程和终端的作用。zsh相比bash有更好的用户交互体验和更强的可定制性,支持更多的命令自动补全和更丰富的命令提示,支持更多的插件和主题,执行速度更快。在使用SSH连接云主机时,远程服务器为用户创建一个新的shell会话,作为用户的工作环境,并在新的shell会话中启动zsh shell进程。终端提供一个命令的输入输出环境,在Linux操作系统下使用组合键ctrl + alt + T打开的就是终端。
目录
Linux Shell环境介绍
认识Shell环境
Linux下的接口
zsh相关信息与配置
zsh的配置信息
zsh的环境变量
持久化
结合实例进行理解系统配置文件和个人用户配置文件的区别:
zsh相关文件的调用顺序
什么是终端?
Shell(壳,Linux内核的一个壳)是一种在Linux操作系统中使用的命令行解释器,是指“提供使用者使用界面” 的软,它允许用户与操作系统进行交互,执行各种任务,如运行程序、管理文件和目录等。Shell是一个很重要的工具,它可以通过命令行或脚本的方式来批量处理文件和数据,帮助用户提高工作效率。
操作系统的层级结构是为了使操作系统更加可靠、可维护和可扩展。将操作系统分层可以使操作系统的不同部分之间相互独立,从而降低了系统的复杂性和耦合性。
此外,层级结构还使得操作系统更加容易扩展和维护,因为每个层次只需要关注自己的职责和接口,而不需要考虑整个系统的实现细节。
硬件层:包含所有物理设备,CPU,RAM,HDD等。
内核层:系统核心功能,对软硬件资源进行管理
shell层:提供给用户和应用程序的结构,通过该层,可以使用操作系统提供的各种功能,并对操作系统进行维护。
应用层:用用户提供了一套工具集,用于支持用户的各种需求,同时,用户也可根据自己的需求安装不Linu同的应用软件。
shell环境:
a. Linux中,常见的Shell环境有sh、bash、zsh,当然还有更多其他的shell,每一个shell环境都有各自的优缺点,但本质都是为了给用户提供一个使用操作系统的接口。
GUI环境:
a. 常见的GUI环境,有Windows,Mac OS.
b. Linux下的GUI
~GNOME:默认的界面是GNOME 3,由Red Hat公司开发,是一款简洁、易于使用的桌面环境。
~KDE:KDE(K Desktop Environment)是一款非常灵活、高度可配置的桌面环境,拥有许多功能和插件。
~Xfce:Xfce 是一款轻量级桌面环境,注重性能和易用性。
~LXDE:LXDE 是轻量级桌面环境,使用较少的系统资源,适合老旧计算机。
在使用Linux操作系统时,每个分支的Linux系统都可定制化的安装,也就是说,GUI环境并不是系统的标配,我们所使用的云主机,就是没有安装桌面环境的Linux系统。
本质上,GUI图形化界面,是一种特殊的Shell,GUI图形化界面,是将原先只能使用文本进行交互的模式,扩展为图形化的,可使用鼠标进行交互的方式,降低了用户使用计算机的门槛。
根据Linux中man zsh的输出,以下是zsh相关的文件及其用途:
注意,根据安装方式或系统的不同有些zsh的配置文件在 /etc/zsh/ 中。
全局配置文件:
/etc/zshenv:系统级别的zsh配置文件,用于设置全局的环境变量和路径。
/etc/zprofile:zsh登录时读取的系统级别的配置文件,用于设置全局的环境变量和路径。
/etc/zshrc:zsh启动时读取的系统级别的配置文件,用于设置全局的别名和函数。
/etc/zlogin:zsh登录时读取的系统级别的配置文件,用于在登录时运行特定的命令。
/etc/zlogout:zsh退出时读取的系统级别的配置文件,用于在退出时运行特定的命令。
/usr/share/zsh//:系统级别的zsh配置文件目录,存储了zsh的全局配置文件和函数库。
/usr/share/zsh/*/functions:存储了系统级别的函数库。
/usr/share/zsh/*/site-functions:存储了系统级别的站点函数库,用于存放第三方软件包的函数库。
/usr/share/zsh/*/scripts:存储了系统级别的脚本文件,用于存放系统级别的脚本文件。
个人配置文件:
~/.zshenv:用户级别的zsh配置文件,用于设置个人的环境变量和路径。
~/.zprofile:zsh登录时读取的用户级别的配置文件,用于设置个人的环境变量和路径。
~/.zshrc:zsh启动时读取的用户级别的配置文件,用于设置个人的别名和函数。
~/.zlogin:zsh登录时读取的用户级别的配置文件,用于在登录时运行特定的命令。
~/.zlogout:zsh退出时读取的用户级别的配置文件,用于在退出时运行特定的命令。
ZDOTDIR:用于指定zsh的配置文件目录,可以将其设置为其他位置,例如/etc/zsh或~/.config/zsh/等。
PATH:用于设置可执行文件的搜索路径,当用户输入一个命令时,zsh会按照PATH环境变量所指定的路径顺序来查找可执行文件。
HISTFILE:用于指定历史记录文件的路径,默认为~/.zsh_history。
HISTSIZE:用于设置历史记录条目的数量,默认为1000。
SAVEHIST:用于设置保存历史记录的条目数量,默认为1000。
PROMPT:用于设置命令提示符的格式,例如%n@%m:%~%#表示用户名@主机名:当前目录#。
PS1:用于设置主命令提示符的格式。
PS2:用于设置次级命令提示符的格式。
PS3:用于设置select命令的提示符格式。
PS4:用于设置调试输出的格式。
LANG:用于设置当前系统的语言环境。
LC_ALL:用于设置所有区域设置的默认值。
LC_CTYPE:用于设置字符集编码方式,例如UTF-8。
LC_MESSAGES:用于设置系统消息的语言环境。
LC_COLLATE:用于设置排序规则。
LC_NUMERIC:用于设置数字格式。
LC_TIME:用于设置时间格式。
LSCOLORS:用于设置ls命令输出的颜色。
LS_COLORS:用于设置ls命令输出的颜色。
MAIL:用于指定邮件文件的路径。
MAILCHECK:用于设置检查新邮件的时间间隔。
TMOUT:用于设置自动注销的时间。
VISUAL:用于设置文本编辑器的默认值。
EDITOR:用于设置文本编辑器的默认值。
CDPATH:用于设置cd命令搜索目录的路径。
在zsh中,可以通过将环境变量写入~/.zshrc或~/.zshenv文件中来实现环境变量的持久化。这两个文件是zsh启动时会自动读取的配置文件,可以在其中设置需要的环境变量。其中,~/.zshrc文件会在每次新开一个终端窗口时被读取,而~/.zshenv文件则会在每次启动zsh时被读取。需要注意的是,如果同时设置了同一个环境变量,~/.zshrc文件中的设置会覆盖~/.zshenv文件中的设置。
1. 当我们打开/etc/zprofile,在其中输入echo "I'm in /etc/zsh/zprofile.",无论我们使用什么用户再次登录,这时终端都会自动输出:I'm in /etc/zsh/zprofile.
2.当我们打开/etc/zlogin,在其中输入echo "I'm in /etc/zsh/zprofile.",无论我们使用什么用户再次登录,这时终端都会自动输出:I'm in /etc/zsh/zlogin.
3.当我们打开.zshrc,在其中输入echo "I'm in .zshrc",当我们使用当前用户创建一个新的zsh的终端的时候,这时终端都会自动输出:I'm in .zshrc
4.当我们打开.zlogin,在其中输入echo "I'm in .zlogin.",当我们使用当前用户重新登录系统的时候,这时终端都会自动输出:I'm in .zlogin.
假设已经配置好了上面的四条,当我使用Royi登录用户的时候:
当我使用其他用户登录的时候:
对于.zprofile和.zlogin的解释:.zprofile和.zlogin实际上是完全相同的,为login shell配置环境,只是读取时间不同。
.zprofile由Bash里的.bash_profile衍化而来,.zlogin则是从CSH的.login变化来的。因为mac Mojave版本系统及之前都是以Bash为默认的shell,所以建议用.zprofile。
当我使用zsh命令打开一个新的终端时:
注意,我在.zshrc文件中的配置是:
echo ”You had opened a new terminal.“
调用顺序(自上向下):
/etc/zshenv ~/.zshenv /etc/zprofile ~/.zprofile /etc/zshrc ~/.zshrc /etc/zlogin ~/.zlogin ~/.zlogout /etc/zlogout
也就是说,系统配置文件可以看作是默认的配置,当你设置了个人文件的配置之后,系统文件的配置就失效了。
终端(termimal)= tty(Teletypewriter, 电传打印机),作用是提供一个命令的输入输出环境,在linux操作系统下使用组合键ctrl + alt + T打开的就是终端,可以认为terminal和tty是同义词。
用户在shell中提交命令,shell负责接收用户的命令,并扮演命令解析器的角色。
当你打开一个Terminal时,操作系统会将Terminal和Shell关联起来,当我们在Terminal中输入命令的时候,Shell就负责解释命令。