命令行入门
为什么会有命令行这东西?
通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,在现在的图形用户界面的操作系统中,通常都保留着可选的命令行界面。
虽然现在许多计算机系统都提供了图形化的操作方式,但是却都没有因而停止提供文字模式的命令行操作方式,相反的,许多系统反而更加强这部分的功能,例如Windows就不只加强了操作命令的功能和数量,也一直在改善Shell Programming的方式。而之所以要加强、改善,自然是因为不够好;操作系统的图形化操作方式对单一客户端计算机的操作,已经相当方便,但如果是一群客户端计算机,或者是24小时运作的服务器计算机及路由器、交换器等电信设备,图形化操作方式有时会力有未逮,所以需要不断增强命令行界面的脚本语言和宏语言来提供丰富的控制与自动化的系统管理能力,例如Linux系统的Bash或是Windows系统的Windows PowerShell。(以上内容来自维基百科)
其实说白了就是命令行也是用来操作计算机的,只不过换了一种方式而已。
救命快捷键:ctrl + c 用来终止危险的操作
1.查看文件的操作
- ~ 代表用户目录 例如: C:\Users\asus
- ~Desktop 桌面目录
- clear 清空cmder窗口内容
- cd 进入某个文件夹
- cd ../ 返回上级目录
- pwd 查看当前的绝对路径
- ls 查看当前目录的文件列表 默认不显示以‘ . ’开头的文件
- ls -l ; 查看文件列表并显示更新时间
- ls 路径 ; 查看指定路径文件的内容列表
- cat 路径 ; 查看指定文件的具体内容(文字,代码) 内容过多会一直滚动页面 因此不常用
- head 路径 ; 查看指定文件的具体内容(文字,代码) 默认前10行 可通过 -n 数字 修改
head 3/1.txt -n 15 // 查看前十五行内容
tail 路径 ; 查看指定文件的具体内容(文字,代码) 默认后10行 可通过 -n 数字 修改
-
less 路径 ; 查看指定文件的具体内容(文字,代码) 适合多行内容 可通过 上下键或 j,k键来控制查看的多少,q键退出
查看代码选中高亮状态下需要摁下esc才能摁q退出
2.增加文件的操作
-
touch 文件名加后缀 ; 创建一个指定文件名的空的文件
- 创建同一目录的多个文件只需要加空格隔开即可 例 : touch 1.js 2.js 3.js
-
echo 内容 > 文件名 ; 创建并添加指定内容的文件 如果已经有这个文件则覆盖此文件内容
- 如果想要追加要写两个 > 例如 : echo 内容 >> 文件名
- 追加两行内容 ; 例 : echo -e "1\n2" >> 1.txt
-
mkdir 文件夹名/ ; 创建指定名称的文件夹
- mkdir -p 文件名/文件名/文件名...... ; 创建多层级的目录文件
- 创建同一目录的多个目录只需要加空格隔开即可 例 : mkdir a b c
-
cp 被拷贝文件名 新建文件名 ; 复制一个新的文件
- cp -r 被拷贝目录 新建目录 ; 拷贝目录
3.删除文件的操作
- rm 文件名 ; 删除指定的文件
- rm -r 目录名 : 删除指定的目录
- rm -rf 目录名 ; 强制删除指定目录
使用删除命令时候,要注意自己的当前路径,避免删除重要文件
4.修改文件的操作
-
code 文件名 ; 用vscode编辑器打开指定文件 进行修改编辑
- 如果不能执行就是vscode没有加到PATH里面
start 文件名(mac使用open); 使用默认程序打开文进行编辑
echo ' ' > 文件名 ; 清空文件内容
-
mv 文件名 目录 ; 移动指定文件到指定目录
- mv 文件名 . ; 移动到当前目录
mv 文件名1 文件名2 ; 把文件1重命名为文件名2
touch 文件名 ; 修改此文件的最后更新时间为当前时间
echo $? ; 查看成功失败返回值 因为命令有成功或者失败 : 成功会返回0,失败会返回1
其他操作:
- 在命令行窗口中按上下方向键可复制之前的命令
- alt + . 可复制上一行命令的最后一个参数
获取更多命令的方法:
yarn global add tldr // 下载后使用 tldr 命令 就可以查看详细的用法
5.脚本文件
组合命令:
-
命令的组合使用 && 操作
&&的作用就是前面的命令执行成功时才会接着执行&&后面的命令
-
命令的组合使用 ; 操作
; 的作用就是不管 ; 前面的命令执行成功与否都会执行后面的命令
在编辑器里面命令的回车换行就相当于 ; 操作
把命令变成文件:
使用组合操作将多条命令放在一个文件中就是脚本文件。
步骤:
创建一个文件,后缀不要求,也可以没有
-
添加执行权限(windows没有这个要求,mac系统专有)
- chmod +x 脚本名
-
把要执行的命令写进文件里面
脚本的传参:
mkdir $1;cd $1;touch 1.js;touch 1.html; // $1 就是参数
-
运行 【 sh 正确的路径 】即可执行,或者 【 ./ 正确的路径 】 也可以运行
-
如果加了 shebang ,删掉 sh 也能执行
shebang: 一个操作系统弄支持多种脚本,需要指定用什么程序来执行脚本,一行注释
#!/usr/bin/env sh //使用bash执行脚本
如果把脚本加了PATH,则可以用【文件名】 直接运行,无论在那个目录下
-
因此实际上所有命令都是可执行文件,操作系统优先找.exe可执行文件,只不过都加了PATH可以直接运行。
Git本地仓库
Git是一个分布式版本控制系统,国内有一个相似的叫做码云
Git只能管理跟踪文本文档
基本命令
git init ; 初始化,会在当前目录生成一个 .git文件夹,用来存放代码快照。
-
.gitignore 文件用来保存不被提交的文件名,描述哪些变动不用提交
- 常见有 node_moudules ; .DS_Store ; .idea ; .vscode
-
git status ; 查看当前文件的状态,会提示你哪些文件修改了没有提交
- git status -sb; 简略状态信息
git add 路径 ; 选择哪些变动是需要提交的,路径可以是相对路径,也可以是绝对路径,. 或 *
git commit -m 字符串 ; 提交并说明提交的描述,字符串如果有空格需要用引号包起来
- git commit -v ; 提交的啰嗦版,运行后打开vscode,可以查看详细的改动,并在添加版本描述后提交
- git log ;查看修改日志
- git reflog ; 查看包括回滚的日志记录
-
git reset --hard 版本号 ; 回滚到指定版本号的版本
注意,在回滚之前要确保没有add了之后没提交的文件,否则会被删除
-
git branch 分支名 ; 基于当前commit创建一个新的分支,在哪个分支提交,代码更新就在哪个分支
- git branch ;查看分支情况,并显示当前分支
git checkout 分支名 ; 切换到另一个分支,当前的目录有未提交的代码,只要跟另一个分支不冲突,就不用理会,若有,可以用 git stash 或者合并冲突
git merge 分支名 ; 把指定分支名的分支合并到当前分支,可能会有冲突
git branch -d 分支名 ; 删除指定分支
冲突的解决
1.发现冲突
- 在合并分支时,会得到conflict提示
- 使用 git status -sb 查看哪些文件冲突了
2.解决冲突
- 依次打开每个文件
- 搜素====四个等于号
- 在上下两个部分选择要保留的代码,并删除 ==== <<<< >>>>这些标记
- git add 对应的文件
- 再次git status -sb ,解决下一个文件的冲突
- 直到没有冲突,运行 git commit (不需要参数)
注意: git add 处理的是文件的变化,而不是文件,比如说删除了一个文件,依然要用 git add 来提交到暂存区,之后基本只用 git add. 和 git commit -v ,其他很少用到。
Github远程仓库
github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。就是用来存储代码的一个平台。
第一步生成 ssh key,(用户首次使用的情况下)
Github帮助文档 ; https://docs.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
运行 ssh-keygen -t rsa -b 4096 -C 你的邮箱
一直回车直到没有提示
cat ~/.ssh/id_ras.pub 得到公钥内容
打开Github,在设置页面填入公钥
ssh -T git@github.com 查看是否成功
上传代码:
在github新建 GIthub Repo(repository 仓库),复制其ssh地址
复制页面里面的代码
git remote add origin 加上 ssh 的内容 使本地仓库与远程仓库联系起来,方便以后进行后续的提交等操作
-
git push -u origin main(之前叫master) ; 含义如下
-
这句话的意思是推送本地的main分支到远程仓库的main分支
这里有个坑,现在github新建的远程仓库的默认主分支名为main了
git push -f 强制推送,谨慎使用,有可能会删代码
如果提示应该 git pull ,就 git pull 一下
git pull 是先把远程分支合并到本地当前的分支
如果远程分支没有更新过,才可以省略 git pull
-u origin main 的意思是设置上游分支,-u 选项执行以下操作:对于每个最新或成功推送的分支,添加上游(跟踪)引用,由无参数git pull和其他命令。所以呢,使用-u选项推送本地分支后,此本地分支将自动与远程分支链接,并且您可以使用git pull而无需任何参数。
-
下载代码:
git clone git@xxxxx[目标路径]
如果是不同的机器,要上传新的 ssh key (一个机器一个key)
cd 目标路径
git add / git commit / [git pull] / git push 四连操作
单独下载某个分支:
先下载整个仓库,然后git checkout 分支
或者使用一些特殊命令
git clone 的变式:
-
git clone git@?/xxx.git
这是默认的复制命令后的方式,会在当前目录下创建一个xxx文件夹
xxx/.git 就是本地仓库
-
git clone git@?/xxx.git yyy
这样会在本地新建一个yyy名字的目录
yyy/.git 就是本地仓库
-
git clone git@?/xxx.git .
最后有个点,点前面有空格
这种方式不会新建目录,会在当前目录存放代码和 .git
因此最好再开始前进入一个空的目录
git rebase -i xxxxxx ; 美化历史命令
通灵术
git stash ; 用来隐藏文件
git stash pop ; 将隐藏文件召唤出来