CentOS 介绍 linux linux centos kvm lvm systemd boot 发布时间: 2014-04-05 更新时间: 2025-10-19 总字数: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 的状态 linux linux centos kvm lvm systemd boot 最近更新 VLM 与 VLA:从理解世界到与世界互动 TCP 连接参数优化详解 GNU 链接器 ld 命令介绍 LMDeploy RustFS:兼容 S3 协议的对象存储服务 Envoy XDS 介绍 LLM 大模型微调方法简介 SGLang 部署大模型 SeaweedFS 介绍 Python 中的 RLE 介绍和加速代码 相关文章 CentOS/Linux Install zlib-devel RPM Package Centos设置静态IP及修改Centos配置文件 You need a C++ compiler for C++ support sort 排序命令 IP地址0.0.0.0是什么意思 date 使用介绍 Linux 中个目录说明 init Linux 启动级别:0,1,2,3,4,5,6 Apache httpd 安装使用总结 配置动态路由RIP 最新评论