Skip to content

终端命令

终端 (terminal)是启动并连接到 shell 的软件。shell是你的会话和会话环境 (提示符和快捷方式等内容可以在其中定制)。命令行是你输入命令并且光标闪烁的文字行。

常用命令

介绍

  • 导航计算机的文件系统以及基本级别的任务
    • 移动你的目录结构 : cd(change directory‌)
    • 建立目录:mkdir(make directory‌)
    • 创建文件(修改他们的原数据): touch
    • 复制文件:cp(copy)
    • 移动文件:mv(move)
    • 删除文件或目录:rm(remove)
  • 下载在特定的 url 找到的文件:curl(Client URL)
  • 在较大的文件体中寻找特定的片段:grep(Global Regular Expression Print)
  • 主页查看文件的内容:less, cat
  • 操作和转换文本流(例如,将 HTML 文件中 <div> 的所有实例改为 <article>):awktrsed
  • 列出当前工作目录中的文件和目录的列表:ls(list)

命令选项

推荐写法

命令 [选项/参数] 目标对象

通常由命令名后的空格、后接破折号、后接一个或多个字母组成。推荐命令选项写在命令之后,“参数在前,目标在后”。 - 是短选项(short options)可以组合使用,-- 是长选项(long options)。 例如:

sh
# curl 的短选项
curl -L https://example.com

# curl 的长选项(等价)
curl --location https://example.com

提示

了解每个命令有哪些可用选项,你可以查看它 man page。 通过键入 man 命令后跟要查找的命令的名称,例如 man ls 大部分都支持 --help,快速命令查看

cd 切换目录

sh
# 省略前导斜杠可以使路径相对于当前的工作目录
cd Desktop/project/src
# 在路径上包含一个前斜线将使路径成为绝对路径
cd /Users/your-user-name/Desktop

# 在 windows 中,你使用反斜杠而不是正斜杠
cd Desktop\project\src

创建、复制、移动、删除

创建

sh
# 当前目录中创建一个新目录
mkdir test
# 当前目录中创建一个新的空文件
touch test.md

复制

用于复制文件或目录

语法格式

  • cp [options] source_file target_file
  • cp [options] source_file ... target_directory
sh
# 复制单个文件到指定目录
cp test.txt ./test

# 复制单个文件到指定目录并重命名
cp test.txt ./test/test1.txt

# 复制多个文件到指定目录
cp test1.txt test2.txt ./test

# 复制目录到指定目录
cp -r ./test ./test1

# 复制目录到指定目录并重命名
cp -r ./test ./test1/test2

警告

复制目录时必须使用 -r 参数,否则会报错

常用参数说明

  • -r 递归复制目录
  • -i 覆盖前提示
  • -f 强制覆盖已存在的文件
  • -p 保留文件的属性(权限、时间戳等)
  • -a 递归复制目录,并保留文件属性(相当于同时使用 -p-r
  • -v 显示详细的复制过程

移动

移动文件或目录

语法格式

  • mv [options] source target
  • mv [options] source... directory
sh
# 移动单个文件到指定目录
mv test.md ./test

# 移动单个文件到指定目录并重命名
mv test.md ./test/test1.md

# 移动多个文件到指定目录
mv test1.md test2.md ./test

# 移动目录到指定目录
mv ./test ./test1

提示

  • source 为文件时,target 可以为文件或目录
  • source 为目录时,target 必须为目录
  • target 为目录时,source 会被移动到 target 目录下
  • target 已存在时,source 会覆盖 target 文件或目录
  • target 不存在时,source 会被重命名为 target 文件或目录

常用参数说明

  • -f 强制移动文件或目录
  • -i 覆盖前提示
  • -n 不覆盖已存在的文件
  • -v 显示详细的移动过程

删除

使用 rm 删除不能在回收站找回

sh
# 删除指定目录,但仅当它为空时,
rmdir test
# 删除指定的文件
rm test.md
# 删除一个非空的目录(并删除其中包含的所有内容),则可以使用 -r 选项
rm -rf test
# 强制删除(不提示),则可以使用 -rf 选项
rm -r test

提示

备注: 许多终端命令允许你使用星号作为“通配符”字符,意思是“任何字符序列”。这允许你一次对可能大量的文件运行操作,所有这些文件都匹配指定的模式。例如,rm mdn-* 将删除所有以 mdn- 开头的文件。rm mdn-*.bak 会删除所有以 mdn- 开头,以 .bak 结束的文件。

wc 命令

wc 是 word count(字数统计)的缩写

假设 myfile.txt 内容是:

md
hello
world
this is a test
sh
# 统计 myfile.txt 文件中的行数
wc myfile.txt
# 统计 myfile.txt 文件中的行数
wc -l myfile.txt
# 统计当前目录下文件/文件夹的总数(不含隐藏文件)
ls | wc -l
# 隐藏文件也统计进去
ls -A | wc -l

常用参数说明

  • -l 表示统计 行数(line count)注意:统计的换行符

| 管道

  • 把前一个命令的“输出”传给后一个命令的“输入”

curl 请求网页

  • curl URL 访问旧地址会失败或返回 301/302 响应
  • curl -L URL 跟随 HTTP 3xx 重定向,自动跳转到新地址,拿到实际网页内容
sh
curl https://developer.mozilla.org/docs/Web/API/fetch -L -I

常用参数说明

  • -L 是 follow redirect(跟随跳转)
  • -I 只显示 HTTP 头部,不显示网页正文
  • -i返回响应头 + 响应体

grep 筛选

筛选出包含某个关键词的行

sh
# 只保留包含 “location” 的那几行(通常是重定向地址)
curl https://developer.mozilla.org/docs/Web/API/fetch -L -I| grep location

输出:

sh
location: /en-US/docs/Web/API/fetch
location: /en-US/docs/Web/API/Window/fetch

常用参数说明

  • -r 递归查找

awk 命令

按列提取内容并格式化

sh
# $1 是第一列(location:),$2 是第二列(路径)
echo "location: /en-US/docs/Web/API/fetch" | awk '{ print "https://developer.mozilla.org" $2 }'

echo 输出

用于字符串的输出

sh
# 输出普通字符
echo "hello world"

# 使用 -e 开启转义
echo -e "这是第一行文本\n这是第二行文本"

# 使用 -n 不换行输出
echo -n "hello world"

# 输出变量(查看当前窗口使用的 shell)
echo $SHELL

# 输出命令执行结果
echo `date`

# 将结果输出到文件中
echo 'hello world' > test.txt

# 将结果追加到文件中
echo 'hello world' >> test.txt

echo > 和 echo >> 的区别

  • 当文件不存在时都会创建文件
  • 当文件存在时
    • echo >覆盖文件中的原有内容
    • echo >> 会将结果追加到文件中

修改输出内容的样式

ANSI 转义序列是一些特殊的字符,它们可以用于修改文本的颜色、格式和其他外观属性。

sh
# 语法格式
echo -e "\033[背景颜色;字体颜色;显示方式m 需要输出的内容 \033[0m"

# 🌰 白底黑字
echo -e "\033[47;30m 白底黑字 \033[0m"
# 🌰 黑底白字 高亮显示
echo -e "\033[30;37;1m 黑底白字 高亮显示 \033[0m"
# 🌰 黑底白字带下划线
echo -e "\033[30;37;4m 黑底白字带下划线 \033[0m"
  • \033 转义起始符,定义一个转义序列,(也可以使用 \e\E 代替)
  • [ 表示开始定义颜色
  • 背景颜色 范围 40-47
  • 字体颜色 范围 30-37
  • m 转义终止符,表示颜色定义完毕
  • \033[0m 表示关闭所有属性恢复默认样式

背景色和字体颜色

背景色范围: 40 - 47

字体颜色范围: 30 - 37

背景色字体颜色
黑色4030
红色4131
绿色4232
黄色4333
蓝色4434
紫色4535
深绿4636
白色4737

显示方式

  • 0 关闭所有属性
  • 1 设置高亮显示
  • 4 设置下划线
  • 5 闪烁
  • 7 反显
  • 8 不可见

其他属性

  • \033[nA 光标上移 n 行
  • \033[nB 光标下移 n 行
  • \033[nC 光标右移 n 列
  • \033[nD 光标左移 n 列
  • \033[x;yH 设置光标位置 x 行 y 列
  • \033[2J 清屏
  • \033[K 清除从光标到行尾的内容
  • \033[s 保存光标位置
  • \033[u 恢复光标位置
  • \033[?25l 隐藏光标
  • \033[?25h 显示光标