Redhat Linux初体验(2)
这三周都被拐卖到成都培训RHCE,讲真,还是当学生好啊哈哈哈把学习笔记搬上来,关键时刻能做个速查~
献上第二周的笔记。
2018-07-23
日志
- syslog是老日志系统(文件型)、journal是新日志系统(内存型,可以配置保持硬盘,持久化);日志默认保存在
/var/log下;- 除了认证、邮件、周期性作业、纯调试相关日志等类型,大多数日志都保存在
/var/log/messages; - 启动日志保存在
/var/log/boot.log,成功登录日志保存在/var/log/utmp和/var/log/wtmp,对应last;失败登录保存在/var/log/btmp,对应lastb;
- 除了认证、邮件、周期性作业、纯调试相关日志等类型,大多数日志都保存在
- syslog日志系统包含很多设备,如:
- 认证设备:LOG_AUTH,放在
/var/log/secure中; - 邮件设备:LOG_MAIL,放在
/var/log/maillog中; - 周期性作业:LOG_CRON,放在
/var/log/cron中; - 详见
man 3 syslog;
- 认证设备:LOG_AUTH,放在
- syslog日志系统分优先级,详见
man 3 syslog;
- syslog日志配置详见
man 5 rsyslog.conf;日志系统采用异步I/O,以提高硬盘性能;
/etc/rsyslog.conf为syslog的主配置文件,通常,我们通过在/etc/rsyslog.d中新建.conf结尾的文件来配置日志,如:- 新建
/etc/rsyslog.d/debug.conf,新增一行*.debug /var/log/messages-debug; - 重启服务:
systemctl restart rsyslog.service; - 跟踪日志文件:
tail -f /var/log/messages-debug; - 产生日志信息:
logger -p user.debug "Debug Message Test";
- 新建
rsyslog中r代表remote,所以可以将日子保存在远程主机上,在man 5 rsyslog.conf中有详细信息,支持包括SNMP、MYSQL等模块在内的远程传输;
- 使用
journalctl查看journal的日志,详见man 5 journalctl,常用的功能有:-n显示最近的日志;-p显示小于等于指定级别的日志;_PID=显示指定进程的日志;(双击TAB自动补全现实)_UID=显示指定用户的日志;--since 09:30:00显示指定时间后的日志;--until 10:00:00显示指定时间前的日志;_SYSTEMD_UNIT=sshd.service显示指定服务的日志;
- 配置journal,详见
man 5 journald.conf,配置文件为/etc/systemd/journald.conf:- journal持久化日志默认保存在
/var/log/journal,新建该目录mkdir /var/log/journal; - journal的各组件的内置用户均属于
systemd-journal用户组(grep journal /etc/group),因此,/var/log/journal应配置为协作目录:先更改目录属组chown root:systemd-journal /var/log/journal,再添加协作权限chmod 2755 /var/log/journal, - 重启进程
killall -USR1 systemd-journald;
- journal持久化日志默认保存在
系统时间
- 硬件时间
hwclock,对应cmos(bios|uefi)中的一个硬件,因为主板工艺在关机后存在计时差异; - 软件时间在开机时复制硬件时间,软件时间可以手动调整,可以自动同步(网络的时钟服务器),软件时间可以将时间再写入硬件时间;
timedatectl红帽新提供的新工具,时间同步服务在systemctl status chronyd.service中,配置文件在/etc/chronyd.conf中;- 修改
/etc/chronyd.conf的服务器为教学环境的授时服务器后,重启服务systemctl restart chronyd.service,再timedatectl查看发现NTP synchronized为yes; - 很多分布式软件均需要保持精确的系统时间;
网络
- 旧命令
netstat,网络状态统计:-t查看tcp链接,-u查看udp链接;-n用数字表示(不解析域名);-l监听状态的端口(开放端口,/etc/service中可以看到端口对应信息);-p查看哪个个程序调用信息
- 新命令
ss,套接字统计,与netstat基本用法一样;
- 旧命令
ifconfig,不推荐使用;旧命令ip:查看三层:ip addr;查看二层ip link;添加地址ip addr add 172.25.0.22/24 dev eth0(重启后无效,需要改配置文件);
- 新命令
nmcli(命令行)或nmtui(字符图形化),旧命令仅能当前生效,并不能永久生效(需要改配置文件),新命令直接永久生效;- 新命令
systemctl status network是提供后台网络功能的服务,systemctl status NetworkManager是后台维护网络配置的服务,配置文件在/etc/sysconfig/network-scripts/ifcfg-接口,前台提供配置的工具有: nmcli device status查看设备概要信息,nmcli device shwo查看设备详细信息;nmcli connection show "System eth0",查看链接详细信息;- 新建链接:
nmcli connection add con-name home ifname eth0 type ethernet(此时多一个/etc/sysconfig/network-scripts/ifcfg-home文件); - 配置自动连接的静态IP
nmcli connection add con-name work autoconnect yes ifname eth0 type ethernet ip4 172.24.4.11/24 gw4 172.24.4.254(此时多一个/etc/sysconfig/network-scripts/ifcfg-work文件; nmcli delect work删除链接nmcli connection modify work ipv4.addresses 172.25.0.23/24添加IP地址;- 修改地址获取方式
nmcli connection modify home ipv4.method manual ipv4.address 172.25.0.23/24; nmcli connection show --active查看生效链接;nmcli connection up "work"使配置work生效;show命令时,大写是生效的配置,小小是配置文件中未生效的配置;
- 新命令
- 旧命令
hostname,仅查看,配置需要改/etc/hosts;
- 新命令
hostnamectl,新工具直接永久生效;- dns查找顺序:
/etc/hosts->buffer->/etc/resolv.conf hostnamectl set-hostname server.example.com设置主机映射;- 配置存放在
/etc/hostname;
- dns查找顺序:
归档
- 使用命令
tar -cvf xxx.tar file1 file2 file3(加.tar是归档的命名习惯,-c创建、-v显示详细信息、-f指定文件名);
- 常用的压缩软件有
bzip2、xz、gzip,这几个压缩软件默认行为都会删除原文件;
zcat是gzip的配套工具,用来在不解包的情况下查看文件内容;gunzip等于gzip -d,详见man gzip;bzcat是bzip2的配套工具,详情见man bzip2;xzcat是xz的配套工具,详见man xz;
tar可以直接调用其他压缩软件来做归档时压缩,-j调用bzip2、-J调用xz、-z调用gzip:tar -cvjf xxx.tar file1 file2 file3tar -xvf xxx.tar -C,x解压、v现实详细信息、f指定文件名、-C指定解压位置,解压不需要指定压缩程序,tar会自行判断;- tar默认行为会在用户指定绝对路径时移除根(不然解压时可能会覆盖文件),选项
-P可以保持根目录;
- 加密拷贝
scp -r root@server:/etc/ssh /home/student/serverbackup从server上取目录到本地,使用-v显示详细信息;
rsync远程同步文件,-a传输前归档:rsync -av root@server:/var/log/maillog /servermaillog;rsync与scp最大的区别是,rsync是增量传输,scp是完全传输;
2018-07-24
软件安装
- rpm复制后端安装编译等工作,yum负责用户交互及解决依赖关系,是rpm的前段工具;
rpm常用命令:man 8 rpm查看rpm数据库等帮助信息;rpm -qa | wc -l统计已安装个数;rpm -q xxx查询已安装包名;rpm -qi xxx查询已安装包详细信息;rpm -ql xxx查看包在安装时具体安装了哪些文件;rpm -qc xxx查看配置文件;rpm -qd xxx查看文档文件;rpm -qf filename查看指定文件属于哪个程序;- 已安装的包在rpm数据库
/var/lib/rpm中;rpm -qpi xxx命令也可以看到未安装包,同样的rpm -qpl/qpc/qpd命令可以看到该包的所有文件、配置文件、文档文件; rpm -qR xxx查询依赖;
- 建立本地
yum仓库(redhat和centOS有mini/everything等版本,而epel的包比everything还多,通常用于自建仓库):/etc/yum.conf是yum的配置文件,/etc/yum.repos.d是yum仓库的配置目录;- 下载
rhel.xxx.iso,在linux下.iso是个文件系统,需要挂载:mount xxx.iso /mnt;(通过file xxx.iso可以显示文件系统详情) - 在
/etc/yum.repos.d下新建dvd.repo,写入:1
2
3
4
5
6
7
8
9
10# 必须且应保证主机上唯一
[dvd]
# 非必须
name = dvd
# 必须
baseurl = file:///mnt
# 开启本仓库
enable = 1
# 是否需要校验,通常官方光盘不需要
gpgcheck = 0 yum repolist查看仓库信息,多了一个我们新建的dvd;- repolist读取的仓库信息缓存在
/var/cache/yum下; - yum自动添加仓库:
1
yum -config-manager --add-repo=http://classroom.example.com/content/rhel7.0/x86_64/dvd
- 新建的仓库名称很长,还需要手动添加
gpgcheck=0,推荐使用前一种方法; yum -config-manager --enable/disable可以用来禁用/启用仓库,仓库全名使用yum repolist列出;
yum常用命令:yum list列出所有软件,按名字查找使用yum list xxx(软件名完全匹配)可以使用通配符,如yum list http*;yum search搜索软件,匹配包括简介信息;yum info tcpdump查看软件详细信息;yum group install以组为单位进行安装;yum history显示yum历史操作汇总信息,加list命令查看详细信息,再使用list中的ID可以附加undo和redo等命令进行撤销或重做操作;yum erase删除;yum provide查询提供指定命令、文件的软件包;
文件系统
- Linux仅允许一个主文进系统,一个根目录
/(入口),其他文件系统需要挂载在主文进系统之下,统一从根目录/进入;(Windows允许多个跟目录,通过盘符区分),参见man 8 mount; - 上一节中的挂载:
mount xxx.iso /mnt,卸载:umount /mnt; df -h查看文件系统详细信息,du filename查看文件占硬盘大小,du -s dirname查看目录占用硬盘大小;blkid查看块设备的属性;- 临时挂载、卸载使用
mount、umount;- 对于无法直接卸载的目录,使用
lsof /xxx或fuser /xxx查看哪个用户哪个进程在使用,结束该进程后就可以卸载;
- 对于无法直接卸载的目录,使用
- 永久挂载,配置
/etc/fstab:- 使用
/xxx/xxx.iso /mnt iso9660 defaults 0 0挂载一个永久文件系统; - 意为挂载xxx.iso文件;
- 挂载点为
/mnt; - 文件系统类型为iso9660(这个信息可以使用
mount xxx.iso /mnt临时挂载文件后使用mount命令查看到); defaults为默认选项(rw, suid, dev, exec, auto, nouser, async);0为dump选项,不允许转存;0为非启动文件系统且不需要检查;
- 使用
- 硬链接
ln:- Linux硬盘管理一个扇区的最小单位为4k,使用
mkfs格式化分区时,系统会将扇区分为存储inode或存储block; - inode,即文件索引,存储文件元数据,通过
ll -i xxx查看到除文件名以外的信息全部是存储在inode中的,权限后的数字即block被连接的次数,使用stat xxx查看元信息,其中Modify是block修改时间,Change是元数据修改时间; - block,存储文件内容;
- 使用
ln xxx yyy后,通过ll -i xxx yyy发现两个文件的inode值相同,即硬链接只复制了元数据; - 硬链接不依赖原文件,修改一处另一处也修改,一个block中的文件仅有一个inode值;
- 硬链接删除操作删除的是inode连接,只有当连接数为0时,才删除文件回收block;
- 硬链接不能跨文件系统,因为inode有可能冲突;
- 硬链接不能对目录使用;
- 另外,空目录连接次数为2,除了自己以外,还有
.连接了它;如果有子目录,则连接数继续+1,即被子目录的..连接;
- Linux硬盘管理一个扇区的最小单位为4k,使用
- 软链接
ln -s,相当于Windows的快捷方式:- 软链接是指向源文件的路径名(硬链接指向原文件的block,即复制inode,软链接的大小刚好是目标文件的路径长度),因此,软链接的源一定要使用绝对路径;
- 软链接可以跨文件系统,因为是路径;
- 软链接可以对目录使用;
- 软链接的原文件必须存在,如果原文件被删除,则软链接失效;
- 文件查找
locate:- 基于文件名进行模糊查找;
- 维护一个inode与文件名的映射,存在数据库
/var/lib/mlocate/mlocate.db中,该数据库默认一天更新一次,即新建的文件不会存在于数据库中,也就找不到; - 使用
updatedb更新数据库; - 不会查找
/tmp中的任何文件; - 不能定义在那个目录中去找;
- 文件查找
find:- 实时查找,可以基于文件的任何元属性进行查找,如文件名、修改日期、访问时间等;
-amin n最近n分钟被访问的文件,其中-n为n分钟以内、+n为n分钟以外;-anewer file找出所有访问时间比file大的文件;- 命令包含
time的单位为天; -empty查找空文件;-links n查找硬链接次数超过n的文件;find后可以接动作,如删除动作find . -empty -delete;find / -perm -2000查找的是特殊权限2,仅查找四位权限码第一位;find / -perm /7000查找的是所有特殊权限;find / -nouser查找失去用户的文件(不安全,因为下其他用户有可能占用该inode,造成权限漏洞);find /var -user root -a -group wheel,其中-a可以省略,默认and,也可以用-o;find /var -size -5k -exec ls -dlh '{}' \;,表示小于等于4k的文件;find /root -size -6M -a -type f -exec tar cvzfP /tmp/5m.tar.gz '{}' \;,将/root下所以小于6M的文件查找并打包放在/tmp下;
2018-07-25
系统批量部署
- 安装kvm虚拟机时,对于Intel的CPU,支持vmx的CPU可以进行硬件虚拟化,需要在BIOS中保证开启vmx及nx;
- Kickstart批量部署:
%pre安装软件包前的脚本;%package安装软件包;%post安装软件包后的脚本;%end脚本结束标记;
- 使用
virt-manager管理虚拟机:- 将server重启,使用
F12后^B中断正常启动,选择iPXE - 输入
gPXE> autoboot执行PXE启动; - 将
ks=http://172.25.4.10/ks-config/ks.cfg输入到行尾(行尾为... quit); - 实验完成后,使用
rht-vmctl fullreset server将虚拟机完全重置;
- 将server重启,使用
正则表达式
grep为全局(对文件)正则表达式搜索,egrep为使用扩展正则表达式搜索,扩展的更强大,fgrep为固定格式搜索(即不使用正则表达式,更快);
- 注意:
\<词首、\>词尾,等同于\b;- 正则表达式也可以使用
[[:digit:]]代替[0-9],[^]取反,参考man 7 glob和man 7 regex; - 正则表达式的测试可以使用
/usr/share/dict/words; wc -l可以统计行数;()表示当做整体,通常在扩展正则表达式中使用,非扩展的需要转移括号;-v表示取反,即显示不匹配的行;-i不区分大小写;-A n匹配行后显示n行,-B n匹配行前显示n行,-C m, -n匹配行前显示m行后显示n行,
计划任务
at适合定时执行仅一次的任务:- 使用
at计划任务前,使用systemctl start atd启动at后台服务; at是atd的前端工具,使用^d提交;atq是监控任务的工具;atrm删除任务;- 对于某些用户,不希望他执行
at任务,可以将其用户名写入/etc/at.deny; - 对于某些用户,希望他执行
at任务,可以将其用户名写入/etc/at.allow;at命令先查找allow,若没找到则继续在deny中查找,若仍未找到,则允许执行(默认允许);
- 使用
cron适合周期性执行的任务:cron是crond的前端工具;cron分为用户cron(如数据备份)和系统cron(如locate命令使用的数据库更新);crontab是用户cron的前端工具,系统cron在/etc/crontab中,cron的deny/allow和at的行为一样;- 通过
crontab -e编辑当前用户的计划任务,写入9-11/2 * * * * mktemp /tmp/XXXX表示每个小时的第9到11分钟步长为2的执行作业,即9、11分钟各执行一次; crontab -l列出当前用户的计划任务;crontab -r删除当前用户的计划任务;- 系统cron在
/etc/cron.d中,0hourly存储立即执行的任务,raid-check存储阵列检查相关任务,sysstat存储系统状态相关任务; - 其他文件夹如
.daily、.hourly等文件夹存放按日、按小时执行的作业;
进程优先级
- 优先级高的进程能够获得更多CPU资源:
- TOP的
PR和NI字段,即系统优先级和用户配置优先级; - 优先级取值为-100
39,系统优先级为-100-1,用户优先级为0~39; NI取值为-20~19;PR值为rt的表示用户无法调整的(PR没有小于0的,小于0即显示rt);PR-NI=20
- TOP的
nice后接命令调整该命令的优先级,如nice --20 dd if=/dev/zero of=/dev/null(-代表省略的选项-n)
renice后接进程PID可以重新调整该进程优先级;,如renice -5 12336;
top命令也可以调整优先级,使用r命令再输入PID,确认后输入优先级值即可;
权限访问控制列表(权限ACL)
- ACL控制粒度比POSIX的文件权限控制model更细;
- 在
ll显示的文件权限中如-rwx-r-x-r-x.,其中的.即表示未添加访问控制; - 使用
getfacl xxx查看权限细节 - 使用
setfacl给文件设置ACL权限:setfacl -m group::r xxx(修改权限为r--),setfacl -x group::- xxx(删除权限为---),即也可以用于给文件设置model权限;- 比如对于
-rw-------. root root的文件,user是不能读取的,因为user在model权限中匹配的是最后三位---(既不是root用户也不是用户组的其他权限),此时无法通过用户和组的model来设置文件权限; - 具体设置方法参见
man 1 setfacl; - 如
setfacl -m user:r xxx给user用户添加ACL读权限、setfacl -m user:rw xxx给user用户ACL添加读写权限、setfacl -m m::r修改ACL掩码将user权限改为读、set -x user xxx删除用户ACL权限 setfacl -m g:user:rw xxx给组添加权限,setfacl -x g:user xxx给组删除权限;setfacl -b xxx删除所有ACL权限;setfacl -m user:rwx xdir给目录添加rwx权限,若想要该目录下的所以新建文件均具有ACL权限,则应写为setfacl -m d:user:rwx xdir;需要注意的是d参数对目标目录无效,仅对目标目录下的子文件及子目录生效,要修改目标目录的ACL,仍应使用没有d的命令,即setfacl -m user:rwx xdir;
2018-07-26
SELinux
- model模型的权限控制针对用户和文件,而SELinux针对程序和文件,SELinux是为了避免人为错误(配置错误)而设计的;
- SELinux对程序的标签可以用
ps uZ 7842显示出来,对文件的标签可以用ll -dZ /tmp显示出来;
- 举例:
- httpd的标签为
system_u:system_r:httpd_t:s0; - /tmp的标签为
system_u:object_r:tmp_t:s0; - /var/www/html的标签为
system_u:object_r:httpd_sys_content_t:s0;
- httpd的标签为
- 安装
setools-console可以查看SELinux规定的进程对目录做的操作:sesearch -A -s httpd_t -t tmp_t,可以看到allow httpd_t tmp_t : dir开头的两条记录,其中权限大的一条为Permissive模式(临时关闭SELinux)下的权限,权限小的一条为Enforce模式下的权限(即正常的SELinux开启时,可以通过getenforce目录查看);
- SELinux的开机启动配置在
/etc/selinux/config中,要关闭SELinux应配置为SELinux=disabled,使配置生效需要重启;
- 在关闭SELinux后,用
-Z选项查看新建的文件是没有SELinux标签的,在关闭SELinux后新建(或修改并保存)文件,会在该目录下生成一个名为.autorelabel的文件,意味着当再次开启SELinux并启动系统时,系统会再次打标签,系统会自动在打标签后再次重启;
setenforce可以临时修改模式,通常供调试时使用;
semanage管理SELinux策略:- 其中
fcontext子命令管理文件上下文标签; semanage fcontext -l | grep admin_home_t列出标签为admin_home_t的条目,其中默认条目/root(/.*)?只能改不能删;semanage fcontext -a -t admin_home_t /var/www/html/(/.*),将/var/www/html下所有文件改为admin_home_t标签;restorecon -vR /var/www/html/,递归的重置标签,包括目录本身及子目录semanage fcontext -a -t admin_home_t '/var/www/html/(/.*)?',修改包括/var/www/html本身及子目录;semanage boolean -l | grep ftpd查看ftp相关功能设置(getsebool查看的是内存中的运行时配置);- 开启FTP匿名上产需要修改
semanage bool --modify --on ftpd_anon_write,semanage boolean --modify --on ftp_home_dir,chomd o+w .,chcon -t public_content_rw_t .等很多策略,因为SELinux默认认为FTP匿名上传行为不安全;其中setsebool不加-P用于临时修改标签,-P用于永久修改标签;若要排查问题可参考系统日志tail -n 50 /var/log/message;
- 其中
SELinux的默认配置已经能够很好的运行,通常不需要重新配置,除非确定需要的功能确实是因为SELinux安全策略引起的,再进行修改,推荐始终打开SELinux功能以提高系统安全性;
网络用户
- 安装
yum install authconfig-gtk.x86_64,使用authconfig-gtk设置用户类型,- 选择LDAP,LDAP搜索基DN为
dc=example,dc=com(范围小的写前面)LDAP sever为classroom.example.com; - 选择TLS加密连接,在CA证书中写证书地址即可;
- 认证模式为Kerberos密码认证,Realm为
EXAMPLE.COM,KDCs和管理服务器均为classroom.example.com,下面两个DNS解析主机及DNC定位KDCs不选;应用配置 - 使用
getent passwd发现新加了ldapuser*账号,使用ssh ldapuser4@localhost测试登录,默认密码为kerberos; - 使用
getent passwd ldapuser0查看网络用户条目(也可以查看本地用户,如getent passwd root)
- 选择LDAP,LDAP搜索基DN为
autofs按需挂载(mount必须是root用户,且为永久挂载):- 安装
yum install -y autofs.x86_64,查看rpm -ql autofs | grep .service发现有autofs有service;帮助参见man auto.master; - 开机运行并启动:
systemctl enable autofs.service && systemctl start autofs.service; - 编辑
/etc/auto.master,添加一行/home/guests /etc/auto.ldap - 新建并编辑
/etc/auto.ldap(参考auto.misc,使用:sp /etc/auto.master或vim -o /etc/auto.{ldap,misc}分屏对照编辑更方便):1
2
3
4# *与&是一对内容对应的占位符
* -fstype=nfs,rw,sync classroom.example.com:/home/huests/&
# 若要指定用户及目录应写为
ldapuser4 -fstype=nfs,rw,sync classroom.example.com:/home/huests/ldapuser4 - 此时在使用
ssh ldapuser4@localhost登录即可按需挂载ldapuser4的home目录
- 安装
分区及格式化
- MBR分区(即微软的DOS),硬盘的的第一分区(盘面最外面)为MBR分区,存储主引导记录(如Linux的grub2.0 448字节 )和分区表(64字节,其中,一条分区记录要占用16字节,即最多只能分四个主分区),通常最后一个分区作为扩展分区,用来做逻辑分区,而逻辑分区表不再MBR中,因此没有限制(MBR最大支持2T的硬盘):
1
2
3
4
5
6
7
8
9
10
11
12mbr
├── P1
├── P2
├── P3
└── extend(4)
├── L5
├── L6
├── L7
├── L8
├── L9
├── L10
└── L11
lsblk查看硬盘分区,-p显示完全路径,fdisk -l列出分区信息,分区完成后,使用partprobe通知系统重新读取分区表:fdisk /dev/vdb开始分区;fdisk对MBR支持更好;
- GPT分区(GUID Partition Table),LBA0为保护MBR区,LBA1为主GPT头,LBA2-34的每个LBA存四个条目,共128个条目;
gdisk对GPT支持更好
- 上面仅是分区,现在的分区系统还不能使用,需要格式化,给每个分区分配UUID,使用
blkid查看;mkfs格式化为文件系统用,mkfs /dev/vdb1;- 临时挂载
mount /dev/vdb1 /mnt; - 重挂
mount -o remount,ro,nosuid /mnt,即设备不断线仅改变参数; - 永久挂载配置
/etc/fstab(man 5 fstab查看挂载及文件系统信息),使用blkid查看UUID,写入配置:1
2
3
4# 硬盘
UUID=xxx /mnt xfs default 0 0
# 虚拟内存
UUID=xxx swap swap default 0 0 - 使用
df -h或fdisk -l查看硬盘挂载结果; mkswap格式化为虚拟内存用,挂载/写在虚拟内存swapon /dev/vdb5、swapoff /dev/vdb5;- 使用
top或free查看Swap内存挂载结果;
- 分区必须是连续的存储空间,而卷没有这种要求:
- 分区不能跨硬盘,而卷可以;
- 分区不能动态扩展,而卷可以;
- 逻辑卷可以做快照;
- 物理分区->pv(物理卷)->vg(卷组)->lv(逻辑卷,当做逻辑卷或虚拟硬盘)->mkfs->mount
- 创建物理卷
pvcreate /dev/vdb7 /dev/vdc5:pvs或pvscan查看概要,pvdisplay /dev/vdb7查看详情;-s指定PE(PhysicalExtent)大小(默认4M);
- 创建卷组
vgcreate vg0 /dev/vdb7 /dev/vdc5vgs查看卷组;vgremove vg0删除卷组vgcreate -s 8m vg0 /dev/vdb7 /dev/vdc5按8M指定PE大小
- 创建逻辑卷
lvcreate -l 512 -n lv0 vg0lvs查看逻辑卷概要;-n指定卷名-l指定分配到PE个数;-L指定分配的空间;
- 此时
lsblk可以看到逻辑卷了,mkfs.xfs格式化mkfs.xfs /dev/vg0/lv0或mkfs.xfs /dev/mapper/vg0-lv0;
- 创建挂载点
mkdir -p /lv/{lv0,lv1},在vim /etc/fstab中的配置使挂载永久生效;
- 扩展逻辑卷:
- 扩展前
vgs查看卷组的空闲,扩展使用lvextend -L +2G /dev/vg0/lv0,df -hT查看文件系统信息,而xfs支持自动识别增重的空间,使用xfs_growfs /dev/vg0/lv0; - 若卷组空间不够,硬向卷组添加空间(插硬盘,分区并格式化);
- 创建pv
pvcreate /dev/vdc6 /dev/vdd5; - 扩展vg
vgextent vg0 /dev/vdc6 /dev/vdd5; - 扩展lv
lvextent -L +10G /dev/vg0/lv1,若为ext文件系统使用resize2fs /dev/vg0/lv1重新识别;
- 扩展前
2018-07-27
启动排错
- 启动相关项位于
/boot,vm开头的文件为内核文件,相关配置文件位于/etc/grub.d;
- 查看运行级别
runlevel,共0~6七个运行级别,类似于Windows“安全模式、带网络的安全模式等”,不同的启动模式启动的功能不一样,正常启动模式为3和5:runlevel的返回值第一位为上次运行级别,第二位为本次运行级别;- 0为关机,即什么都不启动;
- 1为单用户模式(root用户),即救援模式(类似Windows的安全模式);
- 2/4,未定义,都认为是3模式;
- 3为正常命令行启动,不提供图形化界面;
- 5为正常图形化启动,提供图形化界面及命令行界面(
ctl+alt+F2~6) - 6位重启(先结束所有进程再启动);
- 使用
init n即可执行相应的运行级别,如init 6即重启; - 以上是为了兼容Redhat 6,在7版本通常使用
systemctl [target]
systemctl目标:systemctl poweroff或直接执行poweroff,查看poweroff可知/usr/sbin/poweroff -> ../bin/systemctl,即systemctl poweroff.target;reboot与上一条一样;- 目标存放在
/usr/lib/systemd/system,使用ll *.target查看,发现Redhat 7的目标更加细致; systemctl -t补全可以看到目标容器,将目标分为10类,类似分类服务,如查看vim NetworkManager.service中,有配置Wants=network.target表示NetworkManager服务应加入network目标容器;- 临时切换目标
systemctl isolate multi-user.target(3级别)、systemctl isolate graphical.target(5级别); - 查看默认目标
systemctl get-default; - 设置默认目标
systemctl set-default multi-user.target; - 刚启动时也可以设置目标,选择Linux版本时按
e键,在linux16行行尾(物理机,虚拟机删到ro),输入systemd.unit=multi-user.target,按^x提交,系统启动就进入正常命令行模式了;
修复密码
openssl rand -hex 16产生16位随机数,以十六进制输出;openssl rand -base64 16 | passwd --stdin root,此时不知道root密码了:- 选择Linux版本时按
e键,在虚拟机环境linux16删到ro,输入rd.break(打断正常启动),按^x提交,进入交换根(内存根目录); - 查看挂载情况
mount | grep ^/,发现只读ro,重新挂载为读写mount -o remount,rw /sysroot - 临时切换根目录
chroot /sysroot,为了恢复环境(如补全等功能); - 查看
ls -lZ /etc/shadow,在此模式下发现没有标签(即SELinux) echo 'redhat'| passwd --stdin root- 通知SELinux重建标签
touch /.autorelabel - 退出临时根
exit,退出中断exit,继续启动过程,SELinux启动会重新打标签,自动重启后正常;
- 选择Linux版本时按
修复文件系统
fstab的永久挂载信息有误:- 选择Linux版本时按
e键,在虚拟机环境linux16删到ro,输入systemd.unit=emergency.target(rescue也可以,打断正常启动),按^x提交,进入维护模式; - 查看关注情况
mount | grep ^/,发现只读ro,重新挂载为读写mount -o remount,rw /; - 修改
/etc/fstab,删除错误信息后reboot,系统正常;
- 选择Linux版本时按
启动引导程序故障
grub错误,启动Linux立刻报错:- 个人电脑:设备断电,将硬盘换到正常设备,挂载并
chroot;服务器:使用救援光盘(虚拟机用virt-manager挂载光驱并加载下载好的镜像); - 启动按
esc进入启动项,选择光驱启动; - 选择
rescue xxx,选择continue; - 临时切换根目录
chroot /mnt/sysimage; vim /etc/grub2.cfg查看配置找出错误,或生成默认配置覆盖grub2-mkconfig > /etc/grub2.cfg;
- 个人电脑:设备断电,将硬盘换到正常设备,挂载并
控制服务及守护进程
- 守护进程可以在
/usr/lib/systemd/system中通过ll -d *d.*大概查看;
- 使用
systemctl控制守护进程及服务,也可以控制系统运行级别;
- 系统相关功能的启动及服务的启动都是通过systemd的system和service manager管理;
- Redhat认为,守护进程是一直在后台执行的作业,服务是守护进程的集合;
- 进程ID为1的为systemd的进程,
systemctl是systemd的前端命令行;systemctl查询所有单元;systemctl --type=service查看服务类单元;systemctl start|stop xxx.service临时启停服务;systemctl enable|disable xxx.service永久起停服务;
- 对于目标(target):
- 其中的emergency初始化内核(
/boot中vm开头)、初始化内存(/boot中initramfs开头)、初始化系统根目录(挂载到/并为只读挂载); - 其中的rescue模式为单用户,初始化基本的系统环境;
- multi-user模式提供字符接口;
- graphical模式提供字符及图形化接口;
- 目标可以包含其他目标,使用
systemctl list-dependencies graphical.target查看目标间的依赖关系;
- 其中的emergency初始化内核(
配置IPv6
- 回顾
NetworkManager:- 一个device就是一个网络接口;
- 一个连接就对应一个配置文件(连接是为设备做的);
- 一个设备可以对应多个连接;同一个时刻一个设备只允许一个连接生效;
- 连接的永久配置在
/etc/sysconfig/network-scripts/ifcfg-name; nmcli用来创建或编辑连接配置;
- IPv6有128位,缩写为8组十六进制数字,每组的引导0可以省略,连续的0组可以省略一次,
XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX;::1/128 localhost,回环地址;:: 0.0.0.0,未分配;::/0 0.0.0.0/0,匹配IPv4的所有IP地址;2000::/3,全局单播地址;ffe0::/8,多播地址;fe80::/64,链路多播;fe80::/64,链路本地单播;fddb:fe2a:ab1e::c0a8:1/64
- IPv6故障排查:
ping6 fddb:fe2a:ab1e::c0a8:fe,IPv6的ping命令;tracepath6 fddb:fe2a:ab1e::c0a8:fe,追踪路由;traceroute -6 fddb:fe2a:ab1e::c0a8:fe,追踪路由的另一种写法;ip -6 route,IPv6的路由;
- 试验
lab ipv6 setup:- 先查看所有网卡配置
ip a; - 创建连接
nmcli connection add con-name eno1 autoconnect yes ifname eno1 type ethernet; - 配置连接,使下次重启生效
nmcli connection modify eno1 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.254" ipv6.method manual ipv6.addresses "fddb:fe2a:ab1e::c0a8:64/64 fddb:fe2a:ab1e::c0a8:fe" - 是配置立即生效
nmcli conncetion up eno1; - 检查路由
ip route和ip -6 route; - ping测试
ping -I eno1 192.168.0.254和ping6 -I eno1 fddb:fe2a:ab1e::c0a8:fe; - 跟踪IPv6路由
tracepath6 fddb:fe2a:ab1e::c0a8:fe或traceroute -6 fddb:fe2a:ab1e::c0a8:fe;
- 先查看所有网卡配置
链路聚合与软件网桥
- 将多个物理网卡合并为一个逻辑网卡,做负载均衡、故障转移、增加吞吐量;
- 链路聚合
lab teambridge setup;- 先查看所有网卡配置
ip a; - 新建team0连接
nmcli connection add con-name team0 autoconnect yes ifname team0 type team; - 修改team0连接的运行法则
nmcli connection modify team0 team.config '{"runner": {"name": "activebackup"}}'(运行法则参考man teamd.conf); - 查看的team0连接的运行法则是否配置正确
nmcli connection show team0; - 给team0连接添加物理接口:
1
2nmcli connection add con-name team0-port1 autoconnect yes ifname eno1 type team-slave master team0
nmcli connection add con-name team0-port2 autoconnect yes ifname eno2 type team-slave master team0 - 查看添加的物理接口:
nmcli connection show; - 为team0连接配置IPv4:
nmcli connection modify team0 ipv4.method manual ipv4.address "192.168.0.100/24 192.168.0.254"; - 启动team0连接:
nmcli connection up team0; - 测试连接
ping -I team0 192.168.0.254; - 检查运行聚合连接team0的运行状态:
teamdctl team0 state,可以看到只有一个接口处于活动状态,则另一个接口处于预备状态; - 测试关闭物理接口:
nmcli device disconnect eno1(旧命令ifdown eno1),备用接口立刻上线; - 配置在
/etc/sysconfig/network-scripts/ifcfg-team0、/etc/sysconfig/network-scripts/ifcfg-team0-port1、/etc/sysconfig/network-scripts/ifcfg-team0-port2中;
- 先查看所有网卡配置
- 软件网桥常用于虚拟化平台,在物理机上
brctl show查看:- 先查看所有网卡配置
ip a; - 删除上一节的配置:
1
2
3nmcli connection delete team0
nmcli connection delete team0-port1
nmcli connection delete team0-port2 - 新建br0网桥:;
- 给br0网桥添加物理接口:
1
2nmcli connection add con-name br0-port1 autoconnect yes ifname eno1 type bridge=slave master br0
nmcli connection add con-name br0-port2 autoconnect yes ifname eno2 type bridge-slave master br0 - 给br0网桥配置IPv4:
nmcli connection modify br0 ipv4.method manual ipv4.addresses "192.168.0.100/24 192.168.0.254"; - 查看链接
nmcli connection show; - 启动端口:
1
2nmcli connection up br0-port1
nmcli connection up br0-port2 - 测试连接:
ping -I br0 192.168.0.254; - 若连接不通,重启网络服务:
systemctl restart network.service,若仍然不通,重启虚拟机;
- 先查看所有网卡配置
nmcli的配置建议参考man 5 nmcli-example,范例丰富;

