第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器
第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本
第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell
第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶
第七章:管理文件系统
ext文件系统
采用称作索引节点的系统来存放虚拟目录中所存储文件的信息
索引节点系统在每个物理设备上创建一个单独的表(索引节点表)来存储这些文件信息
存储在虚拟目录中的每一个文件在索引节点表中都有一个条目。条目名称的扩展部分来自其跟踪每个文件的额外数据,包括
文件名
文件大小
文件的属主
文件的属组
文件的访问权限
指向存有文件数据的每个硬盘块的指针
Linux通过唯一的数值(索引节点号)来引用索引节点表中的每一个索引节点,这个值是创建文件时由文件系统分配的
文件系统通过索引节点号而不是文件全名及路径来标识文件
ext2文件系统
索引节点表为文件增添了创建时间、修改时间、和最后访问时间
将最大文件大小增到2TB(在ext2后期版本中增大到32TB)
改变了文件存储方式,减轻碎片化
文件系统每次存储或更新文件时,它都要用新信息更新索引节点表。如果过程中发生意外,即使文件数据正常的更新到文件系统上但是节点表记录没有完成更新,ext2文件系统甚至不知道那个文件的存在
日志文件系统
会先将文件的修改写入到临时文件(称作journal,日志)中,然后在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。如果出现意外,系统将在下次读取日志文件并处理上次留下的未写入的数据
三种不同的广泛使用的日志方法
方法 | 描述 |
数据模式 | 索引节点和文件都会被写入日志,丢失数据风险低,但性能差 |
排序模式 | 只有索引节点数据会被写入日志,但只有数据成功写入后才删除;性能和安全之间的良好折中 |
回写模式 | 只有索引节点数据会被写入日志,但不管文件数据何时写入;丢失数据风险高,但仍比不用日志好 |
数据模式是目前为止最安全的保护数据方法,但也是最慢的
ext3文件系统
和ext2文件系统相同的索引节点表结构,但给每个存储设备增加了一个日志文件,来将准备写入存储设备的数据先写进日志文件
默认情况下,ext3文件系统用排序模式的日志功能(可以在创建文件系统时修改)
无法恢复误删的文件,没有任何内建的数据压缩功能,不支持加密文件
ext4文件系统
支持数据压缩和加密。支持区段(extent)
区段在存储上按块分配空间,但在索引节点表中只保存起始块的位置。(由于无需列出所有用来存储文件中数据的数据块,它可以在索引节点表中节省一些空间)
整合了块预分配(block preallocation)
可以给一个已知要变大的文件预留空间,为此文件分配所有期望的块。文件系统用0填满预留块,并知道不要将他们分给其他文件
Reiser文件系统
只支持回写日志模式
可以在线调整已有文件系统的大小
采用尾部压缩(tail packing)技术,能将一个文件的数据填进另一个文件的数据块中的空白空间
(此系统的首席开发人员Hans Reiser还在监狱……)
JFS文件系统
采用顺序日志方法
采用基于区段的文件分配,除了IBM Linux版本外,很少JFS文件系统很少使用
XFS文件系统
采用回写模式的日志
可以在线调整文件系统大小(只能扩大,不能缩小)
操作文件系统
创建分区
fdisk
必须指定要分区的存储设备的设备名才能启动
如果是第一次给该设备分区,fdisk会警告设备上没有分区表
fdisk命令
命令 | 描述 |
a | 设置一个标识,说明这个分区是可启动的 |
b | 编辑BSD Unix系统用的磁盘标签 |
c | 设置DOS兼容标识 |
d | 删除分区 |
l | 显示可用的分区类型 |
m | 显示命令选项 |
n | 添加一个新分区 |
o | 创建DOS分区表 |
p | 显示当前分区表 |
q | 退出,不保存更改 |
s | 为Sun Unix系统创建一个新磁盘标签 |
t | 修改分区的系统ID |
u | 改变使用存储单位 |
v | 验证分区表 |
w | 将分区表写入磁盘 |
x | 高级功能 |
分区可按主分区(primary partition)和扩展分区(extended partition)创建
主分区可以被文件系统格式化,扩展分区只能容纳其他主分区
每个存储设备上只能有4个分区,可以通过创建多个扩展分区然后在扩展分区内创建主分区拉进行扩展
创建文件系统
在将数据保存到这个设备之前,必须用某种文件系统格式化它,每种文件系统类型都有自己的命令行程序格式化分区
工具 | 用途 |
mkefs | 创建一个ext文件系统 |
mkefs2 | 创建一个ext2文件系统 |
mkfs.ext3 | 创建一个ext3文件系统 |
mkfs.ext4 | 创建一个ext4文件系统 |
mkreiserfs | 创建一个ReiferFS文件系统 |
jfs_mkfs | 创建一个JFS文件系统 |
mkfs.xfs | 创建一个XFS文件系统 |
所有的文件系统命令都允许通过不带选项的简单命令来创建默认文件系统
$sudo mkfs.ext4 /dev/sdc1
挂载
$sudo mkdir /mnt/testing
$sudo mount -t ext4 /dev/sdc1 /mnt/testing
这样只是临时挂载,重启之后不会再次挂载
如果想启动时挂载,可以将文件系统添加到/etc/fstab文件中
如果出错了
fsck命令用来检查和修复任意类型的Linux文件系统
语法:
fsck options filesystem
可以在命令行列出多个要检查的文件系统条目
文件系统可以通过设备名、在虚拟目录中的挂载点以及分配给文件系统的唯一UUID值来引用
注意:fsck命令使用/etc/fstab文件来自动决定挂载到系统上的存储设备的文件系统
如果设备通常不挂载,则需使用-t手动指定文件系统类型
选项 | 描述 |
-a | 如果检查到错误,自动修复文件系统 |
-A | 检查/etc/fstab文件中列出的所有文件系统 |
-C | 给支持进度条功能的文件系统显示一个进度条(只有ext2、ext3) |
-N | 不进行检查,只显示哪些检查会执行 |
-r | 出现错误时提示 |
-R | 使用-A选项时跳过根文件系统 |
-s | 检查多个文件系统时,依次进行检查 |
-t | 指定要检查的文件系统类型 |
-T | 启动时不显示头信息 |
-V | 在检查时产生详细输出 |
-y | 检测到错误时自动修复文件系统 |
有些命令是重复的,是因为试图为多个命令实现一个共用的前端带来的部分问题
有些文件系统修复命令有一些额外的可用选项
只能在未挂载的文件系统上运行fsck
想在根文件系统上运行fsck,需要用Linux LiveCD启动系统,然后在根文件系统上运行fsck
逻辑卷管理器
可将令一块硬盘上的分区加到已有文件系统,动态的向已有文件系统添加空间
逻辑卷管理布局
硬盘称为物理卷(Physical Volume,PV)(实际上是硬盘上的分区)
多个物理卷元素可以组成卷组(Volume Group,VG)(物理卷元素可分布在多个物理硬盘、多个分区)。卷组方便扩展
逻辑卷管理系统会把卷组当做物理硬盘一样对待
逻辑卷为Linux提供了创建文件系统的分区环境,作用类似Linux中的物理硬盘。Linux系统将逻辑卷当做物理分区对待
可以使用任意一种标准Linux文件系统来格式化逻辑卷
Linux中的LVM
1.快照(snapshot)
最早的Linux LVM允许将一个已有的逻辑卷在逻辑卷在线的状态下复制到另一个设备。此功能叫做快照
快照允许在复制的同时运行关键任务的Web服务器或数据库服务器
LVM1只允许创建只读快照,创建了快照就不能写入了
LVM2允许创建可读写快照。可以删除原先的逻辑卷,将快照作为替代挂载上 (对快速故障转移或要修改数据的程序试验非常有用。 一旦失败,就要重启系统 )
2.条带化(striping)
可跨多个硬盘创建一个逻辑卷
Linux LVM将文件写入逻辑卷时,文件中的数据会被分散到多个硬盘上,每个后继数据块会被写到下一个硬盘上
条带化有助于提高性能。因为这样不用等待单个硬盘移动读写磁头到多个不同位置。这个改进同样适用于读取顺序访问的文件,因为LVM可同时从多个硬盘读取数据
3.镜像
实时更新的逻辑卷一个完整的备份
创建镜像后时,LVM会将原始逻辑卷同步到镜像副本中
一旦原始同步完成,LVM会为文件系统的每次写过程进行两次写过程(主逻辑卷、镜像副本)
使用Linux LVM
1.定义物理卷
将硬盘上的物理分区转换成Linux LVM使用的物理卷区段
sudo pvcreate /dev/sdc1
为PV定义了使用的物理卷
pvdisplay可以显示已创建的物理卷列表
2.创建卷组
从物理卷中创建一个或多个卷组
sudo vgcreate Vol1 /dev/sdc1
使用/dev/sdc1分区上的物理卷创建了一个名为Vol1的卷组
vgdisplay可以显示细节
3.创建逻辑卷
lvcreate用来创建逻辑卷
选项 | 长选项 | 描述 |
-c | --chunksize | 指定快照逻辑卷的单位大小 |
-C | --contiguous | 设置或重置连续分配策略 |
-i | --stripes | 指定条带数 |
-I | --stripesize | 指定每个条带数的大小 |
-l | --extents | 指定分配给新逻辑卷的逻辑块数,或者要用的逻辑块的百分比 |
-L | --size | 指定分配给新逻辑卷的硬盘大小 |
--minor | 指定设备的次设备号 | |
-m | mirrors | 创建设备的镜像数 |
-M | --persistent | 让次设备号一直有效 |
-n | --name | 指定新逻辑卷的名称 |
-p | --permission | 为逻辑卷设置读/写权限 |
-r | --readahead | 设置预读扇区数 |
-R | --regionsize | 指定镜像逻辑卷 |
-s | --snapshot | 创建镜像逻辑卷 |
-Z | --zero | 设置在新逻辑卷的前1KB数据为0 |
sudo lvcreate -l 100%FREE -n lvtest Vol1
lvdisplay用来显示细节
4.创建文件系统
sudo mkfs.ext4 /dev/Vol1lvtest
然后用mount将其挂载
sudo mount /dev/Vol1lvtest test
注意:mkfs.ext4和mount命令中用到的路径是卷组名和逻辑卷名,而不是物理分区路径
5.修改LVM
Linux LVM包中共用的命令
命令 | 功能 |
vgchange | 激活和禁用卷组 |
vgremove | 删除卷组 |
vgextent | 将物理卷加到卷组中 |
vgreduce | 从卷组中删除物理卷 |
lvexend | 增加逻辑卷的大小 |
lvreduce | 减少逻辑卷的大小 |
注意:手动增加或减小逻辑卷大小时,存储在逻辑卷中的文件系统需要手动修复来处理大小上的改变。大多数文件系统包含重新调整文件系统格式的命令行程序,比如给ext2和ext3文件系统用resize2fs
转贴请保留以下链接
本人blog地址
相关推荐
通过深入学习"Unix Shell编程第三版笔记",你将能够编写出高效的自动化脚本,提高工作效率,解决日常的系统管理和开发问题。同时,对Unix Shell的熟练掌握也是成为高级系统管理员或全栈开发者的必备技能之一。
学习Linux的推荐书籍有《鸟哥的Linux私房菜》、《Linux命令行与shell脚本编程大全》、《Linux系统管理技术手册》等,这些书籍可以帮助读者深入理解Linux系统,并提供丰富的实践指导。 6. Linux视频教程第1讲:基础...
Linux Shell是Linux操作系统中的一种命令解释器,它允许用户通过命令行界面与系统进行交互,执行各种系统操作。本文档《Linux Shell从入门到精通》是作者李振良基于个人经验整理的一份全面教程,旨在帮助读者从零...
Linux 学习笔记是 Linux 学习的详细笔记整理,分九章,涵盖了 vim 和 vi 编辑器、实用指令、组管理和权限管理、crond 任务调度、Linux 磁盘分区挂载、网络配置、进程管理、服务管理、shell 编程等内容。 1. vi 和 ...
### Shell脚本编程知识点概述 #### 一、预备知识与基本概念 在开始Shell脚本文档的学习之前,首先需要理解Shell脚本的基本概念及其在Linux/Unix环境中的作用。Shell是一种命令行解释器,用于执行用户输入的命令,...
4. "ule_06.txt" - 可能介绍了第六单元的Shell脚本编程,包括基本的Shell命令,变量、条件语句、循环结构、函数定义以及如何编写自动化任务脚本。 5. "ule_9.txt" - 可能是第九单元,可能讨论了网络配置和管理,...
八、shell脚本编程 编写shell脚本可以自动化重复任务,例如: - 变量、运算符和条件判断。 - 函数定义。 - 循环结构。 - 输入输出重定向。 九、系统管理 - sysctl:调整系统内核参数。 - logrotate:日志文件轮换。...
* Linux 的 Shell 编程:Shell 是 Linux 的命令行接口,提供了交互式的命令行环境 三、Linux 文件系统 * 文件类型:普通文件、目录文件、链接文件、设备文件等 * 文件权限:所有者、群组、其他用户的读写执行权限 ...
6. **Shell脚本编程**:Bash Shell是Linux最常用的Shell,学习编写简单的Shell脚本可以帮助自动化日常任务。了解变量、条件语句、循环结构以及函数的使用。 7. **系统服务与初始化系统**:了解Systemd,它是现代...
这些只是Linux学习笔记的一部分,完整的笔记还包括更多关于文件系统操作、权限管理、进程控制、网络配置、脚本编程等多个方面的内容。掌握这些基础技能是成为Linux运维人员的必备条件,通过不断的实践和学习,可以更...
Shell编程是Linux操作系统中的一种命令解释器,它允许用户通过命令行与系统进行交互,执行各种操作。在《shell编程从入门到精通》一书中,作者张昊详细讲解了shell编程的基础知识。以下是对该书内容的部分总结: 1....
1. **shell编程**:讲解Bash shell和其他Unix shell的基本语法,包括命令行参数、环境变量、重定向、管道和脚本编写等。 2. **进程管理**:介绍进程创建(fork和exec)和进程通信(管道、套接字、信号、共享内存、...
7. **Shell从入门到精通(阿良)**:这可能是另一本关于Shell脚本的教程,提供更全面的Shell编程实践指导。 8. **Linux必学的重要命令教程**:Linux命令行是日常操作的核心,这份教程可能包含如ls、cd、mkdir、cp、...
Shell是Linux操作系统中的一个命令解释器,同时也是一种编程语言,它使得用户可以通过命令行与系统进行交互。在Linux课程中,我们学习了shell的不同启动方式、shell脚本的基本元素以及变量和运算符的使用。 1. **...
"蛤蟆PYTHON脚本学习笔记二基本命令畅玩"这个压缩包文件,显然是一个关于Python编程初学者的学习资料,旨在帮助读者掌握Python的基础命令。在这个笔记中,我们可以期待涵盖以下关键知识点: 1. **Python安装**:...
而脚本文件则是将代码写入一个以.py结尾的文件中,可以通过命令行直接执行这些文件,类似于Shell脚本。此外,还可以设置脚本文件为可执行文件,通过在文件顶部指定Python解释器路径来实现。 6. Python文件操作和...
- Shell提供了丰富的命令和脚本编写功能,如条件判断、循环控制等,是进行系统管理和脚本编程的基础工具。 #### 七、常用命令详解 1. **用户切换** (`su`):用于切换用户身份。例如,从普通用户切换到管理员(root)...
9. **shell脚本编程**:初步接触bash shell脚本,编写简单的自动化任务脚本,提高工作效率。 10. **系统日志与监控**:了解Linux系统日志的重要性,学习查看和分析日志文件,使用`dmesg`、`top`等工具监控系统性能...