1、介绍
markdown的语法写笔记
rhcsa:红帽认证的linux操作系统管理员
软件:用语言(c语言,c++,java,python,go)写的代码
硬件:cpu(运算和控制),输入设备,输出设备,存储器
RAM:内存32G,断电后里面存储的数据会消失
硬盘:1T,断电后数据依旧存在
1GB=1024MB=1024*1024KB=1024*1024*1024B(字节) 1字节=8bit 0 1 二进制
操作系统:软件,是所有硬件上的第一层软件,ios,macos,android,windows,linux(开源)
闭源:不共享源代码
开源:开放源代码,所有人都可以看到这个代码,全世界的人都可以为你的代码做bug修复,添加新功能,软件会很稳定,用户体验感好
不同的操作系统会有对应的应用程序
服务器:服务的机器,7*24小时服务于很多人,当用户在访问服务器的时候,服务器需要自动回复,提前设定好用户可能会访问的信息,不同的服务需要使用不同的程序去实现——软件
1.1 安装linux操作系统
#软件说明 xshell:windwos远程连接linux的工具 xftp:windows和linux主机传文件 vmware workstation pro:可以虚拟很多台虚拟机 typora:写笔记 rhel-baseos-9.1-x86_64-dvd.iso:linux操作系统镜像文件
如何安装linux操作系统:
1、虚拟机:用一个软件虚拟很多台虚拟机【vmware workstation pro】
2、安装linux系统:操作系统镜像【RHEL9】
1、创建虚拟机需要注意的信息:要指定安装的操作系统为linux并且版本是rhel9 64位的系统 2、安装linux系统的过程:必须浏览iso镜像文件的路径;虚拟机开机的时候需要加载光驱;设置磁盘分区,先设置标准分区【/boot 500M;/根 20G,swap(虚拟内存) 2G】;设置root(系统管理员用户)的密码:1658635147 3、学会拍快照 4、 GUI:图形用户界面 CLI:命令行界面
1.2重新设置密码
第一步重启系统,然后在倒数6秒界面按键盘的下键将白色条放到第二行上输入e
第二步在linux开头那一行尾部添加rd.break,然后使用ctrl+x继续后面
第三步输入输入mount查看设备挂载信息(主要看/sysroot目录挂载权限)
接着输入mount -o remount,rw/sysroot目录重新挂载已经挂载的设备,并以其他的权限挂载,这里我们需要rw权限
第四步输入chroot /sysroot/ ,使用chroot命令改变系统的根目录的位置,将其改到/sysroot之后就可以进行密码修改
第五步passwd root 输入两次密码
第六步输入touch /.autorelabel
第七步两次输入exit完成root密码重置
1.3 连接Xsell
vim /etc/ssh/sshd_config 与XSHLL建立连接
进入后输入/Root 匹配后删掉这一行的#键,将后面的内容删掉改为yes,如图
PermitRootLogin yes
esc(退出) :wq(保存)
systemctl restart sshd :重启sshd服务
ssh root@ ip
1.4计算机的结构
微型计算机系统(PC和笔记本电脑)
硬件系统:
1.主板(主机箱中最大的电路板)
主板上集成了CPU插座、内存插槽、控制芯片组、总线扩展槽、BIOS芯片、键盘与鼠标插座及各种外设接口。
机正是通过主板将CPU、内存、显卡、声卡、网卡、键盘等部件连接成一个整体并协调工作的
主板集成度越高,芯片组数目越来越少,故障率逐步减少,速度稳定性越来越高
2.中央处理器CPU
微机的中央处理器又称微处理器,它是整个微机系统的核心,可直接访问存储器。中央处理器CPU安装在主板插座上,由制作在一块芯片上的运算器、控制器、若干寄存器以及内部数据通路构成
运算器:完成数据的算术运算和逻辑运算
控制器(一般由指令寄存器、译码器、程序计数器和控制电路组成):主要功能是根据指令性要求,对微机的各个部件发出相应的控制信息,使它们协调工作
寄存器:主要功能是暂存指令和常用的数据
目前世界上生产微处理器芯片的公司主要有 Intel 公司和AMD公司两家
微处理器的性能指标对整个微机具有重大影响,因此,人们往往用 CPU 型号作为衡量微机档次的标准。 Intel 公司的微处理器经历了8086-80286-80386→80486→Pentium → Pentium II → Pentium III → Pentium IV → Core → Core 2-- Core i3-- Core i5-- Core i7-- Core i9
决定微机性能:
相同档次的CPU还需看主频(时钟频率)的高低:一般来说,主频越高,运算速度越快,性能越好
除了 CPU 、主频外,微机的字长也是影响其性能和速度的一个重要因素:微机的字长可分为8位、16位、32位和64位等。字长越长,表示数的有效位数越多,精度越高。 RO 从(内部只使有法先) RAM (随机有取~)
3.存储器
微机的存储器分为两大类:一类是内存储器(简称内存或主存),主要是临时存放当前运行的程序和所使用的数据。另一类是外存储器(简称外存或辅存),主要用于永久存放暂时不使用的程序和数据。程序和数据在外存中以文件形式存储,一个程序需要运行时,首先从外存调入内存,然后在内存中运行。
存储器中能够存放的最大数据信息量称为存储器的容量。存储器容量的基本单位是字节( Byte ,记作 B )。由于存储器中存储的一般是二进制数据,二进制数只有0和1两个数码,因而,计算机技术中常把一位二进制数称作一位( bit ,记作 b )。1字节包含8位二进制数,即1B=8b。在实际中为了便于表示大容量存储器,常用 KB 、 MB 、 GB 、 TB 为单位。
(1)内存储器
目前内存储器主要由半导体材料制成,如图所示
按其功能分为随机访问存储器( Random Access Memory , RAM ),只读存储器( Read Only Memory , ROM )和其他存储器如高速缓冲存储器、 CMOS 存储器。 随机访问存储器 RAM :主要是用来根据需要随时读写。其特点是速度快,通电时存储的内容可以保持,断电后存储的内容立即消失。 RAM 可分为动态存储器( Dynamic RAM ,DRAM )和静态存储器( Static RAM , SRAM )
动态存储器 DRAM: 用 MOS 电路和电容作为存储单元元件的,由于电容能放电因此需要定时充电以维护存储内容的正确性,通常是每隔 2ms 刷新一次
静态存储器 SRAM :用双极型电路或 MOS 电路的触发器作存元件的,它没有电容放电形成的刷新,只要有电源正常供电,触发器就能稳定地存储数据。 只读存储器 ROM:主要用来存放固定不变的程序和数据,如 BIOS 程序
主要特点:只能读出原有的内容,用户不能向其写入新的内容。原来存储的内容通常是由生产广家一次性写人的,断电后信息不会丢失,能永久保存下来。ROM 可分为可编程的PROM、可擦除可编程的 EPROM、电擦除可编程的 EEPROM
高速缓冲存储器 Cache: 是一种位于 CPU 与内存之间的存储器。它的存储速度比普通内存快得多,但容量有限,主要用于存放当前内存中使用最多的程序块和数据块,并以接近CPU工作速度的方式向 CPU 提供数据
CMOS存储器: 是一小块特殊的内存,它保存着计算机的当前配置信息,例如日期时间、硬盘容量、内存容量等。这些信息大多是系统启动时所必需的或是可能经常变化的,如果将这些信息存放在 RAM 中,则系统断电后数据无法保存;如果存放在 ROM中又无法修改,而 CMOS的存储方式介于 RAM 和ROM之间。CMOS 是靠电池供电的,耗电量极低,即使微机关机后仍能长时间保存信息
(2)外存储器
为满足存储大量的信息,就需要采用价格便宜的外存储器。目前,常用的外存储器有硬盘、光盘、U 盘和移动硬盘。因外存储器设置在计算机外部,所以又称计算机外部设备。 U盘 器。其最上的U
1)硬盘
硬盘是最重要的外存储器,它是由一组同样大小,涂有磁性材料的铝合金圆盘片环绕一个共同的轴心组成的,硬盘一般封装在一个质地较硬的金属腔体里,然后将整个硬盘固定在主机箱内,硬盘外观如图所示
硬盘在出厂时须进行以下三项操作才能正常使用:第一,对硬盘进行低级格式化;第二,对硬盘进行分区;第三,对硬盘进行高级格式化(通常这些工作都是由硬盘经销商完成,用户购买硬盘后便可直接使用)
硬盘具有存储容量大、存取速度快、可靠性高、每兆字节成本低等优点
目前,市场上流行的是容量 500GB、1TB 等规格的硬盘。
影响硬盘性能的指标:
存储容量:一个硬盘一般由多个盘片组成,盘片的每-面都有一个读写磁头(Head)。硬盘使用时通过格式化将盘片划分成若干个同心圆,每个同心圆称为磁道,磁道的编号从最外层以0开始(第0道),每个盘片上划分的磁道数是相同的。许多盘片组中相同磁道从上向下就形成一个想象的圆柱称为硬盘的样面(Cvlinder)。同时将每个磁道再划分为若干个扇区,扇区容量为 512B。则磁盘容量的计算公式为:
磁盘容量=512B / 每扇区 X 扇区数 / 每磁道 X 磁道数 / 每磁头 X 磁头数
存储速度:目前普通硬盘转速有 5400 转/分,7200转/分 笔记本硬盘转速是 4200 转/分、5400 转/分
2)光盘
光盘主要是采用激光技术读写信息,可以存放各种文字、声音、图形、图像等信息,具有价格低、容量大、保存时间长等优点。 目前,光盘可分为只读型光盘、一次性写入光盘、可擦除型光盘
3)U盘和移动硬盘
U盘:即USB盘的简称,U 盘是采用闪存(Flash Memory)存储技术的 USB外存储器。其最大特点是:小巧易于携带、存储容量大、可靠性高、即插即用、价格低
移动硬盘(Mobile Hard Disk):顾名思义是以硬盘为存储介质,强调便携性的外存储产品。因采用硬盘为存储介质,移动硬盘在数据读写模式上与标准 IDE 硬盘是相同的。移动硬盘采用USB、IEEE1394 等传输速度较快的接口,可以较高的速度与系统进行数据传输。 移动硬盘的优点:存储容量大,目前市场上有 500GB、1T 等;传输速度快,移动硬盘采用USB、IEEE1394 接口;使用方便,主流的微机配置2~8个 USB 接口功能;安全可靠
4.输入设备
输人设备功能是将数字、文字、符号、图形、图像、声音等形式的信息输入计算机中,常用的输人设备有键盘、鼠标、扫描仪等
5.输出设备
输出设备的功能主要是将计算机内的信息转换成数字、文字、符号、图形、图像、声音等形式进行输出。常用的输出设备有显示器、打印机等
软件系统:
1.系统软件
系统软件处于硬件和应用软件之间,具有计算机各种应用所需的通用功能,是支持应用程序的平台
系统软件是在计算机系统中直接服务于计算机系统的由计算机厂商或专业软件开发商提供的,给用户使用的操作系统环境和控制计算机系统按照操作系统要求运行的软件,它包括操作系统、语言处理程序、编译和连接程序、数据库系统、服务程序等。
1)操作系统
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是配置在计算机硬件上的第一层软件,任何其它软件都必须在操作系统的支持下才能运行。
主流的操作系统包括:
-
Windows操作系统:由微软公司开发的操作系统,广泛应用于个人电脑和服务器领域。
-
MacOS操作系统:由苹果公司开发的操作系统,运行在Macintosh系列的电脑上。
-
Linux操作系统:一种自由和开放源代码的操作系统,广泛应用于服务器领域和[嵌入式设备等领域。
-
Android操作系统:由谷歌公司开发的移动操作系统,运行在大部分智能手机和平板电脑上。
-
iOS操作系统:由苹果公司开发的移动操作系统,运行在iPhone、iPad等移动设备上。
-
Chrome OS操作系统:由谷歌公司开发的面向云计算的操作系统,广泛应用于Chromebook等笔记本电脑上。
为什么选择Linux作为服务器的操作系统?
开源、低风险、高品质
开源:把软件程序和源代码一起打包给用户
(使用自由,复制自由,修改自由,创造衍生品自由)
2) 语言处理程序
计算机语言主要有三类:机器语言、汇编语言和高级语言。对计算机语言进行编译,解释和汇编的程序称为语言处理程序
机器语言: 是用二进制编码 0和 1编写的,是计算机能直接识别的唯一语言对于不同的计算机,其机器语言有所不同,因此机器语言移植性差、不易记忆、难于修改
汇编语言:用能表示一定含义的助记符来编写的计算机语言,又称为符号化的机器语言或汇编语言,但这种语言机器不能直接执行,必须将其翻译成机器语言目标程序,机器才能执行
高级语言:是一种与计算机指令系统无关,其描述采用人们对问题求解的表达方式来表示的计算机语言。这种语言具有易掌握、易书写、易学习的特性。如 C 语言、Java 语言、C#语言等。
3)编译和连接程序
在某一集成开发环境中编辑输入的高级语言程序称为源程序,源程序经过编译程序的编译生成目标程序,连接程序将这些目标程序组成一个可执行的程序,这个过程称为程序的编译连接过程,实现这个过程的程序称为编译和连接程序
4)服务程序
服务程序包括诊断程序和测试程序等,是专门用于计算机硬件性能测试和系统故障诊断维护的系统程序。如能对 CPU、驱动器、接口、内存等设备的性能和故障进行检测
5)数据库系统
数据库系统是一个复杂的系统,由硬件、操作系统数据库、数据库管理系统等构成 它实现了有组织地、动态地存储大量关联数据,方便多用户访问,实现了数据的充分共享交叉访问。常见的数据库管理系统有 Oracle 数据库、Mysql数据库、Microsoft SQL Server、PostgreSQL、MongoDB、Redis 、SQLite
2.应用软件
应用软件是用户利用计算机及其提供的系统软件为解决实际问题而设计的计算机程序,是除系统软件外的所有软件,是由各种应用软件包和各种应用程序组成的。由于计算机已渗透到社会的各个领域,按软件服务对象不同,可以划分为通用软件和专用软件。
(1) 通用软件:
是为解决某一类问题由软件公司开发的,满足大类人群使用。如办公软件 Microsoft Office 、绘图软件 AutoCAD、图像处理软件 Photoshop 、游戏软件等。
(2) 专用软件:
是针对特殊用户要求由软件公司开发的软件。如证券的股票交易系统、交通信号灯的自动控制系统等。
2.Linux命令初学
操作系统主要是通过操作系统内核实现的。
系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理的结果返回给应用程序
SHELL
shell:壳,命令解释器,负责解析用户输入的命令。命令分两类:
- 内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多
- 外置命令,在文件系统的某个目录下,有个与命令名称相同的文件
Bash(bourne-Again SHELL)
终端
(终端设备,是计算机网络中处于网络最外围的设备,主要是用于用户信息的输入和处理结果的输出)
物理终端:键盘、鼠标、显示器。
虚拟终端:模拟终端(图形化界面)切换到重命令行的终端ctrl+alt+f3
伪终端
重命令行的终端切换到模拟终端 ctrl+alt+f2
命令格式
命令名称 [命令参数] 命令对象
命令名称:动词,要做的某件事
命令对象:一般要处理的文件、目录、用户
严格区分大小写
reboot 重启 shutdown -r now 重启
shutdown -h now 关机 poweroff 关机
ifconfig 查看IP地址
查看当前linux的发行版本:cat /etc/redhat-release
查看内核版本:uname -r
查看shell类型:cat /etc/shells chsh -l
查看当前的默认shell类型:echo $SHELL
[root@localhost ~] #
#:标识符,标识的是当前用户是root
$:标识符,标识的当前的用户是普通用户。
[root@localhost ~]
root:管理员,超级管理员,根用户
@:分隔符
localhost:本意标的是当前这台主机,也是这台主机的主机名。
~:当前用户的家目录。root用户的家目录:/root.
普通用户的家目录:/home/rhcsa
家目录:存放个人数据的地方
3.Linux的目录结构和文件类型、操作
3.1基础命令
Ls(list directory contents):用于显示指定工作目录下的内容(文件及子目录)。
如果指定,则列出指定目录的内容。
如果不指定,则列出当前目录的内容。
/根,文件系统的根。 一切皆文件。
路径:
绝对路径:
-
绝对路径是以根开头的路径
-
绝对路径是文件的全路径
-
绝对路径在任意的位置都可以使用
相对路径:
-
相对路径就是不以根开头的路径
-
相对路径是以当前目录作为基础路径
-
相对路径可以引用到文件,但是仅限在指定的位置使用
root
解释[root@localhost ~]#
#是一个标识符,标识的是当前用户是root、或者说当前用户的编号UID为0.
当方括号后面跟的是$,标识的是当前用户是一个普通用户。
在这边要强调一件事,除了root之外,其余的都是普通用户,也就是其余的都是$。
root:就是咱说的那个特殊用户,也就是管理员,也叫作超级管理员,根用户。
@:表示的是分隔符,分隔用户和主机的。
localhost:本意表示的是当前主机,也表示的是主机名。
将他们连起来root@localhost表示的是当前root这个用户在localhost这个主机上。
~:表示的是当前用户的家目录。切换成不同用户虽然后面跟的都是~,但是意义是不一样的
家目录其实是存放用户个人数据的地方
root用户的家目录是:/root
其他用户的家目录是:/home/username,例如用户rhcsa的家目录是/home/rhcsa
su
su(英文全拼:switch user)命令用于变更为其他使用者的身份,管理员切换到任意身份都不需要密码验证,而任意身份切换到管理员都需要密码验证。
加上-是因为可以在切换身份的同时将用户的环境变量和身份权限全部获取
[root@localhost ~]# su - rhcsa
如果不加-的切换身份,我们是没有权限去列出里面的内容的
[root@localhost ~]# su rhcsa
这边要给大家提示一下,就是你每切换个用户,记得一定要exit退出当前的用户然后再去做别的操作
pwd
pwd(英文全拼:print work directory): 命令用于显示工作目录。
执行 pwd 指令可立刻得知咱目前所在的工作目录的绝对路径名称。
[root@localhost ~]# pwd
cd
(英文全拼:change directory)命令用于切换当前工作目录
如果直接写cd表示切换到当前用户的家目录:[root@localhost ~]# cd
切换到相对路径:[root@localhost ~]# cd test1
切换到绝对路径:[root@localhost ~]# cd /etc
cd -:表示切换到上一次切换的目录
cd ~:表示切换到当前用户的家目录
cd .. :表示切换到上一级目录
ls
(英文全拼: list directory contents):命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。
如果指定,则列出指定目录;如果没有指定,则列出当前目录。
指定列出root用户下的内容:[root@localhost ~]# ls /root
不指定列出:[root@localhost ~]# ls
-l :以长格形式显示文件和目录的详细信息(包括权限、所有者、大小、创建时间等),ls命令默认只显示名称的短格式。
-a:显示所有子目录和文件的信息,包括名称以“.”开头的隐藏目录和隐藏文件。
-A:与-a选项的作用类似,但不显示表示当前目录的“.”和表示父目录的“..”。
-h:以更人性化的方式显示出目录或文件的大小,默认的大小单位为字节,使用-h选项后将显示为K、M等单位。此选项需要和-l选项结合使用才能体现出结果。
-d:只列出目录(不递归列出目录内的文件)
关于时间的几个命令
date命令用于显示或设置系统的时间与日期,
语法格式为:date [OPTION]... [+FORMAT]
用户只需在强大的date命令后输入以 +
号开头的参数,即可按照指定格式来输出系统的时间或日期
date命令中的参数以及作用
| 参数 | 作用 |
| ---- | ---------------------- |
| %Y | 完整年份(例如:2020) |
| %m | 月份(1~12) |
| %d | 本月中的第几天 |
| %H | 小时(00~23) |
| %M | 分钟(00~59) |
| %j | 今年中的第几天 |
查看当前系统时间的date命令如下所示:
[root@kongd ~]# date
Sat Sep 5 09:13:45 CST 2020
date命令中的参数%j可用来查看今天是当年中的第几天。
[root@kongd ~]# date "+%j"
306
设置时间:date -s “年月日 时:分:秒“
date 月日时分年
clock,它是用来调整硬件时间的。
hwclock(hardware clock)命令用于显示与设定硬件时钟,在这我们需要了解它的三个参数.
-r or hwclock --show 查看时间
-w or hwclock --systohc 将系统时间同步到硬件时间
-s or hwclock --hctosys 将硬件时间写到系统内
### cal命令
日历的英文:Calendar
cal命令的作用是显示日历。
示例一:显示当月日历 `[root@localhost ~]# cal
示例二:显示2022年八月份的日历,cal 8 2022,先是月份,再是年份
`[root@localhost ~]# cal 8 2022
示例三:显示2022年整年日历 [root@localhost ~]# cal 2022
3.2树状目录结构解释
/bin 软链接(快捷方式),符号链接(标准名称),binaries(二进制文件),可执行的应用程序。
/boot:存放的是启动程序后的核心文件(链接文件、镜像文件。)
/dev:存放的是linux的外部设备(光驱)。
/etc:存放的是系统管理所需要的配置文件。
/home:普通用户的家目录。
/root:root用户的家目录。
/lib:library(库),存放着系统最基本的动态连接共享库(32位),
/lib64:ibrary(库),存放着系统最基本的动态连接共享库(64位)
/media:挂载点目录,让用户去临时挂载别的文件系统。系统默认挂载点目录
/mnt:挂载点目录,手动去挂载点目录。
/opt:optional(可选),主机给额外安装软件所摆放的目录。
/sbin:超级用户的二进制文件的缩写,存放的是系统管理员所使用的系统管理程序。(超级管理员自己能用到的一些命令)
/srv:第三方服务,存放的是一些服务启动后需要提取的数据。
/tmp:temporary(临时):存放的是一些临时文件。
/usr:unix shared resource(共享资源),用户很多应用程序和文件都存放在该目录中。
/var:variable变量的缩写,存放的不断扩充的东西。(日志文件)
/run:是临时文件系统,存放的系统启动以来的信息(守护进程)(程序运行产生文件所在目录)
/sys
/proc :进程的缩写。程序(由源代码生成的可执行文件),进程(程序执行后形成了进程,它会占用内存资源。)
Block 块设备
bus 总线(地址、控制、数据)
固件
/sys 内核或者操作系统,
3.3帮助手册
help
help 命令 help cd
--help
命令 --help
man
它是manual的缩写,使用方式:man 命令名称。用来提供在线帮助,使用权限是所有用户。使用man命令可以调阅其中的帮助信息,非常方便实用。
man command [root@node13 ~]# man ls
在man命令帮助信息的界面中,所包含的常用操作按键如下:
按键 | 作用 |
---|---|
空格键,PaGe down | 向下翻一页 |
PaGe up,b | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如“/linux” |
? | 从下至上搜索某个关键词,如“?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
man命令的帮助信息的结构如下:
结构名称 | 代表意义 |
---|---|
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
man手册的几个部分
区段1:用户指令,查看命令的帮助 区段2:系统调用,查看可被内核调用的函数的帮助 区段3:程序库调用,查看函数和函数库的帮助 区段4:设备,查看特殊文件的帮助(主要是/dev目录下的文件) 区段5:文件格式,查看配置文件的帮助 区段6:游戏,查看游戏的帮助 区段7:杂项,惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明 区段8:系统指令,查看系统管理员可用的命令的帮助 区段9:内核内部指令,查看内核相关文件的帮助
4、info page
info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式。
[root@node13 info]# info info
Info
Info 命令
Date
date -s “年月日 时:分:秒“
date 月日时分年
clock
BIOS
hwclock -r
hwclock --hctosys将硬件时间给到到系统时间
hwclock --systohc
3.4文件类型
- rw- --- --- . 1 root root 1073 Oct 21 2023 anaconda-ks.cfg
- 标记位——文件类型一切皆文件
(1)- 普通文件
普通文件/一般文件(不是其他类型的文件,这个里面大部分都是纯文本文件,不过有些可执行文件不是文本的)
(2)d 目录文件
D的是蓝色标签
(3)l 链接文件
软硬链接
文件,都有文件名和数据。这在Linux上被分为两部分:
- - 用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方
- - 元数据,是文件的附加属性,如文件大小、创建时间、所有者等信息。
在Linux中,元数据中的inode
号(inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)才是文件的唯一标识而不是文件名。(例如对一个文件重命名(mv)但inode号仍相同)。
Linux中,文件名仅仅是为了方便人们的记忆和使用,系统或程序通过inode
号寻找正确的文件数据块。
为了解决文件的共享使用,Linux系统提供一种文件:链接文件,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。
硬链接,以文件副本的形式存在,所有的硬链接都指向同一个iNode X,他们都享有同一个inode X和一个数据块(data block)。但硬链接本身并不占用实际存储空间。
就像是:一个文件(file)拥有多个文件名一样(file-硬链接1,file-硬链接2...)
每增加一个硬链接,只是增加一个计数。这个可以用ls -l查看。
root@nat1 ~]# ls -l useful*.sh
-rwxr-xr-x. 2 root root 436 Jul 19 2022 useful_hd.sh
-rwxr-xr-x. 2 root root 436 Jul 19 2022 useful.sh
因此,修改任何一个硬链接文件,都会改变文件内容。
删除任何一个硬链接文件并不影响其他相同的inode号的文件。直到删除所有硬链接和源文件,才能删除该文件。
硬链接特性:
1.只能对已存在的文件进行创建(必须事先要有一个原始文件)
2.硬链接必须在同一个文件系统里创建
3.不能对目录进行创建
软链接特点:
-
软链接(file-软链接1)本身是一个单独的文件,拥有自己的inode Y 和自己的数据块。因此拥有自己的文件属性和权限。 最大的特点是:明确自己是符号链接文件,并存放了指向源文件(file)的inode X.
-
创建软链接时候,链接计数i_nlink不会增加。只是强调自己是"l" (软链接)
[root@nat1 bin]# ls -l | grep ^l
lrwxrwxrwx. 1 root root 6 Jun 28 2022 apropos -> whatis
lrwxrwxrwx. 1 root root 4 Jun 28 2022 awk -> gawk
软链接特性:
-
可对不存在的目录和文件创建软链接
-
可以对存在的文件或目录建软链接
-
可以跨文件系统创建软链接
-
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死链接(即dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
-
软链接创建时原文件的路径指向使用绝对路径较好,相对路径的话原文件移除后可能会成为死链接。
然后我们来看下怎么去创建软连接和硬链接
创建软链接
创建硬链接时 ln 命令不带任何参数,但是要创建软链接需要加上 -s 参数
ln -s file1 file3
用 ls -i 查看inode号
用户数据
(4)B block 块设备文件
块设备是以数据块为单位的存储设备,比如文件系统所在的硬盘,一般叫做文件系统块,也可以把它叫做随机存储的设备
(5)C 字符设备
以字符为单位存储的,按照顺序进行存储。例如ABC输入,存储也按照ABC存储
(6)P pipiline管道设备文件
大家可以把它理解为水管
(7)S socket 套接字文件
IP地址+端口号
3.5文件权限
Rw- --- --- .
A B C D
A:该文件的所有者对文件的权限。
B:该文件的所属组的对该文件的权限。
C:其他人对该文件的权限。
D :扩展权限。
d rwx r-x r-x .
PS:三个一组
r 读取的权限
w 对文件内容进行更改的权限
x 对文件的执行权限。
- 没有权限
stat文件时间戳查看及更改
Access 访问时间:用户读取文件内容的时间
Modify 修改时间:修改文件内容的时间。
Change 改变时间:用来标记文件元数据发生变化的时候。
Birth 创建时间:创建文件的时间。
stat 命令用于显示 inode 内容.
inode 包含文件的元信息,具体来说有以下内容:
- 文件的字节数
- 文件拥有者的 User ID
- 文件的 Group ID
- 文件的读、写、执行权限
- 文件的时间戳,共有三个:ctime 指 inode 上一次变动的时间,mtime 指文件内容上一次变动的时间,atime 指文件上一次打开的时间。
- 链接数,即有多少文件名指向这个 inode
- 文件数据 block 的位置
# stat anaconda-ks.cfg
Touch 修改文件的时间戳及创建文件
如果touch一个已经存在的文件,则会把它除了创建时间之外的剩下时间全部进行修改。
如果touch一个不存在的文件,则会创建该文件。
创建单个文件 [root@localhost ~]# touch yaya
创建多个文件
方法一 [root@localhost test1]# touch 1 2 3 4 5
方法二 [root@localhost test1]# touch abc{1..6}
文件命名规则
(1)不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
(2)文件名不能超过255个字符
(3)区分大小写file File FILE fIle
(4)目录也是文件,在同一路径下,两个不同类型文件不能同名
3.6文件创建
Touch 修改文件的时间戳及创建文件
如果touch一个已经存在的文件,则会把它除了创建时间之外的剩下时间全部进行修改。
如果touch一个不存在的文件,则会创建该文件。
创建单个文件 [root@localhost ~]# touch yaya
创建多个文件
方法一 [root@localhost test1]# touch 1 2 3 4 5
方法二 [root@localhost test1]# touch abc{1..6}
不能使用/来当文件名
Mkdir(make directory)创建目录
mkdir(英文全拼:make directory)命令用于创建目录。
目录:它是一个路径映射的文件,不是容器,怎么说那,就是说我们把某些文件放到目录里面了,只是文件列表的保存方式,对于Linux来讲,它其实也是一个文件。
创建单个目录:[root@localhost ~]# mkdir ahuhua
创建多个目录:[root@localhost ahuhua]# mkdir test{1..3}
创建级联目录:[root@localhost ahuhua]# mkdir -p a/b
我们在创建级联目录的时候,得加上-p的选项,表示我们要先创建父目录,然后再创建父目录当中的子目录。
tree命令:用于以树状图列出目录的内容,按层级显示目录
3.7rm文件删除
rm(英文全拼:remove)命令用于删除一个文件或者目录
在这边提示一下:就是只输入rm的时候其实是自带一个-i的选项的。
[root@localhost ~]# alias rm alias rm='rm -i'
选项
-i 删除前逐一询问确认。
示例2:不加-i选项的rm使用
[root@localhost ~]# \rm abc
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
示例3:忽略提示信息,强制删除yaya文件
[root@localhost ~]# rm -f yaya
-r 将目录及以下之档案亦逐一删除。
示例4:删除目录ahuhua
[root@localhost ~]# rm -rf ahuhua
3.8 cp文件复制
cp(英文全拼:copy file)命令主要用于复制文件或目录。
语法:cp [选项] 源文件 目标文件
(源文件)表示要复制的文件或目录的路径
(目标文件)表示复制后的文件或目录的路径。
选项:
-r 用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。
-p 保留源文件的权限、所有者和时间戳信息。
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。
使用cp -a
相当于将原数据原封不动的拷贝过来,不改变里面的任何信息
使用cp -r
拷贝数据,拷贝的结果是生成新的时间戳等信息
3.9 文件查找
查找文件的路径
| whereis | 可以搜索系统命令的可执行文件路径和说明文档 whereis ls |
| which | which 是搜索系统命令的可执行文件 which ls |
| locate | 按照数据库搜索,搜索速度快,消耗资源小。 locate ls |
| find | 可按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件 | find [path...] [expression] |
which
基于环境变量路径搜索文件,搜索的是可执行文件 ,可查找命令
[root@localhost ~]# which pwd /usr/bin/pwd
whereis
基于环境变量路径搜索文件
[root@localhost ~]# whereis pwd pwd: /usr/bin/pwd /usr/share/man/man1/pwd.1.gz /usr/share/man/man1p/pwd.1p.gz
locate
基于数据库搜索文件名
[root@localhost ~]# locate pwd
find
命令用于在指定目录下查找文件和目录。
格式:find 搜索范围 -条件 参数
| -name 根据文件basename匹配名称 |
| -path -path可以对文件的dirname+basename进行查找。 |
| -size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件) |
| -mtime [+|-]n 匹配修改内容的时间(-4指小于等于4天内的文件名;+4,大于等于5天前的文件名;4指前4~5那一天的文件) |
| -atime [+|-]n 匹配访问文件的时间 |
| -ctime [+|-]n 匹配修改文件权限的时间 |
| -newer f1 !f2 匹配比文件f1新但比f2旧的文件 |
| -perm 匹配权限(mode为完全匹配,-mode为包含即可) |
| -user 匹配所有者 |
| -group 匹配所有组 |
| -delete | 将找到的文件删除,如果是目录只能删除找到的空目录。 |
| -exec …… {}\; | 后面可跟用于进一步处理搜索结果的命令
示例1:在根的root下按照名字查找AAA这个文件(它这个其实是省略了-print操作,加和不加都能打印出来)。
[root@localhost ~]# find /root -name AAA.txt /root/test1/AAA.txt
示例2:查找比AAA这个文件更新的文件
[root@localhost ~]# find /root -newer AAA.txt
示例3:查找比filename1新但比AAA早的文件
[root@localhost ~]# find /root -newer filename1 ! -newer AAA.txt
grep
(global regular expression) 命令用于在指定的普通文件中查找并显示含有指定字符串的行,也可与管道符一起使用.
语法 grep 选项 关键字符串 文件名称...
常用选项:
- -i
:忽略大小写进行匹配。
- -v
:反向查找,只打印不匹配的行。
- -n
:显示匹配行的行号。
- -r
:递归查找子目录中的文件。
- -l
:只打印匹配的文件名。
- -c
:只打印匹配的行数。
实例
在文件 file.txt 中查找字符串 "hello",并打印匹配的行:
grep hello file.txt
在标准输入中查找字符串 "world",并只打印匹配的行数:
grep -c world f1
在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
grep test *file
使用特殊符号进行字符串的匹配
| 匹配模式 | 说明 |
| -------------------- | --------------------------------------- |
| grep h 文件名 | 查找文件里有字符h的行 |
| grep ^[q] 文件名 | 匹配以q开始的行 |
| grep ^[qf] 文件名 | 匹配以q或者f开头的行 |
| grep ^[ ^qf ] 文件名 | 不匹配以q或者f开头的行 |
| grep ^[0-9] 文件名 | 匹配以数字开头的行 |
| grep q$ 文件名 | 匹配以q结束的行 |
| grep ^$ | 过滤空白行 |
| grep -r h ./* | 如果要明确搜索当前目录中的子目录有h的行 |
| grep -d skip h ./* | 忽略当前目录下的子目录下的普通文件 |
在passwd文件内查找有字符a的行。
grep a /etc/passwd
在passwd文件内查找以字符a开始的行。
grep ^a /etc/passwd
在passwd文件内查找以字符h结束的行。
grep h$ /etc/passwd
在passwd文件内查找不以字符h结束的行。
grep -v h$ /etc/passwd
3.10 文件编辑
vim编辑器
在Linux中所有的配置文件都是纯文本的,然后我们就拿了个编辑器可以对配置文件进行编辑。这个编辑器就是我们接下来要学的vim编辑器。它的前身叫做vi,后来搞了个增强的版本,vim。
示例1:查看vim界面
[root@localhost ~]# vim
输入:q的作用是退出;输入:help的作用是获取帮助;输入:help version8的作用是获取版本信息。
vim的三种模式
Vim它是一个模式化的编辑器,一共有三个模式:命令模式、末行模式、编辑模式。
命令模式下的常用按键
命令模式就是输入vim进入的界面
(1)光标跳转按键
功能 | 按键 |
---|---|
光标按单个字符移动 | ↑、↓、←、→ |
光标按照单词向后跳转 | w |
光标按照单词向前跳转 | b |
光标跳转至行首 | ^ |
光标跳转至行尾 | $ |
文档首行第一个字符 | gg |
文档最后一行第一个字符 | G |
跳转到指定行 | 行号gg 或者 行号G |
(2)复制、粘贴、删除
功能 | 按键 |
---|---|
删除光标所在行 | dd |
删除从光标处开始的n行 | ndd |
删除光标前至行首字符 | d^ |
删除光标及之后的所有字符 | d$ |
复制光标所在行 | yy |
复制从光标处开始的n行 | nyy |
将缓冲区的内容粘贴到光标所在行的下一行 | p(小写) |
将缓冲区的内容粘贴到光标所在行的上一行 | P(大写) |
撤销操作 | u |
编辑模式
可通过如下任意一种功能键从命令模式切换到编辑模式。按esc键可从编辑模式切换到命令模式。
功能 | 按键 |
---|---|
在光标前插入 | i |
在光标所在行行首第一个非空字符前插入 | I(大写字母i) |
在光标后插入 | a |
在光标所在行末尾插入 | A |
在光标所在行上一行插入 | O(大写字母) |
在光标所在行下一行插入 | o(小写字母) |
删除光标所在字符并进入插入模式 | s(小写字母) |
删除当前行并进入插入模式 | S(大写字母) |
末行模式
按:或者/可从命令模式切换到末行模式。按esc键可从末行模式切换到命令模式。
(1)查找关键字并替换
功能 | 按键 |
---|---|
从上而下在文件中查找字符串“word”(可按n键定位到下一个匹配的被查找字符串) | /word |
将当前行中查找到的第一个字符“old”替换为“new” | :s /old/new |
将当前行中查找到的所有字符“old”替换为“new” | :s /old/new/g |
在行号“n1,n2”范围内替换所有的字符串“old”为“new” | :n1,n2 s/old/new/g |
将整个文件内的字符串“old”替换为“new” | :% s/old/new/g |
(2)保存退出
功能 | 按键 |
---|---|
退出vi/vim编辑器,未对文件做任何编辑操作才可退出 | :q |
不保存文档内容,强制退出vi/vim编辑器 | :q! |
保存文件 | :w |
将文件另存为/dir/file | :w /dir/file |
保存文件内容并退出vi/vim编辑器 | :wq 或者 ZZ |
强制保存并退出 | :wq! |
(3)其他操作
功能 | 按键 |
---|---|
在当前文件中读入其他文件内容 | :r /dir/file |
查找含有"word"的行并删除 | :g/word/d |
显示行号 | :set nu |
关闭行号显示 | :set nonu |
删除n1-n2行内容 | :n1,n2 d |
复制n1-n2行到第n行后面 | :n1,n2 co n |
数据流和重定向
数据流
- 标准输入(standard input,简称stdin):默认情况下,标准输入指从键盘获取的输入
[root@localhost ~]# cat filename1
Mon Jul 10 02:51:10 PM CST 2023
将filename1文件的内容通过cat做一个输入的动作
- 标准输出(standard output,简称stdout):默认情况下,命令执行所回传正确的信息会输出到屏幕上
[root@localhost ~]# pwd
/root
- 标准错误输出(standard error output,简称stderr):默认情况下,标准错误输出可理解为命令执行失败后,所回传的错误信息会输出到屏幕上
[root@localhost ~]# cd /sjdhjsch
-bash: cd: /sjdhjsch: No such file or directory
- 标准输入(stdin):代码为0
- 标准输出(stdout):代码为1
- 标准错误输出(stderr):代码为2
重定向操作符
重定向操作符可以将命令输入和输出数据流从默认设备重定向到其他位置。重定向操作符本身不是命令,而是命令中附加的可改变命令的输入和输出对象的特殊符号。
输出重定向操作符:
>输出重定向符;>>追加输出重定向符;
>输出重定向符(将输出的结果写入到指定文件,并且会覆盖源文件内容)
[root@localhost ~]# date Tue Jul 11 02:35:52 PM CST 2023 [root@localhost ~]# date > filename1
如果直接使用输出重定向符 文件,则会创建这个文件。
[root@localhost ~]# > 123 [root@localhost ~]# ll total 13016 -rw-r--r--. 1 root root 0 Jul 11 14:43 123
>>追加输出重定向符(写入文件时不会做覆盖)
[root@localhost ~]# date >> filename1
输入重定向符操作
输入重定向符<
将filename1文件的内容通过cat做一个输入的动作,基于cat程序的0接口接收了这文件的信息。
[root@localhost ~]# cat < filename1 Tue Jul 11 02:50:27 PM CST 2023
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
输入的终止结束符<<
指定.作为终止结束符(终止结束符要单独占一行,因为它是按行结束的)
[root@localhost ~]# cat << .
输入的终止结束符还可以编辑文件
我们指明结束符是EOF,并将内容输入到文件filename1中,再查看。
[root@localhost ~]# cat << EOF > filename1
把错误和正确结果都写入文件内
[root@localhost ~]# date 1>filename1 2>filename1
2和1一样写到filename1中。[root@localhost ~]# date 1>filename1 2>&1
echo
命令用于在终端设备上输出字符串或变量提取后的值
语法格式为:“echo [字符串] [$变量]”。
执行“echo 字符串”或“echo $变量”就可以,其中$符号意思是提取变量的实际值,以便后续的输出操作。
示例一:通过echo查看shell变量。
[root@localhost ~]# echo $SHELL /bin/bash
变量是一个可以命名的存储空间,给变量赋值的过程就是给这个存储空间存储数据的过程。
示例二:创建变量并赋值
[root@localhost ~]# var1=zhangsan
=不是等于的意思,而是在内存空间中开辟了一块名字叫做var1的内存,然后给这个内存内容是zhangsan.等下一次我们需要用zhansgan这个值的时候,只需要将var1拉过来就成了,也就是调用的时候只需要将var1这个变量名调用就成。
示例三:调用变量
[root@localhost ~]# echo $var1 zhangsan
示例四:更改变量值
[root@localhost ~]# var1=lisi [root@localhost ~]# echo $var1 lisi
变量其实就是可以变化的量
示例五:查看当前主机名
[root@localhost ~]# echo $HOSTNAME localhost
tee读取输出文件
tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
管道符|:用于两个命令或者多个命令相连接,将管道符左边命令的输出作为管道符右边命令的输入。
命令格式:命令 管道符 tee 文件
[command] | tee [file]
例如通过ls命令根下的目录全部输入到f2文件内
ls / | tee f2
浏览普通文件内容
cat
(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
语法格式:cat 选项 文件
例如:读取f1文件的内容
cat f1
参数
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
把 f1 的文档内容加上行号后输入 f2 这个文档里:
cat -n f1 > f2
把 f1 和 f2 的文档内容加上行号(空白行不加)之后将内容附加到 f3 文档里:
cat -b f1 f2 >> f3
head
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
语法格式:head 参数 文件
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
显示passwd文件的前十行。 head /etc/passwd
显示passwd文件的前5行。 head -n 5 /etc/passwd
显示文件前20个字节。 head -c 20 /etc/passwd
tail
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
语法格式:tail 参数 文件
例如:显示passwd文件的最后10行(默认显示最后10行)
tail passwd
more
more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。
more 文件名
cut
cut命令用于按列提取文本内容,
语法为:cut [选项] 文件名称
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
- b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的 范围之内,该字符将被写出;否则,该字符将被排除
系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:
[root@kongd ~]# head -n 2 /etc/passwd
root❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容
[root@kongd ~]# cut -d: -f1 /etc/passwd
如果打印第二列的内容
[root@kongd ~]# cut -d: -f2 /etc/passwd
显示前三行的第三个字符
[root@server ~]# cut -c 3 /etc/passwd | head -3
o
n
e
sort
排序显示sort
sort命令用于对文本内容进行排序显示,
语法为:sort [选项] 文件名称
| 选项 | 作用 |
| ---- | ------------------ |
| -f | 忽略大小写 |
| -b | 忽略缩进与空格 |
| -n | 依照数值的大小排序 |
| -r | 反向排序 |
| -u | 去除重复行 |
| -t | 指定间隔符 |
| -k | 设置字段范围 |
首先,sort命令执行后默认会按照字母顺序进行排序,非常方便:
[root@kongd ~]# cat passwd
[root@kongd ~]# sort passwd
sort -u参数进行去重操作:
[root@kongd ~]# sort -u f1
对数字进行排序
[root@kongd ~]# cat number.txt
[root@kongd ~]# sort -n f2
uniq
去重显示uniq
uniq命令用于检查及删除文本文件中重复出现的行列
语法为:uniq [选项] 文件名称
-c或--count 在每列旁边显示该行重复出现的次数。
我们对两个文本内容进行操作,区别一目了然:
[root@kongd ~]# uniq uniq.txt
[root@master ~]# uniq -c uniq.txt
替换文件中的字符显示tr
tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出。
语法:tr [OPTION]…SET1[SET2]
参数说明:
-c 反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换
-d 删除指令字符
-s 缩减连续重复的字符成指定的单个字符
示例:将文件testfile中的小写字母全部转换成大写字母,可使用如下命令:
[root@master ~]#cat testfile |tr a-z A-Z
文本内容统计wc
wc命令用于统计指定文本文件的行数、字数或字节数,语法为:wc [选项] 文件名称
wc -l文件名
第一个数字代表行数,第二个代表单词数,第三个代表字节数(统计字节的时候会把换行符也统计进去),最后是文件名。
可以在末行模式下输入set list显示换行符
4. 文件的压缩与解压缩
.zip:zip 程序压缩打包的档案;(很常见,但是因为不包含文档名编码信息,跨平台可能会乱码)
.rar:rar 程序压缩打包的档案;(在windows上很常见,但是是商业软件。)
.gz:gzip 程序压缩的档案; (linux目前使用最广泛的压缩格式)
.bz2:bzip2 程序压缩的档案
.xz:xz程序压缩的档案
.tar:tar 程序打包的资料,并没有压缩过。(但是tar打包的时候可以指定文件格式,就相当于压缩了)
.tar.gz:tar程序打包的档案,其中并且经过gzip 的压缩(最常见)
.tar.bz2:tar 程序打包的档案,其中并且经过 bzip2的压缩
.tar.xz:tar程序打包的档案,其中并且经过xz的压缩(新一代压缩选择)
.7Z:.7zip 程序压缩打包的档案
zip和unzip命令
zip: 可以压缩文件和目录。
语法:zip FILE
语法: unzip FILE
、
tar
格式:tar 选项 包名(压缩文件) 文件名
选项(选项中任选其一):
-c 创建.tar格式的包文件
-x 释放.tar格式的包文件
-t 查看包中的文件列表 (选项中任选其一)
必选项:
-f 用于指定打包文件名。当与-c选项一起使用时,创建的tar包文件使用该选项指定的文件名。当与-x选项一起使用时,则释放该选项指定的tar包文件
辅助选项:
-v 表示在命令执行时显示详细的提示信息
-p 打包时保留文件及目录的权限
-z 调用gzip程序,以gzip格式压缩或解压缩文件(.tar.gz)
-j 调用bzip2程序,以bzip2格式压缩或解压缩文件(.tar.bz2)
-J 使用xz压缩或解压缩文件(.tar.xz),xz的压缩率通常比bzip2更高
-C(大写字母C) 和-x选项一起使用,表示释放包时指定释放的目标路径
这边要注意一点,我们一般一起使用选项的时候,f要最后写,因为f是指定打包的文件名。
压缩:tar -cjvf ad.tar.bz2(压缩的名) 1(要压缩的文件名)
解压缩:tar -xvf ad.tar.bz2 -C test2 (-C指明解压后存放的路径)
5.文件的上传和下载
1、 xftp
2、 scp
scp,具有和ssh一样的验证机制,从而可以实现2台机器安全的远程拷贝文件
文件发送 格式:scp -r(如果发送的是目录文件需要-r选项) 当前主机文件 目标主机的对应路径
文件接收格式:scp 目标主机路径的文件 接收到当前主机路径 接收文件
Linux中的特殊符号
;演示
?演示
反引号演示:
单引号是强引用(就是不管你里面是啥字符,都把它当做标准字符输出,不解释字符的含义)
双引号是弱引用(),可以解释字符的含义
6.命令
shell:壳,命令解释器,负责解析用户输入的命令。命令分两类:
- 内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多
- 外置命令,在文件系统的某个目录下,有个与命令名称相同的文件
file
用于辨识文件类型。格式就是file 文件名 :file aa.txt
type
查看命令类型
查看内置命令 type pwd
查看外置命令:type passwd
内置命令与外置命令的区别就是,shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分是差不多的。
系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中。当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件,如果有则执行该二进制文件,如果没有则提示命令找不到。
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
命令别名
别名是命令的快捷方式。对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。
语法:alias 别名=’原命令 [选项]…… [参数]……’
#查看设置的别名
[root@node13 ~]# alias
那假设我给haha起个别名‘ls’,
alias haha='ls'
#删除别名:
[root@node13 ~]#unalias 别名
> 在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则这些alias将无法使用。
命令历史
history
命令可以查阅命令历史记录 ,也可在命令行利用向上或向下光标键来进行查询。
语法:history [选项] [参数]
选项:
number:显示最近number条命令历史
-c:清空当前历史命令
-a [file]:后面没跟文件时,默认将缓冲区中历史命令写入~/.bash_history中
-r [file]:将历史命令文件中的命令读入当前历史命令缓冲区中
-w:将当前历史命令缓冲区命令写入历史命令文件中;
然后我们之前输入的命令都可以看到,但这些机器重启后还会不会在,一共能存多少行,都是有要求的。
可以通过cat命令查看/etc/profile中有个HISTSIZE=1000 这边说的是最多能保存1000条命令
-c 清空整个命令历史
-d 删除指定命令历史(删除的时候是按照序号进行删除的)
-w 将缓冲区中的命令历史保存到命令历史文件
这个的意思是我们输入-c清空整个历史的时候,输入history的命令去查看的时候发现是清除完的,但是输入cat查看配置文件的时候会发现还没清完,再输入history -w,然后再通过cat命令去查看配置文件的时候就清干净了。
!n 执行命令历史中第n条命令
例如我们执行第二个命令就输入:!2
!-n执行命令历史中倒数第n个命令
!! 执行上一条命令
!KEY执行最近一次以指定KEY开头的命令
!$ 引用上一个命令中最后一个参数
ESC+ 同上,多次按还可以切换
ALT+ 同上,在远程终端无效?
7.用户和组管理
在Linux中用户可以分为三类:
第一种是超级用户——用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
第二种是系统用户(伪用户)——是Linux系统正常工作所必需的用户。主要是为了满足相应的系统进程对文件属主的要求而建立的,专门用来运行后台进程和服务的用户,系统用户不能用来登录系统。例如:bin、daemon、adm、lp等用户。
第三种是普通用户——是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。
在Linux中的组有两类:
第一种是基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。
第二种是附加组(公有组):可以容纳多个用户,组中的用户都具有组所拥有的权利。
配置文件
然后除了这两个之外,我们还需要知道他们的配置文件,就是说在Linux中用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。
(1)用户账号文件——/etc/passwd
ll /etc/passwd
passwd 是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。
/etc/passwd文件中字段说明
> 账号名称:用户登录Linux系统时使用的名称。
> 密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护。
> UID:用户的标识,是一个数值,用它来区分不同的用户,每个用户都有一个UID数值:
超级用户的UID——0系统用户的UID——1~999普通用户的UID——≥1000
> GID:用户所在基本组的标识,是一个数值,用它来区分不同的组,相同的组具有相同的GID。
> 个人资料:可以记录用户的完整姓名、地址、办公室电话、家庭电话等个人信息。
> 主目录:类似Windows 的个人目录,通常是/home/username,这里username是用户名,用户执行“cd~”命令时当前目录会切换到个人主目录。
> Shell:定义用户登录后激活的Shell,默认是Bash Shell
(2)用户密码文件——/etc/shadow
ll /etc/shadow
/etc/shadow文件中的每行9个字段的含义分别为
| 字段 | 含义
| 登录名 | 登录名
| 加密口令 | 使用SHA-512/SHA-256/MD5算法加密后的密码($id$,id为1表示md5,5表示sha256,6为sha512),若为空,表示该用户无需密码即可登录,若为“*”表示该账号不能用于登录系统,若为“!!”表示该账号密码已被锁定 |
| 最后一次修改时间 | 最近一次更改密码的日期,以距离1970年1月1日的天数表示
| 最小时间间隔 | 密码在多少天内不能被修改。默认值为0,表示不限制
| 最大时间间隔 | 密码在多少天后必须被修改。默认值为99999,表示不进行限制
| 警告时间 | 提前多少天警告用户密码将过期,默认值为7天,0表示不提供警告
| 不活动时间 | 密码过期多少天后禁用此用户
| 失效时间 | 密码失效日期,以距离1970年1月1日的天数表示,默认为空,表示永久可用 |
| 标志 | 保留未用,以便以后发展之用
(3)用户组账号文件——/etc/group
ll /etc/group
系统中的每个组,在/etc/group文件中有一行记录,任何用户均可以读取用户组账户信息配置文件。
| 字段 | 说明 |
| Groupname | 组的名字 |
| Passwd | 组的加密口令 |
| GID | 是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定用户的基本组 |
| Userlist | 是用“,”分开的用户名,列出的成员以该组为附加组 |
添加新用户
首先来看怎么添加新用户,例如我们添加一个叫做zhangsan的用户
useradd zhangsan
添加后我们可以通过id去查看张三的信息
id zhangsan
这边要注意一下,就是在创建张三这个用户之前是没有张三这个组的,就是如果没有指定组则系统在你创建用户的时候会自动给你创一个和用户名字一模一样的组,这个就是基本组。
useradd要用到的选项
-u UID 指定uid
-g GID 指定基本组
-G GID1,GID2,… 指定附加组
-c “注释信息” 指定用户注释信息
-d /path/to/dir/ 指定某个目录为用户家目录
-s /shell 指定用户使用的shell
useradd -G rhcsa -g zhangsan -u 2001 -c "putongyonghu" -d /data/wangwu -s /usr/bin/sh wangwu
这个的意思是说我们创建了一个用户叫做王五,并且指定他的附加组是redhat的附加组,基本组是zhansgan的基本组,uid为2001,注释信息说他是一个普通用户,并将他的家目录指定为根下的data目录下面的xiaoming,它使用的shell是/usr/bin/sh 。
passwd wangwu
我们如果拿xshell远程登录的话,拿昵称是不能登录的,因为昵称是可以重复的,但是名字是不能重复的。所以还是通过名字加IP的方式进行登录
然后刚刚咱用了一个命令passwd,我们来了解一下,它是用来更改使用者的密码
然后来看下里面的选项:
-n 指定密码最短使用权限
-x 指定密码最长使用权
-w 指定警告时间
-d 删除用户密码,在红帽系统中,空密码用户禁止登录
修改用户信息
通过usermod命令来修改
usermod -u 2004 wangsi
常用的选项包括-c,-d,-m,-g,-G,-s,-u
等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,还可以使用如下选项:
-l 新用户名——更改账户的名称,必须在该用户未登录的情况下才能使用。
-L——锁定(暂停)用户账户,使其不能登录使用。
-U——解锁用户账户
删除用户
userdel wanger
删除的时候带上r的选项,-r——在删除该账户的同时,一并删除该账户对应的主目录。
如果删除的时候没有带r的选项,把用户删除后,用户的家目录和邮箱还是在的,但如果这些实在不想要的话可以通过这个方法进行删除,
查看邮箱,然后通过rm进行删除。
ll /var/spool/mail
添加组
首先创建组groupadd 用户组的名称
groupadd zhangsan
创建时常用的选项:-g GID——指定新用户组的组标识号(GID),默认值是已有的最大的GID加1。 -r——建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID。
修改组
groupadd zhangsan
groupmod -g 2008 zhangsan
修改组中常用的选项
-g GID——为用户组指定新的组标识号。
-n 新用户组——将用户组的名字改为新名字修改用户组的名称和 用户组的GID值。
组的名字:组的密码:组的ID:哪个用户把这个组作为附加组
/etc/gshadow 通过gpasswd给组设置密码后可查看
删除组
groupdel 用户组的名称,在删除组的时候,如果是基本组,则必须要先删除引用该基本组的用户,然后再删除该基本组。
groupdel zhangsan
手动创建一个用户
进入到passwd这个配置文件中
然后在最后一行按照之前用户的格式重新创建一个新的用户就好。
如果手动创建组的话就进入到group这个配置文件中按照之前的组的格式到最后一行重新创建一个新的组就好。
8.权限
文字设定法
rw-r--r--.我们把这10个分为四个部分,前三组每组三个,最后一组是那个点
第一组:指的是该文件拥有者对该文件的权限。owner 属主,缩写u
第二组:指的是该文件所属组对该文件的权限。group 属组,缩写g
第三组:指的是既不是该文件的拥有者,也不是该文件所属组的成员,也就是其他人对该文件的权限。other 其他,缩写o
第四组:指的是扩展权限
对文件来讲:r表示对该文件可读;w表示对该文件可写;x表示对该文件可执行。
对目录来讲:r表示可以列出目录下的文件;w表示可以在目录下创建删除文件;x表示可以进入该目录(也就是可以切换到目录)。
修改文件或目录的权限使用的命令是chmod(英文全拼:change mode)
+``或``-``或``=
:表示设置权限的操作动作,+代表添加某个权限;-代表取消某个权限;=表示只赋予给定的权限,并取消原有的权限。 然后接下来我们挨个都来演示一下。
给1号文件的用户所有者添加执行的权限。
chmod u+x 1
给1号文件的用户所属组赋予写的权限
chmod g+w 1
如果想要同时给所有用户添加执行的权限,不需要我们三种身份挨个赋予
这里有个a代表的所有用户
chmod a+x 1
还有减掉某个权限、赋予某个并代替掉之前的权限也是都演示一下。
chmod u-x 文件名
chmod u=x 文件名
数字设定法
在这里面:
-代表没有权限,可以用数字0表示;
x代表执行权限,可以用数字1表示
w代表写的权限,可以用数字2表示;
r代表读的权限,可以用数字4表示;
那假如我们要对1文件的三种身份全部只设置写的权限
chmod 222 文件名
这里一定要记住这三个数字分别对应了三种身份,每种身份的权限加起来就是该身份所在位的数值。
特殊权限
SUID
作用:是为了让一般用户执行某些程序的时候,在程序运行的期间,暂时获得该程序文件的所属者的权限。
chmod u+s 文件名称
chmod 0777 文件 去掉该文件的suid权限
chmod 4777 文件 增加该文件的suid权限
SGID
文件:如果SGID设置在二进制文件上面,则不论用户是谁,都可以在执行该程序的时候程序的所属组将变成该文件的所属组。
目录:如果SGID设置A目录上,则在该目录内创建的文件或者目录的所属组会变成A目录的所属组。
chmod 0777 文件 去掉该文件的sgid权限
chmod 2777 文件 增加该文件的sgid权限
chgrp (change group)
Sticky Bit t
SBit 只针对目录有效,在具有SBit权限的目录下,如果该用户在该目录下拥有wx权限,则当用户在该目录下创建文件或者目录的时候,只有文件拥有者和root用户才有权限去删除里面的东西。
chmod 0777 文件 去掉该文件的sbit权限
chmod 1777 文件 增加该文件的sbit权限
拓展权限
acl:给指定的用户分配指定的权限。
查看acl权限
getfacl 文件名
设定acl权限
语法:setfacl 选项 文件名
选项:
> -m:设定 ACL 权限。
如果是给予用户 ACL 权限,则使用u:用户名:权限
格式赋予;
如果是给予组 ACL 权限,则使用g:组名:权限"
格式赋予;
> -x:删除指定的 ACL 权限;
> -b:删除所有的 ACL 权限;
> -d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
> -k:删除默认 ACL 权限;
> -R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;
9.管理Linux的联网
linux的IP地址配
动态配置IP地址:当前主机通过DHCP的方式去自动获取IP地址。
静态配置IP地址:根据动态获取的地址后期手动的去给他配置地址。
nat模式:主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信。
桥接模式:桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。更改桥接模式的时候大家注意一下,有些主机按照咱之前的方式选择桥接就断卡网卡重新连接就可以获得IP,但是有些主机是拿不到地址的,拿不到地址的话需要点击编辑—虚拟网络编辑器-点击右下角的更改设置,桥接的原理是将虚拟的网卡桥接到真实的物理网卡上。桥的时候注意要选择你现在真实物理机上网的网卡,是有线就选择有线,是无线就选择无线。
*仅主机模式*:Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。
配置IP地址
红帽9的配置文档
[root@localhost ~]# vim /etc/NetworkManager/systemconnections/ens160.nmconnection
注意一下,就是我们去更改的时候不要直接对配置文件进行更改,因为更改后系统是不会提示错误的
通过命令去更改IP地址
通过命令去更改的时候我们用的是软件NetworkManager提供的nmcli命令。
显示设备的状态信息
`[root@localhost ~]# nmcli device status
显示设备的配置信息**
[root@localhost ~]# nmcli device show
connection选项
`[root@localhost ~]# nmcli connection
add clone delete down edit export help import load modify monitor reload show up`
add 重新添加一个配置文件
delete删除配置文件;
edit编辑指定的配置文件
help 帮助;
load加载配置文件;
modify修改配置文件的内容;
reload重载
up 启用;
down禁用。
通过该选项对配置文件修改去更改IP地址。(非交互式)
示例:将模式更改为静态的模式并手动配置IP地址、子网掩码、网关、DNS。
[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.192.120/24 ipv4.gateway 192.168.192.2 ipv4.dns 114.114.114.114 +ipv4.dns 8.8.8.8
通过cat获取配置文件查看更改后的内容
[root@localhost ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
重新激活配置文件[root@localhost ~]# nmcli connection up ens160
创建一个新的配置文件
一个网卡可以对应多个配置文件,但是在应用的时候只能应用一个。
[root@localhost ~]# nmcli connection add type ethernet con-name work ifname ens160 Connection 'work' (ddb5861f-c520-46cb-9a8e-6f4d8e86b86f) successfully added.
指定设备类型是ethernet,通过con-name起的连接名字是work,也就是我的新的配置文件名,通过ifname指定的是设备名。
查看新的配置文件
[root@localhost ~]# cat /etc/NetworkManager/system-connections/work.nmconnection
激活work配置文件
`[root@localhost ~]# nmcli connection up work Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
通过edit的方式去更改IP地址(交互式)**
[root@localhost ~]# nmcli connection edit work
nmcli> 通过tab键查看选项
activate back describe goto help nmcli print quit remove save set verify
通过goto进入Ipv4中
nmcli> goto ipv4
nmcli ipv4> 通过tab键查看选项
activate back describe goto help nmcli print quit remove save set verify
通过set将ipv44模式改为manual手动配置
nmcli ipv4> set method manual
改地址、掩码、网关、DNS,并保存退出
nmcli ipv4> set method manual
nmcli ipv4> set addresses 192.168.197.120/24
nmcli ipv4> set gateway 192.168.197.2
nmcli ipv4> set dns 114.114.114.114
nmcli ipv4> save
Connection 'work' (ddb5861f-c520-46cb-9a8e-6f4d8e86b86f) successfully updated.
nmcli ipv4> quit
激活。
两种更改方式推荐modify。
静态更改为动态之后配置文件中关于手动配置IP的部分还是存在的,需要通过eidt交互式删除。
通过delete删除配置文件
[root@localhost ~]# nmcli connection delete work
Connection 'work' (ddb5861f-c520-46cb-9a8e-6f4d8e86b86f) successfully deleted.
网络测试命令
ping命令 测试网络的连通性的。
命令一般格式为:ping [选项] <目标主机名或IP地址>
选项:
-c 数字——用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令。
-s 字节数——设置ping命令发出的消息包的大小,默认发送的测试数据大小为56字节;自动添加8字节的ICMP协议头后,显示的是64字节;再添加20字节的IP协议头,则显示的为84字节。最大设置值为65507B。
-i 时间间隔——设定前后两次发送ICMP消息包之间的时间间隔,无此选项时,默认时间间隔为1秒。为了保障本机和目标主机的安全,一般不要小于0.2秒。
-t——设置存活时间TTL(Time To Live)
[root@localhost ~]# ping -c 4 www.baidu.com
[root@localhost ~]# ping localhost
tracepath追踪并显示报文到达目的主机所经过的路由信息
命令一般格式为:tracepath [选项] <目标主机名或目标IP地址>
通过-b的选项对沿途各主机节点同时显示IP地址和主机名。
[root@localhost ~]# tracepath -b www.baidu.com
从网站下载文件
wget命令用于在终端命令行里下载网络文件,英文全称为:“web get”,语法格式为:wget [选项] 网址
在下载之前首先需要测试网络连通性,只有网络正常连通才可以
[root@localhost ~]# wget https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm
选项:
-P 下载到指定目录
-t 最大尝试次数(这个如果不指定次数的话,在网络环境不好的时候下载中断了,是不会继续下载的,但如果我们设置了最大尝试次数,例如设置为3次,他会在中断后再次下载,尝试3次。)
-b 后台下载模式
-c 断点续传 (基于之前断点的位置继续下载)
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载 (指定一个路劲,可以将路劲下的目录全部下载)
curl命令是一个网络工具,其主要作用是通过http、https、ftp等方式下载/上传文件,,还可以访问网站(这边访问的网站不是一个具体的页面,而是开发者的代码)。
[root@localhost ~]# curl 百度一下,你就知道
[root@node12 ~]# curl www.baidu.com -o index.html -o的选项是将要访问的信息输出到指定文件
10.管理Linux软件包和进程
rpm
RPM(Red Hat Package Manager,Red Hat软件包管理器)是一种开放的软件包管理系统,按照GPL条款发行,可以运行于各种Linux系统上。RPM简化了Linux系统安装、卸装、更新和升级的过程,只需要使用简短的命令就可完成。RPM维护一个已经安装软件包和它们的文件的数据库,因此,可以在系统上使用查询和校验软件包功能。
红帽中的软件包它的管理格式是rpm的格式。
(1)RPM是红帽包管理(Redhat Package Manager)的缩写。
- 由Red Hat公司提出的一种软件包管理标准。
- 是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)。
- RPM功能通过rpm命令使用不同参数来实现。
不同的发行系统它默认的管理格式是不一样的,它后续是通过统一的格式去开发的。
在Linux中它的软件包的格式就相当于是运行程序的格式。
rpm软件包中包含有关于本软件包的相关信息, 便于对软件包信息进行查询。
RPM软件包的典型命名格式:
软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm`,比如 `zsh-5.0.2-14.el7.x86_64.rpm
| zsh | -5 | 0 | 2 | 14 | el7 | x86 | 64 |
| ------ | -------- | -------- | ------ | ------------ | ----------- | ----------- | ------------ |
| 软件名 | 主版本号 | 次版本号 | 修订号 | 软件发布次数 | 发行商RHEL7 | CPU架构平台 | 支持系统位数 |
软件包的获取方式
一种是通过互联网的方式去下载,这种叫做网络源去获取
一种是在本地去获取,通过光驱去获取软件包,这种叫做本地源去获取
本地源获取软件包
首先我们需要去加载软件包,我们需要通过挂载的方式将当前主机下的某个目录和我的文件系统做一个连接,连接后类似于是我通过当前目录连接到某个设备的访问入口,切换到该目录就相当于切换到该设备,该文件系统。
查看本地光盘是否连接
[root@localhost ~]# ll /dev/sr0
brw-rw----+ 1 root cdrom 11, 0 Jul 13 11:42 /dev/sr0
[root@localhost ~]#
sr0中的s代表的设备类型SATA,r代表的是ROM存储介质,0是光盘中的数据读取接口,第一个接口用0来标记。
cdrom也可以对光盘进行标记
[root@localhost ~]# ll /dev/cdrom
lrwxrwxrwx. 1 root root 3 Jul 13 11:42 /dev/cdrom -> sr0
[root@localhost ~]#
手动挂载光盘到目录中
mount用于挂载Linux系统外的文件。**
格式:mount 要挂载的文件 需挂载的目录
需挂载的目录:系统默认挂载目录:/media ;手动挂载的目录:/mnt。
通过mount查看当前已经挂载的文件
[root@localhost ~]# mount
将光盘挂载到/mnt目录下
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
提示信息:对光盘有一个写保护,就是我们我只能读取,不能写。
提示:警告不影响命令的执行。
一个设备可以同时挂载到多个目录下,也就是说一个设备可以同时指定多个挂载点。
AppStream、BaseOS里面存放了红帽中的软件包。
packages中存放了rpm的软件包。
RPM包的依赖性指的是一个软件依赖于其他的软件包或者库才能够正常运行。
安装rpm包(不带依赖关系的 )
| 参数 | 说明 |
| ------------- | ---------------------------- |
| -i, --install | 安装软件包 |
| --nodeps | 不验证软件包依赖 |
| -v, --verbose | 提供更多的详细信息输出 |
| -h, --hash | 软件包安装的时候列出哈希标记 |
| -U | 软件包升级 |
| -e | 软件包卸载 |
[root@localhost Packages]# rpm -ivh zenity-3.32.0-7.el9.x86_64.rpm
warning: zenity-3.32.0-7.el9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
package zenity-3.32.0-7.el9.x86_64 is already installed
[root@localhost Packages]#
警告:没有密钥验证。(软件包在安装的时候是可以输入密钥进行验证的,如果忽略的话就会有一个警告)
处理秘钥验证:
gpg就是公钥私钥的软件包的验证。
秘钥配置文件:
[root@localhost Packages]# ll /etc/pki/rpm-gpg/
total 8
-rw-r--r--. 1 root root 1669 Apr 6 2022 RPM-GPG-KEY-redhat-beta 测试版本
-rw-r--r--. 1 root root 3682 Apr 6 2022 RPM-GPG-KEY-redhat-release 发行版本
[root@localhost Packages]#
将发行版本秘钥导出
[root@localhost Packages]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
执行这个命令之后再去安装rpm软件包的时候就不会再提示警告信息了。
(这个不验证只基于本地的rpm软件包,如果是互联网上下载的可能还需要)。
卸载rpm包
[root@localhost Packages]# rpm -e 软件名
rpm查询功能(跟-q结合使用)
| 参数 | 说明 |
| ---- | ------------------------------------ |
| -a | 查询所有已安装的软件包 |
| -l | 显示已安装软件包的相关文件列表和信息 |
| -f | 查询文件所属软件包 |
| -i | 显示已经安装的rpm软件包信息 |
-q
(查询已安装的软件包则显示该软件包信息,查询未安装的软件包则显示该包不存在)
[root@localhost Packages]# rpm -q zenity
zenity-3.32.0-7.el9.x86_64
[root@localhost Packages]# rpm -q httpd
package httpd is not installed
-qa (查询所有已经安装的软件包)
[root@localhost Packages]# rpm -qa
[root@localhost Packages]# rpm -qa | wc -l
1172
-ql 将安装软件以文件列表的形式展现出来(释放软件程序的所有文件)
[root@localhost Packages]# rpm -ql tar
-qf (查询文件是由哪个软件包释放的)
[root@localhost Packages]# rpm -qf /usr/share/man/man1/gtar.1.gz
tar-1.34-3.el9.x86_64
-qpi (查看一个包的详细信息,查看时需要指明绝对路径)
[root@localhost Packages]# rpm -qpi /mnt/BaseOS/Packages/coreutils-8.32-31.el9.x86_64.rpm
YUM/DNF管理工具
YUM (Yellow dog Updater,Modified) ,RHEL8中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM),原有的yum命令仅为dnf的软链接,当然依旧可以使用。
[root@kongd ~]# ll which yum
lrwxrwxrwx. 1 root root 5 2月 14 2019 /usr/bin/yum -> dnf-3
(1)YUM/DNF 功能
- 在线下载、 安装、 卸载、 升级rpm软件包
- 自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手工地去安装每一个rpm包
(2)如何实现yum/DNF安装
系统会去读取/etc/yum.repos.d/
目录下的.repo
结尾的文件,从该文件中读取以下内容实现装包:
- 包含各种rpm安装文件的软件仓库(rhel8有两个仓库,rhel7只有一个仓库)
- BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库
- AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库
- 软件仓库的地址信息
1、配置.repo
文件,即yum源
配置文件就是一个软件程序的默认参数初始化的文件,程序在执行的时候,它会匹配初始化的信息。
在系统当中可以自定义yum的初始化文件。
repo文件是Linux系统中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,比如从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。软件仓库配置文件默认存储在/etc/yum.repos.d目录中建立本地源
[root@localhost Packages]# vim /etc/yum.repos.d/base.repo 创建base.repo配置文件
[AppStream] 仓库名称
name=REEL8.5-AppStream 仓库的描述名称
baseurl=file:///mnt/AppStream 软件包的路径,url是统一资源定位符,file指本地协议,//表示的是协议符,是固定用法,后边这个/表示的是根目录
gpgcheck=0 公私钥的验证,0代表关闭,1代表开启,为了避免公私钥验证失败,一般我们都将它关闭。
enable=1 是否启用该仓库,0代表关闭。1代表启用
[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
enable=1
- 建立网络源(Redhat9暂时无公开的网络源,暂不可配置,其他发行版本可自行选择对应网源仓库)
- 阿里云网络源,aliyun的镜像站点为阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
#此处以redhat8.5为例
[root@master ~]# cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)
注:此处先查看自己的发行版本信息,选择相应的仓库。
#仓库文件可以自己写也可以从aliyun网站下载
[root@master ~]# cat /etc/yum.repos.d/aliyun.repo
[appstream]
name=appstream
baseurl=https://mirrors.aliyun.com/rockylinux/8.5/AppStream/x86_64/os/
gpgcheck=0
#gpgcheck=1 #如果gpgcheck为1,需要写秘钥文件路径
#gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-rockyofficial
[baseos]
name=baseos
baseurl=https://mirrors.aliyun.com/rockylinux/8.5/BaseOS/x86_64/os/
gpgcheck=0
#gpgcheck=1
#gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-rockyofficial
- 清华源镜像站点为清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- 中国科技大学镜像站点USTC Open Source Software Mirror
- 网易开源镜像站欢迎访问网易开源镜像站
- ……等等很多大学开源镜像站点……
2、通过yum安装rpm软件包
格式:yum -y install 软件名
[root@localhost Packages]# yum -y install httpd
3、通过yum卸载rpm软件包
[root@localhost ~]# yum -y remove httpd
4、查看软件库里面的所有包组,并按照包组安装
[root@localhost ~]# yum grouplist 查看软件库里面的所有包组
[root@localhost ~]# yum group install "Development Tools" 按照包组名安装
5、搜索文件由哪个包产生
[root@localhost ~]# yum provides touch
[root@localhost ~]# yum whatprovides touch
6、模糊搜索包名
[root@localhost ~]# yum search rz 模糊搜索包含rz的文件
[root@localhost ~]# yum -y install lrzsz.x86_64 安装该文件
[root@localhost ~]# rz 通过rz打开弹窗,双击要传输的文件,就可以将文件传到Linux下面
[root@localhost ~]# sz anaconda-ks.cfg 通过sz 文件名 将该文件从Linux下传到Windows中
源代码编译
1)使用源代码安装软件的优点
- 由于自由软件的最新版本大都以源码的形式最先发布,编译安装可以获得软件的最新版本,及时修复bug
- 如果当前安装的程序无法满足需求,用户可以根据需要重新配置、自由修改源代码,加入新的功能
2)编译需求
- 确认源代码编译环境:需安装支持 C/C++程序语言的编译器yum install gcc
- 下载相应的源码软件包
3)安装
1、配置阶段:基于代码进行安装的时候检测有没有选择对应的路径。
[root@localhost ~]# mkdir /test 创建目录
[root@localhost ~]# cd /test
通过xftp将tar压缩包从Windows中传到Linux中
[root@localhost test]# ll
total 3872
-rw-r--r--. 1 root root 3962257 Jul 13 16:16 tar-1.29.tar.gz
[root@localhost test]# tar -xvzf tar-1.29.tar.gz tar-1.29/ 将该压缩包解压
[root@localhost test]# yum remove tar -y 卸载掉之前安装好的tar包
[root@localhost test]# yum -y install gcc* 安装gcc编译工具
[root@localhost test]# cd tar-1.29/
[root@localhost tar-1.29]# ./configure 运行该脚本文件
这边它只能够以普通用户的身份去执行,但如果之前拿root身份执行了会出错,出错后要先删除其中的config.log文件才能再去执行。
[root@localhost tar-1.29]# rm -rf config.log
[root@localhost tar-1.29]# su - rhcsa 切换到普通用户
[rhcsa@localhost ~]$ cd /test
[rhcsa@localhost test]$ cd tar-1.29/
[rhcsa@localhost tar-1.29]$ ./configure 重新运行该脚本文件
2、编译阶段:将源码编译成二进制文件。
[rhcsa@localhost tar-1.29]$ exit
logout
[root@localhost tar-1.29]# make make命令会将所有的.c文件生成.o文件。
3、安装
[root@localhost tar-1.29]# make install 通过make install去将所有的.o文件安装
4、测试
[root@localhost test]# touch 1 2 3
[root@localhost test]# tar -cvzf a.tar.bz2 1 2 3
1
2
3
```
11.进程
(1)程序、进程、线程
程序: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下
进程:进程是已启动的可执行程序的运行实例。
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位
(2)进程分类
ps
查看进程显示当前运行进程
[root@localhost ~]# ps
PID TTY TIME CMD
12313 pts/1 00:00:01 bash
86367 pts/1 00:00:00 ps
选项:
-a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示
-f:做一个更完整的输出
显示所有运行进程
[root@localhost ~]# ps -aux
查看当前用户的进程
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 42097 42091 0 80 0 - 29040 wait pts/0 00:00:00 bash
0 R 0 43256 42097 0 80 0 - 34857 - pts/0 00:00:00 ps
说明:
F:代表这个程序标志(process flags),说明这个程序的权限。常见号码有:4表示此程序的权限为root;1表示此子程序仅进行复制(fork)而没有实际执行(exec)
S:代表这个程序的状态(STAT),主要的状态有:
R(Running):该程序正在运作中;
S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;
D:不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;
T:停止状态(stop),可能是在工作控制(后台暂停)或traced状态;
Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。
+:位于后台的进程组
UID/PID/PPID:代表此程序被该UID所拥有/程序的PID号码/此程序的父进程PID号码。
C:代表CPU使用率,单位为百分比;
PRI/NI:Priority/Nice的缩写,代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执行。
ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel funcition,指出该程序在内存的哪个部分,如果是running的程序,一般会显示-。SZ代表此程序用掉多少内存,WCHAN表示目前程序是否运作中,若为-表示正在运行。
TTY:登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。
TIME:使用掉的CPU时间,即此程序实际花费CPU运作的时间。
CMD:触发此进程的指令是什么。
查看当前用户的进程
[root@localhost ~]# ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1280 2.2 0.2 237304 5408 tty1 Ss+ 15:54 0:00 -bash
root 1415 0.1 0.2 237172 5092 pts/0 Ss 15:55 0:00 -bash
root 1452 0.0 0.2 268484 4008 pts/0 R+ 15:55 0:00 ps -u
[root@localhost ~]# ps aux |less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2164 648 ? Ss 08:47 0:00 init [5]
说明:
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存 驻留内存
TTY: 进程运行的终端
STAT: 进程状态 man ps (/STATE)
R 运行
S 可中断睡眠 Sleep
D 不可中断睡眠
T 停止的进程
Z 僵尸进程
X 死掉的进程
s 进程的领导者,父进程
< <优先级较高的进程
N N优先级的进程
+表示是前台的进程组
l 以线程的方式运行
START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
查看指定进程的PID
[root@localhost ~]# pgrep -l sshd
5945 sshd
12308 sshd
12312 sshd
根据ID号结束进程
[root@localhost ~]# kill 5945
结束所有批处理进程
[root@localhost ~]# killall sshd
这边将sshd的进程结束后,要从虚拟机的终端内重新启动
[root@localhost ~]# systemctl start sshd
top命令查看进程
语法
top [-d 数字] | [-bnp]
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒
-b:以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。
-n:与-b搭配,进行几次top的输出结果
-i:不显示闲置或者僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险
-p:指定某些个PID来进行查看检测
top - 17:21:03 up 4:32, 5 users, load average: 0.19, 0.08, 0.06
Tasks: 483 total, 3 running, 480 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1790.0 total, 1278.5 free, 240.5 used, 271.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1393.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 179104 13540 8728 S 0.0 0.7 0:01.22 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par+
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker+
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_perc+
10 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftir+
11 root 20 0 0 0 0 I 0.0 0.0 0:00.13 rcu_sch+
- 统计信息区
第一行为任务队列信息:top - 17:21:03 up 4:32, 5 users, load average: 0.19, 0.08, 0.06
> 17:21:03表示当前系统时间;up 4:32表示系统已经启动4小时32分钟了;
>
> 5 users表示当前登录系统的用户数;
>
> load average: 0.19, 0.08, 0.06表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果是1表示满负载)
第二行:Tasks: 483 total, 3 running, 480 sleeping, 0 stopped, 0 zombie
> 483 total进程的总数; 3 running正在运行的进程数,;480 sleeping处于休眠状态的进程数, ; 0 stopped停止的进程数, ; 0 zombie僵死的进程数。
第三行:%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
> 0.3 us表示用户进程占用CPU的百分比;0.7 sy系统进程占用CPU的百分比;
> 0.0 ni用户进程空间内改变过优先级的进程占用CPU的百分比; 99.0 id空闲CPU占用的百分比;0.0 wa代表I/Owait表示等待输入、输出的进程占用CPU的百分比;
> 0.0 hi表示cpu服务于硬件中断所耗费的时间总额; 0.0 si表示cpu服务于软件中断所耗费的时间总额;
> 0.0 st表示虚拟机被hypervisor偷去的cpu时间。另外,如果是多内核设备,可按下数字键“1”来切换成不同cpu的负载率。
MiB Mem : 1790.0 total, 1278.5 free, 240.5 used, 271.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1393.8 avail Mem
> total系统的内存大小;free目前空余内存大小;used已经使用的内存大小
- 进程信息区:显示了每个进程的运行状态
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 179104 13540 8728 S 0.0 0.7 0:01.22 systemd
> PID:进程的id
> USER:进程所有者的用户名
> PR:进程优先级
> NI:nice值。负值表示高优先级,正值表示低优先级
> VIRT:进程使用的虚拟内存总量,单位为KB
> RES:进程使用的、未被换出的物理内存大小,单位KB
> SHR:共享内存大小,单位KB
> S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程
> %CPU:上次更新到现在的CPU时间占用百分比
> %MEM:进程占用的物理内存百分比
> TIME+:进程总计使用的CPU时间,单位为1/100秒
> COMMAND:正在运行进程的命令名或者命令路径
在top执行过程中可以使用的按键命令
| 交互式命令 | 说明 |
| ---------- | ------------------------------------------------------------ |
| h或? | 显示帮助信息,给出交互式命令的一些说明 |
| k | 终止一个进程,系统将提示用户输入一个需要终止进程的PID |
| i | 忽略闲置进程和僵死进程,这是一个开关式命令 |
| s | 改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是秒。如果输入小数,就换算成毫秒;如果输入0,系统输出将不断刷新,默认刷新时间是3秒;需要注意的是,如果设置太短的时间,可能会引起系统不断刷新,无法看清输出显示情况,而且系统负载也会加大 |
| o或者O | 改变top输出信息中显示项的顺序。按小写的a-z键可以将相应的列向右移动,而按大写的A-Z键可以将相应的列向左移动。最后按enter确定 |
| f或者F | 从当前显示列表中添加或者删除项,按f键之后会显示列的列表,按a-z键即可显示或隐藏对应的列。最后按enter确定 |
| m | 切换显示内存信息 |
| t | 切换显示进程和cpu状态信息 |
| r | 重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10 |
| l | 切换显示平均负载和启动时间信息 |
| q | 退出top显示 |
| c | 切换显示完整命令行和命令名称信息 |
| M | 根据驻留内存大小进行排序输出 |
| N | 以PID来排序 |
| P | 根据CPU使用百分比大小进行排序输出 |
| T | 根据时间/累计时间进行排序输出 |
| S | 切换到累计模式 |
| W | 将当前top设置写入~/.toprc文件中 |
12.磁盘管理
什么是磁道呢?每个盘片都在逻辑上有很多的同心圆,最外面的同心圆就是 0 磁道。我们将每个同心圆称作磁道(注意,磁道只是逻辑结构,在盘面上并没有真正的同心圆)。硬盘的磁道密度非常高,通常一面上就有上千个磁道。但是相邻的磁道之间并不是紧挨着的,这是因为磁化单元相隔太近会相互产生影响。
在磁盘上每个同心圆是磁道,从圆心向外呈放射状地产生分割线(扇骨),将每个磁道等分为若干弧段,每个弧段就是一个扇区。每个扇区的大小是固定的,为 512Byte。扇区也是磁盘的最小存储单位。
柱面又是什么呢?如果硬盘是由多个盘片组成的,每个盘面都被划分为数目相等的磁道,那么所有盘片都会从外向内进行磁道编号,最外侧的就是 0 磁道。具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面。
磁盘分区
磁盘分区是指对硬盘物理介质的逻辑划分。
分区的意义:
1、数据的安全性:2、系统的效能考虑:
分区类型
1、MBR分区
MBR(Master Boot Record,主引导记录)是传统的分区机制,使用BIOS引导PC设备,寻址空间只有32bit长。
- 分区空间最大支持2.2TB
- 支持的分区数量:4个主分区或者3个主分区1个扩展分区
MBR分区类型
- 主分区(primary partition)
> 一块硬盘最多4个主分区,主分区不可以再进行二次分区。
> 主分区可以直接建立文件系统,存放数据
> 可以用来引导、启动操作系统
- 扩展分区(extended partition)
> 一块硬盘最多一个扩展分区,加主分区最多4个
> 不能创建文件系统
> 可以划分逻辑分区
- 逻辑分区(logical partition)
> 可以创建文件系统,存放数据
> 逻辑分区的数量没有限制。
2、GPT分区**
GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式
- 在默认情况下,GPT最多可支持128个分区
- 支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)
- GPT分区表自带备份
- 向后兼容MBR,GPT分区表上包含保护性的MBR区域
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 8G 0 rom /mnt
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
[root@localhost ~]#
```
使用fdisk管理分区
fdisk命令工具默认将磁盘划分为mbr格式的分区
命令:fdisk 设备名
fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可
实验步骤:
创建一块新的硬盘。
把虚拟机关机,找到硬盘的位置,然后双击,
点击添加,全部下一步,大小改为10,然后全部下一步,点击完成,点击确定。
查看硬盘信息
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 8G 0 rom /run/media/root/RHEL-9-0-0-BaseOS-x86_64
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
nvme0n2 259:3 0 10G 0 disk
使用fdisk管理分区
先找到本地硬盘位置
[root@localhost ~]# ll /dev/nvme0n2
brw-rw----. 1 root disk 259, 3 Jul 15 09:50 /dev/nvme0n2
了解fdisk的选项
选项:
| 指令 | 作用 | 指令 | 作用 |
| ---- | ------------------------ | ---- | -------------------------------------- |
| a | 调整磁盘的启动分区 | p | 显示当前磁盘的分区信息 |
| d | 删除磁盘分区 | t | 更改分区类型 |
| l | 显示所有支持的分区类型 | u | 切换所显示的分区大小单位 |
| m | 查看所有指令的帮助信息 | n | 创建新分区 |
| q | 不保存更改,退出fdisk命令 | w | 把修改写入磁盘分区表,然后退出fdisk命令 |
| g | 新建一个空的GPT分区表 | o | 新建一个空的DOS分区表 |
进入fdisk管理工具的交互界面
[root@localhost ~]# fdisk /dev/nvme0n2
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x350daeb6.
进来之后会有一个欢迎提示,也就是缓冲区,接下来在缓冲区内进行操作,
DOS的意思是默认是BIOS引导的,但如果是gpt的话,就是UEFI引导的,默认会有128个分区。
Command (m for help): m 查看所有指令的帮助信息
Command (m for help): p 显示当前磁盘的分区信息
通过n命令新建分区
Command (m for help): n 创建新分区
Partition type
p primary (0 primary, 0 extended, 4 free) 主分区
e extended (container for logical partitions) 拓展分区
Select (default p): p 这边输入p、直接回车都是默认创建主分区
Partition number (1-4, default 1): 1 这边输入1、直接回车都是默认创建分区1
First sector (2048-20971519, default 2048): 起始扇区,一个扇区是512个字节,它是从2048扇区开始的,从这个开始的原因是前面需要预留空间存放磁盘的引导信息,这边它并不是全部被占用,会有一些空余,目的是防止引导信息发生变化。
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): +2G 结束扇区,该扇区大小为2G
删除的时候需要Ctrl+del一起按才可以删除,只按del它会认为输入字符。
Command (m for help): n 创建新分区
Partition type
p primary (1 primary, 0 extended, 3 free) 主分区
e extended (container for logical partitions) 扩展分区
Select (default p): e 创建拓展分区
Partition number (2-4, default 2): 2 创建分区2
First sector (4196352-20971519, default 4196352): 起始扇区
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4196352-20971519, default 20971519): +5G 结束扇区,该扇区大小设置为5G
Command (m for help): n 创建逻辑分区
Partition type
p primary (2 primary, 1 extended, 1 free) 主分区
l logical (numbered from 5) 逻辑分区
Select (default p): l 创建逻辑分区
Adding logical partition 5
First sector (4198400-14682111, default 4198400): 起始扇区
Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-14682111, default 14682111): 结束扇区,直接默认最大
Created a new partition 5 of type 'Linux' and of size 5 GiB.
注意一下如果把扩展分区删除,那它下面的逻辑分区也会全部被删掉。所以后续就可以通过直接删除拓展分区的方式将逻辑分区全部删掉。还有就是逻辑分区的编号是没有办法选择的。
Command (m for help): p
Disk /dev/nvme0n2: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: VMware Virtual NVMe Disk
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: dos
Disk identifier: 0x3675abb3
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 4196351 4194304 2G 83 Linux
/dev/nvme0n2p2 4196352 14682111 10485760 5G 5 Extended
/dev/nvme0n2p3 14682112 18876415 4194304 2G 83 Linux
/dev/nvme0n2p4 18876416 20971519 2095104 1023M 83 Linux
/dev/nvme0n2p5 4198400 14682111 10483712 5G 83 Linux
Partition table entries are not in disk order.
Command (m for help): w 保存并退出
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
查看分区
[root@localhost ~]# fdisk /dev/nvme0n2 -l
Disk /dev/nvme0n2: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: VMware Virtual NVMe Disk
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: dos
Disk identifier: 0x3675abb3
Device Boot Start End Sectors Size Id Type
/dev/nvme0n2p1 2048 4196351 4194304 2G 83 Linux
/dev/nvme0n2p2 4196352 14682111 10485760 5G 5 Extended
/dev/nvme0n2p3 14682112 18876415 4194304 2G 83 Linux
/dev/nvme0n2p4 18876416 20971519 2095104 1023M 83 Linux
/dev/nvme0n2p5 4198400 14682111 10483712 5G 83 Linux
Partition table entries are not in disk order.
分区的原因
不划分分区没有办法直接把数据写入到硬盘的,要存放数据之前必须要指定文件类型,指定文件类型只能对分区进行一个格式要求,对硬盘是没办法的。就跟在Windows下面可以格式化C盘,但是没有办法直接格式化硬盘。
格式化
格式化的目的: 是为了形成文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
命令格式: mkfs|mkfs.xfs|mkfs.ext4 [选项] 分区的设备名
选项:
> -t 文件系统类型——当命令名为mkfs时,指定要创建的文件系统的类型(如:xfs、ext4、vfat等)。当命令名为mkfs.xfs、mkfs.ext4等时,不需要该选项。
> -c——建立文件系统前先检查坏块。
> -V——输出建立文件系统的详细信息。
注意:如果已有其他文件系统创建在此分区,必须在mkfs.xfs
命令中加上选项-f
强行进行格式化
我们在这里选择mkfs.xfs,因为红帽自7后默认都是xfs.
对p1分区进行格式化
[root@localhost ~]# mkfs.xfs /dev/nvme0n2p1
挂载
挂载就是将一个分区或者设备挂载至挂载点目录。
将格式化后的分区(我们接下来称之为源)比作水桶,而挂载操作就相当于给源接了一根水管,之后,我们要往源中写入数据,就是通过这跟水管进行的。如果没有这根水管,数据就存不到源中,也就是数据无法保存到硬盘里面。因此,格式化操作后的硬盘,必须挂载在一个文件目录下,才能对此分区进行数据的书写。
创建挂载点目录
[root@localhost ~]# mkdir /p1
查看格式化后的磁盘分区信息
[root@localhost ~]# blkid
挂载分区
[root@localhost ~]# mount /dev/nvme0n2p1 /p1 将分区挂载到根下的P1的目录中
查看挂载信息
[root@localhost ~]# mount | grep /p1
/dev/nvme0n2p1 on /p1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
手动挂载的分区会在系统重启后失效,若用户需要永久挂载分区,则需要通过编辑/etc/fstab
文件来实现。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。
设置系统启动时的自动挂载
打开配置文件:[root@localhost ~]# vim /etc/fstab
设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=8504ce6d-661d-4c96-b3ff-452313748cd6 /boot xfs defaults 0 0
/dev/mapper/rhel-swap none swap defaults 0 0
```
用于挂载信息的指定填写格式中,各字段所表示的意义
| 字段 | 意义 |
| -------- | ------------------------------------------------------------ |
| 设备文件 | 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |
| 挂载目录 | 指定要挂载到的目录,需在挂载前创建好 |
| 格式类型 | 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |
| 权限选项 | 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |
| 是否备份 | 若为1则开机后使用dump进行磁盘备份,为0则不备份 |
| 是否自检 | 若为1则开机后自动进行磁盘自检,为0则不自检 |
/dev/nvme0n2p1 /p1 xfs defaults 0 0 自己在配置文件中写的挂载信息 保存并退出
通过mount -a命令去读取配置文件中新添加的信息。
取消挂载:
- 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载。
命令:umount 挂载点目录或存储设备名
[root@localhost ~]# umount /p1
[root@localhost ~]# mount | grep /p1
[root@localhost ~]#
注意一点,就是之前有挂载的时候需要先取消挂载,再通过mount -a命令去读取配置文件中新添加的信息
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep /p1
/dev/nvme0n2p1 on /p1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
[root@localhost ~]#
交换分区
在Linux系统中,swap交换分区的作用类似于Windows系统中“虚拟内存”。当有程序被调入内存后,但是该程序又不是常被CPU所取用时,那么这些不常被使用的程序将会被放到硬盘的swap交换分区当中,而将速度较快的内存空间释放给真正需要的程序使用,以避免由于物理内存不足而造成的系统效能低的问题。如果系统没有swap交换分区,或者现有交换分区的容量不够用时,可扩展swap交换分区。
扩展swap交换分区的方式有两种:
| 命令 | 功能 |
| -------------------------- | ---------------------------------------------- |
| mkswap 分区设备名 | 将指定的分区格式化为swap交换文件系统 |
| swapon 交换分区设备名|-a | 启用(或激活)指定的交换分区或所有交换分区 |
| swapoff 交换分区设备名|-a | 禁用指定的交换分区或所有交换分区 |
| swapon -s | 查看交换分区的使用情况 |
| free -m | 以兆字节为单位显示物理内存、交换分区的使用情况 |
交换分区和之前分区的区别就是格式化的时候不一样的
格式化:
将P3分区格式化为交换分区
[root@localhost ~]# mkswap /dev/nvme0n2p3 (挂载)
激活swap分区(临时生效),并查看这个分区是否生效
[root@localhost ~]# swapon /dev/nvme0n2p3 激活swap分区
[root@localhost ~]# swapon -s 查看该分区是否生效
Filename Type Size Used Priority(优先级不看前面的-,数字越小优先级越高)
/dev/dm-1 partition 2097148 0 -2
/dev/nvme0n2p3 partition 2097148 0 -3
永久挂载和刚刚方式一样也是需要修改配置文件,并激活。
13.管理逻辑卷
在对磁盘进行分区大小规划时,有时往往不能确定这个分区要使用的总空间大小。而用fdisk对磁盘进行分区后,每个分区的大小就已经固定了,如果分区设置的过大,会白白浪费磁盘空间;分区设置的过小,就会导致空间不够用的情况。这个时候,就可以用到LVM(Logical Volume Manager,逻辑卷管理)。
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。(其实就是在标准分区上添加一个逻辑层)
- LVM基本概念
通过LVM技术,屏蔽了磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。在了解LVM之前,先熟悉LVM中几个常用的术语。
(1)物理存储设备(The physical media):指系统的存储设备文件,如:/dev/hda1、/dev/sda等等。硬盘
(2)物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
(3)卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义。
部署逻辑卷
常用的LVM部署命令
| 功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
| --------- | ---------- | --------- | ---------- |
| 扫描 | pvscan | vgscan | lvscan |
| 建立 | pvcreate | vgcreate | lvcreate |
| 显示 | pvdisplay | vgdisplay | lvdisplay |
| 删除 | pvremove | vgremove | lvremove |
| 扩展 | | vgextend | lvextend |
| 缩小 | | vgreduce | lvreduce |
再添加一块硬盘,将目前添加的两块硬盘整和成一个硬盘
先通过lsblk看是都将硬盘添加成功
[root@localhost ~]# lsblk
将每个硬盘都做成一个分区
查看lvm工具在主机上是否存在
[root@localhost ~]# rpm -qa | grep lvm
llvm-libs-13.0.1-1.el9.x86_64
lvm2-libs-2.03.14-4.el9.x86_64
lvm2-2.03.14-4.el9.x86_64
libblockdev-lvm-2.25-11.el9.x86_64
udisks2-lvm2-2.9.4-3.el9.x86_64
创建pv
pv常用工具
[root@localhost ~]# pv
pvchange pvck pvcreate pvdisplay pvmove pvremove pvresize pvs pvscan
更改 检查 创建 显示 移动 移除 重置大小 显示 显示
创建物理卷 (创建前需要将该挂载的分区取消挂载)
[root@localhost ~]# pvcreate /dev/nvme0n2p1 /dev/nvme0n3p1
WARNING: xfs signature detected on /dev/nvme0n2p1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/nvme0n2p1.
Physical volume "/dev/nvme0n2p1" successfully created.
Physical volume "/dev/nvme0n3p1" successfully created.
检查是否创建成功
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1p2 rhel lvm2 a-- <19.00g 0
/dev/nvme0n2p1 lvm2 --- 2.00g 2.00g
/dev/nvme0n3p1 lvm2 --- <10.00g <10.00g
创建vg
将两个硬盘整合成一个空间,需要用的是卷组的命令,这边指定卷组名为vg1,并指明要整合的是哪些逻辑卷。
[root@localhost ~]# vgcreate vg1 /dev/nvme0n2p1 /dev/nvme0n3p1
Volume group "vg1" successfully created
查看卷组信息
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rhel 1 2 0 wz--n- <19.00g 0
vg1 2 0 0 wz--n- 11.99g 11.99g
创建lv
有两种方式,一种是通过-L指定逻辑卷大小,一种是通过-l指定所占卷组的百分比。
在这边我们通过-l来实现。
[root@localhost ~]# lvcreate -n lv1 -l 100%FREE vg1
Logical volume "lv1" created.
[root@localhost ~]#
查看lv
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
lv1 vg1 -wi-a----- 11.99g
格式化逻辑卷
[root@localhost ~]# mkfs.xfs /dev/vg1/lv1
meta-data=/dev/vg1/lv1 isize=512 agcount=4, agsize=785920 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=3143680, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]#
挂载
挂载后就可以使用了
部署逻辑卷(从小分区扩大成大分区)
提示:在做分区之前都得先取消挂载。
删除逻辑卷
[root@localhost ~]# lvremove /dev/vg1/lv1
Do you really want to remove active logical volume vg1/lv1? [y/n]: y
Logical volume "lv1" successfully removed.
重新创建逻辑卷
[root@localhost ~]# lvcreate -n lv1 -L 8G vg1
WARNING: xfs signature detected on /dev/vg1/lv1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg1/lv1.
Logical volume "lv1" created.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel -wi-ao---- <17.00g
swap rhel -wi-ao---- 2.00g
lv1 vg1 -wi-a----- 8.00g
格式化
[root@localhost ~]# mkfs.xfs /dev/vg1/lv1
meta-data=/dev/vg1/lv1 isize=512 agcount=4, agsize=524288 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=2097152, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
挂载
[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# mount | grep /mnt
/dev/mapper/vg1-lv1 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
扩大
扩大的时候如果卷组空间不够的话,应该先扩大卷组,再扩大逻辑卷(这边因为空间是够的,所以直接去扩大逻辑卷)
扩大的时候是不需要去取消挂载的
[root@localhost ~]# lvextend /dev/vg1/lv1 -L +2g
Size of logical volume vg1/lv1 changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).
Logical volume vg1/lv1 successfully resized.
对新添加的空间格式化
[root@localhost ~]# xfs_growfs /mnt
meta-data=/dev/mapper/vg1-lv1 isize=512 agcount=4, agsize=524288 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1
data = bsize=4096 blocks=2097152, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2097152 to 2621440
通过df -h 查看
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 845M 0 845M 0% /dev
tmpfs 875M 0 875M 0% /dev/shm
tmpfs 350M 9.7M 341M 3% /run
/dev/mapper/rhel-root 17G 4.8G 13G 28% /
/dev/nvme0n1p1 1014M 261M 754M 26% /boot
tmpfs 175M 92K 175M 1% /run/user/0
/dev/sr0 8.0G 8.0G 0 100% /run/media/root/RHEL-9-0-0-BaseOS-x86_64
/dev/mapper/vg1-lv1 10G 104M 9.9G 2% /mnt
删除逻辑卷
怎么创建,倒着往回一层一层删除。
先取消挂载
[root@localhost ~]# umount /mnt
[root@localhost ~]# mount | grep /mnt
移除逻辑卷
[root@localhost ~]# lvremove /dev/vg1/lv1
Do you really want to remove active logical volume vg1/lv1? [y/n]: y
Logical volume "lv1" successfully removed.
移除vg
[root@localhost ~]# vgremove /dev/vg1
Volume group "vg1" successfully removed
移除pv
[root@localhost ~]# pvremove /dev/nvme0n2p1
Labels on physical volume "/dev/nvme0n2p1" successfully wiped.
[root@localhost ~]# pvremove /dev/nvme0n3p1
Labels on physical volume "/dev/nvme0n3p1" successfully wiped.