20201113命令行总结
首先我们要打开命令行,应该使用 git bash
而不是 Windows cmd,因为命令行实际上就是 bash 脚本语言
关于安装命令行,可以参考 本站建站指导
命令行的默认目录一般是形如 C:\Users\Ringoer
,这里被称之为用户目录,可以缩写为英文波浪线 ~
然后我们可能要先切换目录到达目标目录
切换目录
要切换到根目录(盘符的上级目录)的话,非常容易,只需要 cd /
就行了,此处 /
表示系统根目录
切换盘符的话,也挺简单的,直接在命令行输入盘符+冒号即可。例如 D:
可以切换到 D 盘
切换目录使用命令 cd
,是 change directory
的缩写。使用方法一般有两种
- 绝对目录
- 相对目录
绝对目录
一般指从盘符开始的目录描述,比如 C:\Users\Ringoer
就是一个标准的绝对目录
需要注意,上面说到用户目录缩写是 ~
,所以 ~
也是一个绝对目录
相对目录
相对目录的写法一般根据当前目录决定。
首先我们可以在命令行上看到自己当前所在的目录,也可以使用命令 pwd
来显示当前目录
然后,我们可以选择前往上一级目录,此时可以使用命令 cd ..
,注意一定是两个点表示上级目录,如果是一个点则表示当前目录
不知道要去哪个目录怎么办?没关系,可以使用命令 ls
(注意是字母 L 的小写)来查看当前目录下的所有子目录或文件,然后 cd 子目录名称
或 cd ./子目录名称
即可进入目标子目录
说到命令行,那最大的用处,肯定是对文件 CRUD 啦
Create-新增
创建一个新文件,一般有两种类型
- 从零创建
- 从已有创建
从零创建
一般使用 touch [...filename]
来创建文件
其中 ...
是 spread 语法,表示不定长参数列表,下同
若目标文件不存在,则在当前目录创建这个文件
若目标文件已经存在,则更新最后更新时间
从已有创建
一般使用 cp [filename1] [filename2]
来复制文件
将 文件1 的内容全数复制到 文件2 中
文件夹
文件夹也有如上两种情况,分别采用
mkdir [...directoryName]
cp -r [directoryName1] [directoryName2]
来创建文件夹
其中参数 -r 表示 递归地复制,概念与 js 中的深度拷贝相同
Retrieve-查询
一般有 4 种查询语句
语句 | 描述 |
---|---|
cat […filename] | 全量查看文件 |
head -n [line] […filename] | 查看文件前 n 行 |
tail -n [line] […filename] | 查看文件后 n 行 |
less [filename] | 分页查看文件 |
Update-修改
显然修改文件和文件夹是不一样的
文件
查询中前三种语句,都是有确定的返回内容的,此时可以通过 > [filename]
将返回内容导入到新的文件中。该命令会覆盖目标文件原有内容
例如,cat 1.txt 2.txt > 3.txt
,将 1.txt 和 2.txt 的内容都全量导出,然后拼接在一起,之后保存到 3.txt 中
也可以通过 >> [filename]
将返回内容导入到新的文件中。该命令会将新内容拼接到目标文件原有内容末尾
例如,cat 1.txt 2.txt >> 3.txt
,将 1.txt 和 2.txt 的内容都全量导出,然后拼接在一起,之后拼接到 3.txt 的末尾
刚才说到”确定的返回内容”,就不得不说说回显命令 echo [body]
,用于将参数体的内容原封不动回显到标准输出中。显然,echo 命令也可以通过 > [filename]
和 >> [filename]
重定向到文件中
echo 还可以输出 bash 脚本代码,实际上就是输出字符串,需要双引号
例如 echo "hello world"
,英文引号,懂得都懂
文件夹
修改文件夹是什么意思呢?对比修改文件是指修改其中保存的内容,那修改文件夹显然就是修改文件夹中保存的文件列表
我们可以通过 mv [...filename] [directoryName]
命令来将文件移动到目标文件夹中
其中文件可以指定不少于 1 的任意多个,但目标文件夹只能有一个
mv,实际上是 move
的缩写。
重命名
说到这里,肯定会有同学想问,如何重命名呢?这就需要我们刚刚说的 mv
命令了
mv [file1] [file2]
可以实现将文件1重命名为文件2
mv [directory1] [directory2]
可以实现将文件夹1重命名为文件夹2
如果文件2已经存在会怎么样呢?
那么文件1会改名为文件2,而文件2会被删除
Delete-删除
删除一个文件,一般使用 rm [filename]
来删除,其中 rm
是 remove
的缩写
如果删除目标是一个文件夹,一般使用 rm -r [directoryName]
来删除,其中参数 -r 同上
有时候要删除某个文件或文件夹的时候,会触发警告,此时可以通过 -f
来强制删除文件或 -rf
来强制删除文件夹,这也是 rm -rf /
删库跑路的来源。但此举非常不推荐,否则很容易就把重要文件删了导致系统崩溃
但是测试 CRUD 的时候,总是要重复运行很多代码,好烦啊,有没有方便的办法呢?
脚手架
显然我们在上面测试的时候,经常会重复运行代码,输入内容等等。比如下方代码就是一个可能的情况
1 | echo "Waiting..." > 1.txt |
但是我们总不能每一次测试都手打一遍?所以我们要将它保存为一个单独的 bash 代码文件,称之为 bash 脚本,它一旦运行起来,就可以帮助我们运行设定好的代码。
假设我们把它保存为 node.exe
,或者干脆不要 exe,直接叫做 node
实际上,对于系统来说,文件后缀是不是 exe 并不是很重要,只要是机器能读懂的语言,都是可执行文件
如果你不是 windows 系统,需要先执行 chmod +x [filename]
命令,来赋予文件执行的权能
然后一般有三种方法运行你的可执行文件。假设此处运行当前目录下的 node
,它是一个删除了 exe 后缀的原 exe 文件
./node
,其中单个.
表示当前目录sh node
,其中sh
表示将其当作 bash 脚本启动node
第一种和第二种没有什么区别,主要是第三种
环境变量
前面我们讲过可以通过 ls
查看当前目录下的文件列表,那系统怎么知道 ls 是什么命令呢?答案就在系统环境变量 PATH 中
因为 PATH 中登记了 ls 所在的目录,所以系统能找到 ls 的指向
那么答案就很明确了,我们可以把我们现在的运行目录也登记到 PATH 中,就可以通过 node
直接运行我们的可执行文件了
命名冲突
但是大家电脑上都已经安装了 nodejs 了吧?这时如果直接在命令行中执行 node
命令,往往会启动了 nodejs 的 node.exe 。那怎么让我们的 node 文件更优先呢?
答案还是在 PATH 身上
刚才设置 PATH 的时候,可以注意到,PATH 列表右侧有”上移””下移”按钮,可以推测目录在 PATH 中的注册顺序是影响调用决策的重要条件。那么我们把我们的工作目录上移到比 nodejs 目录更上方的位置
此时如果你不是 windows 环境,应该可以看到命令行正常输出了你的 node 文件的内容了。但如果是 windows 环境……还有一个坑点,那就是 windows 环境在决策时 exe 后缀的文件优先级更高。那么把你的 node 文件改名为 node.exe,ok,大功告成!
好了,关于命令行,我暂且只有这些想说的,谢谢你看到这里,快回去自己动手试验一下吧!