简单介绍 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 xxxhostnamectl 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 installedyum groups listyum groups info xx- yum 和 rpm 有各自的 database,yum 命令会同步更新 rpm 的 database,反之则不会,所以尽量使用 yum
rpm -qc xxx只显示配置文件rpm -ql xxx显示 rpm 中的所有文件yum install yum-utilsrepoquery -l python-keystonerepoquery 可以做到不用安装 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/partitionstune2fs -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显示已载入的 modulesmodinfo xx显示 module 详细信息,包括 module 的.ko 文件信息等。modprobe xx手动载入 modulemodprobe -r xx手动卸载 module
lspci -k显示所有 PCI 设备、以及对应的 kernel moduleyum 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 ,并填写内容(具体内容自己查)
- yum install syslinux
- 准备 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 modesetenforce 1-> enforcing modesestatus -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可以操作时间的方方面面,是统一的时间操作入口
- hwclock
- 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.3adnmcli con add type bond-slave ifname eth1 master mybond0nmcli 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 的状态
最近更新
最新评论