摘要: 在学习git版本之前需要先了解几个概念,什么是shell? 什么是版本管理? 常用的命令行命令? 什么是vim? 什么是SSH因为清楚的了解了这些才能更好的理解git。
(1)什么是shell?
在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。这句话感觉很抽象,很难理解,其实用大白话说他就是是一个壳子,是相对于核心而言的,涉及到计算机的一个工作原理,比如操作计算机的人点击任务栏中的小喇叭就可以控制其声音的变化,是不是感觉很神奇,喇叭发出声音应该是计算机硬件的事,操作者并没有直接操作硬件,而是通过点击小喇叭图标就能就能让硬件起作用,这到底是怎么一回事?其实硬件发生作用是由计算机内核(核心)发生作用的,虽然我们不能直接操作硬件,但是却可以操作内核,让内核去操作硬件,就可以让硬件运行起来。这时候又会出现一个问题,让一个开发者直接去操作内核显然是不行的,这时候就可以在这个核上进行操作,在上面包装一层壳,这个壳可以是一个图形界面,如widow系统就是一个图行操作界面,我们可以通过操作图形界面这个壳就可以间接的操作核,再由核驱动硬件。也就是说操作这操作壳,由壳来驱动核,再由核来驱动硬件。按照这么理解我们的windows操作系统就是一个图形界面壳。当然除了图形界面的壳(shell),还可以是命令的壳(shell),如windows操作系统下有一个cmd.exe,这个就是命令行的shell,再linux系统下有Boume again shell 这个命令行shell,简称bash。bash在windows系统中是没有的,因此在windows系统是不能直接使用bath的,但是可以通过安装一些软件应用程序来模拟对应的bath的大部分功能。恰好git就提供了这样的一个bash,我们称之为git bash.我们安装好git后就可以使用bash命令了,安装方式很简单,直接下一步下一步的方式来安装。
(2) bash命令
- (1) bash命令的格式:首先是一个命令,这个命令多种多样,命令后面是一个[],表示可选项,在所有的技术文档中的中括号都表示可选项,在可选项后面又有[参数],表示要传递给命令的参数,也就是说一般一个命令都是由这三部分组成的,中括号的部分是可选的。如下:
命令 [-options] [参数] 如: git commit -m '提交的内容'
- (2)常见的bath命令:如下:
- cd (change directory) 表示切换目录
- ls (list) 表示查看当前目录下的内容
- mkdir (make directory) 表示创建目录
- touch 创建文件,如touch index.html
- cat 查看文件全部的内容如 cat index.html
- more | less more和less都表示查看文件,less是以分页的方式来查看,通过按空格来换页
- rm 删除文件
- rmdir 删除目录 ,必须是是空目录才能删除
- rm -r 表示递归的删除,如rm -r css/ 可以删除非空的目录
*mv (move) 移动目录或者重命名目录,或者剪贴目录- (copy) 复制目录
- head 如 head -n 10 index.html 或者 head -10 index.html表明查看文件的前10行
- tail 如tail -n 10 index.html 表示查看文件的后10行
- history 可以查看操作命令的历史
- >和>> 表示重定向如ls > index.html 表示的是: ls本身是输出目录列表到控制台,但是通过重定向,将其输出到了index.html文件中,而不是控制台了。并且会将index.html中之前的内容替换掉。>>也表示重定向,但是表示的是追加而不是替换。
- echo 表示输出 比如echo hello 就会输出hello,如果用echo hello > index.html 就会输出到index.html。
- wget 下载
- tar 解压
- curl 网络请求 如 curl htttp: www.baidu.com
- | 表示管道符,可以将多个命令连接起来使用
- grep 正则匹配如 grep i index.html 表示在index.html查找以i开头的,如ls | grep s 表示将ls列出的结果当作grep的参数传递给grep 中匹配到s的。
ps:以上命令都是在说如创建、删除,剪贴,重命名的操作,但是没有提及到编辑,那么如何进行编辑了?这就要用到编辑器了,如同windos中记事本一样,linux中也有对应的编辑器,叫做vim,接下来了解vi编辑器
(3) vi编辑器
vi中有一个命令vi,如vi index.html,就可以编辑index.html,但是必须注意的是vi index.html只是进入一个编辑界面,而不能直接编辑,要进行编辑需要配合vi的三种编辑模式来进行。分别是命令模式,输入模式和底行模式。当用vi进入的就是命令行模式,此时是不能进行编辑的,只有从命令行模式切换到输入模式才可以进行编辑,切换方式是输入字母i或者a,此时就进入到了输入模式,这时候可以随意改动,在输入模式将内容改动好后需要进入到底行模式才能进行保存,那么怎么样才能从输入模式到底行模式?需要在输入模式下按esc可以从输入模式回到命令行模式,然后从命令模式切换过去,方式是输入冒号,但是冒号必须依赖shift建,所以从命令行到底行需要输入shift+:,进入底行 模式就可以进行保存操作了通过在底行模式下输入w(write),保存并退出的话用wq,然后回车,不保存强制退出用q!。具体的命令如下:
底行模式下:
- wq 保存并退出
- q! 不保存强制退出
- e! 回到上一次保存的状态
- set nu 设置行号
命令行模式下:
- ZZ 保存并退出
- u 撤销操作,可多次使用吗,相当于windows中的ctrl+z
- dd 表示删除当前行
- yy 表示复制当前行,在光标当前行输入yy就可以将内容复制到剪贴板。
- p 粘贴内容,可以将剪贴板的内容粘贴到当前光标所在的行的位置
- ctrl + f 向前翻页
- ctrl + b向后翻页
- i 从命令行进入到输入模式,在当前光标处插入
- a 从命令行进入到输入模式,在当前光标后插入
- A 从命令行进入到输入模式,光标移动到行尾
- o 从命令行进入到输入模式,当前行下面插入新行
- O 从命令行进入到输入模式,当前行上面插入新行
(4) SSH是什么
ssh就像http一样也是一种网络协议, 常用语计算机与计算机之间的登陆操作,为什么会有这样的操作了?因为程序员最终的代码会放到服务器上去,当程序员开发完程序了,不可能拿U盘将代码拷到服务器上去,而是通过远程登陆到公司服务器,直接将代码通过远程推到服务器。可见用一台电脑登陆另一台电脑是很常见的事情。但是这种方式是在网络上进行的,存在数据安全问题,因为当输入用户名和密码通过网络远程登陆的过程中,有可能用户名和密码被别人拦截掉,然后别人登陆远程服务器进行非法操作,因此就有了像SSH这样的协议来对数据进行加密传输,不能直接用明文传输。比如我们输入的密码是123,传递的过程中就不能通过123进行传递,而是通过加密,这样,即使别人拦截掉他也看不懂。那么怎么样进行加密了?ssh加密协议提供了两种机制,如下:
【1】对称性加密:就是在加密的时候是一个密钥,对方在解密的时候使用同样的密钥,比如加密用fff,解密也用fff,也就是加密和解密用的是同样的密钥,但是对称性加密存在在缺陷,因为你用密钥加密了,但是对方不知道是用什么样的密钥来进行加密的,因此在加密的同时一同要将加密的密钥传递到对方,显然将密钥在网络上传递也不安全。因为密钥也可能被人拦截掉。那么这时候就有了更高级的非对称性加密。
【2】非对称性加密:非对称性加密由两种密钥,一种是公钥,一种是私钥。用公钥加密的数据只能用对应的私钥解开,如果用私钥加密的只能用对应的公钥来解密。这就是非对称性加密,当我们登陆服务器的时候,服务器会先将他的公钥传递过来,本地计算进行存储,下次传递数据时候将会使用该公钥对数据进行加密,然后将数据传递到服务器,服务器通过自己的私钥进行解密。
SSH只是一种协议,有着多种实现,比如openSSH,Putty,我们要学习的git客户端 也集成了SSH,提供了一个ssh这样的bash命令。可以通过ssh命令就是可以实现远程登陆,如要登陆ip为192.168.0.105这台计算机,可以通过如下命令:
ssh liquan@192.168.0.105
但是当我在本机上执行这条命令的时候并没有成功而是报了一个错误,ssh: connect to host 192.168.*. port 22: Connection refused,这是因为我登陆本机的时候没有安装ssh相关的服务,通过网上查看,Freesshd是一个免费的提供ssh服务的软件,从官网去下载下来下一步下一步安装,安装后启动服务即可,下载地址为http://www.freesshd.com/,此时执行 ssh liquan@192.168.0.105 这个命令,就可以登陆到192.168.0.105这台计算机。并且会在本地存储一个公钥,在这个目录下,C:\Users\Administrator.ssh,文件名为known_hosts,里面存储的就是公钥。
至此已经认识到了常用的shell命令,vim编辑器,ssh原理,接下来就可以进入git版本的学习了。