CentOS/RHEL 7 服务管理/时间管理/分区管理/网络管理/日志管理

 2017年8月21日 15:12   Nick王   运维    1 评论   481 浏览 

功能与限制

  • CPU可以支持到160个逻辑CPU,在6.x版本中最大支持128个;这里是指是指核心数,不是线程数,也不是物理CPU个数。

  • 内存最大支持到3TB,6.x版本中最大是2TB;这里的意思是内核只支持3TB的内存,x86_64支持的要更多

  • XFS为默认的文件系统,最大支持的文件系统是16TB,也就是单个文件最大16TB,性能上要比EXT4要好很多,非常适合处理大文件,不过更加消耗CPU资源,比EXT4的多一倍。来自官方文档描述。

  • EXT4最大为50TB,在6.x中最大为16TB。

  • 在6.x版本的引导程序是GRUB,从7.x开始引导程序变为了GRUB2,在单块硬盘超过2TB的时候,是不能使用MBR模式的,要使用GPT模式;在6.x版本中如果单块硬盘超过2TB,那么装系统是装不过去的。在6.x的版本中,在装系统的过程中,如果硬盘超过2TB,可以在分区的时候按Ctrl+Alt+F3就会进入字符界面,在字符界面可以使用parted来分区

  • 支持主引导记录MBR和GUID分区表G

  • 采用的kernel版本为3.10

  • 动态内核补丁,也就是不需要重新编译内核了,只需要给内核打补丁就可以了

系统安装


此次安装系统采用Minimal Install+Development Tools,硬盘大小为3TB,可以自动识别。

root密码破解

6.x版本root密码破解方法

  1. 在开机启动界面(GRUB引导界面)

  2. 按任意键结束倒数的读秒

  3. 按"a"修改kernel参数

  4. 在最后面输入 空格 1 ,然后敲回车

  5. 等待进入单用户模式之后,输入命令echo "newpasswd"|passwd root --stdin

  6. 重新启动系统

7.x版本root密码破解方法

  1. 在开机启动界面(GRUB引导界面)

  2. 按任意键结束倒数的读秒

  3. 移动光标到需要的启动项,一般是 CentOS Linux 7 (core),with Linux 3.10.0-229.e17.x86_64

  4. 按"e"编辑选中的项目

  5. 找到内核的命令行,开头为linux16这一行就是;在这行的结尾处追加 rd.break

  6. 按Ctrl+x启动系统

  7. 发现提示符为 switch_root:/#

  8. 此时需要重新挂载系统的根分区,输入命令mount -o remount,rw /sysroot

  9. 切换到根目录,也就是进入禁锢模式,输入命令chroot /sysroot/

  10. 此时发现命令提示符为 sh-4.2#

  11. 输入命令修改密码echo "newpasswd"|passwd root --stdin

  12. 输入命令touch /.autorelabel 这一命令的意思是让文件系统在启动的时候重新打标签,打完标签之后,该文件就会被删除;此步非常重要 

  13. 输入exit退出禁锢模式,输入exit退出调试的shell

note:
为什么不是单用户模式?因为在版本7.x中,单用户也是会让用户输入密码。
rd.break是什么意思?中断开机流程,不能让initramfs结束后加载系统,要中断。类似版本6.x中在启动的时候,在内核参数后面输入init=/bin/bash
为什么要重新打标签?因为在这种环境下,SELinux没有启动,对所有文件的改动(修改密码是修改/etc/shadow文件)可能会造成context的错误

命令补全功能


在7.x版本中不仅可以补全命令,路径,还可以补全选项以及参数。

# yum install bash-completion -y
# source /etc/profile
# yum in[TAB][TAB]
info     install

note: 在yum安装软件的确认提示符为:Is this ok [y/d/N]: ,其中d的意思为download

一些必要软件包的安装

# yum install net-tools vim telnet lrzsz tree psmisc sysstat lsof strace mlocate -y
  • net-tools 包含命令:netstat / arp / ifconfig / route / iptunnel

  • lrzsz 包含命令: rz / sz

  • psmisc 包含命令: killall / pstree

  • sysstat 包含命令: iostat / mpstat / sar

GRUB2相关

首先打开6.x版本默认的配置文件

# cat /boot/grub2/grub.cfg 
#
# DO NOT EDIT THIS FILE   不要编辑这个文件
#
# It is automatically generated by grub2-mkconfig using templates  这是通过命令自动生成的
# from /etc/grub.d and settings from /etc/default/grub   模板是从/etc/grub.d下面得到的
#

### BEGIN /etc/grub.d/00_header ###

也就是说在7.x版本中的GRUB2的配置文件是不能用来编辑的,而是用命令生成的。

# yum install grub2-tools.x86_64 -y
# grub2-mkconfig > /boot/grub2/grub.cfg ##默认的输出是终端屏幕,可以在确认无误之后再重定向到配置文件
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-e8a7b8d3570e4c1bb71fcb203991989e
Found initrd image: /boot/initramfs-0-rescue-e8a7b8d3570e4c1bb71fcb203991989e.img
done


# grub2-install /dev/sda ##重写GRUB,grub修复,谨慎操作

# cat /etc/default/grub   ##模板配置文件
GRUB_TIMEOUT=5           ##倒数读秒的时间
GRUB_DEFAULT=saved       ##默认引导的位置,saved表示从上到下,如果想指定第三个启动,那么可以修改为3
GRUB_DISABLE_SUBMENU=true   
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"   ##内核参数
GRUB_DISABLE_RECOVERY="true"

# grub2-mkpasswd-pbkdf2  ##GRUB2加密密码生成
Enter password: 
Reenter password: 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.C8DCF83D3BFB56C84E9C0968B50248D688B5598887B9CFDAC34DF5F2A5008C380C0C337F6AF68FA6B82AB306F74D5C69A908971B3524001ECD3F85B7B1EEDC52.9862C9253E99B175B554222CBA6681F295819900B00E8C0886B168CB1DAB4C3BA7497A2989B747101BD73DAFC585369B0729B81A1C931B8215D451653D297FEB

跟GRUB启动菜单条目相关的文件以及目录

# ll /boot/*3.10*
-rw-r--r--. 1 root root   123838 Mar  6  2015 /boot/config-3.10.0-229.el7.x86_64
-rw-r--r--. 1 root root 16290162 Sep 18 01:11 /boot/initramfs-3.10.0-229.el7.x86_64.img
-rw-r--r--. 1 root root   240039 Mar  6  2015 /boot/symvers-3.10.0-229.el7.x86_64.gz
-rw-------. 1 root root  2881257 Mar  6  2015 /boot/System.map-3.10.0-229.el7.x86_64
-rwxr-xr-x. 1 root root  5029136 Mar  6  2015 /boot/vmlinuz-3.10.0-229.el7.x86_64
# ll /lib/modules/
total 4
drwxr-xr-x. 7 root root 4096 Sep 18 01:10 3.10.0-229.el7.x86_64

开机启动流程

6.x版本启动流程

  1. 加载 BIOS 的硬件信息并进行自检,并依据配置取得第一个可启动的设备; 

  2. 读取并运行第一个启动装置内 MBR 的 boot Loader; 

  3. 依据 boot loader 的配置加载 Kernel ,Kernel 会开始检测硬件并加载驱动程序; 

  4. 在硬件驱动成功后,Kernel 会主动加载 init 程序,而 init 会取得 run-level 信息; 

  5. init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行的环境 (如网络、时区等); 

  6. init 运行 run-level 的各个服务之启动 (script 方式); 

  7. init 运行 /etc/rc.d/rc.local 文件; 

  8. init 运行终端机模拟程序 mingetty 来启动 login 程序,最后就等待使用者登陆啦; 

note:
boot loader 可以加载 kernel 与 initrd ,然后在内存中让 initrd 解压缩成为根目录, kernel 就能够借此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的真正的根目录文件系统, 就能够开始后续的正常启动流程。
在6.x版本中第一个启动的进程是init进程,PID为1,与之相关的配置文件是/etc/inittab(定义了默认的启动级别) 

7.x版本的启动流程

  1. 加载BIOS,硬件自检

  2. 选择启动设备,读取启动设备的第一个扇区,读取引导程序(根据BIOS设置的第一个启动设备,4.x版本的引导程序为lilo和grub,5.x和6.x为grub,7.x为grub2)

  3. 引导程序读取配置文件/boot/grub2/grub.cfg /etc/default/grub /etc/grub.d/

  4. 加载内核,并且以只读的方式加载根分区,加载initramdisk(6.x中的initrd)

  5. 加载systemd进程(6.x为init进程)

  6. 读取/etc/fstab 此时才会挂载真正的文件系统

  7. 读取所选择的target,比如multi-user.target(等同于6.x版本的3级别也就是文本级别启动)或者graphical.target(等同于6.x中的5级别或者图形界面启动)

  8. 启动该target(可理解为启动级别)相关的服务

  9. 加载/etc/rc.d/rc.local开机脚本(注意,该脚本在7.x中没有执行权限,要自行添加执行权限)

  10. 登陆系统

note:在7.x版本中最大的区别就是加载的第一个进程是systemd进程,并且没有了启动级别的概念,新增加的概念是target模式启动。systemd的PID为1,所有的进程都是systemd进程的子进程。

# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─3*[{NetworkManager}]
        ├─agetty
        ├─auditd───{auditd}
        ├─bluetoothd
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]

7.x版本中的运行级别


在7.x中没有了/etc/inittab,也就是没有了所谓的运行级别runlevel(级别0,1,2,3,4,5,6),而是采用了target的方式。

# cat /etc/inittab 
# inittab is no longer used when using systemd.   inittab已经不再被系统使用了
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.  编辑这个配置文件已经不会对系统造成任何影响
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target 
#Ctrl+Alt+Del 是被/usr/lib/systemd/system.ctrl-alt-del.target控制的
# systemd uses 'targets' instead of runlevels. By default, there are two main targets: 
#系统将会采用target而不是runlevels,默认情况下有两个主要的target
# multi-user.target: analogous to runlevel 3   multi-user.targe相当于3级别
# graphical.target: analogous to runlevel 5    graphical.target相当于5级别
#
# To view current default target, run:    如果想要查看当前默认的target可以使用如下的命令
# systemctl get-default
#
# To set a default target, run:      如果设置默认的target可以使用如下命令
# systemctl set-default TARGET.target
#

一些操作

# systemctl get-default ##获得当前默认的target
multi-user.target


# systemctl set-default graphical.target  ##设置默认的target,从结果上看,其实就是做了一个软连接
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'


# systemctl isolate multi-user.target  ##临时切换到某个target,类似6.x中的init 3或者init 5


# runlevel    6.x版本中查看当前的运行级别
N 3

从上面的结果可以看出,调整target其实是做了一个软链接,那么这些target到底做了什么?

# systemctl disable sshd.service  ##将SSHD服务开机禁止启动
rm '/etc/systemd/system/multi-user.target.wants/sshd.service'

# systemctl enable sshd.service  ##将SSHD服务开机允许启动,此时如果是graphical.target级别,也会软连接到multi-user.target
ln -s '/usr/lib/systemd/system/sshd.service' '/etc/systemd/system/multi-user.target.wants/sshd.service'

可以看到某个服务开机启动与否,其实就是在指定的目录做了软链接,这跟6.x中的做法是一样的

# ll /etc/systemd/system/multi-user.target.wants/
total 0
lrwxrwxrwx. 1 root root 38 Sep 18 01:07 auditd.service -> /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 39 Sep 18 02:25 chronyd.service -> /usr/lib/systemd/system/chronyd.service
lrwxrwxrwx. 1 root root 37 Sep 18 01:07 crond.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx. 1 root root 42 Sep 18 01:07 irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
lrwxrwxrwx. 1 root root 41 Sep 18 02:24 mdmonitor.service -> /usr/lib/systemd/system/mdmonitor.service
lrwxrwxrwx. 1 root root 46 Sep 18 01:07 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root 39 Sep 18 01:07 postfix.service -> /usr/lib/systemd/system/postfix.service
lrwxrwxrwx. 1 root root 40 Sep 18 01:07 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
lrwxrwxrwx. 1 root root 39 Sep 18 01:07 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 36 Sep 18 03:57 sshd.service -> /usr/lib/systemd/system/sshd.service
lrwxrwxrwx. 1 root root 39 Sep 18 02:08 sysstat.service -> /usr/lib/systemd/system/sysstat.service
lrwxrwxrwx. 1 root root 37 Sep 18 01:07 tuned.service -> /usr/lib/systemd/system/tuned.service
# ll /etc/systemd/system/graphical.target.wants/
total 0
lrwxrwxrwx. 1 root root 47 Sep 18 02:24 accounts-daemon.service -> /usr/lib/systemd/system/accounts-daemon.service
lrwxrwxrwx. 1 root root 44 Sep 18 02:25 rtkit-daemon.service -> /usr/lib/systemd/system/rtkit-daemon.service


从结果可以看出graphical.target只会启动两个服务,而multi-user.target会启动很多服务,是这样的吗?

# systemctl list-dependencies graphical.target --type target ##查看graphical.target依赖哪些target
graphical.target
├─accounts-daemon.service
├─gdm.service
├─network.service
├─rhnsd.service
├─rtkit-daemon.service
├─systemd-update-utmp-runlevel.service
└─multi-user.target
  ├─auditd.service
  ├─brandbot.path
  ├─chronyd.service
  ├─crond.service
  ├─dbus.service
  ├─irqbalance.service
  ├─mdmonitor.service
……省略……

结论:
在7.x版本中所有的服务都是平行启动,加快开机速度,没有任何的先后顺序(在6.x中所有的服务都有有先后顺序的),而是依赖关系;
graphical.targe依赖multi-user.target,也就是说启动graphical.target会先把multi-user.target启动起来;
graphical.target其实和multi-user.target是一样的,只是多起了那么两三个特殊的服务而已(在6.x中3级别和5级别是完全不同的,因为他们各自都有自己应该启动的服务,软链接会在rc3.d和rc5.d,还有命令chkconfig --level)。

  • multi-user.target 7.x版本的运行级别,支持多用户,字符界面登陆,对应6.x版本的3级别

  • graphical.target 7.x版本的运行级别,支持多用户,字符界面和图形界面登陆,对应6.x版本的5级别

  • rescue.target 7.x版本的运行级别,基本系统的初始化,原来的单用户模式,但是还是会要求用户登陆,与3级别的区别是,该级别不会启动服务

  • emergency.target 7.x版本的运行级别,救援模式,比如当fstab坏掉的时候,就会进入这个模式,这个模式的特点是根是只读的,其他文件系统没有挂载,因为这个模式中fstab没有读到,所以根是只读的,因此要remount根以读写方式挂载

  • rd.break 7.x版本中的临时中断运行,用于破解root密码;该方式连文件系统都没有加载,比单用户更加简单,相当于在内核参数后面跟上init=/bin/bash,意思是在进去之前跳一个shell出来

小结:
graphical.target比multi-user.target就多启动了图形界面。
multi-user.target和rescue.target的区别是:multi-user.target加载服务而rescue.target不加载服务。
rescue.target与emergency.target的区别是:rescue.target加载了文件系统而emergency.target连文件系统都没有加载。
rescue.target用来修复服务
emergency.target用于修复文件系统,主要是/etc/fstab(这跟6.x是一样的)。该模式跳过文件系统加载,只会挂载根,如果根都坏了,只能关盘修复。 


开机进入指定的target


在GRUB的启动界面,按e编辑,在linux16开头的行的结尾,追加systemd.unit=multi-user.target,按Ctrl+x进入

服务管理

Systemd是什么


RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd。它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理。systemd兼容SysV和Linux标准组的启动脚本。


Systemd是一个Linux操作系统下的系统和服务管理器。它被设计成向后兼容SysV启动脚本,并提供了大量的特性,如开机时平行启动系统服务,按需启动守护进程,支持系统状态快照,或者基于依赖的服务控制逻辑。

systemd的特性有:

  • 支持并行化任务

  • 同时采用socket式与D-Bus总线式激活服务;

  • 按需启动守护进程(daemon);

  • 利用 Linux 的 cgroups 监视进程;

  • 支持快照和系统恢复;

  • 维护挂载点和自动挂载点;

  • 各服务间基于依赖关系进行精密控制。


这种方式比6.x的要好很多,比如在6.x中有启动顺序,比如NFS启动了,但是网卡还没启动,就会卡住,就会出现问题。但是在7.x中是平行化启动的。会把某个服务,依赖的服务先启动起来。比如在7.x中启动ISCSI的时候,会自动把依赖的Network先启动起来。

服务单元Unit


一个单元配置文件可以描述如下内容之一:系统服务(.service)、挂载点(.mount)、sockets(.sockets) 、系统设备、交换分区/文件、启动目标(target)、文件系统路径、由 systemd 管理的计时器。详情参阅 man 5 systemd.unit.


使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(例如 sshd.service)。但是有些单元可以在systemctl中使用简写方式。

  • 如果无扩展名,systemctl 默认把扩展名当作 .service。例如 netcfg 和 netcfg.service 是等价的。

  • 挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount。

  • 设备会自动转化为相应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device。

单元操作

Task
Command解释
view detailed infomation about a unit statesystemctl status Unit
stop a service on a running systemsystemctl stop Unit
Start a service on a running systemsystemctl start Unit
Restart a service on a running systemsystemctl restart Unit
Reload configuration file of a running servicesystemctl reload Unit

Completely disable a service from being started,

both manually and at boot

systemctl mask Unit

永远的禁止某个服务,不论是手动还是别的服务依赖都不会启动

,一定不要启动

Make a masked service availablesystemctl unmask Unit和上面的动作相反,从黑名单里面拉出来
Configure a service to start at boot timesystemctl enable Unit
Disable a service from starting at boot timesystemctl disable Unit
List units which are required and wanted by the specified unitsystemctl list-dependencies Unit


查看激活的所有单元注意:在7.x中的服务被称为了Unit也就是服务单元,这里的Unit不仅仅可以是具体的服务,还可以是target;target是一个综合的东西,可以包含很多的服务。

# systemctl 
UNIT                                                   LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount                      loaded active waiting   Arbitrary Executable File Formats File System Automoun
sys-devices-pci00...rget2:0:0-2:0:0:0-block-sr0.device loaded active plugged   VMware_Virtual_IDE_CDROM_Drive
sys-devices-pci00...:0:0-0:0:0:0-block-sda-sda1.device loaded active plugged   VMware_Virtual_S
sys-devices-pci00...:0:0-0:0:0:0-block-sda-sda2.device loaded active plugged   VMware_Virtual_S
……省略……
# systemctl list-units
UNIT                                                   LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount                      loaded active waiting   Arbitrary Executable File Formats File System Automoun
sys-devices-pci00...rget2:0:0-2:0:0:0-block-sr0.device loaded active plugged   VMware_Virtual_IDE_CDROM_Drive
sys-devices-pci00...:0:0-0:0:0:0-block-sda-sda1.device loaded active plugged   VMware_Virtual_S
sys-devices-pci00...:0:0-0:0:0:0-block-sda-sda2.device loaded active plugged   VMware_Virtual_S
……省略……

查看类型为service的所有激活的单元

# systemctl list-units --type service
UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
auditd.service                     loaded active running Security Auditing Service
bluetooth.service                  loaded active running Bluetooth service
chronyd.service                    loaded active running NTP client/server
crond.service                      loaded active running Command Scheduler
dbus.service                       loaded active running D-Bus System Message Bus

# systemctl list-units --type service --all
UNIT                                  LOAD   ACTIVE   SUB     DESCRIPTION
accounts-daemon.service               loaded inactive dead    Accounts Service
auditd.service                        loaded active   running Security Auditing Service
bluetooth.service                     loaded active   running Bluetooth service
brandbot.service                      loaded inactive dead    Flexible Branding Service
……省略……

查看运行失败的单元,类型为service

# systemctl --failed --type service 
UNIT          LOAD   ACTIVE SUB    DESCRIPTION
rhnsd.service loaded failed failed LSB: Starts the Spacewalk Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

查看系统中所有的已经安装的单元

# systemctl list-unit-files 
UNIT FILE                                   STATE   
proc-sys-fs-binfmt_misc.automount           static  
dev-hugepages.mount                         static  
dev-mqueue.mount                            static  
……省略……
# systemctl list-unit-files --type service
UNIT FILE                                   STATE   
accounts-daemon.service                     enabled 
anaconda-direct.service                     static  
anaconda-nm-config.service                  static  
anaconda-noshell.service                    static  
anaconda-shell@.service                     static  
anaconda-sshd.service                       static  
……省略……

等同于命令chkconfig --list

开机启动和关闭某个服务,chkconfig httpd on|off

# systemctl disable httpd.service 
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

# systemctl enable httpd.service 
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

添加删除某个服务,chkconfig --add|del httpd

# pwd
/usr/lib/systemd/system
# mv httpd.service httpd.service.1
# systemctl daemon-reload
 
# systemctl list-unit-files --type service |grep httpd

# mv httpd.service.1 httpd.service
# systemctl list-unit-files --type service |grep httpd
httpd.service                               enabled

启动重启关闭某个服务,service httpd start|stop|restart|reload|status

# systemctl start httpd.service 
# systemctl stop httpd.service 
# systemctl restart httpd.service 
# systemctl reload httpd.service 
# systemctl status httpd.service 
httpd.service - The Apache HTTP Server   服务的名称
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled) 加载服务,以及具体位置;enable代表开机自启动
   Active: active (running) since Fri 2015-09-18 05:19:23 EDT; 14s ago   现在的状态是active,当前是运行状态running
  Process: 4502 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)         PID
  Process: 4537 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 4528 (httpd)   
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"   状态
   CGroup: /system.slice/httpd.service
           ├─4528 /usr/sbin/httpd -DFOREGROUND
           ├─4539 /usr/sbin/httpd -DFOREGROUND
           ├─4540 /usr/sbin/httpd -DFOREGROUND
           ├─4541 /usr/sbin/httpd -DFOREGROUND
           ├─4542 /usr/sbin/httpd -DFOREGROUND
           └─4543 /usr/sbin/httpd -DFOREGROUND

Sep 18 05:19:23 localhost systemd[1]: Starting The Apache HTTP Server...    以下都是服务日志
Sep 18 05:19:23 localhost httpd[4528]: AH00558: httpd: Could not reliably determine the server's fully qualified domain nam...message
Sep 18 05:19:23 localhost systemd[1]: Started The Apache HTTP Server.
Sep 18 05:19:30 localhost systemd[1]: Reloading The Apache HTTP Server.
Sep 18 05:19:30 localhost httpd[4537]: AH00558: httpd: Could not reliably determine the server's fully qualified domain nam...message
Sep 18 05:19:30 localhost systemd[1]: Reloaded The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

查看服务的依赖关系

# systemctl list-dependencies httpd.service --type service 
httpd.service
├─system.slice
└─basic.target
  ├─firewalld.service
  ├─microcode.service
  ├─rhel-autorelabel-mark.service
  ├─rhel-autorelabel.service
……省略……

查看某个服务是否启动或者是否开机启动

# systemctl is-active httpd.service 
active
# systemctl is-enabled httpd.service 
enabled
# systemctl is-failed httpd.service 
active

向后兼容的命令

# service httpd restart
Redirecting to /bin/systemctl restart  httpd.service
# chkconfig httpd on
Note: Forwarding request to 'systemctl enable httpd.service'.

彻底干掉某个服务,或者说把某个服务加入黑名单,有依赖关系也不启动

# systemctl mask httpd.service 
ln -s '/dev/null' '/etc/systemd/system/httpd.service'
# systemctl list-unit-files --type service |grep http
httpd.service                               masked   ##masked为服务的状态

target的相关操作(target包含了很多服务)

# systemctl get-default 
multi-user.target
# systemctl set-default graphical.target 
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'
# systemctl isolate multi-user.target

服务的状态

  • loaded ——Unit configuration file has been processed 服务单元配置文件已经被处理,也就是正在被加载

  • active(running) ——Running with one or more continuing processes 服务正在运行,并且有一个或者多个进程

  • active(exited) ——Successfully completed a one-time configuration 只运行一次就成功完成了,

  • active(wating) ——Running but wait an event 虽然已经运行了,但是正在等待事件,也就是运行了,但是在休眠状态 ;类型与进程状态中的S

  • inactive ——Not running 没有运行

  • enabled ——Will be started at boot time 说明在开机的时候会自动启动

  • disabled ——Will not be started at boot time 说明在开机的时候不会自动启动

  • static ——Can not be enabled,but may be started by an enabled unit automatically 这个服务不能被enable,但是可能被一个启用的服务单元自动启动;也就是被相关的服务单元由于依赖关系而被启动,但是不会自己启动

电源管理操作

# systemctl reboot    重启
# systemctl poweroff  关机
# systemctl suspend   待机

服务启动脚本

# ll /etc/systemd/system/multi-user.target.wants/httpd.service 
lrwxrwxrwx. 1 root root 37 Sep 18 05:17 /etc/systemd/system/multi-user.target.wants/httpd.service -> /usr/lib/systemd/system/httpd.service
# cat /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server   描述信息
After=network.target remote-fs.target nss-lookup.target  依赖关系,说明要在某些服务启动之后启动。

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启动方式介绍:

编写自定义的service文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。具体的参数说明请参阅 man systemd.service 。

  • Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。

  • Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定

  • PIDFile=,以便systemd能够跟踪服务的主进程。

  • Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。

  • Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。

  • Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。

网络管理

网卡的命名规则

ifconfig命令查看(ifconfig命令在net-tools)

# ifconfig 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.72.134  netmask 255.255.255.0  broadcast 192.168.72.255
        inet6 fe80::20c:29ff:fe65:f9e0  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:65:f9:e0  txqueuelen 1000  (Ethernet)
        RX packets 7832  bytes 3548887 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5149  bytes 657675 (642.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 134  bytes 13314 (13.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 134  bytes 13314 (13.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# dmesg |grep eth0
[    2.053178] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:65:f9:e0
[    2.053185] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
[    2.057264] systemd-udevd[325]: renamed network interface eth0 to eno16777736

可以看出现在的网卡名字不是eth0,eth1这样的了。在dmesg的结果中可以看到eth0被systemd-udevd重命名为了eno16777736

配置文件和ifconfig看到的结果是一样的
# ll /etc/sysconfig/network-scripts/ifcfg-eno16777736 
-rw-r--r--. 1 root root 320 Sep 18 01:10 /etc/sysconfig/network-scripts/ifcfg-eno16777736

在传统情况下,网络接口在linux下的命名规则为eth0,eth1这样的。这样做有一个问题,当系统中有添加删除设备的时候,这些名字有可能会改变。所以才要用全新的机制。

默认情况下7.x给网卡分配了一个固定的名字,这个名字取决于你的固件,设备的结构,设备的类型。 接口的名字有以下的几个特征。

  1. 如果是以太网接口是以en开头,如果是WLAN的接口是以wl开头,如果是WWAN的接口是以ww开头

  2. 下一个段,表示板卡的类型,如果是o代表的是主板自带的,s代表热插拔的(USB的网口这种),p代表PCI接口的网卡,当然也可以人为的去改动,不使用默认的。

  3. 最后一段数字代表ID,或者port

  4. 如果这个固定的名字检测不到 或者匹配不到,将使用传统的eth0 eth1这样的命名

NetworkManager网络管理命令nmcli

# which nmcli 
/usr/bin/nmcli
# rpm -qf /usr/bin/nmcli 
NetworkManager-1.0.0-16.git20150121.b4ea599c.el7_1.x86_64

显示所有的连接

# nmcli connection show
NAME         UUID                                  TYPE            DEVICE      
eno16777736  ef40ebd4-c476-4cb9-8d26-2259ca6688c0  802-3-ethernet  eno16777736

显示某个连接的所有配置

# nmcli connection show "eno16777736" 
connection.id:                          eno16777736
connection.uuid:                        ef40ebd4-c476-4cb9-8d26-2259ca6688c0
connection.interface-name:              eno16777736
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.timestamp:                   1442598497

显示所有设备的状态

# nmcli device status 
DEVICE       TYPE      STATE      CONNECTION  
eno16777736  ethernet  connected  eno16777736 
lo           loopback  unmanaged  --

显示某个设备的详细设置

# nmcli device show eno16777736 
GENERAL.DEVICE:                         eno16777736
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:65:F9:E0
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     eno16777736
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.72.134/24
IP4.GATEWAY:                            192.168.72.2
IP4.DNS[1]:                             192.168.72.2
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe65:f9e0/64
IP6.GATEWAY:

查看激活的所有连接

# nmcli connection show --active 
NAME         UUID                                  TYPE            DEVICE      
eno16777736  ef40ebd4-c476-4cb9-8d26-2259ca6688c0  802-3-ethernet  eno16777736

删除某个设备的连接

# nmcli connection delete "Wired connection 2"
# nmcli connection show 
NAME                UUID                                  TYPE            DEVICE      
docker0             41b2d59c-645c-4042-a761-1943fe716062  bridge          docker0     
Wired connection 1  65286123-56b1-4346-af1f-6cb5a7edbaf0  802-3-ethernet  eno16777736 
# ll /etc/sysconfig/network-scripts/ifcfg-*
-rw-r--r--. 1 root root 254 Jan 15  2015 /etc/sysconfig/network-scripts/ifcfg-lo
发现删除之后,连配置文件也会被删除

给某个设备指定连接

# dmesg |grep eth
[    2.870691] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:65:f9:e0
[    2.871593] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
[    3.353146] e1000 0000:02:05.0 eth1: (PCI:66MHz:32-bit) 00:0c:29:65:f9:ea
[    3.353891] e1000 0000:02:05.0 eth1: Intel(R) PRO/1000 Network Connection
[    3.362916] systemd-udevd[327]: renamed network interface eth1 to eno33554984
[    3.366925] systemd-udevd[326]: renamed network interface eth0 to eno16777736
通过dmesg查到网卡的名称为eno33554984


# nmcli connection add con-name eth1 type ethernet ifname eno33554984 ip4 192.168.72.200/24 gw4 192.168.72.2
Connection 'eth1' (383f1cfe-d154-421c-9f63-5ace5d611448) successfully added.


# nmcli connection show 
NAME                UUID                                  TYPE            DEVICE      
docker0             41b2d59c-645c-4042-a761-1943fe716062  bridge          docker0     
Wired connection 1  65286123-56b1-4346-af1f-6cb5a7edbaf0  802-3-ethernet  eno16777736 
eth1                383f1cfe-d154-421c-9f63-5ace5d611448  802-3-ethernet  eno33554984

# ll /etc/sysconfig/network-scripts/ifcfg-eth1 
-rw-r--r--. 1 root root 307 Sep 21 00:56 /etc/sysconfig/network-scripts/ifcfg-eth1
可以发现其实就是给某个设备增加了配置文件


关闭开启某个连接

# nmcli connection down eth1 
Connection 'eth1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

# nmcli connection show --active 
NAME                UUID                                  TYPE            DEVICE      
docker0             41b2d59c-645c-4042-a761-1943fe716062  bridge          docker0     
Wired connection 1  65286123-56b1-4346-af1f-6cb5a7edbaf0  802-3-ethernet  eno16777736 

# nmcli connection up eth1 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)

# nmcli connection show --active 
NAME                UUID                                  TYPE            DEVICE      
docker0             41b2d59c-645c-4042-a761-1943fe716062  bridge          docker0     
Wired connection 1  65286123-56b1-4346-af1f-6cb5a7edbaf0  802-3-ethernet  eno16777736 
eth1                383f1cfe-d154-421c-9f63-5ace5d611448  802-3-ethernet  eno33554984

修改某个连接的指定某个值

# nmcli connection show eth1 |grep ipv4.dns
ipv4.dns:                               
ipv4.dns-search:                        

# nmcli connection modify eth1 ipv4.dns 192.168.72.2

# nmcli connection show eth1 |grep ipv4.dns
ipv4.dns:                               192.168.72.2
ipv4.dns-search:

DNS相关的修改

# cat /etc/resolv.conf 
# Generated by NetworkManager


# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
文件提示修改网卡配置文件
如果网卡配置文件有的话,那么在这个文件是可以看到的
# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.72.2


修改网卡名称为eth0,eth1

首先通过nmcli add 将网卡设置成如下

# nmcli connection show 
NAME     UUID                                  TYPE            DEVICE      
docker0  0199f577-938d-423f-a918-d16dd49aed5f  bridge          docker0     
eth1     c8a887c2-8357-4eec-a18f-c0d5409e6028  802-3-ethernet  eno33554984 
eth0     d1b5a700-26c0-47ef-9959-9a7df9239d4a  802-3-ethernet  eno16777736 
同时配置文件为
# ll /etc/sysconfig/network-scripts/ifcfg-eth*
-rw-r--r--. 1 root root 307 Sep 21 01:40 /etc/sysconfig/network-scripts/ifcfg-eth0
-rw-r--r--. 1 root root 325 Sep 21 01:09 /etc/sysconfig/network-scripts/ifcfg-eth1
注:也可以直接修改配置文件

 修改开机内核参数

# vim /etc/default/grub 

# grep -i "cmdline_linux" /etc/default/grub 
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0 biosdevname=0"

# grub2-mkconfig -o /boot/grub2/grub.cfg 

# nmcli connection show
NAME     UUID                                  TYPE            DEVICE  
docker0  d8adf195-89a1-41cb-bf2a-cb019f43b599  bridge          docker0 
eth1     9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04  802-3-ethernet  eth1    
eth0     5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  802-3-ethernet  eth0

注意:首先要注意一定要把SELinux关掉;第二,在做重启之前做配置文件的修改,注意的地方是要把UUID删掉,要把网卡地址添加上。

配置文件范例

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
HWADDR=00:0C:29:65:F9:E0
IPADDR=192.168.72.134
PREFIX=24
GATEWAY=192.168.72.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
ONBOOT=yes

最后重启系统

关于手动修改配置文件的服务重启

修改配置文件的方法和6.x的一模一样,服务的重启如下:

重新启动服务
# systemctl restart network.service

也可以使用如下三条命令
# nmcli connection reload
# nmcli connection down eno16777736
# nmcli connection up eno16777736

或者重启NetManager
# systemctl restart NetworkManager.service

主机名的修改

6.x和7.x通用的临时修改主机名

# hostname testserver
# hostname
testserver

重新登录shell即可生效

配置文件修改主机名

# cat /etc/hostname 
localhost.localdomain

7.x中修改主机名hostnamectl

查看主机名的状态

# hostnamectl status
   Static hostname: localhost.localdomain
Transient hostname: testserver
         Icon name: computer-vm
           Chassis: vm
        Machine ID: e8a7b8d3570e4c1bb71fcb203991989e
           Boot ID: 00fb4252b68843ffb5b14373d8349e39
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-229.el7.x86_64
      Architecture: x86_64

设置主机名,这种修改方式,不仅当前有效,而且永久生效

# hostnamectl set-hostname secondhostname
# hostnamectl status
   Static hostname: secondhostname
         Icon name: computer-vm
           Chassis: vm
        Machine ID: e8a7b8d3570e4c1bb71fcb203991989e
           Boot ID: 00fb4252b68843ffb5b14373d8349e39
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-229.el7.x86_64
      Architecture: x86_64
# cat /etc/hostname 
secondhostname
# hostname
secondhostname

时间管理timedatectl


The timedatectl command shows an overview of the current time-related system settings,including current time,time zone,and NTP synchronization setting of the system。这个命令显示当前系统的时间 设置,包括当前时间,时区 NTP 同步设置等

查看当前的时间,时区等信息

# timedatectl status
      Local time: Mon 2015-09-21 03:25:53 EDT
  Universal time: Mon 2015-09-21 07:25:53 UTC
        RTC time: Mon 2015-09-21 07:25:53
        Timezone: America/New_York (EDT, -0400)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2015-03-08 01:59:59 EST
                  Sun 2015-03-08 03:00:00 EDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2015-11-01 01:59:59 EDT
                  Sun 2015-11-01 01:00:00 EST

列出所有的时区

# timedatectl list-timezones 
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
……省略……

设置时区

# timedatectl list-timezones |grep -i shanghai
Asia/Shanghai
# timedatectl set-timezone Asia/Shanghai
# timedatectl status|grep -i timezone
        Timezone: Asia/Shanghai (CST, +0800)

设置时间

# timedatectl set-time "15:30"
# timedatectl status
      Local time: Mon 2015-09-21 15:30:04 CST
  Universal time: Mon 2015-09-21 07:30:04 UTC
        RTC time: Mon 2015-09-21 07:30:05
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

或者这样修改

# timedatectl set-time "2015-09-21 15:31"
# timedatectl status
      Local time: Mon 2015-09-21 15:31:04 CST
  Universal time: Mon 2015-09-21 07:31:04 UTC
        RTC time: Mon 2015-09-21 07:31:04
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a


NTP时间同步

默认需要安装chrony的软件包

# yum install chrony -y

# rpm -qc chrony
/etc/chrony.conf
/etc/chrony.keys
/etc/logrotate.d/chrony

# vim /etc/chrony.conf 
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
server time.nist.gov         iburst

重启服务

# systemctl restart chronyd.service 


# systemctl status chronyd.service 
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
   Active: active (running) since Mon 2015-09-21 15:38:21 CST; 6s ago
  Process: 7117 ExecStartPost=/usr/libexec/chrony-helper add-dhclient-servers (code=exited, status=0/SUCCESS)
  Process: 7114 ExecStart=/usr/sbin/chronyd -u chrony $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 7116 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─7116 /usr/sbin/chronyd -u chrony

Sep 21 15:38:21 secondhostname systemd[1]: Starting NTP client/server...
Sep 21 15:38:21 secondhostname chronyd[7116]: chronyd version 1.29.1 starting
Sep 21 15:38:21 secondhostname chronyd[7116]: Linux kernel major=3 minor=10 patch=0
Sep 21 15:38:21 secondhostname chronyd[7116]: hz=100 shift_hz=7 freq_scale=1.00000000 nominal_tick=10000 slew_delta_tick=833..._pll=2
Sep 21 15:38:21 secondhostname chronyd[7116]: Frequency -6.062 +/- 27.372 ppm read from /var/lib/chrony/drift
Sep 21 15:38:21 secondhostname systemd[1]: Started NTP client/server.
Hint: Some lines were ellipsized, use -l to show in full.

查看同步过程

# chronyc sources -v
210 Number of sources = 5

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||                                                /   xxxx = adjusted offset,
||         Log2(Polling interval) -.             |    yyyy = measured offset,
||                                  \            |    zzzz = estimated error.
||                                   |           |                         
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 202.118.1.130                 2   6    37    40   +196us[  +15ms] +/-   36ms
^- gus.buptnet.edu.cn            3   6    37    40    -39ms[  -39ms] +/-  115ms
^- news.neu.edu.cn               2   6    37    40  -4086us[-4086us] +/-   44ms
^- dns2.synet.edu.cn             2   6   211    65   -205ms[ -190ms] +/-  254ms
^- utcnist2.colorado.edu         1   6    37    38  -7187us[-7187us] +/-  106ms

开启和关闭NTP

# timedatectl set-ntp false
# timedatectl status
      Local time: Mon 2015-09-21 15:41:49 CST
  Universal time: Mon 2015-09-21 07:41:49 UTC
        RTC time: Mon 2015-09-21 07:41:26
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: no
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
# timedatectl set-ntp true
# timedatectl status
      Local time: Mon 2015-09-21 15:42:04 CST
  Universal time: Mon 2015-09-21 07:42:04 UTC
        RTC time: Mon 2015-09-21 07:41:41
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a


日志管理工具journalctl

该工具有非常非常多的选项与参数,主要用来看日志。

查看chronyd服务的日志,指定服务的日志

# journalctl _SYSTEMD_UNIT=chronyd.service 
-- Logs begin at Mon 2015-09-21 14:59:41 CST, end at Mon 2015-09-21 15:50:01 CST. --
Sep 21 14:59:54 localhost.localdomain chronyd[606]: chronyd version 1.29.1 starting
Sep 21 14:59:54 localhost.localdomain chronyd[606]: Linux kernel major=3 minor=10 patch=0
Sep 21 14:59:54 localhost.localdomain chronyd[606]: hz=100 shift_hz=7 freq_scale=1.00000000 nominal_tick=10000 slew_delta_tick=833 ma
Sep 21 14:59:55 localhost.localdomain chronyd[606]: Frequency -11.900 +/- 5.518 ppm read from /var/lib/chrony/drift
Sep 21 15:00:14 localhost chronyd[606]: Selected source 202.118.1.81
Sep 21 15:00:40 localhost chronyd[606]: Selected source 202.112.29.82
Sep 21 15:01:21 localhost chronyd[606]: Selected source 202.118.1.81
Sep 21 15:33:43 secondhostname chronyd[606]: System clock wrong by 32.653963 seconds, adjustment started
Sep 21 15:34:30 secondhostname chronyd[606]: Selected source 202.120.2.101
Sep 21 15:34:30 secondhostname chronyd[606]: System clock wrong by 8.066819 seconds, adjustment started
Sep 21 15:34:48 secondhostname chronyd[606]: Selected source 202.118.1.81
Sep 21 15:34:48 secondhostname chronyd[606]: System clock wrong by 3.645297 seconds, adjustment started
Sep 21 15:35:35 secondhostname chronyd[606]: Selected source 202.120.2.101
Sep 21 15:35:35 secondhostname chronyd[606]: System clock wrong by 0.632602 seconds, adjustment started
Sep 21 15:35:52 secondhostname chronyd[606]: Selected source 202.118.1.81


查看message的最新的日志(相当于tail /var/log/message,只查看message的日志,-n是指定行数的意思,默认是10行)

# journalctl -xn
-- Logs begin at Mon 2015-09-21 14:59:41 CST, end at Mon 2015-09-21 16:00:01 CST. --
Sep 21 15:42:03 secondhostname chronyd[7220]: hz=100 shift_hz=7 freq_scale=1.00000000 nominal_tick=10000 slew_delta_tick=833 max_tick
Sep 21 15:42:03 secondhostname chronyd[7220]: Frequency -4.281 +/- 49.332 ppm read from /var/lib/chrony/drift
Sep 21 15:42:03 secondhostname systemd[1]: Started NTP client/server.
-- Subject: Unit chronyd.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit chronyd.service has finished starting up.
-- 
-- The start-up result is done.
Sep 21 15:42:08 secondhostname chronyd[7220]: Selected source 128.138.141.172
Sep 21 15:50:01 secondhostname systemd[1]: Starting Session 9 of user root.
-- Subject: Unit session-9.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-9.scope has begun starting up.
Sep 21 15:50:01 secondhostname systemd[1]: Started Session 9 of user root.
-- Subject: Unit session-9.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-9.scope has finished starting up.
--


查看某个时间段的日志

# journalctl --since 15:00:00 --until 15:10:00
-- Logs begin at Mon 2015-09-21 14:59:41 CST, end at Mon 2015-09-21 16:01:01 CST. --
Sep 21 15:00:00 localhost.localdomain kernel: ip6_tables: (C) 2000-2006 Netfilter Core Team
Sep 21 15:00:00 localhost.localdomain kernel: Ebtables v2.0 registered
Sep 21 15:00:00 localhost.localdomain kernel: Bridge firewalling registered
Sep 21 15:00:01 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Sep 21 15:00:01 localhost.localdomain systemd[1]: Starting Network Manager...
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  NetworkManager (version 1.0.0-16.git20150121.b4ea599c.el7_1) is st
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  Read config: /etc/NetworkManager/NetworkManager.conf and conf.d: 1
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  WEXT support is disabled
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  Acquired D-Bus service com.redhat.ifcfgrh1
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  Loaded plugin ifcfg-rh: (c) 2007 - 2013 Red Hat, Inc.  To report b
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  Loaded plugin iBFT: (c) 2014 Red Hat, Inc.  To report bugs please 
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  Loaded plugin keyfile: (c) 2007 - 2013 Red Hat, Inc.  To report bu
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  parsing /etc/sysconfig/network-scripts/ifcfg-lo ...
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  parsing /etc/sysconfig/network-scripts/ifcfg-eth1 ...
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>      read connection 'eth1'
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  parsing /etc/sysconfig/network-scripts/ifcfg-eth0 ...
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>      read connection 'eth0'
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  monitoring kernel firmware directory '/lib/firmware'.
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  WiFi hardware radio set enabled
Sep 21 15:00:02 localhost.localdomain NetworkManager[734]: <info>  WWAN hardware radio set enabled
Sep 21 15:00:03 localhost.localdomain NetworkManager[734]: <info>  Loaded device plugin: /usr/lib64/NetworkManager/libnm-device-plugi
Sep 21 15:00:03 localhost.localdomain NetworkManager[734]: <info>  Loaded device plugin: /usr/lib64/NetworkManager/libnm-device-plugi
Sep 21 15:00:03 localhost.localdomain systemd[1]: Started Network Manager.
Sep 21 15:00:03 localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...


# journalctl --since 15:00:00 --until 15:10:00 _SYSTEMD_UNIT=chronyd.service 
-- Logs begin at Mon 2015-09-21 14:59:41 CST, end at Mon 2015-09-21 16:01:01 CST. --
Sep 21 15:00:14 localhost chronyd[606]: Selected source 202.118.1.81
Sep 21 15:00:40 localhost chronyd[606]: Selected source 202.112.29.82
Sep 21 15:01:21 localhost chronyd[606]: Selected source 202.118.1.81


将日志输出为json格式

# journalctl _SYSTEMD_UNIT=chronyd.service -o json > test   屏幕显示不全。。。

提示:输出结果的json的每个key大部分都是journalctl的选项


GPT分区管理工具gdisk和XFS文件系统

6.x版本使用parted分区

parted /dev/sdc mklabel GPT
parted /dev/sdc mkpart part1 1 2T
parted /dev/sdc mkpart part2 2T 4T
parted /dev/sdc print

partprobe 代表把所有的硬盘的分区表都更想到内核,也可以指定,比如partprobe /dev/sdb。在6.x的版本中使用partx -a /dev/sdb。在7.x中使用partprobe ;分完区在内核中是不生效的,具体查看cat /proc/partitions



新的分区工具gdisk

# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): ?
b   back up GPT data to a file
c   change a partition's name
d   delete a partition
i   show detailed information on a partition
l   list known partition types
n   add a new partition
o   create a new empty GUID partition table (GPT)
p   print the partition table
q   quit without saving changes
r   recovery and transformation options (experts only)
s   sort partitions
t   change a partition's type code
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu

Command (? for help): n  增加一个分区
Partition number (1-128, default 1): 1  分区号
First sector (34-4917821406, default = 2048) or {+-}size{KMGTP}:  起始位置 
Last sector (2048-4917821406, default = 4917821406) or {+-}size{KMGTP}: +1T  结束位置,这里的+ 和 — 不是 扩大缩小的意思,意思是分区从前开始,还是从尾开始   
Current type is 'Linux filesystem'   提示当前类型为linux文件系统
Hex code or GUID (L to show codes, Enter = 8300):  提示可以敲入L查看codes,如果直接回车则为8300
Changed type of partition to 'Linux filesystem'

Command (? for help): p  打印分区
Disk /dev/sdb: 4917821440 sectors, 2.3 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): D020477F-3550-4FE5-AFE8-00D55F794BA6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 4917821406
Partitions will be aligned on 2048-sector boundaries
Total free space is 2770337725 sectors (1.3 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      2147485695   1024.0 GiB  8300  Linux filesystem

Command (? for help): w  保存

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

# partprobe /dev/sdb  让内核生效,也就是在/proc/partitions中生效

格式化为xfs分区

# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=67108864 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=268435456, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=131072, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

挂载xfs分区

# mount /dev/sdb1 /mnt/
# df -Th /mnt/
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sdb1      xfs   1.0T   33M  1.0T   1% /mnt

查看分区的一些基本信息(不挂载不能使用该命令)

# xfs_info /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=67108864 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=268435456, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=131072, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# umount /mnt/
# xfs_info /dev/sdb1
xfs_info: /dev/sdb1 is not a mounted XFS filesystem

blocksize 最小是512,最带是64k,默认是4k

在默认情况下xfs的文件系统是格不掉的,即使卸载也不能

# umount /mnt/
# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
出于安全考虑必须要使用-f才能格式化分区

  • xfs有一套属于自己的管理命令

  • xfs_growfs 在线拉伸文件系统,用于做LVM的时候相当于resize2fs

  • xfs_repair 相当于以前的fsck,该命令用于修复xfs文件系统

  • lvm在7.x版本中只支持增加,不支持减少。因为xfs不支持缩小,只支持加大。

  • 查看超级块也不能使用tune2fs,因为tune2fs是用来查看ext3,ext4的


防火墙iptables与firewalld

在7.x版本中不是用iptables来管理防火墙,而是用firewalld来管理的。iptables和firewalld只能用一个。


如果使用iptables -F && service iptables save 确实能清理掉防火墙,但是下次重启的时候策略还会存在,并且是默认拒绝所有的。因为在7.x中默认使用的是firewall管理防火墙的。


但是iptables 是可以查到firewalld配置的防火墙策略的。


如果想要使用iptables,就要将firewalld的服务彻底关闭。systemctl mask firewalld.service

firewalld的zone


zone就是防火墙的区域,什么是区域?网络区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。

在firewall里面默认定义了8个zone:

  • trusted —— 信任的。允许所有进来的流量。也就是说INPUT链完全开放

  • home —— 拒绝所有进来的数据包,除非跟你出去相关的数据包,或者匹配ssh、mdns,ipp-client,samba-client,dhcpv6-client这些的规则

  • internel —— 预配置 等同于 home,名字不同,内容是一样的

  • work —— 工作场景中的,比home规则更加严格,拒绝所有进来的数据包,除非跟你出去相关的数据包,或者匹配ssh、ipp-client,dhcpv6-client

  • public —— 这是默认的zone,只开了ssh和dhcpv6-client,新加进来的接口都在这个zone

  • external —— 用来做网关的,最外面位置的一种角色。所有IPV4出去的流量都会被伪装

  • dmz —— 只有ssh可以连,其他都不可以

  • block —— 所有的都拒绝,ssh都不可以

  • drop —— 比block都严格,不会显示ICMP 的error

配置使用firewalld

查看当前有多少zone

# firewall-cmd --get-zones 
block dmz drop external home internal public trusted work

查看当前是哪个zone

# firewall-cmd --get-default-zone 
public

查看默认的zone活动在哪个网络设备

# firewall-cmd --get-active-zones 
public
  interfaces: eth0 eth1

设置默认的zone

# firewall-cmd --set-default-zone=work 
success
# firewall-cmd --get-default-zone 
work

在当前的zone中放行某个服务,或者是从该zone中将某服务放行的条目删掉

# firewall-cmd --permanent --add-service=http
success
# firewall-cmd --reload 
success

# firewall-cmd --permanent --remove-service=http
success
# firewall-cmd --reload 
success

提示:permanent是指下次开机生效的意思,--reload 是让修改立即生效,将策略读取到内存中。也就是当前不生效,除非重启机器,或者reload。那么只要不加permanent的话就是直接在内存中修改,不需要重新启动,也不需要重新加载。立即生效。但是重启或者重新加载将失效。

在当前的zone中放行某个端口,或者是从该zone中将端口放行的条目删除

# firewall-cmd --permanent --add-port=80/tcp
success
# firewall-cmd --reload
success

# firewall-cmd --permanent --remove-port=80/tcp
success
# firewall-cmd --reload
success

提示:在zone里面默认都是拒绝的,以上的操作(增加服务,增加端口)就是 允许指定的服务或者端口放行

如何添加自定义的zone

# ll /usr/lib/firewalld/zones/
总用量 36
-rw-r-----. 1 root root 299 3月   6 2015 block.xml
-rw-r-----. 1 root root 293 3月   6 2015 dmz.xml
-rw-r-----. 1 root root 291 3月   6 2015 drop.xml
-rw-r-----. 1 root root 304 3月   6 2015 external.xml
-rw-r-----. 1 root root 400 3月   6 2015 home.xml
-rw-r-----. 1 root root 415 3月   6 2015 internal.xml
-rw-r-----. 1 root root 315 3月   6 2015 public.xml
-rw-r-----. 1 root root 162 3月   6 2015 trusted.xml
-rw-r-----. 1 root root 342 3月   6 2015 work.xml
写一个xml然后重新加载firewalld 即可

firewalld的rich rule


rich rule的优先级最高,如果在其他地方设置了拒绝的,而rich rule设置是允许的,那么结果就是允许的,因为rich rule的优先级最高。

指定源地址为xxx的允许

# firewall-cmd --permanent --zone=work --add-rich-rule 'rule family=ipv4 source address=192.168.72.128/32 accept'
success
# firewall-cmd --reload 
success
# firewall-cmd --list-rich-rules --zone=work 
rule family="ipv4" source address="192.168.72.128/32" accept

注意:rule family是固定的值可以是ipv4也可以是ipv6。也就是说源地址为xxxx的 ipv4  全部accept

# firewall-cmd --permanent --zone=work --remove-rich-rule 'rule family=ipv4 source address=192.168.72.128/32 accept'
success
# firewall-cmd --reload 
success
# firewall-cmd --list-rich-rules --zone=work

限速ftp服务的每分钟的连接

# firewall-cmd --permanent --add-rich-rule='rule service name=ftp limit value=2/m accept'
success
# firewall-cmd --reload 
success
# firewall-cmd --list-rich-rules 
rule family="ipv4" source address="192.168.0.11/32" reject
rule service name="ftp" accept limit value="2/m"
注意:在默认的zone添加指定每分钟新的ftp连接

设置esp协议全部drop

# firewall-cmd --permanent --add-rich-rule 'rule protocol value=esp drop'
success
# firewall-cmd --reload 
success
# firewall-cmd --list-rich-rules 
rule family="ipv4" source address="192.168.0.11/32" reject
rule service name="ftp" accept limit value="2/m"
rule protocol value="esp" drop

查看rich语法

# man firewalld.richlanguage

firewall-cmd语法简介

  • --get-default-zone 查看默认是用哪个zone

  • --set-default-zone=home 设置默认使用的zone

  • --get-zones 列出所有的zone

  • --get-active-zones 查看系统中所有活动的zone,使用那些interface

  • --add-source=IP地址或网段 --zone=home 如果不加zone选项 代表改变的是当前的zone的规则, 开放一个源地址

  • --remove-source=IP地址或网段 --zone=home

  • --add-interface=interface --zone=zone 增加某个接口

  • --change-interface=interface --zone=zone

  • --list-all --zone=home 如果不加zone则代表查看当前的zone,列出所有的规则

  • --list-all-zones 查看所有的zone的规则

下面的几个选项 在上面都试过了,就只指定某个zone放行某个服务,或者是某个端口 

  • --add-service=service --zone=zone

  • --add-port=port/protocol --zone=zone

  • --remove-service=service --zone=zone

  • --remove-port=port/protocol --zone=zone

  • --reload






如无特殊说明,文章均为本站原创,转载请注明出处