常用命令行合集

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] 来删除,其中 rmremove 的缩写

如果删除目标是一个文件夹,一般使用 rm -r [directoryName] 来删除,其中参数 -r 同上

有时候要删除某个文件或文件夹的时候,会触发警告,此时可以通过 -f 来强制删除文件或 -rf 来强制删除文件夹,这也是 rm -rf / 删库跑路的来源。但此举非常不推荐,否则很容易就把重要文件删了导致系统崩溃

但是测试 CRUD 的时候,总是要重复运行很多代码,好烦啊,有没有方便的办法呢?

脚手架

显然我们在上面测试的时候,经常会重复运行代码,输入内容等等。比如下方代码就是一个可能的情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo "Waiting..." > 1.txt
echo "hello world" >> 1.txt

cp 1.txt 2.txt
echo "success" >> 2.txt

cat 1.txt 2.txt > 3.txt

mkdir test
mv 1.txt 2.txt 3.txt test
cd test
tail -n 4 3.txt > 4.txt

less 4.txt

但是我们总不能每一次测试都手打一遍?所以我们要将它保存为一个单独的 bash 代码文件,称之为 bash 脚本,它一旦运行起来,就可以帮助我们运行设定好的代码。

假设我们把它保存为 node.exe,或者干脆不要 exe,直接叫做 node

实际上,对于系统来说,文件后缀是不是 exe 并不是很重要,只要是机器能读懂的语言,都是可执行文件

如果你不是 windows 系统,需要先执行 chmod +x [filename] 命令,来赋予文件执行的权能

然后一般有三种方法运行你的可执行文件。假设此处运行当前目录下的 node,它是一个删除了 exe 后缀的原 exe 文件

  1. ./node,其中单个 . 表示当前目录
  2. sh node,其中 sh 表示将其当作 bash 脚本启动
  3. 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,大功告成!

好了,关于命令行,我暂且只有这些想说的,谢谢你看到这里,快回去自己动手试验一下吧!

--It's the end.Thanks for your read.--