linux学习第一周总结
1、在window10安装虚拟软件vmware,安装Rocky和ubuntu系统;安装远程连接工具Xshell对刚刚安装好的系统进行远程连接
1.1 vmware的安装(window10系统上)
一、下载exe软件包
可以在官网https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware Workstation Pro&freeDownloads=true选择版本进行下载
官网下载需要注册和一大堆东西,推荐网上找正规安装包进行下载,省事。
二、运行exe程序进行安装
下载好exe文件之后双击进行安装
选择自定安装路径
等待安装完成即可
完整完成界面(我之前很早就安装了,里面也有一部分操作系统)
1.2、Rocky9.4和ubuntu24系统安装
一、下载iso镜像文件
二、在VMware中安装Rocky9.4系统
点击文件-新建虚拟机
选择第一个选项典型
选择第二个选项,并且将我们下载好的Rocky镜像选择好
修改虚拟机名称,一般使用系统名+ip号的格式,位置自己选择就好,留够空间就行,后面还有很多系统会弄到一起
磁盘大小根据自己需求来选(选择200G实际并不会直接占用200G,虚拟机的磁盘是看你实际用了多少物理机分配多少的,所有磁盘大小大点没事),存储为单个文件好点。
这里我们进行一下我们自定义硬件配置
内存弄大点,反正也是你实际用多少物理机分配多少的
CPU核数也弄多点
网络选NAT模式,方便局域网通信
如果安装系统有图形界面,把这个加速3D图形关闭,不然安装和使用系统会很卡
确认之后点击完成
在vm可以看到我们刚刚配置虚拟机进行启动(刚刚Rocky名字打错了,我重命名了下)
选择第一个Install进行系统安装(按enter)
语言选择
配置下用户和root密码
root用户密码配置
创建自己的用户
将要安装的磁盘选择下
点击开始安装即可,因为是桌面版,所以安装的时间比较长。
安装过程之一
安装完成重启系统
用我们创建好的用户进行登录
安装完成,可以在右下角打开终端
这里我是安装系统的时候忘记改网卡ip了,所以进来改了下
修改成功,下线。
三、在VMware中安装Ubuntu24(无桌面,服务器版本)
1、下载好iso镜像后基本配置同Rocky9.4
2、启动系统,选择第一个选项进行安装
3、等待一会后进行选择语言界面,没中文就选英文了
4、按回去继续,这里是提示我们要不更新版本
5、键盘选择默认就行
6、选择安装类型,默认回车
7、网络配置
移动上下键选择网卡进行手动配置ip
8、配置静态ip地址
这个地方有一些比较坑的地方,第一行的Subnet最开始按我的理解是子网掩码,填了/24和255.255.255.0都报错,要按10.0.0.24这种格式写才行
Addrss是IP地址,Gateway是我们的默认网关,Name servcers是DNS
配置完成后进行下一步
9、代理信息选择默认进行下一步
10、测试镜像下载东西
11、磁盘配置选择默认即可
12、配置主机名和用户、用户密码
13、系统升级按enter跳过
14、是否安装SSH远程连接服务(默认安装,回车跳过)
15、安装附加软件,不需要直接跳过
16、开始安装系统
17、安装成功,ip正确、
1.3、vm软件使用和系统安装注意事项
1、快照的创建和使用:
右击虚拟机选择快照,可以创建快照,回复快照
快照相当于一个存档,建议定时创建一个快照,避免后面系统崩了无法处理
2、虚拟机的克隆
选择虚拟机右击,选择管理,有克隆选项,这个可以帮我们快速的生成多台相同虚拟机。
3、在安装带桌面服务的系统时,最好把显示器里的3D加速关闭,不然生成图形界面会非常卡
4、在安装无桌面服务的系统时,想配置静态ip,最好在系统安装时就配置,不然安装完成之后再修改需要改网卡配置文件,比较麻烦
1.4、系统远程连接工具Xshell的安装及使用
安装:
1、官网https://cdn.netsarang.net/274efd03/Xshell-8.0.0067p.exe下载文件
2、双击运行
3、最后认证下就可以免费使用了
使用:
1、打开软件
2、点击文件,新建
3、输入名称和主机号
名称是我们自己定义的终端名称,采用主机ip(系统名)
主机是我们想要连接的主机ip地址‘
协议和端口号不要变,默认就行
4、接受密钥
5、输入用户名和密码
6、登录成功
注:
1、系统要安装ssh服务并且启动才能进行远程连接 可以使用netstat -tupln查看服务是否启动
2、个别系统如ubuntu系统会至今root用户进行远程连接,需要修改/etc/ssh/sshd_config文件,
找到
PermitRootLogin 这行取消注释,修改为PermitRootLogin yes(没有这行就直接添加)再重启下ssh服务就行
2、总结什么是shell,以及常见的各类shell。
shell的解释:Shell是计算机系统中用户与操作系统内核之间的交互接口,其核心功能是通过解释和执行用户命令实现系统操作与管理
一种编程语言,有编程常见的if,for,while等功能,能执行和解释我们编写的.sh文件。
相当于一个中介,将我们理解的东西转换成计算机能理解的东西
常见的各类shell:
- bash 主流最常用
- csh
- ksh
- csh
3. 结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法。
linux命令最基本的用法是 命令名 [选项] [参数] 方括号代表可选项
1、ls 常看目录下所有的文件
-a 查看隐藏文件
-l 查看文件属性 -
-d 显示文件名,不进入到文件里面
ls -a dirname
ls -l dirname
ll -d dirname
2、cd 进入一个目录
一般直接cd 后面接目录名即可,很少会添加选项
cd filename
3、mkdir 创建一个文件
-p 递归创建目录
[root@rocky9-12 test]# ls
ip.sh
[root@rocky9-12 test]# mkdir 1/2/3/4
mkdir: 无法创建目录 “1/2/3/4”: 没有那个文件或目录
[root@rocky9-12 test]# mkdir 1/2/3/4 -p
[root@rocky9-12 test]# ls
1 ip.sh
[root@rocky9-12 test]#
4、mv 移动文件
-v 显示移动过程中的信息
[root@rocky9-12 test]# mv /tmp/1 /test/ -v
已重命名 '/tmp/1' -> '/test/1'
[root@rocky9-12 test]# ls
1 ip.sh
5、cp 拷贝文件
-R 递归复制目录及其子目录内的所有内容
cp: 未指定 -r;略过目录'1'
[root@rocky9-12 test]# ls
1 ip.sh
[root@rocky9-12 test]# cp 1 1.bak -r
[root@rocky9-12 test]# ls
1 1.bak ip.sh
6、rm 删除文件
-r 递归
-f 强制删除
root@rocky9-12 test]# rm -rf 1.bak/
[root@rocky9-12 test]# ls
1 ip.sh
7、ps 查询所有进程
aux
a代表所有用户的进程、u代表人性化显示、x显示没有控制终端的进程
注:历史兼容性
在部分系统中,ps -aux(带短横线)为旧式 BSD 风格写法,而 ps aux(无短横线)是更通用的 POSIX 标准格式
现代 Linux 系统已兼容两种写法,但推荐使用无短横线形式(ps aux)以避免歧义
查看帮助文档的方法:
使用命令名 --help的方式查看命令的简单介绍 里面会一些比较常见的参数
想要理解全面的话可以使用man 命令名进行查看
不理解的地方在网上进行针对性的查找和理解
4、总结linux文件系统目录结构和目录的功能
linux的目录结构:像一颗倒着生长的树,最上面的节点"/"成为根目录,linux中所有文件都是从根目录开始
目录的功能:
1、 /bin 存放可执行文件(二进制包),基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;例如
ls、cp、mkdir等命令。功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用命令
2、 /usr 用于存放与系统用户直接有关的文件和目录,如应用程序及支出系统的库文件
3、 /sbin 大多是涉及系统管理的命令的存放地,也是超级权限用户root的可执行命令存放地。普通用户无权限执行这个目录下的命令。
4、 /etc 存放系统所有配置文件,例如passwd存放用户账户信息,hostname存放主机名等。
5、 /tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件
6、 /lib 存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件
7 、 /var 通常用于存放长度可变的文件,例如日志文件和打印机文件
8、 /home 用户家目录
9、 /opt 作为可选文件和程序的存放目录。有些软件包也会被安装在这里,也就是自定义软件包;有些用户自己编译的软件包,就可以安装在这个目录中
10、 /root 超级管理员的家目录
11、 /dev 光盘文件存放
5、 总结文件操作常见的命令和文件夹常见操作和命令
文件:
1、创建
touch创建文件(无内容)
vim/vi nano 编辑器创建文件 随意编写内容,功能较复杂
使用管道符 >,>>
[root@rocky9-12 test]# echo "Hello,jimmy" >test.txt
[root@rocky9-12 test]# cat test.txt
Hello,jimmy
2、修改文件内容
使用vim,awk,sed等文件编辑器进行修改
使用管道符号>,>>对文件进行修改
3、查看文件内容
cat,head,tail
cat最为常见的查看文件内容的目录 直接显示文件使用内容
head和tail一个是从头查看文件内容,一个是从末尾查看文件内容 两者都可以加参数 -n10 选定查看多少行
对于复杂的文件一般和结合管道符和grep命令进行筛选查看
4、删除文件
rm filename即可 (可以加-f选项不显示提示直接删除)
目录:
1、创建
mkdir 常见选项 -p递归创建目录
例如:
[root@rocky9-12 test]# mkdir 1/2/3/4
mkdir: 无法创建目录 “1/2/3/4”: 没有那个文件或目录
[root@rocky9-12 test]# mkdir 1/2/3/4 -p
[root@rocky9-12 test]# tree 1
1
└── 2
└── 3
└── 4
3 directories, 0 files
2、修改
对目录改名的话一般用mv即可
修改
3、删除
rm -r rm加-r即可删除一个目录
6、总结文件元数据相关的知识点,包含硬链接和软连接的区别等知识
一:文件元数据核心概念
1.元数据的定义
元数据是存储文件结构信息的数据。元数据存储文件的indoe中,是系统中文件的唯一标识,对于linux系统而言,
查找一个文件是通过对于的indoe来进行查找,而并非文件名
2.元数据存储了文件的哪些信息
- 文件的类型(普通文件,目录等)、权限(r,w,x)
- 文件所有者和所属组(User ID,Group ID)
- 文件的大小
- 时间戳(ctime,atime,mtime)
- 硬链接计数
- 如果是目录的元数据,里面会有它的下级目录的indoe
补充:什么是indoe
定义:Inode(Index Node)是 Unix/Linux 文件系统中用于管理文件的元数据存储结构,
每个文件(包括目录)对应一个唯一的 inode,通过整数编号(inode number)标识。
其核心作用是记录文件的属性信息并管理数据存储位置,与文件名解耦,实现高效的文件系统管理。
在一块磁盘中,我们的inode节点的大小是固定不变的,它的大小取决与磁盘在进行格式化时候选择的文件格式。
二、硬链接和软连接的区别
1、硬链接与源文件共享inode信息,而软链接会自己新增一个indoe。
2、删除源文件后,硬链接不会失效,而软连接会断链(软链接失效)
3、硬链接不能跨越不同的文件系统,而软链接可以。
7、总结开放系统互联OSI模型,每层作用及对应的协议。
OSI七层模型是一种理论上的网络模型,它为网络通信提供了一个比较清晰的框架,但是由于过于理论和抽象,真正执行起来效率低。
补充:在OSI七层模型里面,每层的功能都是相互独立的,互相不干扰的;只是说上层协议会依赖于下层协议,比如https进行传输依赖下层的TCP的连接,而TCP的连接依赖于IP协议进行互联网目标主机的查找。
同时,在ISO模型中,我们会将一个基础数据进行逐步的封装,最终通过光信息进行传输,到达目标主机之后会进行拆分处理得到想要的数据。
8、 总结TCP包头结构,TCP三次握手,4次挥手。
TCP包结构
TCP包的头结构一般是默认是20字节,主要包括以下部分
字段名 | 长度(bit) | 功能说明 |
---|---|---|
源端口 | 16 | 发送程序的默认端口 |
目标端口 | 16 | 接收程序的默认端口 |
序列号 | 32 | 本报文段第一个数据字节的序号,用于数据有序传输 |
确认号 | 32 | 期望接收的下一个数据字节的序号(仅当ACK标志为1时有效)c |
数据偏移 | 4 | 指示TCP头部长度(以4字节为单位),用于定位数据起始位置 |
控制位 | 6(各1位) | 包括URG、ACK、PSH、RST、SYN、FIN,用于连接管理和数据控制 |
窗口大小 | 16 | 接收方可用缓冲区大小,用于流量控制(最大65535字节) |
校验和 | 16 | 校验数据完整性(覆盖TCP头部、数据和伪首部) |
紧急指针 | 16 | 当URG=1时有效,指向紧急数据的末尾位置 |
选项 | 可变 | 扩展功能(如最大报文段长度MSS、时间戳等) |
填充 | 可变 | 确保头部长度是4字节的整数倍 |
TCP协议主要围绕着安全性进行工作,它的三次握手和四次挥手都是为了确保安全
三次握手
主要目的:为了确认客户端(发送方)和服务端(接收方)都具有接收数据包和发送数据包的能力
主要信号
- SYN=1 同步信息,测试对方能否正常接收数据包,代表自己有发送数据包的能力
- ACK=1 确认信息,代表自己有接收数据包的能力
我们可以把TCP三次握手理解成一个A和B打电话的场景
1、A拨打了B的电话进行通信,A需要确保B是否就在电话旁;所以A会说:B,你在吗,你能听到我的声音吗?(对应上图发送Packet1,SYN=1,Seq=x)
确认A具有发送消息能力
2、B听到了A的声音,B需要回复自己能够顺利听到A的声音,所以B会回复:是的,A,我在这里(对应上图发送Packet2,ACK=1,ACK=x+1)同时;B需要确认A此时还在不在电话旁,所以B会加上一句:A,那你还在在线吗(对应上图的Packet2,SYN=1,Seq=y)
确认B具有接收和发送消息的能力
3、A听到B的回复消息,说明B此时在线,具有B具有接收自己消息和发送自己消息的状态;同时B要确认需要A是否有接收消息的能力,所以A会回答:是的,B,我还在线(对应上图发送Packet3,ACK=1,Seq=x+1,Ack=y+1)
确认A具有接收消息能力
4、到此,说明A和B都具有发送和接受消息的能力,正式建立对话连接(对应TCP三次握手成功)
四次挥手
- FIN=1 发送信息,代表自己要断开连接
- ACK=1 确认信息,代表自己有接收数据包的能力
思考:为什么TCP协议要握手三次,挥手要四次,不能减少次数吗
TCP协议最核心的一点就是可靠性,从TCP的可靠性出发,不允许出现数据的丢失。
如果把TCP三次握手的第三次握手去掉,即服务端发送SYN-ACK包就进行连接,向客户端发送数据;虽然客户端第一次握手时向服务端发送了SYN包,但是经过了一段时间此时客户端未必会在线,如果服务端盲目向外发送数据(比如是客户端请求的一些隐私数据),此时客户端并不在线,服务端发出的数据就有可能并其他人截取。所以,在TCP协议中,可靠行永远是第一的。
同理,四次挥手如果少一次,如服务端的第二次挥手和第三次挥手合并成一次挥手(即直接发送FIN-ACK),这样的话会导致服务器还有剩余数据没有发送完成,客户端那边就已经关闭通道了,造成了数据的丢失。
9、总结主机到主机的包传递过程。
一:主机位于同一网段
二:主机不同网段,但是属于同一局域网
多了一步路由器的数据转发
三:互联网之间的主机
中间经过多台路由器进行数据转发到底目标主机进行拆分数据包
10、 总结IP地址 A, B, C, D 类,并解析IP地址的组成
ip地址的组成
ipv4地址是由网络位和主机位组成的,总长度为32bit,通常用十进制点分来表示,如192.168.1.1
- 网络位 由子网掩码决定,标识一个网段
- 主机位 标识一台主机
ipv6地址总长度128位,用16进制点分来表示,如2001:0db8:85a3:0000:0000:8a2e:0370:7334 (8组16进制组成)
类别 | 二进制前缀 | 网络号长度 | 地址范围 | 适用场景 | 私有地址 |
---|---|---|---|---|---|
A类 | 0 | 8位 | 1.0.0.0 – 126.255.255.255 | 超大规模网络 | 10.0.0.0 ~ 10.255.255.255 |
B类 | 10 | 16位 | 128.0.0.0 – 191.255.255.255 | 中型企业网络 | 172.16.0.0 ~ 172.31.255.255 |
C类 | 110 | 24位 | 192.0.0.0 – 223.255.255.255 | 小型局域网 | 192.168.0.0 ~ 192.168.255.255 |
D类 | 1110 | 无(不需要划分网段) | 224.0.0.0 – 239.255.255.255 | 组播通信 | 无 |
11、 201.222.200.111/18计算主机数?子网掩码?说明计算方法。
子网掩码为:255.255.192
主机数为:214,可用主机数为214-2
IP地址由32位组成,/18表示对前面18位进行遮掩,子网掩码形式为11111111.11111111.11000000.00000000
装换成十进制为255.255.192
主机数
主机位数 = 32 - 18 = 14
主机数 = 2^14
可用主机数 = 2^14 - 2 (减去网络地址和广播地址)xxx.xxx.xxx.0和xxx.xxx.xxx.255
12、当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
通过比较两个ip地址的子网掩码进行判断是否在同一个网段
A的子网掩码是255.255.0.0 网络位是10.0
A的子网掩码是255.255.255.0 网络位是10.0.2
故A和B不在同一网段上,如A和B在同一局域网上,可以通过路由器进行数据转发进行通信。
13、如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。
将10.0.0.0/8改为10.0.0.0/13
子网的掩码数为:255.248.0.0
每个子网的可用主机数为:2^19-2
14、安装nodejs,并且使用npm完成hexo的安装,安装nginx,并且完成hexo博客页面的部署
1、安装node.js
yum -y install nodejs
2、安装hexo
npm install -g hexo-cli
hexo init myblog # 初始化项目
hexo generate # 生成静态文件
hexo deploy # 部署到服务器
[root@rocky9-15 ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg myblog red
[root@rocky9-15 ~]# cd myblog/
[root@rocky9-15 myblog]# ls
_config.landscape.yml _config.yml node_modules package.json package-lock.json scaffolds source themes
[root@rocky9-15 myblog]# hexo server
INFO Validating config
INFO Start processing
INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.
未安装nginx之前启动
3、安装nginx
yum -y install nginx
[root@rocky9-15 myblog]# nginx -v
nginx version: nginx/1.20.1
80端口正常运行nginx首页
4、布置nginx反向代理
[root@rocky9-15 nginx]# cd conf.d/
[root@rocky9-15 conf.d]# cat hexo.conf
server {
listen 80;
server_name 10.0.0.15;
location / {
proxy_pass http://10.0.0.15:4000;## 需要nginx方向代理的路径
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s; # 增加超时时间
}
}
10.0.0.15:4000可以正常访问,但是通过nginx代理的10.0.0.15:80出现502报错
后面查nginx日志发现是 SELinux的问题
执行sudo setenforce 0 # 临时设置为 permissive 模式
部署完成
15、总结http协议常见的状态码和一次http请求的完整流程
http常见状态码:
- 信息响应(1xx)
100 Continue:服务器已接收请求头,客户端应继续发送请求体
101 Switching Protocols:服务器同意切换协议 - 成功响应(2xx)
200 OK:请求成功,返回请求的资源(如网页加载成功)
201 Created:请求成功且服务器创建了新资源
204 No Content:请求成功,但无返回内容 - 重定向(3xx)
301 Moved Permanently:资源永久重定向(如域名变更,搜索引擎会更新索引) - 客户端错误(4xx)
400 Bad Request:请求语法错误(如参数缺失或格式错误)
401 Unauthorized:未授权(需身份验证,如未登录)
403 Forbidden:服务器拒绝执行(权限不足)
404 Not Found:请求的资源不存在
409 Conflict:请求与资源当前状态冲突(如并发修改 - 服务器错误(5xx
500 Internal Server Error:服务器内部错误(如代码异常)
502 Bad Gateway:网关或代理服务器收到无效响应
503 Service Unavailable:服务不可用(如超载或维护)
504 Gateway Timeout:网关超时(上游服务器未及时响应)
一次http请求的完整流程:
http请求是包含请求和响应的
一些请求头
响应的静态html以及动态js和css