CentOS 介绍 linux linux centos kvm lvm systemd boot 发布时间: 2014-04-05 更新时间: 2024-09-22 总字数:7137 阅读时间:15m 作者:谢先斌 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 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 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 最近更新 FastAPI: Python Web 框架 Pydantic: Python 验证库 Stainless:基于 OpenAPI spec 生成API SDK(Python、Nodejs等) AI Prompts 介绍 ollama 本地运行大型语言模型 开发中常见的数据格式 open webui: AICHAT 前端 brotli 压缩算法介绍 ptcpdump: 基于 eBPF 的抓包神器,支持抓取进程、容器或 Pod 的网络流量 Cloudflare R2 对象存储 相关文章 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 最新评论