CentOS 介绍

发布时间: 更新时间: 总字数:7292 阅读时间:15m 作者: 分享 复制网址

简单介绍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
  • pv
    • pvcreate
    • pvdisplay
    • pvs
  • vg
    • vgcreate
    • vgdisplay
    • vgextend 加storage到vg中
    • vgs
  • lv
    • lvcreate
    • lvdisplay
    • lvextend
    • lvresize
    • lvreduce 会导致自动短暂地被unmouted一下
    • lvs
  • lv位于 /dev/vgname/lvname
  • device mapper(dm)是kernel寻找storage device的统一入口,被LVM、RAID等使用了。所以/dev/vgname/lvname仅仅是个link

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

systemd

  • systemd管理Units,service只是其中一种unit。systemctl -t help查看systemd能管理的所有unit类型
  • /usr/lib/systemd/system 存放默认的unit files
  • /etc/systemd/system 覆盖默认值
  • systemctl status xxx
  • systemctl start xxx
  • systemctl enable xxx
  • systemctl list-dependencies xxx 显示xxx的依赖
  • systemctl mask xxx 让xxx不能被start
  • systemctl --all 显示所有的(包括inactive的)
  • systemctl get-default 查看当前default target
  • 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
本文总阅读量 次 本站总访问量 次 本站总访客数