CentOS 介绍 linux linux centos kvm lvm systemd boot 发布时间: 2014-04-05 更新时间: 2023-12-03 总字数: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的状态 linux linux centos kvm lvm systemd boot 最近更新 Go Trace 介绍 Go pprof 性能分析工具 SSHFS 使用 SSH 协议挂载 Linux 文件系统 Runit 使用介绍 Pytest 使用介绍 timer 定时器 Linux SSSD 身份验证、授权服务介绍 Open Build Service(OBS) Ubuntu deb 包构建工具 ARM 介绍 腾讯云介绍 相关文章 CentOS/Linux Install zlib-devel RPM Package Centos设置静态IP及修改Centos配置文件 You need a C++ compiler for C++ support top 命令的参数理解 sort 排序命令 IP地址0.0.0.0是什么意思 date 使用介绍 Linux 中个目录说明 init Linux 启动级别:0,1,2,3,4,5,6 Apache httpd 安装使用总结 最新评论