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

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联