Linux系统管理技巧(下)

六.Linux系统服务管理

  1. chkconfig服务管理工具

Linux系统所有的预设服务都可以通过查看/etc/init.d/目 录得到。

 Linux系统管理技巧(下)

系统的预设服务都可以通过这样的命令实现:service服务名start|stop|restart。这里的服务名就是/etc/init.d/目录下的这些文件了。启动crond除了可以使用命令service crond start外,还可以使用命令/etc/init.d/crond starto 我们可以使用命令chkconfig -list列出所有的服务及其每个级别的开启状态

 Linux系统管理技巧(下)

0作为shutdown动作,1作为重启至单用户模式,6为重启。在一般的Linux系统实现中,都使用了2345几个级别。在CentOS系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示图形登录方式

更改某级别下的开启状态:

 Linux系统管理技巧(下)

--level指定级别,后面是服务名。然后是off或者on。选项--level后面还可以指定多个级别

 Linux系统管理技巧(下)

还可以省略级别

 Linux系统管理技巧(下)

Ckhconfig还有一个功能,就是可以把某个服务加入系统服务或者删除,即可以使用“chkconfig --add服务名"或者“chkconfig --del服务名“这样的形式,并且可以在chkconfig --list的结果中査找到。

 Linux系统管理技巧(下)

 

 

 Linux系统管理技巧(下)

2.Systemd服务管理

systemd支持多个服务并发启动,而SysV只能一个一个地启动。系统所有的服务如下:

 Linux系统管理技巧(下)

这些服务对应的启动脚本文件在哪:

Linux系统管理技巧(下)

 

 

 等

一些常用命令:

systemctl enable crond.service // 让某个服务开机启动(.service可以省略)

#systemctl disable crond.service // 不让开机启动

#systemctl status crond.service // 查看服务状态

#systemctl start crond.service // 启动某个服务

#systemctl stop crond.service // 停止某个服务

#systemctl restart crond.service // 重启某个服务

#systemctl is-enabled crond //查看某个服务是否开机启动

unit

刚刚执行命令ls /usr/lib/systemd/system的时候,下面有很多文件,其实可以把它们归类为下面这几大类

service:系统服务  

target:多个unit组成的组  

device:硬件设备  

mount:文件系统挂载点

automount:自动挂载点

path:文件或路径

scope:不是由systemd启动的外部进程  

slice:进程组  

snapshotsystemd快照  

socket:进程间通信的套接字  

swapswap文件  

timer:定时器

target

target类似于CentOS 6里面的启动级别。但target支持多个target同时启动。target其实是多个unit的组合,系统启动就是启动多个unit,为了管理方便,就使用target来管理这些unit。查看当前系统的所有target

 Linux系统管理技巧(下)

查看一个target包含有的所有unit

 Linux系统管理技巧(下)

其余关于target的命令:

 Linux系统管理技巧(下)

multi-user.target等同于CentOS6的运行级别3,其实还有其他几个target对应0?6运行 级别,如下表所示

SyaV运行级别            systemd target                 备注

0                        poweroff.target                关闭系统

1                        rescure.target                 单用户系统

2                        multiuser.target                用户自定义级别,通常识别为级别3

3                        multiuser.target                多用户,无图形

4                        multiuser.target                用户自定义级别,通常识别为级别3

5                        graphical.target                多用户,有图形,比级别3就多了一个图形

6                        reboot.target                  重启

 

service. unit以及target之间的联系

(1)一个service属于一种unit

(2) 多个unit一起组成了一个target

(3)一个target里面包含了多个service,你可以查看文件/usr/1ib/systemd/system/sshd.service里面 [install]部分的内容,它就定义了该service属于哪一个targeto

七.Linux下的数据备份工具rsync

remote sync (远程同步)。rsync不仅可以远程同步数据(类似于scp ,而且可以本地同步数据(类似于cp,但不同于cpscp的一点是,它不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。如果Linux没有rsync命令,使用命令# yum install -y rsync安装。

1.rsync的命令模式

rsync [OPTION]… SRC DEST

rsync [OPTION]… SRC [USER@]HOST:DEST

rsync [OPTION]… [USER@]HOST:SRC DEST

rsync[OPTION]… [USER@]HOST::SRC DEST

rsync [OPTION]… SRC [USER@]HOST::DEST

在前面举的两个例子中,第一个例子为第一种格式,第二个例子为第二种格式。但不同的是,这里并没有加user@host,如果不加默认指的是root。第三种格式是从远程目录同步数据到本地。第四种和第五种格式使用了两个冒号,这种格式和其他格式的验证方式不同。

2.rsync 常用选项 

rsync命令各选项的含义如下

-a:这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-rlptgoD-a选项后面可以跟一个–no-OPTION,表示关闭-rlptgoD中的某一个,比如-ano-l等同于-rptgoD。  

-r:表示以递归模式处理子目录。它主要是针对目录来说的,如果单独传一个文件不需要加 -r选项,但是传输目录时必须加。  

-V:表示打印一些信息,比如文件列表、文件数量等。  

-l:表示保留软连接。  

-L:表示像对待常规文件一样处理软连接。如果是SRC中有软连接文件,则加上该选项后, 将会把软连接指向的目标文件复制到DST。  

-p:表示保持文件权限。  

-o:表示保持文件属主信息。  

-g:表示保持文件属组信息。  

-D:表示保持设备文件信息。  

-t:表示保持文件时间信息。  

--delete:表示删除DSTSRC没有的文件。  

--exclude=PATTERN:表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(*.txt)。  

--progress:表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。

-u:表示把DST中比SRC还新的文件排除掉,不会覆盖。

-z:加上该选项,将会在传输过程中压缩

(1)建立目录和文件

 Linux系统管理技巧(下)

(2)使用-a选项

 Linux系统管理技巧(下)

本来想把testl目录直接复制成test2目录,可结果rsync却新建了test2目录, 然后把testl放到test2当中。为了避免这样的情况发生,可以这样做:

 Linux系统管理技巧(下)

使用rsync备份目录时,要养成加斜杠的习惯。前面已经讲了-a选项等同于-rlptgoD,-a还可以和-no-OPTIN一并使用。下面再来看看-l选项的作用, 如下所示

 Linux系统管理技巧(下)

(3)使用-L选项

 Linux系统管理技巧(下)

上例加上-L选项就可以把SRC中软连接的目标文件复制到DST

(4)使用-u选项

首先查看一下test1/1test2/1的创建时间(肯定是一样的),然后使用touch修改一下test2/1的创建 时间(此时test2/1要比test1/1的创建时间晚一些)。如果不加-u选项,会把test2/1的创建时间变成和test1/1 一样

 Linux系统管理技巧(下)

修改test2/l的创建时间,然后不加-u同步

 Linux系统管理技巧(下)

加上-u选项

 Linux系统管理技巧(下)

(5)使用--delete选项

删除tcstU123.txt

 Linux系统管理技巧(下)

testl/目录同步到test2/S录下

 Linux系统管理技巧(下)

test2/目录并没有删除123.txt。下面加上一delete选项

 Linux系统管理技巧(下)

test2/目录下的123.txt也被删除了。 另外还有一种情况,就是如果在DST中增加文件了,而SRC当中没有这些文件,同步时加上-delete选项后同样会删除新增的文件

 Linux系统管理技巧(下)

(6)使用--exclude选项

 Linux系统管理技巧(下)

还可以与匹配字符*一起使用

 Linux系统管理技巧(下)

-progress选项,它主要是用来观察rsync同步过程状态的。

3.rsync应用实例

1)通过ssh的方式

在之前介绍的rsync5种命令格式中,第二种和第三种(一个冒号)就属于通过ssh的方式备份数据。这种方式其实就是让用户登录到远程机器,然后执行rsync的任务

 Linux系统管理技巧(下)

这种方式就是前面介绍的第二种方式了,是通过ssh复制的数据,需要输入192.168.188.129那台机 器root账户的密码。 当然也可以使用第三种方式复制

 

 rsync -avL 192.168.100.2:/tmp/test2/ ./test3/

 

2)通过后台服务的方式

这种方式可以理解为:在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。下面介绍一下如何配置一台 rsync服务器。 在128主机上建立并配置rsync的配置文件/etc/rsyncd.conf,如下所示(请把你的rsyncd.conf编辑成如下内容):

 

# vim /etc/rsyncd.conf

 port =873

       log file=/var/log/rsyncd.pid

       pid file =/var/run/rsyncd.pid

        address=192.168.188.128

 

        [test]

        path=/root/rsync

        use chroot=true

        max connections=4

        read only=no

        list=true

        uid=root

        gid=root

        auth users=test

        secrets file=/etc/rsyncd.passwd

        hosts allow=192.168.100.2

 

其中配置文件分为两部分:全局配置部分和模块配置部分。

全局部分就是几个参数,比如我的 rsyncd.conf中的portlog file> pid fileaddress都属于全局配置;而[test]以下部分就是模块配置部分了。一个配置文件中可以有多个模块,模块名可自定义,格式就像我的rsyncd.conf中的这样。其实模块中的一些参数(如use chrootmax connections, udigidauth userssecrets file以及 hosts allow都可以配置成全局参数。当然我并未给出所有的参数,你可以通过命令man rsyncd.conf 获得更多信息。

下面就简单解释一下这些参数的作用。  

 port:指定在哪个端口启动rsyncd服务,默认是873端口。  

log file:指定日志文件。  

pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。  address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动 rsyncd服务,如果不指定该参数,默认是在全部IP上启动。

[]:指定模块名,里面内容自定义。  

path:指定数据存放的路径。  

use chroot true false:表示在传输文件前,首先chrootpath参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要roots权限,并且不能备份指向外部的符号连接 所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,建议你设置成false。  

max connections:指定最大的连接数,默认是0,即没有限制。  

read only ture|false:如果为true,则不能上传到该模块指定的路径下。  

list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,设定为false则隐藏。  

uid/gid:指定传输文件时以哪个用户/组的身份传输。  

auth users:指定传输时要使用的用户名。  

secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意,该密码文件的权限一定要是600。  

hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格 隔开。 编辑secrets file并保存后要赋予600权限,如果权限不对,则不能完成同步,如下所示:

 

编辑secrets file并保存后要赋予600权限,如果权限不对,则不能完成同步,如下所示#cat /etc/rsyncd.passwd

test:test123

 #chmod 600 /etc/rsyncd.passwd

启动rsyncd服务,如下所示: #rsync --daemon --config=/etc/rsyncd.conf 启动后可以查看一下日志,并查看端口是否启动,如下所示:

#cat /var/log/rsync.log

2020/04/13 085413 [3070] rsyncd version 3.0.9 starting, listening on port 873 #netstat -Inp |grep rsync

tcp 0 0 192.168.188.128:873 0.0.0.0:* LISTEN 3070/rsync

如果想开机启动rsyncd服务,请把/usr/bin/rsync --daemon --confg=/etc/rsyncd.conf写入 /etc/rc.d/rc.local 文件。 为了不影响实验过程,还需要把两台机器的firewalld服务关闭,并设置为不开机启动,操作过程如下所示:

#systemctl stop firewalld ; systemctl disable firewalld 〃两台机器都执行

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallDl.service.

Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

#rsync -avL test@192.168.188.128:: test/testl/ /tmp/test5/ 129上执行

Password:

receiving incremental file list

created directory /tmp/test5

./

1

1.txt

2

2.txt

3

4

sent 171 bytes received 391 bytes 26.14 bytes/sec

total size is 0 speedup is 0.

刚刚提到了选项use chroot,默认为trueo首先在主机128/root/rsync/testl/目录下创建一个软连接文件,如下所示:

#ln -s /etc/passwd /root/rsync/test1/test.txt

#ls -1 /root/rsync/testl/test.txt

lrwxrwxrwx 1 root root 11 36 0747 /root/rsync/testl/test.txt -> /etc/passwd

然后再到主机129上执行同步,如下所示:

# rsync -avL test@192.168.188.128::test/test1/ /tmp/test6/

Password:

receiving incremental file list

symlink has no referent: "/test1/test.txt" (in test)

created directory /tmp/test6

./

1

1.txt

2

2.txt

3

4

sent 171 bytes received 450 bytes 177.43 bytes/sec

total size is 0 speedup is 0.00

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518)

[generator=3.0.9]

从上例可以看岀,如果设置use chroottrue,则同步软连接文件会有问题。下面把主机128 rsync配置文件修改一下,把true改为false,如下所示:

#sed -i ‘s/use chroot=true/use

chroot=false/‘ /etc/rsyncd.conf

#grep ‘use chroot’ /etc/rsyncd.conf use chroot=false

然后再到主机129上再次执行同步

#rsync -avL test@192.168.188.128::test/testl/ /tmp/test7/

Password:

receiving incremental file list created directory /tmp/test7

./

1

1.txt

2

2.txt

3

4

sent 190 bytes received 2812 bytes 461.85 bytes/sec

total size is 2361 speedup is 0.79

1指定密码文件

在客户端(即主机129)上编辑一个密码文件,在同步时指定密码文件,就可以省去输入密码的步骤

Linux系统管理技巧(下)Linux系统管理技巧(下)

 

2)在rsync服务端不指定用户

在服务端(即主机128)上修改配置文件rsyncd.conf,删除关于认证账户的配置项(auth usersecrets file这两行),如下所示:

#sed -i ‘s/auth users/#auth users/;s/secrets file/#secrets file/‘ /etc/rsyncd.conf

上例是在auth userssecrets file这两行的最前面加一个#,这表示将这两行作为注释,使其失去意义。在前面未曾讲过sed的这种用法,它是用分号把两个替换的子命令块替换了。 然后我们再到客户端主机129上进行测试,如下所示:

rsync -avL test@192.168.188.128::test/testl/ /tmp/test9/

八.Linux系统日志

日志记录了系统每天发生的各种各样的事情,比如监测系统状况、排查系统故障等。你可以通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志的主要功能是审计和监测,还可以实时地监测系统状态,监测和追踪侵入者等。  

  1. /var/log/messages

常査看的日志文件为/var/log/messages,它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。I/O错误、网络错误和其他系统错误都会记录到这个文件中。 其他信息,比如某个人的身份切换为root,以及用户自定义安装的软件(Apache )的日志也会在这里列出。 通常情况下,/var/log/messages是做故障诊断时首先要查看的文件。系统有一个日志轮询的机制,每星期切换一个日志,切换后的日志名字类似于messages-20200413,会存放在/var/log/目录下面,连同messages一共有5个这样的日志文件。这里的20200413就是日期,它表示日志切割的年月日。在CentOS 5里,这个后缀并不是日期,而是数字1234。这是通过logrotate工具的控制来实现的,它的配置文件是/etc/logrotate.conf(如果没有特殊需求,请不要修改这个配置文件)。

 Linux系统管理技巧(下)

 

 

 Linux系统管理技巧(下)

2.dmesg

除了关注/var/log/messages外,你还应该多关注一下dmesg这个命令,它可以显示系统的启动信息。 如果你的某个硬件有问题(比如网卡),用这个命令也是可以看到的

 Linux系统管理技巧(下)

3.安全日志

last命令用来查看登录Linux的历史信息

 Linux系统管理技巧(下)

从左至右依次为账户名称、登录终端、登录客户端IP、登录日期及时长。显示www.baidu.com的话,是因为之前设定过hosts文件。last命令输出的信息实际上是读取了二进 制日志文件/var/log/wtmp,只是这个文件不能直接使用catVimheadtail等工具査看。 另外/var/log/secure也是和登录信息有关的日志文件。该日志文件记录验证和授权等方面的信息, 比如ssh登录系统成功或者失败时,相关的信息都会记录在这个日志里。

九.Xargsexec

xargsexec可以实现相同的功能,exec主要是和find一起配合使用,而xargsexec的用处更多。  

  1. xargs应用

 Linux系统管理技巧(下)

上例表示把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把原本两步或者多步才能完成的任务仅用一步完成。xargs常常和find命令一起使用,比如查找当前目录创建时间大于 10天的文件,然后再删除,如下所示: # find . -mtime +10 |xargs rm  

xargs后面的rm也可以加选项,当为目录时,就需要加-r选项了。xargs 还有一个神奇的功能,比如我现在要查找当前目录下所有后缀为.txt的文件,然后把这些文件变 成,txt_bako正常情况下必须写脚本才能实现,但是使用xargs就能一步完成,如下所示:

 Linux系统管理技巧(下)

xargs -nl -i{}类似于for循环,-M表示逐个对象进行处理,-i{}表示用。取代前面的对象,mv {} {}_bak相当于mv l.txt l.txt_bak

2.Exec应用

使用find命令时,经常使用-exec选项,它可以达到和xargs同样的效果。比如查找当前目录创建时间大于10天的文件并删除,如下所示: #find . -mtime +10 -exec rm -rf {} \; 这个命令中也是用{}替代前面find出来的文件。后面的\作为;的转义符,否则shell会把分号作为该行命令的结尾。 -exec同样可以实现上面批量更改文件名的需求

 Linux系统管理技巧(下)

十.Screen工具介绍

有时我们要执行一个命令或者脚本,需要几小时甚至几天,在这个过程中,如果中途断网或出现其他意外情况怎么办?当然,你可以把命令或者脚本放到后台运行,不过也不保险。下面就介绍两种方法来避免这类状况发生。

1.使用 nohup

首先写一个sleep.sh脚本,然后把它放到后台执行,如下所示:

# cat /usr/local/sbin/sleep.sh  

#! /bin/bash  

sleep 1000

 nohup sh /usr/local/sbin/sleep.sh &

 [1] 4271

上例中,直接在sleep.sh后面加&虽然可以在后台运行,但是当退出该终端时,这个脚本很有可能也会退出。所以在前面加上nohup就没有问题了,执行后会在当前目录下生成一个nohup的文件,它的 作用就是防止进程意外中断,并且会把输出信息记录到nohup文件中。

2.screen 工具的使用

简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口一样。下面介绍screen的一个简单应用。
首先打开一个会话,直接输入screen命令,然后回车进入screen会话窗口。如果你的系统中没有 screen命令,请用命令# yum install -y screen安装。它的使用也很简单,直接输入如下命令,就可以进入一个虚拟终端:
#screen
接着查看已经打开的screen会话,如下所示:

 Linux系统管理技巧(下)

 

==然后按Ctrl+A键,再按d退出该screen会话(只是退出,并没有结束,结束screen会话要按Ctrl+D 键或者输入exit )。退出后如果还想再次登录某个screen会话,可以使用命令sreen -r [screen编号], 这个编号就是上例中那个4317。==如果当前只打开了一个screen会话,后面的编号是可以省略的。当你有某个需要长时间运行的命令,或者脚本时,就打开一个screen会话,然后运行该任务,按Ctrl+A键, 再按d退出会话。这样不影响终端窗口上的任何操作

 

 

Linux系统管理技巧(下)

上一篇:Linux下删除日志文件


下一篇:vue项目HmacSHA1加密