欢迎光临
我们一直在努力

Linux系统中crontab命令的使用

u22e阅读(1967)

Linux系统中crontab命令的使用

我们在使用系统的过程中,经常需要在以后的某个时间点执行一个任务,而我们又不在机器旁边的时候,比如在半夜时服务器访问的用户很少,宽带资源很充足的时候,要去镜像软件包、重启服务器(虽然Linux很稳定)等,或者需要服务器在每天的特定时间去备份数据库或者做其它周期性的任务。

这时就需要任务计划去满足我们的需求,在Linux中任务计划分为一次性任务计划和周期性任务计划,只在某个时间点执行一次的任务计划,比如:下载镜像、重启服务器等就用一次性任务计划。而需要周期性、重复执行的任务就用周期性任务计划需用crontab命令。

crontab是用来创建周期性任务计划的。也就是说那些需要重复执行的任务就需要用到它,那它是如何实现周期性的呢?在系统中有一个叫crond的守护进程。就是因为它的存在,才得以让我们可以很放心的把这么重要的任务交给它去执行。而cron又分为系统cron和用户cron。

系统cron在/etc/crontab文件中有其详细定义,只要我们按照这个格式去创建任务计划。系统就能很愉快的工作。那么它的格式是什么呢?请看下图:

 

有没有觉得晕?没关系,其实它已经很明确的告诉你要怎么去创建一个任务计划了。但这里我们只是去看这里的字段都是一些什么含义,而不建议去直接修改这个文件。具体什么原因你懂的,Linux可不会阻止你自杀的。比如:rm -rf /这个命令你可以很轻松的去执行,但后果可是很严重的。下面说说里面字段的含义:

SHELL=/bin/bash:用于解释执行任务计划里面的命令的解释器

PATH=/sbin:/bin:/usr/sbin:/usr/bin:PATH环境变量,shell执行命令时会以这些路径下去寻找命令的路径。

MAILTO=root:任务计划的结果发送给谁。

下面的5个*号从左至右分别代表的是分、时、日、月、周。紧接着的是要执行的命令,在写命令时建议使用命令的绝对路径,以免在执行时不能正确解释执行。

那我们要怎样去定义一项任务呢?在这之前先说说*号的有效取值范围以及如何去表示它们:

1.每个时间位都应该使用其可用的有效取值范围内的值;

2.某时间位上的*号表示对应位的所有有效取值;

3.-:连续的时间点取值,如:30-35 7 * * *

4.,:离散的时间点取值,如:5,35 * * * *

5./#:表示在指定范围时间内每隔#一次,如:5-45/3 * * * *

在此文件中每一行表示一个独立的任务。

用户cron是普通用户和管理员(强烈建议用此种方式创建任务计划)以安全的方式创建任务计划的,因为在保存退出后,crontab命令会检查命令是否有语法错误。创建成功后会在/var/spool/cron/目录下创建一个同用户名的文件。而crontab的用法也很简单,在命令后跟上-e 选项就可以创建任务计划。

例:每周2、4、6的凌晨3点02分把/etc目录下的文件备份至/backup目录下并以etc_开头后面跟上当天的日期。而后保存即可(友情提示:在命令中使用%时,要记得转义,或者用引号。)。如下图:

 

查看自己的cron任务列表,使用-l选项。如下图就是刚刚创建的任务计划。

那么要删除任务计划怎么办?对此我们直接用crontab -e去编辑/var/spool/cron/目录下的文件。如果连这个文件都不想要了?那好办,执行crontab -e后这个文件就被删除,从此一切烦恼就随往事烟消云散了。

当然身为管理员无时无刻不体现着特权,使用-u选项还可以别的用户创建任务计划。请看下图

上图创建了一个每天6、9、12、15、18点查看当前系统挂载的所有文件系统,并将结果追加至/tmp/mounts.txt文件中的任务。

-u选项还可以配合-l、-r选项实现查看和移除任务计划。

如果我们创建的任务计划在某天不能正常的执行,比如系统宕机、重启等,别担心还有一个小工具:anacron。

anacron是cron的补充,它的主要功能就是去检查crontab中的任务在过去的一个周期内是否有成功执行。如果没有执行,则在开机以后在系统的某个时间点内让其执行一次,无论周期是否到达。

anacron很完美的解决了我们的忧虑。

linux系统中vim学习

u22e阅读(9583)

一、前言

VIM是一款在vi上进行改进的功能性强大的,开源的文本编辑器。

    二、vim的设计理念

    vim的设计理念是组合;

命令组合:类似于linux的由一个个单一功能的程序,完成复杂任务

Vim强大的编辑能力中很大部分是来自于其普通模式命令。

      vim的设计理念是命令的组合。例如普通模式命令”dd”删除当前行,”dj”代表删除到下一行,原理是第一个”d”含义是删除,”j”键代表移动到下一行,组合后”dj”删除当前行和下一行。另外还可以指定命令重复次数,”2dd”(重复”dd”两次),和”dj”的效果是一样的。”d^”,”^”代表行首,故组合后含义是删除到光标开始到行首间的内容(不包含光标);”d$” $”代表行尾,删除到行尾的内容(包含光标);用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

  模式间的组合:

在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按”a”(append/追加)键或者”i”(insert/插入)键

    三、跟着vimtotur来认识一下vim这款编程神器吧

1.让我们先看一看由vimtotur对vim的介绍吧

2.从简单的光标开始吧

3.vim的进入和退出

     

4.文本的编辑删除  x键删除光标所在处的的字符  

5.文本编辑之插入  使用i 键

6.文本编辑之添加 使用 A键

7.保存已修改的文件

linux系统中Tripwire 部署笔记

u22e阅读(6321)

简介

Tripwire是目前最为著名的unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来。当文件现在的数字签名与保留的数字签名不一致时,那么现在这个文件必定被改动过了。

安装Tripwire

# install from EPEL

[root@linuxprobe ~]# yum --enablerepo=epel -y install tripwire

通过下面也可以
wget https://sourceforge.net/projects/tripwire/files/tripwire-rpms/centos6/tripwire-2.4.2.1-1.el6.x86_64.rpm
rpm -ivh tripwire-2.4.2.1-1.el6.x86_64.rpm

创建密钥和数据库

Tripwire 生成一个站点(site)密钥和一个本地(local)密钥。
本地密钥用于数据库文件,站点密钥用于配置文件和策略文件。
# generate keys [root@linuxprobe ~]# tripwire-setup-keyfiles ..... ..... Enter the site keyfile passphrase:# set site keyfile passphrase Verify the site keyfile passphrase:# confirm .... ..... Enter the local keyfile passphrase:# set local keyfile passphrase Verify the local keyfile passphrase:# confirm ..... ..... Please enter your site passphrase: # answer with site keyfile passphrase ..... ..... Please enter your site passphrase: # answer with site keyfile passphrase ..... .....

配置 tripwire

twcfg.txt 文件确定 Tripwire 使用的变量(例如 tripwire 报告文件的位置、e-mail 地址、报告级别)。
[root@u22e.com tripwire ]# more twcfg.txt
ROOT =/usr/sbin
POLFILE =/etc/tripwire/tw.pol
DBFILE =/var/lib/tripwire/$(HOSTNAME).twd
REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE =/etc/tripwire/site.key
LOCALKEYFILE =/etc/tripwire/$(HOSTNAME)-local.key
EDITOR =/bin/vi
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =true
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL =4
MAILMETHOD =SENDMAIL
SYSLOGREPORTING =false
MAILPROGRAM =/usr/sbin/sendmail -oi -t
################ twpol.txt 策略文件告诉 Tripwire 监视什么样的文件。
[root@u22e.com tripwire ]# more twpol.txt
# this is a comment
# system binaries
SYSBIN = +pngu+sm;
/usr/bin -> $(SYSBIN);
/usr/sbin -> $(SYSBIN);
/etc/security -> +pug (recurse=-1);
# ignore last log
#!/etc/security/lastlog;
# logs
SYSLOGS = +p-lum;
#/var/adm/messages -> $(SYSLOGS);
# ignore these do not scan
!/opt/dump;
!/opt/freeware;

執行twadmin 指令以更新加密的策略和配置檔案

twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
twadmin --create-polfile -S /etc/tripwire/site.key /etc/tripwire/twpol.txt

初始化 tripwire 资料库

[root@u22e tripwire]# tripwire --init
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/u22e.twd
The database was successfully generated.

完整性检测

tripwire --check
tripwire --check --interactive #这是和平时相同的运行测试,但是最后不会输出到屏幕,而是生成文本文件在默认编辑器中打开。

更新策略

tripwire --update --twrfile /var/lib/tripwire/report/<hostname_date_stamp>.twr
执行该命令之后,您就进入了一个编辑器。搜索所报告的文件名。所有侵害或更新都在文件名前面有一个 [x]。
如果您希望接受这些更改为正当的,则只需保存并退出文件即可。Tripwire 不再报告此文件。如果您想要这个文件不被添加到数据库,那么请删除 'x'

查看报告

twprint -m r --twrfile /var/lib/tripwire/report/<hostname_date_stamp>.twr

定期检测

crontab 执行:
10 1 * * * /usr/sbin/tripwire --check > /tmp/tripwire`date +_"%Y%m%d"`.log
10 1 * * * /usr/sbin/tripwire --check |mail -s "Tripwire report for $HOSTNAME `date +_"%Y%m%d"`" pengwu@emotibot.com
没 mail 命令的需要安装 yum -y install mailx

 

Linux系统中mkdir的使用

u22e阅读(3163)

第一、命令格式

mkdir [参数] [目录]

主要功能就是我们创建目录,或者可以赋予权限。

第二、命令参数

1、-m

设定文件夹目录权限

2、-p

创建目录路径,我们也可以一次创建多个目录。

3、-v

创建目录的时候显示创建过程信息。

第三、命令实例

1、mkdir -m 777 u22e.com

这里我们创建一个目录,授权777权限。

2、mkdir -p u22e.com/www.u22e.com

这里我们可以创建u22e.com目录里包括www.u22e.com目录。相比不加任何参数,-p可以创建目录路径内嵌的目录。如果我们直接要创建一个目录,可以不加任何参数。

3、mkdir -v u22e.com

这里我们创建一个目录,而且会提示创建过程信息。

总结,mkdir命令在我们运维Linux服务器的时候,还是有需要用到的,多使用就会熟悉。

zabbix监控juniper srx240设备指南

u22e阅读(2922)

zabbix监控juniper srx240设备指南

1.设置juniper设备

打开防火墙后台service-snmp-Communities-Add如图所示

2.测试是否成功

snmpwalk -v 2c -c public 192.168.1.1

3.添加主机

补充:找了一个Juniper厂商的官网地址

https://kb.juniper.net/InfoCenter/index?page=content&id=KB16545&actp=search

 

网络知识详解及常见配置使用方法

u22e阅读(1746)

1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

网桥(birdge):工作于OSI模型中的数据链路层,是连接两个局域网的一种存储/转发设备,能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器,可以分割冲突域。

集线器(Hub):工作于OSI模型中的物理层,可以对接收到的信号进行再生和放大,并将其以广播形式发送到所有端口,可以扩大网络的传输距离,不能分割冲突域。

二层交换机(Layer 2 switches):工作于OSI模型中的数据链路层,识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。

三层交换机(Layer 3 switches):拥有部分路由器功能的交换机,可以加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。

路由器(Router):工作于OSI模型的网络层,连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。

2 、IP地址的分类有哪些?子网掩码的表示形式及其作用

IP地址分类:

公网地址:公网地址是由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。

私有地址:私有地址(Private address)属于非注册地址,预留给组织或个人使用不能直接在网上直接进行访问的地址,私有地址一共分为A、B、C、D、E五类。

A类地址最大网络数为126(2^7-2),ip地址范围是0.0.0.0-127.255.255.255,最大主机数为16777214,地址范围是 10.0.0.0-10.255.255.255

B类地址最大网络数为16384(2^14),ip地址范围是128.0.0.0-191.255.255.255,最大主机数为16777214,地址范围是 10.0.0.0-10.255.255.255

C类地址最大网络数为2097152(2^21),ip地址范围是192.0.0.0-223.255.255.255,最大主机数为254,地址范围是 192.168.0.0-192.168.255.255

D类地址是组播地址,多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255

E类地址是特殊的预留地址,地址范围是240.0.0.1到255.255.255.254。

子网掩码: 将某个IP地址划分成网络地址和主机地址两部分,其必须与ip地址组合使用,不能单独使用。

3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。

4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

tui界面配置

centos6以下可以使用命令setup命令进入tui界面进行配置,centos7可使用命令nmtui命令进入界面进行配置

命令行界面

1、命令ip、ifconfig(注命令修改即时生效重启后消失)

ip addr add 172.23.200.1/24 dev eth0

ifconfig 172.23.200.1 netmask 255.255.255.0 eth0

2、修改配置文件(/etc/sysconfig/netwrok-scripts/ifcfg-eth0)修改后不能直接生效需要重启该网卡

 

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
IPADDR=192.168.241.10
NETMASK=255.255.255.0
DEVICE=eth0
ONBOOT=yes
[root@localhost ~]# ifdown eth0 && ifup eht0

5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。

1、在系统安装过程中配置的网络信息

2、使用tui界面进行网卡配置(centos5,6使用setup,centos7使用nmtui)

3、直接编辑网卡配置文件

4、使用命令ifconfig、ip进行网络信息配置

5、在拥有dhcp服务的网络中使用命令dhclient命令进行地址动态分配

6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
在线的主机使用绿色显示;

不在线的主使用红色显示;

 

#!/bin/bash
#
#
#
PING() {


if ping -w2 $1 &>/dev/null ;then
         echo -e "\033[32m $1 is up \033[0m"
 else
         echo -e "\033[31m $1 is down \033[0m"
fi

}

for i in `seq 1 254`;do
        PING 172.16.250.$i
done

7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;

ifcfg-IFACE配置文件参数:
DEVICE:此配置文件对应的设备的名称;
ONBOOT:在系统引导过程中,是否激活此接口;
UUID:此设备的惟一标识;
IPV6INIT:是否初始化IPv6;
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none;
TYPE:接口类型,常见的有Ethernet, Bridge;
DNS1:第一DNS服务器指向;
DNS2:备用DNS服务器指向;
DOMAIN:DNS搜索域;
IPADDR: IP地址;
NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码;
GATEWAY:默认网关;
USERCTL:是否允许普通用户控制此设备;
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许;
HWADDR:设备的MAC地址;
NM_CONTROLLED:是否使用NetworkManager服务来控制接口;

8、如何给网络接口配置多个地址,有哪些方式?

1、使用命令ficonfig、ip 命令添加,添加的地址当前有效重启后消失。

ifconfig eth0:0 172.23.200.1 netmask 255.255.255.0

ip addr add 172.23.200.1/24 label eth0:0 dev eth0

2、创建配置文件

在/etc/sysconfig/network-scripts/文件下创建文件

vim ifcfg-eth0:0

BOOTPROTO=static
IPADDR=192.168.241.12
NETMASK=255.255.255.0
DEVICE=eth0:0
ONBOOT=yes

9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

1、网络查看与配置(命令形式)

网络查看

ifconfig

ip addr show

网络配置

ifconfig eth0 172.24.200.1 netmask 255.255.255.0

ip addr add 172.24.200.1/24 dev eth0

2、路由查看与配置(命令形式)

路由查看

route

ip route  show

路由配置

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

ip route add default via 192.168.1.1 dev eth0

3、网络连接查看

 

ss
[root@localhost network-scripts]# ss -natl
State       Recv-Q Send-Q             Local Address:Port       Peer Address:Port              
LISTEN      0      128                    *:22                         *:*                  
LISTEN      0      100                     127.0.0.1:25                *:*                  
LISTEN      0      128                        :::22                    :::*                  
LISTEN      0      100                       ::1:25                   :::*

netstat

[root@localhost network-scripts]# netstat -anlt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0     52 192.168.241.10:22       192.168.241.1:14451     ESTABLISHED
tcp        0      0 192.168.241.10:22       192.168.241.1:2041      ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN

10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。

redhat风格软件包管理

1、安装

rpm -ivh 软件包命(需要手动解决软件包依赖关系)

yum -y install 软件包名(可自动解决软件包依赖关系)

2、卸载

rpm -e 软件包名(需要手动解决软件包依赖关系)

yum -y remove 软件包名(可自动解决软件包依赖关系)

3、更新

rpm -U 软件包 直接安装一个新包

rpm -F 软件包 删除原有包重新安装一个高版本的包

yum  update [package1] [package2] 升级所有包同时也升级软件和系统内核
yum upgrade [package1] [package2] 只升级所有包

11、如何使用发行版光盘作为yum repository,请描述该过程。

 

[root@localhost network-scripts]# mount /dev/cdrom /media/
[root@localhost network-scripts]# vim /etc/yum.repos.d/local.repo 
[local]
name=local
baseurl=file:///media/
gpgcheck=0
enabled=1

12、写一个脚本,完成以下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

(4) 分别统计S开头和K开头的文件各有多少;

 

#!/bin/bash
#
#
#
S=0
K=0
for i in `ls /etc/rc.d/rc3.d/S*`;do
        echo "$i start"
        let S++
done
for i in `ls /etc/rc.d/rc3.d/K*`;do
        echo "$i stop"
        let K++
done
echo "START is $S, STOP is $K"

13、写一个脚本,完成以下功能
(1) 脚本能接受用户名作为参数;

(2) 计算此些用户的ID之和;

 

#!/bin/bash
#
#
#
SUM=0
ID=0
[ $# -eq 0 ]&& echo "user $0 username1 usermane2 ..." && exit

for i in $* ;do
        if  id -u $i &>/dev/null ;then
                ID=`id -u $i`
                let SUM+=$ID
        else
                echo "no such user $i"
                        continue
        fi
done
echo $SUM

14、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

#!/bin/bash
#
#
#
NUM1=0
NUM2=0
[ $# -eq 0 ]&& echo "use $0 directory1 dicectory2 ..." && exit
for i in $* ;do
        [ ! -d $i ]&& echo "$i is not a directory"&&exit
done
for dir in $*;do
        file $dir/*
        NUM1=`file $dir/* |grep directory$ |wc -l`
        NUM2=`ls $dir|wc -l `
        let NUM3+=$NUM1
        let NUM4+=$NUM2

done

echo "Directory num. is $NUM3"
echo "All files num. is $NUM4"

15、写一个脚本
通过命令行传递一个参数给脚本,参数为用户名

如果用户的id号大于等于500,则显示此用户为普通用户;

 

#!/bin/bash
#
#
#
 [[ $# -ne 1 ]]&& echo "use $0 user name "&& exit


USER() {
        NUM=`id -u $1`
        if [[ $NUM -gt 500 ]];then
                echo "$1 is a ordinary user"
        else
                echo "$1 is not  a ordinary user"
        fi

}

 if id -u $1 &> /dev/null ;then
        USER $1
 else
        echo " $1 is not a username"
 fi

16、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;

(3) 最后显示本次共添加了多少用户;

#!/bin/bash
#
#
#

ADDUSER() {

        useradd $1 &>/dev/null
        echo "$1" | passwd --stdin $1 &>/dev/null
}
NUM=0
 for ((i=1;i<=10;i++));do
        if id  user$i &>/dev/null ;then
           continue
        else
          ADDUSER user$i
          let NUM++
        fi
done
echo "adduser num. is $NUM"

17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

 

#!/bin/bash
#
#
#

PING() {
 if ping -w2 $1 &>/dev/null ;then
        echo "$1 is online"
 fi
}
 for ((i=20;i<=100;i++));do
        PING "172.16.250.$i"
 done
~                                                                                                                                                                                                                               
~

18、打印九九乘法表;

#!/bin/bash
#
#
#
for ((i=1;i<=9;i++));do
        for j in `seq 1 $i`;do
        let     b=$i*$j
          echo -n -e " $j*$i=$b "
        done

        echo 
done

日志系统软件ELK安装及使用

u22e阅读(2379)

ELK,一般被称作为日志分析系统,三款开源产品名称的首字母集合。

ElasticSerach 是一个基于Lucene之上实现的一个分布式搜索引擎,同时还提供了存储功能。

Logstash 主要用于日志的过滤、修改、收集等功能,支持大量的数据获取方式。

一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 主要用于将上诉两者通过http协议良好的展示给用户,以便用户使用。

Elasticserach和Logstash运行,依赖于java环境当中。

什么情况下需要使用到ELK。

一般我们需要进行日志分析是,直接在日志文件中 grep、awk 就可以获得自己想要的信息,但如果在规模较大的场景中,我们就需要在每一台主机上进行grep、awk等,是不是太麻烦了?就算写个脚本是否也需要对所有结果又进行整理一下,这样效率也就太低了,因此就会使用到今天讲的主角ELK,我们在分析日志直接在一台主机上搜索自己想要的信息,并且还是通过web端访问的。比上面所说的方法就要方便很多了吧。

接着我们示例一下他的部署方法

这里只准备了2台centos7的主机就不做太复杂的架构了,一台安装logstash+httpd,复杂收集HTTP日志并发往另一台主机提供的elsticsearch上。另外一台主机就安装elasticsearch+kibana。

可直接下载官网提供的RPM包,刚才去看3个包接近150M,然而速度几KB,而后果断放弃了,找到了马哥提供的RPM包,就直接下马哥的RPM包好了。

yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel                         #下载openjdk

yum install elasticsearch-1.7.2.noarch.rpm                    #安装elasticsearch

tar xf kibana-4.1.2-linux-x64.tar.gz                         #解压kibana,kibana下载是一个压缩包

编辑配置文件。这里对elasticsearch集群做下说明,正常使用中elasticsearch应该作为集群存在,数据量过大他自身负载均衡读写也提供了存储功能,如果他挂了所有数据都丢了,你能接受吗? 要部署集群也很简单,把配置文件里面的集群名定义为一样就行了,他们会自行通过tcp的9300端口进行通讯,集群所需要的健康状态检测,选举主节点、某节点down了自动按照存储策略补齐等等,他们都会自动进行。

[root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml
[root@localhost ~]# grep ‘^[^#]’ /etc/elasticsearch/elasticsearch.yml
cluster.name: myes
node.name: “node1”

这里只添加了此两项,其他选项还有很多,例如记录的日志分为几份存储,每一份又存储多少份,按要求自行修改即可。

[root@localhost ~]# systemctl start elasticsearch                    #启动服务

确认服务启动OK , 9200位elsticsear提供http监听的端口,9300为集群通讯端口,另外其实可以下载bigdesk-latest此插件,使用elasticsearch安装是自带的程序plugin直接安装,就可以很直观看到整个集群的状态。

[root@localhost ~]# /usr/share/elasticsearch/bin/plugin -i bigdesk -u file:///root/bigdesk-latest.zip                 #安装bigdesk插件

是不是可以更直观看到节点信息了~

接着我们去安装另一台主机上的http和logstash

[root@localhost ~]# yum -y install httpd logstash-1.5.4-1.noarch.rpm   java-1.8.0-openjdk

export JAVACMD=`which java`         #配置java环境时带上此项,否则要报错

[root@localhost ~]# vim /etc/logstash/conf.d/test.conf
[root@localhost ~]# cat /etc/logstash/conf.d/test.conf
input {
file {
path => “/var/log/httpd/access_log”
}
}
filter {
grok{
match =>  {“message” => “%{COMBINEDAPACHELOG}”}
}
}
output {
elasticsearch {
cluster => “myes”
index =>”logstash-apachelog”
}
}

编辑配置文件,添加以上内容

input表示从哪里输入,这里指明的是文件,还有其他很多参数,详情看官方文档

filter 表示过滤,使用grok模块过滤,下面指明将收到的文件以哪种方式拆分,具体在/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/  此目录下提供了很多模板,可自行拿来直接调用

这里我打开了一个名为grok-partterns 的文件 大致可以看出第一段可以理解为为后面匹配到的内容命名,我们要使用它直接调用即可,后面的为正则表达式的具体匹配规则。

output输出指令,输出到elasticsearch,cluster指明集群名称,index代表把输出过去的内容以什么名称创建索引。

[root@localhost patterns]# logstash -f /etc/logstash/conf.d/test.conf  –configtest                    #测试配置文件语法
Configuration OK

接着我们回到第一台主机去安装kibana,解压kibana

[root@localhost kibana-4.1.2-linux-x64]# grep ‘^[^#]’ config/kibana.yml
port: 5601
host: “0.0.0.0”
elasticsearch_url: “http://localhost:9200”
elasticsearch_preserve_host: true
kibana_index: “.kibana”
default_app_id: “discover”
request_timeout: 300000
shard_timeout: 0
verify_ssl: true
bundled_plugin_ids:
– plugins/dashboard/index
– plugins/discover/index
– plugins/doc/index
– plugins/kibana/index
– plugins/markdown_vis/index
– plugins/metric_vis/index
– plugins/settings/index
– plugins/table_vis/index
– plugins/vis_types/index
– plugins/visualize/index

特别注意上面第三个选项,是否指的是elasticsearch,这里我是同一台主机,所以无须修改,直接启动即可

[root@localhost kibana-4.1.2-linux-x64]# bin/kibana -l /dev/null &

-l 指明日志记录位置

& 后台运行

接着就可以访问本机的5601端口了

[root@localhost patterns]# systemctl start httpd

[root@localhost patterns]# service logstash start

启动logstash,可以看到启动后是监听在9300上的,意味着自己本身也是一elasticsearch集群身份于elasticsearch通讯。

接着打开kibana主页,记得是5601端口,接着创建默认显示的索引名,就可以了

可以看到数据了,但是这里出了一个小问题,刚刚登陆进去提示没数据,我刷了几下网页过后发现还是没有,日期选择成一周,就有数据了,才发现虚拟机的时间快了一天。。。

另外在实际应用当中不用该让agent端直接往elasticsearch发送日志,需要加个server端负责统一接受client日志,再由server端统一过滤后在发送。甚至还需要在client和server端加一个队列。简单的部署就到这里吧

https://kibana.logstash.es/content/     另外提供一个ELK官方的中文指南,以便日后真正需要用到时查询

linux系统中lvm的使用方法

u22e阅读(2017)

一、概述

LVM全称为Logical Volume Manager,即逻辑卷管理器。LVM可以弹性的调整文件系统的容量,可以将多个物理分区整合在一起,并且根据需要划分空间或动态的修改文件系统空间。

LVM有两个版本: lvm,lvm2

二、LVM的相关概念

 1、物理卷(PV)

物理卷是LVM的最底层的元素,组成LVM的物理分区就是PV。

  2、卷组(VG)

将各个独立的PV组合起来,所形成的一个存储空间称为VG;VG的大小就是整个LVM的空间大小。

 3、逻辑卷(LV)

最终可以被用户格式化、挂载、存储数据的操作对象就是LV;LV与分区相类似,只不过LV可以理加灵活的调整容量。

4、物理扩展块(PE)

PE类似与分区中block的概念,也就是LVM的最小存储单位,默认大小为4M;可以通过调整PE块的数量来定义LV的容量。

 5、快照(snapshot)

快照用于保存原卷上有变化的数据。快照刚刚被创建时其内容与原卷是一模一样的,只有在原卷中的数据发生变化时,快照才会将被改动的数据的原数据保存起来。

三、LVM实际操作

   1、创建PV

首先创建分区,分区的类型要更改为8e。

上图中将4个分区创建为4个PV;可以使用以下命令来进行PV的查看:

2、创建VG

上图中使用了两个PV来创建了一个VG,其中”testvg”为VG的名称;下面来查看一下VG的详细信息

在创建VG时,也可以指定PE的大小,如下图所示:

3、创建LV

查看可用VG信息:

由上图可以看出,刚刚创建了个两个VG,容量分别为5G和2G,下面我们就在两个VG上分别创建lv;

参数说明:

-L:指定逻辑卷的容量;

-n:指定逻辑卷的名称;

-l:指定逻辑卷占用的PE数量;

创建一个LV,使用PE的数量定义LV的容量:

由于在创建VG时定义了每个PE的容量为16M,所以创建的LV的容量为16M*40=640M。

4、挂载LV

在对LV进行格式化、挂载之前先说明一下lv的访问路径问题。

可以使用两种路径来访问lv:

a、/dev/VG_NAME/LV_NAME

如:/dev/testvg/tlv

b、/dev/mapper/VG_NAME-LV_NAME

如:/dev/mapper/testvg_tlv

以上两路径均为符号链接,指向的文件为/dev/dm-#,如下图所示:

5、扩展逻辑卷

步骤:

1)先确定扩展的目标大小,并确保对应的卷组中有足够的空间;

2)扩展物理边界,使用lvextend命令;

3)扩展逻辑边界,使用resize2fs命令。

演示:

将逻辑卷tlv扩展到1G:

参数说明:

-L [+] #:指定扩展的容量;如果带+号,表示扩展的容量是在原来的基础上加上#的容量;不带+号,表示扩展容量到#。

-l [+] #:指定扩展的容量;如果带+号,表示扩展的容量是在原来的基础上加上#个PE的容量;不带+号,表示扩展到#个PE的容量。

扩展文件系统的容量到1G:

上面的实例中是在VG中还有剩余空间的情况进行的LV扩展,那么如果VG空间已经全部用完,这时再想增加扩展逻辑卷应该将新的PV加入到VG中以获得更多的空间。

上图中如果testvg已经没有剩余空间了,这时可以使用vgextend命令来扩展VG。

这样就可以对LV进行扩展了。

6、缩减逻辑卷:

步骤:

1)先确定缩减后的目标大小,并确保目标逻辑卷中有足够的空间可用;

2)卸载逻辑卷,并要执行强制检测,使用e2fsck -f命令;

3)缩减逻辑边界,使用resize2fs命令;

4)缩减物理边界,使用lvreduce命令。

演示:

将逻辑卷tlv空间缩减到1G。

注意:在扩展、缩减逻辑卷时除了使用上面用到的lvextend和lvreduce外,还可以使用lvresize命令,这几个命令的用法类似,就不再进行演示了,更多的使用方法可自行查看man手册。

7、卷的移除

1)移除逻辑卷

2)移除卷组

3)移除物理卷

上面的实例中我们将拥有3个PV的VG整个移除,如果我们只想移除VG中的个别PV可以进行如下操作:

再来看一种情况,如下图,卷组test1vg中拥有一个逻辑卷t1lv,现在要求在不对t1lv进行任何操作的情况下移动物理卷/dev/sdd1。

我们先来直接移除/dev/sdd1:

结果提示此PV正在使用,来看一下PV的信息:

由于/dev/sdd1有被占用的PE,如果想要移除此PV,需要先将PE块的移动到其它的PV上:

再来移除/dev/sdd1:

命令总结:

PV:

pvcreate,pvs,pvdisplay,pvremove,pvmove,pvscan

VG:

vgcreate,vgs,vgdisplay,vgremove,vgscan,vgextend,vgreduce

LG:

lvcreate,lvs,lvdisplay,lvremove,lvextend,lvreduce,lvresize,lvscan

LVM的命令比较简单,具体的参数也就没有做太多的说明。

四、创建快照卷

创建快照与创建逻辑卷类似,使用-s选项,后面指明是对哪个逻辑卷操作即可。

结果中两个卷是一模一样的,再看一下快照卷的使用情况:

下面对原卷进行一些操作:

快照卷已经自动将原卷中改动的数据备份了,如需恢复只需将快照卷的内容复制也来即可。

linux系统中cp命令复制文件的一个脚本

u22e阅读(3190)

脚本要求如下

(1) 按顺序分别复制/var/log目录下的每个直接文件或子目录至/tmp/test1-testn目录中;
(2) 复制目录时,才使用cp -r命令;
(3) 复制文件时使用cp命令;
(4) 复制链接文件时使用cp -d命令;

(5) 余下的所有类型,使用cp -a命令;

#!/bin/bash
declare -i j=1
for i in /var/log/*;do
    [ ! -d /tmp/test$j ] && mkdir -p /tmp/test$j
    if [ -L $i ];then
        cp -d $i /tmp/test$j
    elif [ -f $i ];then
        cp $i /tmp/test$j
    elif [ -d $i ];then
        cp -r $i /tmp/test$j
    else
        cp -a $i /tmp/test$j
    fi
    let j++
done

执行结果如下

执行结果:
[root@www tmp]# tree
.
├── test1
│   └── anaconda.ifcfg.log
├── test10
│   └── btmp
├── test11
│   └── ConsoleKit
│       └── history
├── test12
│   └── cron
├── test13
│   └── dmesg
├── test14
│   └── dmesg.old
├── test15
│   └── dracut.log
├── test16
│   └── lastlog
├── test17
│   └── maillog
├── test18
│   └── messages
├── test19
│   └── mysqld.log
├── test2
│   └── anaconda.log
├── test20
│   └── secure
├── test21
│   └── spooler
├── test22
│   └── tallylog
├── test23
│   └── wtmp
├── test24
│   └── yum.log
├── test3
│   └── anaconda.program.log
├── test4
│   └── anaconda.storage.log
├── test5
│   └── anaconda.syslog
├── test6
│   └── anaconda.xlog
├── test7
│   └── anaconda.yum.log
├── test8
│   └── audit
│       └── audit.log
└── test9
    └── boot.log

通过linux系统光盘修复误删除的rpm程序文件

u22e阅读(3067)

工作中服务器由于文件丢失等原因造成无法启动,可使用光盘引导启动对服务器进行修复

实验环境

VMware12安装Centos6.8虚拟机

Centos6.8的光盘镜像

 实验步骤

1、     执行命令删除rpm程序,注意要使用参数 –nodeps强行删除文件

#rpm -e --nodeps rpm

2、  设置加载光盘镜像

3、  重启电脑,在启动界面迅速按下“Esc”键

出现如下选择项,选择CD-ROM Drive光盘启动

注意:虚拟机的分配的内存不可以过小,如果是256M启动会失败

选择rescue installed system选项

4.建立目录并挂载光盘

# mkdir /mnt/cdrom

# mount /dev/sr0 /mnt/cdrom

5.使用rpm命令安装rpm软件包,并设置root=/mnt/sysimage/文件夹

#rpm -i /mnt/cdrom/Packages/rpm-4.8.0-55.el6.x86_64.rpm –root=/mnt/sysimage/

至此,rpm程序恢复成功!