SRE-第一周homework
1.总结计算机发展相关,并且总结服务器硬件相关知识。
1.1.计算机发展历史
- 第一代计算机(1946-1957) 电子管时代
# 世界上第一台计算机
1946年,世界上第一台计算机ENIAC(electronic numerical integrator and calculator 电子数字积分计算机)在美国宾州大学诞生,是美国奥伯丁武器试验场为了满足计算弹道需要而研制成的。使用了17468只电子管,占地170平方米,重达30吨,耗电174千瓦,耗资40多万美元。每秒可进行5000次加法或减法运算。
# 冯·诺依曼体系结构
1946年美籍匈牙利数学家冯·诺依曼于提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺依曼体系的要点是:
1.数字计算机的数制采用二进制,bit 位, byte 字节 1 byte =8 bit
2.计算机应该按照程序顺序执行
3.计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成
4.计算机的硬件五个组件
控制器: 指挥系统
运算器: 数学和逻辑运算
存储器: 存储信息
输入设备: 接收外部信息
输出设备: 输出计算机内部信息到外部设备
- 第二代计算机(1958-1964) 晶体管时代
- 第三代计算机(1965-1970) 集成电路时代
- 第四代计算机(1971以后) 大规模集成电路时代
1.2.服务器硬件
1.2.1.服务器按外形分类
# PC 服务器常见的三种外型:
1.塔式服务器
早期的服务器形式,目前较少使用。外形以及结构和平时使用的立式PC差不多,机箱空间大,主板扩展性较强,插槽较多,预留了足够的内部空间,以便日后进行硬盘和电源的冗余扩展,设计一般都考虑降噪。
2.刀片式服务器-Blade
密度更高的服务器,称为刀片服务器。这种服务器组成一组,放在一个框里面,可以整框使用。整框的刀片服务器,其中竖条是计算单元,可以单独拿出来。
在标准高度的机架式机箱内可插装多个卡式的服务器单元,实现高可用和高密度更高的密度,集中管理,高性能,灵活扩展,按需配置可以使用系统软件将这些母板集合成一个服务器集群。在集群模式下,所有的母板可以连接起来提供高速的网络环境,并同时共享资源,为相同的用户群服务。
3.机架式服务器
按照统一标准设计,配合机柜统一使用,便于统计管理,高密度,节省空间,常用U为单位,1U=1.75英寸=44.45毫米,机箱尺寸比较小巧,在机柜中可以同时放置多台服务器
机架式服务器的宽度为19英寸(48.26cm),厚度通常有1U,2U,3U,4U,5U,7U几种标准的服务器机柜的尺寸也是采用通用的工业标准,如:宽度600mm,深度1000mm,高度2000mm(42U),现阶段是最主流的的服务器。
1.2.2.数据中心相关硬件
上图为数据中心,有许多硬件设备,大体上可以分为三类:服务器,网络设备和存储设备,图中这一排排的就是机柜,我们平时所谓的服务器、网络交换机和存储等设备都放在这里面。
1.2.3.服务器硬件组件
主要有CPU、主板、内存、硬盘、网卡
1.2.3.1.服务器硬件-CPU
# CPU:
Central Processing Unit,即中央处理器。由控制器和运算器构成,是整个计算机系统中最重要的部分
# CPU 指令集分类:
CISC:Complex Instruction Set Computer,复杂指令集
RISC:Reduced Instruction Set Computer,精减指令集
# 架构:
1.X86/x86_64 架构:主导桌面与服务器芯片市场
2.ARM 架构:
手机:华为小米三星苹果
pad:华为小米三星苹果
机顶盒:各种电视机顶盒
华为泰山服务器-鲲鹏系列CPU
3.POWER 架构:由IBM设计,POWER系列微处理器在不少IBM服务器、超级计算机、小型计算机及工作站中,广泛使用。
4.RISC-V 架构:官网: https://riscv.org
# 服务器CPU公司:
1.Intel:Xeon 至强;Itanium 安腾
2.AMD: Althlon MP
3.IBM: Power
# 按照CPU体系架构来区分,服务器主要分为两类:
1.x86服务器:
采用CISC(复杂指令集)架构服务器,即通常所讲的PC服务器,它是基于PC机体系结构,使用Intel或其它兼容x86指令集的处理器芯片的服务器。目前主要为intel的Xeon E3,E5,E7系列,价格相对便宜、兼容性好、稳定性较差、安全性不算太高
2.非x86服务器:
采用RISC(精简指令集)或EPIC(并行指令代码) 处理器,主要采用UNIX和其它专用操作系统的服务器,CPU主要有IBM的Power PC、MIPS的MIPS、SUN的Sparc、Compaq的Alpha、HP的PA-RISC、Intel研发的EPIC安腾处理器等。这种服务器价格昂贵,体系封闭,但是稳定性好,性能强,主要用在金融、电信等大型企业的核心系统。
1.2.3.2.服务器硬件-主板
主板mainboard,安装在机箱内,是计算机最基本的也是最重要的部件之一。
主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键盘和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。
1.2.3.3.服务器硬件-内存
# 内存简介:
内存是介于CPU 和外部存储之间,是CPU 对外部存储中程序与数据进行高速运算时存放程序指令、数据和中间结果的临时场所,它的物理实质就是一组具备数据输入输出和数据存储功能的高速集成电路。
内存是CPU能直接寻址的存储空间,由半导体器件制成。内存的特点是存取速度快。
计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。
与之相对应的还有外存:硬盘,U盘,软盘,光盘
# 内存和外存的区别:
内存速度快,价格高,断电后数据丢失;
外存速度慢,价格相对低廉,断电后数据可以保存;
容量:即该内存的存储容量,单位一般为GB;
# 内存带宽:
内存带宽是指内存与北桥芯片之间的数据传输率,B byte 字节 b bit位
单通道内存控制器一般都是64-bit的,8个二进制位相当于1个字节,换算成字节是64/8=8,再乘以内存的运行频率,如果是双通道内存就要再乘以2
# 计算公式:
内存带宽 = 内存总线频率 × 数据总线位数 / 8
# 示例:
单通道DDR(Double Data Rate双倍速率)内存带宽计算
DDR4-4000:4000MHz*64bit/8=32000MB/S=32GB/S
DDR4-3600:3600MHz*64bit/8=28800MB/S
双通道:
DDR4-4000:4000MHz*64bit*2/8=64000MB/S
1.2.3.4.服务器硬件-硬盘
# 硬盘简介:
1956年IBM公司研发的世界上第一块电脑硬盘容量为5M,大小和家用洗衣机差不多。
# 常见的磁盘接口种类:
IDE:Integrated Drive Electronics,电子集成[驱动器,早期家用电脑常用接口
SCSI:Small Computer System Interface,小型计算机系统接口,早期的服务器常用接口
SATA:Serial ATA (Advanced Technology Attachment 高技术配置),家用电脑常用的接口
SAS:Serial Attached SCSI,是目前服务器上主流的接口
光纤通道:Fiber Channel,高性能服务器上采用的接口
M.2:固态硬盘接口,性能更强
# 结构分类:
机械硬盘HDD(Hard Disk Drive)
固态硬盘SSD(Solid State Drives )
### 机械硬盘 ###
1.存储介质(Media)—— 盘片:盘片的基板是金属或玻璃材质制成,为达到高密度高稳定的质量,基板要求表面光滑平整,不可有任何暇疵。
2.读写磁头(Read Write Head)——磁头:磁头是硬盘读取数据的关键部件,它的主要作用就是将存储在硬盘盘片上的磁信息转化为电信号向外传输。
3.马达( Spindle Motor & Voice Coil Motor ): 马达上装有一至多片盘片,以7200,10000,15000 RPM等定速旋转,为保持其平衡不可抖动,所以其质量要求严谨,不产生高温躁音。
# 机械硬盘基本参数:
1.容量:容量是硬盘最主要的参数。单位有MB、GB、TB,常见容量:500GB,1T,2T,3T,4T,6T
2.转速:转速是指硬盘盘片每分钟转动的圈数,单位为rpm。常见:7200rpm,10000rpm,15000rpm
3.传输速率:传输速率(Data Transfer Rate) 。硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s),常见:6Gb/s,12Gb/s
4.缓存:硬盘缓存的目的是为了解决系统前后级读写速度不匹配的问题,以提高硬盘的读写速度
5.磁盘尺寸:3.5”/2.5”/1.8”
6.是否支持热插拔
### SSD硬盘 ###
SSD,即固态硬盘,泛指使用NAND Flash组成的固态硬盘。其特别之处在于没有机械结构,以区块写入和抹除的方式作读写的功能,因此在读写的效率上,非常依赖读写技术上的设计SSD读写存取速度快,性能稳定,防震性高,发热低,耐低温,电耗低,无噪音。因为没有机械部分,所以长时间使用也出现故障几率也较小。缺点:价格高,容量小,相对普通机械硬盘性价比低。
1.2.3.5.服务器硬件-网卡
服务器一般都在主板上集成了网卡LOM (LAN on motherboard主板集成网卡) ,传输速率通常为1Gbps,即千兆网卡
特殊应用需要高端网卡,如光纤网卡,Infiniband网卡等,传输速率能达到10Gbps、20Gbps,即万兆网卡
1.2.3.6.服务器硬件-其他相关硬件
# IPMI 简介:
IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标准由英特尔、惠普、NEC、美国戴尔电脑和SuperMicro等公司制定。用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作状态、电源状态等。而且更为重要的是IPMI是一个开放的免费标准,用户无需为使用该标准而支付额外的费用。
IPMI 定义管理员如何监测系统硬件和传感器、控制系统组件和检索重要系统事件的日志以进行远程管理和恢复。自1998 年,IPMI论坛创建了IPMI标准依赖,其已经得到了170 多家供应商的支持,这使得其逐渐成为了一个完整地包括服务器和其他系统(如存储设备、网络和通信设备)的硬件管理规范.当前流行的是IPMI 2.0。
远程管理卡就是基于IPMI实现的服务器特有的远程管理部件,在家用电脑及笔记本电脑上是不存在的。
远程管理卡是安装在服务器上的硬件设备,提供一个以太网接口,使它可以连接到独立于业务网络的专用的管理网络中,提供远程访问,如查看服务器状态,调整BIOS,配置RAID,安装系统,重启系统等。这种远程管理是基于服务器主板上集成的基板管理控制器BMC(Baseboard Manager Controller)实现,BMC就是一个独立于服务器的微处理器系统, 可以完成负责监测和管理操作系统之外的服务器环境和状态。它既不会占用服务器系统资源,也不会影响服务器系统的运行。所有远程管理卡都是向BMC发送指令来实现服务器的管理和监控功能.只要服务器通电而无需启动操作系统,BMC即可正常工作。
早期(2010年以前),服务器托管在IDC机房,一旦出现问题,还得跑机房或者请机房的人管理。有了远程管理卡之后,运维人员管理服务器的效率就大大的提高了。
远程管理卡有服务器自带的和独立的两类。服务器自带的远程管理卡,可以关机、开机,但是看不到开关服务器的过程。所以,建议给服务器配备独立的远程管理卡,可能会多花100多块钱的样子,但是,当服务器出现问题,就不需要打车或者出差,也不用给机房人员打电话了,可以利用远程管理卡快速查看服务器故障并恢复服务。
各个服务器厂商都提供了符合IPMI标准的远程管理接口,但称呼不尽相同,比如Dell的iDRAC,惠普的ILO,浪潮的IPMI,华为的IBMC,联想的xclarity,华三的HDM等
上图是浪潮的服务器IPMI卡,不过和DELL不同,浪潮的服务器是出厂默认带的IPMI接口
上图为Dell的 iDRAC((integrated Dell Remote Access Controller))卡即是远程管理卡, 相当于是附加在服务器上的一台独立运行的小型pc,通过与服务器主板上的管理芯片BMC进行通信,监控与管理服务器的硬件状态信息。它拥有自己的系统和IP地址,与服务器上的OS无关,是服务器管理员进行远程访问和管理的便利工具。
1.2.3.7.服务器硬件-阵列卡
1.Raid卡用来实现RAID的建立和重建,检测和修复多位错误,错误磁盘自动检测等功能。RAID芯片使CPU的资源得以释放,阵列卡把若干硬盘驱动器按照一定要求组成一个整体、由阵列控制器管理的系统.
2.阵列卡可以用来提高磁盘子系统的性能及可靠性
3.支持的多种RAID级别,RAID0,1,5,6等
4.阵列卡提供缓存及电池保护
1.2.3.8.服务器硬件-电源
支持服务器的电力负载,支持冗余,防止电源故障 ,故障预警和防止 ,故障之前的预防性维护,保证服务器持续运行,电源子系统包括:冗余电源和风扇。
1.2.3.8.服务器硬件-显卡
服务器都在主板上集成了显卡,但是显存容量不高,一般为16M或32M,GPU: Graphic Processing Unit,即“图形处理器”。
1.2.3.8.服务器硬件-热插拔技术
热插拔技术,称为热交换技术(Hot Swap),允许在不关机的状态下更换故障热插拔设备,常见的热插拔设备:硬盘,电源,PCI设备,风扇等。热插拔硬盘技术与RAID技术配合起来,可以使服务器在不关机的状态下恢复故障硬盘上的数据,同时并不影响网络用户对数据的使用。
1.2.3.8.服务器硬件-机柜
机架式服务器-服务器放置在机柜中
通常使用的机柜是42U(约2米高)机柜( 1U=44.45mm)
外观尺寸一般为:宽600*深1000*高2000(mm)
在一个机架上,累计设备U数一般不超过26U,全1U设备部署数量一般不超过16台,全2U设备一般不超过12台,全4U设备一般4到7台
2.制作一个教程,说明vmware软件如何下载安装。安装rocky 8.5, ubuntu 22.04,并结合xshell说明如何通过虚拟IP登入系统。
2.1.vmware安装
# VMware 官方下载地址:
https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
注册码:MC60H-DWHD5-H80U9-6V85M-8280D
2.2.安装rocky 8.5
# 国内镜像下载地址:
https://mirrors.aliyun.com/rockylinux/ # rockylinux 8.5 已经转移到以下地址了
https://dl.rockylinux.org/vault/rocky/8.5/isos/x86_64/ # 下载种子,使用迅雷下载更快
# 官方镜像地址:
https://rockylinux.org/download
# 本次使用镜像:
Rocky-8.5-x86_64-dvd1.iso
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
# 快捷键切换
ctrl + alt F1 # 切换至图形界面
ctrl + alt F2 # 切换至当前用户
ctrl + alt F3 # 可切换到其他用户登录
2.3.安装ubuntu 22.04
做好快照,方便初始化
查看IP和ssh服务是否开启
2.4.使用电脑终端 SecureCRT远程连接主机
在session栏中点击刚才新建立的会话,并输入正确的密码
登录成功
3.结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法。
3.1.man命令
man 提供命令帮助的文件,手册页面存放在/usr/share/man
计划每个命令都有man的“页面”
# man帮助
https://man7.org/linux/man-pages/index.html
https://man7.org/linux/man-pages/dir_all_alphabetic.html
# 中文man需安装包
1.man-pages
2.man-pages-zh-CN
# man 页面分组
不同类型的帮助称为不同的“章节”,统称为linux手册,`man 1 man`
The table below shows the section numbers of the manual followed by the types of pages they contain.
1 Executable programs or shell commands # 用户命令
2 System calls (functions provided by the kernel) # 系统调用
3 Library calls (functions within program libraries) # C库调用
4 Special files (usually found in /dev) # 设备文件及特殊文件
5 File formats and conventions eg /etc/passwd # 配置文件格式
6 Games # 游戏
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7) # 杂项
8 System administration commands (usually only for root) # 管理类的命令
9 Kernel routines [Non standard] # Linux 内核API
# man 命令的配置文件:
# centos 6 之前版 man 的配置文件
/etc/man.config
# CentOS 7 之后版 man 的配置文件
/etc/man_db.conf
# ubuntu man 的配置文件
/etc/manpath.config
# 格式:
MANPATH /PATH/TO/SOMEWHERE # 指明man文件搜索位置
# 也可以指定位置下搜索COMMAND 命令的手册页并显示:
man -M /PATH/TO/SOMEWHERE COMMAND
# 查看man手册页
man [OPTION...] [SECTION] PAGE ...
man [章节] keyword
# 常用选项
1.列出所有帮助
man -a keyword
[root@rocky8 even]# man -a ls
2.搜索man手册
列出所有匹配的页面,使用`whatis 数据库`
man -k keyword
3.打印man帮助文件的路径
man -w [章节] keyword
[root@rocky8 even]# man -w 1 ls
/usr/share/man/man1/ls.1.gz
# 示例1:安装man帮助包
root@ubuntu2204:/home/even# whatis passwd
passwd (5) - the password file
passwd (1ssl) - OpenSSL application commands
passwd (1) - change user password
# 示例2:查看passwd相关命令和文件,man帮助文件路径
root@ubuntu2204:/home/even# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1ssl.gz /usr/share/man/man1/passwd.1.gz
# 示例3:直接打开man的帮助文件
root@ubuntu2204:/home/even# man -w ls
/usr/share/man/man1/ls.1.gz
root@ubuntu2204:/home/even# file /usr/share/man/man1/ls.1.gz
/usr/share/man/man1/ls.1.gz: gzip compressed data, max compression, from Unix, original size modulo 2^32 8049
# 直接打开man的gz压缩格式文档
root@ubuntu2204:/home/even# man /usr/share/man/man1/ls.1.gz
4.总结linux文件系统相关知识,并结合操作演示文件操作常见的命令
4.1.常见命令
4.1.1.查看硬件信息
4.1.1.1.查看CPU
`lscpu`命令可以查看cpu信息
`cat /proc/cpuinfo`也可以查看到cpu信息,这个是每核都能查看到
[root@rocky8 even]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 # 每个core 有几个线程
Core(s) per socket: 2 # 每个槽位有2个core
Socket(s): 1 # 服务器面板上有1个CPU槽位
NUMA node(s): 1 # nodes的数量
Vendor ID: AuthenticAMD
BIOS Vendor ID: AuthenticAMD
CPU family: 25
Model: 68
Model name: AMD Ryzen 7 7735HS with Radeon Graphics
BIOS Model name: AMD Ryzen 7 7735HS with Radeon Graphics
Stepping: 1
CPU MHz: 3194.009
BogoMIPS: 6388.01
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 512K
L3 cache: 16384K
NUMA node0 CPU(s): 0,1 # 对应的core
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero arat umip vaes vpclmulqdq rdpid overflow_recov succor fsrm
[root@rocky8 even]# cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 25
model : 68
model name : AMD Ryzen 7 7735HS with Radeon Graphics
stepping : 1
microcode : 0xffffffff
cpu MHz : 3194.009
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero arat umip vaes vpclmulqdq rdpid overflow_recov succor fsrm
bugs : fxsave_leak sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips : 6388.01
TLB size : 2560 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : AuthenticAMD
cpu family : 25
model : 68
model name : AMD Ryzen 7 7735HS with Radeon Graphics
stepping : 1
microcode : 0xffffffff
cpu MHz : 3194.009
cache size : 512 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext pdpe1gb rdtscp lm constant_tsc rep_good nopl tsc_reliable nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves clzero arat umip vaes vpclmulqdq rdpid overflow_recov succor fsrm
bugs : fxsave_leak sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips : 6388.01
TLB size : 2560 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 45 bits physical, 48 bits virtual
power management:
4.1.1.2.查看内存大小
[root@rocky8 even]# free
total used free shared buff/cache available
Mem: 1833232 1268128 108944 10496 456160 405632
Swap: 2129916 128480 2001436
[root@rocky8 even]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 1.2Gi 106Mi 10Mi 445Mi 396Mi
Swap: 2.0Gi 125Mi 1.9Gi
[root@rocky8 even]# free -g
total used free shared buff/cache available
Mem: 1 1 0 0 0 0
Swap: 2 0 1
# 这里刚装完系统,发现rocky系统的内存占用了1.2G,是因为开启了图形界面,所以内存占用比较高,可以选择关闭
init 3 # 关闭图形界面
init 5 # 开启图形界面
[root@rocky8 even]# init 3
[root@rocky8 even]# free -h
total used free shared buff/cache available
Mem: 1.7Gi 345Mi 1.1Gi 5.0Mi 357Mi 1.3Gi
Swap: 2.0Gi 16Mi 2.0Gi
# 关闭图形界面后,内存占用就下去了
# 另一种方式查看内存
[root@rocky8 even]# cat /proc/meminfo
MemTotal: 1833232 kB
MemFree: 1111744 kB
MemAvailable: 1323436 kB
Buffers: 0 kB
Cached: 329900 kB
SwapCached: 3784 kB
Active: 210532 kB
Inactive: 231448 kB
Active(anon): 7052 kB
Inactive(anon): 110496 kB
Active(file): 203480 kB
Inactive(file): 120952 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2129916 kB
SwapFree: 2112932 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 108812 kB
Mapped: 75212 kB
Shmem: 5468 kB
KReclaimable: 36024 kB
Slab: 139428 kB
SReclaimable: 36024 kB
SUnreclaim: 103404 kB
KernelStack: 5744 kB
PageTables: 9636 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3046532 kB
Committed_AS: 738780 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 99840 kB
HardwareCorrupted: 0 kB
AnonHugePages: 20480 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 262016 kB
DirectMap2M: 1835008 kB
DirectMap1G: 0 kB
4.1.1.3.查看硬盘和分区情况
[root@rocky8 even]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
sr0 11:0 1 1024M 0 rom
[root@rocky8 even]# cat /proc/partitions
major minor #blocks name
8 0 209715200 sda
8 1 1048576 sda1
8 2 208665600 sda2
11 0 1048575 sr0
253 0 73400320 dm-0
253 1 2129920 dm-1
253 2 133132288 dm-2
4.1.2.查看系统版本信息
4.1.2.1.查看系统架构
root@ubuntu2204:/home/even# arch
x86_64
[root@rocky8 even]# arch
x86_64
4.2.2.2.查看内核版本
# rocky 8.5系统:
[root@rocky8 even]# uname -a
Linux rocky8.5 4.18.0-348.el8.0.2.x86_64 #1 SMP Sun Nov 14 00:51:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@rocky8 even]# uname -r
4.18.0-348.el8.0.2.x86_64
# ubuntu 22.04系统:
root@ubuntu2204:/home/even# uname -a
Linux ubuntu2204 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu2204:/home/even# uname -r
5.15.0-25-generic
4.2.2.3.查看操作系统发型版本
[root@rocky8 even]# cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
[root@rocky8 even]# cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.5 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8.5:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"
# ubuntu 系统:
root@ubuntu2204:/home/even# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04 LTS
Release: 22.04
Codename: jammy
root@ubuntu2204:/home/even# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
root@ubuntu2204:/home/even# cat /etc/issue
Ubuntu 22.04 LTS \n \l
# 查看 OS 版本
root@ubuntu2204:/home/even# lsb_release -is
Ubuntu
root@ubuntu2204:/home/even# lsb_release -cs
jammy
root@ubuntu2204:/home/even# lsb_release -rs
22.04
[root@rocky8 even]# lsb_release -is
Rocky
[root@rocky8 even]# lsb_release -cs
GreenObsidian
[root@rocky8 even]# lsb_release -rs
8.5
4.1.3.日期和时间
# linux的两种时间
1.系统时钟:由Linux内核通过CPU的工作频率进行的
2.硬件时钟:主板
# 相关命令
date显示和设置系统时间
[root@rocky8 even]# date
Sun Dec 31 20:40:39 CST 2023
# 显示时区信息
[root@rocky8 even]# date -R
Sun, 31 Dec 2023 20:41:23 +0800
[root@rocky8 even]# date +%s
1704026523
[root@rocky8 even]# date -d @`date +%s`
Sun Dec 31 20:42:24 CST 2023
[root@rocky8 even]# date -d @1704026523
Sun Dec 31 20:42:03 CST 2023
[root@rocky8 even]# date -d @1704026523 +%F_%T
2023-12-31_20:42:03
[root@rocky8 even]# date -d "2023-12-31" +%s
1703952000
# clock,hwclock:显示硬件时钟
-s,--hctosys # 以硬件时钟为准,校正系统时钟
-w,--systohc # 以系统时钟为准,校正硬件时钟
[root@rocky8 even]# ll /usr/sbin/clock
lrwxrwxrwx. 1 root root 7 Oct 14 2021 /usr/sbin/clock -> hwclock
# 时区
/etc/localtime
# 设置时区
[root@rocky8 even]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
……
[root@rocky8 even]# timedatectl set-timezone Asia/Shanghai
[root@rocky8 even]# timedatectl status
Local time: Sun 2023-12-31 20:53:50 CST
Universal time: Sun 2023-12-31 12:53:50 UTC
RTC time: Sun 2023-12-31 12:53:50
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[root@rocky8 even]# ll /etc/localtime
lrwxrwxrwx. 1 root root 35 Dec 31 12:47 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
root@ubuntu2204:/home/even# cat /etc/timezone
Asia/Shanghai
# 显示日历
[root@rocky8 even]# cal 11 1990
November 1990
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
4.1.4.关机和重启
# 关机
halt
poweroff
init 0
shutdown -h now
# 重启
reboot
-f:强制,不调用shutdown
-p:切断电影
ctrl+alt+del 三个键
init 6
shutdown -r now
# 关机或重启:shutdown
shutdown [OPTION]... [TIME] [MESSAGE]
-r:reboot
-h:halt
-c:cancel
TIME:无指定,默认相当于+1 (CentOS 7)
now:立刻,相当于+0
+#:相对时间表示法,几分钟之后:例如 +3
hh:mm:绝对时间表示,指明具体时间
4.1.5.用户登录信息查看命令
# 显示当前登录有效用户
whoami
[root@rocky8 even]# whoami
root
# 系统当前所有的登录会话
who
[root@rocky8 even]# who
even pts/0 2023-12-31 17:40 (192.168.56.1)
# 系统当前所有的登录会话及所做的操作
w
[root@rocky8 even]# w
21:07:12 up 7:49, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
even pts/0 192.168.56.1 17:40 0.00s 0.22s 0.01s sshd: even [priv]
4.1.6.文本编辑
# 工具可以实现文本的编辑,上手容易,适合初学者
nano
# 工具是图形工具
gedit
4.1.7.会话管理
命令行的典型使用方式是,打开一个终端窗口,在里面输入命令,用户与计算机的折中临时的交互,称为一次“会话”。
会话的一个重要的特点是:窗口与其中启动的进程是连接在一起的,打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次SSH会话已经终止了,里面的进程也随之消失了。为了解决这个问题,会话与窗口可以“解绑”:窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话“绑定”其他窗口。
终端服用器软件就是会话与窗口的“解绑”工具,将他们彻底分离。
1.它允许在单个窗口中个,同时访问多个会话。这对于同时运行多个命令行程序很有用。
2.它可以让新窗口“接入”已经存在的会话。
3.它运行每个会话有多个连接窗口,因此可以多人实时共享会话。
4.它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有screen,tmux
4.1.7.1.screen
利用screen可以实现会话管理,如:新建会话,共享会话等
注意:centos 7来自base源,centos 8来自于epel源
# centos 8 安装screen
[root@rocky8 even]# yum install epel-release -y
[root@rocky8 even]# dnf -y install screen
# screen 命令常见用法:
1.创建新screen会话
screen -S [SESSION]
2.加入screen会话
screen -x [SESSION]
3.退出并关闭screen会话
exit
4.剥离当前screen会话
ctrl+a,d
5.显示所有已经打开的screen会话
screen -ls
6.恢复某screen会话
screen -r [SESSION]
4.1.8.输出信息echo
4.1.8.1.echo基本用法
# 语法
echo [-neE] [字符串]
# 字符串
-E (默认)不支持\解释功能
-n 不自动换行
-e 启用\字符的解释功能
# 显示变量
echo "$VAR_NAME" # 用变量值替换,弱引用
echo '$VAR_NAME' # 变量不会替换,强引用
# 启用命令选项-e,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a # 发出警告声
\b # 退格键
\c # 最后不加上换行符号
\e # escape,相当于\033
\n # 换行且光标移至首行
\r # 回车,即光标移至行首,但不换行
\t # 插入tab
\\ # 插入\字符
\0nnn # 插入nnn(八进制)所代表的ASCII字符
\xHH # 插入HH(十六进制)所代表的ASCII字符
4.1.8.2.echo 高级用法
# 可以显示具有颜色的字符,其格式如下:
"\033[字符背景颜色;字体颜色m字符串\033[0m"
\033[30m -- \033[37m # 设置前景色
\033[40m -- \033[47m # 设置背景色
# 字符背景颜色范围:40--47
40 # 黑
41 # 红
42 # 绿
43 # 黄
44 # 蓝
45 # 紫
46 # 深绿
47 # 白色
# 字体颜色:30--37
30 # 黑
31 # 红
32 # 绿
33 # 黄
34 # 蓝
35 # 紫
36 # 深绿
37 # 白色
# 加颜色只是以下控制码中的一种,下面是常见的一些ANSI控制码:
\033[0m # 关闭所有属性
\033[1m # 设置高亮度
\033[4m # 下划线
\033[5m # 闪烁
\033[7m # 反显
\033[8m # 消隐
\033[nA # 光标上移n行
\033[nB # 光标下移n行
\033[nC # 光标右移n行
\033[nD # 光标左移n行
\033[x;yH # 设置光标位置x行y列
\033[2J # 清屏
\033[K # 清除从光标到行尾的内容
\033[s # 保存光标位置
\033[u # 恢复光标位置
\033[?25l # 隐藏光标
\033[?25h # 显示光标
\033[2J\033[0;0H # 清屏且将光标置顶
5.总结linux安全模型
# 资源分派:
1.Authentication:认证,验证用户身份
2.Authorization:授权,不同的用户设置不同权限
3.Accouting|Audition:审计
当用户登录成功时,系统会自动分配令牌token,包括:用户标识和组成员等信息
5.1.用户
Linux中每个用户是通过 User ld (UID) 来唯一标识的
1.管理员: root, 0
2.普通用户: 1-60000 自动分配
3.系统用户: 1-499 (CentOS 6以前),1-999 (Cento 7以后)对守护进程获取资源进行权限分配;
4.登录用户: 500+ (CentOs6以前),1000+ (Centos7以后)给用户进行交互式登录使用
5.2.用户组
Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID (GID) 来唯一标识的。
1.管理员组: root 0
2.普通组:
系统组: 1-499 (CentOS 6以前),1-999 (CentOS 7以后),对守护进程获取资源进行权限分配;
普通组: 500+ (CentOS 6以前),1000+ (CentOS 7以后),给用户使用
5.3.用户和组的关系
1.用户的主要组(primarygroup): 用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组。
2.用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附属组。
# 举例:
[even@rocky8 ~]$ id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
5.4.安全上下文
Linux安全上下文Context: 运行中的程序,即进程(process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份。
比如: 分别以root 和wang 的身份运行/bin/cat /etc/shadow
,得到的结果是不同的,资源能否能被访问,是由运行者的身份决定,非程序本身。
# 范例
[even@rocky8 ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[root@rocky8 ~]# cat /etc/shadow
root:$6$m85UG1lJ4JMzkN.n$TdR.ovACmItMJgHefui5irPdpH8CfEI9k23Ceh4My01NvDoMjcjJvfdfwsjAceGAXqdCaz6vCICb.zcp0cRWP0::0:99999:7:::
bin:*:18700:0:99999:7:::
daemon:*:18700:0:99999:7:::
adm:*:18700:0:99999:7:::
lp:*:18700:0:99999:7:::
sync:*:18700:0:99999:7:::
5.5.用户和组的配置文件
5.5.1.用户和组的主要配置文件
/etc/passwd # 用户及其属性信息(名称UID、主组ID等)
/etc/shadow # 用户密码及其相关属性
/etc/group # 组及其属性信息
/etc/gshadow # 组密码及其相关属性
5.5.2.passwd文件格式
login name: 登录用名 (wang)
passwd:密码 (x)
UID: 用户身份编号(1000)
GID:登录默认所在组编号 (1000)
GECOS: 用户全名或注释
home directory: 用户主目录(home/wang)
shell: 用户默认使用shell (bin/bash)
5.5.3.shadow文件格式
root@ubuntu2204:/home/even# cat /etc/shadow
root:*:19103:0:99999:7:::
1.登录用名
2.用户密码:一般用sha512加密
3.从1970年1月1日起到密码最近一次被更改的时间
4.密码再过几天可以被变更 (0表示随时可被变更)
5.密码再过几天必须被变更 (99999表示永不过期)
6.密码过期前几天系统提醒用户 (默认为一周)
7.密码过期几天后帐号会被锁定
8.从1970年1月1日算起,多少天后帐号失效
# 更改密码加密算法:
authconfig --passa1go=sha256 --update
# 密码的安全策略
1.足够长
2.使用数字、大写字母、小写字母及特殊字符中至少3种
3.使用随机密码
4.定期更换,不要使用最近曾经使用过的密码
# 范例:生成随机密码
root@ubuntu2204:/home/even# tr -dc '[:alnum:]' < /dev/urandom | head -c 12
xCeX6hj77n82
root@ubuntu2204:/home/even# openssl rand -base64 9
qe+T8eulI5BY
# 生成随机密码
[root@rocky8 even]# yum -y install expect
[root@rocky8 even]# mkpasswd -l 8 -c 2 -C 2 -d 2 -s 2
hD+)5qD6
# 生成随机密码侈网站:
https://suijimimashengcheng.51240.com
5.5.4.group文件格式
群组名称: 就是群组名称
群组密码: 通常不需要设定,密码是被记录在`/etc/gshadow`
GID: 就是群组的ID
以当前组为附加组的用户列表(分隔符为逗号)
5.5.5.gshadow文件格式
1.群组名称:就是群的名称
2.群组密码:
3.组管理员列表: 组管理员的列表,更改组密码和成员
4.以当前组为附加组的用户列表: 多个用户间用逗号分隔
5.5.6.文件操作
1.vipw 和 vigr
2.pwck 和 grpck
5.6.用户和组管理命令
用户管理命令:
- useradd
- usermod
- userdel
组帐号维护命令:
- groupadd
- groupmod
- groupdel
5.6.1.用户创建
useradd 命令可以创建新的Linux用户
# 格式:
useradd [options] LOGIN
# 常见选项:
-u UID
-o # 配合-u 选项,不检查UID的唯一性
-g GID # 指明用户所属基本组,可为组名,也可以GID
-C "COMMENT" # 用户的注释信息
-d HOME_DIR # 以指定的路径(不存在)为家目录
-S SHELL # 指明用户的默认she11程序,可用列表在/etc/she11s文件中-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N # 不创建私用组做主组,使用users组做主组
-r # 创建系统用户 CentOS 6之前: ID<500,CentOS 7 以后: ID<1000
-m # 创建家目录,用于系统用户
-M # 不创建家目录,用于非系统用户
-p # 指定加密的密码
# 示例:
[root@rocky8 even]# rpm -q --scripts postfix
preinstall scriptlet (using /bin/sh):
# Add user and groups if necessary
/usr/sbin/groupadd -g 90 -r postdrop 2>/dev/null
/usr/sbin/groupadd -g 89 -r postfix 2>/dev/null
/usr/sbin/groupadd -g 12 -r mail 2>/dev/null
/usr/sbin/useradd -d /var/spool/postfix -s /sbin/nologin -g postfix -G mail -M -r -u 89 postfix 2>/dev/null
[root@rocky8 even]# id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
# useradd命令默认值设定由/ec/default/useradd 定义
[root@rocky8 even]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
# 显示或更改默认设置
useradd -D
useradd -D -s SHELL
useradd -D -b BASE_DIR
useradd -D -g GROUP
# 新建用户的相关文件
/etc/default/useradd
/etc/skel/*
/etc/login.defs
# 批量创建用户
newusers passwd 格式文件
# 批量修改用户口令
echo username:passwd |chpasswd
[root@rocky8 even]# echo even:123456 |chpasswd
[root@rocky8 even]# echo 123123 |passwd even --stdin
Changing password for user even.
passwd: all authentication tokens updated successfully.
# rocky 8 生成sha512加密密码
[root@rocky8 even]# openssl passwd -6 even
$6$Z721dfCIIhO1qmJb$zu/bRHq4nvScIJ7Av86iOQcNO6DNb8fgboBNhkQzmvsZamzVOLww0BtCe4c5ov4hvGGGTAq1jj3.dejS7KrI5.
5.7.用户属性修改
usermod 命令可以修改用户属性
# 格式:
usermod [OPTION] 1ogin
# 常见选项:
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]: 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-S SHELL:新的默认SHELL
-C 'COMMENT': 新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-1 login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-u: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期
5.8.删除用户
userdel 可删除Linux 用户
# 格式:
userdel [OPTION] ... Login
# 常见选项:
-f, --force 强制
-r, --remove 删除用户家目录和邮箱
# 范例: 强制删除用户和数据
[root@centos8 ~]# useradd test
[root@centos8 ~]# id test
uid=1001(test) gid=1001(test) groups=1001
# 在另一终端用test登录
[root@centos8 ~]# su - test
[test@centos8 ~]$
# 删除正在登录的用户失败
[root@centos8 ~]# userdel -r test
userdel: user test is currently used by process 29909
[root@centos8 ~]# id test
groups=1001(test)uid=1001(test) gid=1001(test)
# 强制删除用户
[root@centos8 ~]# userde1 -rf test
userdel: user test is currently used by process 29909
[root@centos8 ~]# id test
id:'test': no such user
5.9.查看用户相关的ID信息
# id 命令可以查看用户的UID,GID等信息
id [OPTION]... [USER]
# 常见选项:
-u:显示UID
-g:显示GID
-G:显示用户所属的组的ID
-n:显示名称,需配合ugG使用
5.10.切换用户或以其他用户身份执行命令
su: 即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令
# 格式:
su [options...] [-] [user [args...]]
# 常见选项:
-l --login su -l UserName # 相当于 su - UserName
-c, --command <command> # pass a single command to the shell with -c
# 切换用户的方式
su UserName: 非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
su - UserName: 登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
# 说明:
root su至其他用户无须密码;
非root用户切换时需要密码;
# 注意:
su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
# 换个身份执行命令:
su [-] UserName -C 'COMMAND'
# 范例:
[root@centos8 ~]# getent passwd mage
mage:x:1001:1001::/home/mage:/bin/bash
[root@centos8 ~]# usermod -s /bin/false mage
[root@centos8 ~]# getent passwd mage
mage:x:1001:1001::/home/mage:/bin/false
[root@centos8 ~]# su- mage
Last login: Fri Mar 27 09:18:57 CST 2020 on pts/0
[root@centos8 ~]# whoami
root
# 范例:
[root@centos8 ~]# su -s /sbin/nologin wang
This account is currently not available.
[root@centos8 ~]# whoami
root
[root@centos8 ~]# su -s /bin/false wang
[root@centos8 ~]#whoami
root
# 范例:
[wang@centos8 ~]$su - root -c "getent shadow"
# 范例:
[root@rocky8 even]# su - even -c "touch even.txt"
[root@rocky8 even]# ll ~even/
total 0
-rw-rw-r--. 1 even even 0 Jan 1 22:23 even.txt
# 范例:
[root@centos8 ~]# su bin
This account is currently not available.
[root@centos8 ~]# su -s /bin/bash bin
bash-4.4$ whoami
bin
[root@centos8 ~]# getent passwd tss
tss:x:59:59:Account used by the trousers package to sandbox the tcsd
daemon:/dev/null:/sbin/nologin
[root@centos8 ~]# su - -s /bin/bash tss
Last login: Fri mar 27 09:46:43 CST 2020 on pts/0
su: warning: cannot change directory to /dev/null : Not a directory
-bash: /dev/null/.bash_profile: Not a directory
[tss@centos8 root]$pwd
root
[tss@centos8 root]$whoami
tss
# 范例:
[root@centos8 ~]# getent passwd bin
bin:x:1:1:bin:/bin:/sbin/nologin
[root@centos8 ~]# su -c 'whoami' bin
nologin: invalid option -- 'c'
Try 'nologin --help' for more information
[root@centos8 ~]# su-s /bin/bash -c 'whoami' bin
bin
5.11.设置密码
passwd 可以修改用户密码
# 格式:
passwd [OPTIONS] UserName
# 常用选项
-d: 删除指定用户密码
-l: 锁定指定用户
-u: 解锁指定用户
-e: 强制用户下次登录修改密码
-f: 强制操作
-n mindays: 指定最短使用期限
-x maxdays: 最大使用期限
-w warndays: 提前多少天开始警告
-i inactivedays: 非活动期限
--stdin: 从标准输入接收用户密码,ubuntu无此选项
# 范例:
# 此方式更通用,适用于各种Linux版本,如:ubuntu
[root@centos8 ~]# echo -e '123456\n123456' passwd mage
Changing password for user mage.New password: BAD PASSWORD: The password is shorter than 8 charactersRetype new password: passwd: all authentication tokens updated successfully.
# 适用于红帽系列的Linux版本
[root@centos8 ~]# echo '123456' passwd --stdin mage
Changing password for user mage.
passwd: all authentication tokens updated successfully
# 生成随机密码
[root@centos8 ~]# yum -y install expect
[root@centos8 ~]# mkpasswd -l 8 -c 2 -C 2 -d 2 -s 2 |tee passwd.txt | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
[root@centos8 ~]# cat passwd.txt
1Q!9Ln7]
# 范例: Ubuntu 非交互式修改用户密码
[root@ubuntu1804 ~]# echo wang:centos | chpasswd
[rootQubuntu1804 ~]# passwd wang <<EOF
> centos
> centos
> EOF
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
[root@ubuntu1804 ~]# echo -e 'magedu\nmagedu' passwd wang
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
# 范例:设置用户下次必须更改密码
[root@rocky8 even]# useradd wang
[root@rocky8 even]# echo 123456 | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
[root@rocky8 even]# getent shadow wang
wang:$6$ehh1uJX9iWoR1vW6$nePYl3irPHnh86ylhY3MJivmDlULjzdrS2SB/vC7ZB8o1.9Jrr931Dx8CnvBbhNU9FqTrUT0QKwFl8GGHxAza0:19723:0:99999:7:::
[root@rocky8 even]# passwd -e wang
Expiring password for user wang.
passwd: Success
[root@rocky8 even]# getent shadow wang
wang:$6$ehh1uJX9iWoR1vW6$nePYl3irPHnh86ylhY3MJivmDlULjzdrS2SB/vC7ZB8o1.9Jrr931Dx8CnvBbhNU9FqTrUT0QKwFl8GGHxAza0:0:0:99999:7:::
[root@centos8 ~]# su - mage
Last login: Fri Mar 27 09:55 :27 CST 2020 on pts/0
[mage@centos8 ~]$ su - wang
Password :You are required to change your password immediately (administrator enforced)Current password:
New password:
BAD PASSWORD: The password is shorter than 8 characters
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systemati
su: Have exhausted maximum number of retries for service
[mage@centos8 ~]$ su - wang
Password :You are required to change your password immediately (administrator enforced)Current password:
New password:
Retype new password:
Last login: Fri Mar 27 10:01:20 CST 2020 on pts/0Last failed login: Fri Mar 27 10:02:37 CST 2020 on pts/0There was 1 failed login attempt since the last successful Togin.
[wang@centos8 ~]$ exit
logout
[mage@centos8 -]$ exit
Togout
[root@centos8 ~]# getent shadow wang
wang:$6$TX0iLjF52ByHh1zHSg.WI4LNfauuwgnxpRhd7ePgFKHZ85YU3r6Lh2SOPWRXWGjG1DVtomLWqpdiwrT.vwqD/wzok.kzQhuHc8UCs91:18348:0:99999:7:::
5.12.修改用户密码策略
chage 可以修改用户密码策略
# 格式
chage [OPTION] ... LOGIN
# 常见选项:
-d LAST_DAY # 更改密码的时间
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN DAYS
-I --inactive INACTIVE # 密码过期后的宽
-E --expiredate EXPIRE_DATE # 用户的有效期
-l # 显示密码策略
# 范例:
[root@rocky8 even]# chage wang
Changing the aging information for wang
Enter the new value, or press ENTER for the default
Minimum Password Age [0]: 3
Maximum Password Age [99999]: 42
Last Password Change (YYYY-MM-DD) [1970-01-01]: 2024-01-31
Password Expiration Warning [7]: 10
Password Inactive [-1]: 20
Account Expiration Date (YYYY-MM-DD) [-1]: 2024-02-29
[root@rocky8 even]# getent shadow wang
wang:$6$ehh1uJX9iWoR1vW6$nePYl3irPHnh86ylhY3MJivmDlULjzdrS2SB/vC7ZB8o1.9Jrr931Dx8CnvBbhNU9FqTrUT0QKwFl8GGHxAza0:19753:3:42:10:20:19782:
[root@rocky8 even]# chage -m 3 -M 42 -W 14 -I 7 -E 2024-02-28 wang
[root@rocky8 even]# chage -l wang
Last password change : Jan 31, 2024
Password expires : Mar 13, 2024
Password inactive : Mar 20, 2024
Account expires : Feb 28, 2024
Minimum number of days between password change : 3
Maximum number of days between password change : 42
Number of days of warning before password expires : 14
[root@rocky8 even]# getent shadow wanggetent shadow wang
wang:$6$ehh1uJX9iWoR1vW6$nePYl3irPHnh86ylhY3MJivmDlULjzdrS2SB/vC7ZB8o1.9Jrr931Dx8CnvBbhNU9FqTrUT0QKwFl8GGHxAza0:19753:3:42:14:7:19781:
# 下一次登录强制重设密码:
[root@rocky8 even]# chage -d 0 wang
[root@rocky8 even]# getent shadow wang
wang:$6$ehh1uJX9iWoR1vW6$nePYl3irPHnh86ylhY3MJivmDlULjzdrS2SB/vC7ZB8o1.9Jrr931Dx8CnvBbhNU9FqTrUT0QKwFl8GGHxAza0:0:3:42:14:7:19781:
[root@rocky8 even]# chage -l wang
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : Feb 28, 2024
Minimum number of days between password change : 3
Maximum number of days between password change : 42
Number of days of warning before password expires : 14
5.13.创建组
groupadd 实现创建组
# 格式:
groupadd [OPTION] ... group_name
# 常见选项:
-g GID 指明GID号:[GID_MIN,GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,Centos 7以后: ID<1000
# 范例:
groupadd -g 48 -r apache
5.14.修改组
groupmod 组属性修改
# 格式:
groupmod [OPTION] ... group
# 常见选项:
-n group_name: 新名字
-g GID: 新的GID
5.15.组删除
groupdel 可以删除组
# 格式
groupdel [options] GROUP
# 常见选项:
-f,--force 强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录
5.16.更改组成员和密码
gpasswd命令,可以更改组密码,也可以修改附加组的成员关系
# 格式:
gpasswd [OPTION] GROUP
# 常见选项:
-a user 将user添加至指定组中
-d user 从指定附加组中移除用户user
-A user1 ,user2,... 设置有管理权限的用户列表
# 范例:
# 增加组成员
[root@centos8 ~]# groupadd admins
[root@centos8 ~]# id wang
uid=1000(wang) gid=1000(wang) groups=1000(wang)
[root@centos8 ]# gpasswd -a wang admins
Adding user wang to group admins
[root@centos8 ~]# id wang
uid-1000 (wang) gid=1000(wang) groups=1000(wang),1002(admins)
[root@centos8 ~]# groups wang
wang : wang admins
[root@centos8 ~]# getent group admins
admins:x:1002:wang
#删除组成员
[root@centos8 ~]# gpasswd -d wang admins
Removing user wang from group admins
[root@centos8 ~]# groups wang
wang : wang
[root@centos8 ~]# id wang
uid-1000 (wang)gid=1000(wang) groups=1000(wang)
[root@centos8 ~]# getent group admins
admins:x:1002:
5.17.更改和查看组成员
groupmems可以管理附加组的成员关系
# 格式:
groupmems [options] [action]
# 常见选项:
-g, --group groupname # 更改为指定组 (只有root)
-a, --add username # 指定用户加入组
-d, --delete username # 从组中删除用户
-p, --purge # 从组中清除所有成员
-l, --list # 最示组成员列表
groups 可查看用户组关系
# 格式
# 查看用户所属组列表
groups [OPTION] .[USERNAME] ...
# 范例:
[root@centos8 -]# groupmems -l -g admins
[root@centos8 ~]# groupmems -a mage -g admins
[root@centos8 ~]# id mage
uid=1001(mage) gid=1001(mage) groups=1001(mage),1002(admins)
[root@centos8 ~]# groupmems -l -g admins
mage
[root@centos8 ~]# groupmems -a wang -g admins
[root@centos8 ~]# groupmems -l -g admins
mage wang
[root@centos8 ~]# groupmems -d wang -g admins
[root@centos8 ~]# groups wang
wang : wang
[root@centos8 ~]# groupmems -l -g admins
mage
[root@centos8 ~]# groupmems -p admins
[root@centos8 ~]# groupmems -l -g admins
6.总结学过的权限,属性及ACL相关命令及选项,示例。
6.1.文件权限管理
程序访问文件时的权限,取决于此程序的发起者
1.进程的发起者,同文件的属主;则应用文件属主权限
2.进程的发起者,属于文件属组;则应用文件属组权限
3.应用文件“其它“权限
6.2.文件所有者和属组属性操作
6.2.1.设置文件的所有者chown
chown 命令可以修改文件的属主,也可以修改文件属组
# 格式:
chown [OPTION]...[OWNER][:[GROUP]] FILE[OPTION]...
chown [OPTION]... --reference=RFILE FILE...
# 用法说明:
OWNER # 只修改所有者
OWNER:GROUP # 同时修改所有者和属组
:GROUP # 只修改属组,冒号也可用
--reference=RFILE # 参考指定的的属性,来修改
-R # 递归,此选项慎用,非常危险!
# 范例:
[root@rocky8 data]# cp /etc/fstab f1.txt
[root@rocky8 data]# pwd
/data
[root@rocky8 data]# ll
total 4
-rw-r--r--. 1 root root 655 Jan 1 23:32 f1.txt
[root@rocky8 data]# chown wang f1.txt
[root@rocky8 data]# ll
total 4
-rw-r--r--. 1 wang root 655 Jan 1 23:32 f1.txt
[root@rocky8 data]# chown :even f1.txt
[root@rocky8 data]# ll
total 4
-rw-r--r--. 1 wang even 655 Jan 1 23:32 f1.txt
[root@rocky8 data]# chown root.bin f1.txt
[root@rocky8 data]# ll
total 4
-rw-r--r--. 1 root bin 655 Jan 1 23:32 f1.txt
[root@rocky8 data]# chown wang:even f1.txt
[root@rocky8 data]# ll
total 4
-rw-r--r--. 1 wang even 655 Jan 1 23:32 f1.txt
[root@rocky8 data]# cp /etc/issue f2.txt
[root@rocky8 data]# ll
total 8
-rw-r--r--. 1 wang even 655 Jan 1 23:32 f1.txt
-rw-r--r--. 1 root root 23 Jan 1 23:35 f2.txt
[root@rocky8 data]# chown --reference=f1.txt f2.txt
[root@rocky8 data]# ll
total 8
-rw-r--r--. 1 wang even 655 Jan 1 23:32 f1.txt
-rw-r--r--. 1 wang even 23 Jan 1 23:35 f2.txt
# 范例:
[root@rocky8 data]# chown -R even.wang /data/
[root@rocky8 data]# ll
total 8
-rw-r--r--. 1 even wang 655 Jan 1 23:32 f1.txt
-rw-r--r--. 1 even wang 23 Jan 1 23:35 f2.txt
6.2.2.设置文件的属组信息chgrp
chgrp 命令可以只修改文件的属组
# 格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 递归
# 范例:
[root@centos8 data]# ll f1.txt
-rw-r--r-- 1 wang root 709 Dec 18 10:13 f1.txt
[root@centos8 data]# chgrp admins fl.txt
[root@centos8 data]# ll f1.txt
-rw-r--r-- 1 wang admins 709 Dec 18 10:13 f1.txt
6.3.文件权限
6.3.1.文件权限说明
# 文件的权限主要针对三类对象进行定义
owner 属主,u
group 属组,g
other 其他,o
# 注意
1.用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限
2.r和w权限对root 用户无效
3.只要所有者,所属组或other三者之一有x权限,root就可以执行
每个文件针对每类访问者都定义了三种权限
r Readable 4
w Writable 2
x Excutable 1
# 对文件的权限:
r # 可使用文件查看类工具,比如: cat,可以获取其内容
w # 可修改其内容,文件的是否被删除和文件的权限无关
x # 可以把此文件提请内核启动为一个进程,即可以执行(运行) 此文件(此文件的内容必须是可执行)
# 文件权限常见组合
--- 0
r 4
r-x 5
rw 6
rwx 7
# 对目录的权限:
r # 可以使用ls查看此目录中文件名列表,但无法看到文件的属性meta信息,包括inode号,不能查看文件的内容
w # 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x # 可以cd进入此目录,可以使用ls -l file 或 stat file 查看此目录中指定文件的元数据,当预先知道文件名称时,也可以查看文件的内容,属于目录的可访问的最小权限
X # 分配给目录或有部分x权限的文件的x权限,对无任意x权限的文件则不会分配x权限
# 目录权限常见组合:
- 不能访问目录
r-x 只读目录
rwx 可读也可写目录
数学法的权限
八进制数字
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
# 举例:
rw-r----- 640
rwxr-xr-x 755
6.3.2.修改文件权限chmod
# 格式
chmod [OPTION] ...MODE[,MODE]... FILE...
chmod [OPTION] ...OCTAL-MODE FILE...
# 参考RFILE文件的权限,将FILE的修改为同RFILE
chmod [OPTION] ...--reference=RFILE FILE...
# 说明: 模式法格式
MODE: who opt permission
who:u,g,o,a
opt:+,-,=
permission:r,w,x
# 修改指定一类用户的所有权限
U= g= o= ug= a= u=,g=
修改指定一类用户某个或某个权限
u+ u- g+ g- o+ o- a+ a- + -
-R: 递归修改权限
# 范例: 设置 X 权限
[root@centos8 data]# ll dir
tota7 8
-rw-r--r-- 1 root root 709 Dec 18 11:09 f1.txt
-rwxr--r-- 1 root root 709 Dec 18 11:09 f2.txt
drw-r--r-- 2 root root 6 Dec 18 11:15 subdir
[root@centos8 data]# ll -d dir
drwxr-xr-- 3 root root 48 Dec 18 11:15 dir
[root@centos8 data]# chmod -R a+x dir
[root@centos8 data]# ll -d dir
drwxr-xr-x 3 root root 48 Dec 18 11:15 dir
[root@centos8 data]# ll dir
tota7 8
-rw-r--r--1 root root 709 Dec 18 11:09 f1.txt
# 范例:
chmod u+wx,g-r,o=rx file
chmod-R g+rwx /testdir
chmod 600 file
6.4.linux文件系统上的特殊权限
前面介绍了三种常见的权限: r,w,x 还有三种特殊权限: SUID,SGID,Sticky
# 特殊权限:
SUID 作用于二进制可执行文件上,用户将继承此程序所有者的权限
SGID
作用于二进制可执行文件上,用户将继承此程序所有组的权限
作用于目录上,此目录中新建的文件的所屈组将自动从此目录继承
STICKY 作用于目录上,此目录中的文件只能由所有者自已来删除
6.4.1.特殊权限SUID
前提: 进程有属主和属组,文件有属主和属组
1.任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
2.启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
3.进程访问文件时的权限,取决于进程的发起者
二进制的可执行文件上SUID权限功能:
1.任何一个可执行程序文件能不能启动为进程: 取决发起者对程序文件是否拥有执行权限
2.启动为进程之后,其进程的属主为原程序文件的属主
3.SUID只对二进制可执行程序有效
4.SUID设置在目录上无意义
# SUID权限设定:
chmod u+s FILE..
chmod 4xxx FILE
chmod u-s FILE...
# 范例:
[root@rocky8 local]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 Mar 15 2021 /usr/bin/passwd
6.4.2.特殊权限SGID
# 二进制的可执行文件上SGID权限功能:
1.任何一个可执行程序文件能不能启动为进程: 取决发起者对程序文件是否拥有执行权限
2.启动为进程之后,其进程的属组为原程序文件的属组
# SGID权限设定:
chmod g+s FILE...
chmod 2xxx FILE
chmod g-s FILE...
# 目录上的SGID权限功能:
默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录。
# SGID权限设定:
chmod g+s DIR...
chmod 2xxx DIR
chmod g-s DIR...
6.4.3.特殊权限 Sticky 位
1.具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
2.在目录设置sticky 位,只有文件的所有者或root可以删除该文件
3.sticky 设置在文件上无意义
# sticky权限设定:
chmod o+t DIR...
chmod1xXX DIR
chmod o-t DIR...
# 范例:
[root@rocky8 local]# ll -d /tmp
drwxrwxrwt. 20 root root 4096 Jan 2 00:17 /tmp
6.4.4.特殊权限数字法
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
# 范例:
chmod 4777 /tmp/a.txt
# 权限位映射
SUID:user,占据属主的执行权限位
s:属主拥有x权限
s:属主没有x权限
SGID:group,占据属组的执行权限位
s:group拥有x权限
s:group没有x权限
sticky:other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
6.5.设定文件特殊属性
# 设置文件的特殊属性,可以访问 root 用户误操作删除或修改文件;不能删除,改名,更改
chattr +i file
# 只能追加内容,不能删除,改名
chattr +a file
# 显示特定属性
lsattr
# 范例1:
[root@rocky8 src]# mkdir dir
[root@rocky8 src]# touch dir/123.txt
[root@rocky8 src]# touch dir/345.txt
# 增加i属性
[root@rocky8 src]# chattr +i dir
[root@rocky8 src]# lsattr dir
-------------------- dir/123.txt
-------------------- dir/345.txt
[root@rocky8 src]# rm -rf dir
rm: cannot remove 'dir/123.txt': Operation not permitted
rm: cannot remove 'dir/345.txt': Operation not permitted
[root@rocky8 src]# lsattr
----i--------------- ./dir
# 去除i属性
[root@rocky8 src]# chattr -i dir
[root@rocky8 src]# lsattr
-------------------- ./dir
[root@rocky8 src]# rm -rf dir
[root@rocky8 src]#
# 范例2:
[root@rocky8 log]# lsattr /var/log/messages
-------------------- /var/log/messages
[root@rocky8 log]# chattr +a /var/log/messages
[root@rocky8 log]# lsattr /var/log/messages
-----a-------------- /var/log/messages
[root@rocky8 log]# echo 11111 >> /var/log/messages
[root@rocky8 log]# tail -2 /var/log/messages
Jan 3 21:09:54 rocky8 systemd[1]: NetworkManager-dispatcher.service: Succeeded.
11111
[root@rocky8 log]# rm -rf /var/log/messages
rm: cannot remove '/var/log/messages': Operation not permitted
6.6.访问控制列表ACL
6.6.1.ACL权限功能
ACL: Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
Centos7 默认创建的xfs和ext4文件系统具有ACL功能
Centos7 之前版本,默认手工创建的ext4文件系统无ACL功能需手动增加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
# ACL生效顺序:
所有者,自定义用户,所属组|自定义组,其他人
6.6.2.ACL相关命令
setfacl 可设置ACL权限
getfacl 可查看设置的ACL权限
# 范例1:
[root@rocky8 dir]# ll f1.txt
-rw-r--r--. 1 root root 0 Jan 3 21:29 f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@rocky8 dir]# setfacl -m u:wang:- f1.txt
[root@rocky8 dir]# ll
total 0
-rw-r--r--+ 1 root root 0 Jan 3 21:29 f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
mask::r--
other::r--
[root@rocky8 dir]# su wang
[wang@rocky8 dir]$ cd /usr/local/src/dir/
[wang@rocky8 dir]$ cat f1.txt
cat: f1.txt: Permission denied
[wang@rocky8 dir]$ echo 123 >> f1.txt
bash: f1.txt: Permission denied
# 示例2:
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
mask::r--
other::r--
[root@rocky8 dir]# setfacl -m u:wang:0 f1.txt
[root@rocky8 dir]# setfacl -m g:even:w f1.txt
[root@rocky8 dir]# ll
total 0
-rw-rw-r--+ 1 root root 0 Jan 3 21:29 f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
group:even:-w-
mask::rw-
other::r--
[root@rocky8 dir]# id wang
uid=1002(wang) gid=1002(wang) groups=1002(wang)
[root@rocky8 dir]# id mage
uid=1003(mage) gid=1003(mage) groups=1003(mage)
[root@rocky8 dir]# su mage
[mage@rocky8 dir]$ cat f1.txt
[mage@rocky8 dir]$ exit
[root@rocky8 dir]# ll
total 0
-rw-rw-r--+ 1 root root 0 Jan 3 21:29 f1.txt
[root@rocky8 dir]# echo "hello world" > f1.txt
[root@rocky8 dir]# su mage
[mage@rocky8 dir]$ cat f1.txt
hello world
[mage@rocky8 dir]$ echo magedata >> f1.txt
bash: f1.txt: Permission denied
[mage@rocky8 dir]$ exit
[root@rocky8 dir]# gpasswd -a mage even
Adding user mage to group even
[root@rocky8 dir]# id mage
uid=1003(mage) gid=1003(mage) groups=1003(mage),1001(even)
[root@rocky8 dir]# su mage
[mage@rocky8 dir]$ echo magedata2 >> f1.txt
[mage@rocky8 dir]$ cat f1.txt
cat: f1.txt: Permission denied
[mage@rocky8 dir]$ exit
exit
[root@rocky8 dir]# su wang
[wang@rocky8 dir]$ cat f1.txt
cat: f1.txt: Permission denied
[wang@rocky8 dir]$ echo wangdata >> f1.txt
bash: f1.txt: Permission denied
[wang@rocky8 dir]$ exit
[root@rocky8 dir]# groupmems -a wang -g even
[root@rocky8 dir]# id wang
uid=1002(wang) gid=1002(wang) groups=1002(wang),1001(even)
[root@rocky8 dir]# su wang
[wang@rocky8 dir]$ getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
group:even:-w-
mask::rw-
other::r--
[wang@rocky8 dir]$ cat f1.txt
cat: f1.txt: Permission denied
[wang@rocky8 dir]$ echo wangdata2 >> f1.txt
bash: f1.txt: Permission denied
# 示例3:
mount -o acl /directory
getfacl file | directory
setfacl -m u:wang:rwx file|directory
setfacl -m g:admins:rw file|directory
setfacl -x u:wang file |directory
# 清除所有ACL权限
setfacl -b file1
# 复制file1的ac1权限给file2
getfacl file1 | setfacl --set-file=- file2
命令 `getfacl file1 | setfacl --set-file=- file2` 将文件访问控制列表 (ACL) 从 file1 复制到 file2。 `getfacl` 命令检索文件的 ACL,而 `setfacl` 命令设置文件的 ACL。 `--set-file=-` 选项指定 ACL 应从标准输入中复制。
# mask 权限
1.mask只影响除所有者和other的之外的人和组的最大权限
2.mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
3.用户或组的设置必须存在于mask权限设定范围内才会生效
# 示例:
[root@rocky8 dir]# ll f1.txt
-rw-rw-r--+ 1 root root 22 Jan 3 21:40 f1.txt
[root@rocky8 dir]# chmod g=r f1.txt
[root@rocky8 dir]# ll f1.txt
-rw-r--r--+ 1 root root 22 Jan 3 21:40 f1.txt
[root@rocky8 dir]#
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
group:even:-w- #effective:---
mask::r--
other::r--
[root@rocky8 dir]# setfacl -m mask::rw f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:---
group::r--
group:even:-w-
mask::rw-
other::r--
[root@rocky8 dir]# setfacl -m u:wang:rwx f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:rwx
group::r--
group:even:-w-
mask::rwx
other::r--
[root@rocky8 dir]# setfacl -m mask::rw f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:rwx #effective:rw-
group::r--
group:even:-w-
mask::rw-
other::r--
# -set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
# 示例:
[root@rocky8 dir]# setfacl --set u::rw,u:wang:rw,g::r,o::- f1.txt
[root@rocky8 dir]# getfacl f1.txt
# file: f1.txt
# owner: root
# group: root
user::rw-
user:wang:rw-
group::r--
mask::rw-
other::---
7.结合vim几种模式,学会使用vim几个常见操作。
7.1.如何打开文件。并在打开文件(命令模式)之后如何退出文件。
7.1.1.vim命令格式
# 格式:
vim [OPTION]... FILE...
# 常用选项:
+# # 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN # 让光标处于第一个被PATTERN匹配到的行行首-b file 二进制方式打开文件
-d filel file2... # 比较多个文件,相当于 vimdiff
-m file # 只读打开文件
-e file # 直接进入ex模式,相当于执行ex file
-y file # Easy mode (like"evim",modeless),直接可以操作文件,ctrl+o:wqlq! 保存和不保存退出
# 说明:
1.如果该文件存在,文件被打开并显示内容
2.如果该文件不存在,当编辑后第一次存盘时创建它
7.1.2.三种主要模式和转换
vim 是一个模式编辑器,击键行为是依赖于 vim的的“模式
# 三种常见模式:
1.命令或普通(Normal)模式: 默认模式,可以实现移动光标,剪切/粘贴文本
2.插入(Insert)或编辑模式: 用于修改文本
3.扩展命令(extended command) 或命令(末)行模式: 保存,退出等
# 命令模式-->插入模式
i insert,在光标所在处输入
I 在当前光标所在行的行首输入
a append,在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
# 插入模式--- ESC----->命令模式
# 命令模式----:----> 扩展命令模式
# 扩展命令模式----ESC,enter----> 命令模式
# 范例: 插入颜色字符
1 切换至插入模式
2 按ctrl+v+[ 三个键,显示^[
3 后续输入颜色信息,如:^[[32mhe11o^[[Om
4 切换至扩展命令模式,保存退出
5 cat 文件可以看到下面显示
7.2.打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
1.插入模式--- ESC----->命令模式
2.命令模式----:wq(:q)回车----> 退出文件
7.3.打开文件(命令模式)之后,进入插入模式,编写一段话,““马哥出品,必属精品””, 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
[root@rocky8 dir]# vim f1.txt
^[[32m""马哥出品,必属精品""^[[0m
~
"f1.txt" 1L, 39C written
# 过程:
插入模式--- ESC -----> 命令模式 ----> :wq,回车 ----> 退出文件
7.4.使用cat命令验证文件内容,是刚刚自己写的内容。
[root@rocky8 dir]# cat f1.txt
""马哥出品,必属精品""
7.5.(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
命令行模式下
7.5.1.光标跳转
# 字符间跳转
h:左
L:右
j:下
k:上
#COMMAND: 跳转由#指定的个数的字符
# 单词间跳转:
w 下一个单词的词首
e 当前或下一单词的词尾
b 当前或前一个单词的词首
#COMMAND: 由#指定一次跳转的单词数
# 当前页跳转:
H 页首
M 页中间行
L 底
zt 将光标所在当前行移到屏幕顶端
zz 将光标所在当前行移到屏幕中间
zb 将光标所在当前行移到屏幕底端
# 行首行尾跳转:
^ 跳转至行首的第一个非空白字符
O 跳转至行首
$ 跳转至行尾
# 行间移动:
#G 或者扩展命令模式下
:# 跳转至由第#行
G 最后一行
1G,gg 第一行
# 句间移动:
) 下一句
( 上一句
# 段落间移动:
} 下一段
{ 上一段
# 命令模式翻屏操作
Ctrl+f 向文件尾部翻一屏,相当于Pagedown
Ctrl+b 向文件首部翻一屏,相当于Pageup
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
7.5.2.字符编辑
x 剪切光标处的字符
#x 剪切光标处起始的#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
J 删除当前行后的换行符
7.5.3.替换命令(replace)
r 只替换光标所在处的一个字符
R 切换成REPLACE模式(在末行出现-- REPLACE -- 提示),按ESC回到命令模式
7.5.4.删除命令(delete)
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw
de
db
#COMMAND
dd 剪切光标所在的行
#dd 多行删除
D 从当前光标位置一直删除到行尾,等同于d$
7.5.5.复制命令(yank)
y # 复制,行为相似于d命令
y$
y0
y^
ye
yw
yb
#COMMAND
yy 复制行
#yy 复制多行
Y 复制整行
7.5.6.粘贴命令(paste)
p # 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,粘贴至当前光标所在处的后面
P # 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面