这篇文章中的命令都是在 Cmder 中运行的,点我获取 Cmder
安利一个网站,可以查看命令及参数的具体含义:explainshell
一、常用单词与命令缩写
| 英文 | 翻译 | 命令/参数 |
|---|---|---|
| file | 文件 | |
| make | 制作 | mk |
| move | 动 | mv |
| remove | 删除 | rm |
| copy | 拷贝 | cp |
| list | 列表 | ls |
| recursive | 递归的 | -r |
| link | 链接 | ln |
| find | 找到 | find |
| echo | 回声 | echo |
| touch | 触摸 | touch |
| change | 改变 | cd 中的 c |
| directory | 目录/文件夹 | cd 中的 d |
| force | 强制 | -f |
二、实用小技巧
| 作用 | 命令 | 快捷键 |
|---|---|---|
| 中断一个命令 | Ctrl + C | |
| 清空命令行 | clear | |
| 复制上一条命令的参数 | Alt + . | |
| 查看历史 | history |
三、用户目录
Windows 系统中,C 盘里边的目录不可以乱动,比如 Program Files、Program Files (x86)、Windows 等(你会发现这些目录甚至不能重命名),你能操作的只有 Users 目录。Users 目录中有个 Administrator 目录(或你给电脑起的名字的目录),这个目录就是用户目录。
在用户目录中,你可以随便玩。所以打开命令行的第一件事,就是进入用户目录(或其他目录,比如项目所在目录)。
cd /c/Users/Administrator
上面的命令输入太麻烦了,换个简单的:
cd ~ # ~ 就相当于 /c/Users/Administrator
四、增删改查
1. 增:创建文件
- 创建文件
touch 1.txt
- 创建文件并写入内容
echo hi > 1.txt # 单大于号表示覆盖
echo hihi >> 1.txt # 双大于号表示追加
echo -e "hello\nworld" >> 1.txt # 输入多行内容,需要参数 -e,需要双引号,\n 表示换行
- 同时创建多个文件
touch 1.txt 2.txt
- 创建目录
mkdir a
mkdir -p a/b/c # 创建多级目录
- 同时创建多个目录
mkdir a b c
mkdir -p a/b/c d/e/f # 创建多个多级目录
- 复制文件
cp 1.txt 2.txt
- 复制目录
cp -r a b # -r, recursive, 递归地去看目录中有没有其他目录, 有就继续进去看, 没有就复制
2. 删:删除文件
- 删除文件
rm 1.txt
- 删除目录
rm -r a # -r, recursive, 递归地去看目录中有没有其他目录, 有就继续进去看, 没有就删除
- 强制删除有内容的目录
rm -rf a
# -r, recursive, 递归地去看目录中有没有其他目录, 有就继续进去看, 没有就删除
# -f, force, 强制
友情提示,没事千万不要运行 rm -rf /,不然你就废了!!!
3. 改:修改文件或目录
- 修改文件内容
start 1.txt # Windows
open 1.txt # Mac
以上命令,会用默认程序打开文件或目录。如果你的 Cmder 中可以用 code 命令,那就用 code 命令打开。
code 1.txt # 使用 VSCode 打开文件
打开文件以后,就可以修改文件内容了。
- 追加文件内容
echo "hello world" >> 1.txt
- 清空文件
echo "" > 1.txt # 单大于号,表示覆盖
- 重命名文件或目录
mv 1.txt 2.txt # 将 1.txt 重命名为 2.txt
mv a b # 将 a目录 重命名为 b目录
- 移动文件或目录
mv 1.txt a # 将 1.txt 移动到 a目录中
问:重命名和移动的命令都是 mv,如何区分?
看目标路径是否存在。存在就是移动,不存在就是重命名。
比如mv 1.txt a:
- 如果 目录a 存在,就是将 1.txt 移动到 a 中
- 如果 目录a 不存在,就是将 1.txt 重命名为 a
- 修改文件最后更新时间
touch 1.txt
问:touch 有什么作用?
文件不存在,
touch就是新建文件;
文件存在,touch就是修改文件最后更新时间。
4. 查:查看文件或目录
- 查看当前目录绝对路径
pwd
- 查看当前目录内容
ls # 不显示隐藏文件
ls -la # 显示隐藏文件,且详细显示文件信息
- 查看指定目录内容
ls 路径
# 示例
ls a/b/c # 查看 a目录 下的 b目录 下的 c目录 中的内容
- 查看文件内容
cat 路径 # 全部查看
# 示例
cat 1.txt
less 路径 # 只看文件的一部分(分页查看)
# 按 J/K 或 上/下 可以上下滚动查看内容
# 按 Q 退出
# 如果选中了某一部分,要先按 ESC 取消选中,再按 Q 退出
# 示例
less 1.txt
head 路径 # 默认显示前 10 行
head -n 14 路径 # 显示前 14 行
tail 路径 # 默认显示后 10 行
tail -n 14 路径 # 显示后 14 行
五、查看命令帮助手册
这么多命令, 记不住怎么办?用以下命令查看帮助手册。
man 命令
# 或者
命令 --help
# 或者
命令 --help | less # 分页的形式查看,按 J/K 或 上/下 滚动查看
# | 是管道符
上面的帮助手册太长了,不愿看或者看不懂怎么办?安装 tldr,查看常用命令文档。
npm i -g tldr
# 或者
yarn global add tldr
# 使用
tldr ls # 查看 ls 常用用法
tldr cp # 查看 cp 常用用法
六、命令的组合
首先必须知道的是,命令有可能成功,也有可能失败。如果成功了,命令行不会有提示;如果失败了,命令行会有相关的错误提示。
你也可以使用 echo $?,查看上一个命令的返回值。成功返回 0,失败返回 非0。
1. && 操作
作用:当一条命令成功后,执行下一条命令。
touch 1.txt && rm 1.txt && echo 成功
上面代码,创建了 1.txt 又删除了 1.txt,然后打印“成功”。
rm 2.txt && echo 成功
上面代码,由于 2.txt 不存在,在删除 2.txt 时失败了,所以不会打印“成功”。
2. ; 操作
作用:不管成功还是失败,都执行下一条命令。
rm 2.txt; echo 成功
上面代码,由于 2.txt 不存在,在删除 2.txt 时失败了,但是仍然会执行下一条命令,打印“成功”。
七、写个脚本创建项目
步骤:
- 创建一个文件,可以不用后缀
touch 一键搞定
- 打开该文件,并写入命令
mkdir aaa
cd aaa
touch index.html
touch style.css
touch main.js
echo -e "<!DOCTYPE html>\n<h1>标题</h1>" >> index.html
- 为该文件添加可执行权限(Windows 不用加,Windows 没有这个概念)
chmod +x 一键搞定
添加可执行权限的命令是 chmod +x 文件 , +x 就是加可执行权限。
- 执行该文件
./一键搞定 # ./ 一定要写
# 或者
sh 一键搞定
执行“一键搞定”文件后,会看到创建了名为 aaa 的目录,目录中有 index.html、style.css、main.js 等文件。
以上,只能创建一个 aaa 项目。如果还要创建 bbb、ccc、ddd 项目,怎么办?
两个办法,一是改代码,把文件中的 aaa 改成 bbb、ccc、ddd,然后分别再运行一次;二是使用参数,告诉文件我要创建什么项目。
只需将文件中的代码改成下面这样,其他步骤不变。
mkdir $1
cd $1
touch index.html
touch style.css
touch main.js
echo -e "<!DOCTYPE html>\n<h1>标题</h1>" >> index.html
执行文件时,像下面这样:
./一键搞定 bbb
./一键搞定 ccc
./一键搞定 ddd
# 或者
sh 一键搞定 bbb
sh 一键搞定 ccc
sh 一键搞定 ddd
以上,在执行的文件后面接上不同的参数,就可以创建不同的项目。
八、其他
1. shebang
shebang 就是一行注释,可以指定用什么程序来执行运行当前的脚本。
拿上面的“一键搞定”做实验:
# 用 sh 来运行当前的脚本
#!/usr/bin/env sh
mkdir $1
cd $1
touch index.html
touch style.css
touch main.js
echo -e "<!DOCTYPE html>\n<h1>标题</h1>" >> index.html
由于脚本中已经指定了使用 sh 运行脚本,所以运行脚本时就不用加上 sh 了,直接运行 一键搞定 aaa 即可。但是由于 ./ 是必须的,所以最终我们的命令是:
./一键搞定 aaa
2. 把文件变成命令
上面的命令看起来似乎和加 shebang 之前没两样,有没有更简洁的执行文件的方法呢?
当然是有的。只要把一个可执行文件的路径放到 path 中,就可以使用文件名作为命令。也就是说,这个文件变成了一个命令。
一键完成 bbb
由此可见,这些可以执行的命令,其实都是文件。
如,查看 ls 命令(文件)所在目录:
where ls
# 或
which ls
转载请注明出处!!!