Ubuntu16.04系统无法启动grub rescue模式下修复grub

前几天整理了下电脑的分区,合并并删除一些分区,结果导致 grub 被破坏了,Ubuntu进不去了,启动后直接进入了 rescure 模式。后来又折腾了下,终于修复好了,现总结一下。

先说一下我的系统环境,我是 Win7 + Ubuntu 16.04 双系统,先安装的 Win7,后安装的 Ubuntu。采用的是 Windows 引导 Ubuntu 的方式,使用的工具是”EasyBCD 2.3 个人版本“。Ubuntu 分区时,”/boot” 是单独分区的。详细分区情况如下:“/boot” 分区, “/” 分区, “swap 交换空间“。

另外需要说明的,我在安装 Ubuntu 时,“安装启动引导器的设备”选择的是 “/boot” 所在的分区。

下面正式开始详细说明解决办法:

进入 Ubuntu 时,画面如下:

系统管理

首先,使用 ls 命令,找到 Ubuntu 的分区,执行 ls 命令后的结果如下:

系统管理

此时会看到硬盘上的分区情况,例如(hd0,msdos1),(hd0,msdos2)等等,其中 hd0 中的 0 代表第 1 块硬盘(硬盘号从 0 开始),msdos1 中的 1 代表第 1 个分区。

然后依次调用如下命令,直到找到 Ubuntu 所在的分区,命令如下:ls (hdx,msdosy)
其中 x 代表硬盘号,y 代表分区号。
以我的机器为例,依次查看每个分区情况:

ls (hd0,msdos1)
ls (hd0,msdos2)
ls (hd0,msdos3)
#......

执行结果如下:

系统管理

系统管理

系统管理

执行完之后,发现 (hd0,msdos5)和(hd0,msdos6)是 Ubuntu 的分区。然后分别执行如下命令,确定 grub 所在的分区:

ls (hd0,msdos5)/grub
ls (hd0,msdos6)/grub
# 若 “/boot” 没有单独分区,需要执行如下命令(待验证):
ls (hd0,msdos5)/boot/grub
ls (hd0,msdos6)/boot/grub

系统管理

执行完之后,发现 (hd0,msdos5) 中,有 grub.cfg 文件。说明 (hd0,msdos5) 是我们要找的引导分区。

之后,再依次执行如下命令,修复 grub 引导,并进入 grub2 引导画面:

set root=(hd0,msdos5)
set prefix=(hd0,msdos5)/grub
insmod normal
normal
# 若 “/boot” 没有单独分区,需要执行如下命令(待验证):
set root=(hd0,msdos5)
set prefix=(hd0,msdos5)/boot/grub
insmod normal
normal

系统管理

执行完上述命令之后,就可以看到 Ubuntu 的 grub2 引导画面,可以正常进入 Ubuntu 了。

系统管理

不过你会发现,若重新启动电脑的话,问题依旧。那是因为我们还没有执行 grub 的更新命令。

重新执行上述的命令,进入 Ubuntu。然后在终端执行如下命令更新 grub:

sudo update-grub2
sudo grub-install /dev/sda

  
注意: /dev/sda 后面不要加分区号,例如 sda1,sda2 之类的。
  
执行结果如下:

系统管理

系统管理

至此,grub 终于的修复完毕。不过,此时若重新电脑的话,你会发现,启动时变成了 Ubuntu 引导 Windows 了。而修复之前是 Windows 引导 Ubuntu。

为了解决这个问题,我用的方法是先进入 Win7,然后使用 ”EasyBCD“ 重新修复 MBR 从而解决了这个问题。

操作方法很简单:启动 EasyBCD,选择左侧的 ”BCD部署“,然后选中右侧的 ”在MBR中安装 Windows Vista+的bootloader“,也就是默认的第一项,最后点击 ”编写 MBR“ 按钮。

到这里,才算是直接的完成了 grub 的修复,并且可以用 Windows 引导 Ubuntu 了。
  ——————————————————————————————————

在一般情况下,有人可能直接修改GRUB配置文件“/boot/grub/grub.cfg”,但使用“sudu vim /boot/grub/grub.cfg”发现提示这个是系统自动生成的文件,不建议直接编辑,而应该到“/etc/grub.d”和“/etc/default/grub”去修改。
  
“/etc/grub.d”是操作系统菜单目录,一般由系统生成,我们无需修改,接下来就是修改“/etc/default/grub”文件了。使用“sudo vim /etc/default/grub”命令打开该配置文件。
  
其中的“GRUB_DEFAULT=0”就是设置的默认启动项了。GRUB启动项是按照启动菜单依次使用数字进行索引了,起始数字为0。结合前面的系统启动菜单,我们可以看到,Windows8的启动项在第5项,因此这里我们就需要修改为4(因为第一项是从0开始的)
  
修改完成,保存退出之后,还需要执行一下“sudo update-grub”来重新生成GRUB启动配置项。(修改GRUB配置之后,注意使用update-grub更新启动程序,否则修改将不会生效。)

Ubuntu系统配置Nginx Node.js MongoDB环境

腾讯云最近上线了开发者实验室,主要的功能就是提供一台真实的 VPS,让你现场敲 Linux 命令来完成各种实验任务,比如现场搭建 Python 开发环境、基于 Ubuntu 搭建 WordPress 个人博客等等,所谓“让所有技术更容易入门”。

未分类

目前腾讯云这个服务是免费的,不过是限时免费。比如这篇文章讲的用 Ubuntu 搭建微信小程序服务,就是限制必须 3 个小时内完成实验。如果没完成又想保存学习进度的话,你就要花 65 元买下这个 VPS 才行,否则机器直接会被释放,并且过 24 小时后才能重新开始同样的实验。

未分类

咱看到这个服务就直接玩得不亦乐乎,一晚上直接把所有课程基本刷了一遍,给我的体验呢,感觉就像是程序员的密室逃脱游戏,非常有意思。当然了,既然是个“实验课”,它也会一步一步教你,所以并不是难。

这篇文章呢,算是自己做个 Mark。当然,也是给真正有需要搭建微信小程序服务的同学一点参考。本文的最终效果是成功部署 Node.js + Websocket 构建的网络版锤子剪刀布游戏。

对了,要去玩这个小程序实验的同学,最好有点 Linux 和 Node.js 基础,然后提前准备好一个域名和一个可用的域名 SSL 证书,因为小程序必须采用 HTTPS 访问,然后你还得再三个小时之内当场配置 HTTPS。

1、申请域名和 SSL 证书

(1)、域名服务商推荐 Godaddy / 阿里云 / Name.com,注册一个自己想要的域名。
(2)、由于小程序服务端必须使用 HTTPS 域名连接,所以关于 SSL 证书的申请请看这篇文章:http://devops.webres.wang/2017/07/nginx-config-ssl-force-301-https/

2、注册微信小程序账号

不管你曾经在微信公众平台注册过没有,反正就是要重新注册一个,因为服务号 / 公众号不能和小程序号互换,注册微信小程序账号:https://mp.weixin.qq.com/

3、设置微信公众平台

注册小程序账号进入后,点击设置->开发设置->服务器域名,把你自己注册的域名写入request合法域名和socket合法域名中,后面两个域名不用填。

这一步的原因是:如果在微信上运行的小程序想联网,必须采用这两个合法域名才可以连接,否则直接被微信阻止连接。

4、安装本地开发环境

(1)、开发微信小程序,首先得安装微信 web 开发者工具,下载:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html
(2)、下载小程序源码:https://best66.me/wp-content/uploads/2017/07/lab-weapp-client-master.zip

重复一遍呀,这篇文章主要是介绍如何操作服务器并且从零开始搭建微信小程序服务,所以直接给小程序源码了。

5、配置本地开发环境

(1)、在微信 web 开发者工具添加项目,AppID 依旧在微信公众平台->设置->开发设置->开发者 ID 中。
(2)、项目名称随你
(3)、项目目录选择下载的 lab-weapp-client-master 中直接包含 app.js 的目录
(4)、在微信 web 开发者工具打开 app.js(这是一个全局配置文件),将 host 中的域名修改为你自己的域名

6、安装 Node.js

Node.js 是一个 JS 运行环境,通过它可以实现 JS 编写后端服务器。
(1)、连接你的 VPS
(2)、使用下面的命令安装 Node.js

sudo apt-get update  
sudo wget https://mc.qcloudimg.com/static/archive/262420521a966befe17dfa0070ddb272/node-v6.11.0.tar.gz
sudo tar xvf node-v6.11.0.tar.gz
cd node-v6.11.0
sudo ./configure # 自动配置编译
sudo make # 由于 apt-get 安装不到最新版,我们采用编译安装来安装 Node.js。这条命令会执行比较久。
sudo make install # 采用这条命令来编译安装,以便可以在任何地方使用 node 命令
sudo cp /usr/local/bin/node /usr/sbin/

(3)、安装完成后,使用下面的命令测试安装结果,会输出当前的 Node.js 版本:

node -v

7、上传后端源码并安装依赖组件

(1)、上传 data 文件夹到服务器根目录,点击下载。上传后,修改所有文件权限为 a+rw。
(2)、进入此工作目录

cd /data/release/webapp

(3)、在工作目录创建 package.json 文件,并修改文件的访问权限。

sudo touch package.json
sudo chmod a+r+w package.json

(4)、Node.js 的每个包应该有 package.json 描述文件,包含包名、包版本和依赖包等信息。我们修改 package.json 添加我们服务器包的名称和版本号,可参考下面的示例。vi 命令进入修改。

{
    "name": "webapp",
    "version": "1.0.0"
}

(5)、NPM 之于 Node,如同 homebrew 之于 OS X,apt-get 之于 Ubuntu。我们先安装 NPM 包管理工具。

sudo apt-get install npm

(6)、pm2 是一个带有负载均衡功能的 Node 应用的进程管理器,我们的应用最好是通过 pm2 来运行和管理,而不是使用原生的 Node 执行。使用下面的命令安装 pm2

sudo npm install -g pm2 # 全局安装 pm2 模块
# 如果安装时间太长,我们可以用淘宝的镜像来安装:
# sudo npm install -g pm2 --registry=https://registry.npm.taobao.org

我们顺便看看 pm2 支持的命令:

pm2 start app.js # 运行
pm2 logs # 查看工作日志
pm2 restart app #重启

(7)、我们的服务器源码里使用到了 Express 模块,这是一个 Node.js 的 MVC 框架。Express 的调用方法可以看看源码里的 app.js,它是应用的入口。下面的命令使用 NPM 来安装 Express。

cd /data/release/webapp
sudo npm install express --save # 这里一定要在工作目录执行这条命令,因为会自动更新 package.json 的依赖项

(8)、小程序不支持 Cookie 存储和跟踪,服务器需要自行实现会话层。这里我们的源码采用了 MongoDB 在后端存储会话数据、Node 的模块 connect-mongo 来连接数据库。配合腾讯在 Github 上发布的 Express 会话管理中间件 wafer-node-session 实现小程序会话(还支持 redis 等数据库,github)会话管理的相关源码依旧在 app.js 入口文件中,大家可以去研究。

使用 apt-get 在机器上安装 MongoDB 和客户端命令行工具:

sudo apt-get install mongodb-server mongodb -y 

安装结束后,可以使用下面的命令查看安装的版本:

sudo mongod --version
sudo mongo --version

安装 connect-mongo、wafer-node-session 模块:

cd /data/release/webapp
sudo npm install connect-mongo wafer-node-session --save

(9)、WebSocket 是新一代 Web 通讯技术,直接基于 80 端口和 443 端口。通过 WebSocket 我们可以实现玩家直接与服务器双向通信,不用重复进行握手,延时很低。这里我们需要 ws 模块实现 WebSocket。(源码中 websocket.js 用来和玩家直接双向通信,含有游戏入口。而 app.js 是整个 App 的入口,包含 websocket.js)

cd /data/release/webapp
sudo npm install --save ws

(10)、HumanPlayer.js 的源码中使用到了 co 模块进行协程管理,启动游戏服务前,需要先安装:

cd /data/release/webapp
sudo npm install co --save

8、配置 MongoDB

创建目录,用于 MongoDB 数据和日志存储:

sudo mkdir -p /data/mongodb
sudo mkdir -p /data/logs/mongodb

创建后,使用下面的命令来启动 MongoDB:

sudo mongod --fork --dbpath /data/mongodb --logpath /data/logs/mongodb/webapp.log

可以使用下面的命令来检查是否启动成功

netstat -ltp | grep 27017 # 注:27017 是 MongoDB 默认端口

登录本地 MongoDB 服务:

sudo mongo

登录后,创建一个用户 webapp:

use webapp;
db.addUser({ user: 'webapp', pwd: '你想要的密码', roles: ['dbAdmin', 'readWrite']});

创建完成后,使用 exit 退出命令行工具。

9、配置 config.js

config.js 是服务端应用配置文件,调用位置在 app.js 入口文件。config.js 可参考下面的修改。(注:请将 YORU_APP_ID 和 YOUR_APP_SECRET 替换为你申请的小程序对应的 AppID 和 AppSecret)

cd /data/release/webapp
vi config.js
module.exports = { 
    // 8765 是为了设置 Node.js 构建的 Web App 监听端口,使用 http://主机IP:8765/ 可以进行查看
    serverPort: '8765', 

    // 小程序 appId 和 appSecret 
    // 请到 https://mp.weixin.qq.com 获取 AppID 和 AppSecret
    appId: 'YORU_APP_ID', 
    appSecret: 'YOUR_APP_SECRET', 

    // mongodb 连接配置,生产环境请使用更复杂的用户名密码
    mongoHost: '127.0.0.1', 
    mongoPort: '27017', 
    // 27017 是 MongoDB 默认端口,我们没有修改
    mongoUser: 'webapp', 
    mongoPass: '替换为你刚刚设置的密码', 
    mongoDb: 'webapp'
};

10、安装配置 Nginx

微信小程序要求和服务器的通信都通过 HTTPS 进行,所以我们需要用 Nginx 实现 HTTPS,并反向代理到 Node 服务器来处理。

(1)、在 Ubuntu 上,可直接使用 apt-get 来安装 Nginx

sudo apt-get install nginx -y

(2)、安装完成后,使用 nginx 命令启动 Nginx:

sudo /etc/init.d/nginx start

现在我们可以通过 http://主机IP/ 来查看 Nginx 默认页面。

(3)、配置 HTTPS 反向代理

修改 /etc/nginx 目录的读写权限:

sudo chmod a+rw /etc/nginx

在 /etc/nginx/conf.d 目录创建 ssl.conf 文件:

cd /etc/nginx/conf.d
sudo touch ssl.conf
sudo chmod a+rw ssl.conf

将 ssl.conf 文件修改为如下内容(关于详细的 SSL 证书申请和配置请看这篇文章):

# 让 Nginx 代理支持 WebSocket 的配置
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
        listen 443;
        server_name www.example.com; # 改为绑定证书的域名

        # ssl 配置
        ssl on;
        ssl_certificate sshh.pem; # 改为自己申请得到的 crt 文件的名称
        ssl_certificate_key sshh.key; # 改为自己申请得到的 key 文件的名称
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        # WebSocket 配置
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # 反向代理
        location / {
            proxy_pass http://127.0.0.1:8765;
            # 8765 是刚刚通过 config.js 设置的通过 Node.js 构建的 Web App 的端口,可以使用 http://你的域名:8765/ 来查看,Nginx 代理以后,就可以直接使用 https://你的域名/ 来查看了
        }
    }

最后,我们运行入口文件:

pm2 start app.js

让 Nginx 重新加载配置使其生效:

sudo nginx -s reload

最终效果:

未分类

引用

大部分资料源于腾讯开发者实验室,我只是根据个人理解做了注释和顺序修改,所以,要感谢腾讯咯。

这篇文章花的时间很长,改动也非常多,如有错误,敬请指正!

Nginx申请并部署SSL证书 强制 301 重定向到 HTTPS

通常在网银、购物网站上登录的时候我们会看到地址栏显示一把绿色的锁,这表明我们正在通过 HTTPS 进行加密连接。

在这个 HTTPS Everywhere 的年代,百度、360 导航等网站为了防劫持也是纷纷全面开启了强制 HTTPS。Google 之前曾有承诺会给予 HTTPS 网站一定的权重增加,其 Search Console 也提供了良好的 HTTPS 支持。国内搜索引擎也渐渐跟上,尤其是百度站长平台还提供了 HTTPS 认证和 HTTPS 退场功能,可以一键快速无痛转换。再有,优酷站外 也提供了 HTTPS 的支持,可以说目前网上大部分主流资源都可以找到其对应 HTTPS 的形式,HTTPS 已经是势不可挡的潮流。

个人认为,凡是涉及到用户登录、会员注册、账号密码的网站服务都可以上 HTTPS,目前来说转换成本也不高,毕竟是真的已经到了 HTTPS Everywhere 的时代。

申请 SSL 证书

其实目前来说国内的 SSL 证书提供商已经快倒完了。360 旗下的沃通和 Startcom 因为发假证书和隐瞒收购的问题早在去年就被警告过,而且就在上个星期,火狐称准备完全取消对沃通、Startcom 和 CNNIC 的信任,也就是说,所有使用这些证书的网站都会报错,Google 和火狐都督促使用以上证书的网站立即更换证书。

个人建议可以使用阿里云或者腾讯云(下图)的 DV 证书,只需要验证域名所有权,目前可以免费申请免费续费,另外还有非常便宜的 Comodo PositiveSSL,单年 9 美元。

Nginx

  • 域名型 SSL 证书(DV SSL):信任等级普通,只需验证网站的真实性便可颁发证书保护网站;
  • 企业型 SSL 证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
  • 增强型 SSL 证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。

部署 SSL 证书

1、下载对应证书版本

Apache / IIS / Nginx 都有对应的证书版本,这里 LNMP 是下载 Nginx 版,解压以后可以看到一个 .key 文件和 .crt/.pem 文件

Nginx

2、上传证书

把上面的 .key 文件和 .crt/.pem 文件上传到 /root 目录中,命名为 ssl.crt/ssl.pem 和 ssl.key,或者其他你想要的名字都可以。

3、配置部署

LNMP 一键安装包的 Nginx 配置在 /usr/local/nginx/conf/vhost/ 目录中,找到对应站点域名的配置文件(如 best66.me.conf)。普通安装的 Nginx 配置文件在 /etc/nginx/nginx.conf。vi 命令进入修改。

将其修改为(以下属性中 ssl 开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整,以下是以阿里云的证书为例):

server {
    listen 443;
    server_name best66.me www.best66.me;
    ssl on;
    root html;
    index index.html index.htm;
        ssl_certificate /root/ssl.pem;
        ssl_certificate_key /root/ssl.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}

如果想要强制 HTTPS,请做如下修改:

server
{
    listen 80;
    server_name best66.me www.best66.me; # 修改为你的域名
    rewrite ^/(.*) https://best66.me/$1 permanent; # 如果你的网站是带 www 的,请在域名前添加 www
}
server
{
    listen 443;
    # ...... 其余配置同上
}

Nginx

以上就搞定咯。

vim的简单使用介绍

Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

我们今天就来说说如何快速上手,简单快捷的使用vim。

在git bash中输入vim,进入vim编辑器。

vim编辑器初始状态

输入“i”进入编辑模式

编辑模式

“esc”返回到命令模式

命令模式

“:wq”保存退出(“:q!”不保存强制退出)

退出

在vim中常用到的命令

  1. 快速定位到当前段落的开头“(”或者“{”
  2. 快速定位到当前段落的结尾“)”或者“}”
  3. 复制 “y” , 粘贴 “p”
  4. “dd” 删除当前行,并把删除的行放入剪切板
  5. HJKL 或者 ↑↓←→ 上下左右移动光标 (HJKL 对应左 下 上 右 四个方向)
  6. 光标移动到文档开头 gg,光标移动到最后一行开头 shift+g
  7. “:help” 显示相关命令帮助 (退出帮助 “:q” )
  8. 在命令模式中使用 ctrl+b 上翻页, ctrl+f 下翻页, ctrl+u 上翻半页, ctrl+d 下翻半页。
  9. “/ +需要查找的字符” 显示文本中出现的第一个字符; “ ?+需要查找的字符” 显示文本中出现的最后一个字符。

CentOS 7 minimal 安装后的网络配置

CentOS7 minimal在安装后,有可能没有连接到网络,这里我们手动设置一下。

  1. 用root登录后,输入nmcli d,在结果中可以看到网络是不是有连接。

  2. 如发现网卡为禁用状态,在终端中输入nmtui,进行配置。

  3. 在打开的界面中,用tab键进行选择,使用enter进入,这里我们选择第一个网卡进行编辑(enp0s3)。

  4. 在网卡设置界面,选择IPV4为自动(IPv4 CONFIGURATION ),并勾选开机自动连接选项([X]Automatically connect)。

  5. 确认退出配置,重启网络服务service Network restart

  6. 最后用ip a命令确认连接情况

centos设置默认网关

第一生效文件

[root@oldboy ~]# grep -i gate /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.1.1

第二生效文件

[root@oldboy ~]# grep -i gate /etc/sysconfig/network

GATEWAY=192.168.1.1

第三:命令行有限,且临时生效

查看网关命令:route-n和netstat -n(两个命令都是查看网关的)

[root@oldboy ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
[root@oldboy ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

route add default gw 192.168.1.1

route del default gw 192.168.1.1

route功能很多,不仅仅配置默认网关,网络(静态)路由。

CentOS 6.5调整分区大小

调整硬盘分区大小

想增加root空间,减少home空间。

1. 查看硬盘使用情况。

[root@npm ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   48G   45G   17M 100% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home   50G  180M   47G   1% /home

2. 调整home分区大小

[root@npm ~]# umount /home
[root@npm ~]# e2fsck -f /dev/mapper/VolGroup-lv_home
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/VolGroup-lv_home: 11/3303104 files (0.0% non-contiguous), 253351/13207552 blocks
[root@npm ~]# resize2fs -p /dev/mapper/VolGroup-lv_home 2G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/VolGroup-lv_home to 524288 (4k) blocks.
Begin pass 2 (max = 32768)
正在重定位块            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 404)
正在扫描inode表          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/VolGroup-lv_home is now 524288 blocks long.

[root@npm ~]# mount /home
[root@npm ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   48G   45G   17M 100% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home  2.0G  152M  1.8G   8% /home

3. 释放空间

[root@npm ~]# lvreduce -L 2G /dev/mapper/VolGroup-lv_home
  WARNING: Reducing active and open logical volume to 2.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y
  Reducing logical volume lv_home to 2.00 GiB
  Logical volume lv_home successfully resized
[root@npm ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   48G   45G   16M 100% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home  2.0G  152M  1.8G   8% /home
[root@npm ~]# vgdisplay
  --- Volume group ---
  VG Name               VolGroup
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               99.51 GiB
  PE Size               4.00 MiB
  Total PE              25474
  Alloc PE / Size       13088 / 51.12 GiB
  Free  PE / Size       12386 / 48.38 GiB
  VG UUID               ILLwIo-pQ0o-2Ayw-fYcP-QhcW-A1id-Sozp1f

4. 增加空余空间到root

[root@npm ~]#  lvextend -L +48.38G /dev/mapper/VolGroup-lv_root
  Rounding size to boundary between physical extents: 48.38 GiB
  Extending logical volume lv_root to 96.54 GiB
  Logical volume lv_root successfully resized
[root@npm ~]# resize2fs -p /dev/mapper/VolGroup-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 7
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 25307136 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 25307136 blocks long.

[root@npm ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   96G   45G   46G  50% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home  2.0G  152M  1.8G   8% /home

CentOS 7 yum快速安装MongoDB

MongoDB是深受广大开源爱好者支持和研究的NoSQL数据库之一,它基于灵活的JSON文档方式,非常适合敏捷开发,其高可用功能强大,支持水平扩展等众多关键特性。一如其简约而不简单的MySQL一样,安装起来也非常方便,支持源码编译安装,rpm安装以及yum安装等众多方式。本文主要讲述在CentOS 7下yum方式快速安装mongodb。

一、安装环境及配置yum

    # more /etc/redhat-release 
    CentOS Linux release 7.2.1511 (Core)

    # vi /etc/yum.repos.d/mongodb-org-3.2.repo 
    [mongodb-org-3.2]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

二、安装MongoDB

    # yum -y install mongodb-org     
    Loaded plugins: fastestmirror, langpacks                     
    base                                                              | 3.6 kB  00:00:00     
    epel/x86_64/metalink                                              | 5.2 kB  00:00:00     
    extras                                                            | 3.4 kB  00:00:00     
    mongodb-org-3.2                                                   | 2.5 kB  00:00:00     
    updates                                                           | 3.4 kB  00:00:00     
    mongodb-org-3.2/7/primary_db                                      |  50 kB  00:00:03     
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun.com
     * epel: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    Resolving Dependencies
    --> Running transaction check
    ---> Package mongodb-org.x86_64 0:3.2.10-1.el7 will be installed
    --> Processing Dependency: mongodb-org-tools = 3.2.10 for package: mongodb-org-3.2.10-1.el7.x86_64
    --> Processing Dependency: mongodb-org-shell = 3.2.10 for package: mongodb-org-3.2.10-1.el7.x86_64
    --> Processing Dependency: mongodb-org-server = 3.2.10 for package: mongodb-org-3.2.10-1.el7.x86_64
    --> Processing Dependency: mongodb-org-mongos = 3.2.10 for package: mongodb-org-3.2.10-1.el7.x86_64
    --> Running transaction check
    ---> Package mongodb-org-mongos.x86_64 0:3.2.10-1.el7 will be installed
    ---> Package mongodb-org-server.x86_64 0:3.2.10-1.el7 will be installed
    ---> Package mongodb-org-shell.x86_64 0:3.2.10-1.el7 will be installed
    ---> Package mongodb-org-tools.x86_64 0:3.2.10-1.el7 will be installed
    --> Finished Dependency Resolution

    Dependencies Resolved

    ===================================================================================================
     Package                                      Arch     Version             Repository         Size
    ===================================================================================================
    Installing:
     mongodb-org                                  x86_64   3.2.10-1.el7        mongodb-org-3.2   5.8 k
    Installing for dependencies:
     mongodb-org-mongos                           x86_64   3.2.10-1.el7        mongodb-org-3.2   5.6 M
     mongodb-org-server                           x86_64   3.2.10-1.el7        mongodb-org-3.2    12 M
     mongodb-org-shell                            x86_64   3.2.10-1.el7        mongodb-org-3.2   6.7 M
     mongodb-org-tools                            x86_64   3.2.10-1.el7        mongodb-org-3.2    41 M

    Transaction Summary
    ===================================================================================================
    Install  1 Package (+4 Dependent packages)

    Total download size: 65 M
    Installed size: 201 M
    Downloading packages:
    warning: /var/cache/yum/x86_64/7/mongodb-org-3.2/packages/mongodb-org-3.2.10-1.el7.x86_64.rpm: 
            Header V3 RSA/SHA1 Signature, key ID ea312927: NOKEY  ]  
    Public key for mongodb-org-3.2.10-1.el7.x86_64.rpm is not installed
    (1/5): mongodb-org-3.2.10-1.el7.x86_64.rpm                                  | 5.8 kB  00:00:04     
    (2/5): mongodb-org-server-3.2.10-1.el7.x86_64.rpm                           |  12 MB  00:00:11     
    (3/5): mongodb-org-shell-3.2.10-1.el7.x86_64.rpm                            | 6.7 MB  00:00:06     
    (4/5): mongodb-org-tools-3.2.10-1.el7.x86_64.rpm                            |  41 MB  00:00:36     
    (5/5): mongodb-org-mongos-3.2.10-1.el7.x86_64.rpm                           | 5.6 MB  00:03:28     
    ---------------------------------------------------------------------------------------------------
    Total                                                              322 kB/s |  65 MB  00:03:28     
    Retrieving key from https://www.mongodb.org/static/pgp/server-3.2.asc
    Importing GPG key 0xEA312927:
     Userid     : "MongoDB 3.2 Release Signing Key <[email protected]>"
     Fingerprint: 42f3 e95a 2c4f 0827 9c49 60ad d68f a50f ea31 2927
     From       : https://www.mongodb.org/static/pgp/server-3.2.asc
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : mongodb-org-tools-3.2.10-1.el7.x86_64                                    1/5 
      Installing : mongodb-org-mongos-3.2.10-1.el7.x86_64                                   2/5 
      Installing : mongodb-org-shell-3.2.10-1.el7.x86_64                                    3/5 
      Installing : mongodb-org-server-3.2.10-1.el7.x86_64                                   4/5 
      Installing : mongodb-org-3.2.10-1.el7.x86_64                                          5/5 
      Verifying  : mongodb-org-server-3.2.10-1.el7.x86_64                                   1/5 
      Verifying  : mongodb-org-3.2.10-1.el7.x86_64                                          2/5 
      Verifying  : mongodb-org-shell-3.2.10-1.el7.x86_64                                    3/5 
      Verifying  : mongodb-org-mongos-3.2.10-1.el7.x86_64                                   4/5 
      Verifying  : mongodb-org-tools-3.2.10-1.el7.x86_64                                    5/5 

    Installed:
      mongodb-org.x86_64 0:3.2.10-1.el7                                                                                                                                                                           

    Dependency Installed:
      mongodb-org-mongos.x86_64 0:3.2.10-1.el7      #Author : Leshami      
      mongodb-org-server.x86_64 0:3.2.10-1.el7      #Blog   : http://blog.csdn.net/leshami
      mongodb-org-shell.x86_64 0:3.2.10-1.el7           
      mongodb-org-tools.x86_64 0:3.2.10-1.el7          

    Complete!

三、验证安装结果

    # rpm -qa |grep mongodb
    mongodb-org-3.2.10-1.el7.x86_64
    mongodb-org-mongos-3.2.10-1.el7.x86_64
    mongodb-org-shell-3.2.10-1.el7.x86_64
    mongodb-org-server-3.2.10-1.el7.x86_64
    mongodb-org-tools-3.2.10-1.el7.x86_64

    # rpm -ql mongodb-org-server
    /etc/init.d/mongod
    /etc/mongod.conf
    /etc/sysconfig/mongod
    /usr/bin/mongod
    /usr/share/doc/mongodb-org-server-3.2.10
    /usr/share/doc/mongodb-org-server-3.2.10/GNU-AGPL-3.0
    /usr/share/doc/mongodb-org-server-3.2.10/MPL-2
    /usr/share/doc/mongodb-org-server-3.2.10/README
    /usr/share/doc/mongodb-org-server-3.2.10/THIRD-PARTY-NOTICES
    /usr/share/man/man1/mongod.1
    /var/lib/mongo
    /var/log/mongodb
    /var/log/mongodb/mongod.log
    /var/run/mongodb

    [root@localhost ~]# /etc/init.d/mongod start
    Starting mongod (via systemctl):                           [  OK  ]
    [root@localhost ~]# netstat -nltp|grep mongo
    tcp        0      0 127.0.0.1:27017      0.0.0.0:*   LISTEN      89958/mongod

    # mongo
    MongoDB shell version: 3.2.10
    connecting to: test
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
            http://docs.mongodb.org/
    Questions? Try the support group
            http://groups.google.com/group/mongodb-user
    &gt; db.version()
    3.2.10

未分类

CentOS 7配置并更换为本地或网络yum源

一、目的

为了在没网的情况下或体验更快的速度及更好的体验。毕竟自带yum源在国外。(本例用的是阿里yum源,其他的也可以)

二、yum机制简介

引用百度百科及一些个人见解

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点,也可以是本地软件池,但必须包含rpm的header,header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。

三、搭建本地源(利用ISO镜像)

1、拷贝iso镜像文件解压指/media/cdrom文件夹

shou cp -r /xxxx/CentOSxxx/* /media/cdrom

2、配置/etc/yum.repos.d/CentOS-Media.repo

    [c6-media]
    name=CentOS-$releasever - Media
    baseurl=file:///media/CentOS/   #镜像文件路径
            file:///media/cdrom/
            file:///media/cdrecorder/
    gpgcheck=1    #标志开启key验证,开启必须要有gpgkey文件,也可以选择关闭
    enabled=1       #标志开启此yum源
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

3、重命名默认的网络源CentOS-Base.repo,避免冲突。

$ sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

4、重置yum

$ yum clean all   #清理yum缓存
$ yum list    #显示yum列表

三、更换网络源

1、备份系统自带yum源

$ sudo mv /etv/yum.repos.d/CentOS-Base.repo /etv/yum.repos.d/CentOS-Base.repo.bk

目的:其他yum源(这里是阿里yum源)出错时,可以恢复系统自带yum源

2、下载阿里yum源到/etc/yum.repos.d

  • 切换路径 $ cd /etc/yum.repos.d
  • 下载 $ sudo wget -nc http://mirrors.aliyun.com/repo/Centos-7.repo

备注:

  • 阿里yum源:http://mirrors.aliyun.com/repo/
  • 163(网易)yum源: http://mirrors.163.com/.help/
  • 中科大的Linux安装镜像源:http://centos.ustc.edu.cn/
  • 搜狐的Linux安装镜像源:http://mirrors.sohu.com/
  • 北京首都在线科技:http://mirrors.yun-idc.com/

3、更改阿里yum源为系统默认yum源

$ sudo mv CentOS-7.repo CentOS-Base.repo

4、清除yum机制的本地缓存

$ sudo yum clean all   #一股脑全部清除
$ sudo yum  list

目的:避免更换源后出现HTTP ERORR 404-Not Found Trying othermirror的bao报错

5、生成yum机制的本地缓存

$ sudo yum makecache

yum makecache目的:将服务器上的软件包信息在本地缓存,以提高搜索安装软件的速度。

Vi/Vim全局替换基本语法

在vim编辑中,编辑器使用指定的字符模式对文件中的每行进行检查,使用新字符串来替换模式。
全局替换使用命令 :g(global全局)和:s(switch替换)。

单个字符替换:

:s/old/new/

未分类

这将把光标所在行old的第一次出现修改为new。

/(斜杠)是该条命令不同部分之间的分隔符(当斜杆为该行的最后一个字符时,可不写)

单个字符多个替换:

:s/old/new/g

未分类

把当前行old的每次出现改为new,而不只是该行的第一个old。

:s命令允许替换串后面带有选项,上面语法中的g代表全局(g选项影响一行中的每个模式,不要把它与影响文件中所有行的:g命令混淆)

通过在:s命令前加上地址前缀,可以把它的范围扩展到多行。例如下面命令把50行到100行的old的每次出现都改为new:

:50,100 s/old/new/g 

下面的命令把整个文件中的old的每次出现都改为new:

:1,$ s/old/new/g

确认替换:

使用搜索替换命令有时候会出错,而得到不想要的结果。在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认:

:1,30 s/old/new/gc

未分类

将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)?
y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。

上下文相关替换:

除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。

语法格式:

:g/pattern/s/old/new/g

未分类

将会把包含pattern的行中,把所有old替换为new

第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,将把old替换(s)为new,最后的g表示在该行上进行全部替换。

如果用来进行搜索的模式与想要修改的模式相同,就不必重复:

:g/string/s//new/g 等价于 :g/string/s/string/new/g

注意:

:g/string/s//new/g 也等价于 :% s/string/new/g