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 file3
tar -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/vdc5
vgs
查看卷组;vgremove vg0
删除卷组vgcreate -s 8m vg0 /dev/vdb7 /dev/vdc5
按8M指定PE大小
- 创建逻辑卷
lvcreate -l 512 -n lv0 vg0
lvs
查看逻辑卷概要;-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
,范例丰富;