2022
我们一起努力

linux文件管理(linux文件管理及相关操作指令)

目录:

  • 1、Linux btrfs文件系统及管理
  • 2、【学了就忘Linux文件系统管理】— 10.parted命令分区(二)
  • 3、Linux 文件系统管理
  • 4、Linux 命令 read (文件管理)——想玩转linux就请一直看下去

Linux btrfs文件系统及管理

Linux btrfs文件系统及管理

linux文件系统,具有写时复制COW(copy-on-write),改善ext3文件系统单文件大小限制,并加入其他特性,如可写快照,快照的快照,内建RAID,子卷(subvloume),专注于容错,修复和易于管理,下面一起来看看什么是linux btrfs文件系统及管理关系吧!

什么是btrfs?

Btrfs(B-tree文件系统,通常念成Butter FS,Better FS或B-tree FS),linux文件系统,具有写时复制COW(copy-on-write),改善ext3文件系统单文件大小限制,并加入其他特性,如可写快照,快照的快照,内建RAID,子卷(subvloume),专注于容错,修复和易于管理。单文件可达16EB,最大文件数量2^64,最大卷容量16EB,等。

btrfs功能特性

1,COW:写时复制,每次写入数据时,先将数据写入到新的block,写入成功后,更改旧数据块指针到新数据块,而非更改本身。

2,多物理卷支持,btrfs内建raid,可在线增删磁盘设备,可在线扩展和缩减磁盘空间。

3,数据和元数据校验码,checksum

4,子卷,可单独挂载子卷

5,可写快照,快照的快照,单个文件快照。

6,透明压缩

7,ext3/4和btrfs无痛互转

btrfs 基本用法:

bash/shell Code复制内容到剪贴板

[root@localhost ~]# btrfs --help #查看帮助可以看到btrfs 有很多子命令,用法也很多,这里只举例常用选项。

usage: btrfs [--help] [--version] [...] []

btrfs subvolume create [-i ] [/] #创建子卷

Create a subvolume

btrfs subvolume delete [options] [...] #删除子卷

Delete subvolume(s)

btrfs subvolume list [options] [-G [+|-]value] [-C [+|-]value] [--sort=gen,ogen,rootid,path] #显示子卷列表

List subvolumes (and snapshots)

btrfs subvolume snapshot [-r] [-i ] |[/] #创建子卷快照

Create a snapshot of the subvolume

btrfs subvolume get-default #获取子卷默认的文件系统

Get the default subvolume of a filesystem

btrfs subvolume set-default #设置默认系统给子卷

Set the default subvolume of a filesystem

btrfs subvolume find-new #列出btrfs文件系统中最近修改的文件,结合find命令

List the recently modified files in a filesystem

btrfs subvolume show #显示更多的子卷信息

Show more information of the subvolume

btrfs subvolume sync [...] #子卷同步,类似mount同步模式,内存数据同步到磁盘,有待查证。

Wait until given subvolume(s) are completely removed from the filesystem.

btrfs filesystem df [options] #显示挂载的文件系统详细信息。

Show space usage information for a mount point

btrfs filesystem show [options] [|||label] #显示创建文件系统的磁盘信息。

Show the structure of a filesystem

btrfs filesystem sync #强制文件系统同步,

Force a sync on a filesystem

btrfs filesystem defragment [options] |

[|...] #碎片整理

Defragment a file or a directory

btrfs filesystem resize [devid:][+/-][kKmMgGtTpPeE]|[devid:]max #btrfs文件系统在线扩展和缩减空间

Resize a filesystem

btrfs filesystem label [|] [] #改变btrfs文件系统卷标

Get or change the label of a filesystem

btrfs filesystem usage [options] [..] #显示文件系统当前的使用信息。

Show detailed information about internal filesystem usage .

btrfs balance start [options] #改变磁盘chunk,在线改 数据和元数据 存储方式,单盘改raid,前提满足raid要求。

Balance chunks across the devices

btrfs balance pause #暂停chunk更改,数据量较大,转换时间较长时,先暂停。

Pause running balance

btrfs balance cancel #取消chunk更改,如上

Cancel running or paused balance

btrfs balance resume #中断balance的操作,如上

Resume interrupted balance

btrfs balance status [-v] #显示balance操作状态 如上

Show status of running or paused balance

btrfs device add [options] [...] #文件系统增加磁盘

Add a device to a filesystem

btrfs device delete [...] #文件系统删除磁盘

Remove a device from a filesystem

btrfs device scan [(-d|--all-devices)| [...]] #文件系统磁盘扫描

Scan devices for a btrfs filesystem

btrfs device ready #猜测是检测加入的设备有没有被挂载

Check device to see if it has all of its devices in cache for mounting

btrfs device stats [-z] | #显示文件系统的设备状态

Show current device IO stats. -z to reset stats afterwards.

btrfs device usage [options] [..] #显示文件系统内部设备详细使用信息

Show detailed information about internal allocations in devices.

btrfs文件系统管理

为分区创建btrfs文件系统

bash/shell Code复制内容到剪贴板

[root@localhost ~]# fdisk -l | grep "^Disk /dev/sd[a-z]" #准备sd{b,c,d,e}4块20G磁盘,未做任何分区。

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors

Disk /dev/sde: 21.5 GB, 21474836480 bytes, 41943040 sectors

Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors

创建单分区btrfs并查看

bash/shell Code复制内容到剪贴板

[root@localhost ~]# mkfs.btrfs -L 'btrfs' /dev/sdb

btrfs-progs v3.19.1

See for more information.

Turning ON incompat feature 'extref': increased hardlink limit per file to 65536

Turning ON incompat feature 'skinny-metadata': reduced-size metadata extent refs

fs created label btrfs on /dev/sdb

nodesize 16384 leafsize 16384 sectorsize 4096 size 20.00GiB

[root@localhost ~]# btrfs filesystem show

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 1 FS bytes used 112.00KiB

devid 1 size 20.00GiB used 2.04GiB path /dev/sdb

btrfs-progs v3.19.1

[root@localhost ~]# mount -o compress=lzo -L btrfs /btrfs/ 挂载时可以设定透明压缩机制。

[root@localhost ~]# btrfs filesystem df /btrfs

Data, single: total=8.00MiB, used=256.00KiB

System, DUP: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, DUP: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

再添加一块磁盘

bash/shell Code复制内容到剪贴板

[root@localhost ~]# btrfs device add /dev/sdc /btrfs #添加磁盘,删除用btrfs device delete /dev/sdc /btrfs

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 384.00KiB

devid 1 size 20.00GiB used 2.04GiB path /dev/sdb

devid 2 size 20.00GiB used 0.00B path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]#

在线增加或缩减空间,在线改变空间,可以让lvm坐冷板凳了。

bash/shell Code复制内容到剪贴板

[root@localhost ~]# btrfs fi resize -10G /btrfs/ #在线缩减空间

Resize '/btrfs/' of '-10G'

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 384.00KiB

devid 1 size 10.00GiB used 2.04GiB path /dev/sdb

devid 2 size 20.00GiB used 0.00B path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]# btrfs fi resize +7G /btrfs/ #在线增加空间

Resize '/btrfs/' of '+7G'

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 384.00KiB

devid 1 size 17.00GiB used 2.04GiB path /dev/sdb

devid 2 size 20.00GiB used 0.00B path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]#

在线更改数据和元数据的结构

bash/shell Code复制内容到剪贴板

[root@localhost ~]# btrfs fi df /btrfs/

Data, single: total=8.00MiB, used=256.00KiB

System, DUP: total=8.00MiB, used=16.00KiB

System, single: total=4.00MiB, used=0.00B

Metadata, DUP: total=1.00GiB, used=112.00KiB

Metadata, single: total=8.00MiB, used=0.00B

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost ~]# btrfs balance start -mconvert=raid1 /btrfs/ #-mconvert 为改变metadata元数据区的存储结构

Done, had to relocate 4 out of 5 chunks

[root@localhost ~]# btrfs fi sh

Label: 'btrfs' uuid: 2a9f0d3d-f8a0-4757-9f4e-d1efa04a683a

Total devices 2 FS bytes used 192.00KiB

devid 1 size 17.00GiB used 296.00MiB path /dev/sdb

devid 2 size 20.00GiB used 288.00MiB path /dev/sdc

btrfs-progs v3.19.1

[root@localhost ~]# btrfs fi df /btrfs/

Data, single: total=8.00MiB, used=64.00KiB

System, RAID1: total=32.00MiB, used=16.00KiB

Metadata, RAID1: total=256.00MiB, used=112.00KiB #对比上改为了raid1

GlobalReserve, single: total=16.00MiB, used=0.00B

[root@localhost ~]# btrfs balance start -dconvert=raid1 /btrfs/ #-dconvert 为改变data数据区的存储结构

Done, had to relocate 1 out of 3 chunks

【学了就忘Linux文件系统管理】— 10.parted命令分区(二)

命令: print [devices|free|list,all|NUMBER] :使用 print 命令可以查看分区表信息,包括硬盘参数,硬盘大小,扇区大小,分区表类型和分区信息。

结果如下:

可以看到 sdb 硬盘大小是21,5GB,文件系统是 msdos ( msdos 文件系统是windows下的文件系统,在 parted 命令交互中就是表示MBR分区表)。

把硬盘由MBR分区表,改成GPT分区表,使用的命令如下:

mklabel,mktable LABEL-TYPE :创建新的磁盘卷标(分区表)。

(如果要由GPT分区表改成MBR分区表,命令为 mklabel msdos )

我们在查看一下当前硬盘分区表情况

可以看到分区表已经变成GPT分区表,并且之前硬盘的分区信息已经没有了。

之后 quit 退出 parted 命令交互,执行 reboot 命令重启计算机。

重启完计算机才能执行之后的操作。(不重启后续操作是无法完成的)

因为修改过了分区表,所以 /dev/sdb 硬盘中的所有数据都消失了,所以我们可以重新对这块硬盘分区了。

执行 parted 命令,进入硬盘分区。

执行分区命令,对硬盘进行分区,命令如下:

mkpart PART-TYPE [FS-TYPE] START END :创建一个分区。

查看硬盘的分区情况

已显示刚刚创建好的分区disk1。因为没有格式化,所以 File system:文件系统类型 是空着的。

分区分完了,我们还需要对分区进行格式化。不过我们已经知道如果使用 parted 交互命令格式化的话,只能格式化成 ext2 文件系统。我们这里是要演示下 parted 命令的格式化方法。

parted 交互命令的格式化命令为 mkfs ,命令如下:

mkfs NUMBER FS-TYPE :在分区上建立文件系统。

再查看硬盘的分区情况

退出

上图提示你,如果需要让分区自动挂载,需要手动修改 etc/fstab 文件。

如果要把硬盘格式化成 ext4 文件系统,需要执行 mkfs 命令,重新对硬盘进行格式化。(注意不是 parted 交互命令中的 mkfs 命令,而是系统命令 mkfs )!

执行 [root@localhost ~] # mkfs -t ext4 /dev/sdb1

将 sdb1 分区格式化为 ext4 文件系统之后,就可以进行分区的挂载了。如下图:

如果你需要开机自动挂载,手动修改 etc/fstab 文件即可。

parted 命令还有一大优势,就是可以调整分区的大小(windows中也可以实现,不过需要转换成动态磁盘,要不就需要依赖第三方工具,如硬盘分区魔术师)。起始Linux中LVM和RAID是可以支持分区调整的,不过这两种方法也可以看成是动态磁盘方法。使用 parted 命令调整分区大小要更加简单。

删除分区前提,要先把分区的自动挂载在 /etc/fstab 文件删除,然后用 umount 卸载掉分区的挂载。在执行 parted 命令的删除分区命令。

rm NUMBER :删除分区。

Linux 文件系统管理

3.1Linux 文件系统类型

不同的操作系统使用不同类型的文件系统,为了与其他的操作系统兼容,以相互交换数据,

通常,每种操作系统都支持多种类型的文件系统。

Linux 中保存数据的磁盘分区通常采用EXT2/EXT3 文件系统,而实现虚拟存储的swap 分区

采用swap 文件系统,同时Linux 内核支持十多种不同的文件系统。

1. EXT2 和EXT3 文件系统

EXT(Extended File System,扩展文件系统)是专为Linux 设计的文件系统。在Linux 发展

早起,起到重要中用,但在稳定性、速度和兼容性方面存在缺陷。

EXT2 是为解决EXT 系统存在的缺陷而设计的可扩展、高性能的文件系统。

EXT3 是EXT2 的增强版本,在EXT2 的基础上,增加了文件系统的日志管理功能。

EXT3 文件系统具有的特点:

(1) 高效性:当系统因为异常断电或系统崩溃,重新启动时不需要检查文件系统的一致

性,只需要根据文件系统的日志,快速检测并恢复文件系统到正常状态。

(2) 数据的完整性:可以保持数据域文件系统状态的高度一致性,避免意外关机对文件

系统造成的破坏。

(3) 数据的存取速度更快:EXT3 文件系统的日志功能对磁盘驱动器的读/写进行优化,

使读/写系统的速度更快。

(4) 数据易于转换

2. swap 文件系统

用于Linux 的交换分区。在Linux 中,使用整个交换分区来提供虚拟内存。

3. VFAT 文件系统

VFAT 是Linux 对DOS、Windows 系统下的FAT 文件系统的统称。

4. NFS 文件系统

NFS 即网络文件系统,用在UNIX 或Linux 系统间通过网络进行文件共享。

5. SMB 文件系统

SMB 是Samba 的缩写,是另一种网络文件系统,用于在Windows 和Linux 系统之间共享文

件和打印机。

6. ISO9660 文件系统

CD-ROM使用的标准文件系统。

此外,Linux 支持的文件系统还有minix、msdos、ncpfs、hpfs、umsdos 等。

3.2 Linux 的目录和文件

1.Linux 系统的目录结构

Linux 文件系统由文件和目录组成,文件是专门用来存储数据的对象,目录是一种用来组织

文件和其他目录的容器。Linux 和DOS、Windows 系统一样,使用树形目录结构来组织和管

理文件。

1. / 文件系统的入口,最高一级目录;

2. /bin 基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, mkdir等。

这个目录中的文件都是可执行的,一般的用户都可以使用。

3. /boot 包含Linux内核及系统引导程序所需要的文件,比如vmlinuz initrd.img文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;

4. /dev 设备驱动程序文件存储目录,比如声卡、磁盘等,是Linux文件系统的一个闪亮的特性-所有对象都是文件或目录。仔细观察这个目录你会发现hda1, hda2等,它们代表系统主硬盘的不同分区。

5. /etc 存放系统程序或者一般工具的配置文件。

如安装了apache2之后,配置文件在/etc/apache2/目录下。

/etc/init.d这个目录是用来存放系统或服务器以System V模式启动的脚本,这在以System V模式启动或初始化的系统中常见。

6. /home 普通用户默认存放目录Linux是多用户环境,所以每一个用户都有一个只有自己可以访问的目录(当然管理员也可以访问)。它们以/home/username的方式存在。这个目录也保存一些应用对于这个用户的配置,比如IRC, X等。

7. /lib 库文件存放目录这里包含了系统程序所需要的所有共享库文件,类似于Windows的共享库DLL文件。

8. /var 这个目录的内容是经常变动,因为存储的文件,如数据库,数据文件大小是在不断的增大。

/var/log这是用来存放系统日志的目录。

/var/www目录是定义Apache服务器站点存放目录;/var/lib用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地;

/var/log系统日志存放,分析日志要看这个目录的东西;

/var/spool打印机、邮件、代理服务器等假脱机目录;

9. /lost+found 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。 有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。

Linux应该正确的关机。但有时你的系统也可能崩溃掉或突然断电使系统意外关机。那么启动的时候fsck将会进行长时间的文件系统检查。Fsck会检测并试图恢复所发现的'不正确的文件。被恢复的文件会放置在这个目录中。所恢复的文件也许并不完整或并不合理,但毕竟提供了一些恢复数据的机会。

10. /media 即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录 ;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,类似cdrom的目录。这个只有在最新的发行套件上才有. 10. /mnt /mnt这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom等目录。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。比如光驱可以挂载到/mnt/cdrom。

11. /opt 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在Fedora Core 5.0中,OpenOffice就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过./configure --prefix=/opt/,将软件安装到opt目录。

这个目录包含所有默认系统安装之外的软件和添加的包。

12. /proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。

这是系统中极为特殊的一个目录,实际上任何分区上都不存在这个目录。它实际是个实时的、驻留在内存中的文件系统。

13. /root Linux超级权限用户root的家目录;

14. /sbin 大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令;

这个目录和

/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin目录是相似的; 我们记住就行了,凡是目录sbin中包含的都是root权限才能执行的。

15. /tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。

许多程序在这里建立lock文件和存储临时数据。有些系统会在启动或关机时清空此目录。

16. /usr 这个是系统存放程序的目录,比如命令、帮助文件等。

这个目录下有很多的文件和目录。

当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。

如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。

Linux 命令 read (文件管理)——想玩转linux就请一直看下去

Linux read命令用于从标准输入读取数值。

read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

参数说明:

1、简单读取

测试结果为:

2、-p 参数,允许在 read 命令行中直接指定一个提示。

测试结果为:

3、-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。

执行程序不输入,等待 5 秒后:

4、除了输入时间计时,还可以使用 -n 参数设置 read 命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。

该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。

只接收 2 个输入就退出:

执行程序输入两个字符:

5、 -s 选项能够使 read 命令中输入的数据不显示在命令终端上(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。

执行程序输入密码后是不显示的:

6.读取文件

每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。

通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。

测试文件 test.txt 内容如下:

测试代码:

执行结果为:

使用 -e 参数,以下实例输入字符 a 后按下 Tab 键就会输出相关的文件名(该目录存在的):

赞(0)
文章名称:《linux文件管理(linux文件管理及相关操作指令)》
文章链接:https://www.fzvps.com/130635.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!