菜鸡运维成长记-第一周
计算机的发展史:
第一代:真空管(电子管)计算机
代表机型:世界上第一台通用计算机“ENIAC”于1946年2月14日在美国宾夕法尼亚大学诞生。发明人是美国人莫克利(JohnW.Mauchly)和艾克特(J.>代表机型:世界上第一台通用计算机“ENIAC”于1946年2月14日在美国宾夕法尼亚大学诞生。发明人是美国人莫克利(JohnW.Mauchly)和艾克特(J. Presper Eckert) ENIAC以电子管作为元器件,所以又被称为电子管计算机,是计算机的第一代。电子管计算机由于使用的电子管体积很大,耗电量大,易发热,因而工作的时间不能太长。
第二代:晶体管计算机
代表机型:1955年,贝尔实验室研制出世界上第一台全晶体管计算机TRADIC,它装有800只晶体管,只有100瓦功率,占地也仅有3立方英尺。 TRADIC相比上一代真空管计算机大幅降低了功耗与体积。与电子管计算机相比,晶体管计算机包含了操作系统,它能够为输入输出、内存管理、存储和其他的资源管理活动提供标准化的程序。
第三代:集成电路计算机
代表机型:1964年4月7日,IBM推出了划时代的System/360大型电脑,这一系列是世界上首个指令集可兼容计算机。从前,计算机厂商要针对每种主机量身定做操作系统,System/360的问世则让单一操作系统适用于整系列的计算机。
第四代:超大规模集成电路计算机
代表机型:美国ILLIAC-IV计算机,是第一台全面使用大规模集成电路作为逻辑元件和存储器的计算机,它的出现标志着计算机的发展已到了第四代。
第五代:智能计算机
第五代计算机是把信息采集、存储、处理、通信同人工智能结合在一起的智能计算机系统。它能进行数值计算或处理一般的信息,主要能面向知识处理,具有形式化推理、联想、学习和解释的能力,能够帮助人们进行判断、决策、开拓未知领域和获得新的知识。人-机之间可以直接通过自然语言(声音、文字)或图形图象交换信息。
服务器硬件相关知识:
服务器其实就是一台配置更高的计算机,它的内部结构也和普通的计算机大同小异。
电源
电源相当于人体的心脏,需保障电力供应,如果要买服务器,应选择质量好一点的电源。另外需要注意的是,在实际使用场景中,如果只是配置一个服务器负责核心业务,那么最好使用双电源,并且分别接不同的机房线路;如果服务器是集群中的一台(若干机器做一件事),则可以不用双电源。除此之外,运维工作中就不用再过多考虑电源的其他问题了。
CPU处理器
CPU 处理器相当于人体的大脑,负责整个服务器的运算和控制,是影响其性能效率的最核心部件。
精简指令集的 CPU:设计代表有 SUN 公司的 SPARC 系列和 ARM 系列等,这类 CPU 的设计特点是指令集精简,每个指令执行的时间很短,操作很简单、效率较高。
复杂指令集的 CPU:设计代表有大家熟知的 Intel 至强系列(XEON)和 AMD 系列(应用不多)等,这类 CPU 的设计特点是指令数量多,指令集复杂,且执行的时间较长,但能处理的事务更多、更丰富。
内存(RAM)
内存是 CPU 和硬盘之间的缓冲设备,是临时存储器(用于存放数据),这就意味着,如果突然断电,那么位于内存中的数据很可能会丢失。
程序运行的时候,一般会被调度到内存中执行,服务器关闭或程序关闭之后,数据将自动从内存中释放掉。
硬盘(磁盘)
硬盘就是永久存放数据的存储器,如今常用的硬盘都是 3.5 英寸的,且生产的单块硬盘的容量越来越大,体积却越来越小,速度也越来越快,其中常见的硬盘有300GB、600GB、1TB、3TB、4TB等规格。
注意,对于工业级(企业级)硬盘计算,以 1000 为单位进行换算,即1TB=1000GB。
根据实际场景的需要,硬盘的接口有 IDE、SCSI、SAS、SATA 等几类(其中 IDE、SCSI 已退出历史舞台),硬盘的类型也分为机械硬盘和SSD(固态硬盘)两种。
从性能和价格的角度,可以对现有几类硬盘进行排序(从高到低),依次是 SAS接口固态硬盘 > SATA固态硬盘 > SAS机械硬盘 > SATA机械硬盘。
Raid卡(阵列卡)
Raid 称为磁盘冗余阵列,其功能是,当企业的网站(业务)数据量很大,单块盘装不下的时候,若购买多块硬盘存放数据,就需要利用 Raid 技术将所有硬盘整合成一个大硬盘,然后才能在这个大硬盘上分区(划分隔断、虚拟硬盘)存放数据。
但是,硬盘多了势必会有损坏,可数据是不能丢的,针对这种情况,Raid 还具备一个功能,就是多块硬盘放置在一起可以配置冗余(备份),由此可以确保即使若干硬盘有损坏,数据也不会丢失。
远程管理卡
远程管理卡是服务器特有的远程管理部件,在家用电脑及笔记本电脑上是不存在的。它的作用是通过网络远程(异地)开关服务器,并可以查看服务器开关的过程等信息。
主板
主板实际上就是一块电路板,相当于人体的骨架,CPU、内存、硬盘、Raid 卡等所有硬件设备最终都要连接在主板上,才能正常工作。
VMware下安装Rocky和Ubuntu:
安装前网络设置:
安装镜像下载地址:
Rocky镜像下载:https://dl.rockylinux.org/vault/rocky/
Ubuntu镜像下载:https://cn.ubuntu.com/download
安装时WM中操作:
Rocky选择:
Ubuntu选择:
选择完继续下一步:
安装Rocky,选择Rocky的镜像并启动:
磁盘分区:
开启网络,设置主机名:
设置时区时间:
设置管理员密码:
等待安装:
安装Ubuntu,选择Ubuntu的镜像并启动:
等待安装完用xhell链接:
ubuntu设置root登陆:
设置登陆密码:sudo passwd root
修改配置文件:sudo vim /etc/ssh/sshd_config
找到PermitRootLogin将PermitRootLogin后面的prohibit-password改为yes,保存配置文件
重启ssh服务使配置文件生效:sudo service ssh restart
Linux常用基本命令用法:
查看硬件信息
1.查看cpu
lscpu
2.查看内存
free
3.查看硬盘和分区情况
lsblk
查看系统版本信息
1.查看系统架构
arch
2.查看内核版本
uname -r
3.查看操作系统发行版本
cat /etc/os-release
日期和时间
1.查看系统时间
date "+%F %T"
2.查看硬件时间
hwclock
3.设置时区
timedatectl set-timezone Asia/Shanghai
4.查看日历
cal 11 2023
关机和重启
shutdown 程序会广播己登录的用户,被看作是安全的关机命令是一个计划关机任务,可撤销.
shutdown +10 10分钟后关机
shutdown -r now现在重启
shutdown -h now现在关机
shutdown -c 取消关机计划
用户登陆信息查看命令
whoami: 显示当前登录有效用户
who: 系统当前所有的登录会话
w: 系统当前所有的登录会话及所做的操作
输出信息echo
echo [-neE] [字符串]
-n 输出完成后不换行
-e 转义特定字符串
-E 不转义,原样输出,默认选项
比较''(单引号),""(双引号),``(反单引号)三者的区别
单引号:命令变量都不识别
[root@ubuntu22 ~]# echo 'echo $HOSTNAME'
echo $HOSTNAME
双引号:识别变量不识别命令
[root@ubuntu22 ~]# echo "echo $HOSTNAME"
echo ubuntu22
反单引号:命令变量都识别
[root@ubuntu22 ~]# echo `echo $HOSTNAME`
ubuntu22
bash的快捷键
Ctrl + l 清屏,相当于clear命令
Ctrl + a 光标移到命令行首,相当于Home
Ctrl + e 光标移到命令行尾,相当于End
Ctrl + u 从光标处删除至命令行首
Ctrl + k 从光标处删除至命令行尾
Alt + r 删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + y 粘贴至光标后
Linux文件系统相关:
Linux下文件类型:
- | d | l | b | c | p | s |
普通文件 | 目录文件 | 符号链接文件 | 块设备文件 | 字符设备文件 | 管道文件 | 套接字文件 |
文件和目录操作相关:
绝对路径:
1. 以正斜杠/ 即根目录开始
2. 描述完整的文件的位置路径
3. 可用于任何想指定一个文件名的时候
相对路径:
1. 不以斜线开始,而是以当前所在的位置开始
2. 一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置
3. 可以作为一个简短的形式指定一个文件名
1.显示当前目录的绝对路径pwd
当前目录 $PWD
上一次目录 $OLDPWD
显示真实物理跊径 pwd -P
显示链接路径(默认) pwd -L
2.更改目录cd
切换至链接目录,默认选项 cd -P
切换至父目录 cd ..
切换到上一个目录 cd -
切换至当前用户家目录 cd|cd ~
切换至指定用户家目录 cd ~username
3.列出目录内容ls
显示额外的信息 -l
按从大到小排序 -S
按mtime排序,时间新的靠前 -t
配合-t选项,显示并按atime从新到旧排序 -u
4.查看文件状态stat
显示相关的文件系统信息,所谓文件系统,对应的就是windows下面的硬盘分区>显示相关的文件系统信息,所谓文件系统,对应的就是windows下面的硬盘分区 -f|--file-system
atime access time 访问时间,即读取文件内容时间,此字段值会延时更新,以降低IO负载
mtime modify time 修改内容的时间
ctime change time 元数据发生变化的时间
5.确定文件内容file
使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用
点击查看代码
[mmy@ubuntu22 mmy]$ file list.zip
list.zip: Zip archive data, at least v1.0 to extract, compression method=store
6.文件通配符
{}会先展开命令在执行,[]会先匹配在交给ls
匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件 *
匹配任何单个字符,一个汉字也算一个字符 ?
匹配数字范围 [0-9]
一个小写字母 [a-z]
一个大写字母 [A-Z]
匹配列表中的任何的一个字符 [wang]
匹配列表中的所有字符以外的字符 [^wang]
匹配列表中的所有字符以外的字符 [^a-z]
7.创建空文件和刷新时间touch
touch命令可以用来创建空文件或刷新文件的时间
改变atime,ctime -a
改变mtime,ctime -m
指定修改时间和访问时间,而不是采用当前系统时间 -d|--date
如果文件不存在,不创建 -c|--no-create
8.复制文件和目录cp
利用 cp(copy)命令可以实现文件或目录的复制
推荐执行cp命令时 加 -ib选项
如果目标文件己存在,则提示是否覆盖 -i|--iteractive
先备份再覆盖 -b
目标存在,覆盖前先备份加数字后缀,形式为filename.~#~ ,可以保留多个版本 --backup=numbered
目标是否存在? | 不存在 | 存在且为文件 | 存在且为目录 |
一个文件 | 新建DEST,并将SRC中内容填充至DEST | 将SRC中的内容覆盖至DEST中注意数据丢失风险!!建议用-i选项 | 在DEST下新建与源文件同名的文件并将SRC中的内容填充至新文件中 |
多个文件 | 提示错误 | 提示错误 | 在DEST下新建与源文件同名的文件,并将源文件内容复制到新文件中 |
目录须使用-r选项 | 新建指定DEST同名目录,复制SRC目录中所有文件至DEST下 | 提示错误 | 在DEST下新建与原目录同名的目录,并将原文件内容复制到新目录中 |
9.移动和重命名文件mv
mv 命令可以实现文件或目录的移动和改名
同一分区移动数据,速度很快,数据位置没有变化
不同分区移动数据,速度相对慢,数据位置发生了变化
如果目标存在,则先备份 -b
如果目标文件己存在,则提示是否覆盖 -i
10.目录操作
10.1显示目录树tree
显示所有,包括隐藏目录和文件 -a
只显示目录 -d
在执行文件,目录,Socket,符号链接,管道文件,各自加上"*","/","=","@","|"号 -F
只显示n层目录 -L n
10.2创建目录mkdir
如果要创建的目录父级目录不存在,则一起创建,是递归的意思 -p|--parents
10.3删除空目录rmdir
rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r 命令,递归删除目录树
文件元数据和节点表结构:
inode:
在Linux系统中,一切皆文件.
每个文件,又分为文件元数据和具体内容两部分.
一个文件元数据和其他具体内容数据,在磁盘分区上是分开存放的.
存储文件元数据的区域叫做inode,中文:"索引节点"
存储具体内容数据的区域叫block,中文:数据块
每个文件都有一个inode和n(n>=1)个block数据块
磁盘在格式化时,系统会自动将磁盘分为两个区域
inode区(inode table),存放文件的inode
数据区,分为多个block(数据块),用来存放文件具体的内容
一个磁盘分区上有多少个inode和多少个block,是有系统自行决定的,跟文件系统,磁盘分区大小,数据块大小有关
一个磁盘分区,能存放多少个文件,由文件大小,磁盘分区大小,inode数量决定
inode编号可重复使用,当删除一个文件之后,其inode编号会被收回,供下次新文件使用
查看磁盘分区inode编号使用情况 df
-i查看磁盘分区使用情况 df -lh
链接:
硬链接:
硬链接的作用是允许一个文件拥有多个有效的路径名,新增一个文件,指向某个文件的inode,这样,这两个文件就互为硬链接,也就是多个文件名,都是指向同一个inode,这是硬链接的本质。
硬链接特性:
1. 创建硬链接会在对应的目录中增加额外的记录项以引用文件
2. 对应于同一文件系统上一个物理文件
3. 每个文件引用相同的inode号
4. 创建时链接数递增
5. 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
6. 不能跨越驱动器或分区
7. 不支持对目录创建硬链接
软链接:
类似于windows 中的快捷方式,软链接是建立一个独立的文件,这个文件的指向的是目标的文件名。
软链接特性:
1. 一个符号链接的内容是它引用文件的名称
2. 可以对目录创建软链接
3. 可以跨分区的文件实现
4. 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
5. 软链接如果使用相对路径,是相对于源文件的路径,而非相对于当前目录
6. 删除软链接本身,不会删除源目录内容
7. 删除源目录的文件,不会删除链接文件
硬链接与软链接区别:
属性 | 硬链接 | 软连接 |
本质 | 同一个文件 | 不是同一个文件 |
跨设备 | 不支持 | 支持 |
inode | 相同 | 不相同 |
连接数 | 创建新硬链接,链接数会增加,删除会减少 | 创建或删除,链接数都不会变 |
文件夹 | 不支持 | 支持 |
相对路径 | 原始文件相对路径相对于当前目录 | 原始文件相对路径相对于链接文件的相对路径 |
删源文件 | 连接数减1,但链接文件的访问不受影响 | 链接文件将无法访问 |
文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
IO 重定向和管道:
标准输入输出:
Linux系统中有三个最基本的IO设备
1. 标准输入设备(stdin):对应终端键盘
2. 标准输出设备(stdout):对应终端的显示器
3. 标准错误输出设备(stderr):对应终端的显示器
在Linux系统中,一切皆文件,所以,这三个设备也是以文件的形式存在于系统中;
程序从标准输入文件中获取数据,再将运行结果和错误信息输出到标准输出设备和标准错误输出设备;
在虚拟终端中,标准输入输出设备都是当前的终端窗口
点击查看代码
[root@ubuntu22 mmy]# ll ll /dev/std*
lrwxrwxrwx 1 root root 15 Nov 18 14:47 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Nov 18 14:47 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Nov 18 14:47 /dev/stdout -> /proc/self/fd/1
[root@ubuntu2204 ~]# ll /proc/self/fd/
total 0
lrwx------ 1 root root 64 Jul 12 17:47 0 -> /dev/pts/1
lrwx------ 1 root root 64 Jul 12 17:47 1 -> /dev/pts/1
lrwx------ 1 root root 64 Jul 12 17:47 2 -> /dev/pts/1
[root@ubuntu2204 ~]# tty
/dev/pts/0`
IO重定向:
I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
把STDOUT重定向到文件 > 等价于 1>
把STDERR重定向到文件 2>
把标准输出和错误都重定向 &>
追加操作符,在原有文件的基础上追加内容
追加标准输出重定向至文件 >> 等价于1>>
追加标准错误重定向至文件 2>>
使用 "<<终止词" 命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称为就地文本(here documents),其中终止词可以是任何一个或多个符号,比如:!,@,$,EOF(End Of File),magedu等,其中EOF比较常用
终止词不固定 开始与结束统一即可
点击查看代码
[root@ubuntu22 mmy]# cat <<EOF >123.txt
> 床前明月光
> 疑是地上霜
> 举头望明月
> 低头思故乡
> EOF
tr:
用于转换字符、删除字符和压缩重复的字符。它从标准输入读取数据并将结果输出到标准输出
点击查看代码
用SET2替换SET1中没有包含的字符 -c|-C|--complement
[root@ubuntu22 mmy]# tr -c 2 3 <./issue> /dev/pts/0
33333332233333333333333333
删除SET1中所有的字符,不转换 -d|--delete
[root@ubuntu22 mmy]# tr -d 2 <./issue> /dev/pts/0
Ubuntu.04.3 LTS \n \l
压缩SET1中重复的字符,即删陊连续重复的字符 -s|--squeeze-repeats
[root@ubuntu22 mmy]# tr -s '2' <./issue> /dev/pts/0
Ubuntu 2.04.3 LTS \n \l
将SET1用SET2替换,SET2中不够的,就不处理 -t|--truncate-set1
[root@ubuntu22 mmy]# tr -t 'u' 'a' <./issue> /dev/pts/0
Ubanta 22.0.3 LTS \n \l
管道:
在shell>在shell 中,可以将两个或多个命令(程序|进程)连接起来,将前一个命令的输出作为后一个命令的输入,就像拿水管将两个命令连起来;
使用管道,要求前一个命令必须支持标准输出,后一个命令必须支持标准输入
点击查看代码
[root@ubuntu22 mmy]# echo 23456|tr -t 2 8
83456
注意:STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现,格式如下
点击查看代码
[root@ubuntu22 mmy]# echo22 23456|&tr -t 2 8
echo88: command not found
[root@ubuntu22 mmy]# echo22 23456 2>&1|tr -t 2 8
echo88: command not found
tee:
将标准输入复制到每个指定文件,并显示到标准输出
点击查看代码
输出
[root@ubuntu22 mmy]# echo hello |tee info.log
hello
[root@ubuntu22 mmy]# cat info.log
hello
追加
[root@ubuntu22 mmy]# echo hello |tee -a info.log
hello
[root@ubuntu22 mmy]# cat info.og
hello
hello
Linux安全模型:
3A认证:
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting:审计 ,事后行为
登陆日志:
rocky: cat /var/log/secure
ubuntu:tail /var/log/auth.log
用户:
Linux系统是多用户系统,可以同时存在多个用户,每个用户之间都是互相隔离的。
在Linux系统中,每个用户是通过User Id (UID)来唯一标识的.
在Linux中,root以下,都是普能用户,其用户id为1-60000
用户类型 | 用户名 | 用户ID(uid) | 作用 |
超级管理员 | root | 0 | 超级管理员 |
普通用户-系统用户 | 自定义 | Centos前1-499 Centos7后1-999 | 给后台程序使用 |
普通用户-登陆用户 | 自定义 | Centos前500起 Centos7后1000起 | 给用户进行交互式登陆 |
用户组:
Linux中可以将一个或多个用户加入用户组中,组就是包含0个或多个用户的集合,用户组是通过GroupID(GID) 来唯一标识的。
组类型 | 组名 | 组ID(gid) | 作用 |
超级管理员组 | root | 0 | 超级管理员使用 |
普通用户组-系统用户组 | 自定义 | Centos前1-499 Centos7后1-999 | 给后台程序使用 |
普通用户组-普通组 | 自定义 | Centos前500起 Centos7后1000起 | 给登陆用户使用 |
用户和用户组的关系:
1. 一个用户至少有一个组,也可以有多个组;
2.一个组至少有0个用户,也可以有多个用户;
3.用户的主要组(primary group):又称私有组,一个用户必须属于且只有一个主组,创建用户时,默认会创建与其同名的组作为主组;
4.用户的附加组(supplementary group):又称辅助组,一个用户可以属于0个或多个附加组;
5.使用组,可以对用户进行批量管理,比如对一个组授权,则该组下所有的用户能能继承这个组的权限;
安全上下文:
什么是程序?
一个程序或一个命令,本质上也是一个可执行的二进制文件或一个可执行的脚本文件;
在服务器上有很多文件,只有那些特定的,可以被执行的二进制文件,才能被称为程序;
什么是进程?
运行中的程序,就是进程
前提:进程有属主和属组;文件有属主和属组
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
进程访问文件时的权限,取决于进程的发起者
程序与进程,用户之间的关系?
只有可以被执行的文件,才能叫作程序;
对于同一个程序,也不是所有用户都可以运行的,这要取决于当前用户对该程序有没有可执行权限
进程的访问资源
一个进程能不能访问某些资源,是由进程发起者决定的(跟进程本身的程序文件无关),比如某进程要读写某个文件,则要看该进程发起者有没有权限读取该文件;
Vim常见操作:
如果该文件存在,文件被打开并显示内容
如果该文件不存在,当编辑后第一次存盘时创建它
如果后面打开的是一个目录,则会列出目录中所有内容,可以用方向键进行选择
三种模式:
命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
插入(Insert)或编辑模式:用于修改文本
扩展命令(extended command )或命令(末)行模式:保存,退出等
三种模式切换:
命令模式→插入模式 | i|I|a|A|o|O |
命令模式→扩展命令模式 | 直接冒号 : |
插入模式→命令模式 | ESC键 |
插入模式→扩展命令模式 | 先ESC,再: |
扩展命令模式→命令模式 | ESC或者回车 |
扩展命令模式→插入模式 | 先ESC或退格,在i|I|a|A|o|O |
插入模式相关:
i:insert, 在光标所在处输入
I:在当前光标所在行的行首输入
a:append, 在光标所在处后面输入
A:在当前光标所在行的行尾输入
o:在当前光标所在行的下方打开一个新行
O:在当前光标所在行的上方打开一个新行
扩展命令模式相关:
:w:写(存)磁盘文件
:wq等价于:x:写入并退出
:X:加密
:q!:不保存退出
:f filename:读文件内容到当前文本
:w filename:将当前文件内容写入到另一个文件
:r!command:读入命令的输出
:上下方向键:查看命令历史记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!