linux日常笔记
BSD & System V 风格
BSD(Berkeley Software Distribution)和 System V 都是 Unix 操作系统的重要分支和变体,它们在 Unix 的发展历程中有着重要地位,在系统架构、功能特性和应用场景等方面存在一定差异,以下是具体介绍:
BSD
- 起源与发展:BSD 起源于 20 世纪 70 年代末的加州大学伯克利分校。它是在 AT&T 的 Unix 基础上进行开发的,添加了许多新的特性和功能。在发展过程中,产生了如 FreeBSD、NetBSD、OpenBSD 等多个衍生版本,这些版本在服务器、嵌入式系统等领域都有广泛应用。
- 特点
- 网络功能强大:BSD 在网络方面的支持非常出色,它率先实现了许多重要的网络协议和功能,如 TCP/IP 协议栈的完善和优化,为现代网络通信奠定了基础。像 FreeBSD 就因其强大的网络性能,常被用于构建网络服务器和防火墙等设备。
- 开源与社区活跃:BSD 及其衍生版本大多采用开源的方式发布,拥有活跃的社区。社区成员积极参与开发和维护,不断为系统添加新功能、修复漏洞,使其技术不断更新和进步。
- 可移植性高:BSD 具有良好的可移植性,能够在多种硬件平台上运行,包括 x86、PowerPC、ARM 等。这使得它可以广泛应用于不同类型的设备和系统中。
- 应用场景:BSD 及其衍生版本在服务器领域应用广泛,如 Web 服务器、邮件服务器等。此外,在嵌入式系统中也有大量应用,如网络设备、智能家居等。
System V
- 起源与发展:System V 是 AT&T 开发的 Unix 版本,它在 Unix 的发展中也占据着重要地位。System V 经历了多个版本的发展,如 System V Release 4 等,对 Unix 的标准化和商业化起到了重要推动作用。
- 特点
- 系统架构稳定:System V 具有一套相对稳定和成熟的系统架构,其进程管理、内存管理等核心功能的设计较为完善,为系统的稳定性和可靠性提供了保障。许多商业 Unix 系统都基于 System V 进行开发。
- 标准化程度高:System V 在 Unix 的标准化方面做出了重要贡献,它定义了一系列的系统接口和规范,如 System V IPC(进程间通信)机制等,这些规范成为了后来许多 Unix 系统和类 Unix 系统遵循的标准。
- 商业应用广泛:由于其稳定性和标准化,System V 在商业领域得到了广泛应用。许多大型企业和机构选择基于 System V 的 Unix 系统来运行关键业务应用,如银行系统、企业资源规划(ERP)系统等。
- 应用场景:主要应用于商业环境中的关键任务系统,如大型企业的核心业务系统、金融交易系统等。同时,在一些对系统稳定性和兼容性要求较高的科研、政府等领域也有应用。
certificate 证书
- Linux 系统中的证书位置
在 Linux 系统中,根证书和信任的证书通常存储在以下目录中:
-
根证书存储路径:
/etc/ssl/certs/
/usr/share/ca-certificates/
(某些发行版)/etc/pki/tls/certs/
(某些发行版,如 RedHat/CentOS)
-
管理证书:
ca-certificates
软件包通常用于管理信任的根证书。- 使用
update-ca-certificates
命令来更新系统证书库。
-
验证证书内容:
您可以通过
openssl
命令查看该证书的详细信息,确认它是否是 USERTrust RSA Certification Authority 根证书。运行以下命令:1
openssl x509 -in USERTrust_RSA_Certification_Authority.pem -text -noout
这将显示证书的详细信息,其中包括:
- Issuer:应为
USERTrust RSA Certification Authority
。 - Subject:通常会显示证书本身的标识信息。
- Issuer:应为
-
安装证书:
-
将
.pem
格式的证书文件拷贝到/usr/local/share/ca-certificates/
目录,然后运行以下命令:1
sudo update-ca-certificates
-
- macOS 系统中的证书位置
在 macOS 中,根证书存储在 钥匙串访问(Keychain Access)中。您可以通过 钥匙串访问 查看和管理根证书。
-
证书存储位置:
- 系统钥匙串(System Keychain):存储系统信任的根证书。
- 用户钥匙串(Login Keychain):存储用户自己添加或信任的证书。
-
查看证书:
- 打开 钥匙串访问(Keychain Access),选择 系统根证书(System Roots),查看所有受信任的证书。
-
安装证书:
- 将证书拖动到 钥匙串访问 中,或双击证书文件,系统会提示是否安装该证书。
dig
dig
命令是一个用于查询 DNS(域名系统)信息的工具,主要用于测试和诊断域名解析问题。它可以获取域名的 IP 地址、MX 记录、NS 记录、TTL 值等详细信息。以下是关于 dig
命令的详细介绍:
基本用途
- 查询域名对应的 IP 地址(A 记录)。
- 反向查询 IP 对应的域名(PTR 记录)。
- 获取 DNS 服务器返回的权威信息(如 NS 记录、SOA 记录)。
- 诊断 DNS 解析过程中的错误或异常。
基本语法
1 |
|
- 选项:控制查询行为(如指定 DNS 服务器、显示详细信息等)。
- 域名:需要查询的目标域名(如
example.com
)。 - 查询类型:可选值包括
A
(IP 地址)、MX
(邮件交换记录)、NS
(名称服务器)、TXT
(文本记录)等。
常用选项及示例
-
查询默认记录(A 记录)
1
dig example.com
输出结果中包含
ANSWER SECTION
,显示域名对应的 IP 地址。 -
指定查询类型
-
查询 MX 记录
1
dig mx example.com
-
查询 NS 记录
1
dig ns example.com
-
-
反向查询(IP 转域名)
1
dig -x 192.168.1.1
输出结果显示该 IP 对应的 PTR 记录(如果存在)。
-
指定 DNS 服务器
1
dig @8.8.8.8 example.com
使用 Google DNS(8.8.8.8)查询
example.com
的信息。 -
显示所有记录
1
dig any example.com
获取域名的所有 DNS 记录(A、MX、NS、TXT 等)。
-
简化输出
1
dig +short example.com
仅显示查询结果的关键信息(如 IP 地址)。
输出结果说明
dig
的输出通常包含以下部分:
- HEADER:查询的基本信息(如查询状态、查询时间)。
- QUESTION SECTION:查询的域名和类型。
- ANSWER SECTION:查询结果(如 IP 地址、MX 优先级)。
- AUTHORITY SECTION:提供权威解析的 DNS 服务器。
- ADDITIONAL SECTION:附加信息(如 DNS 服务器的 IP 地址)。
注意事项
- 权限问题:某些查询可能需要管理员权限(使用
sudo
)。 - 参数中的特殊字符:如果域名包含特殊字符(如
_
),需用引号包裹。 - 与
nslookup
的区别:dig
是更强大的 DNS 诊断工具,而nslookup
功能相对简单。
示例
-
查询
baidu.com
的 IP 地址:1
dig baidu.com
-
查询
qq.com
的 MX 记录:1
dig mx qq.com
-
反向查询 IP
202.108.22.5
的域名:1
dig -x 202.108.22.5
通过 dig
命令,用户可以深入分析 DNS 解析过程,解决域名解析失败、记录配置错误等问题。
file
查看文件类型(文本、二进制、符号链接等)
1 |
|
输出示例:
1 |
|
lsof
lsof
即 “list open files”,用于查看系统中被打开的文件,由于在 Unix 中一切皆文件,所以它也能查看网络连接、进程打开的文件等多种信息。
命令语法
1 |
|
常用选项及示例
选项 | 含义 | 示例 |
---|---|---|
-i |
显示所有网络连接相关的文件,可搭配端口号、协议等使用 | lsof -i :显示所有网络连接信息 lsof -i :8080 :显示占用 8080 端口的网络连接信息 lsof -i TCP:80 :显示占用 TCP 80 端口的网络连接信息 |
-p |
根据进程 ID(PID)查看该进程打开的文件 | lsof -p 1234 :查看 PID 为 1234 的进程打开的所有文件 |
-u |
根据用户查看该用户打开的文件 | lsof -u root :查看 root 用户打开的所有文件 |
-c |
根据命令名查看该命令对应的进程打开的文件 | lsof -c nginx :查看 nginx 进程打开的所有文件 |
-d |
指定要查看的文件描述符 | lsof -d 0,1,2 :查看文件描述符为 0(标准输入)、1(标准输出)、2(标准错误输出)的文件信息 |
输出字段解释
字段 | 含义 |
---|---|
COMMAND |
进程对应的命令名称 |
PID |
进程的 ID |
USER |
进程的所有者 |
FD |
文件描述符,用于标识文件或网络连接,如 cwd(当前工作目录)、txt(程序代码)、mem(内存映射文件)、IPv4/IPv6(网络连接)等 |
TYPE |
文件类型,如 DIR(目录)、REG(普通文件)、CHR(字符设备)、BLK(块设备)、FIFO(命名管道)、SOCK(套接字)等 |
DEVICE |
设备号 |
SIZE/OFF |
文件大小或偏移量 |
NODE |
文件的索引节点号 |
NAME |
文件或网络连接的名称 |
常见应用场景
- 查找占用端口的进程:当启动服务时提示端口被占用,使用
lsof -i :端口号
可快速找到占用该端口的进程及对应的 PID,然后可使用kill -9 PID
终止该进程。 - 排查文件被哪些进程占用:如要删除某个文件但提示被占用,使用
lsof 文件名
能找出占用该文件的进程。 - 监控特定用户或进程的文件操作:通过
-u
和-p
选项可监控指定用户或进程打开的文件,了解其操作行为。
注意事项
lsof
命令需要较高的权限来查看系统中所有进程的信息,通常需要使用sudo
来执行。- 输出信息较多时,可结合
grep
命令进行过滤,如lsof -i | grep 8080
只显示包含 8080 端口的信息。
openssl s_client
openssl s_client
命令的作用
openssl s_client
是一个用于测试和调试 SSL/TLS 连接的工具,它允许您与远程服务器建立 SSL/TLS 连接,并查看服务器返回的证书链、加密算法以及其他 SSL/TLS 协议信息。
命令的常用语法:
1 |
|
-connect <host>:<port>
:指定要连接的远程服务器和端口(例如api.push.apple.com:443
)。-showcerts
:显示服务器返回的完整证书链。
openssl s_client
输出解读:
- Certificate chain:显示服务器返回的证书链,包含服务器证书、中间证书和根证书。
- SSL handshake:显示 SSL/TLS 握手过程中的详细信息。
- Verification:显示证书验证结果,通常为
Verification: OK
,表示证书验证成功。 - Server certificate:显示服务器证书的详细信息,包括证书颁发者、有效期、主题等。
- Cipher:显示所使用的加密算法。
示例:
1 |
|
此命令将连接到 api.push.apple.com
服务器的 443 端口(HTTPS),并显示其证书链。
1 |
|
命令结果分析方法
执行 openssl s_client -connect api.push.apple.com:443 -showcerts
命令后,你会得到服务器的 SSL/TLS 连接详细信息以及证书链的输出。以下是如何解读该命令的结果:
- 连接信息
输出的开头部分会显示与服务器建立连接的情况,类似于:
1 |
|
这表示成功连接到目标主机的 443 端口(HTTPS 默认端口)。
- 证书链
接下来,命令会显示服务器证书以及中间证书的详细信息(如果有)。-showcerts
选项会打印出所有证书,包括服务器证书和任何中间证书。例如:
1 |
|
每个证书段之间是 -----BEGIN CERTIFICATE-----
和 -----END CERTIFICATE-----
,它们表示证书的开始和结束。
- 证书的验证信息
每个证书都包含验证的层级。例如:
1 |
|
这里的 depth
是证书链的层级(depth=0
是服务器证书,depth=1
是中间证书,depth=2
是根证书)。verify return:1
表示验证成功。
- SSL/TLS 握手
在连接建立之后,接下来会显示关于 SSL/TLS 握手的详细信息,类似于:
1 |
|
这部分显示了 SSL/TLS 握手中读写的字节数。
- 证书有效性验证
如果服务器的证书经过了正确的验证并且是可信的,输出会显示:
1 |
|
这意味着证书被成功验证,没有问题。如果验证失败,返回的错误码会更高,例如:
1 |
|
Verify return code: 18
表示证书是自签名证书,因此无法通过公共证书颁发机构的验证。
- 加密算法和密钥交换信息
输出中还会包含与加密算法、密钥交换算法相关的信息。例如:
1 |
|
这里的 Cipher
是当前会话使用的加密套件,表示加密通信的具体算法。
- 握手和证书验证通过
1 |
|
- SSL handshake has read 4564 bytes and written 439 bytes: 这表示在 SSL/TLS 握手过程中,客户端与服务器之间交换了数据。
read 4564 bytes
表示客户端从服务器读取了 4564 字节的数据(包括证书和其他握手消息),written 439 bytes
表示客户端发送了 439 字节的数据(包括客户端的证书请求、加密参数等)。 - Verification: OK: 这一行表示证书验证通过,即客户端成功验证了服务器的证书,包括验证证书的签名、有效期、颁发机构(CA)等信息。如果验证失败,这里会显示相关的错误信息或警告。
总结
- CONNECTED:显示连接状态。
- 证书链:显示服务器证书和中间证书。
- 验证信息:证书的验证过程,查看是否通过验证。
- SSL/TLS 握手:有关握手过程的字节数。
- 证书验证代码:显示证书的验证结果。
- 加密套件:显示当前使用的加密套件。
你可以通过这些信息来检查与服务器的 SSL/TLS 连接是否成功,以及证书的有效性。
port
端口号是传输层(TCP/IP 模型)的核心概念。以下是详细解释:
一、端口号的本质
- 传输层标识:
端口号是传输层协议(如 TCP 或 UDP)的 “地址标签”,用于区分同一台主机上的不同应用进程。- 例如:
- 浏览器通过
TCP 80
与 Web 服务器通信(HTTP 协议)。 - 邮件客户端通过
TCP 25
发送邮件(SMTP 协议)。
- 浏览器通过
- 例如:
- 协议独立性:
TCP 和 UDP 的端口号是独立分配的。例如:TCP 80
和UDP 80
是两个完全独立的端口。- Consul 的
TCP 8301
(服务器通信)和UDP 8301
(Gossip 广播)就是典型例子。
二、端口号的作用范围
- 仅在传输层有效:
端口号的作用仅限于传输层,与应用层协议无关。例如:- HTTP 协议默认使用
TCP 80
,但也可以配置为其他端口(如TCP 8080
)。 - 即使 HTTP 使用
TCP 8080
,它仍然是应用层协议,端口号仅用于传输层寻址。
- HTTP 协议默认使用
- OSI 模型对比:
在 OSI 七层模型中,端口号属于传输层(第 4 层),而 IP 地址属于网络层(第 3 层)。两者结合形成完整的网络地址(如IP:Port
)。
三、常见误解澄清
-
“端口属于应用层”
- 错误:应用层协议(如 HTTP、DNS)通常默认使用特定端口,但端口号本身由传输层管理。
- 示例:DNS 协议既可以通过
UDP 53
(查询)也可以通过TCP 53
(区域传输),这说明端口号与协议的绑定是灵活的。
-
“同一端口不能被不同协议使用”
-
错误:同一端口号可以被不同协议的服务使用,只要它们属于不同的传输层协议(如 TCP 和 UDP)。
-
示例:
1
2# 同时存在TCP和UDP的8301端口
lsof -i :8301
-
四、总结:端口号的关键属性
特性 | 说明 |
---|---|
协议绑定 | 每个端口号属于一个传输层协议(TCP 或 UDP),不同协议可复用同一端口号。 |
作用范围 | 仅在传输层有效,用于区分同一主机上的不同进程。 |
动态分配 | 1024-65535 为动态端口,可由应用程序随机选择。 |
知名端口 | 0-1023 为系统保留端口,用于 HTTP(80)、SSH(22)等标准服务。 |
五、实践意义
- 避免端口冲突:部署服务时,需确保同一协议下的端口未被占用(如
TCP 80
已被 Web 服务器使用时,其他服务无法再绑定TCP 80
)。 - 协议兼容性:若需复用端口号,可通过不同协议实现(如自定义服务使用
UDP 8301
,与 Consul 的TCP 8301
共存)。
理解端口号的传输层本质,有助于正确配置网络服务、排查端口冲突,并设计高可用性的分布式系统(如 Consul 集群)。
ps
1. 命令概述
ps
(Process Status)用于查看当前系统中的进程状态。
常用场景:监控进程资源占用、排查异常进程、终止进程等。
2. 基本语法
1 |
|
3. 常用选项
BSD 风格选项
选项 | 含义 |
---|---|
-a |
显示所有用户的进程(包括其他用户)。 |
-u |
显示进程的详细信息(如用户、CPU 使用率、内存占用等)。 |
-x |
显示没有控制终端的进程(如守护进程)。 |
-e |
显示所有进程(等价于 -A )。 |
-f |
显示完整格式的进程信息(包括父进程 ID、启动时间等)。 |
1 |
|
System V 风格选项
选项 | 含义 |
---|---|
-C |
按命令名称过滤进程(如 ps -C firefox )。 |
-p |
按 PID 过滤进程(如 ps -p 1234 )。 |
1 |
|
4. 输出字段说明
常用字段解释:
- PID:进程 ID(唯一标识符)。
- USER:进程所有者。
- %CPU:CPU 使用率(百分比)。
- %MEM:内存使用率(百分比)。
- VSZ:虚拟内存大小(KB)。
- RSS:常驻内存大小(KB)。
- TTY:控制终端(
?
表示无终端)。 - STAT:进程状态(如
R
运行中,S
睡眠中,Z
僵尸进程)。 - START:进程启动时间。
- TIME:累计 CPU 时间。
- COMMAND:启动进程的命令。
5. 高级用法
过滤与排序
-
过滤特定进程:
1
2ps aux | grep firefox # 查找 Firefox 相关进程
ps -ef | grep python # 查找 Python 进程 -
按 CPU 使用率排序
1
ps -eo pid,user,%cpu,%mem,command --sort=-%cpu # 降序排列
显示进程树
1 |
|
6. 常见问题
-
如何终止进程?
结合kill
命令:1
2kill <PID> # 正常终止进程
kill -9 <PID> # 强制终止进程 -
实时监控进程?
使用top
或htop
命令。
7. 参考文档
1 |
|
SS
sudo & su
一、核心区别总结
功能 | sudo | su |
---|---|---|
切换方式 | 临时以目标用户权限执行命令 | 完全切换到目标用户的 shell 会话 |
生效范围 | 仅当前终端的单次命令有效 | 所有后续操作均以目标用户身份执行 |
环境变量 | 默认继承当前用户的环境(可通过 -i 加载目标用户环境) |
完全加载目标用户的环境(使用 su - ) |
密码要求 | 需要当前用户的密码(需 sudo 权限) | 需要目标用户的密码(root 或普通用户) |
安全性 | 更安全,仅允许执行特定命令 | 风险较高,直接获得目标用户的完全控制权 |
二、详细对比
1. 临时执行 vs 完全切换
-
sudo
-
仅执行 单个命令,执行完毕后恢复原用户身份。
-
示例:
1
sudo -u user1 ls /home/user1 # 以 user1 身份执行 ls 命令,执行后仍为原用户
-
-
su
-
切换到目标用户的 完整 shell 会话,所有后续操作均以目标用户身份进行。
-
示例:
1
su - user1 # 切换到 user1 用户,需输入 user1 的密码,环境完全变更
-
2. 环境变量继承
-
sudo
-
默认继承当前用户的环境变量(如
PATH
、HOME
)。 -
若需加载目标用户的环境,需使用
-i
选项:1
sudo -u root -i # 等价于 sudo -i,加载 root 的环境
-
-
su
-
使用
su
切换用户时,不加载目标用户的配置文件(如.bashrc
)。 -
使用
su -
可完全加载目标用户的环境:
1
su - user1 # 加载 user1 的 ~/.bashrc、~/.profile 等
-
3. 权限与安全
- sudo
- 受
/etc/sudoers
文件控制,可精细配置允许执行的命令。 - 无需知道目标用户密码,依赖当前用户的 sudo 权限。
- 受
- su
- 直接使用目标用户的密码验证,若切换到 root,需知道 root 密码。
- 若配置不当,可能导致权限滥用风险。
三、典型使用场景
场景 1:临时执行特权操作
-
推荐:
1
sudo <命令>
1
sudo apt update # 以 root 身份更新软件包列表
场景 2:完全切换用户环境
-
推荐:
1
su - <用户名>
1
su - devuser # 切换到 devuser 并加载其环境,适合长期操作
场景 3:快速获取 root 权限
-
推荐:
1
sudo su
1
sudo su # 切换到 root,需当前用户有 sudo 权限,退出用 exit
四、注意事项
- 避免混淆
sudo su
和sudo -i
sudo su
:切换到 root,但环境变量继承自当前用户。sudo -i
:切换到 root 并加载其完整环境(等价于su - root
)。
- 安全建议
- 避免长期使用
su
切换到 root,推荐用sudo
执行具体命令。 - 定期检查
/etc/sudoers
文件,确保权限配置最小化。
- 避免长期使用
- 环境变量问题
- 若需保留当前用户环境,使用
sudo -E
(例如:sudo -E echo $PATH
)。
- 若需保留当前用户环境,使用
五、对比表格
需求 | sudo 命令示例 | su 命令示例 |
---|---|---|
临时执行 root 命令 | sudo apt install nginx |
su -c "apt install nginx" |
完全切换到 root 环境 | sudo -i |
su - root |
切换到普通用户并加载其环境 | sudo -u user1 -i |
su - user1 |
执行单个非特权用户命令 | sudo -u user1 ls /home/user1 |
su - user1 -c "ls /home/user1" |
通过合理选择 sudo
或 su
,可平衡操作灵活性与系统安全性。
tee
一、命令用途
将输入的数据同时输出到 标准输出(终端) 和 指定文件,常用于保存命令执行结果或实时监控数据流。
二、基本语法
1 |
|
三、常用选项
选项 | 说明 |
---|---|
-a |
追加内容到文件(不覆盖原内容) |
-i |
忽略中断信号(如 Ctrl+C ) |
-p |
显示文件创建或覆盖的提示 |
--help |
查看帮助信息 |
四、示例
-
覆盖写入文件
1
echo "Hello World" | tee output.txt
输出内容会显示在终端,并写入
output.txt
(若文件存在则覆盖)。 -
追加内容到文件
1
echo "Appended line" | tee -a output.txt
内容追加到
output.txt
末尾。 -
处理命令输出
1
ls -l | tee file_list.txt
列出目录内容,同时保存到
file_list.txt
。 -
写入多个文件
1
echo "Data" | tee file1.txt file2.txt
数据同时写入
file1.txt
和file2.txt
,并显示在终端。
五、注意事项
-
权限问题
-
若目标文件需管理员权限,需使用
sudo
1
echo "Config" | sudo tee /etc/config.conf
-
-
与重定向的区别
>
仅写入文件,不显示终端;tee
同时显示终端和写入文件。
-
实时监控数据流
-
可用于日志实时查看:
1
tail -f /var/log/app.log | tee log_backup.txt
-
六、总结
- 核心功能:分流数据到终端和文件。
- 常用场景:保存命令输出、实时日志记录、多文件备份。
- 关键选项:
-a
(追加)、-i
(忽略中断)、配合sudo
处理系统文件。
Terminal and Shell
终端(Terminal)和 Shell 是用户与操作系统交互的核心工具,它们的关系如下:
一、定义
- 终端(Terminal)
- 是什么:用户与操作系统交互的图形界面(如 macOS 的「终端」、iTerm2)。
- 作用:显示文本输出,并允许用户输入命令。
- 本质:是一个「终端仿真器」,模拟传统电传打字机的功能。
- Shell
- 是什么:运行在终端中的命令解释器程序(如 Bash、Zsh)。
- 作用:接收用户输入的命令,解析并执行,将结果返回给终端。
- 本质:是用户与操作系统内核之间的桥梁。
二、核心关系
- 终端调用 Shell
- 当你打开终端时,它会自动启动一个默认的 Shell(如 macOS 默认使用
zsh
)。 - 用户在终端输入的命令(如
ls
)由 Shell 解析并执行。
- 当你打开终端时,它会自动启动一个默认的 Shell(如 macOS 默认使用
- Shell 依赖终端
- Shell 本身不提供界面,需要通过终端(或 SSH 等远程连接工具)与用户交互。
- Shell 的输出(如文件列表)会通过终端显示。
三、常见终端与 Shell 组合
终端 | 常见 Shell | 特点 |
---|---|---|
macOS 终端 | zsh (默认) |
预装,适合日常使用。 |
iTerm2 | zsh /bash |
功能强大,支持分屏、主题等。 |
Windows 终端 | PowerShell /cmd |
微软官方工具,兼容旧版命令。 |
Git Bash | bash |
专为 Git 设计,模拟 Linux 环境。 |
四、如何查看 / 切换 Shell
-
查看当前 Shell
1
echo $SHELL # 输出如 /bin/zsh 或 /bin/bash
-
切换 Shell
-
临时切换
(当前终端有效):
1
2bash # 切换到 Bash
zsh # 切换到 Zsh -
永久切换
(修改默认 Shell):
1
2chsh -s /bin/zsh # macOS 推荐 Zsh
chsh -s /bin/bash # 切换回 Bash
-
五、为什么需要区分?
- 个性化配置
- Shell 支持自定义配置文件(如
.bashrc
、.zshrc
),可以添加别名、主题、插件等(如 Oh My Zsh)。 - 终端本身的配置(如配色、快捷键)与 Shell 无关。
- Shell 支持自定义配置文件(如
- 跨平台兼容性
- 同一 Shell(如 Bash)可以在不同终端(如 iTerm2、Git Bash)中运行。
- 不同 Shell 的语法和功能可能不同(如 Zsh 支持更复杂的自动补全)。
六、总结
- 终端:是你看到的界面,负责显示和输入。
- Shell:是背后的引擎,负责处理命令。
- 类比:终端像浏览器窗口,Shell 像浏览器内核(如 Chrome 的 V8 引擎)。
通过理解两者的关系,可以更高效地配置开发环境(如通过 Oh My Zsh 增强 Zsh 功能,或使用 iTerm2 的分屏功能提升效率)。
1 |
|
ps:
终端经常进入预览状态(按Q取消)
查看详情
Terminal 改造
终端工具iTerm2
oh my zsh + 主题powerlevel10k + 命令高亮(zsh-syntax-highlighting)
zsh-syntax-highlighting安装
step1:
1 |
|
下载后在上面可以看到安装的地址为/opt/homebrew/Cellar/zsh-syntax-highlighting/0.8.0
step2:
安装地址 + /share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
1 |
|
Terminal 快捷键
Ctrl+U
:删除光标前的所有内容(清空当前命令行)。Ctrl+K
:删除光标后的所有内容。
脚本
> 查找可用端口区间
1 |
|