Shell

基本概念

shell俗称壳,为使用者提供使用界面,例如DOS下command以及后来的cmd.exe
shell分类

图形界面shell,提供友好的可视化界面,例如windows操作界面,Linux系统上的GNOME
命令行shell,通过键盘输入的方式调用应用程序,例如windows下的cmd.exe、windows powershell,Linux系统的Bourne Shell(sh)、Bourne Again shell ( bash)等

shell通过指令操作Kernel,Kernel又去操作计算机硬件

Git——基本操作-风君雪科技博客

Git

在windows下使用bash可以安装Git,此软件集成了大多数bash命令
右键Git上边框空白处,会有Options选项可以进行基本设置

Text设置:根据设置的字体大小,Git操作界面会随之变大变小
Window设置:可以单独界面大小

桌面右键会出现Git Bash Here,此功能可以快速访问被右键的文件夹,如果没有也可以通过主动添加的方式 http://blog.csdn.net/novav/article/details/53820443

Bash常见命令

命令 [-options]  [参数],这是命令的基本形式
pwd (Print Working Directory) 查看当前目录
cd (Change Directory) 切换目录,如 $ cd e:

$ cd e: 代表切换到e盘符下
$ cd works 代表切换到e盘符下的works文件夹
$ cd c:/user 代表切换到c盘符下的user文件夹
$ cd .. 代表切换到上一级目录,一个点代表当前目录,两个点代表上一级目录

ls (List) 查看当前目录下内容,如 $ ls -a

$ ls images,这表示查看当前工作目录下的images文件夹的内容,需要注意这并没有切换目录
查看目录下内容有时候会多出两个隐藏的文件夹 $RECYCLE.BIN/ 和 System Volume Information/ 这个我们不需要去管它
$ ls -a 代表查看当前工作目录的所有内容,其中包括隐藏目录,还有./ 和 ../ ,这都不用管它
$ ls -l  代表以列表形式查看当前工作目录的内容,详细列表包括权限、文件大小、创建时间、文件名称,文件总数
$ ls -a -l 代表以上综合,还可以这样写$ ls -al
$ ls -al images 代表查看images下的所有内容,而且是列表形式展现,注意images参数在最后

mkdir (Make Directory) 创建目录,如$ mkdir blog,也可以创建多个文件夹,中间用空格隔开,例如$ mkdir css js images
touch 创建文件,如$ touch index.html,也可以在目录下指定文件夹创建文件,例如$ mkdir js/app.js
cat 查看文件全部内容,如 $ cat index.html  
more可以查看全部信息,但是windows下不支持
less可以查看部分信息,例如$ less index.html,但是敲击键盘回车键或者空格可以往下继续查看剩余信息,键盘Q可以退出查看 

rm (remove) 删除文件,如$ rm index.html

rmdir (Remove Directory) 删除文件夹,只能删除空文件夹,不常用,例如 $ rmdir css

rm -r 可以删除文件夹下的所有文件,包括此文件夹,例如$ rm -r js,会删除js文件夹,即使文件夹内有内容,-r是递归的意思

mv (move) 移动文件或重命名,如 mv index.html ./demo/index.html

$ mv index.html images/index.html 第一个参数是被剪切的文件,第二个参数是移动到哪里,中间用空格隔开
$ mv index.html images/mo.html,在剪切到指定目录下的同时,也可以对原文件重命名
$ mv index.html mo.html,剪切到当前,这完全就是重命名的操作

cp (copy) 复制文件,基本操作同上的mv,在复制过程中也对文件重命名

head 查看文件前几行,如$ head -n 5 index.html,也可以简写 $ head -5 index.html

tail 查看文件后几行 –n,如 $ tail -n 5 index.html、$ tail -5 index.html

tab 自动补全,连按两次会将所有匹配内容显示出来

history 查看操作历史 $ history

 >和>>都是重定向的符号,可讲输出结果保存到指定目录下的文件中

定向的过程其实就输出的过程,好比我们$  ls 查看当前任务目录下的内容,它的结果会打印在当前界面
$ ls > ../index.html,index.html中的内容将被输出的结果完全替换
$ echo  i love you>>../index.html,会将输出的结果追加到index.html中 

weget是下载的意思,但是windows不支持
tar是解压的意思,但是此指令无法解压zip和rar,有专门执行解压zip的指令unzip
curl网络请求,可以指定get请求还是post请求,以及参数,可以通过发送请求,将接收的数据重定向到指定文件中,例如$ curl http://www.baidu.com >> index.html
whoami查看当前用户 $ whoami

| 管道符可以将多个命令连接使用,上一次(命令)的执行结果当成下一次(命令)的参数。

grep 匹配内容,一般结合管道符使用,$ grep i index.html 在文件index.html中匹配有i的字符串,$ ls | grep i 在ls输出的结果中匹配有i的字符串

Vi编辑器

基本概念

如同windows下的记事本,vi编辑器是linux下的标配,通过它我们对文件进行编辑
vi编辑器提供了三种模式,命令模式、插入模式、底行模式,每种模式下的操作的作用都不一样

命令模式主要是中转的作用
在命令行模式下输入i和a之后就会进入插入模式,此时可以对文件进行编辑
如果此时想去底行模式,那么就需要先esc进入命令行模式,再shift+:进入底行模式

Git——基本操作-风君雪科技博客

基本使用

命令模式 

i进入编辑模式,当前光标处插入
a进入编辑模式,当前光标后插入 
 A进入编辑模式,光标移动到行尾
o进入编辑模式,当前行下面插入新行
O进入编辑模式,当前行上面插入新行
ZZ保存并退出
u撤销操作,可多次使用
dd删除当前行
yy复制当前行
p粘贴复制内容
ctrl+f向前翻页
ctrl+b向后翻页

底行模式

w保存,w index.html 是将文件另存为,此时当前文件并没有保存
q退出
wq保存并退出
e!撤销更改并返回到上次保存的状态
q!不保存强制退出
set nu设置行号
编辑模式

编辑模式下与windows编辑器相似

SSH

基本概念

SHH是一种网络传输协议,用于计算机之间的加密登录
SHH属于非对称性加密,需要两个密钥来进行加密和解密,分别是公钥和私钥

工作原理

在第一次登录时,服务器会将公钥发送过来,我们通过这个公钥将自己的数据进行加密
服务器接收数据后,通过自己的私钥对数据进行解密

基本操作

$ ssh student@192.168.0.1,git内提供了ssh命令,student是用户,ip地址是服务器的地址
若是连接成功,会在用户目录下会多新建一个ssh文件夹,里面存储的就是服务器发来的公钥
当我们根据提示要求输入密码的时候,就会根据公钥进行加密传输
成功登录之后,我们可以进行操作,$ scp index.html student@192.168.0.1:/home/work,将本地的index.html文件复制到了服务器下的work目录

版本控制器

基本概念

版本控制(Version  Control Systems)是记录若干文件变化,以便查阅特定版本修订的情况,这个系统可以自动帮我们备份文件的每一次更改,并且可以方便的恢复到任意版本的备份状态

版本分类

本地版本控制系统,功能单一,现在很少使用,无法完成多人协同开发
集中式版本控制系统,通过单一的集中管理的服务器达到多人协同开发,其代表就是SVN
分布式版本控制系统,不需要中央服务器,每个协同开发者都有一个完整的版本库,这样即使协同开发者的服务器出现故障,也可以通过使用其他的协同开发人员的本地仓库恢复

git工作原理

基本概念

gi管理分为三种状态:已提交(committed)、已修改(modified),已暂存(staged),由此引入三个工作区域的概念:git仓库、工作目录、暂存区域
git仓库是用来保存项目的元数据和对象数据库的地方,从其他计算机克隆仓库的时候,就是从这里拷贝的数据
工作目录是我们能看的见,是我们使用和修改的地方
暂存区域是一个保存了我们将要提交的文件列表数据,一般在git仓库的目录下

工作流程

在工作目录中修改文件
将文件放入暂缓区域
讲暂缓区域文件提交到git仓库

基本使用

配置用户信息

配置用户信息的原因是记录开发者信息,以便在版本控制中记录开发者的操作行为
$ git config –global user.name wqx 记录用户名
$ git config –global user.email wqx0714@163.com 记录用户邮箱
$ git config –list 查看配置信息中是否存储了用户的信息,也可以通过桌面查看用户的文件夹,里面会有.gitconfig的配置文件
–global是配置当前用户所有仓库
–system配置当前计算机上的所有用户的仓库
配置操作只需要一次,可以重复使用

初始化仓库

$ git init,在进入项目的根目录,例如work,执行$ git init,就会创建一个.git隐藏目录,可以通过$ ls -a 查看,这个.git目录就是仓库,会存储我们提交的各个历史版本的数据

查看状态

$ git status 会显示工作区域下文件的状态
在首次没有执行add命令,工作区域的文件会出现红色Untracked files(下图1),这些都是没有被跟踪的目录,此时这种状态下,你修改的文件是不会被跟踪的,所以我们需要先将工作区执行add操作
$ git add -A 执行之后,执行status命令,上面红色文件就被显示绿色(下图2),表示已经在暂存区域可以被提交,此时再去修改文件就会显示此文件被修改
当我们再次在工作区域的根目录下创建一个文件夹时候,执行status命令,又会显示一个没有跟踪被红色标注的红色文件(下图3),注意文件夹若是空的git会直接忽略

Git——基本操作-风君雪科技博客

Git——基本操作-风君雪科技博客

Git——基本操作-风君雪科技博客

添加文件到缓存区

$ git add -A  或者 $ git add * 都是文件提交到暂缓区的命令,也可以$ git add index.html 提交指定路径下的文件
$ git checkout index.html 可以将缓存区的文件还原到工作区,达到撤销更改的目的

提交文件

$ git commit -m ‘备注信息’ 可以将暂缓区的文件全部提交到仓库存储
$ git log 可以查看之前提交仓库的信息,如下图
$ git reset –hard 提交ID 可以回到之前保存的状态,再次$ git log会发现最后一次的状态变成了我们回退的状态
当我们第二天再去对工作区进行修改时,不需要进行add命令,因为之前已经提交了一个版本的数据

忽略文件

一些文件可以不被跟踪,当然也可以不提交
在工作区根目录下创建.gitignore文件,在里面输入不需要跟踪的文件,注意格式是用回车换行隔开

 Git——基本操作-风君雪科技博客

git分支

基本概念

在实际开发中,在我们专注于某一个功能比如支付功能进行开发时,可能还需要应急的去改动原来版本中的bug,或者应急的在原来版本添加一个小功能例如评论功能,现在我们已经在写支付功能当然是没写完,此时如果去应急修改完提交上去,也会把半半拉拉的支付功能的代码提交上去,这样显然是不合适,所以这里引出了git创建分支的概念,它能够解决一人多任务的问题
在实际开发中,其实所有的提交都是在分支基础上提交的

基本使用

在初始化仓库git init之后,至少提交commit一次,系统才会默认创建一个master的分支
git branch money,创建一个money分支,分支在原有版本的节点上创建的,称为子分支
git checkout money,切换分支,此时工作区就是在money这个分支上,工作区所有的修改会提交到money上
git branch 查看分支,带*号,表示此时工作目录处于对应分支上
git merge master 合并分支,在处于money分支的时候,执行此命令是将master的数据融合到money上
需要注意的是money分值与master分支是继承关系,money分支上具有master分支上的所有存盘点
git branch -d money 删除money分支,-D是强制删除

git共享仓库

基本概念

上面是本地的git操作,可以达到一人多任务的要求,但是多人协同该怎么办呢。比如自己和同事同时开发,但是同时写的是评论功能,自己写的是支付功能,当自己想要拿到同事的登录的时候应该怎么办呢?此时就引出了git共享仓库的概念,借助一个共享(远程)仓库,大家把自己开发的功能的代码放进去,别人需要的时候就可以去这个仓库拿。

基本使用

共享仓库的创建,可以使用ssh,具体操作如上介绍,在公司服务器上创建一个.git结尾的文件夹,比如是work.git,之后执行git init –bare命令,这就创建了一个裸仓库
假设自己电脑上有一个项目,我们init,add,commit之后,git push student@192.168.0.1:/home/work.git master 就将我们分支master发送到了共享仓库中,共享仓库中$ ls 是查看不到上传的文件的,只能让同事去取
同事那边目前是还没有数据的,但是需要init,保证是一个空仓库,但是不需要add,commit操作,之后执行git pull student1@192.168.0.1:/home/work.git master,此时我们就拿到了student1上传的数据
同事拿到了数据,发现只是初始化了项目,还没有功能,此时同事需要开发一个登录功能,于是git branch login 创建login分支(分支策略),之后切换到login分支,对工作区进行修改,最后add,commit,最后完成登录功能
git push student1@192.168.0.1:/home/work.git login 同事最后将开发好的登录功能上传到共享仓库,此时共享仓库又多了一个login的存盘点,必须是上传login分支,因为你只在login分支上进行了工作区的修改
git pull student1@192.168.0.1:/home/work.git login 自己从共享仓库中拿到了同事上传的login分支,login分支的数据替换了自己的master分支的数据
长串的远程地址,可以用别名代替,git remote add ball student1@192.168.0.1:/home/student/work.git,下次再向共享仓库提交或者下载数据就用ball这个别名代替就行了

克隆

接着上面的说,如果还有个同事也要参与这个项目,那么可以克隆clone方式
执行git clone sudent1@192.168.0.1:/home/work.git 这里不需要init操作,结尾也不需要指定分支,此时这个同事就会拿到整个远程仓库的数据,而且工作区的目录就是work,所以clone操作就等于mkdir+cd目录下+git init+pull操作
工作区根目录名称想要修改的话,只需要结尾后空格写上自己的命名就行了 git clone sudent1@192.168.0.1:/home/work.git selfname 
克隆后的数据,有个优势就是再次向共享仓库提交分支数据的时候,无需定义远程别名,系统默认设置origin就是远程地址,git push origin ..