CentOS 介绍

发布时间: 更新时间: 总字数:5359 阅读时间:11m 作者: IP上海 分享 网址

简单介绍 centos 7 的常用工具、文件系统管理、文本处理、终端、用户、组、权限、网络配置、进程管理、KVM、软件、定时任务、日志、分区、LVM、kernel 管理、apache 配置、systemd、boot 过程、kickstart、selinux、firewall、performance command、performance tunning、bonding。

安装

  • 通常最低配置:1G 内存、10G 硬盘
  • centos7 默认文件系统是 XFS
    • XFS 不能 shrunk,只能 expand;ext4 可以 shrunk。
  • centos7 安装的个性化
    • locale
    • hostname
    • 语言包
    • ntp
    • root 密码
    • LVM
      • /boot
      • /
      • swap

常用工具

  • 2>&1 file
  • history
    • 保留最近 1000 个命令(当 shell 关闭时,同步到~/.bash_history 文件中)
  • profile 文件
    • /etc/profile 所有用户第一次 login 都执行
    • /etc/bashrc 所有用户的 subshell 启动时会执行
    • ~/.bash_profile 某用户第一次 login 时执行
    • ~/.bashrc 某用户的 subshell 启动时会执行
    • 总结: 通常 login 的步骤里都包含 subshell 的内容
  • /etc/motd 用户成功登陆后显示
  • /etc/issue 用户登陆前显示
  • man -k 关键字执行时,会搜索 mandb,显示帮助文档列表
  • root 用户执行mandb可更新 man 数据库

文件系统管理

  • linux file system layout 遵循 FHS 规范,man hier
  • mount 会读 /proc/mounts ,显示 所有 已 mount 的 devices(不仅仅是 file system,而是所有挂载点)
  • findmnt 会显示树形的所有已 mount 的 devices
  • file 所有信息(除了 name)都存在 inode 中
  • hard link: original file 被删后,不受影响
  • soft link: original file 被删后,会不可用
  • tar
    • tvf 先显示内容,不解压
    • -C 指定解压的目标目录

文本处理

  • less 后,G 到文尾
  • tail -100 xx
  • cut -d : -f 1 /etc/passwd :分隔,取第一列
  • sort -n 按数字排序
  • sort -k3 -t: /etc/passwd :分隔,按第三列排序
  • grep -e '^#' -e '^$' file -e 可多次使用正则

终端

  • text 模式下,一个 terminal 对应一个 /dev/ttyx
  • 图形模式下,一个 terminal 对应一个 /dev/pts/x
  • reboot/halt/poweroff
  • ssh -p 可指定端口
  • ssh-keygen 创建 key pair
  • ssh-copy-id 拷贝公钥到 target server 上
  • screen,记住 Ctrl+a ? 即可

用户、组

  • visudo 命令可直接编辑 sudoer 文件
  • 用户密码在 /etc/shadow 文件中
  • useradd 的默认值存在于 /etc/login.defs 和 /etc/default/useradd
  • 将用户和组存到 LDAP 中
    • 配置方法: authconfig/authconfig-tui/authconfig-gtk
    • nslcd 服务负责连接 LDAP,可以编辑 /etc/nslcd.conf
    • sssd 服务负责把本地验证的程序 redirect 成 LDAP 的请求

权限

  • chown a /home/a 修改所属用户
  • chown :mygroup /home/a 修改所属组
  • chown a:mygroup /home/a 同时修改用户和组
  • 当用 tar 时,文件的 ACL 会丢失,应该用 star 命令代替 tar
  • umask 默认值是 022,其实用 027 比较好

网络配置

  • private 地址段
    • A 类: 10.0.0.8/8
    • B 类: 172.16.0.0/12
    • C 类: 192.168.0.0/16
  • 网卡的命名规则(举例:eno1)
    • en 表示以太网,wl 表示 wlan
    • o 表示 onboard,p 表示 PCI
  • ss 命令取代 netstat
    • ss -ltun 列出所有 listen 的 tcp 和 udp 端口(n 表示数字形式)
  • centos7 上的网络由 NetworkManager 服务管理,当该服务启动时,会读取网卡的配置
  • device 和 connection 的区别
    • device 是一个网卡
    • connection 是代表 device 的配置
  • 在网络没有配置好之前,查看 mac 地址: dmesg|grep eth
  • ip -s link 显示所有 connections、packets 的统计
  • 网络配置工具:NetworkManager 介绍
  • 修改主机名
    • hostnamectl set-hostname xxx
    • hostnamectl status 不仅显示主机名,还显示 kernel 版本等其他信息
  • /etc/hosts 格式是: ip FQDN shortName 或者 ip name
  • 设置 DNS 的方法
    • 在/etc/sysconfig/network-scripts/ifcfg-xx 配置文件中设置 DNS1,DNS2
    • 不要直接修改 /etc/resolv.conf ,它会被 NetworkManager 覆盖

进程管理

  • fg 把最后一次后台 job 放到前台
  • Ctrl+z 会暂停 job,并没有从内存里清除掉,一旦暂停,可以执行 bg 放到后台
  • Ctrl+c 会停止 job,并从内存中清除
  • Ctrl+d 会发送 EOF
  • jobs 显示当前所有 job
  • fg id 把 id 号 job 放到前台
  • bg 把最后一次 job 放到后台
  • 模拟
    • sleep 5555555555&
    • dd if=/dev/zero of=/dev/null &
    • sleep 777777777777 在前台执行
    • Ctrl+z 暂停当前长任务
    • bg 放入后台
    • jobs 查看所有 job
  • ps fax 显示 tree 进程列表
  • nice 值区间[-20,19],默认值是 0(即 20),值越小,priority 越大
    • nice -n 5 dd if=/dev/zero of=/dev/null & 显示指定 nice 值
    • renice -n 10 -p 12345 重新调整 pid 进程的 nice 值
  • 如果杀父进程,它的子进程也会被杀掉
  • kill -l 显示所有 signals

KVM

  • kvm 只能用在 64-bit 机器上
  • qemu 里有 kvm 没有的东西,比如 image file 镜像格式
  • 要进入 kvm 提供的 vm,需要使用 libvirtd,没有它,你无法管理 vm
  • virsh 命令行可以管理 vm
  • cat /proc/cpuinfo 的 flags 中中包含 vmx (即 intel 支持虚拟化)
  • virt-manager 图形化新建 vm,向导会产生一个 xml 配置文件
  • virsh console xxx 登录 vm
  • 在宿主上 top 命令中,一个 qemu-kvm 进程代表一个 vm

软件

  • man yum.conf 显示.repo 应该怎么写
  • 创建自己的 yum repo
    • yum install -y createrepo
    • createreop xxx
  • yum list installed
  • yum groups list
  • yum groups info xx
  • yum 和 rpm 有各自的 database,yum 命令会同步更新 rpm 的 database,反之则不会,所以尽量使用 yum
  • rpm -qc xxx 只显示配置文件
  • rpm -ql xxx 显示 rpm 中的所有文件
  • yum install yum-utils repoquery -l python-keystone repoquery 可以做到不用安装 rpm 包即可查看 rpm 包的内容
  • rpm -qlp xxx.rpm 如果已经有 rpm 包在本地,该命令也可以做到不用安装即可查看 rpm 包中内容

定时任务

  • man crontab
  • /etc/crontab 不要改,应该放一个文件到/etc/cron.d 目录下。
  • /etc/anacrontab 负责 hourly,daily,weekly,monthly 等 cron jobs
  • crontab -l 列出当前用户的定时任务

日志

  • rsyslogd 是 syslogd 的增强,管理着集中日志
  • centos7 中,journald 提供了高级功能,它从 kernel、启动过程、services 中收集日志,写到 journal 二进制文件中,journalctl可查询
  • journald 是 systemd 带出来的,不是要取代 rsyslogd
  • /var/log/下的日志文件是 rsyslogd 负责写的
  • systemctl status xxx 时会显示 xxx 相关的 journal 日志
  • /var/log
    • messages 大多数日志的集中存放地
    • dmesg kernel 日志
    • secure 认证错误等日志
    • boot.log 启动日志
    • sssd 服务写的日志,是权限认证方面的
  • logger 命令会写 rsyslog 日志
  • /etc/rsyslog.conf
  • logrotate 被作为 cron 服务启动起来,定期按照/etc/logrotate.conf 中的规定把日志归档。
  • 自己可以放文件到/etc/logrotate.d 目录下

分区

  • MBR 是磁盘第一个 512 字节扇区
  • 在 MBR 的情况下,最多只能创建 4 个主分区,如果设置其中一个为扩展分区的话,总共能达到 15 个分区
  • GPT 用来取代 MBR,UEFI 用来取代 BIOS
  • 在 GPT 的情况下
    • 最大的分区大小是 8ZiB
    • 多大 128 个分区
    • 不需要再区分主分区和扩展分区
    • 用 128 位 id 来标识分区
    • 默认在磁盘末尾备份,防止 MBR 式的单点
  • KB 和 KiB 不同,1KB=1000, 1KiB=1024
  • fdisk 用来创建 MBR 分区
  • gdisk 用来创建 GPT 分区
  • cat /proc/partitions
  • tune2fs -l /dev/sdb1 命令用来管理 ext4 文件系统的 properties
  • XFS 完全不同,只能通过xfs_admin -L mylabel修改 label
  • mkswap /xxx 把 xxx 作成 swap
  • swapon /xxx 激活
  • blkid 查看当前文件系统的 UUID
  • /etc/fstab 自动 mount
  • mount -a 把/etc/fstab 中的全部 mount 一遍

LVM

  • lvm 支持 snapshot
  • lsblk 显示本机所有 storage

kernel 管理

  • 如何接触 kernel?
    • dmesg 显示 kernel ring buffer(是 kernel 存放日志的一片内存区域)
    • /proc
    • uname 显示 kernel version
  • 硬件初始化
    • boot 期间,kernel 探测可用的硬件,一旦发现新硬件,systemd-udevd 进程负责 load driver,并使硬件可用
    • systemd-udevd 会读取/usr/lib/udev/rules.d,这些 rule 是文件不应该被修改
    • systemd-udevd 还会读取 /etc/udev/rules.d 目录,读取自定义的 rule 文件
    • kernel module 被自动加载,module 的状态和硬件信息被写入 /sys 目录
    • 注意:systemd-udevd 不是一次性的,而是一直监控 device 的热插拔,可用执行 udevadm monitor 可以监控 device 的插拔
  • kernel module 的加载
    • 一般 module 都是随着 device 的热插拔而自动被加载或者卸载的
    • lsmod显示已载入的 modules
    • modinfo xx 显示 module 详细信息,包括 module 的.ko 文件信息等。
    • modprobe xx 手动载入 module
    • modprobe -r xx 手动卸载 module
  • lspci -k 显示所有 PCI 设备、以及对应的 kernel module
  • yum upgrade kernel会在旧 kernel 旁边安装新 kernel

grub2

  • grub2 被安装在硬盘的 boot sector
  • grub2 负责加载 kernel 和 initramfs
  • initramfs 包含一个小的 file system,启动时会被 mount,里面有一些必要的 kernel modules
  • 不要改/boot/grub2/grub.cfg,可以改/etc/default/grub 文件,只改 GRUB_CMDLINE_LINUX,改完后,执行grub2-mkconfig > /boot/grub2/grub.cfg
  • 去掉启动选项中的 rhgb 和 quiet,会显示多一些内容
  • man bootparam

boot 过程

  • 加电
  • BIOS,POST 自检,必要的硬件被初始化
  • 从 MBR 中找到 bootable device,加载 boot loader(grub2)
  • grub2 加载 initramfs 和 kernel,其中 initramfs 包含一个完整的操作系统
  • 一旦 kernel 载入内存,来自 initramfs 的 systemd 进程被启动,udev 进程被加载用来识别以后的硬件,截止这里,都是发生在 initramfs 里
  • systemd 执行 initrd.target 中所有的 units
  • 系统切换到磁盘上的 root 文件系统
  • systemd 找到 default target,并执行其所有的 units

xx.img 损坏的修复步骤

  • kpartx -a xx.img 会分析 vm img 文件中的分区,并映射到 device mapper 下的 loopxx 文件上
  • 如果 loop 文件对应的是 lvm,则需要 pvscan /dev/mapper/loop02
  • lvs 查看所有的 lv
  • vgchange -a y xx 激活所有的 lv
  • 开始 mount,mount 后,进行操作
  • kparx -d xx.img

kickstart

  • 准备 installer server
    • 找一台已手动安装好的操作系统
    • 安装 apache
    • 将 DVD 内所有内容拷贝到 httpd 的 DocumentRoot 里
  • 准备 tftp server
    • yum install tftp-server
    • 由于 tftp service 是被 xinetd service 管理的,需要通过修改/etc/xinetd.d/tftp 中的 disable=no 告诉 xinietd 放行 tftp
    • systemctl start xinetd && systemctl enable xinetd
    • firewall-cmd –permanent –add-service=tftp
    • firewall-cmd –reload
  • 准备 DHCP server
    • yum install dhcp
    • 修改/etc/dhcp/dhcpd.conf,指定 subnet、netmask、range、next-server(tftp 地址)、filename(pxelinux/pxelinux.0)
  • 准备 PXE server(作用就是把 pxelinux 传给 client 机器,取代 client 上 grub2 的工作)
    • yum install syslinux (因为其中包含了 pxelinux.0)
    • cp pxelinux.0 /var/lib/tftpboot/pxelinux
    • touch /var/lib/tftpboot/pxelinux/pxelinux.cfg/default ,并填写内容(具体内容自己查)
  • 准备 kickstart 文件
    • 说明:/root/anaconda-ks.cfg 文件记录了安装过程中的选项
    • 说明:图形化工具 system-config-kickstart 可以用来创建个性化的 kickstart 文件
    • 在 tftp 中的 default 文件中写上 ks=xxxxx 指定 kickstart 文件

selinux

  • 如果 selinux 被开启,默认是 deny all,需要明确指定 policy 才可以
  • 启动时的两种 mode
    • enforcing mode 执行所有的 rules
    • permissive mode 仅仅记 log
  • /etc/sysconfig/selinux
  • getenforce 查看当前 mode
  • setenforce 0 -> permissive mode
  • setenforce 1 -> enforcing mode
  • sestatus -v 显示 selinux 的详细信息
  • -Z 选项显示了 context label,比如 ls -Z,label 分三个部分
    • user (selinux 中的 user 和系统 user 不是一回事)
    • role
    • type
  • semanage 命令用于添加 selinux policy (yum provides */semanage 找出包含 semanage 命令的 rpm,并安装)
  • man semanage 里面有 examples,毕竟命令很难记
  • selinux 的日志的类型是 AVC, grep AVC /var/log/audit/audit.log

firewall

  • linux 的 firewall 是由 kernel 里 netfilter 实现的,它检查每个进、出、转发的 packet
  • 早期与 netfilter 交互的方式就是 iptables
  • centos7 引入了 firewalld 这种新方式来与 netfilter 交互,它与 iptables 不兼容,二选一。
  • firewalld 引入了 zone 的概念,一个 zone 就是一组 rules
  • firewalld 中还有 service 的概念,这和 systemd service 不同。可执行 firewall-cmd --get-service
  • /etc/firewalld 目录
  • 命令
    • firewall-cmd
    • firewall-config 图形界面
  • systemctl mask iptables 禁用 iptables,否则会和 firewalld 搞乱
  • man firewall-cmd

time

  • hardware clock 是保存在主板芯片里的时间,和操作系统没有关系,通常都是 UTC 的
  • system time 是操作系统负责的,当 OS 启动后,system time 就和 hardware clock 完全独立了,就算 system time 被修改,hardware clock 不会跟着被改,system time 也是 UTC 的
  • local time 是针对当前时区的换算后的时间
  • hardware clock 由于是在主板上,有时不准,所以需要 NTP
  • 命令
    • hwclock
      • hwclock -c 显示 hardware 和 system time 之间的区别
      • hwclock --systohc 同步 system time 到 hardware 中
      • hwclock --hctosys 同步 hardware time 到 system 中
    • timedatectl 可以操作时间的方方面面,是统一的时间操作入口
  • centos7 中,chrony 取代 ntp,作为默认的时间管理服务
  • 时区的设置的方法:
    • tzselect
    • ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

performance

  • top 命令中的 load average 的含义是:等待 cpu 的进程数,如果大于 cpu core 总数,说明比较忙。
  • top 命令中的 wa 表示 cpu 等待不可中断的 IO 操作,例如请求磁盘。如果值很大,说明 IO 性能太差
  • hi 表示 cpu 处理硬件中断的时间,如果很大,说明硬件有问题
  • si 表示 cpu 处理软件中断的时间
  • st=stolen time,用在 vm 中,表示 vm 从 hypervisor 中偷了多少 cpu 时间
  • top 命令中的 cache 表示:从磁盘中读过的 file 会存在该内存中,为了解决磁盘很慢的问题。当 linux 运行一段时间后,free 值会很小,cache 值会很大,这个没问题,反而性能会好。linux 很容易就复用 cache 中的内存。
  • top 命令中的 buffer 和 cache 不一样,buffer 用于保存非结构化数据,比如 file system table,inode table,这个值不应该太大。 find / > /dev/null 就可以看出 buffer 变大了(TODO,实测不是这样,执行后,反而 cache 变大了,buffer 变小了。。)。vmstat 可分别显示 buffer 和 cache 的大小。
  • top 中的 VIRT 不是真的内存,而是指向虚拟内存地址空间的一组指针
  • top 默认是按 cpu 排序的,按>使按内存排序,按<再回来,按 cpu 排序
  • 如何调整 top 命令的列?按 f 显示所有的列,方向键选择后,按空格键选中,选好后,按 q 出去,按 W 会保存在~/toprc 中
  • /proc/meminfo 中重要的项(通常 anon 是 application memory,file 是 buffer+cache)
    • Active: 708084 kB
    • Inactive: 361304 kB
    • Active(anon): 102580 kB
    • Inactive(anon): 30068 kB
    • Active(file): 605504 kB
    • Inactive(file): 331236 kB
  • 当内存不够用时,OS 可以做两件事情
    • drop cache: 等下次需要读 file 时,再从 disk 中读即可,如果 drop 的是 Inactive(file),短期内不会用到这些 file,基本不影响性能
    • use swap: Inactive(anon)是比较适合放到 swap 中去的,因为短期内用不到
  • swapon -s 查看 swap 情况
  • yum install sysstat 里面有很多有用的工具
    • iostat 查看哪个 IO 设备最忙
    • vmstat -s 很有用,显示内存使用相关的所有性能参数

performance tunning

/proc 目录下有几个有用的

  • /proc/cmdline 显示 kernel 的启动命令行
  • /proc/partitions 显示所有存储 device,和分区。
  • /proc/modules 显示当前被载入的 linux kernel modules
  • /proc/sys/ 目录,主要用来调优
  • /proc/sys/dev 设备调优
  • /proc/sys/fs 虚拟文件系统调优
  • /proc/sys/kernel 内核接口调优
  • /proc/sys/net 网络调优
  • /proc/sys/sunrpc NFS 调优
  • /proc/sys/vm 虚拟内存调优

对/proc/sys 下修改的参数都是临时的,不是持久性的

  • sysctl
    • 系统 boot 时,systemd-sysctl 服务被启动,该服务读取 sysctl 配置文件,/usr/lib/sysctl.d 目录下是默认的调优参数(用户不要修改),/etc/sysctl.d 目录是给用户自定义的,用户可以新建一个.conf 结尾的文件。
    • sysctl 的配置文件中用.分割,和/proc/sys 路径一致。
    • sysctl -a 显示所有可供调优的参数
    • sysctl -w "net.ipv4.icmp_echo_ignore_all=0" 可以临时修改参数,等同于 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 如果想持久化,可以新建文件 /etc/sysctl.d/ping.conf ,内容是 net.ipv4.icmp_echo_ignore_all=1

bonding

  • man nmcli-examples给出了 bonding 的示例:
    • nmcli con add type bond ifname mybond0 mode 802.3ad
    • nmcli con add type bond-slave ifname eth1 master mybond0
    • nmcli con add type bond-slave ifname eth2 master mybond0
  • bonding mode(最常用的是 802.3ad)
    • balance-rr(0) 顺序在多个 slaves 上发包,实现了 LB 和 fault tolerance
    • active-backup(1) 只有一个 slave 在工作,另一个备份,只有当第一个坏了,第二个才工作,实现了 fault tolerance,没实现 LB
    • balance-xor(2) 与 mode0 不同的是:发往同一个地址的 packet 是从同一个 slave 发出去的。同样实现了 LB 和 fault tolerance
    • broadcast(3) 在每个 slave 上都发,实现了 fault tolerance,没实现 LB
    • 802.3ad(4) 创建 aggregation groups,并且分享相同的速度和双工配置。在 switch 上也需要配置 802.3ad
    • balance-tlb(5) 根据负载情况,出去的包分散在不同的 slave 上,进来的包只被当前的 slave 接收。这种很少用
    • balance-alb(6) 和 mode5 差不多,只是进来的包也 LB 了。这种也很少用。
  • cat /proc/net/bonding/bond0 监控当前 bond0 的状态
本文总阅读量 次 本站总访问量 次 本站总访客数
Home Archives Categories Tags Statistics