当前位置: 首页 > 编程日记 > 正文

Linux12-文件系统基础

目录

一、识别文件系统和设备

1.1、分区

1.2、逻辑卷

二、挂载卸载文件系统命令mount、umount、blkid、lsof

2.1、挂载

2.2、卸载

三、检查文件系统命令df、du

四、制作文件链接命令ln

4.1、硬链接

4.2、软连接

五、查找文件命令locate、find


一、识别文件系统和设备

1.1、分区

硬盘和存储设备通常划分为更小的块,称为分区。不同分区可以通过不同的文件系统进行格式化,用于不同的目的。存储设备由一个特殊文件类型表示——块设备。块设备存储在/dev目录中。

不同类型的磁盘驱动器,用不同的字母表示,顺序按照abcd字母序,代表整个驱动器。

  • 检测到SCSI/SATA或USB硬盘驱动器,那么的第一个是/dev/sda,第二个是/dev/sdb,以此类推。
  • 检测到虚拟机中的硬盘驱动器,那么第一个是/dev/vda,第二个是/dev/vdb,以此类推。或者/dev/xvda、/dev/xvdb、……
  • 早期设备有IDE磁盘的,第一个是/dev/hda,第二个是/dev/hdb,以此类推。

分区顺序按照数字序,在一块磁盘/dev/sda的第一个分区是/dev/sda1,第二个分区是/dev/sda2,以此类推。其他类型也是以此类推。

[root@server0 ~]# ll /dev/vd*
brw-rw----. 1 root disk 253,  0 Feb 28 14:13 /dev/vda
brw-rw----. 1 root disk 253,  1 Feb 28 14:13 /dev/vda1
brw-rw----. 1 root disk 253, 16 Feb 28 14:32 /dev/vdb
brw-rw----. 1 root disk 253, 17 Feb 28 14:32 /dev/vdb1

1.2、逻辑卷

另一种磁盘和分区的方式是逻辑卷管理(LVM)。通过LVM,每个块设备都可以做成物理卷,一个或多个物理卷可以汇集为一个卷组。卷组再切片形成逻辑卷,来提供存储空间。逻辑卷与分区相当。对于卷组,/dev目录中有一个名称与该卷组相同的目录。在该目录下,已创建名称与逻辑卷相同的符号链接。例如vg1卷组中lv_data逻辑卷的设备文件是/dev/vg1/lv_data、/dev/vg1/log……。

LVM依赖于设备映射程序(DM)内核驱动程序。以上符号链接/dev/vg1/lv_data指向/dev/dm-number块设备节点。number的分配是连续的,从0开始。每个逻辑卷在/dev/mapper目录中有另外一个符号链接,名称为/dev/mapper/vg1-lv_data、/dev/mapper/vg1-lv_log。

通常,要使用可靠且一致的符号链接名称来访问逻辑卷,可以一致使用/dev/vg1/lv_data、/dev/vg1/log,或者一致使用/dev/mapper/vg1-lv_data、/dev/mapper/vg1-lv_log。不能使用/dev/dm-number名称,因为它每次启动会有不同。

二、挂载卸载文件系统命令mount、umount、blkid、lsof

2.1、挂载

linux有一套以/为根节点的目录树,可以扩展。把新的文件系统添加到现有目录树的过程称为挂载,反之就是卸载,分别用mount和umount命令。文件系统添加到的那个目录,称为挂载点。mount命令需要通过两种方式来指定文件系统:设备文件/dev目录中的块设备文件、文件系统的通用唯一识别符UUID。只要文件系统没有重新创建过,UUID将保持不变。设备文件可能会改变。blkid命令简要列出其中具有文件系统的现有分区和文件系统的UUID。

因此,手动临时挂载可以用设备文件,如果是持久挂载则选择用UUID。

目录树默认存在/mnt目录,可以作为挂载点提供入口点。建议在/mnt下创建子目录,并将该子目录用作挂载点。比如,/dev/cdrom。

[root@server0 ~]# blkid
/dev/vda1: UUID="9bf6b9f7-92ad-441b-848e-0257cbb883d1" TYPE="xfs"
/dev/vdb1: UUID="27dcfc20-6d6c-48ca-ba4d-9db3b2ff8f6c" TYPE="xfs"[root@server0 ~]# mkdir /mnt/mydata
[root@server0 ~]# mount /dev/vdb1 /mnt/mydata/[root@server0 ~]# mount UUID="27dcfc20-6d6c-48ca-ba4d-9db3b2ff8f6c" /mnt/mydata

USB闪存设备等可移动介质在插入后由图形桌面环境自动挂载。可移动介质的挂载点是/run/media/<user>/<label>。<user>是登录图形环境的用户。<label>是文件系统创建时所取的名称。

2.2、卸载

卸载文件系统,umount命令需要使用挂载点作为参数。

[root@server0 mydata]# umount /mnt/mydata/
umount: /mnt/mydata: target is busy.(In some cases useful info about processes that usethe device is found by lsof(8) or fuser(1))
[root@server0 mydata]# lsof /mnt/mydata/
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1557 root  cwd    DIR 253,17       16  128 /mnt/mydata
lsof    2019 root  cwd    DIR 253,17       16  128 /mnt/mydata
lsof    2020 root  cwd    DIR 253,17       16  128 /mnt/mydata
[root@server0 mydata]# cd
[root@server0 ~]# umount /mnt/mydata/

如果挂载点正在由某一进程访问,将不能卸载,要卸载必须停止访问挂载点。lsof命令列出所给目录中所有打开的文件及访问它们的进程。确定进程以后,等待进程结束或向进程发送SIGTERM、SIGKILL信号等来结束进程。

三、检查文件系统命令df、du

对文件系统挂载点和可用空间大小有个简略了解,可以运行df命令。报告所有已挂载的普通文件系统的总量、已用、可用的磁盘空间大小和百分比。如果要关注某一特定目录使用空间的详细信息,可以使用du命令。两个命令常用选项有-h、-H、-T,输出可读格式。du命令以递归方式显示目录树中所有文件大小,因此注意指定递归深度du -h -d 1或者du -h --max-depth=1。

  • -h,可读格式,单位是KiB、MiB、GiB,进制为2^10
  • -H,可读格式,单位是SI单位,也就是KB、MB、GB(硬盘厂商通常使用的单位),进制为10^3
  • -T,显示文件系统类型
[root@server0 ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda1      xfs        10G  3.1G  7.0G  31% /
devtmpfs       devtmpfs  906M     0  906M   0% /dev
tmpfs          tmpfs     921M   80K  921M   1% /dev/shm
tmpfs          tmpfs     921M   17M  904M   2% /run
tmpfs          tmpfs     921M     0  921M   0% /sys/fs/cgroup[root@server0 ~]# df -HT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda1      xfs        11G  3.3G  7.5G  31% /
devtmpfs       devtmpfs  950M     0  950M   0% /dev
tmpfs          tmpfs     966M   82k  966M   1% /dev/shm
tmpfs          tmpfs     966M   18M  948M   2% /run
tmpfs          tmpfs     966M     0  966M   0% /sys/fs/cgroup[root@server0 ~]# du /usr -h -d 1
118M	/usr/bin
66M	/usr/sbin
459M	/usr/lib
701M	/usr/lib64
1.4G	/usr/share
0	/usr/etc
0	/usr/games
36K	/usr/include
35M	/usr/libexec
16K	/usr/local
0	/usr/src
2.8G	/usr

tmpfs和devtmpfs设备是系统内存中的文件系统,在系统重启后,写入tmpfs或devtmpfs的文件都会消失。

四、制作文件链接命令ln

4.1、硬链接

文件系统中的每一个文件默认具有一个硬链接。为节省空间,可以不复制文件,而创建引用同意文件的硬链接。指向同意文件的所有硬链接具有相同的权限、链接数、用户/组所有权、时间戳以及文件内容。指向同一文件的硬链接需要在相同的文件系统中。硬链接不能指向目录。命令ln可以创建硬链接,需要一个现有文件作为第一个参数,后面跟硬链接。即使原始文件被删除,只要有一个硬链接,该文件内容就依然可用。命令ls -l 在文件权限后、所有者前显示硬链接数量。

[root@server0 ~]# echo "hello file link" > /tmp/file
[root@server0 ~]# ln /tmp/file file

4.2、软连接

在创建硬链接的命令上加上-s选项,创建的就是软链接。软链接不是常规文件,可以看到其类型为"l"。软链接指向的目录可以位于不同的文件系统。软链接可以指向目录。当原始文件被删除后,软链接依然指向该文件,但是目标文件消失了,也就不可用了。

[root@server0 ~]# ln -s ./file file.link
[root@server0 ~]# ll
total 16
-rw-------. 1 root root 8619 May  7  2014 anaconda-ks.cfg
drwxr-xr-x. 3 root root  100 Feb 15 15:12 dst
-rw-r--r--. 1 root root   16 Feb 28 21:30 file
lrwxrwxrwx. 1 root root    6 Feb 28 21:32 file.link -> ./file

五、查找文件命令locate、find

命令行环境下查找文件的命令有locate和find两个。locate命令搜索预先生成的数据库中的文件名或路径,find命令通过爬取整个文件系统来实时搜索文件系统。

locate命令后面跟要搜索的文件名,即使文件或路径仅部分匹配,也会返回结果。locate -i表示不区分文件名的大小写。如果是刚刚创建、更改、删除文件名,那么应该使用updatedb命令更新数据库后再进行搜索。

[root@server0 ~]# locate nginx
/usr/share/augeas/lenses/dist/nginx.aug[root@server0 ~]# echo "hello" > mynginxfile
[root@server0 ~]# locate nginx
/usr/share/augeas/lenses/dist/nginx.aug[root@server0 ~]# updatedb
[root@server0 ~]# locate nginx
/root/mynginxfile
/usr/share/augeas/lenses/dist/nginx.aug

find命令后面跟要搜索的目录,常用选项如下:

  • -name "*.txt" ,文件名双引号括起来,支持模糊查询
  • -i ,文件名不区分大小写
  • -type <f d b l> ,按照文件类型查找,f普通文件,d目录,b块设备文件,l软链接等
  • -size <10k +20M -30G>,按照文件大小查找,大小等于10kb,大于20M,小于30G
  • -amin <120 +200 -150>,按照最后访问时间查找,120分钟前修访问的文件,200分钟以前修访问的文件,150分钟以内修访问的文件
  • -atime n,按照最后访问时间查找,同-amin 按照n*24小时计算时间
  • -cmin <120 +200 -150>,按照最后修改状态时间查找,120分钟前修改过状态的文件,200分钟以前修改过状态的文件,150分钟以内修改过状态的文件
  • -ctime n,按照最后修改状态时间查找,同-cmin 按照n*24小时计算时间
  • -mmin <120 +200 -150>,按照最后修改内容时间查找,120分钟前修改过内容的文件,200分钟以前修改过内容的文件,150分钟以内修改过内容的文件
  • -mtime,按照最后修改内容时间查找,同-mmint 按照n*24小时计算时间
  • -links <+1 -5>,文件硬链接数大于1个,小于5个
  • -user <root>,按照所属用户查找
  • -group <wheel>,按照所属组查找
  • -uid <1001>,按照所属用户id查找
  • -guid <1001>,按照所属用户组id查找
  • -exec,往下看↓

find还有一个强大的功能,就是对找到的文件进行统一的后续操作。需要-exec <cmd> '{}' \,'{}'表示找到的文件。

# 在/backup目录下找到以wordpress开头的普通文件,最后修改时间6天以前
# 然后全部删掉
find /backup -name wordpress* -type f -mtime +6 -exec rm '{}' \;

相关文章:

C语言------运算符和表达式

1. 自动类型转换是由计算机自动完成的&#xff0c;当由低级别的向高级别的转换时&#xff0c;不会报警&#xff0c;但是当高级别的向低级别的转换时&#xff0c;会发出告警信息&#xff0c;信息意思就是提示会有部分数据丢失的可能。 2. 强制类型转换是通过“&#xff08;数据类…

String类常用方法(看一眼就懂)

public class Test{public static void main(String[] args){String name " T o m ";System.out.println(name.length()); //输入字符的长度&#xff0c;&#xff08;空格也占一个字节&#xff09;System.out.println(name.equals(" T o m ")); //判断连…

1.2.2一个数可以有多少种用连续素数之和表示

#include <iostream> using namespace std; const int maxp2000,n10000; int prime[maxp],total0; bool isprime(int k)//bool函数用来求素数 {for(int i0;i<total;i)if(k%prime[i]0)//判断素数的一种方法&#xff08;用这个数对数组当中所有的 素数 进行取余&#xf…

C++查找算法(更新中)

C的查找分为静态查找与动态查找。 静态查找&#xff1a;只是在查找表中判断是否有这一个元素&#xff0c;取出这个元素的属性。 动态查找&#xff1a;在查找过程中&#xff0c;会对查找表做出修改。 比如插入、删除。 静态查找 静态查找包括&#xff1a;顺序查找、二分查找、…

编译Linux Kernel(linux-4.19.178)并制作成rpm文件

目录 一、安装依赖项 二、下载、解压缩、制作.config文件 三、编译内核及打包 四、升级内核 首次尝试编译Linux内核&#xff0c;记录过程&#xff0c;提供Linux Kernel(linux-4.19.178)下载https://download.csdn.net/download/qpeity/15637656。 一、安装依赖项 安装依赖…

2016 多校赛3 A 水 B 期望,规律 C 各种博弈 J 物理题,积分 K 暴力,水

2016 Multi-University Training Contest 3 A - Sqrt Bo 题意&#xff1a;给一个数 n&#xff0c;问n要多少次平方后化为1&#xff0c;如果超过5次输出"TAT"。 tags&#xff1a;SB题&#xff0c;5次内平方的&#xff0c;即小于2*2*4*16*256*65536 。然后0、1特判。 #…

BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)

题意&#xff1a;就是在n*m的格子中放“炮”&#xff08;中国象棋中的棋子&#xff09;问有多少种放法&#xff0c;使得没有任意的两个炮相互攻击 思路&#xff1a;我们很容易的得到一列或者一行中最多放下两个炮&#xff08;我也只能得到这些了&#xff0c;满脑子状压&#xf…

Java中父类构造方法对子类构造方法的影响(不是一句话可以说清的)

推荐的阅读顺序是&#xff1a;先看Test类&#xff0c;再根据提示看父类和子类 让我们通过代码来了解一下&#xff1a;创建一个父类&#xff1a; public class Father{public Father(){super();//默认调用Object构造方法(Object是所有类的父类)System.out.println("父类构…

ORB_SLAM2概述

追踪线程 灰度化处理。构建当前帧&#xff08;提取每幅图像的特征点&#xff0c;并分配到网格中&#xff0c;这会极大的方便某一领域内的特征点的查找与匹配&#xff09;。单目相机初始化操作&#xff1a;通过特征点匹配&#xff0c;使用RANSACDLC计算H矩阵&#xff0c;并根据…

源同步方法与注意事项

2021年的信息安全攻防演练比2020年来的稍早了一些&#xff0c;还是一样的配方&#xff0c;还是一样的味道。检查单位的YUM源&#xff0c;发现没有CentOS 7.9的&#xff0c;排查后发现原来是中科大的rsync同步地址放生了变化&#xff0c;导致源同步失败。改一下地址就好&#xf…

Android开发教程 - 使用Data Binding(二)集成与配置

本系列目录 使用Data Binding&#xff08;一&#xff09;介绍使用Data Binding&#xff08;二&#xff09;集成与配置使用Data Binding&#xff08;三&#xff09;在Activity中的使用使用Data Binding&#xff08;四&#xff09;在Fragment中的使用使用Data Binding&#xff08…

Java封装(速读版)

封装就是使用公共方法对私有成员变量进行操作&#xff08;赋值或获取&#xff09;&#xff0c;这样做可以防止该类的代码和数据被其他类 定义的代码随意访问&#xff0c;有助于数据的安全。–我们可以通过修改成员变量的属性&#xff08;一般为private&#xff09;&#xff0c;…

C# 创建压缩文件

出处&#xff1a;http://www.cnblogs.com/sparkdev/ 在程序中对文件进行压缩解压缩是很重要的功能&#xff0c;不仅能减小文件的体积&#xff0c;还能对文件起到保护作用。如果是生成用户可以下载的文件&#xff0c;还可以极大的减少网络流量并提升下载速度。最近在一个 C# 项目…

Windows自带certutil工具校验用法

windows自带校验工具certutil&#xff0c;记录用法如下。 certutil -hashfile <file> MD5 certutil -hashfile <file> SHA1 certutil -hashfile <file> SHA256 注意MD5、SHA1、SHA256必须是大写的&#xff01;否则报错&#xff01; C:\Users\Lenovo\Downl…

C++数组名做函数形参/指针

数组名做函数形参 数组未开辟空间时 #include <iostream> using namespace std; void test(int* a) {*a 0;*(a1) 1;*(a2) 2;cout<<a[0]<<a[1]<<a[2]<<endl;return; } int main(int argc,char* argv[]) {int* a;test(a);cout<<a[0]<…

String创建方式及其区别(快速了解)

让我们来看两种赋值方式&#xff1a; 第一种&#xff1a;直接赋值 String name1 "Tom"; String name2 "Tom"; System.out.println(name1 name2);//用来判断name1和name2的地址是否相同&#xff0c;相同为true&#xff0c;不同为false //此时打印的结果…

npm 常用命令详解

本文以Windows平台上做测试&#xff0c;以gulp为示例做教程&#xff0c;出自作者白树&#xff0c;转载请声明&#xff01; 目录 npm是什么npm install 安装模块npm uninstall 卸载模块npm update 更新模块npm outdated 检查模块是否已经过时npm ls 查看安装的模块npm init 在项…

linux Mysql 安装

一、wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm二、sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm三、yum install -y mysql-server mysql mysql-devel四、systemctl start mysqld.service 五、systemctl status mysqld.service六、mysq…

==和equals()的作用及区别

""的作用是比较两个变量是否相等。 当变量是基本数据类型时&#xff0c;比较的是值是否相等的&#xff1a;相等返回true&#xff0c;不等返回false&#xff1a; double a 100.0;int b 100;System.out.println(ab);//输出结果为&#xff1a;true当变量是引用类型时…

np.dot()运算准则

数组*数组 直接点乘。 数组*多维 数组有3个元素的话&#xff0c;用(3,)表示 二维矩阵3*3用&#xff08;3,3&#xff09;表示 &#xff08;3,3&#xff09; * &#xff08;3,&#xff09;结果为&#xff08;3,&#xff09;&#xff0c;即包含3个元素的一维向量 https://blog.…

用createrepo命令创建自己的yum源

观察一下使用的各大开源软件镜像站的yum源&#xff0c;思考他们是怎么创建的呢&#xff1f;我们自己能否创建呢&#xff1f;当然能。 1、安装web服务&#xff0c;本例选择nginx。配置过程不多说&#xff0c;本例选择的根目录是/var/repos&#xff0c;添加三个选项可以看到包的…

String创建对象的个数 StringBuffer

String name1 "Tom"; //创建了一个String类型的对象 String name2 "Lu""cy"; //创建了一个String类型的对象&#xff08;先拼接后创建对象&#xff0c;所以是一个&#xff09;String str "Ja"; String name3 str "m…

第5次作业+105032014166+张珍珍

测试链接&#xff1a;http://www.cnblogs.com/wxcclub/p/6792634.html 一、被测项目界面。 二、测试用例设计表 1.等价类 等价类划分法 输入及外部条件 有效等价类 等价类编号 无效等价类 等价类编号 日期类型 数字 1 非数字 8 年 1912≤year≤2050 2 year<19…

C++ new

C中利用new操作符在堆区开辟数据 堆区开辟的数据&#xff0c;由程序员手动开辟&#xff0c;手动释放&#xff0c;释放利用操作符 delete 语法&#xff1a;new 数据类型 利用new创建的数据&#xff0c;会返回该数据对应的类型的指针 开辟单个内存 语法&#xff1a;new 数据类型…

漫画:禅道程序员的一天

更多精彩欢迎关注《海边的程序员》 转载于:https://www.cnblogs.com/xiaobai007/p/9797462.html

HA01-集群介绍

目录 一、宏观理解集群 二、微观理解集群 三、安装高可用集群环境 3.1、实验环境简介 3.2、安装集群软件并配置集群 3.3、用命令行创建集群 一、宏观理解集群 集群中的一个服务器称为一个节点node。 集群资源以mysql为例一般有&#xff1a;vip&#xff08;浮动IP&#…

Python并行编程(八):with语法

1、基本概念 当有两个相关的操作需要在一部分代码块前后分别执行的时候&#xff0c;可以使用with语法自动完成。同时&#xff0c;使用with语法可以在特定的地方分配和释放资源&#xff0c;因此&#xff0c;with语法也叫作"上下文管理器"。在threading模快中&#xff…

“抽象类”的定义及其与“普通类”的区别

我们都知道在多态中子类要重写父类的方法&#xff0c;执行时也执行子类中的方法&#xff0c;这就显得父类中的方法体有点子虚乌有了&#xff0c; 也就是说可以直接省略方法体&#xff0c;而只定义一个方法就可以了。因此&#xff0c;我们称一个没有方法体的方法为抽象方法&…

refreshcontrol 实现下拉刷新的功能

该组件实现下拉刷新的功能。不过该组件是用在ScrollView的内部的&#xff0c;为ScrollView添加一个下拉刷新的功能。当ScrollView的垂直方向的偏移量scrollY:0的时候&#xff0c;手指往下拖拽ScrollView就会触发onRefresh事件方法。 相关的属性&#xff1a; onRefresh functio…

C++二维数组名与数组指针的思考

二维数组名和数组指针可以当做一个东西用&#xff0c;但两者之间的含义是不同的。 二维数组名是一个指向数组中所有元素的指针&#xff0c;而数组指针是一个行指针。体现在sizeof()上的不同。 #include <iostream> using namespace std; int main() {// a是一个二维数组…