Skip to content

终端基础

本章将介绍 macOS 终端的使用方法,包括基本命令、Shell 脚本编程等内容。

终端简介

什么是终端

终端(Terminal)是 macOS 的命令行界面工具,它允许用户通过文本命令与系统交互:

bash
# 打开终端
# 方法一:Spotlight 搜索 "终端"
# 方法二:应用程序 → 实用工具 → 终端

# 使用命令行打开终端
open -a Terminal

# 终端快捷键
Command + N    # 新建窗口
Command + T    # 新建标签页
Command + W    # 关闭当前标签页/窗口
Command + Q    # 退出终端

Shell 简介

macOS 默认使用 zsh(Z Shell)作为默认 Shell:

bash
# 查看当前 Shell
echo $SHELL

# 查看所有可用的 Shell
cat /etc/shells

# 切换 Shell
chsh -s /bin/zsh    # 切换到 zsh
chsh -s /bin/bash   # 切换到 bash

# 查看 Shell 版本
zsh --version
bash --version

终端配置

bash
# zsh 配置文件
# ~/.zshrc - 用户配置文件
# ~/.zprofile - 登录时执行的配置

# 查看当前配置
cat ~/.zshrc

# 编辑配置文件
nano ~/.zshrc
# 或
open -e ~/.zshrc

# 使配置生效
source ~/.zshrc

基本命令

目录操作

bash
# 显示当前目录
pwd
# /Users/用户名

# 列出目录内容
ls              # 基本列表
ls -l           # 详细信息
ls -la          # 包含隐藏文件
ls -lh          # 人类可读的文件大小
ls -R           # 递归列出子目录

# 切换目录
cd /Users       # 切换到指定目录
cd ~            # 切换到用户主目录
cd -            # 切换到上一个目录
cd ..           # 切换到上级目录
cd ../..        # 切换到上两级目录

# 创建目录
mkdir folder              # 创建单个目录
mkdir -p a/b/c            # 创建多级目录
mkdir folder1 folder2     # 创建多个目录

# 删除目录
rmdir folder              # 删除空目录
rm -rf folder             # 删除非空目录(谨慎使用)

文件操作

bash
# 创建文件
touch file.txt            # 创建空文件
touch file1 file2         # 创建多个文件

# 复制文件
cp file.txt copy.txt      # 复制文件
cp -r folder/ copy_folder/# 复制目录

# 移动/重命名文件
mv file.txt new.txt       # 重命名
mv file.txt ~/Desktop/    # 移动文件

# 删除文件
rm file.txt               # 删除文件
rm -i file.txt            # 交互式删除(确认)
rm -f file.txt            # 强制删除

# 查看文件内容
cat file.txt              # 显示全部内容
less file.txt             # 分页查看
head file.txt             # 显示前 10 行
head -n 20 file.txt       # 显示前 20 行
tail file.txt             # 显示后 10 行
tail -f file.txt          # 实时查看文件更新

# 查找文件
find ~ -name "*.txt"      # 按名称查找
find ~ -type f -size +100M  # 查找大于 100MB 的文件

文本处理

bash
# 搜索文本
grep "pattern" file.txt   # 在文件中搜索
grep -r "pattern" folder/ # 递归搜索
grep -i "pattern" file.txt # 忽略大小写
grep -n "pattern" file.txt # 显示行号
grep -v "pattern" file.txt # 显示不匹配的行

# 文本统计
wc file.txt               # 行数、词数、字节数
wc -l file.txt            # 只显示行数
wc -w file.txt            # 只显示词数

# 文本排序
sort file.txt             # 排序
sort -r file.txt          # 逆序排序
sort -n file.txt          # 数字排序

# 去重
sort file.txt | uniq      # 排序并去重
uniq -c file.txt          # 显示重复次数

# 文本替换
sed 's/old/new/g' file.txt  # 替换所有匹配
sed -i '' 's/old/new/g' file.txt  # 直接修改文件

# 文本截取
cut -d',' -f1 file.csv    # 按分隔符截取
cut -c1-10 file.txt       # 按字符截取

系统信息

bash
# 查看系统信息
uname -a                  # 显示所有系统信息
sw_vers                   # macOS 版本信息

# 查看硬件信息
system_profiler SPHardwareDataType  # 硬件信息
system_profiler SPSoftwareDataType  # 软件信息

# 查看内存使用
vm_stat                  # 虚拟内存统计
top                      # 系统监控
htop                     # 更友好的系统监控(需安装)

# 查看磁盘使用
df -h                    # 磁盘空间
du -sh folder/           # 目录大小
du -h --max-depth=1 folder/  # 显示子目录大小

# 查看进程
ps aux                   # 所有进程
ps aux | grep "name"     # 搜索进程
pgrep -l "name"          # 按名称查找进程

# 结束进程
kill PID                 # 发送终止信号
kill -9 PID              # 强制终止
killall "进程名"          # 按名称终止
pkill "进程名"            # 按名称终止

Shell 脚本编程

变量

bash
#!/bin/zsh
# 定义变量
name="张三"
age=25

# 使用变量
echo "姓名: $name"
echo "年龄: $age"

# 特殊变量
echo "当前脚本: $0"
echo "第一个参数: $1"
echo "参数个数: $#"
echo "所有参数: $@"
echo "上一命令退出状态: $?"

# 数组
fruits=("苹果" "香蕉" "橙子")
echo "第一个水果: ${fruits[1]}"  # zsh 数组索引从 1 开始
echo "所有水果: ${fruits[@]}"
echo "数组长度: ${#fruits[@]}"

条件判断

bash
#!/bin/zsh
# if 语句
score=85

if (( score >= 90 )); then
    echo "优秀"
elif (( score >= 80 )); then
    echo "良好"
elif (( score >= 60 )); then
    echo "及格"
else
    echo "不及格"
fi

# 文件测试
file="test.txt"
if [[ -f $file ]]; then
    echo "文件存在"
fi

if [[ -d $file ]]; then
    echo "是目录"
fi

# 常用测试操作符
# -f  文件存在且是普通文件
# -d  目录存在
# -e  文件或目录存在
# -r  可读
# -w  可写
# -x  可执行
# -s  文件大小不为零

# 字符串比较
str1="hello"
str2="world"
if [[ $str1 == $str2 ]]; then
    echo "相等"
fi
if [[ $str1 != $str2 ]]; then
    echo "不相等"
fi

循环

bash
#!/bin/zsh
# for 循环
for i in 1 2 3 4 5; do
    echo "数字: $i"
done

# 使用范围
for i in {1..10}; do
    echo "计数: $i"
done

# 遍历数组
fruits=("苹果" "香蕉" "橙子")
for fruit in ${fruits[@]}; do
    echo "水果: $fruit"
done

# C 风格 for 循环
for ((i=1; i<=5; i++)); do
    echo "循环: $i"
done

# while 循环
count=0
while (( count < 5 )); do
    echo "计数: $count"
    ((count++))
done

# until 循环
count=0
until (( count >= 5 )); do
    echo "计数: $count"
    ((count++))
done

# 循环控制
for i in {1..10}; do
    if (( i == 5 )); then
        continue  # 跳过 5
    fi
    if (( i == 8 )); then
        break     # 到 8 停止
    fi
    echo $i
done

函数

bash
#!/bin/zsh
# 定义函数
greet() {
    echo "你好, $1!"
}

# 调用函数
greet "张三"

# 带返回值的函数
add() {
    local result=$(($1 + $2))
    echo $result
}

sum=$(add 10 20)
echo "结果: $sum"

# 返回状态码
check_file() {
    if [[ -f $1 ]]; then
        return 0  # 成功
    else
        return 1  # 失败
    fi
}

check_file "test.txt"
if [[ $? -eq 0 ]]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

命令行技巧

命令历史

bash
# 查看命令历史
history

# 执行历史命令
!123        # 执行第 123 条命令
!!          # 执行上一条命令
!$          # 上一条命令的最后一个参数
!^          # 上一条命令的第一个参数

# 搜索历史命令
# Ctrl + R 后输入搜索内容

# 历史命令配置
# 在 ~/.zshrc 中添加
HISTSIZE=10000           # 保存的历史命令数
SAVEHIST=10000           # 保存到文件的历史命令数
setopt HIST_IGNORE_DUPS  # 忽略重复命令

别名

bash
# 定义别名
alias ll='ls -la'
alias la='ls -a'
alias l='ls -l'

# 查看所有别名
alias

# 删除别名
unalias ll

# 在 ~/.zshrc 中添加常用别名
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias cls='clear'
alias h='history'
alias j='jobs'

命令补全

bash
# Tab 键自动补全
# 输入部分命令后按 Tab

# 双击 Tab 显示所有可能的补全

# zsh 补全增强
# 在 ~/.zshrc 中启用
autoload -Uz compinit && compinit

# 补全菜单导航
# 使用方向键选择补全项

管道和重定向

bash
# 管道 - 将一个命令的输出作为另一个命令的输入
ls -la | grep ".txt"      # 查找 txt 文件
cat file.txt | sort | uniq  # 排序并去重

# 输出重定向
echo "Hello" > file.txt    # 覆盖写入
echo "World" >> file.txt   # 追加写入

# 输入重定向
sort < file.txt            # 从文件读取输入

# 错误重定向
command 2> error.log       # 重定向错误输出
command > output.log 2>&1  # 重定向所有输出

# 丢弃输出
command > /dev/null 2>&1   # 丢弃所有输出

包管理器

Homebrew

Homebrew 是 macOS 最流行的包管理器:

bash
# 安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 基本命令
brew search package        # 搜索软件包
brew info package          # 查看软件包信息
brew install package       # 安装软件包
brew uninstall package     # 卸载软件包
brew update                # 更新 Homebrew
brew upgrade               # 升级所有软件包
brew upgrade package       # 升级指定软件包
brew list                  # 列出已安装的软件包
brew cleanup               # 清理旧版本

# 安装 cask 应用
brew install --cask visual-studio-code
brew install --cask google-chrome
brew install --cask iterm2

# 服务管理
brew services list         # 列出服务
brew services start mysql  # 启动服务
brew services stop mysql   # 停止服务
brew services restart mysql  # 重启服务

常用软件包

bash
# 开发工具
brew install git           # 版本控制
brew install node          # Node.js
brew install python        # Python
brew install go            # Go 语言
brew install rust          # Rust 语言

# 命令行工具
brew install wget          # 下载工具
brew install curl          # 网络工具
brew install htop          # 系统监控
brew install tree          # 目录树
brew install jq            # JSON 处理
brew install fzf           # 模糊搜索

# 终端增强
brew install zsh           # Zsh
brew install zsh-autosuggestions  # 命令建议
brew install zsh-syntax-highlighting  # 语法高亮

终端增强

Oh My Zsh

bash
# 安装 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 配置文件
# ~/.zshrc

# 更改主题
# 编辑 ~/.zshrc,修改 ZSH_THEME
ZSH_THEME="robbyrussell"   # 默认主题
ZSH_THEME="agnoster"       # 流行主题
ZSH_THEME="powerlevel10k/powerlevel10k"  # 高级主题

# 启用插件
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

# 更新 Oh My Zsh
omz update

iTerm2

bash
# 安装 iTerm2
brew install --cask iterm2

# iTerm2 特点
# - 分屏功能
# - 丰富的配色方案
# - 触发器和自动完成
# - Shell 集成
# - 密码管理器

# 常用快捷键
Command + D        # 垂直分屏
Command + Shift + D  # 水平分屏
Command + Option + 方向键  # 切换分屏
Command + /        # 显示光标位置
Command + Shift + H  # 显示粘贴历史

小结

本章介绍了 macOS 终端的主要内容:

  1. 终端基础:了解终端和 Shell
  2. 基本命令:掌握常用命令操作
  3. Shell 脚本:学习脚本编程基础
  4. 命令行技巧:提高命令行效率
  5. 包管理器:使用 Homebrew 管理软件
  6. 终端增强:优化终端使用体验

下一步

下一章我们将学习 软件管理,了解 macOS 应用程序的管理方法。