Linux入门真经-034文件系统知识与常用命令补充

2024-03-04 17:48

本文主要是介绍Linux入门真经-034文件系统知识与常用命令补充,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、df与du

df:显示已挂载磁盘设备的使用情况

常用选项:

-h:大小数值用更易于人理解的方式显示

-i:显示inode用量而非默认磁盘空间使用信息

 

du:显示目录空间的占用情况

常用选项:

-s查看目录内文件总共占了多大空间

-h使用合适的单位使得数据大小更易读

 

2、dd命令

 

dd可以从标准输入或文件中读取数据,在输出到指定的文件。乍一看有点像复制的作用,不过dd的功能不止于此,更多的时候dd可以做到块设备级别的备份。

 

提到dd命令,此处再介绍两个linux中比较奇特的设备文件:

/dev/null: 数据黑洞;任何数据传递到该设备下都会悄无声息地被吞噬。以后我们介绍脚本编程的时候会用到,我们可以将一些不需要的输出重定向到null设备中。

         /dev/zero:吐零机;存放了无数个0,常用于破坏分区。

dd用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST [bs=# count=#]

     bs=#:block size, 复制单元大小;

     count=#:复制多少个bs;

下面举一些例子来示范dd的妙用。

 

1、  在磁盘无法继续分区的情况下,扩展交换分区

我们可以用dd命令构建出一个大文件,用于交换分区的制作。

 

[root@localhost udev]# dd if=/dev/zero of=/tmp/swapblock bs=1M count=512

512+0 records in

512+0 records out

536870912 bytes (537 MB) copied, 21.3359 s,25.2 MB/s

[root@localhost udev]# cd /tmp/

[root@localhost tmp]# ll -h swapblock

-rw-r--r--. 1 root root 512M Aug 30 23:27swapblock

 

我们可以看到,一个512M的大文件就产生了,我们可以直接使用mkswap将其制作成交换分区

 

[root@localhost tmp]# mkswap swapblock

Setting up swapspace version 1, size =524284 KiB

no label,UUID=7dae028a-97cf-46f3-97ed-3d2e008bd189

[root@localhost tmp]# free -m | grep -i swap

Swap:          2047           0        2047

[root@localhost tmp]# swapon swapblock

swapon: /tmp/swapblock: insecurepermissions 0644, 0600 suggested.

[root@localhost tmp]# free -m | grep -i swap

Swap:          2559           0        2559

[root@localhost tmp]#

 

可以看到,swap从2G涨到了2.5G。(swapon时的警告是关于权限的,出于安全考虑,建议将其权限改为600)

 

2、  备份mbr

可以将磁盘的mbr进行备份

如:

 

[root@localhost tmp]# dd if=/dev/sdc of=/tmp/mbr.bak bs=512 count=1

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.000504673 s,1.0 MB/s

 

接下来我把sdc的mbr破坏掉,再进行还原。(此步骤危险,稍有不慎可能导致数据丢失。不要在有生产数据的机器上实验。数据无价,请勿玩火)

 

[root@localhost tmp]# dd if=/dev/zero of=/dev/sdc bs=1 count=512

512+0 records in

512+0 records out

512 bytes (512 B) copied, 0.00315667 s, 162kB/s

 

重启计算机之前我们先看看目前的分区情况:

 

[root@localhost tmp]# lsblk

...省略输出...

sdc                       8:32   0  20G  0 disk

├─sdc1                    8:33   0    5G  0part

│└─vgpool1-lvol0-real  253:3    0   25G  0lvm 

│   ├─vgpool1-lvol0      253:2   0   25G  0 lvm /mnt/lvmpool0_mount

│   └─vgpool1-snap_lv0   253:5   0   25G  0 lvm /mnt/snap_point

└─sdc2                    8:34   0    5G  0part

  └─vgpool1-snap_lv0-cow253:4    0    1G  0lvm 

    └─vgpool1-snap_lv0   253:5   0   25G  0 lvm /mnt/snap_point

 

重启虚拟机你会发现,sdc空空如也,什么也没有了

 

[root@localhost ~]# lsblk

NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda               8:0    0  20G  0 disk

├─sda1            8:1    0   1G  0 part /boot

└─sda2            8:2    0  19G  0 part

  ├─centos-root253:0    0   17G  0lvm  /

  └─centos-swap253:1    0    2G  0lvm  [SWAP]

sdb               8:16  0   20G  0 disk

sdc               8:32   0  20G  0 disk

sr0              11:0    1 906M  0 rom 

[root@localhost ~]#

 

利用备份还原mbr

 

[root@localhost ~]# dd if=/tmp/mbr.bak of=/dev/sdc bs=512 count=1

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.032297 s, 15.9kB/s

 

重启虚拟机,再lsblk看看,你会发现恢复成功。

 

3、  整体磁盘拷贝

如:

dd if=/dev/sda of=/dev/sdb

你会得到两块内容一模一样的硬盘。


 

3、软硬链接

 

硬链接

一般来说,一个文件名有一个inode号,inode与文件一一对应。不过,在linux中是允许多个文件名同时指向同一个inode的。所以我们可以通过不同的文件名操纵同一个实际上的文件。而且,这种情况下,删除其中一个文件名,仍然可以通过另一个文件进行访问。

 

比如说张无忌又叫张公子又叫张教主,突然有一天他不叫张教主了,但是你还是能通过张无忌这个名字找到他,虽然称呼没有了,反正还有别的称呼指向这个人。

 

可以通过ln命令来创建硬链接

ln 源文件 目标文件

 

举个例子:

我们将/etc/fstab拷贝一份,然后用ls -i去查看他们的inode号码,发现不通同,所以虽然他们的内容一模一样,但是他们是两个文件,存于系统中的不同地方

 

[root@localhost opt]# cp /etc/fstab/tmp/fstab

[root@localhost opt]# ls -i /etc/fstab/tmp/fstab

16777289 /etc/fstab  16777282 /tmp/fstab

[root@localhost opt]#

 

为/tmp/fstab创建硬链接。

 

[root@localhost tmp]# ln fstab fstab.ln

[root@localhost tmp]# ls -i fstab fstab.ln

16777282 fstab  16777282 fstab.ln

[root@localhost tmp]#

 

可以看到,这两个文件虽然看上去是两个,但是inode号码相同,实际上是一个文件。

如何确定本文件是否有硬链接呢?

 

[root@localhost tmp]# ll fstab

-rw-r--r--. 2 root root 497 Aug 25 02:43fstab

 

如上,权限后面的数字就是链接数,2个代表有两个文件名指向这个inode。

每删除一个文件,链接数就减去1,为0的时候,inode被回收,文件也就真的被删除了。

 

到这里顺便提一句:目录创建时,会创建两个目录项:.和..

.表示本目录,是本目录的硬链接

..表示上一级目录,是上一级目录的硬链接

所以所有目录的链接数都是2+子目录数。

 

软链接

软链接可以理解为快捷方式。快捷方式删除时,原文件访问不受影响。但是原文件删除,快捷方式(软链接)则失效。

创建软链接:

ln -s 源文件 目标文件

如:

 

[root@localhost ~]# ln -s /etc/fstab/tmp/fstab_soft

[root@localhost ~]# ll /tmp/fstab_soft

lrwxrwxrwx. 1 root root 10 Sep  9 09:43 /tmp/fstab_soft -> /etc/fstab

[root@localhost ~]#

 

软链接的权限都是777,但是真正的权限还得看它指向文件的权限。

 

 系统中的文件多如牛毛,我们如何去查找我们需要的文件呢。比如,我看到某个文件有几个硬链接,我想把它彻底删掉,相关的文件又怎么找出来呢?下一节为大家介绍。

 

关注本公众号获取每日更新

这篇关于Linux入门真经-034文件系统知识与常用命令补充的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773959

相关文章

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py