Linux

Linux

软件包管理器

RPM

RPM原称(“Redhat Package Manager”),RPM会建立统一的数据库文件,详细的记录软件信息并能够自动的分析依赖关系。

  • 安装软件:rpm -ivh filename.rpm
  • 升级软件: rpm -Uvh filename.rpm
  • 卸载软件: rpm -e filename.npm
  • 查询软件的描述信息: rpm -qpi filename
  • 列出软件的文件信息: rpm -qpl filename.npm
  • 查询文件属于哪个RPM: rpm -qf filename

RPM可以帮助用户查询软件相关的依赖关系,但问题还是自己解决。

YUM

yum仓库是为了进一步简化RPM管理软件难度设计,能够根据用户的要求分析出所需要软件包和其相关的依赖关系,自动从服务器下载软件包然后安装到系统。

yum仓库的配置方法,所有的yum仓库都以.repo结尾并存放在/etc/yum.repos.d目录下

[rhel-media]:yum源的名称,可以自定义
baseurl=file:///media/cdrom:提供方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)
enable=1:设置此源是否可用,1为可用0为禁用
gpgcheck=1:设置此源是否校验文件,1为校验,0为不校验
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若为校验请指定公钥的文件地址
yum repolist all     列出所有仓库
yum list all 		 列出仓库中所有的软件包
yum info 软件包名称	  查看软件包信息
yum install 软件包名称 安装软件包
yum reintall 软件包名称 重新安装软件包
yum update 软件包名称   升级软件包
yum remove 软件包		移除软件包
yum clean  alla       清除所有仓库缓存
yum check-update      检查可更新的软件包
yum grouplist		  查看系统中已经安装的软件包组
yum groupinstall	  安装指定的软件包组
yum groupremove 软件包组 移除指定的软件包组
yum groupinfo 软件包组  查询指定的软件包组信息

SHELL

计算机的核心功能是由内核进行控制的,内核负责软件驱动、管理活动、分配管理硬件资源,他不能由用户直接操作,系统提供了系统调用接口开发出的程序满足用户的需求。

SHELL也成为壳,充当人与内核交互的解析器,用户将一些命令告诉shell,它就会调用相应的程序服务执行工作。

一些主流的Linux系统默认字符SHELL是BASH

Bash的优势

  1. 默认保存历史命令
  2. tab键补全
  3. 强大的批处理脚本
  4. 实用的环境变量

命令

命令的格式为

命令名称 [命令参数]  [命令对象]

命令名称、命令参数、命令对象之间用空格键分隔。

命令对象一般是值要处理的目标,命令参数会随着命令的不用环境的不同而不同。

命令参数可以有长格式(完整的选项名称)、短格式(单个字母的缩写)

man查看帮助信息

echo命令用于在终端显示字符串或变量

echo 1111

date命令用于显示/设置系统的事件或日期

date [选项] [+指定的格式]

参数

在这里插入图片描述
在这里插入图片描述

#查看当前时间
date
#按照年-月-日  小时:分钟:秒格式
date "+%Y-%m-%d %H:%M:%S"
#设置系统时间为2015年9月1日8点半
date -s "20150901 8:30:00"
#查看本地系统时区
date "+%Z"
#查看星期几
date "+%A"
#当前是下午还是上午
date "+%p"
#判断当前是一年中的第几天
date "+%j"

reboot命令用于重启系统

wget命令用于使用命令行下载网络文件

#wget命令用于使用命令行下载网络文件,格式
wget [参数] 下载地址

在这里插入图片描述
在这里插入图片描述

elinks实现纯文本界面的浏览器

#安装elinks
yum install elinks
#使用elinks访问百度
elinks www.baidu.com

系统状态检测命令

ifconfig用于获取网卡配置与网络状态信息

#格式ifconfig [网络设备] [参数]

uname命令用于查看系统内核版本信息

#格式 uname [-a] 用于查看系统内核名称、内核发行版,内核版本、节点名、硬件名称、处理器类型、操作系统
uname -a

uptime命令用于查看系统的负载情况

#格式 uptime 
#输出格式 系统当前时间、系统已经运行时间 当前在线用户 平均负载值

watch -n 1 uptime 每秒刷新一次获取当前系统的负载

free命令用于显示当前系统中内存的使用量

free [-m/-g]
#以m为单位显示当前内存的使用量情况

who命令查看当前登入主机的用户情况

who

last命令用于查看所有系统的登入记录

last

history命令用于显示历史执行过的命令

history [-c]
#历史的命令会呗保存到用户家目录中的 .bash_history文件,以.开头的文件一般为隐藏文件属性为系统文件

sosreport 命令用于收集系统配置并诊断信息后输出结论文档 sosreport

工作目录切换命令

pwd命令用于显示当前的工作目录

#-P显示真实路径
pwd [选项]

cd命令用于切换工作路径,格式为

cd [目录名称]

在这里插入图片描述

ls命令用于查看目录中的其他文件

ls [选项] [文件]

在这里插入图片描述

文本文件编辑命令

cat命令用于查看纯文本文件(较短的)

cat [选项] [文件]

在这里插入图片描述
在这里插入图片描述

more命令用于查看纯文本文件(较长的)

more [选项] 文件

在这里插入图片描述

head 命令用于查看纯文本文档的前N行

#head [选项] [文件]
#显示前10行
head -n 10

tail命令用于查看纯文档的后N行

#tail [选项] [文件]

在这里插入图片描述

od命令用于对查看特殊格式的文件

od [选项] [文件]

在这里插入图片描述

tr命令用于转换文本文件中的字符

tr [原始字符] [目标字符]

wc命令用于统计指定文本的行数、字节数、字数

wc [参数] 文本

在这里插入图片描述

cut命令用于通过列来提取文本字符

cut [参数] 文本

在这里插入图片描述

diff命令用于比较多个文本文件的差异

diff [参数] 文件

在这里插入图片描述

文件目录管理命令

touch 命令用于创建空白文件与修改文件时间

touch [选项] [文件]
#将访问与修改时间修改为2天前
touch -d "2 days ago" test

Linux的时间有三种类型:

  1. 更改时间(mtime):内容修改时间
  2. 更改权限(ctime):更改权限与属性的时间
  3. 读取时间(atime):读取文件内容的时间

mkdir用于创建空白的文件夹

mkdir [选项] 目录

在这里插入图片描述

cp 命令用于复制文件或目录

cp [选项] 源文件 目标文件

复制命令的三种情况

  1. 目标文件是一个目录, 会将源文件复制到该目录中
  2. 目标文件是一个文件, 会将源文件覆盖该文件
  3. 目标文件不存在, 将会复制源文件并修改为目标文件的名称

在这里插入图片描述

mv 用于移动文件或改名

mv [选项] 文件名 [目标路径][目标文件名]

rm命令用于删除文件或目录

rm [选项] 文件

在这里插入图片描述

dd指定大小的拷贝的文件或指定转换文件

dd [参数]

在这里插入图片描述
在这里插入图片描述

用户与组管理命令

useradd 用于创建新的用户

useradd [选项] 用户名

在这里插入图片描述
在这里插入图片描述

passwd命令用于修改用户的密码

passwd [选项] [用户名]

在这里插入图片描述

userdel命令用于删除用户的所有

userdel [选项] 用户名

在这里插入图片描述

usermod 用于修改用户的属性

usermod [选项] 用户名

在这里插入图片描述
在这里插入图片描述

groupadd 用于创建群组

groupadd [选项] 群组名

打包压缩文件

tar命令用于对文件打包压缩或解压

#tar [选项] [文件]
tar -czvf 压缩包名.tar.gz 文件名
tar -xzvf 压缩包名.tar.gz

在这里插入图片描述
在这里插入图片描述

文件查询搜索命令

grep命令用于对文本进行搜索

grep [选项] [文件]
#搜索在/etc/passwd  中出现/sbin/nologin 出现的行
grep /sbin/nologin /etc/passwd
#找出用户linuxprobe的文件并复制到/root/findresults目录 "-exex {} \;" {}代表搜索出的文件,结尾是\;
find /-user linuxprobe -exec cp -arf {} /root/findresults/ \;

在这里插入图片描述

find用于文件查找

find [查找路径] 寻找条件
#~代表用户的家目录 .代表当前的目录 /代表根目录
#搜索在/etc/中所有以host开头的文件
find /etc/ -name "host*" -print

在这里插入图片描述
在这里插入图片描述

管道符、重定向与环境变量

管道命令符

管道命令符"|“的作用是将前一个命令的标准输出作为后一个命令的标准输入,格式"命令A|命令B”。

#用翻页的方式查看/etc目录有那些文件
ls -l etc | more
#向linuxprobe用户发送一封邮件
echo "Content" |mail -s "Subject " linuxprobe
#使用非交互式设置用户密码,将root用户密码修改为linuxprobe
echo "linuxprobe" | passwd -stdin root
#其他的使用方式 命令A|命令B|命令C

输入输出重定向

什么是标准输入?

标准输入(STDIN, 文件描述符为0):默认是从键盘输入,为0时表示是从其他文件或命令输出

什么是标准输出?

标准输出(STDOUT,文件描述符为1):默认输出到屏幕,为1时表示是文件

什么是错误输出?

错误输出(STDERR,文件描述符为2): 默认输出到屏幕, 为2时表示是文件

在这里插入图片描述
在这里插入图片描述

命令行通配符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#查看以sda开头的所有设备文件
ls /dev/sda*
#查看sda后面有一个字符的设备
ls /dev/sda2
#查看sda后面包含0-9数字的设备文件
ls /dev/sda[135]
#定义变量值
PRICE=5
#将第一个$符转义
echo "Price is \$$PRICE"

实用的PATH变量

alias 命令用于设置命令的别名

alias 别名=命令

unalias命令用于取消命令的别名

alias cp="cp -i"
unalias cp

执行ls命令后发生的事情?

  1. 如果是以绝对/相对路径输入的命令则直接执行
  2. 检查是否为alias别名命令
  3. 由bash判断其是内部命令还是外部命令 内部命令:属于解释器内部的 外部命令: 独立于解释器外的命令文件
  4. 通过$PATH变量中定义的路径进行命令的查找

type 命令名字 解释器会告诉命令的类型

重要的环境变量

env可以看到Linux中重要的环境变量,变量是由固定的"变量名"与用户或系统设置的"变量值"两部分组成的,如果有需求可以直接修改

在这里插入图片描述

对于某个用户设置的环境变量不能被其他用户使用,因为变量具有其自己的作用域。

export命令用于将局部变量提升为全局变量

export 变量名[=变量值]

VIM编辑器与Shell脚本

VIM文本编辑器

在linux中配置应用服务,实际上就是修改它的配置文件。Linux默认的文本编辑器是vim,vim是vi编辑器的升级版。

vim有三种模式–命令模式、末行模式、编辑模式

命令模式:控制光标的移动,可对文本进行删除、复制、粘贴等。

输入模式:正常的文本录入。

末行模式:保存、退出与设置编辑环境

在这里插入图片描述

命令模式

在这里插入图片描述
在这里插入图片描述

末行编辑模式

在这里插入图片描述

Shell脚本

交互式:用户输入一条命令, Shell解释并执行一条。

批处理(Batch):用户事先编写一个Shell脚本,其中包含诸多命令,Shell会一次执行完所有命令

Shell脚本是将各种命令通过逻辑语句组合而成的程序。

查看系统中所有可用的shell解释器

Cat /etc/shells

查看当前的Shell解释器

echo $SHELL

shell脚本应该包含三部分:脚本声明、 注释信息、 可执行语句

脚本声明(#!):告知系统用何种shell来解释

注释信息(#):对可执行语句或程序功能做介绍,可以不写

可执行语句:执行的具体命令

vim Example.sh
#!/bin/bash
pwd
ls -al

执行脚本

脚本文件路径:./Example.sh

sh 脚本文件路径:sh Example.sh

source 脚本文件路径: source Example.sh

用户参数

Shell脚本为了更加的灵活,可以接好接收用户的参数

在这里插入图片描述

#!/bin/bash
#可以接收用户参数的脚本
echo "当前脚本名称为$0"
echo "总共的参数个数 $# 分别是$*"
echo "第一个参数为$1,第五个参数为$5"

判断用户参数

shell脚本需要对输入的参数进行判断,如果成立的话返回0, 否则返回其他数值

测试语句格式: [ 条件表达式 ]

细分测试语句有: 文件测试、逻辑测试、整数值比较、 字符串比较

文件测试: [操作符 文件或目录名]

在这里插入图片描述

#测试/etc/fstab是否为目录
[ -d /etc/fstab ]
# 判断上一条命令是否成功执行
echo $?

符号&&代表逻辑上的“与”,当前面的命令执行成功后才会执行后面的命令

#判断/dev/cdrom设备是否存在,若存在则输出Exist
[ -e /dev/cdrom ] && echo "Exist"

逻辑测试

逻辑测试 [ 表达式1 ] 操作符 [ 表达式 2 ]

在这里插入图片描述

#输出当前的用户名
echo $USER
[ $USER!= root] && echo "user"

整数比较

整数值比较: [ 整数1 操作符 整数2 ]

在这里插入图片描述
在这里插入图片描述

#比较10是否大于10
[ 10 -gt 10]
echo $?
#比较10 是否等于10
[ 10 -eq 10 ]
显示上一条命令的执行结果
FreeMem=free -m | grep cache: | awk '{print $3}'

字符串比较

字符串比较: [ 字符串1 操作符 字符串2 ]

在这里插入图片描述

#判断String变量是否为空值
[ -z $String ]
echo $?
#输出当前系统的语言
echo $LANG
判断当前系统的语言是否为英文, 否则输出 "输出不是英语"
[ $LANG != "en.US" ] && echo "NOT en.US"

条件测试

条件测试语句可以让Shell脚本根据实际的工作灵活的调整工作的内容, 可以判断系统的状态执行指定的工作,创建指定数量的用户, 批量修改用户密码。

if条件语句

if条件语句分为单分支结构、双分支结构、多分支结构

单分支结构 if、then、fi关键字组成,只在条件成立后执行。

在这里插入图片描述

#判断目录是否存在, 如果不存在就自动创建
#!/bin/bash
DIR="/media/cdrom"
if [ !-e $DIR]
then
mkdir -p $DIR
fi

双分支结构

双分支结构由if、then、else、fi关键词组成,做条件成立或者条件不成立的判断。

在这里插入图片描述

双分支if语句:判定主机是否可以ping通,根据返回结果分别给与提示或警告.

为了减少用户的等待时间,需要为ping命令追加-c参数代表发送数据包的个数, -i代表每0.2秒发一个数据包, -W则为3秒超时。$1为用于输入的第一个参数IP地址, $?是上一条命令的执行结果,如果是0则表示成功。

#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0]
then "Host $1 is up"
else
echo "Host $1 is down"
fi

多分支结构:

多分支结构是由if、then、else、elif、fi组成

在这里插入图片描述

多分支if语句:判断用户输入的分数所在的区间,判定优秀或者不合格

read命令用于将用户的输入参数赋值给指定变量

格式: read -p [提示语句] 变量名

#!/bin/bash
read -p "Enter your score (0-100:)" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] : then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] : then
echo "$GRADE is Pass"
else echo "$GRADE is Fail"
fi

for条件语句

在这里插入图片描述

shell脚本提示用户输入要设置的密码并赋值给PASSWD变量,从users.txt文件中读入用户名,并赋值给UNAME变量, 而查看用户的信息都重定向到/dev/null文件,不显示到屏幕。

#!/bin/bash
read -p "Enter The Users Passwd :" PASSWD
for UNAME in 'cat users.txt'
do
id $UNAME &> /dev/null
if [ $? -eq 0]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0]
then
echo "Create success"
else
echo "Create failure"
fi
fi
done

for条件语句:从列表文件中读取主机地址, 逐个测试是否在线

#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ]; then
echo "Host $IP is up"
else 
echo "Host $IP is down"
fi
done

while条件语句

在这里插入图片描述

while条件语句:随机生成一个0-999的整数, 判断用户输入的值的大小,用户猜中就停止,$RANDOM是一个随机变量

expr命令为Linux中的命令,一般用于整数值计算,但也可用于字符串操作。

#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间, 猜猜看是多少"
while true
do
read -p "请输入你猜测的价格数目" INT
let TIMES++
if [ $INT -eq $PRICE ]; then
echo "恭喜你答对了, 实际的价格是$PRICE"
echo "你总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ]; then
echo "太高了!"
else
echo "太低了!"
fi
done

case条件语句

case条件语句:提示用户输入一个字符, 判断该字符是字母、数字或特殊字符。

在这里插入图片描述

提示用户输入一个字符,并将其赋值给变量KEY, 判断变量KEY为何种字符后分别输出是字母,数字还是其他字符。

#!/bin/bash
read -p "请输入一个字符, 并按Enter 键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是字母"
;;
[0-9])
echo "您输入的是数字"
;;
*)
echo "您输入的是空格、 功能键或其他控制字符"
esac

计划任务服务

计划任务分为"一次性" 和 “长期性”

一次性计划任务: 今晚11点30分开启网站服务

长期性任务: 每周1、3、5的凌晨3点25分,将/home/wwwroot目录打包为backup.tar.gz

一次任务

一次任务是由atd服务/进程实现的, 计划的管理操作是at命令

在这里插入图片描述

at命令创建计划任务有交互式和非交互式两种方法,交互式最后(Ctrl +d)保存

长期任务

长期任务需要使用到cron服务

创建、编辑计划任务:crontab -e [-u 用户名]

查看计划任务:crontab -l [-u 用户名]

删除计划任务:crontab -r [-u 用户名]

在这里插入图片描述
在这里插入图片描述

crontab -e
crontab -l

用户身份与文件权限

文件的读®写(w)执行(x)权限的作用。

SUID、SGID、SBIT的文件特殊权限、文件隐藏权限 ACL访问控制列表

用户的身份与能力

UID(即User IDentification的缩写):每个用户都有对应的UID值。

超级用户的UID0:root 用户默认为0

系统用户UID1-999:系统中系统服务由不同用户运行,更加安全,默认被限制登录系统

普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的用户

UID不能冲突,管理员创建的普通用户的UID从1000开始,即使前面有闲置的号码。

账号名称与UID保存在/etc/passwd中

账号密码保存在 /etc/shadow

GID(即Group IDentification):可将多个用户加入某个组中,方便指派任务或工作

每个用户在创建时均会创建一个默认组(GID和UID相同,基本组),后加入的是拓展组

用户组名称与GID保存在/etc/group文件。

文件权限与归属

文件和目录的所属与权限–来分别规定所有者、所有组、其余人的读、写、执行。

读(read),写(write),执行(execute)(r, w, x)(4, 2, 1)

在这里插入图片描述

7代表4+2+1可读可写可执行

6代表4+2可读可写

在这里插入图片描述

rw-r-r-所有者有读写权限, 所有组有读权限,其余人有读权限

普通文件实际保存数据的地方,其并不具备删除自身的权限

​ r:可读取文件的实际内容

​ w:可编辑/新增/修改该文件的实际内容

​ x:可被执行

目录文件即保存有目录结构和文件权限

​ r:可读取目录结构和权限

​ w:可更改目录结构列表,新建/删除/重命名/转移子文件/目录

​ x:表示用户可以进入到该目录中

文件的特殊权限

SUID和SGID特殊权限机制

SUID:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)

对passwd命令加上SUID权限位,可以让普通用户临时获得程序所有者的身份,即以root用户的身份写入变更的密码到shadow文件中。

SGID:

功能一:让执行者临时拥有属组的权限(仅对拥有执行权限的二进制程序有效)

为了让root之外的或者system组之外的用户具有读取该文件的能力,然后我们可以给ps命令加上SGID位。

功能二:在该目录创建的文件自动继承此目录的用户组(只可以对目录设置)

可以将某个部门的工作目录给与SGID权限,这样所有人创建的文件都归于相同的工作组。

chmod命令用于修改文件或目录的权限

chown命令用于修改问及那的所属主或者所属组

chmod [参数] 权限 文件或者目录名
chown [参数] 所属主:所属组 文件或目录
#创建目录并给与GID权限
cd /tmp
mkdir testdir
ls -ald testdir/
chmod -Rf 777 testdir/
chmod -RF g+s testdir/
su -linuxprobe
cd /tmp/testdir/
echo "linuxprobe.com" > test
ls -al

SBIT(Sticky Bit):只可管理自己的数据而不能删除其他文件

SBIT位,又称为粘滞位

su -linusprobe
cd /tmp
ls -ald
#最后的t代表粘滞位
echo "for test" > test
chmod -Rf 777 test
ls -al test
su -blackshield
cd /tmp
rm test
#因为特殊粘滞位的原因无法支持他人删除

文件隐藏属性

文件权限只能追加内容不能减少内容可能是被设置了隐藏权限

chattr 命令用于设置文件的隐藏权限

chattr [参数] 文件

在这里插入图片描述
在这里插入图片描述

lsattr命令用于显示文件的隐藏权限

在这里插入图片描述

lsattr [参数] 文件
echo "for Test" > linuxprobe
rm linuxprobe
echo "for Test" > linuxprobe
chattr +a linuxprobe
rm linuxprobe
#尝试修改报错
ls -al linuxprobe无法看到修改的权限
lsattr linuxprobe
#可以看到是因为隐藏权限
#去除对文件的隐藏权限
chattr -a linuxprobe
lsattr linuxprobe
rm linuxprobe 
#可以删除

su和sudo服务

如何让普通用户执行超级用户具有的权限命令呢

su命令用于变更使用者的身份,格式为: su [-] 用户名

sudo命令用于给普通用户提供额外权力完成超级用户才能完成的任务 sudo [参数] 命令名称

sudo功能:

  • 限制用户执行指定的命令
  • 记录用户执行的每一条命令
  • 配置文件(/etc/sudoers)提供集中的管理用户、权限和主机参数
  • 验证密码后5分钟内无需让用户验证密码

在这里插入图片描述

只有超级用户才可以使用visudo命令编辑sudo程序的配置文件

文件访问控制列表

如果希望对某个指定的用户设置权限的话,需要进行文件的访问控制列表进行实现。

可以基于普通文件或目录设置ACL,通俗来说ACL就是设置指定的特定用户或用户组对某个文件的操作权限。

如果对某个目录设置了访问控制策略,子文件会进行继承。

setfacl命令用于增加或者修改ACL规则

setfacl [参数] 文件

在这里插入图片描述

getfacl命令用于显示文件的ACL规则

格式 getfacl 文件

对用户设置单一的访问
setfacl -Rm u:linuxprobe:rwx /root

存储结构与磁盘划分

常见的目录定义

在这里插入图片描述
在这里插入图片描述

物理设备

硬盘设备是由大量的"扇区"组成的,一个山区保存着主引导记录与分区表信息。单个扇区容量为512bytes,主引导记录需要占用446bytes, 分区表64bytes, 而每记录一个分区信息需要16bytes,这样的话只能记录4个分区信息。

在这里插入图片描述

可以用3个主分区加1个扩展分区, 扩展分区中能够创建无限个逻辑分区,这样就可以使用逻辑分区实现多分区的需求了。

系统内核的设备管理器(Udev)会自动将硬件名称规范起来,可以通过设备名称猜出设备的属性和分区信息。Udev会一直以守护线程的形式运行并侦听内核发出的uevent来管理/dev目录下的设备文件。

Udev根据内核发出的uevent动态的添加或者删除/dev目录下的设备文件

在这里插入图片描述
在这里插入图片描述

一台主机可以由多块硬盘,系统会用a-p代表16块不同的硬盘,分区编号也有规则。

主分区编号会从1-4进行选择也可以指定分配数字

逻辑分区从编号5开始按顺序

在这里插入图片描述

首先/dev目录下的都是硬件

sd开头的是存储设备

a代表第一个被识别到的设备

5指的是逻辑分区

这是第一块硬盘设备编号为5的逻辑分区

在这里插入图片描述

文件系统

Linux支持数十种文件管理系统,使得用户可以在上面进行正常的简历文件、写入、读取、修改、转存文件与控制文件。

Ext3是一款日志文件系统,可以在异常停机的中避免文件系统资料不一致的情况,自动的修复数据的不一致与错误,但也不能保证100%资料不流失,会降整个磁盘的写入动作预先记录下来,所以在异常停机可以追踪到被中断的部分。

Ext4是Ext3的后继版本,是RHEL6系统的默认文件管理系统,支持更大的文件系统到1EB,可以批量分配block块儿并作“Extents”极大的提高了读写效率。

XFS是RHEL7默认的文件系统,可以快速的恢复可能被破坏的文件,经过优化后日志功能对硬盘性能影响非常小,同时最大支持18EB的存储容量满足了几乎所有需求。

每个文件的权限和属性都会记录在inode table中。每个文件都会占用一个独立的inode表格,默认为128bytes

包括

该文件的访问权限(r, w, exec)
该文件的所属主和组(o, g)
该文件的大小(size)
该文件的创建或状态修改时间(ctime)
该文件的最后一次访问时间(atime)
该文件的修改时间(mtime)
文件的特殊权限(SUID,SGID,SBIT)
该文件的真实数据地址(point)

实际的数据保存在block块中

如果文件体积很小,那么依然会占用一个block块,可能会浪费3K

如果文件很大,就会分散的占用两个内存块。

挂载硬件设备

挂载操作是指当用户需要使用硬盘设备或分区数据时,需要先将它和一个已经存在的文件做关联,这个动作叫做挂载。

mount 用于挂载文件系统 mount 文件系统 挂载目录

在这里插入图片描述

mount /dev/cdrom /media/cdrom

使用mount命令执行挂载操作后,立即就可以使用文件系统,重启后会失效,如果想让重启生效就需要把信息写入/etc/fstab中,其中包含着文件系统与挂载信息等内容,只有root用户可以进行编辑。

格式
设备文件 挂载目录 格式类型 权限选项 自检 优先级
设备文件:一般为设备的路径+名称,需要在挂载前创建好
挂载目录:指定挂载到的目录,需要在挂载前创建好
格式类型:指定的文件系统。 /ext3/ext4/xfs/iso9660/swap
权限选项:默认为defaults(rw, suid, dev, exec, auto, nouser, async)可以指定acl或者quota
自检:若为1则开机后进行磁盘自检, 0为不自检。
优先级:若”自检“为1,则可以对多块硬盘设置优先权。
umount命令用于撤销已经挂载的设备
umount [挂载点/设备文件]

fdisk用于管理磁盘分区

格式 fdisk [磁盘名称]

在这里插入图片描述
在这里插入图片描述

df命令用于查看挂载点信息与磁盘的使用量

格式 df [选项] [文件]

在这里插入图片描述
在这里插入图片描述

du命令用于查看磁盘的使用量 格式 du [选项] [文件]

#查看根目录下各个文件夹所占空间: du -sh /
#查看当前目录下各文件所占空间: du -sh *

在这里插入图片描述

添加交换分区

swap交换分区类似于虚拟内存的功能,将部分硬盘空间虚拟成内存使用,但是真实的速度比物理内存慢很多,一般只有在物理内存消耗完时才会调用SWAP

磁盘冗余阵列

RAID(Redundant Array of Independent Disks )独立的硬盘组,防止硬盘物理损坏以及增加存储设备的吞吐量。

常见的有0,1,5,10

RAID0:至少需要两块硬盘,可以有效的提高硬盘的性能和吞吐量,但没有数据的冗余和错误修复能力。

在这里插入图片描述

将多块硬盘通过硬件或者软件的方式串联,将数据依次写入各个硬盘中,但是任意一块硬盘故障整个系统的数据都会损坏。

在这里插入图片描述

RAID1:至少需要两块硬盘,可以有效的提高数据资料的安全性和可修复性,成本提高。

数据在写入硬盘后会在另一个硬盘中生成镜像文件,可以最大限度保证数据资料的可靠性,具有很好的磁盘冗余能力。可以保证绝对的安全,成本明显增加,磁盘利用率为50%.

RAID5:需要至少三块硬盘,兼顾存储性能、数据安全和存储成本。

在这里插入图片描述

每个硬盘中有一个parity块保存其他硬盘数据的奇偶校验信息,通过奇偶校验信息保证数据安全,这样的话当一个硬盘损坏都可以用其他硬盘存放的校验信息尝试重建损坏的数据,性能高,兼顾了存储性能、数据安全和存储成本,可以看作是RAID与RAID1的折中方案。

RAID10:需要至少四块硬盘,兼具速度和安全性,成本也很高。

在这里插入图片描述

继承了RAID0的快速和RAID1的安全,RAID1在这里提供冗余备份的阵列,RAID1负责数据的读写阵列。结构的成本较高,一般用于存放要求速度与差错控制的数据。

mdadm命令用于管理系统软件RAID硬盘阵列

mdadm [模式] <RAID设备名称 > [选项] [成员设备名称]

动作

在这里插入图片描述
在这里插入图片描述

参数

在这里插入图片描述
在这里插入图片描述

模拟磁盘冗余阵列RAID10

1、添加4块硬盘

2、使用madadm命令创建RAID10 名称 /dev/md0

-C代表创建操作 -v显示创建过程, -a yes检查RAID名称 -n是用到的硬盘数, -l是定义RAID的级别而后面写上要加入阵列的硬盘名称

如果Linux是以最小化安装的话,可能没有这个命令,那么我们可以采用

yum install -y mdadm.x86_64 #进行安装
#创建md0
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde 
#格式化文件系统
mkfs.ext4 /dev/md0

在这里插入图片描述

#挂载
mkdir /RAID
mount /dev/md0 /RAID
df -h

在这里插入图片描述

查看冗余阵列的详细信息

mdadm -D /dev/md0

在这里插入图片描述

3、模拟硬盘损坏

#移除一块硬盘
mdadm /dev/md0 -f /dev/sdb
#查看阵列的现在的情况
mdadm -D /dev/md0

在这里插入图片描述

损坏后还可以继续使用

RAID10允许在一个故障盘而不影响使用, 可以正常的创建文件。

逻辑卷管理器

逻辑卷管理器是在磁盘分区和文件系统之间添加的逻辑层,提供一个抽象的卷组,管理者可以忽略磁盘的布局,从而实现对分区的动态调整,默认是启用的LVM(Logical Volume Manager)机制。

在这里插入图片描述

物理卷(PV, Physical Volume) :整个硬盘设备或使用fdisk命令创建的硬盘分区。

卷组(VG Volume Group) :由一个或多个物理卷(PV)组合的整体

逻辑卷(LV, Logical Volume) :从卷组(VG)切割出的空间用于创建文件系统, 大小由PE的个数决定。

基本单元(PE Physical Extent) : 默认为4MB的基本块。

在这里插入图片描述

#创建一个大小为300M的分区
fdisk /dev/sdb
n创建新的分区
#p主分区  e拓展分区
#主分区分区号1-4
+300M可以创建大小为300M的分区
#启用LVM并创建vo逻辑卷并格式化为ext4
pvcreate /dev/sdb1
#将逻辑卷加入卷组
vgcreate rhcsa /dev/sdb1
#查看卷组信息
vgdisplay
#生成大小为37个PE的逻辑卷(37 * 4mib)
lvcreate -n vo -l 37 rhcsa
#格式化
mkfs.ext4 /dev/rhcsa/vo
#挂载
mkdir /rhcsa
mount /dev/rhcsa/vo /rhcsa


#如果要对逻辑卷调整的话需要先卸载
umount /rhcsa
#拓展
lvextend -L 290M /dev/rhcsa/vo
#检查完整性,重置硬盘容量
e2fsck -f /dev/rhcsa/vo
resize2fs /dev/rhcsa/vo
#重新挂载

磁盘配额

quota服务可以帮助我们限制用户硬盘的可使用空间和最大的创建文件数量。

软限制:当达到软限制时会提示用户,但允许用户在规定的期限内继续使用

硬限制:当达到硬限制时会提示用户并强制终止用户的操作。

#查看内核是否支持quota
dmesg | grep quota
#查看是否安装
rpm -q quota

xfs_quota命令用于管理XFS文件系统的quota硬盘配额

quota [参数] 配额 文件系统

在这里插入图片描述

edquota命令用于超级用户编辑其他用户的quota限额

edquota [参数] [用户]

在这里插入图片描述

虚拟文件系统

Linux内核的软件曾为用户程序提供了一个文件系统接口(VFS, Virtual File System),这样就转而统一对这个虚拟文件系统进行操作。实际文件系统在VFS下隐藏了自己的特性和细节,使得我们在使用时觉得文件系统都是一样的。

在这里插入图片描述

软硬链接

ln命令可以让用户创建两种不同类型的文件快捷方式

**硬链接(hard link)**可以被理解为一个指向原始文件的inode指针。每添加一个硬链接,该文件的inode连接数就会+1,直到该文件的inode递归为0才是真正的彻底删除,硬链接实际上是指向源文件的inode指针,即使原本文件被删除仍然可以通过链接文件访问,不能跨文件系统也不能链接目录文件。

软连接(符号链接 symbolic link) 仅仅包含它所要链接文件的路径名, 因此可以做目录链接也可以跨文件系统。

ln [选项] 目标

硬 ln 文件名链接名

软 ln - s 文件名 链接名

在这里插入图片描述

小为300M的分区
fdisk /dev/sdb
n创建新的分区
#p主分区 e拓展分区
#主分区分区号1-4
+300M可以创建大小为300M的分区
#启用LVM并创建vo逻辑卷并格式化为ext4
pvcreate /dev/sdb1
#将逻辑卷加入卷组
vgcreate rhcsa /dev/sdb1
#查看卷组信息
vgdisplay
#生成大小为37个PE的逻辑卷(37 * 4mib)
lvcreate -n vo -l 37 rhcsa
#格式化
mkfs.ext4 /dev/rhcsa/vo
#挂载
mkdir /rhcsa
mount /dev/rhcsa/vo /rhcsa

#如果要对逻辑卷调整的话需要先卸载
umount /rhcsa
#拓展
lvextend -L 290M /dev/rhcsa/vo
#检查完整性,重置硬盘容量
e2fsck -f /dev/rhcsa/vo
resize2fs /dev/rhcsa/vo
#重新挂载


### 磁盘配额

quota服务可以帮助我们限制用户硬盘的可使用空间和最大的创建文件数量。

软限制:当达到软限制时会提示用户,但允许用户在规定的期限内继续使用

硬限制:当达到硬限制时会提示用户并强制终止用户的操作。

```shell
#查看内核是否支持quota
dmesg | grep quota
#查看是否安装
rpm -q quota

xfs_quota命令用于管理XFS文件系统的quota硬盘配额

quota [参数] 配额 文件系统

[外链图片转存中…(img-EfbOrF6Q-1680937767242)]

edquota命令用于超级用户编辑其他用户的quota限额

edquota [参数] [用户]

[外链图片转存中…(img-lKjBnO3p-1680937767242)]

虚拟文件系统

Linux内核的软件曾为用户程序提供了一个文件系统接口(VFS, Virtual File System),这样就转而统一对这个虚拟文件系统进行操作。实际文件系统在VFS下隐藏了自己的特性和细节,使得我们在使用时觉得文件系统都是一样的。

[外链图片转存中…(img-FcKII6SB-1680937767242)]

软硬链接

ln命令可以让用户创建两种不同类型的文件快捷方式

**硬链接(hard link)**可以被理解为一个指向原始文件的inode指针。每添加一个硬链接,该文件的inode连接数就会+1,直到该文件的inode递归为0才是真正的彻底删除,硬链接实际上是指向源文件的inode指针,即使原本文件被删除仍然可以通过链接文件访问,不能跨文件系统也不能链接目录文件。

软连接(符号链接 symbolic link) 仅仅包含它所要链接文件的路径名, 因此可以做目录链接也可以跨文件系统。

ln [选项] 目标

硬 ln 文件名链接名

软 ln - s 文件名 链接名

[外链图片转存中…(img-CNYDHqC1-1680937767243)]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值