Skip to content Skip to main navigation Skip to footer

Ubuntu

Ubuntu 16.4 系统基于bond(bond0)接口的网桥(br0)配置教程

本文将会讲述如何在Ubuntu 16.04 LTS 系统下基于现有的以太网接口配置Linux bond 网络,并基于bond设备配置网桥网络
Bond 配置需要安装ifensalve工具包, 网桥配置需要安装bridge-utils工具包。

1# ubuntu下安装ifenslave

执行下面的apt-get命令:

$ sudo apt-get install ifenslave

2# 安装bridge-utils

执行下面的apt-get 命令:

$ sudo apt-get install bridge-utils

命令输出如下:

正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 下列软件包是自动安装的并且现在不需要了:
 gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libnvpair1linux libssl-dev libssl-doc libuutil1linux libuv1-dev
 libzfs2linux libzpool2linux python-pkg-resources zfs-doc zlib1g-dev
 使用'apt autoremove'来卸载它(它们)。
 下列【新】软件包将被安装:
 bridge-utils
 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 5 个软件包未被升级。
 需要下载 28.6 kB 的归档。
 解压缩后会消耗 102 kB 的额外空间。
 获取:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 bridge-utils amd64 1.5-9ubuntu1 [28.6 kB]
 已下载 28.6 kB,耗时 0秒 (39.9 kB/s)
 正在选中未选择的软件包 bridge-utils。
 (正在读取数据库 ... 系统当前共安装有 67725 个文件和目录。)
 正准备解包 .../bridge-utils_1.5-9ubuntu1_amd64.deb  ...
 正在解包 bridge-utils (1.5-9ubuntu1) ...
 正在处理用于 man-db (2.7.5-1) 的触发器 ...
 正在设置 bridge-utils (1.5-9ubuntu1) ...

3# 编辑网络配置文件增加bond配置信息和网桥接口信息

首先有备份现有的网络接口配置文件/etc/network/interface, 执行命令:

$ cp /etc/network/interface /etc/network/interface.bak

编辑/etc/network/interface文件:

Vi /etc/network/interface

首先要基于两个以太网接口eth0 和eth1 创建bond0 接口,加入下面的配置内容:

auto bond0
 iface bond0 inet manual
 bond-lacp-rate 1
 post-up ifenslave bond0 eth0 eth1
 pre-down ifenslave -d bond0 eth0 eth1
 bond-slaves none
 bond-mode 4
 bond-lacp-rate fast
 bond-miimon 100
 bond-downdelay 0
 bond-updelay 0
 bond-xmit_hash_policy 1

然后编辑eth0 和eth1的配置,参照如下内容:

auto eth0
 iface eth0 inet manual
 bond-master bond0
auto eth2
 iface eth2 inet manual
 bond-master bond0

最后我们开始基于bond0 创建网桥br0,参照下面内容:

auto br0
 iface br0 inet static
 address 192.168.1.58
 network 255.255.255.248
 netmask 255.255.255.0
 gateway 192.168.1.1
 bridge_ports bond0
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0

保存退出。
如果是通过DHCP获取ip地址,则可以参照下面的配置:

auto br0
 iface br0 inet dhcp
 bridge_ports bond0
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0

4# 重启网络服务

执行下面命令:

$ sudo /etc/init.d/network restart

$ sudo  systemctl restart network

5# 查看bond状态信息

$ more /proc/net/bonding/bond0

更多阅读:
1. Ubuntu 16.04 系统下网桥(br0,br1)配置教程

Ubuntu 16.04 系统下网桥(br0,br1)配置教程

本文将会讲述如何在Ubuntu 16.04 LTS 系统下基于现有的以太网接口配置Linux网桥. 当我们在创建虚拟化环境(比如说LXC,KVM,Xen等)的时候,都需要配置网桥,让宿主机里的虚拟机通过配好的网桥接口和外部通信。

1# 安装bridge-utils

执行下面的apt-get 命令:

$ sudo apt-get install bridge-utils

命令输出如下:

正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 下列软件包是自动安装的并且现在不需要了:
 gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libnvpair1linux libssl-dev libssl-doc libuutil1linux libuv1-dev
 libzfs2linux libzpool2linux python-pkg-resources zfs-doc zlib1g-dev
 使用'apt autoremove'来卸载它(它们)。
 下列【新】软件包将被安装:
 bridge-utils
 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 5 个软件包未被升级。
 需要下载 28.6 kB 的归档。
 解压缩后会消耗 102 kB 的额外空间。
 获取:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 bridge-utils amd64 1.5-9ubuntu1 [28.6 kB]
 已下载 28.6 kB,耗时 0秒 (39.9 kB/s)
 正在选中未选择的软件包 bridge-utils。
 (正在读取数据库 ... 系统当前共安装有 67725 个文件和目录。)
 正准备解包 .../bridge-utils_1.5-9ubuntu1_amd64.deb  ...
 正在解包 bridge-utils (1.5-9ubuntu1) ...
 正在处理用于 man-db (2.7.5-1) 的触发器 ...
 正在设置 bridge-utils (1.5-9ubuntu1) ...

2# 编辑网络配置文件增加网桥接口

首先有备份现有的网络接口配置文件/etc/network/interface, 执行命令:

$ cp /etc/network/interface /etc/network/interface.bak

编辑/etc/network/interface文件

Vi /etc/network/interface

删除或注释掉跟eth0 相关的行,参照下面的配置:

auto br0
 iface br0 inet static
 address 192.168.1.58
 network 255.255.255.248
 netmask 255.255.255.0
 gateway 192.168.1.1
 bridge_ports eth0
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0

保存退出。
如果是通过DHCP获取ip地址,则可以参照下面的配置:

auto br0
 iface br0 inet dhcp
 bridge_ports eth0
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0

3# 重启网络服务

执行下面命令:

$ sudo /etc/init.d/network restart

$ sudo  systemctl restart network

如果需要临时创建网桥也可以使用brctl 命令,通过该命令创建的网桥,会在系统重启后消失。
查看brctl命令的选项:

$ brctl
[email protected]:~# brctl
 Usage: brctl [commands]
 commands:
 addbr           <bridge>                add bridge
 delbr           <bridge>                delete bridge
 addif           <bridge> <device>       add interface to bridge
 delif           <bridge> <device>       delete interface from bridge
 hairpin         <bridge> <port> {on|off}        turn hairpin on/off
 setageing       <bridge> <time>         set ageing time
 setbridgeprio   <bridge> <prio>         set bridge priority
 setfd           <bridge> <time>         set bridge forward delay
 sethello        <bridge> <time>         set hello time
 setmaxage       <bridge> <time>         set max message age
 setpathcost     <bridge> <port> <cost>  set path cost
 setportprio     <bridge> <port> <prio>  set port priority
 show            [ <bridge> ]            show a list of bridges
 showmacs        <bridge>                show a list of mac addrs
 showstp         <bridge>                show bridge stp info
 stp             <bridge> {on|off}       turn stp on/off

查看网桥状态

$ sudo brctl show

更多阅读:
1. Ubuntu 16.4 系统基于bond(bond0)接口的网桥(br0)配置教程
搞定!

Ubuntu 16.04 系统下安装ZFS文件系统

本文将会讲述如何在Ubuntu 16.04 LTS 系统里安装并使用ZFS文件系统

ZFS 是由 Sun Microsystems(在 Jeff Bonwick 下)设计和开发的,在 2004 年首次公布,并在 2005 年集成到 Sun Solaris 中)。虽然将最流行的开放式操作系统与谈论最多的、功能最丰富的文件系统配对在一起是最理想的匹配,但是许可证问题限制了集成。Linux 受 GNU 公共许可证(General Public License,GPL)保护,而 ZFS 是遵循由 Sun 的通用开发和发布许可证(Common Development and Distribution License,CDDL)的。这些许可证协议的目标不同,各自的限制会有些冲突。所幸,这并不意味着您作为 Linux 用户不能享受 ZFS 及其供的功能。- 摘自IBM developerworks

ZFS 文件系统作为一种高级的文件系统以及逻辑卷管理工具,可以应用在大多数的Unix或类Unix系统上,如:Solaris, FreeBSD, Linux系统等。
ZFS文件系统的优势可以提供数据保护,数据压缩,卷管理,snapshot, 数据一致性以及对大容量的支持等。

1# Ubuntu16.04 上安装ZFS

执行下面的apt-get命令:

$ sudo apt-get install zfs

或者

$ sudo apt-get install zfsutils-linux

命令输出如下:

正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 注意,选中 'zfsutils-linux' 而非 'zfs'
 下列软件包是自动安装的并且现在不需要了:
 gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libssl-dev libssl-doc libuv1-dev python-pkg-resources zlib1g-dev
 使用'sudo apt autoremove'来卸载它(它们)。
 将会同时安装下列软件:
 libnvpair1linux libuutil1linux libzfs2linux libzpool2linux zfs-doc zfs-zed
 建议安装:
 default-mta | mail-transport-agent samba-common-bin nfs-kernel-server zfs-initramfs
 下列【新】软件包将被安装:
 libnvpair1linux libuutil1linux libzfs2linux libzpool2linux zfs-doc zfs-zed zfsutils-linux
 升级了 0 个软件包,新安装了 7 个软件包,要卸载 0 个软件包,有 5 个软件包未被升级。
 需要下载 897 kB 的归档。
 解压缩后会消耗 2,902 kB 的额外空间。
 您希望继续执行吗? [Y/n] y
 获取:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 zfs-doc all 0.6.5.6-0ubuntu17 [50.1 kB]
 获取:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libuutil1linux amd64 0.6.5.6-0ubuntu17 [27.4 kB]
 获取:3 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libnvpair1linux amd64 0.6.5.6-0ubuntu17 [23.5 kB]
 获取:4 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libzpool2linux amd64 0.6.5.6-0ubuntu17 [384 kB]
 获取:5 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libzfs2linux amd64 0.6.5.6-0ubuntu17 [107 kB]
 获取:6 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 zfsutils-linux amd64 0.6.5.6-0ubuntu17 [276 kB]
 获取:7 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 zfs-zed amd64 0.6.5.6-0ubuntu17 [29.7 kB]
 已下载 897 kB,耗时 4秒 (220 kB/s)
 正在选中未选择的软件包 zfs-doc。
 (正在读取数据库 ... 系统当前共安装有 67612 个文件和目录。)
 正准备解包 .../zfs-doc_0.6.5.6-0ubuntu17_all.deb  ...
 正在解包 zfs-doc (0.6.5.6-0ubuntu17) ...
 正在选中未选择的软件包 libuutil1linux。
 正准备解包 .../libuutil1linux_0.6.5.6-0ubuntu17_amd64.deb  ...
 正在解包 libuutil1linux (0.6.5.6-0ubuntu17) ...
 正在选中未选择的软件包 libnvpair1linux。
 正准备解包 .../libnvpair1linux_0.6.5.6-0ubuntu17_amd64.deb  ...
 正在解包 libnvpair1linux (0.6.5.6-0ubuntu17) ...
 正在选中未选择的软件包 libzpool2linux。
 正准备解包 .../libzpool2linux_0.6.5.6-0ubuntu17_amd64.deb  ...
 正在解包 libzpool2linux (0.6.5.6-0ubuntu17) ...
 正在选中未选择的软件包 libzfs2linux。
 正准备解包 .../libzfs2linux_0.6.5.6-0ubuntu17_amd64.deb  ...
 正在解包 libzfs2linux (0.6.5.6-0ubuntu17) ...
 正在选中未选择的软件包 zfsutils-linux。
 正准备解包 .../zfsutils-linux_0.6.5.6-0ubuntu17_amd64.deb  ...
 正在解包 zfsutils-linux (0.6.5.6-0ubuntu17) ...
 正在选中未选择的软件包 zfs-zed。
 正准备解包 .../zfs-zed_0.6.5.6-0ubuntu17_amd64.deb  ...
 正在解包 zfs-zed (0.6.5.6-0ubuntu17) ...
 正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...
 正在处理用于 initramfs-tools (0.122ubuntu8.8) 的触发器 ...
 update-initramfs: Generating /boot/initrd.img-4.4.0-62-generic
 W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
 正在处理用于 systemd (229-4ubuntu19) 的触发器 ...
 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
 正在处理用于 man-db (2.7.5-1) 的触发器 ...
 正在设置 zfs-doc (0.6.5.6-0ubuntu17) ...
 正在设置 libuutil1linux (0.6.5.6-0ubuntu17) ...
 正在设置 libnvpair1linux (0.6.5.6-0ubuntu17) ...
 正在设置 libzpool2linux (0.6.5.6-0ubuntu17) ...
 正在设置 libzfs2linux (0.6.5.6-0ubuntu17) ...
 正在设置 zfsutils-linux (0.6.5.6-0ubuntu17) ...
 zfs-import-cache.service is a disabled or a static unit, not starting it.
 zfs-import-scan.service is a disabled or a static unit, not starting it.
 zfs-mount.service is a disabled or a static unit, not starting it.
 正在处理用于 initramfs-tools (0.122ubuntu8.8) 的触发器 ...
 update-initramfs: Generating /boot/initrd.img-4.4.0-62-generic
 W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
 正在设置 zfs-zed (0.6.5.6-0ubuntu17) ...
 zed.service is a disabled or a static unit, not starting it.
 正在处理用于 libc-bin (2.23-0ubuntu9) 的触发器 ...
 正在处理用于 systemd (229-4ubuntu19) 的触发器 ...
 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...

2# 创建ZFS 磁盘映像文件

输入下面的命令:

$ sudo mkdir zfsdev
 $ cd zfsdev
 $ dd if=/dev/zero of=disk1.img bs=1M count=100
 $ dd if=/dev/zero of=disk2.img bs=1M count=100

命令输出如下:

[email protected]:~# mkdir zfsdev
 [email protected]:~# cd zfsdev/
 [email protected]:~/zfsdev# ls
 [email protected]:~/zfsdev# dd if=/dev/zero of=disk1.img bs=1M count=10
 10+0 records in
 10+0 records out
 10485760 bytes (10 MB, 10 MiB) copied, 0.017591 s, 596 MB/s
 [email protected]:~/zfsdev# dd if=/dev/zero of=disk2.img bs=1M count=10
 10+0 records in
 10+0 records out
 10485760 bytes (10 MB, 10 MiB) copied, 0.01482 s, 708 MB/s
 [email protected]:~/zfsdev# ls
 disk1.img  disk2.img

3# 创建ZFS存储池

创建zfs存储池可以使用物理磁盘,分区,或者我们上面创建的磁盘映像文件。
命令格式如下:

Zpool create 存储池名 mirror 磁盘名1 磁盘名2 ...

安装ZFS-FUSE
如果使用磁盘映像文件来构建ZFS存储池,还需要安装ZFS-FUSE 软件包,其可以实现在没有内核代码的情况下实现在用户空间中创建文件系统,是用户和文件系统实现从内核文件系统个接口到用户空间的桥梁。
输入下面的命令安装ZFS-FUSE:

$ Sudo apt-get install zfs-fuse

命令输出如下:

正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 下列软件包是自动安装的并且现在不需要了:
 gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libnvpair1linux libssl-dev libssl-doc libuutil1linux libuv1-dev
 libzfs2linux libzpool2linux python-pkg-resources zfs-doc zlib1g-dev
 使用'apt autoremove'来卸载它(它们)。
 建议安装:
 nfs-kernel-server kpartx
 下列软件包将被【卸载】:
 zfs-zed zfsutils-linux
 下列【新】软件包将被安装:
 zfs-fuse
 升级了 0 个软件包,新安装了 1 个软件包,要卸载 2 个软件包,有 5 个软件包未被升级。
 需要下载 725 kB 的归档。
 解压缩后会消耗 2,422 kB 的额外空间。
 您希望继续执行吗? [Y/n] y
 获取:1 http://archive.ubuntu.com/ubuntu xenial/universe amd64 zfs-fuse amd64 0.7.0-12ubuntu1 [725 kB]
 已下载 725 kB,耗时 1秒 (377 kB/s)
 (正在读取数据库 ... 系统当前共安装有 67760 个文件和目录。)
 正在卸载 zfs-zed (0.6.5.6-0ubuntu17) ...
 正在卸载 zfsutils-linux (0.6.5.6-0ubuntu17) ...
 正在处理用于 man-db (2.7.5-1) 的触发器 ...
 正在处理用于 initramfs-tools (0.122ubuntu8.8) 的触发器 ...
 update-initramfs: Generating /boot/initrd.img-4.4.0-62-generic
 W: mdadm: /etc/mdadm/mdadm.conf defines no arrays.
 正在选中未选择的软件包 zfs-fuse。
 (正在读取数据库 ... 系统当前共安装有 67695 个文件和目录。)
 正准备解包 .../zfs-fuse_0.7.0-12ubuntu1_amd64.deb  ...
 正在解包 zfs-fuse (0.7.0-12ubuntu1) ...
 正在处理用于 man-db (2.7.5-1) 的触发器 ...
 正在处理用于 systemd (229-4ubuntu19) 的触发器 ...
 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
 正在设置 zfs-fuse (0.7.0-12ubuntu1) ...
 update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
 正在处理用于 systemd (229-4ubuntu19) 的触发器 ...
 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...

启动zfs-fuse 服务

$ sudo systemctl start zfs-fuse

关联磁盘映像文件和环路loop设备

$ sudo losetup /dev/loop0 /root/zfsdev/disk1.img
 $ sudo losetup /dev/loop1 /root/zfsdev/disk2.img

创建ZFS存储池myzfspool
基于上面创建的磁盘映像文件disk1.img 和disk2.img 创建存储池, 执行下面命令:

$ sudo zpool create myzfspool mirror disk1.img disk2.img

查看ZFS存储池状态

$ sudo zfs status
 $ sudo zfs list

命令输出如下:

[email protected]:~# zpool status
 pool: myzfspool
 state: ONLINE
 scrub: none requested
 config:
NAME        STATE     READ WRITE CKSUM
 myzfspool   ONLINE       0     0     0
 mirror-0  ONLINE       0     0     0
 loop0   ONLINE       0     0     0
 loop1   ONLINE       0     0     0
errors: No known data errors
 [email protected]:~# zfs list
 NAME        USED  AVAIL  REFER  MOUNTPOINT
 myzfspool    75K  63.4M    21K  /myzfspool

查看存储池的I/O 状态

$ sudo zpool iostat

输出如下:

[email protected]:~# zpool  iostat
 capacity     operations    bandwidth
 pool        alloc   free   read  write   read  write
 ----------  -----  -----  -----  -----  -----  -----
 myzfspool   79.5K  95.4M      0      0     14    375

4# 创建ZFS 文件系统

现在我们在myzfspool存储池上创建名为zfsdir 的ZFS文件系统, 执行下面的命令:

$ sudo zfs create myzfspool

查看文件系统状态

$ sudo zfs list

$ mount | grep myzfspool

命令输出:

[email protected]:/myzfspool# zfs list
 NAME               USED  AVAIL  REFER  MOUNTPOINT
 myzfspool          108K  63.4M    24K  /myzfspool
 myzfspool/zfsdir    21K  63.4M    21K  /myzfspool/zfsdir
[email protected]:/myzfspool# mount | grep myzfspool
 myzfspool on /myzfspool type fuse.zfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other)
 myzfspool/zfsdir on /myzfspool/zfsdir type fuse.zfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other)

5# 删除ZFS存储池

$ sudo zpool destroy 存储池名
 $ sudo zpool destroy myzfspool

Ubuntu 16.04系统下使用apt-fast取代apt-get来加速apt

本文将会讲述如何在Ubuntu 16.04 LTS 系统里安装并使用apt-fast 来取代apt-get 工具加速apt 下载并安装软件包。
Apt-fast会通过axel的多线程连接来下载软件包,这样会比ap-get 下载速度提高很多。

1# 为了使用PPA 个人软件包集,需要先安装software-properties-common包

执行下面的命令:

$ sudo apt-get install software-properties-common

命令输出如下:

正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 software-properties-common 已经是最新版 (0.96.20.7)。
 下列软件包是自动安装的并且现在不需要了:
 gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libssl-dev libssl-doc libuv1-dev python-pkg-resources zlib1g-dev
 使用'sudo apt autoremove'来卸载它(它们)。
 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 3 个软件包未被升级。

2# 安装apt-fast 工具

在ubunt 11.04到13.10 版本上,执行下面的命令:

$ sudo apt-get install axel aria2
 $ sudo apt-add-repository ppa:apt-fast/stable
 $ sudo apt-get update
 $ sudo apt-get install apt-fast

对于ubuntu 14.04 到16.04 版本上,执行下面的命令:

sudo add-apt-repository ppa:saiarcot895/myppa
 sudo apt-get update
 sudo apt-get -y install apt-fast

3# 使用apt-fast 安装软件包

$ sudo apt-fast install 软件包名

例如:

$ sudo apt-fast install vim

4# 使用apt-fast 删除软件包

$ sudo apt-fast remove 软件包
 $ sudo apt-fast remove vim

使用apt-fast 下载源码包

$ sudo apt-fast source 软件包名

使用apt-fast 下载二进制软件包

$ sudo apt-fast download 软件报名
 $ sudo apt-fast download firefox

更多关于apt-fast的信息可以访问其官方网站:https://github.com/ilikenwf/apt-fast/

Ubuntu 16.04 系统下安装并配置denyhosts预防SSH暴力攻击

本文将会通过如何在Ubuntu 16.4 LTS Linux系统下安装并配置denyhosts 工具来预防远程SSH暴力攻击。

DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。
– 摘自百度百科

1# 安装denyhosts

执行下面的apt-get 命令:

$ sudo apt-get install denyhosts

命令输出:

正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 下列软件包是自动安装的并且现在不需要了:
 gyp javascript-common libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libssl-dev libssl-doc libuv1-dev python-pkg-resources zlib1g-dev
 使用'apt autoremove'来卸载它(它们)。
 下列【新】软件包将被安装:
 denyhosts
 升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 3 个软件包未被升级。
 需要下载 56.5 kB 的归档。
 解压缩后会消耗 294 kB 的额外空间。
 获取:1 http://archive.ubuntu.com/ubuntu xenial/universe amd64 denyhosts all 2.10-2 [56.5 kB]
 已下载 56.5 kB,耗时 1秒 (50.2 kB/s)
 正在选中未选择的软件包 denyhosts。
 (正在读取数据库 ... 系统当前共安装有 67566 个文件和目录。)
 正准备解包 .../denyhosts_2.10-2_all.deb  ...
 正在解包 denyhosts (2.10-2) ...
 正在处理用于 man-db (2.7.5-1) 的触发器 ...
 正在处理用于 systemd (229-4ubuntu19) 的触发器 ...
 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
 正在设置 denyhosts (2.10-2) ...
 正在处理用于 systemd (229-4ubuntu19) 的触发器 ...
 正在处理用于 ureadahead (0.100.0-19) 的触发器 ...

2# 将你自己的ip地址加入到白名单里

这里我们需要将你的客户端主机ip地址加入到运行ssh连接的白名单配置文件里,编辑”/etc/hosts.allow” 文件,加入下面的行:

Sshd: 白名单ip1, 白名单ip2...

例如:

 Sshd: 192.168.1.2, 192.168.1.3

保存并退出文件。

3# 编辑denyhosts工具配置文件”/etc/denyhosts.conf”

$ sudo vim /etc/denyhosts.conf

查看配置文件中的设置是否和下面一致,如不一致,更改:

SECURE_LOG = /var/log/auth.log
 HOSTS_DENY = /etc/hosts.deny
 BLOCK_SERVICE  = sshd
 DENY_THRESHOLD_INVALID = 5
 DENY_THRESHOLD_VALID = 10
 DENY_THRESHOLD_ROOT = 1D
 IPTABLES = /sbin/iptables
 ENY_THRESHOLD_RESTRICTED = 1

保存并退出文件。

4# 重启denyhosts 服务

在ubuntu 16.04 LTS 系统上执行下面的命令:

$ sudo systemctl restart denyhosts.service

5# 查看denyhosts的日志文件

执行下面的命令:

$ sudo tail -f /var/log/denyhosts

命令输出如下:

[email protected]:~# tail -f /var/log/denyhosts
 2017-08-17 10:19:01,553 - denyhosts   : INFO     Creating new firewall rule /sbin/iptables -I INPUT -s 192.168.1.20 -j DROP
 2017-08-17 10:19:01,579 - denyhosts   : INFO     new denied hosts: ['192.168.1.20']
 2017-08-17 10:19:01,581 - denyhosts   : INFO     launching DenyHosts daemon (version 2.10)...
 2017-08-17 10:19:01,589 - denyhosts   : INFO     DenyHost daemon is now running, pid: 8027
 2017-08-17 10:19:01,590 - denyhosts   : INFO     send daemon process a TERM signal to terminate cleanly
 2017-08-17 10:19:01,590 - denyhosts   : INFO       eg.  kill -TERM 8027
 2017-08-17 10:19:01,590 - denyhosts   : INFO     monitoring log: /var/log/auth.log
 2017-08-17 10:19:01,591 - denyhosts   : INFO     sync_time: 3600
 2017-08-17 10:19:01,592 - denyhosts   : INFO     purging of /etc/hosts.deny is disabled
 2017-08-17 10:19:01,592 - denyhosts   : INFO     denyhost synchronization disabled

6# 查看被阻止ssh连接的IP黑名单列表

执行下面的命令:

$ sudo  cat /etc/hosts.deny |grep sshd

命令输出如下:

[email protected]:~# cat /etc/hosts.deny  | grep sshd
 sshd: 192.168.1.20

更多关于denyhosts 工具的信息,可以访问其官方站点:http://denyhosts.sourceforge.net/

Ubuntu 16.04 系统下安装node.js

本文将会通过两种方法来讲述如何在Ubuntu 16.4 LTS Linux系统下安装node.js
Node.js是一种运行在服务器端的JavaScript运行环境。

方法1: 通过apt-get 命令来安装Ubuntu 发行方repo里的版本

执行下面的apt-get 命令:

$ sudo apt-get install nodejs npm

命令输出如下:

[email protected]:~# apt-get install nodejs npm
 正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 将会同时安装下列软件:
 ......
 建议安装:
 ......
下列【新】软件包将被安装:
 ......
 下列软件包将被升级:
 libc6 libssl1.0.0 zlib1g
 升级了 3 个软件包,新安装了 104 个软件包,要卸载 0 个软件包,有 123 个软件包未被升级。
 需要下载 54.6 MB 的归档。
 解压缩后会消耗 201 MB 的额外空间。
 您希望继续执行吗? [Y/n]Y

查看Node.js 版本

执行下面的命令:
 $ nodejs --version
 v4.2.6

方法2: 安装最新版本的Node.js 6.x (稳定版本)或 7.x

首先要安装Node.js 6.x 的repo,执行下面的命令:

$ curl -sL https://deb.nodesource.com/setup_t.x | sudo -E bash -

安装node.js 6.x 版本,执行命令:

$ sudo apt-get install nodejs build-essential

安装node.js 7.x 最新版本,执行下面的命令:

$ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
 $ sudo apt-get install -y nodejs build-essential

更多关于node.js 的信息可以查看其官方网站 https://nodejs.org/en/

Ubuntu 16.04 系统下安装 MySQL Server 5.7详细教程

本文将会讲述如何在Ubuntu 16.4 LTS Linux系统(Xenial Xerus)下安装,配置并且管理MySQL Server 5.7. 该版本是现在最新的MySQL 数据库发布版本。

1# 更新当前ubuntu16.04 系统

执行下面的命令:

 $ sudo apt update
 $ sudo apt upgrade

命令输出如下:

[email protected]:~# apt update
 命中:1 http://archive.ubuntu.com/ubuntu xenial InRelease
 获取:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
 获取:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
 获取:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
 获取:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [344 kB]
 获取:6 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages [322 kB]
 获取:7 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [619 kB]
 获取:8 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [145 kB]
 获取:9 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [156 kB]
 获取:10 http://archive.ubuntu.com/ubuntu xenial-updates/main i386 Packages [595 kB]
 获取:11 http://security.ubuntu.com/ubuntu xenial-security/universe i386 Packages [137 kB]
 获取:12 http://security.ubuntu.com/ubuntu xenial-security/universe Translation-en [79.8 kB]
 获取:13 http://archive.ubuntu.com/ubuntu xenial-updates/main Translation-en [250 kB]
 获取:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [517 kB]
 获取:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe i386 Packages [497 kB]
 获取:16 http://archive.ubuntu.com/ubuntu xenial-updates/universe Translation-en [202 kB]
 已下载 4,169 kB,耗时 5秒 (771 kB/s)
 正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 有 126 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
[email protected]:~# sudo apt upgrade
 正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 正在计算更新... 完成
 下列【新】软件包将被安装:
 linux-headers-4.4.0-92 linux-headers-4.4.0-92-generic linux-image-4.4.0-92-generic linux-image-extra-4.4.0-92-generic
 下列软件包将被升级:
 ......
 uuid-runtime vlan wget zlib1g
 升级了 126 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
 需要下载 165 MB 的归档。
 解压缩后会消耗 317 MB 的额外空间。
 您希望继续执行吗? [Y/n] Y

2# 在Ubuntu 16.04 LTS 系统上安装MySQL 5.7

执行下面的命令:

$ sudo apt-get install mysql-server mysql-client

命令输出如下:

[email protected]:~# apt-get install mysql-server mysql-client
 正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 将会同时安装下列软件:
 libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.0-5 libfcgi-perl libhtml-parser-perl libhtml-tagset-perl
 libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl mysql-client-5.7
 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
 建议安装:
 libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
 下列【新】软件包将被安装:
 libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.0-5 libfcgi-perl libhtml-parser-perl libhtml-tagset-perl
 libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl mysql-client
 mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7 mysql-server-core-5.7
 升级了 0 个软件包,新安装了 22 个软件包,要卸载 0 个软件包,有 126 个软件包未被升级。
 需要下载 18.5 MB 的归档。
 解压缩后会消耗 163 MB 的额外空间。
 您希望继续执行吗? [Y/n] Y

安装过程中会弹出MySQL root 用户密码输入窗口:
ubuntu 1604 mysql 5.7 root user password

3# 运行mysql_secure_installation 命令来设置MySQL 的安全配置

执行命令:

$ sudo mysql_secure_installation

命令输出如下:

[email protected]:~# sudo mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
VALIDATE PASSWORD PLUGIN can be used to test passwords
 and improve security. It checks the strength of password
 and allows the users to set only those passwords which are
 secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW    Length >= 8
 MEDIUM Length >= 8, numeric, mixed case, and special characters
 STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
 Using existing password for root.
Estimated strength of the password: 50
 Change the password for root ? ((Press y|Y for Yes, any other key for No) : N
... skipping.
 By default, a MySQL installation has an anonymous user,
 allowing anyone to log into MySQL without having to have
 a user account created for them. This is intended only for
 testing, and to make the installation go a bit smoother.
 You should remove them before moving into a production
 environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : y
 Success.
By default, MySQL 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? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
 Success.
- 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? (Press y|Y for Yes, any other key for No) : y
 Success.
All done!
 [email protected]:~#

该命令将会修改root用户密码,禁用或者删除匿名用户,禁止MySQL root 用户远程登录,删除测试数据库等操作,进而可以确保MySQL 数据库的安全。

4# 连接MySQL Server

执行下面的命令来登录到MySQL server:

$ sudo mysql -u root -p

此时需要输入mysql root 用户的密码。
命令输出如下:

[email protected]:~# mysql -u root -p
 Enter password:
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 7
 Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

5# 创建数据库

执行下面的命令:
Create database 数据库名;
比如创建一个名为myosetcdb的数据库:

mysql> create database myosetcdb;
 Query OK, 1 row affected (0.00 sec)
mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | myosetcdb          |
 | mysql              |
 | performance_schema |
 | sys                |
 +--------------------+
 5 rows in set (0.00 sec)

可以使用”show databases” 命令来查看当前server的数据库列表。
启动MySQL 服务

$ sudo systemctl start mysql.service

停止MySQL 服务

$ sudo systemctl stop mysql.service

重启MysQL 服务

$ sudo systemctl restart mysql.service

查看MySQL 服务的运行状态

$ sudo systemctl status mysql.service

命令输出如下:

● mysql.service - MySQL Community Server
 Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
 Active: active (running) since 三 2017-08-16 14:28:46 CST; 15min ago
 Main PID: 6195 (mysqld)
 CGroup: /system.slice/mysql.service
 └─6195 /usr/sbin/mysqld
8月 16 14:28:45 ubuntutest systemd[1]: Starting MySQL Community Server...
 8月 16 14:28:46 ubuntutest systemd[1]: Started MySQL Community Server.

重置mysql root 用户的密码
执行下面的命令来更改MySQL root 用户的密码:

$ sudo dpkt-reconfigure mysql-server-5.7

更多详情请参考另一篇文章 ”重置mysql root 用户的密码

Ubuntu 16.04:配置UFW防火墙

本文将会讲述如何在Ubuntu 16.04 LTS 系统里安装并配置UFW防火墙

安装UFW软件包

执行下面的apt-get命令来安装ufw:

$ sudo apt-get install ufw

命令输出如下:

[email protected]:~# sudo apt-get install ufw
 正在读取软件包列表... 完成
 正在分析软件包的依赖关系树
 正在读取状态信息... 完成
 ufw 已经是最新版 (0.35-0ubuntu2)。
 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 126 个软件包未被升级。。。。

查看UFW防火墙状态

默认情况下,ufw防火墙的状态是inactive. 输入下面的命令:

$ sudo ufw status

命令输出如下:

Status: inactive

启用UFW防火墙

输入下面的命令:

$ sudo ufw enable

命令输出:

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
 Firewall is active and enabled on system startup

禁用UFW防火墙

输入下面的命令:

$ sudo ufw disable

命令输出如下:

Firewall stopped and disabled on system startup

重置ufw防火墙

如果想恢复到ufw防火墙默认的状态,可以执行下面的命令:

$ sudo ufw reset

命令输出如下:

Resetting all rules to installed defaults. This may disrupt existing ssh
 connections. Proceed with operation (y|n)? y
 Backing up 'after6.rules' to '/etc/ufw/after6.rules.20170816_103853'
 Backing up 'after.rules' to '/etc/ufw/after.rules.20170816_103853'
 Backing up 'user6.rules' to '/etc/ufw/user6.rules.20170816_103853'
 Backing up 'before.rules' to '/etc/ufw/before.rules.20170816_103853'
 Backing up 'before6.rules' to '/etc/ufw/before6.rules.20170816_103853'
 Backing up 'user.rules' to '/etc/ufw/user.rules.20170816_103853'

设置默认的UFW防火墙策略

在Ubuntu16.04 LTs 系统上,当ufw防火墙激活后,默认的情况下,ufw将会阻止所有的外部访问流量,查看防火墙策略使用如下命令:

$ sudo grep -i default_ /etc/default/ufw

命令输出如下:

DEFAULT_INPUT_POLICY="DROP"
 DEFAULT_OUTPUT_POLICY="ACCEPT"
 DEFAULT_FORWARD_POLICY="DROP"
 DEFAULT_APPLICATION_POLICY="SKIP"

如果要设置允许所有的出口流量,阻止所有的入口流量,可以之下下面的ufw命令:

$ sudo ufw default allow outgoing
 $ sudo ufw default deny incoming

UFW 防火墙策略允许SSH连接

输入下面的命令允许远程ssh连接到本机:

$ sudo ufw allow ssh

如果想只允许远程机器访问本机IP为192.168.1.58 的机器上tcp ssh 22 号端口,可以使用下面的ufw命令:

$ sudo ufw allow proto tcp from any to 192.168.1.58 port 22

删除UFW防火墙策略

如果你想删除不需要的ufw防火墙策略,可以使用下面的命令:

$ sudo ufw delete {策略}

例如:要删除允许ssh 22 号端口的访问,执行下面的命令:

$ sudo ufw delete allow 22

重新加载ufw防火墙

当你编辑了ufw防火墙策略配置文件/etc/ufw/before.rules 后,需要重新加载ufw防火墙,才能是更改后的防火墙策略生效, 这行下面的命令:

$ sudo ufw reload

查看ufw防火墙日志

默认情况下ufw防火墙日志都放在/var/log/ufw.log 文件里,执行下面的命令:

$ sudo tail -f /var/log/ufw.log

Ubuntu 16.04系统下安装LXD容器的详细教程

本文将会讲述如何在ubuntu 16.04 LTS linux系统下安装新一代的容器技术LXD,并在该容器下运行当前主流的Linux操作系统,比如:Debian/Centos/Ubuntu等。

安装LXD 软件包

输入下面的apt-get命令安装LXD:

$ sudo apt-get install lxd

命令输出如下:

[email protected]:~# apt-get install lxd
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
  lxd-client
建议安装:
  criu lxd-tools
下列软件包将被升级:
  lxd lxd-client
升级了 2 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 126 个软件包未被升级。
需要下载 5,289 kB 的归档。
解压缩后会消耗 129 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
获取:1 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 lxd amd64 2.0.10-0ubuntu1~16.04.1 [3,432 kB]
获取:2 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 lxd-client amd64 2.0.10-0ubuntu1~16.04.1 [1,856 kB]
已下载 5,289 kB,耗时 9秒 (583 kB/s)
正在预设定软件包 ...
(正在读取数据库 ... 系统当前共安装有 59082 个文件和目录。)
正准备解包 .../lxd_2.0.10-0ubuntu1~16.04.1_amd64.deb  ...
Warning: Stopping lxd.service, but it can still be activated by:
  lxd.socket
正在将 lxd (2.0.10-0ubuntu1~16.04.1) 解包到 (2.0.9-0ubuntu1~16.04.1) 上 ...
Warning: Stopping lxd.service, but it can still be activated by:
  lxd.socket
正准备解包 .../lxd-client_2.0.10-0ubuntu1~16.04.1_amd64.deb  ...
正在将 lxd-client (2.0.10-0ubuntu1~16.04.1) 解包到 (2.0.9-0ubuntu1~16.04.1) 上 ...
正在处理用于 systemd (229-4ubuntu16) 的触发器 ...
正在处理用于 ureadahead (0.100.0-19) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在设置 lxd-client (2.0.10-0ubuntu1~16.04.1) ...
正在设置 lxd (2.0.10-0ubuntu1~16.04.1) ...

LXD容器网络和存储配置

输入下面的命令来配置LXD容器的网络和存储:

$ sudo lxd init

命令输出如下:

[email protected]:~# lxd init
Name of the storage backend to use (dir or zfs) [default=dir]:
Would you like LXD to be available over the network (yes/no) [default=no]? yes
Address to bind LXD to (not including port) [default=all]:
Port to bind LXD to [default=8443]:
Trust password for new clients:
Again:
Do you want to configure the LXD bridge (yes/no) [default=yes]?
Warning: Stopping lxd.service, but it can still be activated by:
  lxd.socket
LXD has been successfully configured.

在上面命令的运行过程中会有一些交互式的操作,如下面的截图:
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10
ubuntu16.04 LXD容器网络和存储配10

LXC 命令

LXC是当前的ubuntu linux 系统 和LXD 服务器通信的主要命令。LXD在配置的时候会自动创建一个名为”lxd”的用户组,当前用户也会被加到该组里。

$ sudo cat /etc/group|grep lxd

命令输出:

[email protected]:~# cat /etc/group| grep lxd
 lxd:x:110:ubuntutest

 
查看当前可用的Linux镜像文件

 $ sudo lxc image list images:

这个命令会去linuxcontainers.org 官方查看当前可用的不同Linux发行版本的镜像文件。
LXd 支持的镜像模板查看官方链接:https://uk.images.linuxcontainers.org/
 
在LXD容器上创建CentOS 7 虚机
输入下面的命令:

$ sudo lxc launch images:centos/7/amd64 centos-vm1

 
在LXD容器上创建ubuntu 16.04 LTS 版本虚机
输入下面的命令:

 $ sudo lxc launch images:ubuntu/xenial/amd64 ubuntu-vm1

 
在LXD容器上创建DebianLinux 7.x Wheezy虚机
输入下面的命令:

 $ sudo lxc launch images:debian/wheezy/amd64 debian-vm1

 
在LXD容器上创建Fedora 25版本的虚机
输入下面的命令:

$ sudo lxc launch images:fedora/25/amd64  fedora-vm1

 
在LXD容器上创建Fedora 26版本的虚机
输入下面的命令:

 $ sudo lxc launch images:fedora/26/amd64  fedora-vm2

 
在LXD容器上创建oracle7版本的虚机
输入下面的命令:

 $ sudo lxc launch images:oracle/7/amd64  oracle-vm1

 
在LXD容器上创建OpenSuSe Linux 42.3版本的虚机
输入下面的命令:

 $ sudo lxc launch images:opensuse/42.3/amd64  opensuse-vm1

 
列出当前LXD容器创建的虚机
输入下面的命令:

 $ sudo lxc list

命令输出如下:

 [email protected]:~# lxc list
 +------+-------+------+------+------+-----------+
 | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
 +------+-------+------+------+------+-----------+

 
启动容器里某个虚机
执行下面命令:

 $ sudo lxc start 虚机名
 $ sudo lxc start centos-vm1

 
关闭容器里某个虚机
执行下面命令:

$ sudo lxc stop 虚机名
 $ sudo lxc stop centos-vm1

 
重启LXD容器里虚机
命令如下:

 $ sudo lxc restart 虚机名
 $ sudo lxc restart centos-vm1

 
删除LXD容器下的虚机
执行下面的命令:

$ sudo lxc delete 虚机名
 $ sudo lxc delete centos-vm1

 
查看LXD容器下虚机的相关信息
如果想查看某个虚机的网络,内存,CPU等使用信息,可以执行下面的命令:

 $ sudo lxc info 虚机名
 $ sudo lxc info centos-vm1

 

Ubuntu 16.04 Linux系统下安装并配置kvm虚拟化环境

本文将会讲述如何在Ubuntu 16.4 LTS Linux系统下安装并配置KVM虚拟化环境,并在配好的KVM虚拟化环境里创建不同的linux发行版本的虚机。

1# 安装kvm相关软件包

执行下面的命令:

 $ sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker

2# 验证KVM是否安装成功

执行下面命令:  

$ sudo kvm-ok

3# KVM 网路配置

备份网络接口文件,执行下面的命令:

 $ sudo cp /etc/network/interfaces /etc/network/interfaces.bak

编辑网络配置文件/etc/network/interface, 用下面的内容覆盖:

 auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0

保存并退出配置文件。 重启网络服务, 执行下面命令:

 $ sudo systemctl restart networking

查看kvm网桥配置
执行命令:

 $ sudo brtcl show

4# 在KVM里创建虚机

在创建虚机前,需要提前将要安装的linux系统镜像安装文件下载到本地。
创建一个CentOS虚拟机,内存在1GB,CPU 2核,磁盘大小20GB, 2个网卡接口, 执行下面的命令创建虚机:

 sudo virt-install \
--virt-type=kvm \
--name centos7 \
--ram 1024 \
--vcpus=2 \
--os-variant=rhel7 \
--virt-type=kvm \
--hvm \
--cdrom=/CentOS-7-x86_64-DVD-1611.iso \
--network=bridge=br0,model=virtio \
--network=bridge=br1,model=virtio \
--graphics vnc \
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=20,bus=virtio,format=qcow2

查看虚机的vnc端口号,这样我们就可以通过vncviewer 来连接虚拟机远程桌面, 执行下面的命令:

$ sudo virsh dumpxml centos7 | grep vnc

命令输出如下:

 <graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>

5901 就是我们需要用的vnc端口。此时我们需要登录到远程桌面,按照图形界面的要求,做进一步的系统安装。

 5# KVM 下常用的命令

显示当前kvm环境下运行的虚拟机

 $ sudo virsh list

关闭某个虚拟机

 $ sudo virsh shutdown 虚机名

 
启动kvm下某个虚机

 $ sudo virsh start 虚机名

 
重启kvm下虚机

 $ sudo virsh reboot 虚机名

 
 重置kvm下虚机

 $ sudo virsh reset 虚机名

 
删除或销毁kvm下某虚机

 $ sudo virsh destroy 虚机名

Ubuntu 16.04:如何将计划任务日志保存到特定的cron.log文件

本文将会讲述如何在Ubuntu 16.04 LTS 系统里查看默认的计划任务日志文件以及如何将默认的计划日志保存到特定的cron.log文件里。

默认的计划任务crontab 日志文件

执行下面的命令来查看默认cron日志:

$ sudo cat /etc/var/log/syslog | grep -i cron 

命令输出如下:

 [email protected]:~# cat /var/log/syslog | grep -i cron
Aug  1 14:49:31 ubuntutest cron[930]: (CRON) INFO (pidfile fd = 3)
Aug  1 14:49:32 ubuntutest cron[930]: (CRON) INFO (Running @reboot jobs)
Aug  1 15:17:01 ubuntutest CRON[1571]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug  1 16:17:01 ubuntutest CRON[1770]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug  2 10:08:50 ubuntutest cron[926]: (CRON) INFO (pidfile fd = 3)
Aug  2 10:08:50 ubuntutest cron[926]: (CRON) INFO (Running @reboot jobs)
Aug  2 10:17:01 ubuntutest CRON[1604]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug  2 10:23:09 ubuntutest cron[933]: (CRON) INFO (pidfile fd = 3)
Aug  2 10:23:09 ubuntutest cron[933]: (CRON) INFO (Running @reboot jobs)
。。。

使用systemctl命令来查看默认crontab 日志文件

我们可以在Ubuntu16.04 LTs 系统上使用systemctl命令来查看最近的计划任务CRON列表,如下:

 $ sudo systemctl status cron

命令输出如下:

 [email protected]:~# systemctl status cron
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2017-08-14 14:41:26 CST; 45min ago
     Docs: man:cron(8)
 Main PID: 916 (cron)
    Tasks: 1
   Memory: 532.0K
      CPU: 49ms
   CGroup: /system.slice/cron.service
           └─916 /usr/sbin/cron -f
8月 14 14:41:26 ubuntutest systemd[1]: Started Regular background program processing daemon.
8月 14 14:41:26 ubuntutest cron[916]: (CRON) INFO (pidfile fd = 3)
8月 14 14:41:26 ubuntutest cron[916]: (CRON) INFO (Running @reboot jobs)
8月 14 15:00:01 ubuntutest CRON[1508]: pam_unix(cron:session): session opened for user root by (uid=0)
8月 14 15:00:01 ubuntutest CRON[1509]: (root) CMD ([ -x /usr/sbin/update-openssh-known-hosts ] && { sleep `od -An -N1 -tu1 /dev/urandom`; /usr/sbin/update-
8月 14 15:02:32 ubuntutest CRON[1508]: pam_unix(cron:session): session closed for user root
8月 14 15:17:01 ubuntutest CRON[1649]: pam_unix(cron:session): session opened for user root by (uid=0)
8月 14 15:17:01 ubuntutest CRON[1650]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
8月 14 15:17:01 ubuntutest CRON[1649]: pam_unix(cron:session): session closed for user root

使用 journalctl命令来查看默认crontab 日志文件

我们可以在Ubuntu16.04 LTs 系统上使用journalctl命令来查看最近的计划任务CRON列表,如下:

 $ sudo journalctl -u cron 

命令输出如下:  

[email protected]:~# journalctl -u cron
-- Logs begin at 一 2017-08-14 14:41:21 CST, end at 一 2017-08-14 15:17:01 CST. --
8月 14 14:41:26 ubuntutest systemd[1]: Started Regular background program processing daemon.
8月 14 14:41:26 ubuntutest cron[916]: (CRON) INFO (pidfile fd = 3)
8月 14 14:41:26 ubuntutest cron[916]: (CRON) INFO (Running @reboot jobs)
8月 14 15:00:01 ubuntutest CRON[1508]: pam_unix(cron:session): session opened for user root by (uid=0)
8月 14 15:00:01 ubuntutest CRON[1509]: (root) CMD ([ -x /usr/sbin/update-openssh-known-hosts ] && { sleep `od -An -N1 -tu1 /dev/urandom`; /usr/sbin/update-
8月 14 15:02:32 ubuntutest CRON[1508]: pam_unix(cron:session): session closed for user root
8月 14 15:17:01 ubuntutest CRON[1649]: pam_unix(cron:session): session opened for user root by (uid=0)
8月 14 15:17:01 ubuntutest CRON[1650]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
8月 14 15:17:01 ubuntutest CRON[1649]: pam_unix(cron:session): session closed for user root

创建单独的CRON 日志

编辑配置文件/etc/rsyslog.d/50-default.conf, 找到“#cron.*”行,将改行前面的注释去掉,保存并退出当前文件。
重启rsyslog服务,执行下面命令:

 $ sudo systemctl restart rsyslog

查看最新的计划任务Cron日志是否保存到cron.log文件里

 $ sudo tail -f /var/log/cron.log

输出如下: 

[email protected]:~# tail -f /var/log/cron.log
Aug 14 15:46:35 ubuntutest cron[1746]: (CRON) DEATH (can't lock /var/run/crond.pid, otherpid may be 916: Resource temporarily unavailable)

 

 

Linux/Ubuntu: 设置root密码

在ubuntu linux系统安装的时候,不会要求用户去设置root的密码,因为ubuntu官方为了系统安全考虑不建议用户使用root账户。

如果想使用root账户的话,但不知道root的初始密码,下面我们来讲述如何来设置ubuntu系统中的root密码。
1# 使用普通用户登录到当前的ubuntu系统
2# 输入下面的命令来设置root的新密码
$ sudo passwd 

[email protected]:~$ sudo passwd
[sudo] password for ubuntutest:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

3# 执行下面的su root命令来验证密码是否创建成功。
$ su root 

[email protected]:~$ su root
Password:
[email protected]:/home/ubuntutest# 

Linux/ubuntu: SSH 无法远程登录的解决方法

默认情况下,ubuntu系统在安装完成之后,不会安装openssh相关的软件包,所有我们在远程ssh登录到ubuntu系统的时候会失败。

本文将会讲述如何来安装openssh相关软件包来解决无法远程ssh登录到ubuntu系统的问题。

1# 执行下面的apt-get命令安装openssh相关软件包。

apt-get install openssh*

[email protected]:~$ apt-get install openssh*
E: 无法打开锁文件 /var/lib/dpkg/lock - open (13: Permission denied)
E: 无法对状态列表目录加锁(/var/lib/dpkg/),请查看您是否正以 root 用户运行?
[email protected]:~$ sudo apt-get install openssh*
[sudo] password for ubuntutest:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
注意,根据Glob 'openssh*' 选中了 'openssh-known-hosts'
注意,根据Glob 'openssh*' 选中了 'openssh-blacklist-extra'
注意,根据Glob 'openssh*' 选中了 'openssh-blacklist'
注意,根据Glob 'openssh*' 选中了 'openssh-sftp-server'
注意,根据Glob 'openssh*' 选中了 'openssh-server'
注意,根据Glob 'openssh*' 选中了 'openssh-client'
注意,根据Glob 'openssh*' 选中了 'openssh-client-ssh1'
openssh-blacklist 已经是最新版 (0.4.1+nmu1)。
openssh-blacklist-extra 已经是最新版 (0.4.1+nmu1)。
openssh-known-hosts 已经是最新版 (0.6.2-1)。
openssh-client 已经是最新版 (1:7.2p2-4ubuntu2.2)。
openssh-server 已经是最新版 (1:7.2p2-4ubuntu2.2)。
openssh-sftp-server 已经是最新版 (1:7.2p2-4ubuntu2.2)。
openssh-client-ssh1 已经是最新版 (1:7.2p2-4ubuntu2.2)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 128 个软件包未被升级。

2# 查看sshd 服务是否启动,执行下面的命令
ps aux | grep sshd

[email protected]:~$ ps aux | grep sshd
root      1129  0.0  0.2  65520  5272 ?        Ss   10:23   0:00 /usr/sbin/sshd -D
root      1304  0.0  0.3  95400  7012 ?        Ss   10:24   0:00 sshd: [email protected]/0

3# 使用非root 用户来验证是否能够SSH远程登录到该Ubuntu系统

[email protected]:~$ ssh [email protected]
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:gy+Rueth1RoavXu2zvs230nZUiCSRIcQZvivSDixfn4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
128 个可升级软件包。
62 个安全更新。
Last login: Wed Aug  2 10:11:14 2017
[email protected]:~$

Linux/ubuntu:如何更改apt-get源

当ubuntu系统默认的官方更新源下载速度慢或者宕机的情况下,我们需要更改到其它的第三方软件包更新源,比如163,阿里云等。

本文将会讲述如何在ubuntu系统下,更改默认的ubuntu官方源到aliyun 上。

方法一:在图形界面下,打开“软件包管理中心”,在“软件源” 中选择”中国的服务器“下的”mirros.aliyun.com“, 系统会自动根据ubuntu的不同版本来选择软件源。

方法二:针对ubuntu 服务器版的系统 或者没有安装GUI的ubuntu 系统,可以通过更改配置文件的方法来实现。
1# 备份/etc/apt/sources.list 文件, 输入下面的命令:

cp /etc/apt/sources.list /etc/apt/sources.list.bak

2# 使用vi 编辑器打开 /etc/apt/sources.list 文件,删除所有的旧的软件源或者将下面相应的条目添加到文件的最前面:
根据你当前的ubuntu版本,来选择相应的条目:

xenial (16.04)

deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse


wily (15.10)

deb http://mirrors.aliyun.com/ubuntu/ wily main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ wily-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ wily-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ wily-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ wily-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ wily main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ wily-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ wily-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ wily-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ wily-backports main restricted universe multiverse


vivid (15.04)

deb http://mirrors.aliyun.com/ubuntu/ vivid main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-backports main restricted universe multiverse


trusty(14.04)

  deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

 

Quantal(12.10)

deb http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse

 

Precise(12.04)

  deb http://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ precise main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ precise-security main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ precise-updates main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ precise-proposed main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ precise-backports main restricted universe multiverse        


Oneiric(11.10)

deb http://mirrors.aliyun.com/ubuntu/ oneiric main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ oneiric-security main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ oneiric-updates main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ oneiric-proposed main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ oneiric-backports main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ oneiric main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ oneiric-security main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ oneiric-updates main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ oneiric-proposed main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ oneiric-backports main restricted universe multiverse

          
Natty(11.04)

 deb http://mirrors.aliyun.com/ubuntu/ natty main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ natty-security main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ natty-updates main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ natty-proposed main restricted universe multiverse
  deb http://mirrors.aliyun.com/ubuntu/ natty-backports main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ natty main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ natty-security main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ natty-updates main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ natty-proposed main restricted universe multiverse
  deb-src http://mirrors.aliyun.com/ubuntu/ natty-backports main restricted universe multiverse

3# 保存退出后,执行apt-get update 命令来检测是否能够正常更新软件包。

 $ sudo apt-get update

            

Linux: 如何在Ubuntu下设置APT的网络代理(Proxy)

 在公司的网络中,系统有时候需要设置了网络代理之后,才能正常的访问外网,那么下面将会介绍如何在ubuntu linux系统中设置网络代理。

1# 编辑/etc/apt/apt.conf 配置文件(如果/etc/apt/目录下没有apt.conf文件,那么需要手动创建)

2# 按照下面的格式,将网络代理配置信息加入到apt.conf文件里。
Acquire::http::proxy “http://user:[email protected]:port”;

例如: Acquire::http::Proxy “http://192.168.0.1:80“;

3# 保存退出当前配置文件

4# 运行 sudo apt-get update 命令,来检测ubuntu系统是否能够正常更新。

[email protected]:~$ sudo apt-get update
[sudo] password for ubuntutest:
命中:1 http://archive.ubuntu.com/ubuntu xenial InRelease
获取:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
获取:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
获取:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
已下载 306 kB,耗时 1秒 (250 kB/s)
正在读取软件包列表... 完成

【已解决】error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory –

对于在安装包的时候遇到“error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory”错误的时候,如何来解决呢?

出现在个错误的原因主要是因为在有些系统管理默认的libstdc库只libstd++.so.5. 而系统默认安装的可能是libstd++.so.6..所以这个时候需要找到libstd++.so.6,然后重新做个软链接,输入下面的命令:

$ find /usr -name libstdc*
usr/lib/coreutils/libstdbuf.so<br />
/usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.a<br />
/usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.so<br />
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19<br />
/usr/lib/x86_64-linux-gnu/libstdc++.so.6<br />
/usr/share/doc/libstdc++-4.8-dev<br />
/usr/share/doc/gcc-4.8-base/test-summaries/libstdc++.sum.gz<br />
/usr/share/doc/gcc-4.8-base/C++/libstdc++_symbols.txt.amd64<br />
/usr/share/doc/libstdc++6
 

切换到libstdc++.so.6 所在的目录,输入命令:

	cd /usr/lib/x86_64-linux-gnu/
 

重新做软连接:

 $ ln libstdc++.so.6 libstdc++.so.5
 

这样问题就应该被解决了。

在说明下,我是在ubuntu 14.04 上遇到这个问题的。

wordpress搬家后在编辑器无法上传图片或附件问题

Cannot upload to WordPress Media Library (in WordPress Appliance)
我们的博客搬家之后,我们的附件在服务器的绝对地址可能会产生变化。您会发现在我们想在新的服务器上传图片的时候,会产生类似这样子的问题:
无法建立目录 /home1/hugege/public_html/wp-content/uploads/2009/09。
“test.jpg” has failed to upload due to an error
The uploaded file could not be moved to /var/www/wordpress/wp-content/uploads/2013/05.
是否上级目录没有写权限?
解决问题的办法是运行下面的命令:
chown -R www-data:www-data /var/www/wordpress/wp-content/uploads
chmod -R 755 /var/www/wordpress/wp-content/uploads
这个主要针对debian,ubuntu 主机, 因为ubuntu系统中的apache 用户默认是www-data…所以必须这么改。。。。

VSftpd连接错误425 Security: Bad IP connecting解决方法

今天在linux机器上安装了一个vsftpd服务器,结果在连接时出现425 Security: Bad IP connecting错误了,经过一上午的搜索总结出一此问题解决办法。
错误提示

425 Security: Bad IP connecting
 

主要是需要在/etc/vsftpd/vsftpd.conf文件中添加如下一行:
代码如下 复制代码

pasv_promiscuous=YES
service vsftpd restart
 

pasv_promiscuous选项参数说明:
此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。
合理的用法是:在一些安全隧道配置环境下,或者更好地支持FXP时(才启用它)。

ubuntu启用apache的mod_headers和mod_expires

ubuntu部署好wordpress后,发现插件wp_super_cache里面有几个警告,请启用mod_expires和mod_headers.
可以按照以下命令,启用apache的缓存

[email protected]:~# a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
  service apache2 restart
[email protected]:~# a2enmod expires
Enabling module expires.
To activate the new configuration, you need to run:
  service apache2 restart
[email protected]:~# service apache2 restart
 * Restarting web server apache2
 

问题解决!

vim / vi命令在没有root权限的情况下如何保存文件

当你在linux系统下以一个普通用户登录系统后,使用vi/vim命令编辑一个文件,当你想保存文件的时候,系统会提示说你么有root权限,无法保存。这个时候该怎么办?
 
你可以使用 linux tee 命令结合 linux sudo 命令来实现没有root权限的情况下不用创建临时文件就可以保存更改的文件。
 
首先使用普通用户登录当前系统,输入下面的vi 命令,打开一个文件:
 

vi /etc/apache2/conf.d/mediawiki.conf
 

 
打开文件后,做一些更改,输入wq保存,你会看到下面的错误。

E166: Can't open file for writing
 

 
看下图:
 
vim vi 没有root权限保存文件1
这个时候如果想保存文件,可以在末行模式下输入下面的命令:

:w !sudo tee %
 

 
vim vi 没有root权限保存文件2
 
其中,
:w 是写一个文件
!sudo 是调用shell sudo 命令
tee 是将输出的内容重定向
 
vim vi 没有root权限保存文件3
 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

Vi / Vim:如何保存并退出编辑器

当使用vi /vim 命令编辑一个文件后,如何才能保存并退出当前的vi /vim 编辑器呢?
vi/vim
为了保存并退出vi /vim,可以参照下面的步骤:
1# 首先从输入模式返回到命令模式,输入:ESC 键
2# 输入”:”,进入末行模式
3# 再输入下面的命令

x
 

x!
 

wq!
 

如下图:
Vi Vim 如何保存并退出编辑器
之后输入回车,就能保存并退出 vi /vim 了。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. 29个最基本的 vim /vi 命令
3. vim 命令大全 / vi 命令大全

vi/vim 命令:如何向前或向后跳转到最后一次光标的位置

当你使用vim 文本编辑器去写bash shell脚本或者编辑一个配置文件的时候,我们经常会会需要去搜索之前写的bash shell 函数或者某一个字符串,那么光标就会移动到函数名或字符串所在的行。当查看完这个函数或字符串后,如何才能再回档原来写代码的位置或者搜索字符串之前的光标所在的位置呢?我们如何使用linux vi /vim 命令 向前或向后跳转到最后一次光标所在的位置呢?
vi/vim
本文将会讲述如何在vim /vi 文本编辑器中使用 vi /vim 命令自动跳转到最后一次光标所在的位置。
我们可以使用下面的两个 vi /vim 命令来做光标的跳转:
1)CTRL – O : 将光标向文本上方跳转到最后一次光标的位置
2)CTRL-i : 将光标想文本下方跳转到最后一次光标的位置
这里需要注意的是,每次的跳转都会被记录的一个跳转列表里,这样的话,你就可以使用CTRL-o 和CTRL -i 这两个命令,来回的做跳转,可以让你很方便的跳转到之前的光标所在的位置。对用vim 编辑器写代码的人来说,用处很大。
举个例子:
用vim 命令打开一个bash shell 脚本文件text.sh, 输入命令:

vim test.sh
 

将光标定位在第20 行,输入命令:

:20
 

查找脚本里的一个函数start,输入命令:

/sart
 

这个时候光标就会定位在start函数所在位置
现在我们想在回到上一次光标所在的位置,那么就可以输入vim 命令: ctrl -o 或 ctrl -i, 让光标回到第20行。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

vi/vim 命令:如何消除并撤销所有对文件的更改

对于一个刚开始使用linux vi /vim 文本编辑器的新手来说,你可能已经知道如何不保存退出vi编辑器。但是如何不退出vi /vim 编辑器并撤销所有的对文本的更改,是文本能够恢复到原来的状态呢? 如何对当前使用 vi /vim 编辑器打开的文件撤销所有的更改呢?
vi/vim
为了对通过vim /vi编辑器打开的文件撤销所有的更改,你需要按照下面的步骤:
1)退出当前的输入模式,回到命令模式,输入“ESC”键
2)输入”:”
3) 紧接着输入下面的命令:

e!
 

或者

edit!
 

上面的命令会将你的文本回退到最后一次保存的版本。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. vim 命令大全 / vi 命令大全

vim 命令大全 / vi 命令大全

vim 命令作为linux系统下使用最多的文本编辑器,功能十分强大,里面包含了操作文本的各种命令。本文收集了在linux系统下的 最常用的vim 命令大全 /vi 命令大全。
vi/vim
vim 命令大全
光标控制命令:
命令 光标移动
h 向左移一个字符
j 向下移一行
k 向上移一行
l 向右移一个字符
G 移到文件的最后一行
w 移到下一个字的开头
W 移到下一个字的开头,忽略标点符号
b 移到前一个字的开头
B 移到前一个字的开头,忽略标点符号
L 移到屏幕的最后一行
M 移到屏幕的中间一行
H 移到屏幕的第一行
e 移到下一个字的结尾
E 移到下一个字的结尾,忽略标点符号
( 移到句子的开头
) 移到句子的结尾
{ 移到段落的开头
} 移到下一个段落的开头
0(数字), | 移到当前行的第一列
^ 移到当前行的第一个非空字符
$ 移到当前行的最后一个字符
+, Enter 移到下一行的第一个字符
– 移到前一行的第一个非空字符
 
在 vi 中添加文本:
命令 插入动作
a 在光标后插入文本
A 在当前行插入文本
i 在光标前插入文本
I 在当前行前插入文本
o 在当前行的下边插入新行
O 在当前行的上边插入新行
s 删除光标所在处字符,并进入插入模式
S 删除光标所在的行,并进入插入模式
:r file 读入文件 file 内容,并插在当前行后
:nr file 读入文件 file 内容,并插在第 n 行后
Esc 回到命令模式
^v char 插入时忽略 char 的指定意义,这是为了插入特殊字符
 
在 vi 中删除文本:
命令 删除操作
x 删除光标处的字符
dw 删至下一个字的开头
dG 删除行,直到文件结束
dd 删除整行
db 删除光标前面的字
:n,md 从第 m 行开始往前删除 n 行
d, d$ 从光标处删除到行尾
^h, backspace 插入时,删除前面的字符
^w 插入时,删除前面的字
 
修改 vi 文本:
每个命令前面的数字表示该命令重复的次数
命令 替换操作
rchar 用 char 替换当前字符
R text escape 用 text 替换当前字符直到按下 Esc 键
stext escape 用 text 代替当前字符
S 或 cctext escape 用 text 代替整行
cwtext escape 将当前字改为 text
Ctext escape 将当前行余下的改为 text
cG escape 修改至文件的末尾
ccursor_cmd text escape 从当前位置处到光标命令位置处都改为 text
 
在 vi 中查找与替换:
命令 查找与替换操作
/text 在文件中向前查找 text
?text 在文件中向后查找 text
n 在同一方向重复查找
N 在相反方向重复查找
ftext 在当前行向前查找 text
Ftext 在当前行向后查找 text
ttext 在当前行向前查找 text,并将光标定位在 text 的第一个字符
Ttext 在当前行向后查找 text,并将光标定位在 text 的第一个字符
:set ic 查找时忽略大小写
:set noic 查找时对大小写敏感
:ranges/pat1/pat2/g 用 newtext 替换 oldtext
:m,ns/oldtext/newtext 在 m 行通过 n,用 newtext 替换 oldtext
& 重复最后的 :s 命令
:g/text1/s/text2/text3 查找包含 text1 的行,用 text3 替换 text2
:g/text/command 在所有包含 text 的行运行 command 所表示的命令
:v/text/command 在所有不包含 text 的行运行 command 所表示的命令
 
在 vi 中复制文本:
命令 复制操作
yy 将当前行的内容放入临时缓冲区
nyy 将 n 行的内容放入临时缓冲区
p 将临时缓冲区中的文本放入光标后
P 将临时缓冲区中的文本放入光标前
“(a-z)nyy 复制 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行
“(a-z)ndd 删除 n 行放入名字为圆括号内的可命名缓冲区,省略 n 表示当前行
“(a-z)p 将名字为圆括号的可命名缓冲区的内容放入当前行后
“(a-z)P 将名字为圆括号的可命名缓冲区的内容放入当前行前
 
在 vi 中撤消与重复:
命令 撤消操作
u 撤消最后一次修改
U 撤消当前行的所有修改
. 重复最后一次修改
, 以相反的方向重复前面的 f、F、t 或 T 查找命令
; 重复前面的 f、F、t 或 T 查找命令
“np 取回最后第 n 次的删除(缓冲区中存有一定次数的删除内容,一般为 9)
n 重复前面的 / 或 ? 查找命令
N 以相反方向重复前面的 / 或 ? 命令
 
保存文本和退出 vi:
命令 保存和/或退出操作
:w 保存文件但不退出 vi
:w file 将修改保存在 file 中但不退出 vi
:wq 或 ZZ 或 😡 保存文件并退出 vi
:q! 不保存文件,退出 vi
:e! 放弃所有修改,从上次保存文件开始再编辑
 
vi 中的选项:
选项 作用
:set all 打印所有选项
:set nooption 关闭 option 选项
:set nu 每行前打印行号
:set showmode 显示是输入模式还是替换模式
:set autoindent 继承前一行的缩进方式,特别适用于多行注释
:set smartindent 为C程序提供自动缩进
:set list 显示制表符(^I)和行尾符号
:set ts=8 为文本输入设置 tab stops
:set window=n 设置文本窗口显示 n 行
:set number 显示行数
:set nonumber 取消显示行数
 
vi 的状态:
选项 作用
:.= 打印当前行的行号
:= 打印文件中的行数
ctrl+g 显示文件名、当前的行号、文件的总行数和文件位置的百分比
:l 使用字母 “l” 来显示许多的特殊字符,如制表符和换行符
 
在文本中定位段落和放置标记:
选项 作用
{ 在第一列插入 { 来定义一个段落
[[ 回到段落的开头处
]] 向前移到下一个段落的开头处
m(a-z) 用一个字母来标记当前位置,如用 mz 表示标记 z
‘(a-z) 将光标移动到指定的标记,如用 ‘z 表示移动到 z
 
在 vi 中连接行:
选项 作用
J 将下一行连接到当前行的末尾
nJ 连接后面 n 行
 
光标放置与屏幕调整:
选项 作用
H 将光标移动到屏幕的顶行
nH 将光标移动到屏幕顶行下的第 n 行
M 将光标移动到屏幕的中间
L 将光标移动到屏幕的底行
nL 将光标移动到屏幕底行上的第 n 行
^e(ctrl+e) 将屏幕上滚一行
ctrl+y 将屏幕下滚一行
ctrl+u 将屏幕上滚半页
ctrl+d 将屏幕下滚半页
ctrl+b 将屏幕上滚一页
ctrl+f 将屏幕下滚一页
ctrl+l 重绘屏幕
z-return 将当前行置为屏幕的顶行
nz-return 将当前行下的第 n 行置为屏幕的顶行
z. 将当前行置为屏幕的中央
nz. 将当前行上的第 n 行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz- 将当前行上的第 n 行置为屏幕的底行
 
vi 中的 shell 转义命令:
选项 作用
:!command 执行 shell 的 command 命令,如 :!ls
:!! 执行前一个 shell 命令
:r!command 读取 command 命令的输入并插入,如 :r!ls 会先执行 ls,然后读入内容
:w!command 将当前已编辑文件作为 command 命令的标准输入并执行 command 命令,如 :w!grep all
:cd directory 将当前工作目录更改为 directory 所表示的目录
:sh 将启动一个子 shell,使用 ^d(ctrl+d) 返回 vi
:so file 在 shell 程序 file 中读入和执行命令
 
vi 中的宏与缩写:
(避免使用控制键和符号,不要使用字符 K、V、g、q、v、*、= 和功能键)
选项 作用
:map key command_seq 定义一个键来运行 command_seq,如 :map e ea,无论什么时候都可以 e 移到一个字的末尾来追加文本
:map 在状态行显示所有已定义的宏
:umap key 删除该键的宏
:ab string1 string2 定义一个缩写,使得当插入 string1 时,用 string2 替换 string1。当要插入文本时,键入 string1 然后按 Esc 键,系统就插入了 string2
:ab 显示所有缩写
:una string 取消 string 的缩写
 
在 vi 中缩进文本:
选项 作用
ctrl+i或 tab 插入文本时,插入移动的宽度,移动宽度是事先定义好的
:set ai 打开自动缩进
:set sw=n 将移动宽度设置为 n 个字符
n> 使 n 行都向右移动一个宽度,例如 3>> 就将接下来的三行每行都向右移动一个移动宽度
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

29个最基本的 vim /vi 命令

本文收集了29个在日常工作中最常使用的29个基本 vim 命令 / vi 命令,对于linux初学者来说,这些命令是必须要掌握的。
vi/vim
1.vim
#在命令行中输入vim,进入vim编辑器
2.i
#按一下i键,下端显示 –INSERT–
#插入命令,在vim中可能任意字符都有作用
3.Esc
#退出i(插入)命令进行其它命令使用
4.:r filename
#读入一个文件内容,并写入到当前编辑器中
5.:w newfilename
#将该编辑器中的内容写入到一个新文件中
6.:w
#在编辑的过程中保存文件,相当于word中的ctrl+s
7.:! command
暂时离开 vi 到指令列模式下执行 command 的显示结果!例如
:!ls
#在编辑过程中执行shell命令ls
8.:sh
#进入shell命令行,执行完命令后ctrl+d退出重新进入vim编辑继续编辑
在shell命令下,执行ctral+l完成清屏
9.:wq
#保存文件并退出
10.ZZ
#保存文件并退出,同上一个命令,注意大写
11.:q!
#强制退出,不保存
12.:set number或者:set nu
#使编辑中的文件显示行号
13.:set nonumber或者:set nonu
#与上一条命令相反,不显示行号
14.:help i
#查看插入命令帮助
15.u
#撤消上一步操作
16./Fedora
#查找Fedora字符
17.:s /Fedora/Redhat
#将Fedora字符替换为Redhat(只替换在光标所在的行)
18.dw
#删除单词
dd
#删除行
19.o
#打开空白一行
20.vim + filename
#进行文件最后一行进行编辑
21.vim +n filename
#进入文件第n行进行编辑
22.:1,.s/redhat/fedora
#.号表示当前行,即光标所在行
#将第1行到当前行(.)第一次出现的redhat字符代替为fedora
23.:1,.s/redhat/fedora/g
#将第1行到当前行(.)所有出现的redhat字符代替为fedora,g
全局标志
24.:1,$s/redhat/fedora/g
#$表示最后一行
#将第1行到最后一行所有出现的redhat字符代替为fedora
25.:%s/redhat/fedora/g
#同上一个命令
26.:%s/\/fedora/g
#将第1行到最后一行所有出现的redhat字代替为fedora
#字,而不是字符
27.:f
#显示文件内容,状态等等
#同ctrl+g命令
28.:e!
#当前文件,返回到上次保存
:e file
#切换编辑文件
29.:n
#当编辑时有多个文件(比如vim file1 file2)时切换到下一个文件,与:e file
结合使用
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

Linux下如何使用vi /vim 文本编辑器做批量字符串替换

在linux下我们最常使用的文本编辑器就是是vi 编辑器了,那么如何使用linux vi 文本编辑器来做批量的字符串替换呢? 本文将会讲述如何使用linux vi /vim 文本编辑器来做字符串的批量替换。
vi/vim 
#1 使用linux vi /vim 编辑器做文件内全部替换
输入下面的命令:

%s#old#new#g
 

上面的命令会将文本内的所有的old字符串替换成“new”.这里使用了 ”#“ 分隔符,当然你也可以使用其它的,比如”/”.
 
#2 使用linux vi /vim 编辑器做文件内局部替换
输入下面的命令:

:10,20s/old/new/g
 

上面的vi /vim 命令会将文件内的第10行到20行直接的所有的old字符串替换成new。
对于上的命令如果在命令后面再加上”c”选项,这样在vi 替换字符串之前会出现提示符确认,是否要执行字符串替换。
输入下面的命令:

:10,20s/old/new/gc
 

 
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

linux下如何退出vi/vim 文本编辑器

当你用vi/vim 文本编辑器打开一个文件的时候,并且对文件做了更改,之后如何来退出vi编辑器呢? 退出vi/vim 编辑器又分为以下几种:不保存退出vi/vim 编辑器,保存退出vi/vim 编辑器,只保存不退出vi/vim编辑器,没有更改直接退出vi/vim编辑器。下面我们分别来说以下这四种退出vi/vim的方法:
vi/vim 
#1不保存退出vi/vim 编辑器
这个我们在之前的文章中讲过如何不保存退出vi/vim编辑器,简单的说就是从输入模式返回到命令模式,然后输入“”,在输入”q!“,回车后,就可以不保存退出vi/vim编辑器
 
#2保存退出vi/vim 编辑器
在linux vi/vim 文本编辑器里,保存并退出vi/vim编辑器的方法有多种:
1)在末行模式下,输入”:“后,再输入”wq“,回车就可以保存退出vi/vim文本编辑器。
2)在命令模式下,输入两次大写字母”z“,如果当前编辑的文件被更改过,那么会保存文件并退出vi/vim 编辑器,如果没有编辑修改过,那么会直接退出vi/vim编辑器。
3)在末行模式下,输入”“后,再输入”x“,回车后即可保存并退出vi/vim编辑器。
 
#3只保存不退出vi/vim编辑器
如果想对当前编辑的文件,只做保存操作,但并不退出vi/vim编辑器(在编辑文档的时候要记得保存,否则可能会因为系统宕机引起文件更改丢失或不保存),进入末行模式,输入”:”后,再输入“w”,回车,就可以随时保存当前文件更改。
 
#4 没有更改直接退出vi/vim编辑器
如果使用vi/vim 文本编辑器打开了文件,但并没有对文件做任何的更改,可以直接退出,进入末行模式,输入”:”,再输入”q”,回车后就可以退出vi/vim编辑器,返回shell。
 
以上是总结的关于linux下退出 vi/vim 编辑器的几种情况和退出方法。
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

Linux 下 vi/vim 文本编辑器超详细使用指南

Linux下的编辑器最常用的就是vim或者vi文本编辑。vi 和vim 编辑器的区别是vim是vi的改进版本,在vi 编辑器的基础上上扩展了很多实用的功能。 大多数的linux/unix 发行版本中都使用 vim 代替了原来的 vi 文本编辑器。 如果是centos或者redhat系统,当系统安装完毕后,vi/vim 文本编辑器默认情况下就已经被安装了。如果是debian/ubuntu系统下,默认情况下,vim编辑器是不会被安装的。你需要在ubuntu系统下手动安装vim编辑
vi/vim文本编辑器是我们在linux系统下工作可以说是必须会使用的一个工具,因为linux系统的设计理念是一切皆文件,也就是说,你在linux里的任何操作都是对文件的操作,所以会经常去操作文件,更改文件,保存文件,退出并保存文件。那么在linux下,如何使用vim/vi 文本编辑器来新建文件,编辑文件,保存文件呢? 如何使用vim/vi文本编辑器的查找命令来查找特定的文本呢? 如何使用vim/vi 文本编辑器中的查找并替换命令来对文本做批量更改呢?
本文将会给大家详细讲述如何在linux操作系统下使用vi/vim 文本编辑器。
 
vi/vim模式介绍
在linux vi/vim 文本编辑器里有三种模式:命令模式输入模式末行模式。这三者模式的区别是什么呢?
命令模式是vi/vim 编辑器进入后的默认模式,从命令模式可以切换到输入模式和末行模式,如果当你进入另外的两种模式后,可以使用“ESC”键退回到命令模式。在命令模式下,可以输入一些文本编辑器特有的命令,比如说你想编辑文件,那么就需要输入“i”,让当前模式变为插入模式或者输入模式,这样你就可以编辑这个文本了。
输入模式顾名思义就是要对本文做输入的操作,也就是说可以对文件做出更改操作。否则,你在命令模式下,vi/vim 文本编辑器是只读模式,你无法对文本做出更改。
末行模式是是命令模式下输入”:”,当你在输入模式下,对文件做了更改,那么需要先退回到命令命令,再进入末行模式,并输入”wq”后,即可保存并退出 vi/vim 文本编辑器。如果想不保存退出 vi/vim 文本编辑器,那么直接输入”q!”,即可。
 
在linux系统下运行 vi/vim 文本编辑器
在linux命令行下,输入 vi 或者vim 命令:

vi
 

或者

vim
 

linux vi vim 文本编辑器
 
linux 下 vim/vi 文本编辑器常用命令
#1 进入vi/vim文本编辑器的命令
vi filename:打开或新建文件,并将光标置于第一行行首的位置
vi +n filename: 打开文件,并将光标置于第n行的位置
vi + filename: 打开文件,并将光标置于最后一行的位置
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的行首
vi -r filename: 在上次征用vim 文本编辑器的时候发生系统奔溃后,恢复filename 文件
vi filename1…filenamen: linux vi/vim 文本编辑器可以通过打开多个文件,依次进行编辑
#2 linux vi/vim 文本编辑器下移动光标的命令
H: 光标移到屏幕顶行
M: 光标移到屏幕中间行
L: 光标移到屏幕最后行
0: 光标移到当前行首
$: 光标移到当前行尾
#3 linux vi/vim 文本编辑器下屏幕翻滚类命令
Ctrl+F:向前翻整页
Ctrl+U:向前翻半页
Ctrl+B:向后翻整页
Ctrl+D:向后翻半页
#4 Linux vi/vim 文本编辑器插入文本类命令
i: 在光标前
I:在当前行行首
a: 在光标后
A: 在当前行尾
o: 在当前行之下新开一行
O: 在当前行之前新开一行
#5 Linux vi/vim 文本编辑器删除命令
do:删至行首
d$: 删至行尾
dd: 删除光标所在行
ndd: 删除当前航及其后n-1行
D: 删除当前光标到行尾的内容
Ctrl+u: 删除输入方式下输入的所有文本
#6 Linux vi/vim 文本编辑器搜索及替换命令
/pattern: 从光标开始处向文件尾搜索pattern模式
?pattern: 从光标开始处向文件首搜索pattern 模式
:s/p1/p2/g : 将当前行中所有p1替换成p2
:n1,n2s/p1/p2/g:将第n1行到n2行中所有的p1替换成p2
:g/p1/s//p2/g:将文件中所有的p1替换成p2
#7 Linux vi/vim 文本编辑器拷贝和粘贴命令
在vi/vim文本编辑器中”y”表示拷贝,”d”表示删除, “p”表示粘贴,通常与光标移动命令结合使用
y$: 表示拷贝从当前光标处到行尾的内容
d$: 表示删除从当前光标到行尾的内容
yy: 表示拷贝光标所在行
#8 Linux vi/vim 文本编辑器撤销操作命令
u:取消最近一次的操作
U:取消所有的操作
#9 vi/vim 编辑器末行模式下的命令
n1,n2 d: 将n1行到n2行之间的内容删除
:w 保存当前文件
:e filename 打开文件filename进行编辑
:x 保存当前文件并推出
:q 退出 vi/vim 编辑器
:q! 不保存并退出vi/vim编辑器
以上是linux 下vi/vim 文本编辑器里最常用的命令集合。更多关于vi/vim编辑器的使用,可以参考官方帮助文档。
更多参考:
1.linux vi/vim man 帮助文档
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. vi/vim里如何退出不保存?

CentOS/Linux:如何配置SSH无密码登录

当你在搭建集群或者在配置hadoop大数据集群环境的时候,都需要配置节点之间的无密码访问。本文将会讲述如何来设置ssh无密码登录。
ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,以CentOS为例。
有机器A,B。现想A通过ssh免密码登录到B。
1.在A机下生成公钥/私钥对。

[[email protected] ~]$ ssh -keygen -t rsa -P ''
 

-P表示密码,-P ” 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
它在登录用户的家目录下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。
2.把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制。

[[email protected] ~]$ scp .ssh/id_rsa.pub [email protected]:/home/chenlb/id_rsa.pub [email protected]'s password: id_rsa.pub                                    100%  223     0.2KB/s   00:00
 

由于还没有免密码登录的,所以要输入密码。
3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里,如果没有.ssh/authorzied_keys,就新建一个。

[[email protected] ~]$ cat id_rsa.pub >> .ssh/authorized_keys [[email protected] ~]$ chmod 600 .ssh/authorized_keys
 

authorized_keys的权限要是600。
这样A机就可以登录B机了。

[[email protected] ~]$ ssh B
 The authenticity of host 'B (B)' can't be established. RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'B' (RSA) to the list of known hosts.
Last login: Thu Jul  3 09:53:18 2008 from test
 

第一次登录是时要你输入yes
登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
想让A,B机无密码互登录,那B机以上面同样的方式配置即可。

centos/ubuntu下安装glances监控软件

如果你想通过一个工具来监控真个linux系统的使用情况,比如cpu, 磁盘iO,网络使用情况,内存使用情况以及其它的。那么可以尝试使用glances工具来监控系统。

CentOS/RHEL 下安装glances工具

使用yum命令来安装glances,输入下面的命令:

yum -y install glances
 

命令输出:

yum install glances
Loaded plugins: product-id, protectbase, rhnplugin
This system is receiving updates from RHN Classic or RHN Satellite.
rhel-x86_64-server-6                                 | 1.5 kB     00:00
rhel-x86_64-server-optional-6                        | 1.5 kB     00:00
0 packages excluded due to repository protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package glances.noarch 0:1.7.1-1.el6 will be installed
--> Processing Dependency: python-psutil >= 0.4.1 for package: glances-1.7.1-1.el6.noarch
--> Processing Dependency: python-setuptools for package: glances-1.7.1-1.el6.noarch
--> Running transaction check
---> Package python-psutil.x86_64 0:0.6.1-1.el6 will be installed
---> Package python-setuptools.noarch 0:0.6.10-3.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
============================================================================
 Package             Arch     Version          Repository              Size
============================================================================
Installing:
 glances             noarch   1.7.1-1.el6      epel                   107 k
Installing for dependencies:
 python-psutil       x86_64   0.6.1-1.el6      epel                    84 k
 python-setuptools   noarch   0.6.10-3.el6     rhel-x86_64-server-6   336 k
Transaction Summary
============================================================================
Install       3 Package(s)
Total download size: 527 k
Installed size: 843 k
Is this ok [y/N]: y
Downloading Packages:
(1/3): glances-1.7.1-1.el6.noarch.rpm                | 107 kB     00:00
(2/3): python-psutil-0.6.1-1.el6.x86_64.rpm          |  84 kB     00:00
(3/3): python-setuptools-0.6.10-3.el6.noarch.rpm     | 336 kB     00:00
----------------------------------------------------------------------------
Total                                       1.8 MB/s | 527 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : python-psutil-0.6.1-1.el6.x86_64                         1/3
  Installing : python-setuptools-0.6.10-3.el6.noarch                    2/3
  Installing : glances-1.7.1-1.el6.noarch                               3/3
  Verifying  : python-setuptools-0.6.10-3.el6.noarch                    1/3
  Verifying  : python-psutil-0.6.1-1.el6.x86_64                         2/3
  Verifying  : glances-1.7.1-1.el6.noarch                               3/3
Installed:
  glances.noarch 0:1.7.1-1.el6
Dependency Installed:
  python-psutil.x86_64 0:0.6.1-1.el6
  python-setuptools.noarch 0:0.6.10-3.el6
Complete!
 
Ubuntu/Debian下安装glances工具
 

输入下面的命令:

sudo apt-get install glances
 

命令输出:
glances