CentOS7 对比 CentOS6

字符集

  • CentOS 6
  • ⽅法:/etc/sysconfig/i18n中的LANG=
  • CentOS 7
  • ⽅法1:localectl set-locale LANG=
  • ⽅法2:/etc/locale.conf中的LANG=

主机名

  • CentOS 6
  • 在线⽣效:hostname
  • 重启⽣效:/etc/sysconfig/network中的HOSTNAME=
  • CentOS 7
  • 在线+重启⽣效:hostnamectl set-hostname

时区

  • CentOS 6
  • ⽅法:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • CentOS 7
  • ⽅法1:同CentOS 6
  • ⽅法2:timedatectl set-timezone Asia/Shanghai

时间同步(⼀)

  • CentOS 6
  • 缓慢:ntpd或ntpdate
  • 直接:ntpdate -b(通常加到crontab)
  • CentOS 7
  • ⽅法1:systemctl start chronyd
  • ⽅法2:timedatectl set-ntp yes

时间同步(⼆)

  • 可以通过timedatectl | grep “NTP synchronized”判断当前时间是否已同步
  • 不建议⽤ntpd和ntpdate,redhat强烈推荐chrony,可⽤于⽹络不稳定的环境
  • ntpd和chronyd区别详⻅红帽官⽹⽂档
  • chrony.conf关键参数makestep 1.0 -1

⼿动更改时间

  • CentOS 6
  • ⽅法:date -s “2018-07-08 11:11:11”
  • CentOS 7
  • ⽅法1:同CentOS 6
  • ⽅法2:timedatectl set-time “2018-07-08 11:11:11”(前提是timedatectl set-ntp false)

单⽤户修改密码

  • CentOS 6
  • grub界⾯键⼊e,在kernel⾏最后加1,键⼊b进⼊单⽤户模式,通
  • 过passwd命令修改密码
  • CentOS 7
  • grub界⾯键⼊e,在linux16⾏上将ro改为rw,并在当前⾏最后加
  • init=/bin/sh,组合键ctrl-x进⼊单⽤户模式,通过passwd命令修改密码,如果有开启selinux,则需要在重启前touch /.autorelabel

grub添加参数

  • CentOS 6
  • /boot/grub/grub.conf的kernel中加⼊需要添加的参数
  • CentOS 7
  • 步骤1:/etc/default/grub的GRUB_CMDLINE_LINUX中加⼊需要添
  • 加的参数
  • 步骤2:grub2-mkconfig -o /boot/grub2/grub.cfg

查看开机记录

  • CentOS 6
  • ⽅法:last
  • CentOS 7
  • ⽅法1:同CentOS 6
  • ⽅法2:journalctl –list-boots

rc.local(1.执⾏顺序)

  • CentOS 6
  • 串⾏的最后⼀个执⾏
  • CentOS 7
  • 和其他服务并⾏执⾏

rc.local(2.可执⾏权限)

  • CentOS 6
  • 默认有可执⾏权限
  • CentOS 7
  • 默认没有可执⾏权限(官⽅不推荐使⽤rc.local),需要⾃⾏增加(chmod +x /etc/rc.d/rc.local)

rc.local(3.注意事项)

  • CentOS 7
  • rc.local由rc-local.service执⾏,并⾏执⾏,仅能保证在network之后
  • 启动,因此建议rc.local⾥增加sleep 10来尽可能在最后执⾏
  • 需要在rc.local的最后⼀⾏增加exit 0,否则可能导致已启动的进程被关闭(echo 'exit 0' » /etc/rc.d/rc.local)
  • 建议尽量使⽤systemd来配置服务,不要使⽤rc.local

limit配置

  • CentOS 6
  • 全局设置:没有全局设置的⽅法
  • /etc/security/limits.conf仅针对使⽤pam的进程,且有加载pam_limits.so(因为limits.conf实际是pam_limits.so的配置⽂件)
  • 服务设置:只能在服务启动前设置ulimit,才能在启动后看到效果
  • CentOS 7
  • 全局设置:/etc/systemd/system.conf⾥(如DefaultLimitNOFILE=65535)
  • 服务设置:[Service]⾥增加LimitNOFILE=65535

yum仅使⽤ipv4

  • CentOS 6
  • yum没有⾃带⽅法
  • CentOS 7
  • yum.conf⾥增加ip_resolve=4

彻底禁⽤IPv6

  • CentOS 6和CentOS 7相同
  • 在grub上增加ipv6.disable=1
  • 查看是否彻底关闭
  • sysctl -a | grep -i ipv6如果没有任何输出,则表示彻底关闭
  •  

⽹卡名(⼀)

  • CentOS 6
  • 系统安装完,默认是em1开始,这其实装机完成时在udev做的绑定
  • 把/etc/udev/rules.d/70-persistent-net.rules内容清空,则恢复成eth0开始编号
  • CentOS 7
  • 不再通过udev绑定⽹卡名,默认是em1开始,有的是eno、enp、ens等名字
  • 如果想恢复eth0,则/etc/default/grub⾥增加net.ifnames=0 biosdevname=0

⽹卡名(⼆)

  • 如果想让CentOS 6的⽹卡名不受udev影响,达到CentOS 7的效果,则删除3个⽂件即可
  • rm -f /etc/udev/rules.d/70-persistent-net.rules
  • rm -f /lib/udev/write_net_rules
  • rm -f /lib/udev/rules.d/75-persistent-net-generator.rules
  • ⽹卡名含义
  • eno:主板板载⽹卡
  • enp:独⽴⽹卡(PCI⽹卡)
  • ens:热插拔⽹卡(usb之类)

CPU频率(⼆)

  • CentOS 7
  • 若要和6⼀样保持频率,则在grub⾥增加intel_pstate=disable
  • 不建议上述做法(详⻅最后章节的性能对⽐)
  •  

第⼆部分:服务管理 sysvinit、upstart、systemd简介

  CentOS 5 CentOS 6 CentOS 7 备注
sysvinit 第⼀代,传统,兼容最多/etc/init.d/、/etc/rc.X
upstart 第⼆代,形似systemd雏形/etc/init/
systemd 第三代,配合cgroup,systemd完全接管整个系统/usr/lib/systemd/

sysvinit、upstart、systemd常⽤命令

动作 sysvinit upstart systemd
查看 service mytest status initctl status mytest systemctl status mytest.service
启动 service mytest start initctl start mytest systemctl start mytest.service
关闭 service mytest stop initctl stop mytest systemctl stop mytest.service
强杀进程 kill -9 PID kill -9 PID systemctl kill mytest.service –signal=9
重启 service mytest restart initctl restart mytest systemctl restart mytest.service
重载 service mytest reload initctl reload mytest systemctl reload mytest.service
开机启动 chkconfig mytest on /etc/init/mytest.conf⾥配置start on runlevel [3] systemctl enable mytest.service

runlevel运⾏级别

运⾏级别CentOS 6 CentOS 7
0 halt runlevel0.target → poweroff.target
1 Single user mode runlevel1.target → rescue.target
2 Multiuser, without NFS runlevel2.target → multi-user.target
3 Full multiuser mode runlevel3.target → multi-user.target
4 unused runlevel4.target → multi-user.target
5 X11 runlevel5.target → graphical.target
6 reboot runlevel6.target → reboot.target
查看 cat /etc/inittab systemctl get-default
更改 编辑/etc/inittab systemctl set-default multi-user.target
立即切换 init 5 systemctl isolate graphical.target

⽇志查询(⼀)

  • CentOS 6
  • ⼿⼯在/var/log/messages、/var/log/dmesg、/var/log/secure,麻烦且效率低
  • CentOS 7
  • 统⼀使⽤journalctl,可以使⽤多个条件匹配,⽐如时间段、服务名、⽇志级别等等

⽇志查询(⼆)

journalctl常⽤命令作⽤ CentOS 6上的操作
journalctl 所有⽇志,包含系统、内核等等 ⼿动在对应⽇志⽂件中grep
journalctl –dmesg 查看当前开机后的内核⽇志 dmesg
journalctl –boot 查看当前开机后的⽇志 先查当前开机启动时间,然后cat /var/log/…
journalctl –boot=-1 查看上⼀次启动的⽇志 查询上次开机到当前开机之间时间,然后cat
journalctl –since=“2018-08-01 12:00:00” 查看从指定时间开始到当前的⽇志 ⼿动在⽇志⾥grep
journalctl –since=yesterday –until=today 查看昨天0-24点的⽇志 ⼿动在⽇志⾥grep
journalctl -n 20 查看最后20⾏ tail -n 20
journalctl -f 实时滚动显示最新⽇志 tail -f
journalctl -e 直接翻到最后 tail
journalctl -u mytest.service 查看指定服务⽇志 先查询⽇志保存路径,然后再cat查看
journalctl -p 0 查看指定⽇志级别的⽇志,⽇志级别从0到7 通过syslog将不同级别的⽇志放到不同⽂件中
journalctl -u mytest.service -o json-pretty 查看每条⽇志详细信息(包含元信息)
journalctl –disk-usage 查看⽇志占⽤的磁盘空间 du -shx /var/log/messages等

实现守护进程

  • CentOS 6
  • sysvinit需要⾃⾏实现
  • upstart和systemd类似,将程序运⾏在前台即可
  • CentOS 7
  • 由systemd启动,将程序运⾏在前台即可
  • 服务脚本
  • sysvinit
  • ⾃⾏实现start、stop、restart、reload、status等⽅法,没有统⼀规范
  • upstart
  • 根据规范编写conf⽂件(形似systemd简化版)
  • systemd
  • 根据规范编写unit⽂件即可

sysvinit例⼦ cat > /etc/init.d/mytest «EOF . /etc/rc.d/init.d/functions start() { … } stop() { … } restart() { … } reload() { … } status() { … } case “$1” in start) start ;; stop) stop ;; … esac exit $RETVAL EOF chmod +x /etc/init.d/mytest service mytest start

upstart例⼦ cat > /etc/init/mytest.conf «EOF start on runlevel [3] description “mytest” exec /root/mytest.sh EOF initctl start mytest

systemd例⼦ cat > /usr/lib/systemd/system/mytest.service «EOF [Unit] Description=mytest [Service] Type=simple ExecStart=/root/mytest.sh [Install] WantedBy=multi-user.target EOF systemctl start mytest

PID管理

  • sysvinit
  • 需要⽣成PID⽂件,⽤于后期关闭、重启等使⽤
  • upstart
  • ⽆需PID⽂件,upstart会记录主进程ID,⼦进程ID没有记录
  • systemd
  • ⽆需PID⽂件,所有进程ID由cgroup统⼀接管

内置的资源限制(cpu/mem)

  • CentOS 6
  • 除了limit,没有其他限制进程资源的简便⽅法
  • CentOS 7
  • 除了limit,还⽀持部分cgroup限制,可对进程做内存限制和cpu资源

限制等 [Service] ExecStart=… MemoryLimit=500M CPUShares=100

服务异常⾃动重启 upstart:


start on runlevel [3] description “mytest” exec /root/mytest.sh post-stop exec sleep 5 respawn respawn limit unlimited systemd:


[Unit] Description=mytest [Service] Type=simple ExecStart=/root/mytest.sh Restart=always RestartSec=5 StartLimitInterval=0 [Install] WantedBy=multi-user.target

写⽇志⽅式(⼀)

  • CentOS 6
  • ⾃⾏输出到⽂件中,或通过syslog记录(如logger命令)
  • CentOS 7
  • 若程序由systemd启动,只需输出到标准输出或标准错误

写⽇志⽅式(⼆)

  • 建议centos7只将应⽤程序的⼀些元信息输出到标准输出或标准错误,⽐如启动成功、启动失败等等
  • 不建议将业务⽇志输出到journal。因为journal中所有⽇志都存在⼀个⽂件中,会导致2个问题:
  • 如果没有做⽇志持久化,则默认存在内存中,会导致最多⼀半的内存被占⽤
  • 存储量很⼤,会导致查询其他⽇志很耗时
  • 解决办法:输出到syslog,[Service]⽀持StandardOutput=syslog

指定每条⽇志级别(⼀)

  • CentOS 6
  • 通过syslog将不同级别的⽇志输出到不同⽂件
  • CentOS 7
  • 只需在输出的每⼀⾏开头加<⽇志级别>

指定每条⽇志级别(⼆)

  • CentOS 7⽇志级别及使⽤⽅法
  • 0:emerg
  • 1:alert
  • 2:crit
  • 3:err
  • 4:warning
  • 5:notice
  • 6:info
  • 7:debug

#!/bin/bash echo '<0>hello, emerg' echo '<1>hello, alert' echo '<2>hello, crit' echo '<3>hello, err' echo '<4>hello, warning' echo '<5>hello, notice' echo '<6>hello, info' echo '<7>hello, debug'

systemd⽇志永久保存

  • systemd⽇志默认保存在内存中,因此当服务器重启后,就⽆法通过journalctl来查看之前的⽇志
  • 解决⽅法

mkdir -p /var/log/journal systemctl restart systemd-journald.service

posted @ 2018-12-25 14:33  Jeffsunpan  阅读(399)  评论(0编辑  收藏  举报