Redhat Linux初体验(2)

这三周都被拐卖到成都培训RHCE,讲真,还是当学生好啊哈哈哈把学习笔记搬上来,关键时刻能做个速查~

献上第二周的笔记。

2018-07-23

日志

  1. syslog是老日志系统(文件型)、journal是新日志系统(内存型,可以配置保持硬盘,持久化);日志默认保存在/var/log下;
    • 除了认证、邮件、周期性作业、纯调试相关日志等类型,大多数日志都保存在/var/log/messages
    • 启动日志保存在/var/log/boot.log,成功登录日志保存在/var/log/utmp/var/log/wtmp,对应last;失败登录保存在/var/log/btmp,对应lastb
  1. syslog日志系统包含很多设备,如:
    • 认证设备:LOG_AUTH,放在/var/log/secure中;
    • 邮件设备:LOG_MAIL,放在/var/log/maillog中;
    • 周期性作业:LOG_CRON,放在/var/log/cron中;
    • 详见man 3 syslog
  1. syslog日志系统分优先级,详见man 3 syslog
  1. syslog日志配置详见man 5 rsyslog.conf;日志系统采用异步I/O,以提高硬盘性能;
  1. /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"
  1. rsyslog中r代表remote,所以可以将日子保存在远程主机上,在man 5 rsyslog.conf中有详细信息,支持包括SNMP、MYSQL等模块在内的远程传输;
  1. 使用journalctl查看journal的日志,详见man 5 journalctl,常用的功能有:
    • -n显示最近的日志;
    • -p显示小于等于指定级别的日志;
    • _PID=显示指定进程的日志;(双击TAB自动补全现实)
    • _UID=显示指定用户的日志;
    • --since 09:30:00显示指定时间后的日志;
    • --until 10:00:00显示指定时间前的日志;
    • _SYSTEMD_UNIT=sshd.service显示指定服务的日志;
  1. 配置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

系统时间

  1. 硬件时间hwclock,对应cmos(bios|uefi)中的一个硬件,因为主板工艺在关机后存在计时差异;
  2. 软件时间在开机时复制硬件时间,软件时间可以手动调整,可以自动同步(网络的时钟服务器),软件时间可以将时间再写入硬件时间;
  3. timedatectl红帽新提供的新工具,时间同步服务在systemctl status chronyd.service中,配置文件在/etc/chronyd.conf中;
  4. 修改/etc/chronyd.conf的服务器为教学环境的授时服务器后,重启服务systemctl restart chronyd.service,再timedatectl查看发现NTP synchronized为yes;
  5. 很多分布式软件均需要保持精确的系统时间;

网络

  1. 旧命令netstat,网络状态统计:
    • -t查看tcp链接,-u查看udp链接;
    • -n用数字表示(不解析域名);
    • -l监听状态的端口(开放端口,/etc/service中可以看到端口对应信息);
    • -p查看哪个个程序调用信息
  1. 新命令ss,套接字统计,与netstat基本用法一样;
  1. 旧命令ifconfig,不推荐使用;旧命令ip:查看三层:ip addr;查看二层ip link;添加地址ip addr add 172.25.0.22/24 dev eth0(重启后无效,需要改配置文件);
  1. 新命令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文件);
    • 配置自动连接的静态IPnmcli 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命令时,大写是生效的配置,小小是配置文件中未生效的配置;
  1. 旧命令hostname,仅查看,配置需要改/etc/hosts
  1. 新命令hostnamectl,新工具直接永久生效;
    • dns查找顺序:/etc/hosts->buffer->/etc/resolv.conf
    • hostnamectl set-hostname server.example.com设置主机映射;
    • 配置存放在/etc/hostname

归档

  1. 使用命令tar -cvf xxx.tar file1 file2 file3(加.tar是归档的命名习惯,-c创建、-v显示详细信息、-f指定文件名);
  1. 常用的压缩软件有bzip2xzgzip,这几个压缩软件默认行为都会删除原文件;
  1. zcatgzip的配套工具,用来在不解包的情况下查看文件内容;gunzip等于gzip -d,详见man gzip
    • bzcatbzip2的配套工具,详情见man bzip2
    • xzcatxz的配套工具,详见man xz
  1. tar可以直接调用其他压缩软件来做归档时压缩,-j调用bzip2、-J调用xz、-z调用gzip:
    • tar -cvjf xxx.tar file1 file2 file3
    • tar -xvf xxx.tar -Cx解压、v现实详细信息、f指定文件名、-C指定解压位置,解压不需要指定压缩程序,tar会自行判断;
    • tar默认行为会在用户指定绝对路径时移除根(不然解压时可能会覆盖文件),选项-P可以保持根目录;
  1. 加密拷贝scp -r root@server:/etc/ssh /home/student/serverbackup从server上取目录到本地,使用-v显示详细信息;
  1. rsync远程同步文件,-a传输前归档:rsync -av root@server:/var/log/maillog /servermaillog
    • rsyncscp最大的区别是,rsync是增量传输,scp是完全传输;

2018-07-24

软件安装

  1. rpm复制后端安装编译等工作,yum负责用户交互及解决依赖关系,是rpm的前段工具;
  1. 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查询依赖;
  2. 建立本地yum仓库(redhat和centOS有mini/everything等版本,而epel的包比everything还多,通常用于自建仓库):
    • /etc/yum.confyum的配置文件,/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列出;
  1. yum常用命令:
    • yum list列出所有软件,按名字查找使用yum list xxx(软件名完全匹配)可以使用通配符,如yum list http*
    • yum search搜索软件,匹配包括简介信息;
    • yum info tcpdump查看软件详细信息;
    • yum group install以组为单位进行安装;
    • yum history显示yum历史操作汇总信息,加list命令查看详细信息,再使用list中的ID可以附加undoredo等命令进行撤销或重做操作;
    • yum erase删除;
    • yum provide查询提供指定命令、文件的软件包;

文件系统

  1. Linux仅允许一个主文进系统,一个根目录/(入口),其他文件系统需要挂载在主文进系统之下,统一从根目录/进入;(Windows允许多个跟目录,通过盘符区分),参见man 8 mount
  2. 上一节中的挂载:mount xxx.iso /mnt,卸载:umount /mnt
  3. df -h查看文件系统详细信息,du filename查看文件占硬盘大小,du -s dirname查看目录占用硬盘大小;
  4. blkid查看块设备的属性;
  5. 临时挂载、卸载使用mountumount
    • 对于无法直接卸载的目录,使用lsof /xxxfuser /xxx查看哪个用户哪个进程在使用,结束该进程后就可以卸载;
  1. 永久挂载,配置/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为非启动文件系统且不需要检查;
  1. 硬链接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,即被子目录的..连接;
  1. 软链接ln -s,相当于Windows的快捷方式:
    • 软链接是指向源文件的路径名(硬链接指向原文件的block,即复制inode,软链接的大小刚好是目标文件的路径长度),因此,软链接的源一定要使用绝对路径;
    • 软链接可以跨文件系统,因为是路径;
    • 软链接可以对目录使用;
    • 软链接的原文件必须存在,如果原文件被删除,则软链接失效;
  1. 文件查找locate
    • 基于文件名进行模糊查找;
    • 维护一个inode与文件名的映射,存在数据库/var/lib/mlocate/mlocate.db中,该数据库默认一天更新一次,即新建的文件不会存在于数据库中,也就找不到;
    • 使用updatedb更新数据库;
    • 不会查找/tmp中的任何文件;
    • 不能定义在那个目录中去找;
  1. 文件查找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

系统批量部署

  1. 安装kvm虚拟机时,对于Intel的CPU,支持vmx的CPU可以进行硬件虚拟化,需要在BIOS中保证开启vmx及nx;
  2. Kickstart批量部署:
    • %pre安装软件包前的脚本;
    • %package安装软件包;
    • %post安装软件包后的脚本;
    • %end脚本结束标记;
  1. 使用virt-manager管理虚拟机:
    • 将server重启,使用F12^B中断正常启动,选择iPXE
    • 输入gPXE> autoboot执行PXE启动;
    • ks=http://172.25.4.10/ks-config/ks.cfg输入到行尾(行尾为... quit);
    • 实验完成后,使用rht-vmctl fullreset server将虚拟机完全重置;

正则表达式

  1. grep为全局(对文件)正则表达式搜索,egrep为使用扩展正则表达式搜索,扩展的更强大,fgrep为固定格式搜索(即不使用正则表达式,更快);
  1. 注意:
    • \<词首、\>词尾,等同于\b
    • 正则表达式也可以使用[[:digit:]]代替[0-9][^]取反,参考man 7 globman 7 regex
    • 正则表达式的测试可以使用/usr/share/dict/words
    • wc -l可以统计行数;
    • ()表示当做整体,通常在扩展正则表达式中使用,非扩展的需要转移括号;
    • -v表示取反,即显示不匹配的行;-i不区分大小写;-A n匹配行后显示n行,-B n匹配行前显示n行,-C m, -n匹配行前显示m行后显示n行,

计划任务

  1. at适合定时执行仅一次的任务:
    • 使用at计划任务前,使用systemctl start atd启动at后台服务;
    • atatd的前端工具,使用^d提交;
    • atq是监控任务的工具;
    • atrm删除任务;
    • 对于某些用户,不希望他执行at任务,可以将其用户名写入/etc/at.deny
    • 对于某些用户,希望他执行at任务,可以将其用户名写入/etc/at.allowat命令先查找allow,若没找到则继续在deny中查找,若仍未找到,则允许执行(默认允许);
  1. cron适合周期性执行的任务:
    • croncrond的前端工具;
    • cron分为用户cron(如数据备份)和系统cron(如locate命令使用的数据库更新);
    • crontab是用户cron的前端工具,系统cron在/etc/crontab中,
    • crondeny/allowat的行为一样;
    • 通过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等文件夹存放按日、按小时执行的作业;

进程优先级

  1. 优先级高的进程能够获得更多CPU资源:
    • TOP的PRNI字段,即系统优先级和用户配置优先级;
    • 优先级取值为-10039,系统优先级为-100-1,用户优先级为0~39;
    • NI取值为-20~19;
    • PR值为rt的表示用户无法调整的(PR没有小于0的,小于0即显示rt);
    • PR-NI=20
  1. nice后接命令调整该命令的优先级,如nice --20 dd if=/dev/zero of=/dev/null-代表省略的选项-n
  1. renice后接进程PID可以重新调整该进程优先级;,如renice -5 12336
  1. top命令也可以调整优先级,使用r命令再输入PID,确认后输入优先级值即可;

权限访问控制列表(权限ACL)

  1. ACL控制粒度比POSIX的文件权限控制model更细;
  2. ll显示的文件权限中如-rwx-r-x-r-x.,其中的.即表示未添加访问控制;
  3. 使用getfacl xxx查看权限细节
  4. 使用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

  1. model模型的权限控制针对用户和文件,而SELinux针对程序和文件,SELinux是为了避免人为错误(配置错误)而设计的;
  1. SELinux对程序的标签可以用ps uZ 7842显示出来,对文件的标签可以用ll -dZ /tmp显示出来;
  1. 举例:
    • 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
  1. 安装setools-console可以查看SELinux规定的进程对目录做的操作:sesearch -A -s httpd_t -t tmp_t,可以看到allow httpd_t tmp_t : dir开头的两条记录,其中权限大的一条为Permissive模式(临时关闭SELinux)下的权限,权限小的一条为Enforce模式下的权限(即正常的SELinux开启时,可以通过getenforce目录查看);
  1. SELinux的开机启动配置在/etc/selinux/config中,要关闭SELinux应配置为SELinux=disabled,使配置生效需要重启;
  1. 在关闭SELinux后,用-Z选项查看新建的文件是没有SELinux标签的,在关闭SELinux后新建(或修改并保存)文件,会在该目录下生成一个名为.autorelabel的文件,意味着当再次开启SELinux并启动系统时,系统会再次打标签,系统会自动在打标签后再次重启;
  1. setenforce可以临时修改模式,通常供调试时使用;
  1. 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_writesemanage boolean --modify --on ftp_home_dirchomd o+w .chcon -t public_content_rw_t .等很多策略,因为SELinux默认认为FTP匿名上传行为不安全;其中setsebool不加-P用于临时修改标签,-P用于永久修改标签;若要排查问题可参考系统日志tail -n 50 /var/log/message
  2. SELinux的默认配置已经能够很好的运行,通常不需要重新配置,除非确定需要的功能确实是因为SELinux安全策略引起的,再进行修改,推荐始终打开SELinux功能以提高系统安全性;

网络用户

  1. 安装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
  1. 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.mastervim -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目录

分区及格式化

  1. MBR分区(即微软的DOS),硬盘的的第一分区(盘面最外面)为MBR分区,存储主引导记录(如Linux的grub2.0 448字节 )和分区表(64字节,其中,一条分区记录要占用16字节,即最多只能分四个主分区),通常最后一个分区作为扩展分区,用来做逻辑分区,而逻辑分区表不再MBR中,因此没有限制(MBR最大支持2T的硬盘):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    mbr
    ├── P1
    ├── P2
    ├── P3
    └── extend(4)
    ├── L5
    ├── L6
    ├── L7
    ├── L8
    ├── L9
    ├── L10
    └── L11
  1. lsblk查看硬盘分区,-p显示完全路径,fdisk -l列出分区信息,分区完成后,使用partprobe通知系统重新读取分区表:
    • fdisk /dev/vdb开始分区;
    • fdisk对MBR支持更好;
  1. GPT分区(GUID Partition Table),LBA0为保护MBR区,LBA1为主GPT头,LBA2-34的每个LBA存四个条目,共128个条目;
    • gdisk对GPT支持更好
  1. 上面仅是分区,现在的分区系统还不能使用,需要格式化,给每个分区分配UUID,使用blkid查看;
    • mkfs格式化为文件系统用,mkfs /dev/vdb1
    • 临时挂载mount /dev/vdb1 /mnt
    • 重挂mount -o remount,ro,nosuid /mnt,即设备不断线仅改变参数;
    • 永久挂载配置/etc/fstabman 5 fstab查看挂载及文件系统信息),使用blkid查看UUID,写入配置:
      1
      2
      3
      4
      # 硬盘
      UUID=xxx /mnt xfs default 0 0
      # 虚拟内存
      UUID=xxx swap swap default 0 0
    • 使用df -hfdisk -l查看硬盘挂载结果;
    • mkswap格式化为虚拟内存用,挂载/写在虚拟内存swapon /dev/vdb5swapoff /dev/vdb5
    • 使用topfree查看Swap内存挂载结果;
  1. 分区必须是连续的存储空间,而卷没有这种要求:
    • 分区不能跨硬盘,而卷可以;
    • 分区不能动态扩展,而卷可以;
    • 逻辑卷可以做快照;
    • 物理分区->pv(物理卷)->vg(卷组)->lv(逻辑卷,当做逻辑卷或虚拟硬盘)->mkfs->mount
  1. 创建物理卷pvcreate /dev/vdb7 /dev/vdc5
    • pvspvscan查看概要,
    • pvdisplay /dev/vdb7查看详情;
    • -s指定PE(PhysicalExtent)大小(默认4M);
  1. 创建卷组vgcreate vg0 /dev/vdb7 /dev/vdc5
    • vgs查看卷组;
    • vgremove vg0删除卷组
    • vgcreate -s 8m vg0 /dev/vdb7 /dev/vdc5按8M指定PE大小
  1. 创建逻辑卷lvcreate -l 512 -n lv0 vg0
    • lvs查看逻辑卷概要;
    • -n 指定卷名
    • -l 指定分配到PE个数;
    • -L 指定分配的空间;
  1. 此时lsblk可以看到逻辑卷了,mkfs.xfs格式化mkfs.xfs /dev/vg0/lv0mkfs.xfs /dev/mapper/vg0-lv0
  1. 创建挂载点mkdir -p /lv/{lv0,lv1},在vim /etc/fstab中的配置使挂载永久生效;
  1. 扩展逻辑卷:
    • 扩展前vgs查看卷组的空闲,扩展使用lvextend -L +2G /dev/vg0/lv0df -hT查看文件系统信息,而xfs支持自动识别增重的空间,使用xfs_growfs /dev/vg0/lv0
    • 若卷组空间不够,硬向卷组添加空间(插硬盘,分区并格式化);
    • 创建pvpvcreate /dev/vdc6 /dev/vdd5
    • 扩展vgvgextent vg0 /dev/vdc6 /dev/vdd5
    • 扩展lvlvextent -L +10G /dev/vg0/lv1,若为ext文件系统使用resize2fs /dev/vg0/lv1重新识别;

2018-07-27

启动排错

  1. 启动相关项位于/boot,vm开头的文件为内核文件,相关配置文件位于/etc/grub.d
  1. 查看运行级别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]
  1. 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提交,系统启动就进入正常命令行模式了;

修复密码

  1. openssl rand -hex 16产生16位随机数,以十六进制输出;
  2. 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启动会重新打标签,自动重启后正常;

修复文件系统

  1. fstab的永久挂载信息有误:
    • 选择Linux版本时按e键,在虚拟机环境linux16删到ro,输入systemd.unit=emergency.targetrescue也可以,打断正常启动),按^x提交,进入维护模式;
    • 查看关注情况mount | grep ^/,发现只读ro,重新挂载为读写mount -o remount,rw /
    • 修改/etc/fstab,删除错误信息后reboot,系统正常;

启动引导程序故障

  1. grub错误,启动Linux立刻报错:
    • 个人电脑:设备断电,将硬盘换到正常设备,挂载并chroot;服务器:使用救援光盘(虚拟机用virt-manager挂载光驱并加载下载好的镜像);
    • 启动按esc进入启动项,选择光驱启动;
    • 选择rescue xxx,选择continue
    • 临时切换根目录chroot /mnt/sysimage
    • vim /etc/grub2.cfg查看配置找出错误,或生成默认配置覆盖grub2-mkconfig > /etc/grub2.cfg

控制服务及守护进程

  1. 守护进程可以在/usr/lib/systemd/system中通过ll -d *d.*大概查看;
  1. 使用systemctl控制守护进程及服务,也可以控制系统运行级别;
  1. 系统相关功能的启动及服务的启动都是通过systemd的system和service manager管理;
  1. Redhat认为,守护进程是一直在后台执行的作业,服务是守护进程的集合;
  1. 进程ID为1的为systemd的进程,systemctl是systemd的前端命令行;
    • systemctl查询所有单元;
    • systemctl --type=service查看服务类单元;
    • systemctl start|stop xxx.service临时启停服务;
    • systemctl enable|disable xxx.service永久起停服务;
  1. 对于目标(target):
    • 其中的emergency初始化内核(/boot中vm开头)、初始化内存(/boot中initramfs开头)、初始化系统根目录(挂载到/并为只读挂载);
    • 其中的rescue模式为单用户,初始化基本的系统环境;
    • multi-user模式提供字符接口;
    • graphical模式提供字符及图形化接口;
    • 目标可以包含其他目标,使用systemctl list-dependencies graphical.target查看目标间的依赖关系;

配置IPv6

  1. 回顾NetworkManager
    • 一个device就是一个网络接口;
    • 一个连接就对应一个配置文件(连接是为设备做的);
    • 一个设备可以对应多个连接;同一个时刻一个设备只允许一个连接生效;
    • 连接的永久配置在/etc/sysconfig/network-scripts/ifcfg-name
    • nmcli用来创建或编辑连接配置;
  1. 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
  1. 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的路由;
  1. 试验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 routeip -6 route
    • ping测试ping -I eno1 192.168.0.254ping6 -I eno1 fddb:fe2a:ab1e::c0a8:fe
    • 跟踪IPv6路由tracepath6 fddb:fe2a:ab1e::c0a8:fetraceroute -6 fddb:fe2a:ab1e::c0a8:fe

链路聚合与软件网桥

  1. 将多个物理网卡合并为一个逻辑网卡,做负载均衡、故障转移、增加吞吐量;
  1. 链路聚合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
      2
      nmcli 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中;
  1. 软件网桥常用于虚拟化平台,在物理机上brctl show查看:
    • 先查看所有网卡配置ip a
    • 删除上一节的配置:
      1
      2
      3
      nmcli connection delete team0
      nmcli connection delete team0-port1
      nmcli connection delete team0-port2
    • 新建br0网桥:;
    • 给br0网桥添加物理接口:
      1
      2
      nmcli 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
      2
      nmcli connection up br0-port1
      nmcli connection up br0-port2
    • 测试连接:ping -I br0 192.168.0.254
    • 若连接不通,重启网络服务:systemctl restart network.service,若仍然不通,重启虚拟机;
  1. nmcli的配置建议参考man 5 nmcli-example,范例丰富;

Redhat Linux初体验(1)
Redhat Linux初体验(3)

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×