5-6天
- 一 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项
- 二 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
- 三 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
- 四 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
- 五 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
- 六 磁盘存储术语总结: head, track, sector, sylinder.
- 七 总结MBR,GPT结构。
- 八 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
一 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项
文本处理工具
cut - 用于按列提取文本文件中的字段。
tr - 用于替换或删除字符串中的字符。
tr(translate)命令是一个用于转换或删除字符的 Linux 命令行工具。它不接受文件名作为参数,而是从标准输入读取数据,并在标准输出上写入结果。tr 主要用于字符替换、字符类的转换和删除字符。它没有很多选项,但是非常灵活和强大。
tr [OPTION]... SET1 [SET2]
以下是一些常用的 tr 选项:
- -d 或 --delete:删除所有输入中出现的指定字符。
- -s 或 --squeeze-repeats:将每个输入序列中连续重复的字符替换为单个字符。
- -c 或 -C 或 --complement:使用集合的补集进行转换或删除操作。
- -t:当使用替换选项时,确保两个字符集的长度一致,如果目标集合的字符少于源集合,那么最后一个字符将被重复使用直到长度匹配。
- -dc 删除补集中的字符
使用示例
- 转换小写字母为大写:
[root@centos8 data]# echo "hello world" | tr 'a-z' 'A-Z'
HELLO WORLD
- 删除指定字符:
[root@centos8 data]# echo "hello world" | tr -d 'l'
heo word
- 压缩连续的相同字符:
[root@centos8 data]# echo "hello world" | tr -s ' '
hello world
- 删除除指定字符之外的所有字符:
[root@centos8 data]# echo "hello 123 world 456" | tr -cd '0-9\n'
123456
sort - 用于排序文本文件中的行。
sort 命令在 Unix 和类 Unix 系统中用于对文本文件中的行进行排序。它可以根据各种标准进行排序,并且支持多种排序选项。以下是
sort 命令的基本使用格式:
sort [OPTION]... [FILE]...
这里,[OPTION] 是可选的排序选项,[FILE] 是要排序的文件。如果没有指定文件,或者文件名为 -,sort 会从标准输入读取数据。
下面是一些常用的 sort 命令选项:
- -n 或 --numeric-sort: 根据字符串的数值部分进行排序。
- -r 或 --reverse: 反向排序(从高到低)。
- -f 或 --ignore-case: 忽略大小写差异。
- -u 或 --unique: 删除重复的行,只保留唯一的行。
- -o [FILE]: 将排序结果输出到指定的文件。
- -k [#]: 按照指定的分隔符后的第#列进行排序,默认是空白字符为分隔符。
- -t [CHAR]: 指定字段分隔符,默认是空白字符。
使用示例:
先准备一个文件,如下: 我们用这个文件进行试验
[root@centos8 data]# cat numbers.txt
3
1
4
2
- 基本排序:将数字按照升序排序。
[root@centos8 data]# sort numbers.txt
1
2
3
4
- 数值排序:使用 -n 选项按照数值大小排序。
[root@centos8 data]# sort -n numbers.txt
1
2
3
4
- 逆序排序:使用 -r 选项进行逆序排序。
[root@centos8 data]# sort -r numbers.txt
4
3
2
1
uniq - 用于报告或省略重复的行。
uniq
命令在 Linux 和 Unix 系统中用于报告或省略重复行。它通常与 sort
命令一起使用,因为 uniq
仅对连续的重复行有效,所以需要排序过的输入。以下是 uniq
命令的基本使用格式和一些常用选项的介绍。
基本格式:
uniq [选项] [输入文件] [输出文件]
常用选项:
-c
:显示每行在文件中出现的次数。-d
:仅显示重复的行。-u
:仅显示不重复的行。-i
:在比较行时忽略大小写。
使用示例:
假设我们有一个名为 list.txt
的文件,内容如下:
apple
banana
banana
cherry
cherry
cherry
-
显示每行的出现次数:
使用
-c
选项来统计每行出现的次数。uniq -c list.txt
输出:
1 apple 2 banana 3 cherry
-
仅显示重复的行:
使用
-d
选项来显示重复的行。uniq -d list.txt
输出:
banana cherry
-
仅显示不重复的行:
使用
-u
选项来显示唯一的行。uniq -u list.txt
输出:
apple
-
忽略大小写的比较:
如果
list.txt
文件内容有大小写变化,如下所示:Apple apple banana Banana cherry
使用
-i
选项来忽略大小写进行比较。uniq -i list.txt
输出:
Apple banana Banana cherry
注意: 为了让 uniq
命令能正确地工作,输入文件通常需要先进行排序。例如:
sort list.txt | uniq
这个命令组合首先对 list.txt
文件内容进行排序,然后通过管道传递给 uniq
命令,以便删除排序后的连续重复行。
wc - 用于计算行、单词和字符的数量。
wc (Word Count) 命令使用指南
wc
命令是一个用于计算字数的非常有用的文本工具。它可以统计文本中的行数、单词数和字节数。以下是 wc
命令的基本使用格式和一些常用选项的介绍。
基本格式:
wc [选项] [文件...]
常用选项:
-l
:只计算行数。-w
:只计算单词数。-c
:只计算字节数。-m
:只计算字符数。
使用示例:
假设我们有一个名为 example.txt
的文件,内容如下:
Hello World
Welcome to the wc command tutorial
-
计算行数:
使用
-l
选项来计算文件中的行数。wc -l example.txt
输出:
2 example.txt
-
计算单词数:
使用
-w
选项来计算文件中的单词数。wc -w example.txt
输出:
8 example.txt
-
计算字节数:
使用
-c
选项来计算文件中的字节数。wc -c example.txt
输出:
53 example.txt
-
计算字符数:
使用
-m
选项来计算文件中的字符数。wc -m example.txt
输出:
47 example.txt
注意: wc
命令可以同时使用多个选项。例如,如果你想同时计算行数和单词数,你可以这样做:
wc -lw example.txt
输出将显示行数和单词数:
2 8 example.txt
以上就是 wc
命令的基本使用方法。你可以根据需要组合不同的选项来获取你想要的统计信息。
nl - 用于给文件中的行编号。相当于 cat -b
nl 命令详解
在 Linux 和 Unix 系统中,nl
命令是一个用于给文本文件中的行编号的工具,这在查看、分析或打印文件时非常有用。nl
可以对文本文件的行进行编号,并且提供了多种选项来自定义编号的方式。以下是 nl
命令的基本使用格式、一些常用选项的介绍,以及使用示例。
基本格式:
nl [选项]... [文件]...
常用选项:
-b
: 指定编号的方式,-b a
为所有行编号,-b t
仅为非空行编号。-n
: 设置行号的格式,如ln
(左对齐),rn
(右对齐),或rz
(右对齐,前导零)。-w
: 设置行号字段的宽度。-s
: 设置行号后的分隔字符。-v
: 设置起始行号。
使用示例:
假设我们有一个名为 example.txt
的文件,内容如下:
This is a line.
This is another line.
Yet another line.
-
给所有行编号:
如果想给文件中的所有行(包括空行)编号,可以使用
-b a
选项。nl -b a example.txt
输出:
1 This is a line. 2 3 This is another line. 4 5 Yet another line.
-
只给非空行编号:
如果只想给非空行编号,可以使用
-b t
选项。nl -b t example.txt
输出:
1 This is a line. 2 This is another line. 3 Yet another line.
-
自定义行号格式和宽度:
使用
-n
和-w
选项来自定义行号的对齐方式和宽度。nl -b a -n rz -w 4 example.txt
输出(右对齐,前导零,宽度为4):
0001 This is a line. 0002 0003 This is another line. 0004 0005 Yet another line.
-
设置行号后的分隔字符:
使用
-s
选项设置行号后跟随的分隔字符。nl -s ". " example.txt
输出(这里使用
-b t
选项):1. This is a line. 2. This is another line. 3. Yet another line.
注意: nl
命令具有灵活性,允许你根据需要定制行号的显示方式。你可以组合不同的选项来达到你想要的格式。
tac - 用于反向打印文件内容(从最后一行到第一行)。
tac 命令详解
在 Linux 和 Unix 系统中,tac
命令是一个实用的文本处理工具,用于将文本文件中的行以相反的顺序显示出来。这个命令在你需要查看文件的最后几行或者以倒序的方式浏览文件内容时特别有用。tac
是 cat
命令的反向版本,后者用于从上到下显示文件内容。在本文中,我们将探讨 tac
命令的使用格式、一些常用选项,以及具体的使用示例。
基本格式:
tac [选项]... [文件]...
常用选项:
-b
: 在每一行的前面而不是后面附加分隔符。-r
: 将分隔符视为正则表达式。-s
: 使用一个字符串作为分隔符,默认情况下分隔符是换行符。
使用示例:
假设我们有一个名为 log.txt
的文件,内容如下:
First entry
Second entry
Third entry
-
基本使用:
使用
tac
命令可以将文件内容倒序显示。tac log.txt
输出:
Third entry Second entry First entry
注意: tac
命令通常不需要复杂的选项组合,因为它的主要功能就是简单地反转文件的行。在大多数情况下,使用 tac 文件名
就能达到目的。
tee - 用于从标准输入读取数据,并同时写入标准输出和一个或多个文件。
tee 命令详解
tee
命令在 Linux 和 Unix 系统中是一个非常实用的文本处理工具,它能够从标准输入读取数据,并同时将其内容输出到标准输出(屏幕)和一个或多个文件中。这使得 tee
命令在管道操作中非常有用,因为它可以让你同时查看管道中的数据,并将其保存到文件中,以便进行后续分析或记录。以下是 tee
命令的使用格式、常用选项以及具体使用示例。
基本格式:
tee [选项]... [文件]...
常用选项:
-a
,--append
: 不覆盖现有文件,而是将输出追加到文件中。-i
,--ignore-interrupts
: 忽略中断信号。
使用示例:
-
基本使用:
将命令的输出同时显示在屏幕上并保存到文件中。
[root@centos8 data]# echo "Hello, World!" | tee output.txt
Hello, World!
这会在屏幕上显示 “Hello, World!”,同时创建(或覆盖)一个名为 output.txt
的文件,并写入相同的内容。
-
追加内容到文件:
如果你不想覆盖文件中的现有内容,而是想追加内容,可以使用
-a
选项。
[root@centos8 data]# echo "This will be appended" | tee -a output.txt
This will be appended
这将 “This will be appended” 追加到 output.txt
文件的末尾,而不是替换文件中的原有内容。
-
写入多个文件:
你可以同时将输出写入多个文件。
[root@centos8 data]# echo "This goes to two files" | tee file1.txt file2.txt
This goes to two files
这会将 “This goes to two files” 写入 file1.txt
和 file2.txt
两个文件,并在屏幕上显示相同的内容。
注意: 使用 tee
命令时,如果没有指定 -a
选项,且目标文件已存在,那么文件原有的内容将被新内容覆盖。
二 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
grep 是一种强大的文本搜索工具,它使用正则表达式来匹配文本。
在 grep 中有两种类型的正则表达式:
- 基本正则表达式(Basic Regular Expressions, BRE)
- 扩展正则表达式(Extended Regular Expressions, ERE)。
基本正则表达式 (BRE)
在基本正则表达式中,一些特殊字符需要转义才能表达其特殊含义:
^
:匹配行的开始
$
:匹配行的结束
.
:匹配任意单个字符
*
:匹配前一个字符0次或多次
[]
:匹配方括号内的任意一个字符
\
:转义字符,使特殊字符变为普通字符
\?
:前面的字符出现0次或一次,即:可有可无
\{m,n\}
:匹配前一个字符至少 m 次,至多 n 次
\(n\)
:前面的字符出现n词
示例:
grep '^hello' file.txt # 匹配所有以 'hello' 开头的行
grep 'end$' file.txt # 匹配所有以 'end' 结尾的行
grep 'a.b' file.txt # 匹配包含 'a' 后跟任意字符再跟 'b' 的行
grep 'a*' file.txt # 匹配包含0个或多个 'a' 的行
grep 'a\{2,3\}' file.txt # 匹配包含至少2个至多3个 'a' 的行
grep '\(ab\)\1' file.txt # 匹配连续出现的 'abab'
扩展正则表达式 (ERE)
扩展正则表达式提供了更多的特性,不需要转义的特殊字符:
+
:匹配前一个字符1次或多次
?
:匹配前一个字符0次或1次
|
:选择,匹配 | 前后的任意表达式
()
:标记一个子表达式的开始和结束
{m,n}
:匹配前一个字符至少 m 次,至多 n 次
使用 grep 时,要使用扩展正则表达式需要加上 -E 参数。
示例:
grep -E '^hello' file.txt # 匹配所有以 'hello' 开头的行
grep -E 'end$' file.txt # 匹配所有以 'end' 结尾的行
grep -E 'a.b' file.txt # 匹配包含 'a' 后跟任意字符再跟 'b' 的行
grep -E 'a+' file.txt # 匹配包含至少一个 'a' 的行
grep -E 'a{2,3}' file.txt # 匹配包含至少2个至多3个 'a' 的行
grep -E '(ab)+' file.txt # 匹配一个或多个连续的 'ab'
grep -E 'hello|world' file.txt # 匹配包含 'hello' 或 'world' 的行
三 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
Linux变量命名规则
在Linux中,变量的命名需要遵循以下几个基本原则:
- 变量名只能由字母(a-z,A-Z)、数字(0-9)和下划线(_)组成。
- 变量名的首字符不能是数字。
- 变量名在同一作用域内必须唯一。
- 变量名区分大小写,即
VAR
和var
是两个不同的变量。 - 不建议使用bash中的关键字(如if, while等)作为变量名。
环境变量
环境变量是在操作系统中用来指定操作系统运行环境的一些参数。它们通常在系统启动时设置,并且可以被所有的进程访问。
变量声明和赋值
- 声明并赋值:
export 变量名=值
或declare -x 变量名=值
- 查看环境变量:
echo $变量名
或env
查看所有环境变量
- 变量引用: $name或${name}
示例
[root@centos8 data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 查看默认环境变量
[root@centos8 data]# ^C
[root@centos8 data]# export PATH=$PATH:/opt/myapp/bin # 在默认环境变量上再加入环境变量
[root@centos8 data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/myapp/bin
位置变量
位置变量用来存储传递给脚本的参数,它们的值由脚本的命令行参数决定。
使用方法
$0
:脚本名称$1
~$9
:第1到第9个参数$#
:参数个数$*
:所有参数列表(整个列表作为单个字符串)$@
:所有参数列表(每个参数作为独立字符串)注意
:$*和¥@只有在被双引号包起来的时候才会有差异
示例
[root@centos8 ~]# cat positional_shvariable.sh
#!/bin/bash
# positional_parameters.sh
echo "Script name: $0" # 输出脚本名称
echo "Number of arguments: $#" # 输出参数个数
echo "All arguments using '@': $@" # 所有参数列表(每个参数作为独立字符串)
echo "All arguments using '*': $*" # 所有参数列表(整个列表作为单个字符串)
count=1
for arg in "$@"; do # $@可以被循环取出里面的独立字符串
echo "Argument $count: $arg" # 输出
count=$((count + 1))
done
运行脚本查看结果
[root@centos8 ~]# bash positional_shvariable.sh a b c d
Script name: positional_shvariable.sh
Number of arguments: 4
All arguments using '@': a b c d
All arguments using '*': a b c d
Argument 1: a
Argument 2: b
Argument 3: c
Argument 4: d
只读变量
只读变量是一旦被赋值后就不能改变的变量。
使用方法
- 设置只读变量:
readonly 变量名[=值]
- 声明并赋值:
readonly 变量名
或declare -r 变量名=值
- 查看只读变量:
declare [-p]
或declare -r
示例
readonly PI=3.14
PI=4 # 尝试修改只读变量,将会报错
unset PI #尝试取消只读变量,也会报错
exit #退出当前sehl后只读变量就不存在了
局部变量
局部变量仅在定义它们的函数中有效,函数外部无法访问。
使用方法
- 在函数中定义局部变量:
local 变量名=值
示例
[root@centos8 data]# cat script.sh
1 #!/bin/bash
12 function myFunc() {
13 local localVar="I am local" # 定义局部变量
14 echo "局部输出:$localVar"
15 }
16 myFunc
17 echo "全局访问输出:"$localVar # 尝试访问局部变量,无法输出
[root@centos8 data]# bash script.sh
局部输出:I am local
全局访问输出:
状态变量
进程执行后,将使用$?保存状态码相关数字,不同的数字反应成功或失败。
取值范围
退出码的取值范围是 0 到 255。约定俗成的是:
- 0 表示成功。
- 1 到 255 表示不同类型的错误或异常。
示例
[root@centos8 data]# ls /not/exist/dir
ls: cannot access '/not/exist/dir': No such file or directory
[root@centos8 data]# echo $? # 由于目录不存在,输出的状态码不为0
2
用户也可以在脚本中使用以下命令自定义退出状态码
exit [#]
注意:
- 脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
- 如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
四 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
[root@centos8 data]# cat chook_rabbit.sh
#!/bin/bash
#
#***********************************************
#Author: liwenfei
#QQ 1241837764
#Date: 2023-05-16
#FileName: chook_rabbit.sh
#URL:
#Copyright (C): 2023 All rights reserved
#***********************************************
read -p "请输入头的数量:" HEAD
read -p "请输入脚的数量:" FOOT
#假设全是鸡,脚也全是鸡的FOOT%HEAD 取余出来的脚就全是兔子的,但只是兔子脚的一半,所以要*2 才能把兔子脚补全
RABBIT=$[FOOT%HEAD*2/4]
CHOOK=$[HEAD-RABBIT]
echo "兔子: $RABBIT"
echo "鸡: $CHOOK"
运行脚本
[root@centos8 data]# bash chook_rabbit.sh
请输入头的数量:30
请输入脚的数量:80
兔子: 10
鸡: 20
五 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
[root@centos8 data]# vim create_user.sh
#!/bin/bash
#
#***********************************************
#Author: liwenfei
#QQ 1241837764
#Date: 2023-7-8
#FileName: create_user.sh
#URL:
#Copyright (C): 2023 All rights reserved
#***********************************************
# 导入 /etc/init.d/functions 文件
. /etc/init.d/functions
# 提示用户输入要创建的用户数量
read -p "请输入你想创建多少个用户?:" user_count
# 提示用户输入这些用户的统一密码
read -s -p "输入这些用户的统一密码(至少8位):" user_password
while [ ${#user_password} -lt 8 ]; do
echo "密码长度至少要大于8位,请重新输入:"
read -s -p "输入这些用户的统一密码(至少8位):" user_password
done
# 使用 for 循环批量创建用户
for ((i=1; i<=$user_count; i++))
do
# 生成用户名,前三位有规律,后三位随机提取字母
username="$(printf %03d $i)$(cat /dev/urandom | tr -dc 'a-zA-Z' | head -c 3)"
# 检查用户是否已经存在
if id "$username" &>/dev/null; then
echo "用户 $username 已经存在,跳过创建。"
else
# 创建用户
useradd -m $username
# 设置用户密码
echo -e "$user_password\n$user_password" | passwd $username 2>/dev/null
# 使用 echo_success 函数输出绿色的用户名
echo_success "创建用户:$username"
fi
done
脚本执行效果
[root@centos8 data]# bash create_user.sh
请输入你想创建多少个用户?:100
输入这些用户的统一密码(至少8位):Changing password for user 001Rql.
passwd: all authentication tokens updated successfully.
Changing password for user 002zDJ. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 003KKL. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 004QPV. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 005gPj. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 006lbW. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 007ibC. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 008Qxl. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 009pAz. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 010Ymm. [ OK ]
passwd: all authentication tokens updated successfully.
Changing password for user 011oTf. [ OK ]
六 磁盘存储术语总结: head, track, sector, sylinder.
机械硬盘(Hard Disk Drive,HDD)
磁盘存储设备,尤其是传统的机械硬盘,由多个物理组件组成,这些组件用于存储和检索数据。以下是一些与磁盘存储相关的关键术语:
Head (磁头)
磁头是磁盘驱动器中的一个组件,负责读取和写入磁盘表面的数据。在机械硬盘中,磁头悬浮在磁盘表面上方的微小距离处,并在盘片旋转时移动来访问数据。
一块硬盘的磁头数=盘面数
(硬盘里的一块磁盘有两个面)
Track (磁道)
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
磁道数=柱面数
Sector (扇区)
扇区是磁道上的一小段,是硬盘存储的基本单元。传统上,一个扇区存储 512 字节(bytes)的数据,但现代硬盘可能使用更大的扇区尺寸,例如 4096 字节(4K 扇区)。
Cylinder (柱面)
柱面是由多个磁盘堆叠在一起时,沿垂直轴线相对应的磁道集合。例如,如果一个硬盘驱动器有 4 个盘片,那么每个柱面将由这 4 个盘片上的同一编号磁道组成。当磁头移动到一个新的磁道位置时,它实际上是移动到了一个新的柱面。
七 总结MBR,GPT结构。
MBR (Master Boot Record 主引导记录)
-
存储结构:MBR位于硬盘的最开始部分,通常是第一个扇区(512字节)。
-
分区限制:最多支持4个主分区,或者3个主分区加上1个扩展分区(扩展分区可以被分为多个逻辑分区)。
-
兼容性:与老旧系统兼容性好,几乎所有的操作系统都支持MBR。 磁盘大小限制:最大支持2TB的硬盘容量。
-
启动机制:MBR中包含了启动代码区域,用于引导操作系统的加载。
-
数据结构:使用32位的地址,所以有2^32个可用块,乘以每块512字节即为2TB的限制。
GPT(GUID Partition Table 全局唯一标识分区表)
-
存储结构:GPT是随UEFI(统一可扩展固件接口)一同出现的,是MBR的替代方案。它位于硬盘的前面几个扇区,但具体的分区表信息存储于保护MBR(PMBR)之后的区域。
分区限制:理论上支持无限数量的分区,但实际上操作系统可能会有限制,如Windows下通常限制为128个分区。 -
兼容性:与现代操作系统兼容性好,特别是那些支持UEFI引导的系统。
-
磁盘大小限制:理论上支持的硬盘容量高达18EB(Exabytes),远远超过当前的硬盘生产水平。
-
启动机制:GPT不包含启动代码,UEFI固件负责识别分区并从EFI系统分区(ESP)中加载操作系统。
数据结构:使用128位的全局唯一标识符(GUID),可以支持非常大的磁盘和非常多的分区。
转换和兼容性
- 从MBR到GPT:可以使用各种工具将MBR磁盘转换为GPT磁盘,通常在操作系统内部就可以完成转换。
- UEFI和BIOS:GPT通常与UEFI一起使用,而MBR与传统的BIOS兼容。一些系统允许在UEFI模式下使用MBR,或者在兼容模式(CSM)下使用GPT。
总的来说,GPT是一种更现代、更灵活的分区表标准,它解决了MBR的容量限制和分区数量限制问题,是大容量硬盘和现代操作系统的首选。MBR仍然因为其广泛的兼容性而被使用,尤其是在老旧系统中。随着技术的发展,GPT正逐渐取代MBR成为新的标准。
八 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk
fdisk
是一个用于磁盘分区的命令行工具,它在 Linux 系统中非常常用。使用 fdisk
,你可以创建、删除、调整分区的大小,以及管理分区表等。
下面是一个 CSDN 博客文章的大纲,介绍了 fdisk
的基本使用方法和一些实际的例子。
标题:Linux 磁盘管理利器:fdisk 命令详解
简介:
本文将介绍 Linux 中的 fdisk
命令,它是一个用于磁盘分区的强大工具。我们将通过实例来展示如何使用 fdisk
来创建和管理磁盘分区。
基本使用:
-
查看磁盘分区信息:
[root@centos8 ~]# fdisk -l
这个命令会列出系统中所有磁盘的分区信息。
-
启动 fdisk 交互模式:
[root@centos8 ~]# fdisk /dev/sdb
将
/dev/sdb
替换为你想要操作的磁盘。这个命令将进入一个交互式模式,你可以在这个模式下进行分区操作。
创建新分区:
-
进入 fdisk 交互模式:
[root@centos8 ~]# fdisk /dev/sdb
-
创建新分区:
在
fdisk
提示符下,输入n
创建新分区,然后依次选择分区类型(主分区或扩展分区)、分区号和分区大小。Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-20971519, default 2048): <回车使用默认值> Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +1G
-
保存分区表并退出:
输入
w
保存分区表更改并退出fdisk
。
删除分区:
-
进入 fdisk 交互模式:
[root@centos8 ~]# fdisk /dev/sdb
-
删除分区:
在
fdisk
提示符下,输入d
删除分区,然后选择要删除的分区号。Command (m for help): d Partition number (1-4): 1
-
保存分区表并退出:
输入
w
保存分区表更改并退出fdisk
。
注意: 分区操作可能会导致数据丢失,请在执行前确保数据已备份。
在执行分区操作之前,一定要备份好重要数据,以防止数据丢失。此外,一些新的磁盘使用 GPT 分区表,对于这类磁盘,建议使用 gdisk
命令来代替 fdisk
。
parted
mkfs
mkfs
是用于在 Linux 中创建文件系统的命令。mkfs
命令通常后跟一个文件系统类型的参数,然后是要格式化的设备的名称。以下是一些示例:
- 为
/dev/sdb1
分区创建一个 ext4 文件系统:[root@centos8 ~]# mkfs.ext4 /dev/sdb1
- 为
/dev/sdb4
分区创建一个 XFS 文件系统:[root@centos8 ~]# mkfs.xfs /dev/sdb4
- 检查
/dev/sdb1
分区是否有错误,并在创建 ext4 文件系统之前修复它们:[root@centos8 ~]# e2fsck -f /dev/sdb1 [root@centos8 ~]# mkfs.ext4 /dev/sdb1
在执行 mkfs
命令时,请确保您指定的设备是正确的,并且您愿意覆盖其上的任何现有数据,因为 mkfs
会格式化指定的分区或设备,从而删除所有现有数据。在执行这些操作之前,始终确保您已经备份了所有重要数据。
tune2fs
xfs_info
fsck
mount
在 Linux 中,mount
命令用于挂载文件系统。/etc/fstab
(文件系统表)是一个配置文件,它包含了关于不同分区和存储设备的信息,以及如何初始化和挂载这些设备。当系统启动时,mount -a
命令通常会被调用来挂载 /etc/fstab
中列出的所有文件系统。
-
挂载所有在
/etc/fstab
中定义的文件系统:[root@centos8 ~]# mount -a
-
挂载
/data
分区:
假设/data
分区已经在/etc/fstab
中定义,您可以直接使用挂载点来挂载它:[root@centos8 ~]# mount /data
-
手动挂载一个未在
/etc/fstab
中定义的文件系统:
如果您有一个新的分区dev/sdb1
并想要将其挂载到/mnt/newdata
:[root@centos8 ~]# mkdir /mnt/newdata [root@centos8 ~]# mount /dev/sdb1 /mnt/newdata
-
重新挂载
/boot
分区以使编辑生效:
如果您编辑了/etc/fstab
中与/boot
分区相关的行,您需要重新挂载它:[root@centos8 ~]# mount -o remount /boot
如果您发现某个分区被挂载为只读,并且您想要重新挂载它为可读可写(read-write, rw),您可以使用 mount
命令的 -o remount,rw
选项。以下是一般步骤:
-
确定分区的挂载点。例如,如果
/data
分区被挂载为只读,您将针对/data
进行操作。 -
使用
mount
命令重新挂载该分区为可读可写。例如:
[root@centos8 ~]# mount -o remount,rw /data
这条命令告诉系统重新挂载 /data
分区,并且使用读写模式。请注意,这样做之前,您需要确保没有任何进程正在分区上进行写操作,否则可能会导致数据损坏。
如果您想要查看当前挂载的文件系统及其挂载选项,可以使用以下命令:
[root@centos8 ~]# mount | grep /data
这会显示 /data
分区的挂载信息,包括它是以只读模式还是读写模式挂载的。