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

Linuxliuliangsong 发表了文章 • 0 个评论 • 151 次浏览 • 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 个评论 • 343 次浏览 • 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 个评论 • 182 次浏览 • 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


 

Starting MySQL. ERROR! The server quit without updating PID file

Linuxliuliangsong 发表了文章 • 0 个评论 • 134 次浏览 • 2016-11-30 17:59 • 来自相关话题

  今天安装好MySQL数据库后,在启动数据库时提示下面错误:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid). 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html 查看全部
  今天安装好MySQL数据库后,在启动数据库时提示下面错误:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
 
解决思路:
  遇到问题,在错误信息显示得不够完善的情况下,我们第一个应该想到的是看日志;mysql的日志在哪里呢?看“/etc/my.cnf”配置文件中的“log-error=”项,如“log-error=/var/log/mysqld.log”则日志文件在“/var/log/mysqld.log”。

  在日志文件中,我们看到了类似下列信息:
2016-11-30 22:53:29 2908 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
2016-11-30 22:53:29 2908 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
...
2016-11-30 22:53:29 2908 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions
2016-11-30 22:53:29 2908 [ERROR] InnoDB: The system tablespace must be writable!
...
日志中出现了类似“Permission denied”、“Can't determine file permissions”等信息,可以确定是“mysqld”访问文件权限的问题。导致此问题可能的原因有:磁盘空间问题、文件夹权限、setlinux权限的问题,下面是我的解决方法。
 
1、检查磁盘空间:
  使用“df -h”命令查看空间使用情况,尤其是空间占用达到90%以上的:
[root@aiezu.com ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 13G 3.8G 9.2G 30% /
devtmpfs 362M 0 362M 0% /dev
tmpfs 371M 0 371M 0% /dev/shm
tmpfs 371M 9.6M 362M 3% /run
tmpfs 371M 0 371M 0% /sys/fs/cgroup
/dev/sda1 497M 102M 396M 21% /boot
  使用“df -i”命令查看“Inode”的使用情况,如果“Inode”不足,也会无法创建文件:
[root@aiezu.com ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 13598720 41755 13556965 1% /
devtmpfs 92526 334 92192 1% /dev
tmpfs 94889 1 94888 1% /dev/shm
tmpfs 94889 359 94530 1% /run
tmpfs 94889 13 94876 1% /sys/fs/cgroup
/dev/sda1 512000 329 511671 1% /boot
 
2、文件系统权限:
  mysql的数据目录需要对“mysql”用户有读写执行:
[root@aiezu.com ~]# chown -R mysql.mysql /storage/mysql/
[root@aiezu.com ~]# ll /storage/mysql/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 11月 30 17:49 ibdata1
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:49 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 11月 30 17:48 ib_logfile1
drwx------. 2 mysql mysql 4096 11月 30 17:49 mysql
drwx------. 2 mysql mysql 4096 11月 30 17:49 performance_schema
drwx------. 2 mysql mysql 6 11月 30 17:48 test
 
3、selinux权限问题:
  如果希望判断是不是由于“selinux”导致的,可以使用“setenforce 0”命令暂时关闭“selinux”,再启动mysql服务试试:
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# getenforce
Enforcing
[root@aiezu.com ~]# setenforce 0
[root@aiezu.com ~]# getenforce
Permissive
[root@aiezu.com ~]# service mysql start
Starting MySQL... SUCCESS!
  确定是由“selinux”引起后,由于“setenforce 0”只能暂时关闭“selinux”,重启后又会打开,有两种方式解决:
  1. 在“/etc/sysconfig/selinux”(CentOS7以下版本)或“/etc/selinux/config”(CentOS7及以上版本)文件中将“SELINUX=enforcing”改成“SELINUX=disabled”,永久关闭“selinux”;
  2. 使用“chcon”命令配置“selinux”,使“selinux”对mysql相关目录开放权限;
[root@aiezu.com ~]# service mysql start
Starting MySQL. ERROR! The server quit without updating PID file (/storage/mysql/aiezu.com.pid).
[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/mysql
[root@aiezu.com ~]# service mysql start
Starting MySQL. SUCCESS!
关于MySQL的SeLinux更多信息,请参考:http://aiezu.com/article/mysql_selinux_config.html

Linux curl命令详解

Linuxliuliangsong 发表了文章 • 0 个评论 • 972 次浏览 • 2016-11-23 17:57 • 来自相关话题

  curl是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作;

  curl提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传...。
 
一、curl命令语法:curl [options] [URL...] 
二、curl命令参数详解:
  由于linux curl功能十分强大,所以命令参数十分多,下表只是爱E族(aiezu.com)帅选出来的部分参数,更多参数请运行“man curl”命令查看。参数组参数描述urlurl需要抓取的一到多个URLs;
多个下面通配符的方式:
  1、http://{www,ftp,mail}.aiezu.com;
  2、http://aiezu.com/images/[001-999].jpg;
  3、http://aiezu.com/images/[1-999].html;
  4、ftp://aiezu.com/file[a-z].txt请

头-H "name: value"
--header "name: value"(HTTP)添加一个http header(http请求头);-H "name:"
--header "name:"(HTTP)移除一个http header(http请求头);-A "string"
--user-agent "string"
【参考】(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。
也可以使用“-H”, “--header option”设置此选项;-e <URL>
--referer <URL>
【参考】(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;
-e "aiezu.com"相当于“-H "Referer: www.qq.com"”;响

头-I
--head(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。
用于HTTP服务时,获取页面的http头;
  (如:curl -I http://aiezu.com)
用于FTP/FILE时,将会获取文件大小、最后修改时间;
  (如:curl -I file://test.txt)-i
--include(HTTP)输出HTTP头和返回内容;-D <file>
--dump-header <file>(HTTP)转储http响应头到指定文件;cookie-b name=data
--cookie name=data
【参考】(HTTP)发送cookie数据到HTTP服务器,数据格式为:"NAME1=VALUE1; NAME2=VALUE2";

如果行中没有“=”,将把参数值当作cookie文件名;

这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;-c filename
--cookie-jar file name
【参考】(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;
指定参数值为“-”将定向到标准输出“如控制台”;-j
--junk-session-cookies(HTTP)告诉curl放弃所有的"session cookies";
相当于重启浏览器;代理-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"-p
--proxytunnel将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;--socks4 <host[:port]>
--socks4a <host[:port]>
--socks5 <host[:port]>
【参考】使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;--proxy-anyauth
--proxy-basic
--proxy-diges
--proxy-negotiate
--proxy-ntlmhttp代理认证方式,参考:
--anyauth
--basic
--diges
--negotiate
--ntlm-U <user:password>
--proxy-user <user:password>设置代理的用户名和密码;数据
传输-G
--get
【参考】如果使用了此参数,“-d/”、“--data”、“--data-binary”参数设置的数据,讲附加在url上,以GET的方式请求; -d @file
-d "string"
--data "string"
--data-ascii "string"
--data-binary "string"
--data-urlencode "string"
【参考】(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method="POST",enctype="application/x-www-form-urlencoded")
  -d,--data:HTTP方式POST数据;
  --data-ascii:HTTP方式POST ascii数据;
  --data-binary:HTTP方式POST二进制数据;
  --data-urlencode:HTTP方式POST数据(进行urlencode);
如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;-F name=@file
-F name=<file
-F name=content
--form name=content
【参考】(HTTP)使用HTTP POST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method="POST",enctype="multipart/form-data"),可以使用此参数上传二进制文件。

如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:
curl -F "pic=@pic.jpg" http://aiezu.com;
curl -F "page=@a.html;type=text/html" http://aiezu.com
curl -F "page=@/tmp/a;filename=a.txt" http://aiezu.com

如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F "text=<text.txt" http://aiezu.com;--form-string <key=value>(HTTP)类似于“--form”,但是“@”、“<”无特殊含义;-T file
--upload-file file通过“put”的方式将文件传输到远程网址;

选项参数只使用字符"-",将通过stdin读入文件内容;
如:
cat test.txt|curl "http://aiezu.com/a.php" -T - 
curl "http://aiezu.com/a.php" -T - <test.txt

此参数也可以使用通配符:
curl -T "{file1,file2}" http://aiezu.com
curl -T "img[1-1000].png" http://aiezu.com断点
续传-C <offset>
--continue-at <offset>断点续转,从文件头的指定位置开始继续下载/上传;
offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;-r <range>
--range <range>(HTTP/FTP/SFTP/FILE) 只传输内容的指定部分:
0-499:最前面500字节;
-500:最后面500字节;
9500-:最前面9500字节;
0-0,-1:最前面和最后面的1字节;
100-199,500-599:两个100字节;


认证--basic(HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;--ntlm(HTTP)使用NTLM身份验证方式,用于HTTP协议;
一般用于IIS使用NTLM的网站;--digest(HTTP)使用HTTP Digest authentication加密,用于HTTP协议;
配合“-u/--user”选项,防止密码使用明文方式发送;--negotiate(HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议;
它主要目的是为它的主要目的是为kerberos5认证提供支持支持;--anyauth(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;-u user:password
--user user:password使用用户名、密码认证,此参数会覆盖“-n”、“--netrc”和“--netrc-optional”选项;

如果你只提供用户名,curl将要求你输入密码;

如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;

此参数相当于设置http头“Authorization:”;证书-E <证书[:密码]>
--cert <证书[:密码]>(SSL)指定“PEM”格式的证书文件和证书密码;--cert-type <type>(SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;
默认为“PEM”;--cacert <CA证书>(SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;--capath <CA证书路径>(SSL)告诉curl所以指定目录下的CA证书用来验证;
这些证书必须是“PEM”格式;--crlfile <file>(HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;-k
--insecure(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。SSL
其他--ciphers <list of ciphers>(SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;--engine <name>设置一个OpenSSL加密引擎用于加密操作;
使用“curl --engine list”查看支持的加密引擎列表;--random-file(SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;--egd-file <file>(SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;-1/--tlsv1
--tlsv1.0
--tlsv1.1
--tlsv1.2
-2/--sslv2
-3/--sslv3(SSL)使用TLS版本2与远程服务器通讯;
(SSL)使用TLS 1.0版本与远程服务器通讯;
(SSL)使用TLS 1.1版本与远程服务器通讯;
(SSL)使用TLS 1.2版本与远程服务器通讯;
(SSL)使用SSL版本2与远程服务器通讯;
(SSL)使用SSL版本3与远程服务器通讯;私钥
公钥--key <key>(SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa'”、 “./id_dsa”;--key-type <type>(SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;--pass <phrase>(SSL/SSH)指定私钥文件的密码;--pubkey <key>(SSH)使用指定文件提供的您公钥;FTP-P
--ftp-port <接口>(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:
网卡:eth1
IP:8.8.8.8
主机名:aiezu.com
可以加端口号:eth1:20000-21000;--crlf(FTP)上传时将换行符(LF)转换为回车换行(CRLF);--ftp-account [data](FTP)ftp帐号信息;--ftp-method [method](FTP)可选值:multicwd/nocwd/singlecwd;--ftp-pasv(FTP)使用使用PASV(被动)/EPSV模式;--ftp-skip-pasv-ip(FTP)使用PASV的时,跳过指定IP;--ftp-create-dirs(FTP)上传时自动创建远程目录;-l
--list-only(FTP)列出ftp文件列表;-B
--use-ascii(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。--disable-epsv(FTP)告诉curl在PASV(被动模式)时不要使用EPSV;--disable-eprt(FTP)告诉curl在主动模式时禁用EPRT和LPRT;限速--limit-rate <speed>限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“--limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;-y
--speed-time <time>If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.
This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option.-Y
--speed-limit <speed>If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.其他
选项-0/--http1.0(HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;--interface <name>使用指定的网卡接口访问;
curl --interface eth0 http://aiezu.com
curl --interface 10.0.0.101 http://aiezu.com-X <command>
--request <command>(HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;--keepalive-time <seconds>设置keepalive时间--no-keepalive关闭keepalive功能;--no-buffer禁用对输出流缓冲;--buffer启用输出流缓冲;-L
--location(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;
(在http响应码为3XX时使用,如301跳转、302跳转)--location-trusted(HTTP/HTTPS)同“--location”,但跳转后会发送跳转前的用户名和密码;--compressed(HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;--connect-timeout <seconds>指定最大连接超时,单位“秒”;-m seconds
--max-time seconds限制整个curl操作的最长时间,单位为秒;-s
--silent安静模式。不要显示进度表或错误消息;-#
--progress-bar显示进度条;错误
选项-f
--fail(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;--retry <num>
--retry-delay <seconds>
--retry-max-time <seconds>失败重试次数;
重试间隔时间;
最大重试时间;-S
--show-error安静模式下显示错误信息;--stderr <file>错误信息保存文件;输出-o file
--output file将返回内容输出到文件。
如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:
  curl "http://aiezu.com/{a,b}.txt" -o "#1.txt";
  将保存为:“a.txt”,“b.txt”;

  curl "http://aiezu.com/{a,b}_[1-3].txt" -o "#1#2.txt";
  将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt

  如果要根据规则创建保存目录,参考:“--create-dirs”

指定“-”将定向到标准输出“如控制台”; -O
--remote-name将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);--create-dirs与“-o”参数配合使用,创建必要的本地目录层次结构-w
--write-out format操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”

格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}...,更多变量参考“man curl”获取;

格式参数可以使用“\n”、“\r”、“\t”等转义字符;调试--trace <file>转储所有传入和传出的数据到文件,包括描述信息;
使用“-”作为文件名将输出发送到标准输出。--trace-ascii file转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;
使用“-”作为文件名将输出发送到标准输出。
这个选项会覆盖之前使用的-v、 --verbose、 --trace-ascii选项;--trace-time转储文件中添加时间信息;-K
--config <config file>从配置文件中读取参数,参考:http://curl.haxx.se/docs/-v
--verbose显示更详细的信息,调试时使用;帮助-M
--manual显示完整的帮助手册;-h
--helplinux curl用法帮助; 
三、Linux curl命令退出码:
下面是linux curl命令的错误代码和她们的相应的错误消息,可能会出现在恶劣的环境。退出码错误描述1Unsupported protocol. This build of curl has no support for this protocol.2Failed to initialize.3URL malformed. The syntax was not correct.5Couldn't resolve proxy. The given proxy host could not be resolved.6Couldn't resolve host. The given remote host was not resolved.7Failed to connect to host.8FTP weird server reply. The server sent data curl couldn't parse.9FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server.11FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.13FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.14FTP weird 227 format. Curl couldn't parse the 227-line the server sent.15FTP can't get host. Couldn't resolve the host IP we got in the 227-line.17FTP couldn't set binary. Couldn't change transfer method to binary.18Partial file. Only a part of the file was transferred.19FTP couldn't download/access the given file, the RETR (or similar) command failed.21FTP quote error. A quote command returned error from the server.22HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f/--fail is used.23Write error. Curl couldn't write data to a local filesystem or similar.25FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.26Read error. Various reading problems.27Out of memory. A memory allocation request failed.28Operation timeout. The specified time-out period was reached according to the conditions.30FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!31FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers.33HTTP range error. The range "command" didn't work.34HTTP post error. Internal post-request generation error.35SSL connect error. The SSL handshaking failed.36FTP bad download resume. Couldn't continue an earlier aborted download.37FILE couldn't read file. Failed to open the file. Permissions?38LDAP cannot bind. LDAP bind operation failed.39LDAP search failed.41Function not found. A required LDAP function was not found.42Aborted by callback. An application told curl to abort the operation.43Internal error. A function was called with a bad parameter.45Interface error. A specified outgoing interface could not be used.47Too many redirects. When following redirects, curl hit the maximum amount.48Unknown TELNET option specified.49Malformed telnet option.51The peer's SSL certificate or SSH MD5 fingerprint was not ok.52The server didn't reply anything, which here is considered an error.53SSL crypto engine not found.54Cannot set SSL crypto engine as default.55Failed sending network data.56Failure in receiving network data.58Problem with the local certificate.59Couldn't use specified SSL cipher.60Peer certificate cannot be authenticated with known CA certificates.61Unrecognized transfer encoding.62Invalid LDAP URL.63Maximum file size exceeded.64Requested FTP SSL level failed.65Sending the data requires a rewind that failed.66Failed to initialize SSL Engine.67The user name, password, or similar was not accepted and curl failed to log in.68File not found on TFTP server.69Permission problem on TFTP server.70Out of disk space on TFTP server.71Illegal TFTP operation.72Unknown TFTP transfer ID.73File already exists (TFTP).74No such user (TFTP).75Character conversion failed.76Character conversion functions required.77Problem with reading the SSL CA cert (path? access rights?).78The resource referenced in the URL does not exist.79An unspecified error occurred during the SSH session.80Failed to shut down the SSL connection.82Could not load CRL file, missing or wrong format (added in 7.19.0).83Issuer check failed (added in 7.19.0).XXMore error codes will appear here in future releases. The existing ones are meant to never change.
四、用法演示:
1、下载页面:curl -o index.html http://aiezu.com 
2、下载文件并显示简单进度条:curl -# -o centos6.8.iso http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso 
3、断点续传:#继续完成上次终止的未完成的下载
curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
4、伪造来源页面:
#告诉爱E族,我是从百度来的
curl -e http://baidu.com http://aiezu.com
 5、伪造代理设备:#告诉爱E族,我是GOOGLE爬虫蜘蛛(其实我是curl命令)
curl -A " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" http://aiezu.com

#告诉爱E族,我用的是微信内置浏览器
curl -A "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0" http://aiezu.com 
6、http头:# 看看本站的http头是怎么样的
curl -I http://aiezu.com输出:HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 16:45:49 GMT
Server: Apache
Set-Cookie: rox__Session=abdrt8vesprhnpc3f63p1df7j4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8 
6、设置http请求头:curl -H "Cache-Control:no-cache" http://aiezu.com
7、发送表单数据:curl -F "pic=@logo.png" -F "site=aiezu" http://aiezu.com/
8、发送cookie:curl -b "domain=aiezu.com" http://aiezu.com 查看全部
  curl是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作;

  curl提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传...。
 
一、curl命令语法:
curl [options] [URL...]
 
二、curl命令参数详解:
  由于linux curl功能十分强大,所以命令参数十分多,下表只是爱E族(aiezu.com)帅选出来的部分参数,更多参数请运行“man curl”命令查看。
参数组参数描述
urlurl需要抓取的一到多个URLs;
多个下面通配符的方式:
  1、http://{www,ftp,mail}.aiezu.com;
  2、http://aiezu.com/images/[001-999].jpg;
  3、http://aiezu.com/images/[1-999].html;
  4、ftp://aiezu.com/file[a-z].txt


-H "name: value"
--header "name: value"
(HTTP)添加一个http header(http请求头);
-H "name:"
--header "name:"
(HTTP)移除一个http header(http请求头);
-A "string"
--user-agent "string"
【参考】
(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。
也可以使用“-H”, “--header option”设置此选项;
-e <URL>
--referer <URL>
【参考】
(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;
-e "aiezu.com"相当于“-H "Referer: www.qq.com"”;


-I
--head
(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。
用于HTTP服务时,获取页面的http头;
  (如:curl -I http://aiezu.com)
用于FTP/FILE时,将会获取文件大小、最后修改时间;
  (如:curl -I file://test.txt)
-i
--include
(HTTP)输出HTTP头和返回内容;
-D <file>
--dump-header <file>
(HTTP)转储http响应头到指定文件;
cookie-b name=data
--cookie name=data
【参考】
(HTTP)发送cookie数据到HTTP服务器,数据格式为:"NAME1=VALUE1; NAME2=VALUE2";

如果行中没有“=”,将把参数值当作cookie文件名;

这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;
-c filename
--cookie-jar file name
【参考】
(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;
指定参数值为“-”将定向到标准输出“如控制台”;
-j
--junk-session-cookies
(HTTP)告诉curl放弃所有的"session cookies";
相当于重启浏览器;
代理-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"
-p
--proxytunnel
将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;
--socks4 <host[:port]>
--socks4a <host[:port]>
--socks5 <host[:port]>
【参考】
使用SOCKS4代理;
使用SOCKS4A代理;
使用SOCKS5代理;
此参数会覆盖“-x”参数;
--proxy-anyauth
--proxy-basic
--proxy-diges
--proxy-negotiate
--proxy-ntlm
http代理认证方式,参考:
--anyauth
--basic
--diges
--negotiate
--ntlm
-U <user:password>
--proxy-user <user:password>
设置代理的用户名和密码;
数据
传输
-G
--get
【参考】
如果使用了此参数,“-d/”、“--data”、“--data-binary”参数设置的数据,讲附加在url上,以GET的方式请求; 
-d @file
-d "string"
--data "string"
--data-ascii "string"
--data-binary "string"
--data-urlencode "string"
【参考】
(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method="POST",enctype="application/x-www-form-urlencoded")
  -d,--data:HTTP方式POST数据;
  --data-ascii:HTTP方式POST ascii数据;
  --data-binary:HTTP方式POST二进制数据;
  --data-urlencode:HTTP方式POST数据(进行urlencode);
如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;
-F name=@file
-F name=<file
-F name=content
--form name=content
【参考】
(HTTP)使用HTTP POST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method="POST",enctype="multipart/form-data"),可以使用此参数上传二进制文件。

如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:
curl -F "pic=@pic.jpg" http://aiezu.com;
curl -F "page=@a.html;type=text/html" http://aiezu.com
curl -F "page=@/tmp/a;filename=a.txt" http://aiezu.com

如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F "text=<text.txt" http://aiezu.com;
--form-string <key=value>(HTTP)类似于“--form”,但是“@”、“<”无特殊含义;
-T file
--upload-file file
通过“put”的方式将文件传输到远程网址;

选项参数只使用字符"-",将通过stdin读入文件内容;
如:
cat test.txt|curl "http://aiezu.com/a.php" -T - 
curl "http://aiezu.com/a.php" -T - <test.txt

此参数也可以使用通配符:
curl -T "{file1,file2}" http://aiezu.com
curl -T "img[1-1000].png" http://aiezu.com
断点
续传
-C <offset>
--continue-at <offset>
断点续转,从文件头的指定位置开始继续下载/上传;
offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;
-r <range>
--range <range>
(HTTP/FTP/SFTP/FILE) 只传输内容的指定部分:
0-499:最前面500字节;
-500:最后面500字节;
9500-:最前面9500字节;
0-0,-1:最前面和最后面的1字节;
100-199,500-599:两个100字节;



认证
--basic(HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;
--ntlm(HTTP)使用NTLM身份验证方式,用于HTTP协议;
一般用于IIS使用NTLM的网站;
--digest(HTTP)使用HTTP Digest authentication加密,用于HTTP协议;
配合“-u/--user”选项,防止密码使用明文方式发送;
--negotiate(HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议;
它主要目的是为它的主要目的是为kerberos5认证提供支持支持;
--anyauth(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;
-u user:password
--user user:password
使用用户名、密码认证,此参数会覆盖“-n”、“--netrc”和“--netrc-optional”选项;

如果你只提供用户名,curl将要求你输入密码;

如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;

此参数相当于设置http头“Authorization:”;
证书-E <证书[:密码]>
--cert <证书[:密码]>
(SSL)指定“PEM”格式的证书文件和证书密码;
--cert-type <type>(SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;
默认为“PEM”;
--cacert <CA证书>(SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;
--capath <CA证书路径>(SSL)告诉curl所以指定目录下的CA证书用来验证;
这些证书必须是“PEM”格式;
--crlfile <file>(HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;
-k
--insecure
(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。
SSL
其他
--ciphers <list of ciphers>(SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;
--engine <name>设置一个OpenSSL加密引擎用于加密操作;
使用“curl --engine list”查看支持的加密引擎列表;
--random-file(SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;
--egd-file <file>(SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;
-1/--tlsv1
--tlsv1.0
--tlsv1.1
--tlsv1.2
-2/--sslv2
-3/--sslv3
(SSL)使用TLS版本2与远程服务器通讯;
(SSL)使用TLS 1.0版本与远程服务器通讯;
(SSL)使用TLS 1.1版本与远程服务器通讯;
(SSL)使用TLS 1.2版本与远程服务器通讯;
(SSL)使用SSL版本2与远程服务器通讯;
(SSL)使用SSL版本3与远程服务器通讯;
私钥
公钥
--key <key>(SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa'”、 “./id_dsa”;
--key-type <type>(SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;
--pass <phrase>(SSL/SSH)指定私钥文件的密码;
--pubkey <key>(SSH)使用指定文件提供的您公钥;
FTP-P
--ftp-port <接口>
(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:
网卡:eth1
IP:8.8.8.8
主机名:aiezu.com
可以加端口号:eth1:20000-21000;
--crlf(FTP)上传时将换行符(LF)转换为回车换行(CRLF);
--ftp-account [data](FTP)ftp帐号信息;
--ftp-method [method](FTP)可选值:multicwd/nocwd/singlecwd;
--ftp-pasv(FTP)使用使用PASV(被动)/EPSV模式;
--ftp-skip-pasv-ip(FTP)使用PASV的时,跳过指定IP;
--ftp-create-dirs(FTP)上传时自动创建远程目录;
-l
--list-only
(FTP)列出ftp文件列表;
-B
--use-ascii
(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。
--disable-epsv(FTP)告诉curl在PASV(被动模式)时不要使用EPSV;
--disable-eprt(FTP)告诉curl在主动模式时禁用EPRT和LPRT;
限速--limit-rate <speed>限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“--limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;
-y
--speed-time <time>
If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.
This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option.
-Y
--speed-limit <speed>
If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.
其他
选项
-0/--http1.0(HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;
--interface <name>使用指定的网卡接口访问;
curl --interface eth0 http://aiezu.com
curl --interface 10.0.0.101 http://aiezu.com
-X <command>
--request <command>
(HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;
--keepalive-time <seconds>设置keepalive时间
--no-keepalive关闭keepalive功能;
--no-buffer禁用对输出流缓冲;
--buffer启用输出流缓冲;
-L
--location
(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;
(在http响应码为3XX时使用,如301跳转、302跳转)
--location-trusted(HTTP/HTTPS)同“--location”,但跳转后会发送跳转前的用户名和密码;
--compressed(HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;
--connect-timeout <seconds>指定最大连接超时,单位“秒”;
-m seconds
--max-time seconds
限制整个curl操作的最长时间,单位为秒;
-s
--silent
安静模式。不要显示进度表或错误消息;
-#
--progress-bar
显示进度条;
错误
选项
-f
--fail
(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;
--retry <num>
--retry-delay <seconds>
--retry-max-time <seconds>
失败重试次数;
重试间隔时间;
最大重试时间;
-S
--show-error
安静模式下显示错误信息;
--stderr <file>错误信息保存文件;
输出-o file
--output file
将返回内容输出到文件。
如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:
  curl "http://aiezu.com/{a,b}.txt" -o "#1.txt";
  将保存为:“a.txt”,“b.txt”;

  curl "http://aiezu.com/{a,b}_[1-3].txt" -o "#1#2.txt";
  将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt

  如果要根据规则创建保存目录,参考:“--create-dirs”

指定“-”将定向到标准输出“如控制台”; 
-O
--remote-name
将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);
--create-dirs与“-o”参数配合使用,创建必要的本地目录层次结构
-w
--write-out format
操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”

格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}...,更多变量参考“man curl”获取;

格式参数可以使用“\n”、“\r”、“\t”等转义字符;
调试--trace <file>转储所有传入和传出的数据到文件,包括描述信息;
使用“-”作为文件名将输出发送到标准输出。
--trace-ascii file转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;
使用“-”作为文件名将输出发送到标准输出。
这个选项会覆盖之前使用的-v、 --verbose、 --trace-ascii选项;
--trace-time转储文件中添加时间信息;
-K
--config <config file>
从配置文件中读取参数,参考:http://curl.haxx.se/docs/
-v
--verbose
显示更详细的信息,调试时使用;
帮助-M
--manual
显示完整的帮助手册;
-h
--help
linux curl用法帮助;
 
三、Linux curl命令退出码:
下面是linux curl命令的错误代码和她们的相应的错误消息,可能会出现在恶劣的环境。
退出码错误描述
1Unsupported protocol. This build of curl has no support for this protocol.
2Failed to initialize.
3URL malformed. The syntax was not correct.
5Couldn't resolve proxy. The given proxy host could not be resolved.
6Couldn't resolve host. The given remote host was not resolved.
7Failed to connect to host.
8FTP weird server reply. The server sent data curl couldn't parse.
9FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server.
11FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.
13FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.
14FTP weird 227 format. Curl couldn't parse the 227-line the server sent.
15FTP can't get host. Couldn't resolve the host IP we got in the 227-line.
17FTP couldn't set binary. Couldn't change transfer method to binary.
18Partial file. Only a part of the file was transferred.
19FTP couldn't download/access the given file, the RETR (or similar) command failed.
21FTP quote error. A quote command returned error from the server.
22HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f/--fail is used.
23Write error. Curl couldn't write data to a local filesystem or similar.
25FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.
26Read error. Various reading problems.
27Out of memory. A memory allocation request failed.
28Operation timeout. The specified time-out period was reached according to the conditions.
30FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!
31FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers.
33HTTP range error. The range "command" didn't work.
34HTTP post error. Internal post-request generation error.
35SSL connect error. The SSL handshaking failed.
36FTP bad download resume. Couldn't continue an earlier aborted download.
37FILE couldn't read file. Failed to open the file. Permissions?
38LDAP cannot bind. LDAP bind operation failed.
39LDAP search failed.
41Function not found. A required LDAP function was not found.
42Aborted by callback. An application told curl to abort the operation.
43Internal error. A function was called with a bad parameter.
45Interface error. A specified outgoing interface could not be used.
47Too many redirects. When following redirects, curl hit the maximum amount.
48Unknown TELNET option specified.
49Malformed telnet option.
51The peer's SSL certificate or SSH MD5 fingerprint was not ok.
52The server didn't reply anything, which here is considered an error.
53SSL crypto engine not found.
54Cannot set SSL crypto engine as default.
55Failed sending network data.
56Failure in receiving network data.
58Problem with the local certificate.
59Couldn't use specified SSL cipher.
60Peer certificate cannot be authenticated with known CA certificates.
61Unrecognized transfer encoding.
62Invalid LDAP URL.
63Maximum file size exceeded.
64Requested FTP SSL level failed.
65Sending the data requires a rewind that failed.
66Failed to initialize SSL Engine.
67The user name, password, or similar was not accepted and curl failed to log in.
68File not found on TFTP server.
69Permission problem on TFTP server.
70Out of disk space on TFTP server.
71Illegal TFTP operation.
72Unknown TFTP transfer ID.
73File already exists (TFTP).
74No such user (TFTP).
75Character conversion failed.
76Character conversion functions required.
77Problem with reading the SSL CA cert (path? access rights?).
78The resource referenced in the URL does not exist.
79An unspecified error occurred during the SSH session.
80Failed to shut down the SSL connection.
82Could not load CRL file, missing or wrong format (added in 7.19.0).
83Issuer check failed (added in 7.19.0).
XXMore error codes will appear here in future releases. The existing ones are meant to never change.

四、用法演示:
1、下载页面:
curl -o index.html http://aiezu.com
 
2、下载文件并显示简单进度条:
curl -# -o centos6.8.iso http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
 
3、断点续传:
#继续完成上次终止的未完成的下载
curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso

4、伪造来源页面:
#告诉爱E族,我是从百度来的
curl -e http://baidu.com http://aiezu.com

 5、伪造代理设备:
#告诉爱E族,我是GOOGLE爬虫蜘蛛(其实我是curl命令) 
curl -A " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" http://aiezu.com

#告诉爱E族,我用的是微信内置浏览器
curl -A "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0" http://aiezu.com
 
6、http头:
# 看看本站的http头是怎么样的
curl -I http://aiezu.com
输出:
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 16:45:49 GMT
Server: Apache
Set-Cookie: rox__Session=abdrt8vesprhnpc3f63p1df7j4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
 
6、设置http请求头:
curl -H "Cache-Control:no-cache"  http://aiezu.com

7、发送表单数据:
curl -F "pic=@logo.png" -F "site=aiezu"  http://aiezu.com/

8、发送cookie:
curl -b "domain=aiezu.com"  http://aiezu.com

Linux 常用 ls命令详解

Linuxlinyu520 发表了文章 • 0 个评论 • 147 次浏览 • 2016-11-22 16:06 • 来自相关话题

  ls命令是linux常用命令之一,用于在命令控制台提示符中列出目录和文件信息。
 
一、ls命令用法:
  ls命令运行在命令提示符终端,用法如下。其中【选项】和为可选参数,可以一零个或者多个选项;【文件】也为可选参数,可以为零个或者多个;如果未指定文件,默认为列出当前目录下的文件:用法:ls [选项]... [文件]... 
二、ls命令参数详解:
下面是爱E族(aiezu.com)收集整理的ls详细选项,如有错误的地方,欢迎指正:参数名描述-a
--all列出所有的文件和目录,包括以“.”号开头的;-A
--almost-all列出所有的文件和目录,包括以“.”号开头的(除了“.”和“..”);-b
--escape 将文件名中的不可见字符,使用“\”开头的八进制转换字符表示;--block-size=SIZE指定每块的大小,如果指定了此值,将显示块数,不再显示文件大小;
可能的值:
  数   字,如:50、1024、102400;
  数字+单位,如:1k、2m、5g、10t;-B
--ignore-backups不要显示以“~”结尾的文件;-c按文件修改时间排序,可以使用“-l”选项显示创建时间;-C使用列的顺序输出文件列表;--color[=WHEN]是否使用不同的颜色区分文件类型,可能的值:
  never:从不;
  always:总是;
  auto:自动。-d
--directory列出目录的信息,而不是列出命令里面的内容;-D
--diredGenerate output designed for Emacs' dired mode;-f 不排序, 使用“-aU”选项, 停用“-lst”选项;-F
--classify给文件名末尾添加一个标识符(*/=@|中的一个):
  “*”:可执行文件;
  “/”:目录;
  “=”:socket文件;
  “@”:符号链接(symbolic link)文件;
  “|”:FIFOs文件;--format=WORD设置输出的格式,可能的值:
  across:相当于“-x”;
  commas:相当于“-m”;
  horizontal:相当于“-x”;
  long:相当于“-l”;
  single-column:相当于“-1”;
  verbose:相当于“-l”;
  vertical:相当于“-C”;--full-time列出文件完整的修改日期和时间;-g(ignored)-G
--no-group不显示文件的用户组;-h
--human-readable自动将文件大小使用方便阅读的方式表示,如:1.23K, 2.4M, 9G;-H
--si单位转换使用1000,而不是1024;
如:1M = 1000K,而不是 1M = 1024K;--indicator-style=WORD按指定样式给文件名追加一个标识,可能的值:
  none:不添加,默认值;
  classify:相当于“-F”;
  file-type: 相当于“-p”;
  slash:目录添加斜杠;-i
--inode输出文件使用的index node;-I
--ignore=PATTERNDo not list implied entries matching shell PATTERN-k
--kilobytes以K为单位显示文件大小,相当于“--block-size=1024”;-l以长列表的形式显示文件的详细信息;-L
--dereference列出符号链接指向的条目,而不是列出符号链接;-m 所有的相连并使用“,”逗号分隔;-n
--numeric-uid-gid使用数字UIDs、GIDs来代替名字;-N
--literal输出原始名称,对特殊字符不做特别处理,如:控制字符;-o 使用没有组信息的长列表格式-p
--file-type根据文件类型,给文件名末尾添加一个标识符(/=@|中的一个);-q
--hide-control-chars以?号代替不可显示字符(默认);--show-control-chars显示控制字符,不使用?号代替;-Q
--quote-name给名称加上双引号;--quoting-style=WORD条目名称使用的引号样式,可选的值:literal、shell、shell-always、c、c-maybe、escape、clocale;-r
--reverse 使用反序排序;-R
--recursive递归列出目录和子目录的文件;-s
--size以块为单位输出文件大小;-S根据文件大小排序;--sort=WORD排序关键词,可能的值: "none", "time", "size", "extension", "version";--time=WORD显示文档的指定时间,而不是显示修改时间,可能的值:
  atime, access, use, ctime or status; 
如果“--sort=time”,也可以使用此时间作为排序键;-t使用修改时间排序;-T
--tabsize=COLS设置tab制表符的长度,而不是使用默认的8字符长度;-u 按最后访问时间排序; 使用“-l”显示最后访问时间;-U 不排序,使用目录的默认顺序;-v 按版本排序-w
--width=COLS指定屏幕宽度,而不是使用屏幕的实际宽度;-x按行的顺序显示,而不是按列的顺序;-X按字母顺序排序;-1每行显示一个文件;--help显示帮助信息;--version输出版本号; 
三、用法演示:
1、“-a”和“-A”选项的区别:[root@aiezu.com ~]# ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc mysqlaccess.log .mysql_history .tcshrc .viminfo

[root@aiezu.com ~]# ls -A
anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc mysqlaccess.log .mysql_history .tcshrc .viminfo
 2、“-b”和“--show-control-chars”选项演示:
  下面通过创建两个含不可显示字符“\001”和“\n”的文件名,来展示“-b”和“--show-control-chars”选项的区别:[root@aiezu.com mm]# touch "`echo -e "aiezu.com\001.txt"`"

[root@aiezu.com mm]# touch "`echo -e "aiezu\n.com.txt"`"

[root@aiezu.com mm]# ls
aiezu.com?.txt aiezu?.com.txt

[root@aiezu mm]# ls -b
aiezu.com\001.txt aiezu\n.com.txt

[root@aiezu.com mm]# ls --show-control-chars
aiezu.com.txt aiezu
.com.txt 
3、文件大小:[root@S2 opt]# ls -l aiezu.com.zip
-rw-r--r-- 1 root root 8007112 Nov 22 21:45 aiezu.com.zip

[root@S2 opt]# ls -lh aiezu.com.zip
-rw-r--r-- 1 root root 7.7M Nov 22 21:45 aiezu.com.zip

[root@S2 opt]# ls -l --block-size=1k aiezu.com.zip
-rw-r--r-- 1 root root 7820 Nov 22 21:45 aiezu.com.zip

[root@S2 opt]# ls -s aiezu.com.zip
7820 aiezu.com.zip 
4、ls命令“-F 参数”与“-p”参数演示:



5、文件创建时间、访问时间、修改时间:#文件的创建时间
[root@aiezu mm]# ls -lc aiezu.com.conf
-rw-r--r--. 1 root root 2 11月 22 22:43 aiezu.com.conf

[root@aiezu mm]# ls --full-time --time=ctime aiezu.com.conf
-rw-r--r--. 1 root root 2 2016-11-22 22:43:23.572000000 +0800 aiezu.com.conf



#文件的修改时间:
[root@aiezu mm]# ls -l aiezu.com.conf
-rw-r--r--. 1 root root 2 11月 22 22:41 aiezu.com.conf

[root@aiezu mm]# ls --full-time aiezu.com.conf
-rw-r--r--. 1 root root 2 2016-11-22 22:41:55.575000000 +0800 aiezu.com.conf



#文件的访问时间:
[root@aiezu mm]# ls -lu aiezu.com.conf
-rw-r--r--. 1 root root 2 11月 22 22:42 aiezu.com.conf

[root@aiezu mm]# ls --full-time --time=atime aiezu.com.conf
-rw-r--r--. 1 root root 2 2016-11-22 22:42:15.060000000 +0800 aiezu.com.conf 查看全部
  ls命令是linux常用命令之一,用于在命令控制台提示符中列出目录和文件信息。
 
一、ls命令用法:
  ls命令运行在命令提示符终端,用法如下。其中【选项】和为可选参数,可以一零个或者多个选项;【文件】也为可选参数,可以为零个或者多个;如果未指定文件,默认为列出当前目录下的文件:
用法:ls [选项]... [文件]...
 
二、ls命令参数详解:
下面是爱E族(aiezu.com)收集整理的ls详细选项,如有错误的地方,欢迎指正:
参数名描述
-a
--all
列出所有的文件和目录,包括以“.”号开头的;
-A
--almost-all
列出所有的文件和目录,包括以“.”号开头的(除了“.”和“..”);
-b
--escape 
将文件名中的不可见字符,使用“\”开头的八进制转换字符表示;
--block-size=SIZE指定每块的大小,如果指定了此值,将显示块数,不再显示文件大小;
可能的值:
  数   字,如:50、1024、102400;
  数字+单位,如:1k、2m、5g、10t;
-B
--ignore-backups
不要显示以“~”结尾的文件;
-c按文件修改时间排序,可以使用“-l”选项显示创建时间;
-C使用列的顺序输出文件列表;
--color[=WHEN]是否使用不同的颜色区分文件类型,可能的值:
  never:从不;
  always:总是;
  auto:自动。
-d
--directory
列出目录的信息,而不是列出命令里面的内容;
-D
--dired
Generate output designed for Emacs' dired mode;
-f 不排序, 使用“-aU”选项, 停用“-lst”选项;
-F
--classify
给文件名末尾添加一个标识符(*/=@|中的一个):
  “*”:可执行文件;
  “/”:目录;
  “=”:socket文件;
  “@”:符号链接(symbolic link)文件;
  “|”:FIFOs文件;
--format=WORD设置输出的格式,可能的值:
  across:相当于“-x”;
  commas:相当于“-m”;
  horizontal:相当于“-x”;
  long:相当于“-l”;
  single-column:相当于“-1”;
  verbose:相当于“-l”;
  vertical:相当于“-C”;
--full-time列出文件完整的修改日期和时间;
-g(ignored)
-G
--no-group
不显示文件的用户组;
-h
--human-readable
自动将文件大小使用方便阅读的方式表示,如:1.23K, 2.4M, 9G;
-H
--si
单位转换使用1000,而不是1024;
如:1M = 1000K,而不是 1M = 1024K;
--indicator-style=WORD按指定样式给文件名追加一个标识,可能的值:
  none:不添加,默认值;
  classify:相当于“-F”;
  file-type: 相当于“-p”;
  slash:目录添加斜杠;
-i
--inode
输出文件使用的index node;
-I
--ignore=PATTERN
Do not list implied entries matching shell PATTERN
-k
--kilobytes
以K为单位显示文件大小,相当于“--block-size=1024”;
-l以长列表的形式显示文件的详细信息;
-L
--dereference
列出符号链接指向的条目,而不是列出符号链接;
-m 所有的相连并使用“,”逗号分隔;
-n
--numeric-uid-gid
使用数字UIDs、GIDs来代替名字;
-N
--literal
输出原始名称,对特殊字符不做特别处理,如:控制字符;
-o 使用没有组信息的长列表格式
-p
--file-type
根据文件类型,给文件名末尾添加一个标识符(/=@|中的一个);
-q
--hide-control-chars
以?号代替不可显示字符(默认);
--show-control-chars显示控制字符,不使用?号代替;
-Q
--quote-name
给名称加上双引号;
--quoting-style=WORD条目名称使用的引号样式,可选的值:literal、shell、shell-always、c、c-maybe、escape、clocale;
-r
--reverse 
使用反序排序;
-R
--recursive
递归列出目录和子目录的文件;
-s
--size
以块为单位输出文件大小;
-S根据文件大小排序;
--sort=WORD排序关键词,可能的值: "none", "time", "size", "extension", "version";
--time=WORD显示文档的指定时间,而不是显示修改时间,可能的值:
  atime, access, use, ctime or status; 
如果“--sort=time”,也可以使用此时间作为排序键;
-t使用修改时间排序;
-T
--tabsize=COLS
设置tab制表符的长度,而不是使用默认的8字符长度;
-u 按最后访问时间排序; 使用“-l”显示最后访问时间;
-U 不排序,使用目录的默认顺序;
-v 按版本排序
-w
--width=COLS
指定屏幕宽度,而不是使用屏幕的实际宽度;
-x按行的顺序显示,而不是按列的顺序;
-X按字母顺序排序;
-1每行显示一个文件;
--help显示帮助信息;
--version输出版本号;
 
三、用法演示:
1、“-a”和“-A”选项的区别:
[root@aiezu.com ~]# ls -a
. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc mysqlaccess.log .mysql_history .tcshrc .viminfo

[root@aiezu.com ~]# ls -A
anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc mysqlaccess.log .mysql_history .tcshrc .viminfo

 2、“-b”和“--show-control-chars”选项演示:
  下面通过创建两个含不可显示字符“\001”和“\n”的文件名,来展示“-b”和“--show-control-chars”选项的区别:
[root@aiezu.com mm]# touch "`echo -e "aiezu.com\001.txt"`"

[root@aiezu.com mm]# touch "`echo -e "aiezu\n.com.txt"`"

[root@aiezu.com mm]# ls
aiezu.com?.txt aiezu?.com.txt

[root@aiezu mm]# ls -b
aiezu.com\001.txt aiezu\n.com.txt

[root@aiezu.com mm]# ls --show-control-chars
aiezu.com.txt aiezu
.com.txt
 
3、文件大小:
[root@S2 opt]# ls -l aiezu.com.zip 
-rw-r--r-- 1 root root 8007112 Nov 22 21:45 aiezu.com.zip

[root@S2 opt]# ls -lh aiezu.com.zip
-rw-r--r-- 1 root root 7.7M Nov 22 21:45 aiezu.com.zip

[root@S2 opt]# ls -l --block-size=1k aiezu.com.zip
-rw-r--r-- 1 root root 7820 Nov 22 21:45 aiezu.com.zip

[root@S2 opt]# ls -s aiezu.com.zip
7820 aiezu.com.zip
 
4、ls命令“-F 参数”与“-p”参数演示:
未标题-1.png

5、文件创建时间、访问时间、修改时间:
#文件的创建时间
[root@aiezu mm]# ls -lc aiezu.com.conf
-rw-r--r--. 1 root root 2 11月 22 22:43 aiezu.com.conf

[root@aiezu mm]# ls --full-time --time=ctime aiezu.com.conf
-rw-r--r--. 1 root root 2 2016-11-22 22:43:23.572000000 +0800 aiezu.com.conf



#文件的修改时间:
[root@aiezu mm]# ls -l aiezu.com.conf
-rw-r--r--. 1 root root 2 11月 22 22:41 aiezu.com.conf

[root@aiezu mm]# ls --full-time aiezu.com.conf
-rw-r--r--. 1 root root 2 2016-11-22 22:41:55.575000000 +0800 aiezu.com.conf



#文件的访问时间:
[root@aiezu mm]# ls -lu aiezu.com.conf
-rw-r--r--. 1 root root 2 11月 22 22:42 aiezu.com.conf

[root@aiezu mm]# ls --full-time --time=atime aiezu.com.conf
-rw-r--r--. 1 root root 2 2016-11-22 22:42:15.060000000 +0800 aiezu.com.conf

Linux 常用ping命令详解

Linuxlinyu520 发表了文章 • 0 个评论 • 291 次浏览 • 2016-11-22 00:13 • 来自相关话题

  不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。
 
一、ping用法:
  ping命令运行在命令提示符终端,用法为:“ping 参数 目标主机”。其中参数为零到多个,目标主机可以是IP或者域名。Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination
 二、ping参数详解:
下面是爱E族(aiezu.com)收集整理的ping详细参数,可能部分不全或翻译错误,欢迎指正:参数详解-aAudible ping.-A自适应ping,根据ping包往返时间确定ping的速度;-b允许ping一个广播地址;-B不允许ping改变包头的源地址;-c countping指定次数后停止ping; -d 使用Socket的SO_DEBUG功能;-F flow_label为ping回显请求分配一个20位的“flow label”,如果未设置,内核会为ping随机分配;-f极限检测,快速连续ping一台主机,ping的速度达到100次每秒;-i interval设定间隔几秒发送一个ping包,默认一秒ping一次;-I interface指定网卡接口、或指定的本机地址送出数据包;-l preload设置在送出要求信息之前,先行发出的数据包;-L抑制组播报文回送,只适用于ping的目标为一个组播地址-n 不要将ip地址转换成主机名;-p pattern指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”;-q不显示任何传送封包的信息,只显示最后的结果-Q tos设置Qos(Quality of Service),它是ICMP数据报相关位;可以是十进制或十六进制数,详见rfc1349和rfc2474文档;-R记录ping的路由过程(IPv4 only);
注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略;-r忽略正常的路由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。-S sndbufSet socket sndbuf. If not specified, it is selected to buffer not more than one packet.-s packetsize指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节;
包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);-t ttl设置TTL(Time To Live)为指定的值。该字段指定IP包被路由器丢弃之前允许通过的最大网段数;-T timestamp_option设置IP timestamp选项,可以是下面的任何一个:
  'tsonly' (only timestamps)
  'tsandaddr' (timestamps and addresses)
  'tsprespec host1 [host2 [host3]]' (timestamp prespecified hops). -M hint 设置MTU(最大传输单元)分片策略。
可设置为:
  'do':禁止分片,即使包被丢弃;
  'want':当包过大时分片;
  'dont':不设置分片标志(DF flag);-m mark设置mark;-v使ping处于verbose方式,它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包;-U Print full user-to-user latency (the old behaviour).
Normally ping prints network round trip time, which can be different f.e. due to DNS failures.-W timeout以毫秒为单位设置ping的超时时间;-w deadlinedeadline;参考内容:http://ss64.com/bash/ping.html
 
三、输出格式:



下图为简单的ping产生的响应内容,图中返回内容具体的含义如下:① ping目标主机的域名和IP(ping会自动将域名转换为IP)② 不带包头的包大小和带包头的包大小(参考“-s”参数)③ icmp_seq:ping序列,从1开始;  ttl:剩余的ttl;  time: 响应时间,数值越小,联通速度越快;④ 发出去的包数,返回的包数,丢包率,耗费时间;⑤ 最小/最大/平均响应时间和本机硬件耗费时间;  
 
四、简单例子:
1、每隔0.6秒ping一次,一共ping 5次:[root@aiezu.com ~]# ping -c 5 -i 0.6 qq.com
PING qq.com (14.17.32.211) 56(84) bytes of data.
64 bytes from 14.17.32.211: icmp_seq=1 ttl=54 time=16.5 ms
64 bytes from 14.17.32.211: icmp_seq=2 ttl=54 time=17.0 ms
64 bytes from 14.17.32.211: icmp_seq=3 ttl=54 time=16.6 ms
64 bytes from 14.17.32.211: icmp_seq=4 ttl=54 time=18.3 ms
64 bytes from 14.17.32.211: icmp_seq=5 ttl=54 time=19.9 ms

--- qq.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2405ms
rtt min/avg/max/mdev = 16.520/17.692/19.919/1.293 ms 
2、极限快速的使用大包ping:
  以最快的速度,使用最大的包进行ping,可用于测试目标主机的承压能力:[root@aiezu ~]# ping -f -s 65507 10.0.0.52
PING 10.0.0.52 (10.0.0.52) 65507(65535) bytes of data.
.^
--- 10.0.0.52 ping statistics ---
646 packets transmitted, 646 received, 0% packet loss, time 1675ms
rtt min/avg/max/mdev = 1.202/2.406/8.253/0.507 ms, ipg/ewma 2.598/2.318 ms注意:此用法非常危险,65535(包头+内容)*100个包每秒=6.25MB,每秒发送6.25MB的数据,相当于50Mbps的带宽,完全可能导致目标主机拒绝服务。请勿用于非法用途,造成不良后果自负。

3、联通不稳定,丢包严重的情形:
  下面的ping发出17个ping icmp包,而只有序号为8、9、12的包收到响应信息,丢包率达82%,联通非常不稳定:[root@aiezu.com ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=8 ttl=43 time=32.3 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=43 time=32.2 ms
64 bytes from 8.8.8.8: icmp_seq=12 ttl=43 time=32.0 ms
^C
--- 8.8.8.8 ping statistics ---
17 packets transmitted, 3 received, 82% packet loss, time 16003ms
rtt min/avg/max/mdev = 32.038/32.208/32.362/0.246 ms 
4、完全无法ping通的情形:[root@aiezu.com ~]# ping -c 3 9.9.9.9
PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data.

--- 9.9.9.9 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms 
五、常见错误:
1、错误一:ping: packet size too large: 70000WARNING: packet size 65508 is too large. Maximum is 65507
PING 10.0.0.52 (10.0.0.52) 65508(65536) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500解决:
  将ping的“-s”参数设置一个更小的值,windows最大值为“65500”,linux最大值为“65507”。 查看全部
  不管在windows平台,还是在linux平台,ping都是非常常用的网络命令;ping命令通过ICMP(Internet控制消息协议)工作;ping可以用来测试本机与目标主机是否联通、联通速度如何、稳定性如何。
 
一、ping用法:
  ping命令运行在命令提示符终端,用法为:“ping 参数 目标主机”。其中参数为零到多个,目标主机可以是IP或者域名。
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination

 二、ping参数详解:
下面是爱E族(aiezu.com)收集整理的ping详细参数,可能部分不全或翻译错误,欢迎指正:
参数详解
-aAudible ping.
-A自适应ping,根据ping包往返时间确定ping的速度;
-b允许ping一个广播地址;
-B不允许ping改变包头的源地址;
-c countping指定次数后停止ping; 
-d 使用Socket的SO_DEBUG功能;
-F flow_label为ping回显请求分配一个20位的“flow label”,如果未设置,内核会为ping随机分配;
-f极限检测,快速连续ping一台主机,ping的速度达到100次每秒;
-i interval设定间隔几秒发送一个ping包,默认一秒ping一次;
-I interface指定网卡接口、或指定的本机地址送出数据包;
-l preload设置在送出要求信息之前,先行发出的数据包;
-L抑制组播报文回送,只适用于ping的目标为一个组播地址
-n 不要将ip地址转换成主机名;
-p pattern指定填充ping数据包的十六进制内容,在诊断与数据有关的网络错误时这个选项就非常有用,如:“-p ff”;
-q不显示任何传送封包的信息,只显示最后的结果
-Q tos设置Qos(Quality of Service),它是ICMP数据报相关位;可以是十进制或十六进制数,详见rfc1349和rfc2474文档;
-R记录ping的路由过程(IPv4 only);
注意:由于IP头的限制,最多只能记录9个路由,其他会被忽略;
-r忽略正常的路由表,直接将数据包送到远端主机上,通常是查看本机的网络接口是否有问题;如果主机不直接连接的网络上,则返回一个错误。
-S sndbufSet socket sndbuf. If not specified, it is selected to buffer not more than one packet.
-s packetsize指定每次ping发送的数据字节数,默认为“56字节”+“28字节”的ICMP头,一共是84字节;
包头+内容不能大于65535,所以最大值为65507(linux:65507, windows:65500);
-t ttl设置TTL(Time To Live)为指定的值。该字段指定IP包被路由器丢弃之前允许通过的最大网段数;
-T timestamp_option设置IP timestamp选项,可以是下面的任何一个:
  'tsonly' (only timestamps)
  'tsandaddr' (timestamps and addresses)
  'tsprespec host1 [host2 [host3]]' (timestamp prespecified hops). 
-M hint 设置MTU(最大传输单元)分片策略。
可设置为:
  'do':禁止分片,即使包被丢弃;
  'want':当包过大时分片;
  'dont':不设置分片标志(DF flag);
-m mark设置mark;
-v使ping处于verbose方式,它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包;
-U Print full user-to-user latency (the old behaviour).
Normally ping prints network round trip time, which can be different f.e. due to DNS failures.
-W timeout以毫秒为单位设置ping的超时时间;
-w deadlinedeadline;
参考内容:http://ss64.com/bash/ping.html
 
三、输出格式:
linux_bash_ping.png
下图为简单的ping产生的响应内容,图中返回内容具体的含义如下:
  • ① ping目标主机的域名和IP(ping会自动将域名转换为IP)
  • ② 不带包头的包大小和带包头的包大小(参考“-s”参数)
  • ③ icmp_seq:ping序列,从1开始;
  •   ttl:剩余的ttl;
  •   time: 响应时间,数值越小,联通速度越快;
  • ④ 发出去的包数,返回的包数,丢包率,耗费时间;
  • ⑤ 最小/最大/平均响应时间和本机硬件耗费时间; 
 
 
四、简单例子:
1、每隔0.6秒ping一次,一共ping 5次:
[root@aiezu.com ~]# ping -c 5 -i 0.6 qq.com
PING qq.com (14.17.32.211) 56(84) bytes of data.
64 bytes from 14.17.32.211: icmp_seq=1 ttl=54 time=16.5 ms
64 bytes from 14.17.32.211: icmp_seq=2 ttl=54 time=17.0 ms
64 bytes from 14.17.32.211: icmp_seq=3 ttl=54 time=16.6 ms
64 bytes from 14.17.32.211: icmp_seq=4 ttl=54 time=18.3 ms
64 bytes from 14.17.32.211: icmp_seq=5 ttl=54 time=19.9 ms

--- qq.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2405ms
rtt min/avg/max/mdev = 16.520/17.692/19.919/1.293 ms
 
2、极限快速的使用大包ping:
  以最快的速度,使用最大的包进行ping,可用于测试目标主机的承压能力:
[root@aiezu ~]# ping -f -s 65507 10.0.0.52
PING 10.0.0.52 (10.0.0.52) 65507(65535) bytes of data.
.^
--- 10.0.0.52 ping statistics ---
646 packets transmitted, 646 received, 0% packet loss, time 1675ms
rtt min/avg/max/mdev = 1.202/2.406/8.253/0.507 ms, ipg/ewma 2.598/2.318 ms
注意:此用法非常危险,65535(包头+内容)*100个包每秒=6.25MB,每秒发送6.25MB的数据,相当于50Mbps的带宽,完全可能导致目标主机拒绝服务。请勿用于非法用途,造成不良后果自负。

3、联通不稳定,丢包严重的情形:
  下面的ping发出17个ping icmp包,而只有序号为8、9、12的包收到响应信息,丢包率达82%,联通非常不稳定:
[root@aiezu.com ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=8 ttl=43 time=32.3 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=43 time=32.2 ms
64 bytes from 8.8.8.8: icmp_seq=12 ttl=43 time=32.0 ms
^C
--- 8.8.8.8 ping statistics ---
17 packets transmitted, 3 received, 82% packet loss, time 16003ms
rtt min/avg/max/mdev = 32.038/32.208/32.362/0.246 ms
 
4、完全无法ping通的情形:
[root@aiezu.com ~]# ping -c 3 9.9.9.9
PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data.

--- 9.9.9.9 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms
 
五、常见错误:
1、错误一:
ping: packet size too large: 70000
WARNING: packet size 65508 is too large. Maximum is 65507
PING 10.0.0.52 (10.0.0.52) 65508(65536) bytes of data.
ping: local error: Message too long, mtu=1500
ping: local error: Message too long, mtu=1500
解决:
  将ping的“-s”参数设置一个更小的值,windows最大值为“65500”,linux最大值为“65507”。

Windows忘记mysql root密码解决方法

Windowslinyu520 发表了文章 • 55 个评论 • 188 次浏览 • 2016-11-20 17:41 • 来自相关话题

  mysql忘记了root密码,只能让mysql服务运行在“--skip-grant-tables”(跳过权限安全检查)模式,在此模式下,在本机不需要密码就能使用root用户登录到mysql的sql命令行,这样就能使用SQL语句修改root密码了。
 
一、进入“--skip-grant-tables”模式:
  要使mysql服务进入“跳过权限安全检查”模式运行,有两种方法:一是在mysql的安装目录下的“my.ini”配置文件里的“[mysqld]”下面添加“skip-grant-tables”,然后重启mysql服务;二是在启动mysqld服务命令行上面添加“--skip-grant-tables”参数。下面分别详细介绍两种方式:
 
方法一:
  在mysql的安装目录下找到“my.ini”(如果没有,可将“my-default.ini”或者“my-small.ini”复制一份改成“my.ini”),修改“my.ini”,在文件最上面的“[mysqld]”选项组下添加“skip-grant-tables”,如下:[mysqld]
skip-grant-tables
#...省略N行..爱E族:aiezu.com...保存文件,在cmd命令行下运行下面命令重启mysql服务,即mysql服务进入了“skip-grant-tables”模式。net stop mysql
net start mysql
 方法二:
1、首先检查mysql服务是否启动,如果已启动则先将其停止服务,可在cmd命令行下运行下面命令停止服务:net stop mysql停止后,cmd进入到mysql安装目录下的bin目录,运行带“--skip-grant-tables”参数的mysql服务启动命令,临时将mysql服务运行在“跳过权限安全检查”模式:cd C:\Program Files\MySQL\MySQL Server 5.3.2.4\bin\
mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.3.2.4\my.ini" --console --skip-grant-tables
二、重置mysql root密码:
新打开一个cmd命令行,输入下面命令,进入到Mysql的SQL语句执行命令行:cd C:\Program Files\MySQL\MySQL Server 5.3.2.4\bin\
mysql -uroot在这里直接回车,不用输入密码。然后就就会出现登录成功的信息。

然后运行下面SQL语句,重置mysql root用户的密码,这里想新密码设置为“aiezu.com”:use mysql;
UPDATE user SET Password=PASSWORD('aiezu.com') where USER='root';
FLUSH PRIVILEGES;
quit
 三、恢复mysql服务到正常模式:
  根据第一步使用的方法不同,去掉“skip-grant-tables”选项,并重启mysql服务,将mysql服务恢复到正常模式运行。
 
四、mysql root密码重置完成:
重新登录,出现输入密码提示,输入新的密码即可登录:mysql -uroot -p
Enter password: ***********密码重置完成!!
 
本文介绍的是Windows忘记mysql root密码解决方法,如果是Linux忘记了root密码,可以参考:Linux忘记mysql root密码解决方法 查看全部
  mysql忘记了root密码,只能让mysql服务运行在“--skip-grant-tables”(跳过权限安全检查)模式,在此模式下,在本机不需要密码就能使用root用户登录到mysql的sql命令行,这样就能使用SQL语句修改root密码了。
 
一、进入“--skip-grant-tables”模式:
  要使mysql服务进入“跳过权限安全检查”模式运行,有两种方法:一是在mysql的安装目录下的“my.ini”配置文件里的“[mysqld]”下面添加“skip-grant-tables”,然后重启mysql服务;二是在启动mysqld服务命令行上面添加“--skip-grant-tables”参数。下面分别详细介绍两种方式:
 
方法一:
  在mysql的安装目录下找到“my.ini”(如果没有,可将“my-default.ini”或者“my-small.ini”复制一份改成“my.ini”),修改“my.ini”,在文件最上面的“[mysqld]”选项组下添加“skip-grant-tables”,如下:
[mysqld]
skip-grant-tables
#...省略N行..爱E族:aiezu.com...
保存文件,在cmd命令行下运行下面命令重启mysql服务,即mysql服务进入了“skip-grant-tables”模式。
net stop mysql
net start mysql

 方法二:
1、首先检查mysql服务是否启动,如果已启动则先将其停止服务,可在cmd命令行下运行下面命令停止服务:
net stop mysql
停止后,cmd进入到mysql安装目录下的bin目录,运行带“--skip-grant-tables”参数的mysql服务启动命令,临时将mysql服务运行在“跳过权限安全检查”模式:
cd C:\Program Files\MySQL\MySQL Server 5.3.2.4\bin\
mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server 5.3.2.4\my.ini" --console --skip-grant-tables

二、重置mysql root密码:
新打开一个cmd命令行,输入下面命令,进入到Mysql的SQL语句执行命令行:
cd C:\Program Files\MySQL\MySQL Server 5.3.2.4\bin\
mysql -uroot
在这里直接回车,不用输入密码。然后就就会出现登录成功的信息。

然后运行下面SQL语句,重置mysql root用户的密码,这里想新密码设置为“aiezu.com”:
use mysql;
UPDATE user SET Password=PASSWORD('aiezu.com') where USER='root';
FLUSH PRIVILEGES;
quit

 三、恢复mysql服务到正常模式:
  根据第一步使用的方法不同,去掉“skip-grant-tables”选项,并重启mysql服务,将mysql服务恢复到正常模式运行。
 
四、mysql root密码重置完成:
重新登录,出现输入密码提示,输入新的密码即可登录:
mysql -uroot -p
Enter password: ***********
密码重置完成!!
 
本文介绍的是Windows忘记mysql root密码解决方法,如果是Linux忘记了root密码,可以参考:Linux忘记mysql root密码解决方法

CentOS 7上如何修改主机名?

CentOSliuliangsong 发表了文章 • 0 个评论 • 100 次浏览 • 2016-11-02 10:47 • 来自相关话题

  在CentOS 7中,修改主机名的方法和以前版本已经不同、CentOS 7引入了全新的主机名体系。CentOS 7定义了三种主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。
“静态”主机名也称为“内核主机名”,是系统在启动时自动从“/etc/hostname”文件初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名。如由“DHCP”或“mDNS”服务器分配。“灵活”主机名允许使用特殊字符(包括空格)的主机名,而其他两种都必须遵从“互联网域名”字符限制规则。
 
一、查看主机名:
  可以使用“hostnamectl status --static|transient|pretty”(三个参数选一个)分别查看对应类型的主机名:hostnamectl status --static #查看静态主机名
hostnamectl status --transient #查看瞬态主机
hostnamectl status --pretty #查看灵活主机名
二、修改主机名:
1、同时修改三种类型的主机名:
  我们这里先将主机名设置成本站的域名“aiezu.com”(爱E族),并在“aiezu.com”前后加上一个特殊字符,使用“%aiezu.com%”做为主机名。修改后,再分别查看三种类型修改后的主机名。hostnamectl set-hostname %Aiezu.com%
#查看修改后的状态:
hostnamectl status --static
#aiezu.com
hostnamectl status --transient
#aiezu.com
hostnamectl status --pretty
#%Aiezu.com%从上面可以看出,前面两种主机名中的特殊字符被删除,大写字母被转变为小写,只有最后的灵活主机名保留了原来的完整主机名字符串。
 
2、分别修改三种类型的主机名:
  如果只希望分别修改三种类型的主机名,可以这样修改:#修改静态主机名
hostnamectl set-hostname --static aiezu.com

#修改瞬态主机
hostnamectl set-hostname --transient aiezu.com

#修改灵活主机名
hostnamectl set-hostname --pretty aiezu.com
 3、更新hosts文件:
修改主机名后需要更新“/etc/hosts”文件,否则系统无法根据设置的主机名找到是本机“127.0.0.1”。127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6修改为:127.0.0.1 aiezu.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 aiezu.com localhost localhost.localdomain localhost6 localhost6.localdomain6 
三、修改后效果:
1、命令提示符效果:
  设置主机名后,无需重启,使用“su -”重新登录后、就能在命令提示符上看到主机名(命令提示符使用的是“静态主”机名)。我们设置的是域名“aiezu.com”做为主机名,所以只会显示域名的主机名部分。[root@localhost ~]# hostnamectl set-hostname aiezu.com
[root@localhost ~]# su -
上一次登录:三 11月 2 02:17:43 CST 2016从 10.0.0.52pts/0 上
[root@aiezu ~]#2、hostname命令:[root@aiezu ~]# hostname
aiezu.com3、“/etc/hostname”文件:[root@aiezu ~]# cat /etc/hostname
aiezu.com 
四、总结:
介绍那么多,CentOS 7修改主机名,就一条命令,再修改“/etc/hosts”文件就行:hostnamectl set-hostname aiezu.com
# su - 查看全部
  在CentOS 7中,修改主机名的方法和以前版本已经不同、CentOS 7引入了全新的主机名体系。CentOS 7定义了三种主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。
  • “静态”主机名也称为“内核主机名”,是系统在启动时自动从“/etc/hostname”文件初始化的主机名。
  • “瞬态”主机名是在系统运行时临时分配的主机名。如由“DHCP”或“mDNS”服务器分配。
  • “灵活”主机名允许使用特殊字符(包括空格)的主机名,而其他两种都必须遵从“互联网域名”字符限制规则。

 
一、查看主机名:
  可以使用“hostnamectl status --static|transient|pretty”(三个参数选一个)分别查看对应类型的主机名:
hostnamectl status --static #查看静态主机名
hostnamectl status --transient #查看瞬态主机
hostnamectl status --pretty #查看灵活主机名

二、修改主机名:
1、同时修改三种类型的主机名:
  我们这里先将主机名设置成本站的域名“aiezu.com”(爱E族),并在“aiezu.com”前后加上一个特殊字符,使用“%aiezu.com%”做为主机名。修改后,再分别查看三种类型修改后的主机名。
hostnamectl set-hostname %Aiezu.com%
#查看修改后的状态:
hostnamectl status --static
#aiezu.com
hostnamectl status --transient
#aiezu.com
hostnamectl status --pretty
#%Aiezu.com%
从上面可以看出,前面两种主机名中的特殊字符被删除,大写字母被转变为小写,只有最后的灵活主机名保留了原来的完整主机名字符串。
 
2、分别修改三种类型的主机名:
  如果只希望分别修改三种类型的主机名,可以这样修改:
#修改静态主机名
hostnamectl set-hostname --static aiezu.com

#修改瞬态主机
hostnamectl set-hostname --transient aiezu.com

#修改灵活主机名
hostnamectl set-hostname --pretty aiezu.com

 3、更新hosts文件:
修改主机名后需要更新“/etc/hosts”文件,否则系统无法根据设置的主机名找到是本机“127.0.0.1”。
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改为:
127.0.0.1   aiezu.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 aiezu.com localhost localhost.localdomain localhost6 localhost6.localdomain6
 
三、修改后效果:
1、命令提示符效果:
  设置主机名后,无需重启,使用“su -”重新登录后、就能在命令提示符上看到主机名(命令提示符使用的是“静态主”机名)。我们设置的是域名“aiezu.com”做为主机名,所以只会显示域名的主机名部分。
[root@localhost ~]# hostnamectl set-hostname aiezu.com
[root@localhost ~]# su -
上一次登录:三 11月 2 02:17:43 CST 2016从 10.0.0.52pts/0 上
[root@aiezu ~]#
2、hostname命令:
[root@aiezu ~]# hostname
aiezu.com
3、“/etc/hostname”文件:
[root@aiezu ~]# cat /etc/hostname 
aiezu.com
 
四、总结:
介绍那么多,CentOS 7修改主机名,就一条命令,再修改“/etc/hosts”文件就行:
hostnamectl set-hostname aiezu.com
# su -

CentOS 7中使用Yum安装MariaDB数据库

CentOSliuliangsong 发表了文章 • 0 个评论 • 126 次浏览 • 2016-11-01 21:34 • 来自相关话题

  自CentOS 7.0起,CentOS中使用MariaDB代替以前版本的MySQL。MariaDB是MySQL的一个分支,由开源社区维护。MariaDB采用GPL授权许可,MariaDB的完全兼容MySQL,包括API、SQL语法、命令行,使之轻松成为MySQL代替品。
 
一、实验环境:操作系统:CentOS 7.0 64位(最小安装)MariaDB版本:系统自带(mariadb-5.5.50-1.el7_2)
 
二、安装前准备:
  爱E族提醒您,安装前需检查是否已经安装了Mysql数据库或者MariaDB数据库,如果已经安装,需先卸载。并需要检查3306端口是否已经被占用:
检查是否安装mysql服务:#检查是否安装mysql
rpm -qa|grep mysql-server
#如果已经安装,则卸载(爱E族aiezu.com)
yum remove mysql
yum remove mysql-server检查是否已安装mariadb:#检查是否安装mariadb
rpm -qa|grep mariadb
#如果已经安装,则卸载
yum remove mariadb-server
yum remove mariadb检查3306端口(MariaDB服务端口)是否已被占有:lsof -i :3306爱E族提醒:如果未来到lsof命令,请运行“yum -y install lsof”安装“lsof”命令;
 
三、开始安装MariaDB:
1、更新系统:
安装前运行“yum -y update”更新下系统是非常有必要的,有利于减少系统漏洞。yum -y update2、安装mariadb数据库:yum -y install mariadb mariadb-server如果一切顺利,mariadb就已经安装好了,下步就是配置mariadb了(爱E族)
 
四、配置MariaDB:
1、启动MariaDB数据库://启动服务
service mariadb start
//查看运行状态(爱E族)
service mariadb status2、设置MariaDB数据库的root密码://设置密码:输入下面命令,回车后输入两次新密码
mysqladmin password
//修改密码:输入下面命令,回车后输入旧密码,再回车输入两次新密码
mysqladmin -p password3、还可以运行“mysql_secure_installation”配置MariaDB,运行命令后,屏幕输出以下内容,要求交互选择“Y/n”,具体的交互包括:1、输入当前密码(默认为空直接回车);2、是否修改当前密码,建议修改;3、是否删除匿名帐号,建议删除;4、是否禁止root帐号远程登录,默认只运行root本机登录,建议禁止,确保安全;5、是否删除“test”数据库,看个人自己选择;6、重新加载表权限,选Y。/usr/bin/mysql_secure_installation:行379: find_mysql_client: 未找到命令

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here(aiezu.com).

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, (http://aiezu.com)and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB! 
五、登录数据库:
1、登录到mariadb数据库://运行下面命令,并输入刚才修改的密码
mysql -uroot -p2、添加一个名称为"aiezu"的帐号:--创建一个只允许本机登录的帐号“aiezu”(爱E族),其中“your_password”为帐号的密码;
--如果创建允许远程登录的帐号,请将“localhost”改成“%”
CREATE USER 'aiezu'@'localhost' IDENTIFIED BY 'your_password';
--CREATE USER 'aiezu'@'%' IDENTIFIED BY 'your_password';3、创建一个名称为“aiezu_db”的数据库:create database aiezu_db default character set 'utf8';4、将库“aiezu_db”的所有权限给予用户“aiezu”:--授权给aiezu(aiezu.com)
grant all privileges on aiezu_db.* to 'aiezu'@'localhost';
--刷新权限
flush privileges;5、退出到bash shell,使用创建的用户“aiezu”登录到“aiezu_db”库://输入下面一条命令回车后输入创建用时使用的密码,这里上面使用的是“your_password”
mysql -u aiezu -p
//登录后use aiezu_db 
六、防火墙开启数据库3306端口:
CentOS 7默认防火墙使用的是“firewalld”。运行下面代码,在防火墙“firewalld”中开启公网访问MariaDB数据库3306端口:systemctl restart firewalld
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload 查看全部
  自CentOS 7.0起,CentOS中使用MariaDB代替以前版本的MySQL。MariaDB是MySQL的一个分支,由开源社区维护。MariaDB采用GPL授权许可,MariaDB的完全兼容MySQL,包括API、SQL语法、命令行,使之轻松成为MySQL代替品。
 
一、实验环境:
  • 操作系统:CentOS 7.0 64位(最小安装)
  • MariaDB版本:系统自带(mariadb-5.5.50-1.el7_2)

 
二、安装前准备:
  爱E族提醒您,安装前需检查是否已经安装了Mysql数据库或者MariaDB数据库,如果已经安装,需先卸载。并需要检查3306端口是否已经被占用:
检查是否安装mysql服务:
#检查是否安装mysql
rpm -qa|grep mysql-server
#如果已经安装,则卸载(爱E族aiezu.com)
yum remove mysql
yum remove mysql-server
检查是否已安装mariadb:
#检查是否安装mariadb
rpm -qa|grep mariadb
#如果已经安装,则卸载
yum remove mariadb-server
yum remove mariadb
检查3306端口(MariaDB服务端口)是否已被占有:
lsof -i :3306
爱E族提醒:如果未来到lsof命令,请运行“yum -y install lsof”安装“lsof”命令;
 
三、开始安装MariaDB:
1、更新系统:
安装前运行“yum -y update”更新下系统是非常有必要的,有利于减少系统漏洞。
yum -y update
2、安装mariadb数据库:
yum -y install mariadb mariadb-server
如果一切顺利,mariadb就已经安装好了,下步就是配置mariadb了(爱E族)
 
四、配置MariaDB:
1、启动MariaDB数据库:
//启动服务
service mariadb start
//查看运行状态(爱E族)
service mariadb status
2、设置MariaDB数据库的root密码:
//设置密码:输入下面命令,回车后输入两次新密码
mysqladmin password
//修改密码:输入下面命令,回车后输入旧密码,再回车输入两次新密码
mysqladmin -p password
3、还可以运行“mysql_secure_installation”配置MariaDB,运行命令后,屏幕输出以下内容,要求交互选择“Y/n”,具体的交互包括:1、输入当前密码(默认为空直接回车);2、是否修改当前密码,建议修改;3、是否删除匿名帐号,建议删除;4、是否禁止root帐号远程登录,默认只运行root本机登录,建议禁止,确保安全;5、是否删除“test”数据库,看个人自己选择;6、重新加载表权限,选Y。
/usr/bin/mysql_secure_installation:行379: find_mysql_client: 未找到命令

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here(aiezu.com).

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, (http://aiezu.com)and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
 
五、登录数据库:
1、登录到mariadb数据库:
//运行下面命令,并输入刚才修改的密码
mysql -uroot -p
2、添加一个名称为"aiezu"的帐号:
--创建一个只允许本机登录的帐号“aiezu”(爱E族),其中“your_password”为帐号的密码;
--如果创建允许远程登录的帐号,请将“localhost”改成“%”
CREATE USER 'aiezu'@'localhost' IDENTIFIED BY 'your_password';
--CREATE USER 'aiezu'@'%' IDENTIFIED BY 'your_password';
3、创建一个名称为“aiezu_db”的数据库:
create database aiezu_db default character set 'utf8';
4、将库“aiezu_db”的所有权限给予用户“aiezu”:
--授权给aiezu(aiezu.com)
grant all privileges on aiezu_db.* to 'aiezu'@'localhost';
--刷新权限
flush privileges;
5、退出到bash shell,使用创建的用户“aiezu”登录到“aiezu_db”库:
//输入下面一条命令回车后输入创建用时使用的密码,这里上面使用的是“your_password”
mysql -u aiezu -p
//登录后use aiezu_db
 
六、防火墙开启数据库3306端口:
CentOS 7默认防火墙使用的是“firewalld”。运行下面代码,在防火墙“firewalld”中开启公网访问MariaDB数据库3306端口:
systemctl restart firewalld
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload