Linux操作之目录和文件管理

Linux操作之目录和文件管理

Linux文件类型

在Linux系统中,基本上所有的目录和设备都是以文件的形式存在的。

1. 普通文件

纯文本文件、二进制文件、数据格式的文件、压缩文件都是此类,第一个属性为【-】

2. 目录文件

类似于windows中的目录,能用cd命令进入,第一个属性为【d]

3. 设备文件

a.块设备文件,即存储数据以供系统存取的接口设备,第一个属性为【b】
b,字符设备文件,即串行端口的接口设备,第一个属性为【c]

4. 管道文件

特殊文件类型,主要是用来解决多个程序同时存取一个文件所造成的错误,第一个属性为【p】

5. 链接文件

a.软链接文件,类似于windows下的快捷方式
b.硬链接文件

Linux目录结构

Linux系统都有根文件系统,它包含系统引导和使其他文件系统得以挂载所必要的文件。Linux系统的目录是分层的树状结构,都是挂载在根文件系统"/"下

目录 描述
/home 包含Linux系统中各用户的主目录,子目录默认以该用户命名
/root 是root用户的主目录
/bin 包含常用的命令文件,不能包含子目录
/sbin 包含系统管理员和root用户所使用的命令文件
/dev 包含大部分的设备文件,比如磁盘、光驱等
/lib 包含Linux系统的共享文件和内核模块文件。/lib/modules目录存放核心可加载模块
/lib64 包含64版本Linux系统的共享文件和内核模块文件
/tmp 包含一些临时文件
/mnt 手动为某些设备(比如硬盘)挂载提供挂载目录
/boot 包含Linux系统的内核文件和引导装载程序的文件
/opt 包含某些第三方应用程序的安装设备
/media 由系统自动为某些设备(一般为光盘、U盘等设备)挂载提供挂载目录
/var 该目录存放不经常变化的数据,如系统日志、打印队列、DNS数据库文件等
/etc 包含Linux系统上大部分的配置文件,建议修改配置文件之前先备份
/usr 包含可以供所有用户使用的数据和程序
/srv 存储一些服务启动之后所需要取用的资料目录
/run 一个临时文件系统,一些程序或服务启动之后,会将它们的PID放置在该目录中
/sys 在Linux系统提供热插拔能力的同时,该目录包含所检测到的硬件设置,它们会被转换成/dev目录中的设备文件
/proc 是一个虚拟的文件系统,它不存在磁盘中,而是由内核在内存中产生的,用于提供系统的相关信息。 /proc/cpuinfo :该文件保存计算机CPU信息。 /proc/filesystems:该文件保存Linux文件系统信息 /proc/ioports:该文件保存计算机I/O端口号信息 /proc./version:该文件保存Linux系统版本信息 /proc/meminfo :该文件保存计算机内存信息

文件和目录操作

1. pwd

用于显示工作目录,执行该指令可立刻得知你目前所在工作目录的绝对路径名称
在这里插入图片描述

2. cd

用于更改用户的工作目录路径。工作路径可以使用绝对路径或相对路径,绝对路径从/(根)开始,然后循序到所需的目录下,相对路径从当前目录开始。"~“也表示home目录的意思,”.“则是表示目前所在的目录,”…"则表示目前目录位置的上一层目录。

cd  具体路径
cd  ./
cd ../
cd ~
cd

在这里插入图片描述

3. ls

显示指定工作目录下的内容,对于目录而言将列出其中的所有子目录和文件信息;对于文件而言,将输出其文件名以及所要求的其他信息。

ls [选项][文件名]
相关选项 功能
-a 显示全部的文件,包含隐藏文件(开头为.的文件)也一起罗列出来,这是最常用的选项之一
-A 显示全部的文件,连同隐藏文件,但不包括.与…这两个目录
-d 仅列出目录本身,而不是列出目录内的文件与数据
-f ls会默认以文件名排序,使用-f选项会直接列出结果,而不进行排序
-F 在文件或目录后加上文件类型的指示符号
-h 以人们易读的方式显示文件或目录大小
-i 显示inode节点信息
-l 使用长格式列出文件或目录信息
-n 以UID或GID分别代替文件用户名和群组名显示出来
-r 将排序结果反向输出
-R 连同子目录内容一起列出来,等于将该目录下的所有文件都显示出来
-S 以文件容量大小排序,而不是以文件名排序
-t 以时间排序,而不是以文件名排序
–color=never 不依据文件特性给予颜色显示
–color=always 显示颜色,是默认方式
–color=auto 表示让系统自行依据配置来判断是否给予颜色
–full-time 以完整时间模式(包含年、月、日、时、分)输出
–time=(atime,ctime) 输出acess时间或改变权限事件,而不是内容变更时间

PS:常用的不常用的全在上面,先一个个试试呗,常用的就看看,不常用的用的时候百度一下即可。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
PS:root模式下,一样的,就不用放图了。

4. touch

该指令用于创建空文件以及更改文件的时间。

touch [选项] [文件]   #语法
touch --help   #个人觉得这个最有用

在这里插入图片描述
PS:基本操作-a和-m,我不会用,自己练习也没有成功过。。。

5. mkdir

该指令可在Linux系统中创建目录

mkdir [-p] dirname   #语法,-P确保了目录实际存在,不存在的就建一个

在这里插入图片描述
PS:大致就是这样,但查询创建的目录,我还没有学习到

6. rmdir

用于删除空目录

rmdir [-p] dirname   #语法,-P是当子目录被删除后使它也成为空目录的话,则顺便一并删除

在这里插入图片描述
PS:很清晰的可以看到当目录非空时,无法删除该目录,只能先将该子目录删掉之后再来删除该目录。

7. rm

用于删除系统中的文件或目录

rm [选项][文件|目录]
rm -i  #删除前逐一询问确认
rm -f  #即使原档案属性设为只读,也直接删除,无需一一确认
rm -r  #将目录及以下的档案逐一删除

在这里插入图片描述
PS:这里rm -r奏效,我去试试root模式下的情况
在这里插入图片描述

8. cp

复制文件和目录到其他文件中。如果指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该新目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。

cp [选项][源文件|目录][目标文件|目录]
相关选项 功能
-a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容
-d 复制时保留链接
-f 覆盖已经保存的目标文件而不给出提示
-i 在覆盖文件之前给出提示,要求用户确认是否覆盖,回答”y“时目标文件将被覆盖
-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中
-r 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件
-l 不复制文件,只是生成链接文件。

9. mv

对文件和目录更改名称以及移动文件和目录的路径

mv [选项][源文件|目录][目标文件|目录]
相关选项 功能
-i 若指定目录已有同名文件,则先询问是否覆盖旧文件
-f 在mv操作要覆盖某已有的目标文件时不给任何提示

10. locate

用于查找符合条件的文件,不搜索具体目录,而是搜索一个数据库(/var/lib/located),这个数据库中含有所有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用该命令之前,先使用updatedb命令,手动更新数据库。

locate [option] filename
相关选项 功能
-r 使用正则表达式作为搜索条件
-i 忽略大小写
-c 显示查找到的条目数
-d 用DBPATH替代默认的数据库

在这里插入图片描述

11. find

在目录结构中搜获文件,并执行指定的操作。从指定的目录开始,递归地搜索其各个子目录,查找满足寻找条件我文件,可以指定文件的名称、类别、时间、大小以及权限等不同信息的组合,只有完成相符的文件才会被列出来。

find [路径][选项]
相关选项 功能
-name 查找名为filename的文件
-perm 按执行权限来查找
-user username 按文件属主来查找
-group groupname 按组来查找
-mtime -n +n 按文件更改时间来查找文件,-n指n天之内,+n指n天之前
-atime -n +n 按文件访问时间来查GIN:Opx
-ctime -n +n 按文件创建时间来查找文件,-n指n天之内,+n指n天之前
-nogroup 查无有效属组的文件
-nouser 查无效属主的文件
-newer f1 !f2 查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f 查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] 查长度为n或n字节的文件
-depth 使查找在进入子目录前先行查找完本目录
-fstype 查位于某一类型文件系统中的文件
- mount 查文件时不跨越文件系统mount点
-follow 如果遇到符号链接文件,就跟踪链接所指的文件
-cpio % 查位于某一类型文件系统中的文件
-cpio] 对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune 忽略某个目录
-amin 查找在系统中最后N分钟访问的文件
- mmiin 查找在系统中最后N分钟里修改过的文件

按照文件名检索

find -name  #按照文件名搜索
find -iname #按照文件名搜索,不区分文件名大小
find -inum  #按照inode号搜索

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS:进来root模式下进行该指令,这样应该有足够的权限查询

根据文件类型检索

find -type f       #在当前工作目录下查找所有普通文件
find -type d       #在当前工作目录下查找所有目录文件
find /dev -type c      #从dev目录下查找所有字符设备文件
find /dev -type b       #从dev目录下查找所有块设备文件
find /dev -type b -iname '*sd*'       #从dev目录下查找块设备和文件名包含sd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

根据所有者和所属组搜索

find -user root #在当前目录下查找所有者是root的文件
find -user 用户名 #在当前目录下查找所有者是对应用户名的文件
find / -group root #在根目录下查找所属组为root文件
find / -nouser #在根目录下查找所有无主文件
find / -nogroup #在根目录下查找所有没有所属组的文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
PS:个人建议,第二个查找用户名对应的指令,别轻易尝试,有点多

根据文件搜索大小搜索

find / -size +50M
find / -size -50M
find / -size +50M -size -50M
find / -nouser
find . -empty

在这里插入图片描述
在这里插入图片描述
PS:前面三个没有成功,原因在于后面那个是大写的m,empty尽量别试

根据时间查找文件和目录(天为单位)

find / -mtime -5 #查找第五天之内修改过的文件
find / -mtime  5 #查找第五天修改过的文件
find / -mtime +5 #查找五天以前修改过的文件
find / -mtime  0 #查找24小时修改过的文件

五天内修改的文件挺多
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS:我昨天才重装的虚拟机,我也不知道会有这么多修改的文件

根据时间查找文件和目录(分钟为单位)

find / -mmin -5 #查找五分钟之内修改过的文件
find / -mmin 5 #查找第五分钟修改过的文件
find / -mmin +5 #查找五分钟以前修改过的文件
find / -mmin 1 #查找一分钟修改过的文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
PS:我也不知道,几分钟之内,我修改的文件有这么多,多半是自动记录或者修改的吧,我不背锅。。。

按照权限搜索

相关选项 功能
-perm 权限模式 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式 查找文件权限刚好全部包含“权限模式”的文件
-perm +权限模式 查找文件权限刚好包含“权限模式”的任意一个权限的文件

逻辑运算符

相关选项 功能
-a and逻辑与
-o or逻辑或
-not not逻辑非

对查找出来的文件执行其他命令

 - exec cpmmand {}\;  #command代表要执行的命令,{}代表前面find查找出来的文件名,;exec语句结束符号,必须要,不能省略

12. whereis

用于查找文件,只能用于查找二进制文件、源代码文件和man手册页。

whereis [option] filename
相关选项 功能
-b 只查找
-B<目录> 只在设置的目录下查找二进制文件
-f 不显示文件名前的路径名称
-m 只查找说明文件
-M<目录> 只在设置的目录下查找说明文件
-s 只查找原始代码文件
-S<目录> 只在设置的目录下查找原始代码文件
-u 查找不包含指定类型的文件

在这里插入图片描述

13. which

在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。即使用该命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which [option] filename
相关选项 功能
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p 与-n参数相同,但此外包括了文件的路径
-w 指定输出时栏位的宽度
-V 显示版本信息举例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链接文件

EXIT 4 文件系统

该系统会把分区主要分为两大部分,小部分用于保存文件的inode(i节点)信息;剩余的大部分用于保存block信息。

每个文件都独自占用一个inode,文件内容由inode的记录来指向;如果想要读取文件的内容,就必须借助目录中的记录文件名找到该文件的inode,才能成功找到文件内容所在的block块。

inode

默认大小为128Byte,用来记录文件的权限、文件的所有者和属组、文件的大小、文件的状态改变时间、文件的最近一次读取时间、文件的最后一次修改时间、**文件的数据真正保存的block编号。**每个文件需要占用一个inode。

block

大小可以为1KB,2KB,4KB,默认为最后一个。用于实际的数据存储

分类

一般可分为软链接和硬链接。

软链接

软链接可以链接目录。

软链接可以跨分区。

软链接会新建自己的inode信息和block,只是在block中不存储实际文件数据,而存储的是源文件的文件名和inode好。

不论是修改源文件,还是修改链接文件,另一个文件中的数据都会发生改变。

删除软链接文件,源文件不受影响。

删除源文件,软链接文件将找不到实际的数据,从而显示文件不存在。

硬链接

硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode号是重新计算的。

硬链接不能链接目录。因为如果给目录建立链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的Linux来讲过于复杂。

硬链接不会建立新的inode信息,也不会更改inode的总数。

不论是修改源文件,还是修改硬链接文件,另一个文件中的数据都会发生改变。

不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。

相关命令

ln命令用于给文件创建链接。

ln [选项]源文件(实实在在的文件)目标文件(链接文件)
相关选项 功能
-s 建立软链接文件。如果不加该选项,则建立硬链接文件
-f 强制,如果目标文件已经存在,则删除目标文件后再建立链接文件

一般举例
在这里插入图片描述
在这里插入图片描述
硬链接举例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
软链接举例
在这里插入图片描述

原创文章 66 获赞 100 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44735533/article/details/105234025