Linux git服务端搭建和公钥免密码登录

Linuxliuliangsong 发表了文章 • 0 个评论 • 208 次浏览 • 2016-12-16 15:54 • 来自相关话题

一、实验环境:git服务端:操作系统:Red Hat Enterprise Linux 7.1 64位服务端ip:10.0.0.101git软件:git version 1.8.3.1(yum方式安装)git客户端:操作系统:Windows 10 64位git软件: 二、Linux git服务端安装:1、安装git命令:  为了方便和稳定性,能使用yum安装的我们尽量使用yum安装,没必要去编译安装:yum -y install git 2、添加用户git用于访问数据仓库:  这里我们创建一个"/storage"目录,用来存储数据。添加一个用户git,git的用户目录为“/storage/gitroot”,同时以后此目录也是我们的数据仓库根目录,以后所有的数据仓库存放在此目录下。将创建的git用户的shell设置为 “/usr/bin/git-shell”的目的是禁止git用户通过shell登录,保证安全:mkdir -p /storage
useradd -d /storage/gitroot/ -s /usr/bin/git-shell git
# 设一个密码
passwd git 3、创建第一个数据仓库aiezu.com:  这里我们创建第一个数据仓库“aiezu.com”,用来存放我们正在开发的网站aiezu.com。同时设置权限为归git用户和组所有:cd /storage/gitroot
git init --bare aiezu.com
chown -R git.git /storage/gitroot/
 4、git服务端安装完成:
  按上面配置好后,一个数据仓库已经配置好了,数据仓库的URL为:"git@10.0.0.101:aiezu.com",用户名名为"git",密码为上面创建的“git”用户的密码。
 三、git免密码登录:  上面在Linux配置好了git服务端,但是是需要密码登录的。如果希望实现免密码登录,需要在客户机的用户目录下".ssh"文件夹生成一对"公钥/私钥",并将"公钥"内容添加到git服务端的git用户根目录下的".ssh/authorized_keys"文件中,这里是“/storage/gitroot/.ssh/authorized_keys”文件,这样就可以通过“公钥/私钥”认证,达到免密码登录的目的。
  简单的说"B服务器"的“git”用户目录下“.ssh/authorized_keys”文件中如果有公钥,与"A主机"当前登录用户的根目录下私钥文件“.ssh/id_dsa”是成对关系,那么B就能以“git”用户无需密码登录到A。
 1、git免密码登录windows客户端配置:  windows的git客户端,在安装目录下,一般有"git-bash.exe"文件,可以用来生成"公钥/私钥"对。打开“git-bash.exe”文件,进入bash命令行。运行下面命令,生成"公钥/私钥"对:mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls  直接回车就可以看到在目录下生成了两个文件:id_rsa(私钥)、id_rsa.pub(公钥)。
 2、git免密码登录linux客户端配置:  Linux客户端直接在bash使用"ssh-keygen"命令生成公钥/私钥对即可,如果没有"ssh-keygen"命令,需要安装"openssh"包,运行"yum -y install openssh"即可:mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls  3、git免密码登录服务端配置:  在git服务端,在git用户目录下创建一个“.ssh”目录,并在".ssh"命令下添加一个“authorized_keys”文件。记住,每次使用root账户添加文件后,要将文件的所有者变更为git用户,否则会出现文件权限问题:mkdir /storage/gitroot/.ssh
touch /storage/gitroot/.ssh/authorized_keys
chown -R git.git /storage/gitroot/.ssh/  然后将上面在git客户端生成的公钥"id_rsa.pub"的内容追加到authorized_keys文件中去,authorized_keys文件可以放多台客户机的公钥,一条公钥一行即可。这样,authorized_keys文件中有公钥的客户机,即可免密码登录到服务器了。
 4、免密码登录测试:  按上面方法配置好后, 使用git命令“git clone git@10.0.0.101:aiezu.com aiezu.com”,在客户端成功将git服务端的数据仓库克隆到本地的aiezu.com目录: 查看全部

一、实验环境:

git服务端:

  • 操作系统:Red Hat Enterprise Linux 7.1 64位
  • 服务端ip:10.0.0.101
  • git软件:git version 1.8.3.1(yum方式安装)

git客户端:

  • 操作系统:Windows 10 64位
  • git软件:
 

二、Linux git服务端安装:

1、安装git命令:

  为了方便和稳定性,能使用yum安装的我们尽量使用yum安装,没必要去编译安装:
yum -y install git

 

2、添加用户git用于访问数据仓库:

  这里我们创建一个"/storage"目录,用来存储数据。添加一个用户git,git的用户目录为“/storage/gitroot”,同时以后此目录也是我们的数据仓库根目录,以后所有的数据仓库存放在此目录下。将创建的git用户的shell设置为 “/usr/bin/git-shell”的目的是禁止git用户通过shell登录,保证安全:
mkdir -p /storage
useradd -d /storage/gitroot/ -s /usr/bin/git-shell git
# 设一个密码
passwd git

 

3、创建第一个数据仓库aiezu.com:

  这里我们创建第一个数据仓库“aiezu.com”,用来存放我们正在开发的网站aiezu.com。同时设置权限为归git用户和组所有:
cd /storage/gitroot
git init --bare aiezu.com
chown -R git.git /storage/gitroot/

 4、git服务端安装完成:
  按上面配置好后,一个数据仓库已经配置好了,数据仓库的URL为:"git@10.0.0.101:aiezu.com",用户名名为"git",密码为上面创建的“git”用户的密码。
 

三、git免密码登录:

  上面在Linux配置好了git服务端,但是是需要密码登录的。如果希望实现免密码登录,需要在客户机的用户目录下".ssh"文件夹生成一对"公钥/私钥",并将"公钥"内容添加到git服务端的git用户根目录下的".ssh/authorized_keys"文件中,这里是“/storage/gitroot/.ssh/authorized_keys”文件,这样就可以通过“公钥/私钥”认证,达到免密码登录的目的。
  简单的说"B服务器"的“git”用户目录下“.ssh/authorized_keys”文件中如果有公钥,与"A主机"当前登录用户的根目录下私钥文件“.ssh/id_dsa”是成对关系,那么B就能以“git”用户无需密码登录到A。
 

1、git免密码登录windows客户端配置:

  windows的git客户端,在安装目录下,一般有"git-bash.exe"文件,可以用来生成"公钥/私钥"对。打开“git-bash.exe”文件,进入bash命令行。运行下面命令,生成"公钥/私钥"对:
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls
  直接回车就可以看到在目录下生成了两个文件:id_rsa(私钥)、id_rsa.pub(公钥)。
 

2、git免密码登录linux客户端配置:

  Linux客户端直接在bash使用"ssh-keygen"命令生成公钥/私钥对即可,如果没有"ssh-keygen"命令,需要安装"openssh"包,运行"yum -y install openssh"即可:
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
ls
  

3、git免密码登录服务端配置:

  在git服务端,在git用户目录下创建一个“.ssh”目录,并在".ssh"命令下添加一个“authorized_keys”文件。记住,每次使用root账户添加文件后,要将文件的所有者变更为git用户,否则会出现文件权限问题:
mkdir /storage/gitroot/.ssh
touch /storage/gitroot/.ssh/authorized_keys
chown -R git.git /storage/gitroot/.ssh/
  然后将上面在git客户端生成的公钥"id_rsa.pub"的内容追加到authorized_keys文件中去,authorized_keys文件可以放多台客户机的公钥,一条公钥一行即可。这样,authorized_keys文件中有公钥的客户机,即可免密码登录到服务器了。
 

4、免密码登录测试:

  按上面方法配置好后, 使用git命令“git clone git@10.0.0.101:aiezu.com aiezu.com”,在客户端成功将git服务端的数据仓库克隆到本地的aiezu.com目录:
linux_git_server_nopasswdlogin.png

vim go语言IDE环境Tagbar插件和NERDTree插件安装

Linuxliuliangsong 发表了文章 • 0 个评论 • 481 次浏览 • 2016-12-14 15:49 • 来自相关话题

  Tagbar插件和NERDTree插件是vim搭建go语言IDE环境必不可少的两个插件。下面是vim编辑go语言源码时,启动Tagbar插件和NERDTree插件后的效果图:


 
 一、安装前准备:  在执行本文的vim安装Tagbar和NERDTree前,需要先安装好go语言环境、以及安装好vim的插件管理器Vundle插件和go语言基础插件“vim-go”,这些操作都在另外一篇文章《Vim go语言基础IDE开发环境安装(Vundle/vim-go)》里面介绍,这里就不再做介绍,下面介绍Tagbar和NERDTree插件的安装。
 二、安装vim Tagbar插件:  Tagbar插件能在侧边栏展示当前go源码中的所有定义的常量、变量、函数等,并能从侧边栏快速跳转到它们的定义处 。安装好后可以使用":help Tagbar"命令获得使用帮助,也可以去官网查看相关文档:http://majutsushi.github.io/tagbar/。
 1、安装gotags:  gotags是go语言编写的,直接使用go get命令安装:go get -u github.com/jstemmer/gotags 2、安装ctags:yum -y install ctags 3、安装vim Tagbar插件:  在"~/.vimrc"插件填写处添加下面几行,保存后重新启动vim(这里我们将Tagbar插件的启动命令注册为“F8键”)。再在命令模式运行“:PluginInstall”命令安装插件,直到"Tagbar"插件安装完成:Plugin 'Tagbar'
" 设置tagbar的窗口宽度
let g:tagbar_width=30
" 映射Tagbar的快捷键,按F8自动打开
map <F8> :TagbarToggle<CR> 4、Tagbar插件启动测试:  安装好Tagbar插件后,用vim打开go文件,输入“:Tagbar”或者按"F8"就可以打开Tagbar。可以使用"CTRL+W+方向键"实现窗口切换,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。下面是Tagbar的常用的快捷键和命令:命令描述F1关闭/显示帮助信息;q关闭Tagbar窗口;x放大/缩小Tagbar窗口;s项目排序切换;+, <kPlus>, zo展开折叠;-, <kMinus>, zc收起折叠;o, za折叠收起\展开切换;*, <kMultiply>, zR展开所有折叠;=, zM收起所有折叠;回车转到标签定义处,并且光标跳转到标签定义处;p转到标签定义处,但光标停留在Tagbar的窗口;P在预览窗口显示标签;<C-N>跳到下一个上级标签;<C-P>跳到上一个上级标签;<Space>显示标签定义;
 三、vim安装NERDTree插件:  NERDTree插件能以树型结构在侧边栏展示当前工作目录下所有文件夹和源文件,并支持快速打开指定的源文件。安装好后可以使用":help NERDTree"命令获得使用帮助,也可以去官网查看相关文档:https://github.com/scrooloose/nerdtree​。
 1、安装NERDTree插件:  在"~/.vimrc"插件填写处的继续添加下面两行,保存并重新启动vim(这里我们将NERDTree插件的启动命令注册为“F7键”)。然后再在命令模式运行“:PluginInstall”命令安装插件,直到"NERDTree"插件安装完成:Plugin 'scrooloose/nerdtree'
map <F7> :NERDTreeToggle<CR> 2、NERDTree插件启动测试:  安装好Tagbar插件后,用vim打开go文件,输入“:NERDTree”或者按"F7键"就可以启动NERDTree。下面是NERDTree的常用的快捷键和命令: 命令描述 ?显示帮助信息;打



树F7打开或关闭NERDTree,此键可以根据自己需求定义。:NERDTreeToggle同F7:NERDTree打开NERDTree:NERDTreeClose关闭NERDTreeq关闭这个NERDTree窗口;A调整NERDTree窗口大小(最大化、最小化)书
签:Bookmark <name>将目录树保存为指定名字的书签;:NERDTreeFromBookmark <name>打开指定书签名的目录树;:ClearBookmarks <name>删除指定书签;:ClearAllBookmarks删除所有书签;过
滤I大写"i",显示或者隐藏"."号开头的文件和目录;f切换是否使用文件筛选;F切换是否显示文件;B切换是否显示书签表;根

录:NERDTreeCWD将CWD设为目录树根目录;CD将CWD目录作为目录树的根目录;C将当前目录作为目录树的根目录;u将当前根目录的上级目录作为根目录;U同u;cd将选定的目录作为CWD目录;刷
新R刷新当前根目录r刷新当前目录 目
录o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;O递归打开当前目录下的所有目录x关闭父目录;X关闭所有子目录;定
位:NERDTreeFind在目录树中定位到当前打开的文件;P跳转到根目录p跳转到上层目录K到同级第一个节点J到同级最后一个节点k跳转到上一个节点;j跳转到下一个节点;<C-K>跳转到同级上一个节点;<C-J>跳转到同级下一个节点;文
件m显示文件系统管理菜单
(添加、删除、移动、复制、现在属性等操作)o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;go打开目录树光标所在文件,但光标依然保留在目录树中;i在水平分割割的窗口中打开选定文件;gi同i,但光标依然保留在目录树中;s在垂直分割割的窗口中打开选定文件;gs同s,但光标依然保留在目录树中;t在新标签页中打开文件,并使新的标签到focus状态;T在新标签页中打开文件,保留原标签的focus状态; 查看全部
  Tagbar插件和NERDTree插件是vim搭建go语言IDE环境必不可少的两个插件。下面是vim编辑go语言源码时,启动Tagbar插件和NERDTree插件后的效果图:
linux_vim_golang_tagbar_nerdtree.png
 
 

一、安装前准备:

  在执行本文的vim安装Tagbar和NERDTree前,需要先安装好go语言环境、以及安装好vim的插件管理器Vundle插件和go语言基础插件“vim-go”,这些操作都在另外一篇文章《Vim go语言基础IDE开发环境安装(Vundle/vim-go)》里面介绍,这里就不再做介绍,下面介绍Tagbar和NERDTree插件的安装。
 

二、安装vim Tagbar插件:

  Tagbar插件能在侧边栏展示当前go源码中的所有定义的常量、变量、函数等,并能从侧边栏快速跳转到它们的定义处 。安装好后可以使用":help Tagbar"命令获得使用帮助,也可以去官网查看相关文档:http://majutsushi.github.io/tagbar/
 

1、安装gotags:

  gotags是go语言编写的,直接使用go get命令安装:
go get -u github.com/jstemmer/gotags
 

2、安装ctags:

yum -y install ctags
 

3、安装vim Tagbar插件:

  在"~/.vimrc"插件填写处添加下面几行,保存后重新启动vim(这里我们将Tagbar插件的启动命令注册为“F8键”)。再在命令模式运行“:PluginInstall”命令安装插件,直到"Tagbar"插件安装完成:
Plugin 'Tagbar'
" 设置tagbar的窗口宽度
let g:tagbar_width=30
" 映射Tagbar的快捷键,按F8自动打开
map <F8> :TagbarToggle<CR>
 

4、Tagbar插件启动测试:

  安装好Tagbar插件后,用vim打开go文件,输入“:Tagbar”或者按"F8"就可以打开Tagbar。可以使用"CTRL+W+方向键"实现窗口切换,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。下面是Tagbar的常用的快捷键和命令:
命令描述
F1关闭/显示帮助信息;
q关闭Tagbar窗口;
x放大/缩小Tagbar窗口;
s项目排序切换;
+, <kPlus>, zo展开折叠;
-, <kMinus>, zc收起折叠;
o, za折叠收起\展开切换;
*, <kMultiply>, zR展开所有折叠;
=, zM收起所有折叠;
回车转到标签定义处,并且光标跳转到标签定义处;
p转到标签定义处,但光标停留在Tagbar的窗口;
P在预览窗口显示标签;
<C-N>跳到下一个上级标签;
<C-P>跳到上一个上级标签;
<Space>显示标签定义;

 

三、vim安装NERDTree插件:

  NERDTree插件能以树型结构在侧边栏展示当前工作目录下所有文件夹和源文件,并支持快速打开指定的源文件。安装好后可以使用":help NERDTree"命令获得使用帮助,也可以去官网查看相关文档:https://github.com/scrooloose/nerdtree​。
 

1、安装NERDTree插件:

  在"~/.vimrc"插件填写处的继续添加下面两行,保存并重新启动vim(这里我们将NERDTree插件的启动命令注册为“F7键”)。然后再在命令模式运行“:PluginInstall”命令安装插件,直到"NERDTree"插件安装完成:
Plugin 'scrooloose/nerdtree'
map <F7> :NERDTreeToggle<CR>
 

2、NERDTree插件启动测试:

  安装好Tagbar插件后,用vim打开go文件,输入“:NERDTree”或者按"F7键"就可以启动NERDTree。下面是NERDTree的常用的快捷键和命令:
 命令描述
 ?显示帮助信息;




F7打开或关闭NERDTree,此键可以根据自己需求定义。
:NERDTreeToggle同F7
:NERDTree打开NERDTree
:NERDTreeClose关闭NERDTree
q关闭这个NERDTree窗口;
A调整NERDTree窗口大小(最大化、最小化)

:Bookmark <name>将目录树保存为指定名字的书签;
:NERDTreeFromBookmark <name>打开指定书签名的目录树;
:ClearBookmarks <name>删除指定书签;
:ClearAllBookmarks删除所有书签;

I大写"i",显示或者隐藏"."号开头的文件和目录;
f切换是否使用文件筛选;
F切换是否显示文件;
B切换是否显示书签表;


:NERDTreeCWD将CWD设为目录树根目录;
CD将CWD目录作为目录树的根目录;
C将当前目录作为目录树的根目录;
u将当前根目录的上级目录作为根目录;
U同u;
cd将选定的目录作为CWD目录;

R刷新当前根目录
r刷新当前目录 

o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;
O递归打开当前目录下的所有目录
x关闭父目录;
X关闭所有子目录;

:NERDTreeFind在目录树中定位到当前打开的文件;
P跳转到根目录
p跳转到上层目录
K到同级第一个节点
J到同级最后一个节点
k跳转到上一个节点;
j跳转到下一个节点;
<C-K>跳转到同级上一个节点;
<C-J>跳转到同级下一个节点;

m显示文件系统管理菜单
(添加、删除、移动、复制、现在属性等操作)
o打开\关闭文件或目录,打开文件时光标会跳到编辑区域;
go打开目录树光标所在文件,但光标依然保留在目录树中;
i在水平分割割的窗口中打开选定文件;
gi同i,但光标依然保留在目录树中;
s在垂直分割割的窗口中打开选定文件;
gs同s,但光标依然保留在目录树中;
t在新标签页中打开文件,并使新的标签到focus状态;
T在新标签页中打开文件,保留原标签的focus状态;

CentOS编译安装Vim让其支持lua

CentOSliuliangsong 发表了文章 • 0 个评论 • 240 次浏览 • 2016-12-14 10:23 • 来自相关话题

  vim有很多插件依赖于lua功能,但是默认系统自带的vim和使用yum安装的vim都不带lua功能,所以我们需要自己编译安装。要查看vim支不支持lua,打开vim,在命令模式输入“:version”即可以看到vim的一些版本和编译信息,其中"+lua"表示支持lua,"-lua"表示不支持lua。


 
 一、卸载自带的vim:  为了避免冲突,首先我们要卸载掉系统自带的vim,使用"yum -y remove vim-*"命令卸载:yum -y remove vim-* 二、安装vim相关软件:1、安装软件编译工具包集:yum -y groupinstall 'Development tools' 2、安装编译vim必须的依赖包:yum -y install ncurses ncurses-devel
yum -y install lua lua-devel 三、编译安装vim:  既然是编译安装,当然是安装最新版的vim,所以我们这次编译安装的是vim8.0。最新版本的vim可以从vim的官网上查找下载地址:http://www.vim.org/
 1、下载并解压vim安装包:cd /usr/local/src
wget ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2
tar -xjf vim-8.0.tar.bz2
cd vim80/ 2、编译安装支持lua的vim:./configure --prefix=/usr --with-features=huge --enable-rubyinterp --enable-pythoninterp --enable-luainterp --with-lua-prefix=/usr
make && make install 3、卸载编译安装的vim:  这一步现在不要执行,只是讲编译安装的卸载方法,用来将来的卸载;要卸载编译安装的vim,必须将vim的编译目录“/usr/local/src/vim80/”保留,在编译目录执行卸载操作:[root@aiezu vim80]# cd /usr/local/src/vim80/
[root@aiezu vim80]# make uninstall
[root@aiezu vim80]# make clean 四、安装完成:  安装完成后,使用"vim --version"命令可以看出,已经支持lua啦,效果如下图,开始安装你想要的插件吧。




  查看全部
  vim有很多插件依赖于lua功能,但是默认系统自带的vim和使用yum安装的vim都不带lua功能,所以我们需要自己编译安装。要查看vim支不支持lua,打开vim,在命令模式输入“:version”即可以看到vim的一些版本和编译信息,其中"+lua"表示支持lua,"-lua"表示不支持lua。
linux_vim_makeinstall_enable_lua.png
 
 

一、卸载自带的vim:

  为了避免冲突,首先我们要卸载掉系统自带的vim,使用"yum -y remove vim-*"命令卸载:
yum -y remove vim-*
 

二、安装vim相关软件:

1、安装软件编译工具包集:

yum -y groupinstall 'Development tools'
 

2、安装编译vim必须的依赖包:

yum -y install ncurses ncurses-devel
yum -y install lua lua-devel
 

三、编译安装vim:

  既然是编译安装,当然是安装最新版的vim,所以我们这次编译安装的是vim8.0。最新版本的vim可以从vim的官网上查找下载地址:http://www.vim.org/
 

1、下载并解压vim安装包:

cd /usr/local/src
wget ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2
tar -xjf vim-8.0.tar.bz2
cd vim80/
 

2、编译安装支持lua的vim:

./configure --prefix=/usr --with-features=huge --enable-rubyinterp --enable-pythoninterp --enable-luainterp --with-lua-prefix=/usr
make && make install
 

3、卸载编译安装的vim:

  这一步现在不要执行,只是讲编译安装的卸载方法,用来将来的卸载;要卸载编译安装的vim,必须将vim的编译目录“/usr/local/src/vim80/”保留,在编译目录执行卸载操作:
[root@aiezu vim80]# cd /usr/local/src/vim80/
[root@aiezu vim80]# make uninstall
[root@aiezu vim80]# make clean
 

四、安装完成:

  安装完成后,使用"vim --version"命令可以看出,已经支持lua啦,效果如下图,开始安装你想要的插件吧。
linux_vim_makeinstall_enable_lua_02.png


 

Vim go语言基础IDE开发环境安装(Vundle/vim-go)

Linuxliuliangsong 发表了文章 • 0 个评论 • 261 次浏览 • 2016-12-12 21:03 • 来自相关话题

一、linux安装go语言环境:1、下载go安装包:  打开golang官网下载地址https://golang.org/dl/,根据你的服务器CPU构架,下载对应的最新安装包,并解压。我的CPU构架是X86_64位的,所以下载的是“amd64.tar.gz”结尾的:[root@aiezu.com local]# cd /usr/local/
[root@aiezu.com local]# uname -m
x86_64
[root@aiezu.com local]# wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
[root@aiezu.com local]# tar -zxvf go1.7.4.linux-amd64.tar.gz  golang语言安装包是绿色安装包,无需编译,解压后设置好环境变量既可用。如果打不开官方网站,也可以从国内的网站上面下载:http://www.golangtc.com/download
 2、设置环境变量:  编辑“~/.bashrc”,在文件末尾添加下面四行,这样每次打开新的bash时,会自动读入下面四条环境变量:export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=~/go # 指定工作目录,你将来的开发代码放在$GOPATH/src/目录下  使用“. ~/.bashrc”命令将载入脚本:[root@aiezu.com ~]# echo $GOROOT

[root@aiezu.com ~]# . ~/.bashrc
[root@aiezu.com ~]# echo $GOROOT
/usr/local/go
[root@aiezu.com ~]# echo $GOBIN
/usr/local/go/bin 二、安装linux vim插件管理器Vundle:1、下载Vundle插件:  Vundle是vim的一个插件管理器, 它本身也是vim的一个插件。Vundle需要使用git命令来安装,如果无git命令,需要使用"yum -y install git"安装git命令。有git命令的,直接安装Vundle:mkdir -p ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim 2、编辑~/.vimrc文件设置插件:   然后运行“vim ~/.vimrc”命令创建".vimrc"文件,并在文件中添加如下内容,并保存退出:syntax on
" tab宽度和缩进同样设置为4
set tabstop=4
set softtabstop=4
set shiftwidth=4

set nocompatible

" 你在此设置运行时路径
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" Vundle 本身就是一个插件
Plugin 'gmarik/Vundle.vim'


"所有插件都应该在这一行之前
call vundle#end()

" filetype off
filetype plugin indent on 3、安装Vundle插件:  ".vimrc"文件配置好后,打开vim,在命令模式输入插件安装命令“:PluginInstall”命令,vim就会自动安装“.vimrc”中配置的所有插件,直到vim底部出现“Done”安装完成。



 三、安装vim go语言插件"vim-go":  vim-go插件go语言IDE环境的一个基础插件,本身就是十分强大的插件,它自带了go语言的语法高亮、语法检测等。同时还有一个十分好用的功能,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。安装好后,可以使用“:help vim-go”获得使用帮助,更多介绍请参考:https://github.com/fatih/vim-go。
 1、安装"vim-go"插件:  编辑"~/.vimrc"文件,在其中插件填写处(Plugin 'gmarik/Vundle.vim'下面)添加下面一行并保存退出:Plugin 'fatih/vim-go'  再次打开vim命令,在命令模式下运行“:PluginInstall”,提示“Processing 'fatih/vim-go'”,然后等待。直到提示“Done”插件安装完成。
  然后再将“~/.vimrc”中的“filetype off”前的双引号(双引号用与注释)去掉并保存文件。这时再编辑".go"文件,就有语法高亮功能了:



 2、安装vim-go必要的相关工具:  重新打开vim,输入“:GoInstallBinaries”命令,所有必要的二进制文件(gocode、godef、goimports...)将是自动下载并安装到"$GOBIN"目录或者"$GOPATH/bin"命令 。由于都是从国外托管的网站上下载,这个过程可能有比较长的时间。 安装完成后,你就可以使用vim-go插件的所有功能了。
  3、gocode函数提示功能配置:  vim本身就有代码提示功能,在vim的“/usr/share/vim/vim74/autoload/”目录下“*complete.vim”的文件就是各个语言的代码提示支持文件,如“phpcomplete.vim”是php的代码提示支持文件。但是vim本身是不带go语言的代码提示支持文件的,不过安装好gocode后,会生成一个“gocomplete.vim”到“~/.vim/autoload/”命令,再到"~/.vimrc"文件中配置一下,go语言也支持代码提示了。
  关于代码提示功能需要在"~/.vimrc"要加入的内容如下:filetype plugin indent on

autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType java set omnifunc=javacomplete#Complete
autocmd FileType go set omnifunc=gocomplete#Complete  其中第一行我们在前面已经加入过,后面几行就是各个语言的后缀文件自动补全调用的函数,这些函数都在各自语言的“*complete.vim”文件中定义。最后一行就是go语言的自定补全功能定义了。配置好后,连续按下<C-x><C-o>就会有代码提示了。
 四、Tagbar和NERDTree插件安装:  Tagbar插件提供源码函数结构导航,NERDTree插件提供目录源文件树型结构导航,它们的安装方法请参考:vim go语言IDE环境Tagbar插件和NERDTree插件安装页面。 查看全部

一、linux安装go语言环境:

1、下载go安装包:

  打开golang官网下载地址https://golang.org/dl/,根据你的服务器CPU构架,下载对应的最新安装包,并解压。我的CPU构架是X86_64位的,所以下载的是“amd64.tar.gz”结尾的:
[root@aiezu.com local]# cd /usr/local/
[root@aiezu.com local]# uname -m
x86_64
[root@aiezu.com local]# wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
[root@aiezu.com local]# tar -zxvf go1.7.4.linux-amd64.tar.gz
  golang语言安装包是绿色安装包,无需编译,解压后设置好环境变量既可用。如果打不开官方网站,也可以从国内的网站上面下载:http://www.golangtc.com/download
 

2、设置环境变量:

  编辑“~/.bashrc”,在文件末尾添加下面四行,这样每次打开新的bash时,会自动读入下面四条环境变量:
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=~/go # 指定工作目录,你将来的开发代码放在$GOPATH/src/目录下
  使用“. ~/.bashrc”命令将载入脚本:
[root@aiezu.com ~]# echo $GOROOT

[root@aiezu.com ~]# . ~/.bashrc
[root@aiezu.com ~]# echo $GOROOT
/usr/local/go
[root@aiezu.com ~]# echo $GOBIN
/usr/local/go/bin
 

二、安装linux vim插件管理器Vundle:

1、下载Vundle插件:

  Vundle是vim的一个插件管理器, 它本身也是vim的一个插件。Vundle需要使用git命令来安装,如果无git命令,需要使用"yum -y install git"安装git命令。有git命令的,直接安装Vundle:
mkdir -p ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
 

2、编辑~/.vimrc文件设置插件: 

  然后运行“vim ~/.vimrc”命令创建".vimrc"文件,并在文件中添加如下内容,并保存退出:
syntax on
" tab宽度和缩进同样设置为4
set tabstop=4
set softtabstop=4
set shiftwidth=4

set nocompatible

" 你在此设置运行时路径
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()

" Vundle 本身就是一个插件
Plugin 'gmarik/Vundle.vim'


"所有插件都应该在这一行之前
call vundle#end()

" filetype off
filetype plugin indent on
 

3、安装Vundle插件:

  ".vimrc"文件配置好后,打开vim,在命令模式输入插件安装命令“:PluginInstall”命令,vim就会自动安装“.vimrc”中配置的所有插件,直到vim底部出现“Done”安装完成。
linux_vim_golang_vundle_install_01.png

 

三、安装vim go语言插件"vim-go":

  vim-go插件go语言IDE环境的一个基础插件,本身就是十分强大的插件,它自带了go语言的语法高亮、语法检测等。同时还有一个十分好用的功能,可以使用“Ctrl + ]”跳至函数定义处,然后再使用“Ctrl + t”返回。安装好后,可以使用“:help vim-go”获得使用帮助,更多介绍请参考:https://github.com/fatih/vim-go
 

1、安装"vim-go"插件:

  编辑"~/.vimrc"文件,在其中插件填写处(Plugin 'gmarik/Vundle.vim'下面)添加下面一行并保存退出:
Plugin 'fatih/vim-go'
  再次打开vim命令,在命令模式下运行“:PluginInstall”,提示“Processing 'fatih/vim-go'”,然后等待。直到提示“Done”插件安装完成。
  然后再将“~/.vimrc”中的“filetype off”前的双引号(双引号用与注释)去掉并保存文件。这时再编辑".go"文件,就有语法高亮功能了:
linux_vim_golang_vundle_install_02.png

 

2、安装vim-go必要的相关工具:

  重新打开vim,输入“:GoInstallBinaries”命令,所有必要的二进制文件(gocode、godef、goimports...)将是自动下载并安装到"$GOBIN"目录或者"$GOPATH/bin"命令 。由于都是从国外托管的网站上下载,这个过程可能有比较长的时间。 安装完成后,你就可以使用vim-go插件的所有功能了。
  

3、gocode函数提示功能配置:

  vim本身就有代码提示功能,在vim的“/usr/share/vim/vim74/autoload/”目录下“*complete.vim”的文件就是各个语言的代码提示支持文件,如“phpcomplete.vim”是php的代码提示支持文件。但是vim本身是不带go语言的代码提示支持文件的,不过安装好gocode后,会生成一个“gocomplete.vim”到“~/.vim/autoload/”命令,再到"~/.vimrc"文件中配置一下,go语言也支持代码提示了。
  关于代码提示功能需要在"~/.vimrc"要加入的内容如下:
filetype plugin indent on

autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType java set omnifunc=javacomplete#Complete
autocmd FileType go set omnifunc=gocomplete#Complete
  其中第一行我们在前面已经加入过,后面几行就是各个语言的后缀文件自动补全调用的函数,这些函数都在各自语言的“*complete.vim”文件中定义。最后一行就是go语言的自定补全功能定义了。配置好后,连续按下<C-x><C-o>就会有代码提示了。
 

四、Tagbar和NERDTree插件安装:

  Tagbar插件提供源码函数结构导航,NERDTree插件提供目录源文件树型结构导航,它们的安装方法请参考:vim go语言IDE环境Tagbar插件和NERDTree插件安装页面。

Linux bash终端设置代理(proxy)访问

Linuxliuliangsong 发表了文章 • 0 个评论 • 375 次浏览 • 2016-12-11 19:40 • 来自相关话题

  Linux是开源操作系统,有很多软件包需要从国外网站上下载,而其中大部分国外网站是被墙的,这时我们需要通过代理来访问这些网站。下面我们介绍Linux bash shell终端代理设置方法,包括socks代理,http代理。
 一、linux shell终端代理设置方法:  linux要在shell终端为http、https、ftp协议设置代理,值需要设置对应的环境变量即可。下面是一些关于代理的环境变量:环境变量描述值示例http_proxy为http网站设置代理;10.0.0.51:8080;
user:pass@10.0.0.10:8080
socks4://10.0.0.51:1080
socks5://192.168.1.1:1080https_proxy为https网站设置代理;同上ftp_proxy为ftp协议设置代理;socks5://192.168.1.1:1080no_proxy无需代理的主机或域名;
可以使用通配符;
多个时使用“,”号分隔;*.aiezu.com,10.*.*.*,192.168.*.*,
*.local,localhost,127.0.0.1   可以将上面4个环境变量设置项放于~/.bashrc文件尾部,这样用户打开bash shell终端时会自动调用此脚本,读入它们。
  二、linux bash为http站点设置代理:  根据代理类型,将下面对应的设置项添加到~/.bashrc文件末尾,然后运行". ~/.bashrc"(前面是一个“.”号)命令使用之在当前环境生效。
1、为http站点设置http代理(默认):export http_proxy=10.0.0.52:80802、为http站点设置sock4、sock5代理:# 设置 socks 代理,自动识别socks版本
export http_proxy=socks://10.0.0.52:1080
# 设置 socks4 代理
export http_proxy=socks4://10.0.0.52:1080
# 设置 socks5 代理
export http_proxy=socks5://10.0.0.52:10803、代理使用用户名密码认证:export http_proxy=user:pass@192.158.8.8:8080    三、linux bash为https站点设置代理:  如果需要为https网站设置代理,设置https_proxy环境变量即可;设置方法完全与http_proxy环境变量相同:# 任意使用一项
export https_proxy=10.0.0.52:8080
export https_proxy=user:pass@192.158.8.8:8080
export https_proxy=socks://10.0.0.52:1080
export https_proxy=socks4://10.0.0.52:1080
export https_proxy=socks5://10.0.0.52:1080  四、举例:  现在我们要设置http、https网站都使用socks5代理10.0.0.52:1080,下面为完整设置方法:
1、vim ~/.bashrc,在文件尾部添加下面内容:export http_proxy=socks5://10.0.0.52:1080
export https_proxy=socks5://10.0.0.52:1080
export no_proxy="*.aiezu.com,10.*.*.*,192.168.*.*,*.local,localhost,127.0.0.1"2、加载设置:[root@aiezu.com ~]# . ~/.bashrc
[root@aiezu.com ~]# echo $http_proxy
socks5://10.0.0.52:1080
[root@aiezu.com ~]# echo $https_proxy
socks5://10.0.0.52:10803、测试代理:[root@aiezu.com ~]# curl -I http://www.fackbook.com
HTTP/1.1 200 OK
Content-Length: 2423
Content-Type: text/html
Last-Modified: Mon, 14 Nov 2016 22:03:32 GMT
Accept-Ranges: bytes
ETag: "0521af0c23ed21:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sun, 11 Dec 2016 13:21:33 GMT 查看全部
  Linux是开源操作系统,有很多软件包需要从国外网站上下载,而其中大部分国外网站是被墙的,这时我们需要通过代理来访问这些网站。下面我们介绍Linux bash shell终端代理设置方法,包括socks代理,http代理。
 

一、linux shell终端代理设置方法:

  linux要在shell终端为http、https、ftp协议设置代理,值需要设置对应的环境变量即可。下面是一些关于代理的环境变量:
环境变量描述值示例
http_proxy为http网站设置代理;10.0.0.51:8080;
user:pass@10.0.0.10:8080
socks4://10.0.0.51:1080
socks5://192.168.1.1:1080
https_proxy为https网站设置代理;同上
ftp_proxy为ftp协议设置代理;socks5://192.168.1.1:1080
no_proxy无需代理的主机或域名;
可以使用通配符;
多个时使用“,”号分隔;
*.aiezu.com,10.*.*.*,192.168.*.*,
*.local,localhost,127.0.0.1 
  可以将上面4个环境变量设置项放于~/.bashrc文件尾部,这样用户打开bash shell终端时会自动调用此脚本,读入它们。
  

二、linux bash为http站点设置代理:

  根据代理类型,将下面对应的设置项添加到~/.bashrc文件末尾,然后运行". ~/.bashrc"(前面是一个“.”号)命令使用之在当前环境生效。
1、为http站点设置http代理(默认):
export http_proxy=10.0.0.52:8080
2、为http站点设置sock4、sock5代理:
# 设置 socks 代理,自动识别socks版本
export http_proxy=socks://10.0.0.52:1080
# 设置 socks4 代理
export http_proxy=socks4://10.0.0.52:1080
# 设置 socks5 代理
export http_proxy=socks5://10.0.0.52:1080
3、代理使用用户名密码认证:
export http_proxy=user:pass@192.158.8.8:8080
    

三、linux bash为https站点设置代理:

  如果需要为https网站设置代理,设置https_proxy环境变量即可;设置方法完全与http_proxy环境变量相同:
# 任意使用一项
export https_proxy=10.0.0.52:8080
export https_proxy=user:pass@192.158.8.8:8080
export https_proxy=socks://10.0.0.52:1080
export https_proxy=socks4://10.0.0.52:1080
export https_proxy=socks5://10.0.0.52:1080
  

四、举例:

  现在我们要设置http、https网站都使用socks5代理10.0.0.52:1080,下面为完整设置方法:
1、vim ~/.bashrc,在文件尾部添加下面内容:
export http_proxy=socks5://10.0.0.52:1080
export https_proxy=socks5://10.0.0.52:1080
export no_proxy="*.aiezu.com,10.*.*.*,192.168.*.*,*.local,localhost,127.0.0.1"
2、加载设置:
[root@aiezu.com ~]# . ~/.bashrc
[root@aiezu.com ~]# echo $http_proxy
socks5://10.0.0.52:1080
[root@aiezu.com ~]# echo $https_proxy
socks5://10.0.0.52:1080
3、测试代理:
[root@aiezu.com ~]# curl -I http://www.fackbook.com
HTTP/1.1 200 OK
Content-Length: 2423
Content-Type: text/html
Last-Modified: Mon, 14 Nov 2016 22:03:32 GMT
Accept-Ranges: bytes
ETag: "0521af0c23ed21:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sun, 11 Dec 2016 13:21:33 GMT

Golang(go语言)中map创建/赋值/读取

GoLangliuliangsong 发表了文章 • 0 个评论 • 113 次浏览 • 2016-12-10 22:53 • 来自相关话题

  go语言map是一种无序的键值对的集合。map最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
 一、golang map声明、初始化、赋值、使用Println输出:package main
import "fmt"
func main() {
// 声明map
var m map[int]string
// 初始化map, 未初始化的map为nil map,不能赋值
m = make(map[int]string)
// 赋值
m[1] = "aaa"
m[2] = "bbb"
m[3] = "999"
// 输出
fmt.Println(m)
}运行结果:[root@aiezu.com ~]# go run test.go
map[1:aaa 2:bbb 3:999]  二、golang直接初始化创建map、然后赋值、使用for输出:package main
import "fmt"
func main() {
// 直接初始化创建
m := make( map[string]string )
// 赋值
m["site"] = "aiezu.com"
m["name"] = "爱E族"
m["test"] = "123456"

// for 输出
for key, val := range m {
fmt.Print(key, "\t", val, "\n")
}
}运行结果:[root@aiezu.com ~]# go run test.go
site aiezu.com
name 爱E族
test 123456  
三、go语言直接创建map并赋值,并使用for输出:package main
import "fmt"
func main() {
// 直接创建并赋值
m := map[string]string {
"name" : "爱e族",
"domain" : "aiezu.com",
}

for key, val := range m {
fmt.Print(key, "\t", val, "\n")
}
}
运行结果:[root@aiezu.com ~]# go run test.go
name 爱e族
domain aiezu.com

  查看全部
  go语言map是一种无序的键值对的集合。map最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
 

一、golang map声明、初始化、赋值、使用Println输出:

package main
import "fmt"
func main() {
// 声明map
var m map[int]string
// 初始化map, 未初始化的map为nil map,不能赋值
m = make(map[int]string)
// 赋值
m[1] = "aaa"
m[2] = "bbb"
m[3] = "999"
// 输出
fmt.Println(m)
}
运行结果:
[root@aiezu.com ~]# go run test.go 
map[1:aaa 2:bbb 3:999]
  

二、golang直接初始化创建map、然后赋值、使用for输出:

package main
import "fmt"
func main() {
// 直接初始化创建
m := make( map[string]string )
// 赋值
m["site"] = "aiezu.com"
m["name"] = "爱E族"
m["test"] = "123456"

// for 输出
for key, val := range m {
fmt.Print(key, "\t", val, "\n")
}
}
运行结果:
[root@aiezu.com ~]# go run test.go 
site aiezu.com
name 爱E族
test 123456
  
三、go语言直接创建map并赋值,并使用for输出:
package main
import "fmt"
func main() {
// 直接创建并赋值
m := map[string]string {
"name" : "爱e族",
"domain" : "aiezu.com",
}

for key, val := range m {
fmt.Print(key, "\t", val, "\n")
}
}
运行结果:
[root@aiezu.com ~]# go run test.go 
name 爱e族
domain aiezu.com

 

Golang(go语言)上传图片和显示图片

GoLangliuliangsong 发表了文章 • 0 个评论 • 157 次浏览 • 2016-12-09 17:53 • 来自相关话题

  下面是一段简单的Go语言代码,可以用来监听端口,实现简单的http图片上传,和显示上传的图片,可供初学者参考:package main;
import (
"fmt"
"io"
"io/ioutil"
"os"
"path"
"net/http"
"errors"
"strings"
)

func main() {
http.HandleFunc("/upload/", uploadHandle) // 上传
http.HandleFunc("/uploaded/", showPicHandle) //显示图片
err := http.ListenAndServe(":80", nil)
fmt.Println(err)
}

// 上传图像接口
func uploadHandle (w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/html")

req.ParseForm()
if req.Method != "POST" {
w.Write([]byte(html))
} else {
// 接收图片
uploadFile, handle, err := req.FormFile("image")
errorHandle(err, w)

// 检查图片后缀
ext := strings.ToLower(path.Ext(handle.Filename))
if ext != ".jpg" && ext != ".png" {
errorHandle(errors.New("只支持jpg/png图片上传"), w);
return
//defer os.Exit(2)
}

// 保存图片
os.Mkdir("./uploaded/", 0777)
saveFile, err := os.OpenFile("./uploaded/" + handle.Filename, os.O_WRONLY|os.O_CREATE, 0666);
errorHandle(err, w)
io.Copy(saveFile, uploadFile);

defer uploadFile.Close()
defer saveFile.Close()
// 上传图片成功
w.Write([]byte("查看上传图片: <a target='_blank' href='/uploaded/" + handle.Filename + "'>" + handle.Filename + "</a>"));
}
}

// 显示图片接口
func showPicHandle( w http.ResponseWriter, req *http.Request ) {
file, err := os.Open("." + req.URL.Path)
errorHandle(err, w);

defer file.Close()
buff, err := ioutil.ReadAll(file)
errorHandle(err, w);
w.Write(buff)
}

// 统一错误输出接口
func errorHandle(err error, w http.ResponseWriter) {
if err != nil {
w.Write([]byte(err.Error()))
}
}

const html = `<html>
<head></head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" />
</form>
</body>
</html>` 查看全部
  下面是一段简单的Go语言代码,可以用来监听端口,实现简单的http图片上传,和显示上传的图片,可供初学者参考:
package main;
import (
"fmt"
"io"
"io/ioutil"
"os"
"path"
"net/http"
"errors"
"strings"
)

func main() {
http.HandleFunc("/upload/", uploadHandle) // 上传
http.HandleFunc("/uploaded/", showPicHandle) //显示图片
err := http.ListenAndServe(":80", nil)
fmt.Println(err)
}

// 上传图像接口
func uploadHandle (w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/html")

req.ParseForm()
if req.Method != "POST" {
w.Write([]byte(html))
} else {
// 接收图片
uploadFile, handle, err := req.FormFile("image")
errorHandle(err, w)

// 检查图片后缀
ext := strings.ToLower(path.Ext(handle.Filename))
if ext != ".jpg" && ext != ".png" {
errorHandle(errors.New("只支持jpg/png图片上传"), w);
return
//defer os.Exit(2)
}

// 保存图片
os.Mkdir("./uploaded/", 0777)
saveFile, err := os.OpenFile("./uploaded/" + handle.Filename, os.O_WRONLY|os.O_CREATE, 0666);
errorHandle(err, w)
io.Copy(saveFile, uploadFile);

defer uploadFile.Close()
defer saveFile.Close()
// 上传图片成功
w.Write([]byte("查看上传图片: <a target='_blank' href='/uploaded/" + handle.Filename + "'>" + handle.Filename + "</a>"));
}
}

// 显示图片接口
func showPicHandle( w http.ResponseWriter, req *http.Request ) {
file, err := os.Open("." + req.URL.Path)
errorHandle(err, w);

defer file.Close()
buff, err := ioutil.ReadAll(file)
errorHandle(err, w);
w.Write(buff)
}

// 统一错误输出接口
func errorHandle(err error, w http.ResponseWriter) {
if err != nil {
w.Write([]byte(err.Error()))
}
}

const html = `<html>
<head></head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" />
</form>
</body>
</html>`

Linux vim为Golang(go语言)添加语法高亮

GoLangliuliangsong 发表了文章 • 0 个评论 • 187 次浏览 • 2016-12-08 12:42 • 来自相关话题

  Go语言是谷歌2009发布的一款开源跨平台编程语言,目前vim默认还没有为golang提供语法高亮功能,要实现go语言vim下语法高亮,可以参考下面设置。  一、测试环境:  我的测试环境为RHEL7.1,本文适用与CentOS、Ubuntu、Fedora,同样也适用于其他大多数linux系统: [root@aiezu.com ~]# cat /etc/redhat-release
Derived from Red Hat Enterprise Linux 7.1 (Source)
[root@aiezu.com ~]# uname -a
Linux aiezu.com 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 二、为vim添加go语言用法高亮:  打开https://golang.org/dl/页面,在上面找到并下载“go1.3.3.src.tar.gz ”源码包,然后解压:wget https://storage.googleapis.com/golang/go1.3.3.src.tar.gz
tar -zxvf go1.3.3.src.tar.gz  然后将解压出来的“go/misc/vim/”目录下的syntax、ftplugin、indent、compiler、ftdetect五个文件夹复制到"/usr/share/vim/vim74/"目录下:cp -R go/misc/vim/syntax/ /usr/share/vim/vim74/
cp -R go/misc/vim/ftplugin/ /usr/share/vim/vim74/
cp -R go/misc/vim/indent/ /usr/share/vim/vim74/
cp -R go/misc/vim/compiler/ /usr/share/vim/vim74/
cp -R go/misc/vim/ftdetect/ /usr/share/vim/vim74/ 三、测试:  文件全部复制好后,创建一个后缀为".go"的文件,输入golang代码试试,看vim golang语法高亮是否生效,我的效果如下:



 四、附录:  可以在用户目录下,添加一个".vimrc"文件,在文件添加一些vim初始设置项,来设置是否现在行号、tab字符宽度、文本缩进等。".vimrc"文件每次使用vim命令时都会自动调用。运行"vim ~/.vimrc"命令,然后添加如下内容:syntax on
"set number " 显示行号
"set cursorline " 突出显示当前行
set tabstop=4 " Tab键的宽度

" 统一缩进为4
set softtabstop=4
set shiftwidth=4 查看全部

  Go语言是谷歌2009发布的一款开源跨平台编程语言,目前vim默认还没有为golang提供语法高亮功能,要实现go语言vim下语法高亮,可以参考下面设置。

  

一、测试环境:

  我的测试环境为RHEL7.1,本文适用与CentOS、Ubuntu、Fedora,同样也适用于其他大多数linux系统: 
[root@aiezu.com ~]# cat /etc/redhat-release 
Derived from Red Hat Enterprise Linux 7.1 (Source)
[root@aiezu.com ~]# uname -a
Linux aiezu.com 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
 

二、为vim添加go语言用法高亮:

  打开https://golang.org/dl/页面,在上面找到并下载“go1.3.3.src.tar.gz ”源码包,然后解压:
wget https://storage.googleapis.com/golang/go1.3.3.src.tar.gz 
tar -zxvf go1.3.3.src.tar.gz
  然后将解压出来的“go/misc/vim/”目录下的syntax、ftplugin、indent、compiler、ftdetect五个文件夹复制到"/usr/share/vim/vim74/"目录下:
cp -R go/misc/vim/syntax/ /usr/share/vim/vim74/ 
cp -R go/misc/vim/ftplugin/ /usr/share/vim/vim74/
cp -R go/misc/vim/indent/ /usr/share/vim/vim74/
cp -R go/misc/vim/compiler/ /usr/share/vim/vim74/
cp -R go/misc/vim/ftdetect/ /usr/share/vim/vim74/
 

三、测试:

  文件全部复制好后,创建一个后缀为".go"的文件,输入golang代码试试,看vim golang语法高亮是否生效,我的效果如下:
vim_golang_syntax_highlight.png

 

四、附录:

  可以在用户目录下,添加一个".vimrc"文件,在文件添加一些vim初始设置项,来设置是否现在行号、tab字符宽度、文本缩进等。".vimrc"文件每次使用vim命令时都会自动调用。运行"vim ~/.vimrc"命令,然后添加如下内容:
syntax on
"set number " 显示行号
"set cursorline " 突出显示当前行
set tabstop=4 " Tab键的宽度

" 统一缩进为4
set softtabstop=4
set shiftwidth=4

Linux curl命令使用代理、以及代理种类介绍

Linuxliuliangsong 发表了文章 • 0 个评论 • 1199 次浏览 • 2016-12-07 11:40 • 来自相关话题

  有时出于个人隐私的原因,我们希望隐藏自己的IP,让http服务器无法记录我们访问过它,这时我们可以使用代理服务器。
  代理服务器(Proxy Server)是工作在浏览器与http服务器之间的一个服务应用,所有经过代理服务器的http请求,都会被转发到对应的http服务器上。
  当然,除了http可以使用代理外,https、ftp、RTSP、pop3等协议同样可以使用代理访问,不过本文介绍的是支持http、https协议访问的代理。
  一、代理服务器分类:  我们比较常用、支持http(s)协议代理主要分为两大类:http代理和socks代理,见下表:大类小类子类描述http代理http代理
https代理透明代理http服务器知道浏览器端使用了代理,并能获取浏览器端原始IP;匿名代理http服务器知道浏览器端使用了代理,但无法获取浏览器端原始IP;高匿名代理http服务器不知道浏览器端使用了代理,且无法获取浏览器端原始IP;SOCKS代理SOCKS4被称为全能代
理,支持http
和其他协议只支持TCP应用;SOCKS4A支持TCP应用;支持服务器端域名解析;SOCKS5支持TCP和UDP应用;支持服务器端域名解析;
支持多种身份验证;支持IPV6; 二、Linux curl命令代理设置参数:  linux curl命令可以使用下面参数设置http(s)代理、socks代理,已经设置它们的用户名、密码以及认证方式:参数用法-x host:port
-x [protocol://[user:pwd@]host[:port]
--proxy [protocol://[user:pwd@]host[:port]使用HTTP代理访问;如果未指定端口,默认使用8080端口;
protocol默认为http_proxy,其他可能的值包括:
http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;
如:
--proxy 8.8.8.8:8080;
-x "http_proxy://aiezu:123@aiezu.com:80"--socks4 <host[:port]>
--socks4a <host[:port]>
--socks5 <host[:port]>使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;--proxy-anyauth
--proxy-basic
--proxy-diges
--proxy-negotiate
--proxy-ntlm代理认证方式,参考:
--anyauth
--basic
--diges
--negotiate
--ntlm-U <user:password>
--proxy-user <user:password>设置代理的用户名和密码;
 三、Linux curl命令设置代理举例:1、linux curl命令设置http代理:# 指定http代理IP和端口
curl -x 113.185.19.192:80 http://aiezu.com/test.php
curl --proxy 113.185.19.192:80 http://aiezu.com/test.php

#指定为http代理
curl -x http_proxy://113.185.19.192:80 http://aiezu.com/test.php

#指定为https代理
curl -x HTTPS_PROXY://113.185.19.192:80 http://aiezu.com/test.php

#指定代理用户名和密码,basic认证方式
curl -x aiezu:123456@113.185.19.192:80 http://aiezu.com/test.php
curl -x 113.185.19.192:80 -U aiezu:123456 http://aiezu.com/test.php
curl -x 113.185.19.192:80 --proxy-user aiezu:123456 http://aiezu.com/test.php

#指定代理用户名和密码,ntlm认证方式
curl -x 113.185.19.192:80 -U aiezu:123456 --proxy-ntlm http://aiezu.com/test.php

#指定代理协议、用户名和密码,basic认证方式
curl -x http_proxy://aiezu:123456@113.185.19.192:80 http://aiezu.com/test.php 2、Linux curl命令设置socks代理:#使用socks4代理,无需认证方式
curl --socks4 122.192.32.76:7280 http://aiezu.com/test.php
curl -x socks4://122.192.32.76:7280 http://aiezu.com/test.php

#使用socks4a代理,无需认证方式
curl --socks4a 122.192.32.76:7280 http://aiezu.com/test.php
curl -x socks4a://122.192.32.76:7280 http://aiezu.com/test.php

#使用socks5代理,basic认证方式
curl --socks5 122.192.32.76:7280 -U aiezu:123456 http://aiezu.com/test.php
curl -x socks5://aiezu:123456@122.192.32.76:7280 http://aiezu.com/test.php

#使用socks5代理,basic认证方式,ntlm认证方式
curl -x socks5://aiezu:123456@122.192.32.76:7280 --proxy-ntlm http://aiezu.com/test.php 四、测试代理的隐匿度:1、测试前准备:  测试前,我们先在网站根目录也一个php页面“test.php”,用于输出http服务器接收到的访客IP地址信息,"test.php"测试页的代码如下:<?php
$array = array('HTTP_USER_AGENT', 'HTTP_HOST', 'HTTP_ACCEPT', 'PATH', 'SERVER_SIGNATURE', 'SERVER_SOFTWARE', 'SERVER_NAME', 'SERVER_ADDR', 'SERVER_PORT', 'DOCUMENT_ROOT', 'SERVER_ADMIN', 'SCRIPT_FILENAME', 'REMOTE_PORT', 'GATEWAY_INTERFACE', 'SERVER_PROTOCOL', 'REQUEST_METHOD', 'QUERY_STRING', 'REQUEST_URI', 'SCRIPT_NAME', 'PHP_SELF', 'REQUEST_TIME');
// 将 $_SERVER 数组赋予 $srv数组;
$srv = $_SERVER;
// 释放掉 $srv中不相关的键
foreach($array as $name ) {
unset($srv[ $name ]);
}
print_r($srv);  保存好"test.php"后,然后我们通过不用代理,和使用透明代理、匿名代理、高匿名代理、SOCKS分别去访问,看页面输出的内容结果。
  2、测试使用不同代理输出结果:  ①.  通过linux curl不使用代理访问:[root@aiezu.com ~]# curl http://aiezu.com/test.php
Array
(
[REMOTE_ADDR] => 114.112.104.126
)  可以看出,http服务器获取到的"REMOTE_ADDR"IP地址为"114.112.104.126",此IP地址就是客户端lcurl的真实IP地址。 
 
  ②. 通过linux curl命令使用http透明代理访问:[root@aiezu.com ~]# curl -x 37.139.9.11:80 http://aiezu.com/test.php
Array
(
[HTTP_VIA] => 1.1 ThunderVPN (squid/3.3.8)
[HTTP_X_FORWARDED_FOR] => 114.112.104.126
[HTTP_CACHE_CONTROL] => max-age=259200
[HTTP_CONNECTION] => keep-alive
[REMOTE_ADDR] => 37.139.9.11
)  可以看出REMOTE_ADDR字段变成了代理服务器的IP地址,同时真实IP地址也能从HTTP_X_FORWARDED_FOR字段获取到,还多了一个“HTTP_VIA”字段,可以看出出代理并不能隐藏真实IP,而且也会让http服务器自动浏览器端使用了代理。
 
  ③. 通过linux curl命令使用http匿名代理访问:[root@aiezu.com ~]# curl -x 60.21.209.114:8080 http://aiezu.com/test.php
Array
(
[HTTP_PROXY_CONNECTION] => Keep-Alive
[REMOTE_ADDR] => 60.21.209.114
)  从上面可以看出,REMOTE_ADDR字段变成了代理服务器的IP地址,而且在响应不包含原来的真实IP地址,但是多了HTTP_PROXY_CONNECTION,能判断出使用了代理,得出结论此浏览器客户端使用了匿名代理。

  ④. 通过linux curl命令使用http高匿名代理访问:[root@aiezu.com ~]# curl -x 114.232.1.13:8088 http://aiezu.com/test.php
Array
(
[REMOTE_ADDR] => 114.232.1.13
)  这次我们惊奇的发现,REMOTE_ADDR同样变成了代理的IP地址,同时不留下任何残留证据证明使用了代理,可以得出结论,这就是传说中的高匿名代理。
  
  ④. 通过linux curl命令使用socks5代理访问:[root@aiezu.com ~]# curl --socks5 122.192.32.76:7280 http://aiezu.com/test.php
Array
(
[REMOTE_ADDR] => 180.96.54.198
)  可以看出此SOCKS5代理也是高匿名代理。
  五、附录:Linux curl命令详解 查看全部
  有时出于个人隐私的原因,我们希望隐藏自己的IP,让http服务器无法记录我们访问过它,这时我们可以使用代理服务器。
  代理服务器(Proxy Server)是工作在浏览器与http服务器之间的一个服务应用,所有经过代理服务器的http请求,都会被转发到对应的http服务器上。
  当然,除了http可以使用代理外,https、ftp、RTSP、pop3等协议同样可以使用代理访问,不过本文介绍的是支持http、https协议访问的代理。
  

一、代理服务器分类:

  我们比较常用、支持http(s)协议代理主要分为两大类:http代理socks代理,见下表:
大类小类子类描述
http代理http代理
https代理
透明代理http服务器知道浏览器端使用了代理,并能获取浏览器端原始IP;
匿名代理http服务器知道浏览器端使用了代理,但无法获取浏览器端原始IP;
高匿名代理http服务器不知道浏览器端使用了代理,且无法获取浏览器端原始IP;
SOCKS代理SOCKS4被称为全能代
理,支持http
和其他协议
只支持TCP应用;
SOCKS4A支持TCP应用;支持服务器端域名解析;
SOCKS5支持TCP和UDP应用;支持服务器端域名解析;
支持多种身份验证;支持IPV6;
 

二、Linux curl命令代理设置参数:

  linux curl命令可以使用下面参数设置http(s)代理、socks代理,已经设置它们的用户名、密码以及认证方式:
参数用法
-x host:port
-x [protocol://[user:pwd@]host[:port]
--proxy [protocol://[user:pwd@]host[:port]
使用HTTP代理访问;如果未指定端口,默认使用8080端口;
protocol默认为http_proxy,其他可能的值包括:
http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;
如:
--proxy 8.8.8.8:8080;
-x "http_proxy://aiezu:123@aiezu.com:80"
--socks4 <host[:port]>
--socks4a <host[:port]>
--socks5 <host[:port]>
使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;
--proxy-anyauth
--proxy-basic
--proxy-diges
--proxy-negotiate
--proxy-ntlm
代理认证方式,参考:
--anyauth
--basic
--diges
--negotiate
--ntlm
-U <user:password>
--proxy-user <user:password>
设置代理的用户名和密码;

 

三、Linux curl命令设置代理举例:

1、linux curl命令设置http代理:

# 指定http代理IP和端口
curl -x 113.185.19.192:80 http://aiezu.com/test.php
curl --proxy 113.185.19.192:80 http://aiezu.com/test.php

#指定为http代理
curl -x http_proxy://113.185.19.192:80 http://aiezu.com/test.php

#指定为https代理
curl -x HTTPS_PROXY://113.185.19.192:80 http://aiezu.com/test.php

#指定代理用户名和密码,basic认证方式
curl -x aiezu:123456@113.185.19.192:80 http://aiezu.com/test.php
curl -x 113.185.19.192:80 -U aiezu:123456 http://aiezu.com/test.php
curl -x 113.185.19.192:80 --proxy-user aiezu:123456 http://aiezu.com/test.php

#指定代理用户名和密码,ntlm认证方式
curl -x 113.185.19.192:80 -U aiezu:123456 --proxy-ntlm http://aiezu.com/test.php

#指定代理协议、用户名和密码,basic认证方式
curl -x http_proxy://aiezu:123456@113.185.19.192:80 http://aiezu.com/test.php
 

2、Linux curl命令设置socks代理:

#使用socks4代理,无需认证方式
curl --socks4 122.192.32.76:7280 http://aiezu.com/test.php
curl -x socks4://122.192.32.76:7280 http://aiezu.com/test.php

#使用socks4a代理,无需认证方式
curl --socks4a 122.192.32.76:7280 http://aiezu.com/test.php
curl -x socks4a://122.192.32.76:7280 http://aiezu.com/test.php

#使用socks5代理,basic认证方式
curl --socks5 122.192.32.76:7280 -U aiezu:123456 http://aiezu.com/test.php
curl -x socks5://aiezu:123456@122.192.32.76:7280 http://aiezu.com/test.php

#使用socks5代理,basic认证方式,ntlm认证方式
curl -x socks5://aiezu:123456@122.192.32.76:7280 --proxy-ntlm http://aiezu.com/test.php
 

四、测试代理的隐匿度:

1、测试前准备:

  测试前,我们先在网站根目录也一个php页面“test.php”,用于输出http服务器接收到的访客IP地址信息,"test.php"测试页的代码如下:
<?php
$array = array('HTTP_USER_AGENT', 'HTTP_HOST', 'HTTP_ACCEPT', 'PATH', 'SERVER_SIGNATURE', 'SERVER_SOFTWARE', 'SERVER_NAME', 'SERVER_ADDR', 'SERVER_PORT', 'DOCUMENT_ROOT', 'SERVER_ADMIN', 'SCRIPT_FILENAME', 'REMOTE_PORT', 'GATEWAY_INTERFACE', 'SERVER_PROTOCOL', 'REQUEST_METHOD', 'QUERY_STRING', 'REQUEST_URI', 'SCRIPT_NAME', 'PHP_SELF', 'REQUEST_TIME');
// 将 $_SERVER 数组赋予 $srv数组;
$srv = $_SERVER;
// 释放掉 $srv中不相关的键
foreach($array as $name ) {
unset($srv[ $name ]);
}
print_r($srv);
  保存好"test.php"后,然后我们通过不用代理,和使用透明代理、匿名代理、高匿名代理、SOCKS分别去访问,看页面输出的内容结果。
  

2、测试使用不同代理输出结果:

  ①.  通过linux curl不使用代理访问:
[root@aiezu.com ~]# curl http://aiezu.com/test.php 
Array
(
[REMOTE_ADDR] => 114.112.104.126
)
  可以看出,http服务器获取到的"REMOTE_ADDR"IP地址为"114.112.104.126",此IP地址就是客户端lcurl的真实IP地址。 
 
  ②. 通过linux curl命令使用http透明代理访问:
[root@aiezu.com ~]# curl -x 37.139.9.11:80 http://aiezu.com/test.php 
Array
(
[HTTP_VIA] => 1.1 ThunderVPN (squid/3.3.8)
[HTTP_X_FORWARDED_FOR] => 114.112.104.126
[HTTP_CACHE_CONTROL] => max-age=259200
[HTTP_CONNECTION] => keep-alive
[REMOTE_ADDR] => 37.139.9.11
)
  可以看出REMOTE_ADDR字段变成了代理服务器的IP地址,同时真实IP地址也能从HTTP_X_FORWARDED_FOR字段获取到,还多了一个“HTTP_VIA”字段,可以看出出代理并不能隐藏真实IP,而且也会让http服务器自动浏览器端使用了代理。
 
  ③. 通过linux curl命令使用http匿名代理访问:
[root@aiezu.com ~]# curl -x 60.21.209.114:8080 http://aiezu.com/test.php 
Array
(
[HTTP_PROXY_CONNECTION] => Keep-Alive
[REMOTE_ADDR] => 60.21.209.114
)
  从上面可以看出,REMOTE_ADDR字段变成了代理服务器的IP地址,而且在响应不包含原来的真实IP地址,但是多了HTTP_PROXY_CONNECTION,能判断出使用了代理,得出结论此浏览器客户端使用了匿名代理

  ④. 通过linux curl命令使用http高匿名代理访问:
[root@aiezu.com ~]# curl -x 114.232.1.13:8088 http://aiezu.com/test.php 
Array
(
[REMOTE_ADDR] => 114.232.1.13
)
  这次我们惊奇的发现,REMOTE_ADDR同样变成了代理的IP地址,同时不留下任何残留证据证明使用了代理,可以得出结论,这就是传说中的高匿名代理
  
  ④. 通过linux curl命令使用socks5代理访问:
[root@aiezu.com ~]# curl --socks5 122.192.32.76:7280 http://aiezu.com/test.php 
Array
(
[REMOTE_ADDR] => 180.96.54.198
)
  可以看出此SOCKS5代理也是高匿名代理。
  

五、附录:

Linux curl命令http cookie详解

Linuxliuliangsong 发表了文章 • 0 个评论 • 211 次浏览 • 2016-12-07 08:35 • 来自相关话题

  Http Cookie在Http协议中是非常实用的功能、可以保留网站的一些会话信息,方便用户下次再次来到本网站时使用;如在cookie中记录用户的性别和姓氏、下次用户再次到来,即使未登录,也可以根据获取到的cookie显示“欢迎X先生/女士再次光临本站”类似的欢迎标语;也可以在cookie中记录用户的用户名,下次用户登陆时就不在需要输入用户名,提高便捷度。
 一、Linux curl命令Cookie的接收:1、cookie接收原理:  在介绍接收cookie之前,先来看看cookie是从http 服务器怎么发送过来的。我们先在站点根目录下写一个写cookie的脚本“test.php”,内容一下:<?php
// 性别: 2(女);有效期1年后;只对aiezu.com有效
setcookie("sex", 2, time()+3600*24*365, '', 'aiezu.com');

// 姓氏: 刘;有效期1年后;只对aiezu.com有效
setcookie("surname", '刘', time()+3600*24*365, '', 'aiezu.com');  然后运行“curl -I http://aiezu.com/test.php”命令,看到的http响应头如下:


  可以看出,http协议是通过http头将cookie信息发送给浏览器的,其中汉字是经过URL Encode的。
 2、linux curl命令接收cookie(-c):  curl命令可以使用"-c"或者"--cookie-jar"选项将http服务器发送过来的cookie保存到指定文件或者输出;更多的linux curl命令参数介绍请参考:Linux curl命令详解页面介绍;这里我们将cookie保存到"cookie.txt"文件。[root@aiezu.com ~]# curl --cookie-jar cookie.txt http://aiezu.com/test.php
[root@aiezu.com ~]# cat cookie.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.aiezu.com TRUE / FALSE 1512612268 sex 2
.aiezu.com TRUE / FALSE 1512612268 surname %E5%88%98 二、Linux curl命令发送Cookie:1、cookie发送原理和从cookie文件中发送:  在介绍发送cookie之前,这次来看看cookie是怎么发送到http 服务器的。先将站点根目录下的"test.php"改成如下,内容就简单的一行,用于输出http服务器接收到的cookie数组内容:<?php print_r($_COOKIE);  然后使用linux curl命令的"-b"参数,发送我们在第一步保存到文件的cookie,再加一个“-v”参数来显示详细信息:[root@aiezu.com ~]# curl -b @cookie.txt http://aiezu.com/test.php -v
* About to connect() to aiezu.com port 80 (#0)
* Trying 120.26.62.49...
* Connected to aiezu.com (120.26.62.49) port 80 (#0)
> GET /test.php HTTP/1.1
> User-Agent: curl/7.29.0
> Host: aiezu.com
> Accept: */*
> Cookie: surname=%E5%88%98; sex=2
>
< HTTP/1.1 200 OK
< Date: Wed, 07 Dec 2016 02:33:28 GMT
< Server: Apache
< Cache-Control: max-age=315360000
< Expires: Sat, 05 Dec 2026 02:33:28 GMT
< Vary: Accept-Encoding
< Content-Length: 46
< Content-Type: text/html; charset=utf-8
<
Array
(
[surname] => 刘
[sex] => 2
)
* Connection #0 to host aiezu.com left intact  在上面信息第9行http请求头中看到了我们发送cookie的key/value,可见cookie是通过http请求头发送到http服务器的。那为什么只发送key/value,没有发送有效时间和有效域名呢?因为时间、域名判断cookie是否发送的判断条件,只有当某一条cookie属于此域名、并且cookie还在有效时间内,此条cookie才会发送;判断完后,时间和域名就没发送的必要了。
 2、linux curl命令使用"-b"、"--cookie"参数直接发送cookiekey/value对:  linux curl命令可以使用"-c"或者“--cookie”参数直接发送cookie键值对,两个参数的意义相同:[root@aiezu.com ~]# curl -b "uid=999;sex=2" http://aiezu.com/test.php
Array
(
[uid] => 999
[sex] => 2
) 3、linux curl命令使用"-H"参数发送cookie:  既然cookie是通过http请求头发送的,当然可以使用"-H"参数来为http请求头添加cookie键值来发送cookie:[root@aiezu.com ~]# curl -H "Cookie: uid=999;sex=2" --cookie a=9 http://aiezu.com/test.php
Array
(
[uid] => 999
[sex] => 2
) 三、附录:Linux curl命令详解
  查看全部
  Http Cookie在Http协议中是非常实用的功能、可以保留网站的一些会话信息,方便用户下次再次来到本网站时使用;如在cookie中记录用户的性别和姓氏、下次用户再次到来,即使未登录,也可以根据获取到的cookie显示“欢迎X先生/女士再次光临本站”类似的欢迎标语;也可以在cookie中记录用户的用户名,下次用户登陆时就不在需要输入用户名,提高便捷度。
 

一、Linux curl命令Cookie的接收:

1、cookie接收原理:

  在介绍接收cookie之前,先来看看cookie是从http 服务器怎么发送过来的。我们先在站点根目录下写一个写cookie的脚本“test.php”,内容一下:
<?php
// 性别: 2(女);有效期1年后;只对aiezu.com有效
setcookie("sex", 2, time()+3600*24*365, '', 'aiezu.com');

// 姓氏: 刘;有效期1年后;只对aiezu.com有效
setcookie("surname", '刘', time()+3600*24*365, '', 'aiezu.com');
  然后运行“curl -I http://aiezu.com/test.php”命令,看到的http响应头如下:
linux_curl_http_header_cookie.png
  可以看出,http协议是通过http头将cookie信息发送给浏览器的,其中汉字是经过URL Encode的。
 

2、linux curl命令接收cookie(-c):

  curl命令可以使用"-c"或者"--cookie-jar"选项将http服务器发送过来的cookie保存到指定文件或者输出;更多的linux curl命令参数介绍请参考:Linux curl命令详解页面介绍;这里我们将cookie保存到"cookie.txt"文件。
[root@aiezu.com ~]# curl --cookie-jar cookie.txt http://aiezu.com/test.php
[root@aiezu.com ~]# cat cookie.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.aiezu.com TRUE / FALSE 1512612268 sex 2
.aiezu.com TRUE / FALSE 1512612268 surname %E5%88%98
 

二、Linux curl命令发送Cookie:

1、cookie发送原理和从cookie文件中发送:

  在介绍发送cookie之前,这次来看看cookie是怎么发送到http 服务器的。先将站点根目录下的"test.php"改成如下,内容就简单的一行,用于输出http服务器接收到的cookie数组内容:
<?php print_r($_COOKIE);
  然后使用linux curl命令的"-b"参数,发送我们在第一步保存到文件的cookie,再加一个“-v”参数来显示详细信息:
[root@aiezu.com ~]# curl -b @cookie.txt http://aiezu.com/test.php -v
* About to connect() to aiezu.com port 80 (#0)
* Trying 120.26.62.49...
* Connected to aiezu.com (120.26.62.49) port 80 (#0)
> GET /test.php HTTP/1.1
> User-Agent: curl/7.29.0
> Host: aiezu.com
> Accept: */*
> Cookie: surname=%E5%88%98; sex=2
>
< HTTP/1.1 200 OK
< Date: Wed, 07 Dec 2016 02:33:28 GMT
< Server: Apache
< Cache-Control: max-age=315360000
< Expires: Sat, 05 Dec 2026 02:33:28 GMT
< Vary: Accept-Encoding
< Content-Length: 46
< Content-Type: text/html; charset=utf-8
<
Array
(
[surname] => 刘
[sex] => 2
)
* Connection #0 to host aiezu.com left intact
  在上面信息第9行http请求头中看到了我们发送cookie的key/value,可见cookie是通过http请求头发送到http服务器的。那为什么只发送key/value,没有发送有效时间和有效域名呢?因为时间、域名判断cookie是否发送的判断条件,只有当某一条cookie属于此域名、并且cookie还在有效时间内,此条cookie才会发送;判断完后,时间和域名就没发送的必要了。
 

2、linux curl命令使用"-b"、"--cookie"参数直接发送cookiekey/value对:

  linux curl命令可以使用"-c"或者“--cookie”参数直接发送cookie键值对,两个参数的意义相同:
[root@aiezu.com ~]# curl -b "uid=999;sex=2" http://aiezu.com/test.php 
Array
(
[uid] => 999
[sex] => 2
)
 

3、linux curl命令使用"-H"参数发送cookie:

  既然cookie是通过http请求头发送的,当然可以使用"-H"参数来为http请求头添加cookie键值来发送cookie:
[root@aiezu.com ~]# curl -H "Cookie: uid=999;sex=2" --cookie a=9 http://aiezu.com/test.php 
Array
(
[uid] => 999
[sex] => 2
)
 

三、附录: