第一周
第1天-行业介绍和计算机基础
第2天-Linux基本操作和帮助
第3天-文件管理和IO重定向
第4天-用户权限和文本工具
1.Linux基础
1.1vmware安装
准备好vm15.5的安装包,以管理员身份运行安装文件。安装完成后将虚拟网络编辑器按下图设置好方便后面使用
1.2.Rokey8.6和ubuntu2204安装
安装包地址Rokey8.6 ubuntu2204
准备好以上两个系统镜像,左上角 文件--新建虚拟机--自定义,后续参数设置为:centos 8 处理器2 内存2G 使用NAT 200G磁盘(将文件储存为单个文件)。
安装完成后启动虚拟机,在第一个选项回车
后续根据需要设置时区,用户。
1.3 使用Xshell远程登录
安装好Xshell后,左上角 文件----打开 如图自定义连接名称和输出主机IP
或者直接用命令行
ssh root@10.0.0.150
1.4虚拟机快照
定期创建快照有利于对系统文件的保护
2.帮助
2.1如何使用帮助
使用man+命令;info+命令来查看命令的说明手册
man cp
info cat
使用Q退出
使用--help查看命令帮助(因为有-h:对人类友好,所以不要简写)
id --help
3.文件系统基本知识和常用操作
3.1文件系统结构
3.2文件系统常用命令
pwd 打印当前路径
cd 切换目录
ls 列出文档名称
history 查看历史命令
touch创建文件
mv 移动
cp 复制(复制为覆盖操作,记得备份)
rename 重命名
rm 删除
mkdir创建目录
rmdir创建目录
>覆盖写入
>>追加写入
3.3Linux安全模型
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计
3A认证
3.4用户和组
用户(user):为获取系统资源权限相同特征的逻辑集合,主要为:管理员用户;系统用户;普通用户。
组(group):为有相同特性的用户集合。
一个用户可以存在于一个或者多个组
多个用户可以存在于一个或者多个组中。
4.文件权限属性管理
4.1用户身份
用户分为owner(拥有者) group(同组用户) others(其他) root(超级用户)
4.2权限介绍
4.3普通权限设置
属主与属组
属主:所属的用户,文档持有人
属组:所属的用户组
(下图所示root为这些文件的属主和属组)
4.3.1权限修改
修改文件权限
chmod 选项 权限模式 文档
chamod u+x g+r o+W test.txt
修改文件的属主
chown 选项 新的username 文档路径
[root@localhost f1]# chown mage a1.txt
[root@localhost f1]# ll
total 0
-rw-r--r-- 1 mage root 0 Apr 7 16:57 a1.txt
-rw-r--r-- 1 root root 0 Apr 7 16:57 a2.txt
-rw-r--r-- 1 root root 0 Apr 7 16:57 a3.txt
修改文件的属组
chgrp 选项 组名 文档路径
[root@localhost f1]# chgrp mage a2.txt
[root@localhost f1]# ll
total 0
-rw-r--r-- 1 mage root 0 Apr 7 16:57 a1.txt
-rw-r--r-- 1 root mage 0 Apr 7 16:57 a2.txt
-rw-r--r-- 1 root root 0 Apr 7 16:57 a3.txt
4.4特殊权限设置
SUID(可执行文件):可执行文件有SUID权限时,启动进程后的属主为此可执行文件的属主。
SGID(目录,程序):此目录下的所有新文件的属组都为目录的属组。
作用于程序上,用户将继承此程序所有组的权限。
Sticky(目录):只有目录所有者和root可以删除该文件
a #对文件:可追加内容,不可被删除,不可被修改,不可被重命名;对目录,可新建,修
改文件,但不可删除文件
i #对文件:不可被删除不可被修改不可重命名;对目录:可修改查看目录中的文件,不可
新建文件,不可删除文件
4.5使用ACL实现权限管理
ACL访问控制列表:主要用于针对于某些目录或者文件授予某个用户rwx权限的细节设置
getfacl:查看a.txt的权限详情
[root@localhost 0405]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
让mage拥有对a.txt的rwx权限
[root@localhost 0405]# setfacl -m u:mage:rwx a.txt
[root@localhost 0405]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:mage:rwx
group::r--
mask::rwx
other::r--
5.编辑器之神--vim
5.1 vim基础操作
打开文件
vim a.txt
退出vim
shift+: 进入命令模式,输入q(wq ,q!)退出
vim中按i进入 insert 插入模式 。
cat验证文件:
[12:17:05 root@localhost[ 0405]#cat a.txt
马哥出品,必属精品。
在扩展命令模式下使用地址定界和扩展命令快速编辑文本
例:
1,3d:删除1-3行
1,3y:复制1-3行,按p在光标处粘贴
在命令模式下使用 h左j右k下l 上实现光标跳转
第二周 1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
6. 磁盘存储术语总结: head, track, sector, sylinder.
7. 总结MBR,GPT结构。
8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
第二周
1.文本处理常用命令
cat -A:查看文本内容并显示所有控制符号
tail -n :查看指定后几行
head -n:查看指定前几行
sort:文件排序
cut:提取指定行
uniq:删除重复的行
wc:统计行,单词,字节,字符的总数
2.扩展正则表达式
通配符:匹配文件名中的字符串
正则表达式:用来匹配文本中字符串
元字符分类:字符匹配,匹配次数,位置锚定,分组
* 表示*前面的符号出现任意次
.* 表示任意符号的任意次数
单词:字母,数字,下划线。
扩展正则表达式
egrep= grep -E
锚定:
^ 行首:
[22:03:16 root@localhost[ ~]#echo linux | grep '^l'
linux
$行尾:
[22:03:04 root@localhost[ ~]#echo linux | grep 'x$'
linux
分组:
分组:( )将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
\|:或
grep:打印匹配到的行
sed:行编辑器
sed -i .bak:-i 编辑文件 加.bak改之前备份
找出端口号为6000的log文件修改为6010
[11:11:49 root@localhost[ 0405]#sed -i.bak '/^SELINUX=/c SELINUX=disabled' /etc/sysconfig/selinux
sed 's/6000/6010/' test.txt > test2.txt
[12:08:29 root@localhost[ 0405]#cat test.txt
port 6000
log redis-6000.log
[12:08:33 root@localhost[ 0405]#cat test2.txt
port 6010
log redis-6010.log
[12:10:07 root@localhost[ 0405]#sed 's/6000/6010/g' test.txt > test2.txt
[12:10:24 root@localhost[ 0405]#cat test.txt
port 6000 6000
log redis-6000.log
xargs
xargs :接收输入 做为cmd 的参数,可动态生成cmd的参数。
3 find
find 是实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
查找条件丰富
可能只搜索用户具备读取和执行权限的目录
find 选项 路径 条件 处理动作
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
查找/home 里面用户为mage且以s结尾的文件
[18:50:20 root@localhost[ 0405]#find /home/ -user mage -name '*s'
/home/mage/.mozilla/extensions
/home/mage/.mozilla/plugins
/home/mage/.config/ibus
文件压缩和打包
tar
将/etc目录打包并压缩放到/opt/etc.tar.gz 文件中
[root@localhost ~]# tar zcf /opt/etc.tar.gz /etc
tar: Removing leading `/' from member names
[root@localhost ~]# ll /opt
total 7592
-rw-r--r-- 1 root root 7771693 Apr 10 16:51 etc.tar.gz
将/opt/etc.tar.gz解压放到/0405 目录中
[root@localhost ~]# tar xf /opt/etc.tar.gz -C /0405
[root@localhost ~]# ll /0405/
total 20
drwxr-xr-x 146 root root 8192 Apr 10 16:12 etc
3.shell
变量
变量表示命名的内存空间,将数据放在内存空间中,通过变量名引用,获取数据。
1.变量类型
普通变量
环境变量
用于存储系统配置,账号等数据信息。
对每个进程都有效,且能被子系统调用。
查看命令:env export
[root@localhost ~]# env
......
SSH_CONNECTION=10.0.0.1 54212 10.0.0.150 22
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
......
环境变量:export:将当前变量设置为环境变量。仅对当前窗口有效。
只读变量(常量) :readonly
位置变量:在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数
脚本安全:
set -u :检测到不存在的变量时停止执行该条命令。
-e :errror exit:检测到错误自动停止并退出。
2.变量赋值
赋值 = ; =" "; =' ' ;
引用 $ ; ${ } ; $ " "
取消变量 unset
[root@localhost ~]# name=yunwei
[root@localhost ~]# echo $name
yunwei
[root@localhost ~]# echo ${name}
yunwei
使用+=追加变量内容
[root@localhost ~]# TITLE=wang
[root@localhost ~]# TITLE+=' sir'
[root@localhost ~]# echo $TITLE
wang sir
3.条件测试
test
[ ]
[[ ]]正则表达式
()会开启子shell,并且对其中变量赋值及内部命令执行后,将不再影响后续的环境.
{}不会开启子shell,在当前shell中运行,会影响当前shell环境.
&& 短路与 :命令A成功执行后执行命令B,反之则不执行命令B。
|| 短路或:命令A成功执行后不执行命令B,反之则执行命令B。
鸡兔同笼shell脚本
#!bin/bash
HEAD=$1
FOOT=$2
RABBIT=$((FOOT-HEAD-HEAD)/2)
CHICKEN=(HEAD-RABBIT)
echo RABBIT=$RABBIT
echo CHICKEN=$CHICKEN
批量创建用户脚本
#!/bin/bash
tart=1
end=10
for id in $(seq $start $end); do
if id -u "user$id" >/dev/null 2>&1; then
echo "用户user$id已存在"
else useradd -m -s /bin/bash "user$id"
echo "用户user$id已添加"
fi
done
5.磁盘管理
5.1分区方式
分区大小不能随意调整,要调整大小只能重建分区。
MBR分区:最大不超过2T,最多不超过4个主分区(分区表64字节,每16字节标识一个分区。)
4个主分区或者 3个主分区+1个扩展分区(扩展分区里可以再创建逻辑分区)
GPT分区:最大支持8Z,最多可以有128个分区。
df :查看文件系统的使用情况
[root@localhost ~]$df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 867M 0 867M 0% /dev
du:查看文件夹大小
[root@localhost ~]$du -sh /etc
33M/etc
5.3分区常用命令
lsblk:列出块设备
-f:查看详细信息
fdisk /路径:管理mbr分区 /路径 -l:查看分区详细情况
[root@localhost ~]$fdisk -l
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 8A27A58B-C3EC-4CE7-B2E3-FE9F73CDEBCB
gdisk/路径:管理gpt分区
parted:操作分区,(实时生效谨慎使用!)
partprobe:同步分区表
5.4文件系统
ext4 (ubuntu)
xfs(linux)
uuid:分区的唯一标识
modinfo 文件系统名:查看是否支持此文件系统
mkfs. :指定文件系统格式
5.4.2 挂载
在 /etc/fstab 中编辑挂载配置文件
mount:将新的分区挂载到文件夹
挂载时选择的文件夹内的旧文件会被隐藏
ro:只读
-a:刷新内存里的挂载关系
持久挂载
UUID=48b412cf-25b0-42d8-8380-47e2a8b85af6 /logs xfs defaults(pri= 修改此分区优先级) 0 0
umount:取消挂载关系。
tune2fs:查看ext4文件系统详细属性
tune2fs -f /挂载点
xfs_info:查看xfs文件系统详细属性
xfs_info /挂载点
5.4.3 swap:虚拟内存
free -h :显示系统内存使用情况
swapon /路径:开启此路径下的swap
swapoff /路径:禁用此路径下的swap
禁用swap:将/etc/fstab文件内swap行首添加#,并更新
[root@localhost ~]$sed -i.bak '/swap/s@^@#@' /etc/fstab
[root@localhost ~]$swapoff -a (swapon -a 启用swap) 禁用全部swap
[root@localhost ~]$free -h
total used free shared buff/cache available
Mem: 1.7Gi 320Mi 979Mi 9.0Mi 490Mi 1.3Gi
Swap: 0B 0B 0B
修改swappiness值,实现系统启用swap的阈值。
[root@localhost ~]$cat /proc/sys/vm/swappiness
30
[root@localhost ~]$ sysctl -p 使新的值生效
第三周
1. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
RAID0
n个磁盘垂直叠加,n利用率,0冗余,读写性能提升,最少1+硬盘实现
RAID1
2个以上磁盘互相作为镜像,1/n利用率,有较好冗余,读写性能下降,最少2个磁盘实现
RAID5
3块以上硬盘,每一块都可以作为校验盘。
n*(n-1)利用率 ,最多可以损坏一块硬盘。,读写性能提升,最少3块硬盘实现
RAID10
两个raid1组成raid0,n/2利用率,每组raid最多损坏一块盘,读写性能提升,最少4块盘实现
RAID01
两个raid0组成raid1,n/2利用率,有较好冗余,读写性能提升,最少4块盘实现
2. LVM磁盘扩容及缩容示例
2.1 扩容
pvcreate + /dev/sdb /dev/sdc (磁盘路径) 创建物理卷
pvs 查看物理卷
vgcreate +(-s指定pe大小 默认4M)+ 卷组名 + pv磁盘路径 创建卷组
vgdisplay 和 vgs 查看卷组
lvcreate +(-n指定卷名 -L指定大小)+ 卷组名 创建逻辑卷
lvs 查看逻辑卷
后续指定文件系统并挂载
lvextend -r(同步文件系统)-l +100%free(分配所有剩余空间) + 逻辑卷路径 逻辑卷扩容并同步文件系
统
vgextend +扩容目标卷组名+新增加卷组名 卷组扩容
3.1 缩容
有可能丢失数据!
建议备份并离线操作!
只支持ext
umount + /logs (挂载点) 解除挂载
fsck + -f (缩容目标卷路径) 检查目标卷信息
resize2fs + /dev/testvg/logs (缩容目标卷路径) 4G (缩容目标大小) 缩减
lvreduce + -L + 4G + (缩减目标逻辑卷)
mount -a 重新挂载
3.总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt总结程序包获取途径,以及rpm, yum, apt命令选项示例。
3.1 rpm命令
rpm -q:查询软件包是否安装
-qi:查询软件包详细信息
-ql:查看软件包内文件信息
-qf:查询文件所属的软件包
3.2 yum
remove
repolist
list
search
history
clean all
yum provides: 查询安装缺失文件的来源
yum provides */缺失的文件:补全缺失文件
3.3 apt
4. 简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。
第一步 服务器上建立repo文件
[BaseOS]
name=SelfBaseOS
baseurl=http://10.0.0.150/rockylinux/8/BaseOS/
gpgcheck=0
情路yum缓存
查看是否有yum源
[root@localhost yum.repos.d]$yum clean all
[root@localhost yum.repos.d]$yum repolist
第二步安装httpd服务并立即启动服务实现网站功能
[root@localhost yum.repos.d]$yum -y install httpd
[root@localhost yum.repos.d]$systemctl enable --now httpd
第三步建立本地仓库文件夹使用reposyc拉取互联网的源数据到本地仓库
mkdir /var/www/html/rockylinux/8/
[root@localhost yum.repos.d]$yum reposync --repoid=BaseOS --download-metadata -p /var/www/html/rockylinux/8/
第四步 在客户端配置repo文件,使用服务器端的本地yum仓库
[BaseOS]
name=SelfBaseOS
baseurl=http://10.0.0.150/rockylinux/8/BaseOS/
gpgcheck=0