bash的介绍

shell

在计算机科学中,Shell俗称壳,用来区别于Kernel(核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

核是操作系统的内核,壳是介于用户和操作系统内核之间的桥梁
也就是说,用户可以通过壳来操作系统的内核

shell的分类

  1. 图形化shell

    通过提供友好的可视化界面,调用相应应用程序
    如:  windows系列操作系统,
         Linux系统上的图形化应用程序GNOME、KDE等。
    
  2. 命令行shell

    通过键盘输入特定命令的方式,调用相应的应用程序,
    如:   windows系统的cmd.exe、Windows PowerShell,
          Linux系统的Bourne shell ( sh)、Bourne Again shell ( bash)等。
    

    bash

    在window系统下使用bash,需要一个软件,这个软件模拟集成了bash大部分命令。是shell的一种,几乎所有的linux的系统都会提供bash

bash命令格式

命令 [-options]  [参数]
查看帮助:命令 --help

bash常见的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cd 路径 (Change Directory) 切换目录
pwd (Print Working Directory) 查看当前所处的路径
ls (List) 查看当前目录下所有的文件信息
ls -a 查看所有的文件
ls -l 查看文件的详细信息
ls -al 查看文件的详细信息
mkdir 文件夹名称 (Make Directory) 创建文件夹
touch 文件名.后缀 创建文件
rm 文件名 (remove) 删除指定的文件
rm -r 文件夹 删除指定的文件夹
rm -f 文件夹 强制删除指定的选项
rmdir 文件名 (Remove Directory) 删除指定的空文件夹
cp 源文件 目标文件 (copy) 将源文件复制到目标文件
mv 源文件 目标文件 (move) 将源文件剪切到目标文件
cat 文件 查看指定文件中的内容
less 文件 分页查看指定文件中的内容
echo 内容 将内容输出到屏幕
> / >> 重定向,可以将输出到屏幕的内容重定向到指定的文件中
> 替换操作,会覆盖之前文件里面的内容
>> 追加操作,会在之前文件里面的内容后面追加上输入的内容
| 管道符可以将多个命令连接使用,上一次(命令)的执行结果当成下一次(命令)的参数。
grep 匹配内容,一般结合管道符使用
clear 清空屏幕
tab键 智能补全

vi编辑器

如同Windows下的记事本,vi编辑器是Linux下的标配,通过它我们可以创建、编辑文件。它是一个随系统一起安装的文本编辑软件。

三种模式

vi编辑器提供了3种模式,分别是普通模式、插入模式、命令模式,每种模式下用户所能进行的操作是不一样的。

  1. 普通模式

    普通模式下面的命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    vi 文件路径 打开/创建文件
    i(insert) 进入编辑模式,当前光标处插入
    I(Insert) 在当前行之前插入
    o 进入编辑模式,当前行下面插入新行
    O 进入编辑模式,当前行上面插入新行
    a(append) 进入编辑模式,当前光标后插入
    A(Append) 进入编辑模式,光标移动到行尾
    ZZ 保存并退出
    yy 复制
    dd 删除当前行
    p 粘贴
    . 重复上一次的编辑操作
    u 辙销操作,可多次使用
    ctrl + r 反撤销
    ctrl + f 向前翻页
    trl + b 向后翻页

​ 光标移动的命令

1
2
3
4
h 向左
j 向下
k 向上
l 向右

2.插入模式

3.命令模式

​ 命令模式下面的命令

1
2
3
4
5
6
7
8
9
:w 文件名 保存文件
:w filenme 另存为
:q 退出编辑器
:q! 不保存强制退出
:w! 强制保存
:wq 保存并且退出
:set nu 显示行号
:e 文件名 指定文件来编辑
:e! 撤销更改,返回到上一次保存的状态

模式切换

  1. 普通模式 —> 插入模式
    i / I / o / O / a / A

  2. 插入模式 —> 普通模式
    esc / ctrl + [

  3. 普通模式 —> 命令模式
    :

  4. 命令模式 —> 普通模式
    esc / ctlr + [

  5. 插入模式 & 命令模式 之间的转换
    必须先经过普通模式,再转换成命令模式

SSH

SSH是一种网络协议,用于计算机之间的加密登录。

SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的是OpenSSH,它是自由软件,应用非常广泛。

如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,我们后面用到的Git客户也集成了SSH

格式:ssh [email protected]
    user  代表真实存在的用户
    host  代表要登录的远程计算机

常见有两种加密技术,分别是对称性加密和非对称性加密,  SSH属于后者。

对称加密算法在加密和解密时使用的是同一个密钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥分别是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

工作原理

公钥和私钥是成对出现,可以通过ssh-keygen -t rsa来创建,既可以通过密钥来加密数据,也可以通过私钥来加密数据,如果是以公钥进行的数据加密,只能与之相对应的私钥才可以解密,相反如果以私钥进行的数据加密,则只能与之对应的公钥才可以将数据进行解密,这样就可以提高信息传递的安全性。

免密码登录(待定)
我们可以将本地机器上的公钥保存到特定的远程计算机上,这样当我们再次登录访问这台远程计算机时就可以实现免密码登录了。
1、ssh-keygen -t rsa会创建公钥和密钥(默认在用户目录/.ssh目录下)
2、ssh-copy-id [email protected]添加到对应远程主机的用户目录/.ssh目录下
3、也可以登录远程主机,进入到用户目录/.ssh目录下手动创建authorized_keys文件,并将自已的公钥粘入该文件。

版本控制工具 Version Control System (VCS)

是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 这个系统可以自动帮我们备份文件的每一次更改,并且可以非常方便的恢复到任意的备份(版本)状态。

本地版本控制工具 (WebStorm VCS)

​ 版本库存储在本地

集中式版本控制工具 (SVN TFS VSS)

版本库存储在中央服务器,所有人都需要从服务器获取版本,修改之后要将版本提交到服务器

实际开发环境,一个项目通常是由多人协作共同完成的,如何让在不同终端上的开发者协同工作成了亟待解决的问题,集中式版本控制系统便应运而生了。它通过单一的集中管理的服务器,保存所有文件的修订版本,协同工作的开发者都通过客户端连到这台服务器,取出最新的文件或者提交更新。其代表为SVN

这种方式很好解决了多人协同开发的问题,但是也有一个弊端,如果集中管理的服务器出现故障,将会导致数据(版本)丢失的风险,另外协同开发者从集中服务器中更新数据时,严重依赖网络,如果网络不佳,也给开发带来诸多不便。

分布式版本控制工具 (Git)

分布式版本控制系统,则不需要中央服务器,每个协同开发者都拥有一个完整的版本库,这么一来,任何协同开发者用的服务器发生故障,事后都可以用其它协同开发者本地仓库恢复。

由于版本库在本地计算机,也便不再受网络影响了。如果要将本地的修改,推送给其它协同开发者,还需要一台共享服务器,所有开发者通过这台共享服务器同步和更新数据

布式版本控制系统弥补了前面两种版本控制系统的缺陷,成为了版本控制的首选方案。其代表就是Git。

git

Git管理我们文件的4种状态,
分别为未追踪(untracked)、已提交(committed)、已修改(modified)和已暂存(staged)
由此引入 Git 项目的3个工作区域的概念:Git 仓库、工作目录以及暂存区域。

Git仓库目录
    是Git用来保存项目的元数据和对象数据库的地方。 这是Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录
    是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域
    是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”(Index),不过一般说法还是叫暂存区域。
基本的Git工作流程如下:
1、在工作目录中修改文件。
2、暂存文件,将文件的快照放入暂存区域。
3、提交文件,找到暂存区域的文件,将快照永久性存储到Git仓库目录。

git的常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
git config --global user.name "用户名"
git config --global user.email "邮箱"
上面两条为配置命令,每个电脑只需要执行一次
git init 在当前文件夹下初始化一个git仓库, 每个项目只需要执行一次
git status 查看当前工作目录下文件的状态
git add 将文件添加到暂存区
-A 将所有的文件都添加到暂存区
git commit -m "备注信息" 将文件从暂存区提交到版本库里面,并且生成新的版本
git log 查看所有的提交历史
git reset --hard 版本号 将代码恢复到指定的版本
git chechout 文件名 将文件从暂存区恢复到工作目录

git的分支

在我们的现实开发中,需求往往是五花八门的,同时开发个需求的情况十分常见,比如当你正在专注开发一个功能时,突然有一个紧急的BUG需要你来修复,这个时候我们当然是希望在能够保存当前任务进度,再去修改这个BUG,等这个BUG修复完成后再继续我们的任务。如何实现呢?

Git通过创建分支来解决实际开发中类似的问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
git init --bare 初始化一个远程裸仓库
git branch 分支名 查看 / 创建一个分支
git branch -a 查看全部分支
git remote add 别名 远程仓库地址 给远程仓库地址设置一个别名
远程仓库管理 add show rename rm
git add file 跟踪文件
git checkout --file (已跟踪)撤销更改
git checkout 分支名 切换分支
git checkout -b 分支名 切换并且创建一个新的分支
git fetch 抓取远程数据
git push 远程仓库地址 本地分支名:远程分支名 将本地数据推送到远程仓库
git pull 远程仓库地址 获取远程数据并且合并
git merge 合并分支
git branch -d 分支名称 删除一个分支
git clone 远程仓库地址 新创建目录名称 获取远程仓库中的代码

tip: 通过git clone命令获取到的项目,会有一个默认的远程地址origin,这个origin中的地址就是clone命令执行的时候的那个地址!