〇、前言

本文首先介绍了 Linux 中文件的结构,将全部文件夹罗列并介绍了大概的用途;

然后通过实例介绍了文件夹相关的常用操作,仅供参考。

一、Linux 系统的文件结构

列一下系统全部文件夹:

/ 文件系统的入口,最高一级目录
/bin 【基础系统命令】基础系统所需要的命令位于此目录,如:ls、cp、mkdir 等二进制可执行命令
/sbin 【系统管理命令】存放的是系统管理员使用的管理程序
/boot 包含 【Linux 内核及系统引导程序】所需要的文件
/dev 【设备文件】存储目录,比如声卡、磁盘等
/etc 存放【系统程序或者一般工具】的管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 普通【用户默认存放目录】,它们以 /home/username 的方式存在
/lib 【库文件】存放目录,这里包含了系统程序所需要的所有共享库文件,作用类似 windows 里的 .dll 文件
/lost+found 这个目录平时是空的,系统【非正常关机而留下“无家可归”的文件】(windows下叫什么.chk)就在这里
/media 【即插即用型存储设备】的挂载点,自动在这个目录下创建
/mnt 一般是用于【让用户临时挂载其他的文件系统】
/opt 表示的是【可选择的意思】,有些软件包也会被安装在这里
/proc 操作系统运行时,【进程信息、硬件信息】存放在这里,可直接访问这个目录来获取系统信息
/root 系统管理员用户 root 的主目录
/sbin 大多是涉及【系统管理的命令】的存放,是超级权限用户 root 的可执行命令
/tmp 公用【临时文件】目录,有时用户运行程序的时候,会产生临时文件
/var 某些大文件的溢出区,比如用来存放【系统日志】的目录
/usr 最庞大的目录,【要用到的应用程序和文件】几乎都在这个目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc Linux 文档
/usr/include Linux 下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux 内核的源代码就放在 /usr/src/linux 里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库

二、文件夹相关操作

2.1 cd 切换当前文件夹

cd cd 后为空,表示回到 [root@localhost ~]# ,即:/root
cd /usr/local cd 后跟绝对路径,直接进入,无论当前在哪个文件夹
cd local/projectname cd 后跟相对路径,以当前文件夹为基础,进入相对路径,和当前所在文件夹紧密相关
cd .. 两个点,表示返回上一级文件夹
cd ../.. 表示返回上两级文件夹

通过 pwd 命令查看当前文件夹路径:

[root@localhost ~]# cd  ..
[root@localhost /]# cd
[root@localhost ~]# pwd
/root
[root@localhost ~]#

2.2 mkdir 创建文件夹

mkdir [-p] [Linux路径]
  • Linux 路径必填,即:要创建的文件夹的路径,相对或绝对路径均可。
  • -p 选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录。

关于路径:

  • 开头为 /:表示绝对路径。如:/usr/local/projectname/v1.0
  • 开头为文件夹名称:表示相对路径。如:projectname/v1.0

测试一下:(当所创建的目录跨级别时,不加 -p 参数会创建失败,以及绝对路径和相对路径)

[root@localhost local]# mkdir /usr/local/projectname/v1.0
mkdir: cannot create directory ‘/usr/local/projectname/v1.0’: No such file or directory
[root@localhost local]# mkdir -p /usr/local/projectname/v1.0
[root@localhost local]# ls
bin etc games include lib lib64 libexec projectname sbin share src usr
[root@localhost local]# mkdir -p projectname/v2.0
[root@localhost local]# cd projectname
[root@localhost projectname]# ls
v1.0 v2.0
[root@localhost projectname]#

2.3 创建文件的三种方法:">"重定向符号、touch、echo

touch [Linux 路径]
  • 其中唯一的参数,要新增的文件路径,必填。
[root@localhost /]# cd usr/local/projectname/v1.0
[root@localhost v1.0]# > jsons.json
[root@localhost v1.0]# touch logs.log
[root@localhost v1.0]# echo "文件初始内容" >chinatext.txt
[root@localhost v1.0]# ls
chinatext.txt logs.log text.txt
[root@localhost v1.0]# ls -l
total 8
-rw-r--r-- 1 root root 19 Nov 6 16:53 chinatext.txt
-rw-r--r-- 1 root root 0 Nov 6 16:44 jsons.json
-rw-r--r-- 1 root root 0 Nov 6 16:34 logs.log
[root@localhost v1.0]# cat chinatext.txt
文件初始内容
[root@localhost v1.0]#

2.4 复制、移动、删除文件或文件夹

2.4.1 概念解析:硬连接(Hard Link)、符号链接(Symbolic Link)(软链接)

硬链接

文件还是同一个,只是入口不同,删除某一个入口,不影响源文件,只有删掉最后一个链接,文件才会被彻底删除。

创建一个与原文件任何信息都相同的目标文件(文件名可能不同,可自由设定),只有路径不同。一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除某一个链接不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。文件夹无法创建硬链接。不能跨分区创建。

// 命令:
ln filepath1 filepath2
// filepath2 是对 filepath1 的硬连接
// 当删掉 filepath1 时,filepath2 仍然有效

软链接

相当于创建了一个指向原文件的“快捷方式”,其中索引信息,创建日期等均不相同。源文件删除后,快捷方式也就无效了。

这个软连接文件实际上是一个文本文件,其中包含的有另一文件的位置信息。可以跨分区创建,但是对文件夹无效。

// 命令:
ln -s  filepath1 filepath2
// filepath2 是对源目录 filepath1 的软连接
// 当删掉源目录 filepath1 时,filepath2 无效

2.4.2 cp 复制/粘贴

cp [选项] [路径1-源] [路径2-目标]

选项内容可省略,详情如下:

  • -d:当复制符号链接(软链接)时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
  • -l:对源文件建立硬链接,而非复制文件;(Hard Link)
  • -s:对源文件建立符号链接(软链接),而非复制文件;(Symbolic Link)
  • -f:强行复制文件或目录,不论目标文件或目录是否已存在;
  • -i:覆盖既有文件之前先询问用户;
  • -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
  • -b:覆盖已存在的文件目标前将目标文件备份;
  • -v:详细显示命令执行的操作。

路径1 为源文件路径,路径2 为目标路径。

如下测试,通过 -r 配置选项,将文件夹 v1.0 以及其下的文件,全部复制到 v2.0 文件夹中:

[root@localhost projectname]# cd v1.0
[root@localhost v1.0]# ls
chinatext.txt logs.log text.txt
[root@localhost v1.0]# cd ../
[root@localhost projectname]# cd v2.0
[root@localhost v2.0]# ls
[root@localhost v2.0]# cd ../
[root@localhost projectname]# ls
v1.0 v2.0
[root@localhost projectname]# cp v1.0/chinatext.txt v2.0/chinatext.txt
[root@localhost projectname]# cd v2.0
[root@localhost v2.0]# ls
chinatext.txt
[root@localhost v2.0]# cat chinatext.txt
文件初始内容
[root@localhost v2.0]# cd ../
[root@localhost projectname]# cp -r v1.0 v2.0
[root@localhost projectname]# cd v2.0
[root@localhost v2.0]# ls
chinatext.txt v1.0
[root@localhost v2.0]#

参考:https://www.cnblogs.com/uncle-qi/p/9359741.html   

2.4.3 mv 移动/重命名

mv [路径1] [路径2]

路径1 表示被移动的文件或文件夹;路径2 标识要移动到的目标位置,若目标文件不存在则按照路径中名字移动,若已存在则提示确认替换。

[root@localhost v1.0]# cat text.txt
文件初始内容
[root@localhost v1.0]# >textnull.txt
[root@localhost v1.0]# ls
textnull.txt text.txt
[root@localhost v1.0]# mv textnull.txt text.txt
mv: overwrite ‘text.txt’?
[root@localhost v1.0]# cat text.txt
文件初始内容
[root@localhost v1.0]# mv textnull.txt text.txt
mv: overwrite ‘text.txt’? y
[root@localhost v1.0]# cat text.txt
[root@localhost v1.0]# ls
text.txt
[root@localhost v1.0]#

2.4.4 rm 删除

rm [选项] filepath1 filepath2 filepath3 ... filepathN

选项有三种,如下:

  • -f:强制删除(force),系统不再提示确认,而是直接删除目标文件或目录,和 -i 选项相反。
  • -i:和 -f 相反,在删除文件或目录之前,系统会逐一询问,输入 y 回车确认删除,防止误删。
  • -r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。

filepath1:表示文件路径,可同时列出多个路径通过空格分隔,一次性删除。

下面是一个删除文件夹 v2.0 及其下子文件夹及文件的实例:

[root@localhost v1.0]# ls
jsons.json temp.txt textnull.txt text.txt v2.0 xmls.xml
[root@localhost v1.0]# rm -r v2.0
rm: descend into directory ‘v2.0’? y
rm: remove regular file ‘v2.0/chinatext.txt’? y
rm: descend into directory ‘v2.0/v1.0’? y
rm: remove regular empty file ‘v2.0/v1.0/text.txt’? y
rm: remove regular empty file ‘v2.0/v1.0/logs.log’? y
rm: remove regular empty file ‘v2.0/v1.0/jsons.json’? y
rm: remove regular file ‘v2.0/v1.0/xmls.xml’? y
rm: remove regular file ‘v2.0/v1.0/chinatext.txt’? y
rm: remove regular empty file ‘v2.0/v1.0/temp.txt’? y
rm: remove directory ‘v2.0/v1.0’? y
rm: remove directory ‘v2.0’? y
[root@localhost v1.0]# ls
jsons.json temp.txt textnull.txt text.txt xmls.xml
[root@localhost v1.0]#

参考:https://www.cnblogs.com/KeFeng/p/17300667.html                   

2.5 文件查找 find

文件查找有两种关键字:locate(非实时查找)、find(实时查找)。

locate 命令的优点是查找速度快,因为它实际上是在一个名为 /var/lib/mlocate/mlocate.db 的特殊数据库中查找文件。这个数据库会定期更新,因此它可以快速找到文件的位置。但是,由于 locate 命令依赖于这个数据库,所以如果文件是在最近一次数据库更新之后创建或删除的,locate 命令可能找不到它们。因此除非是性能要求非常高的场景,建议直接用 find 命令。本章节也主要以 find 为例进行介绍。

find 是实时查找工具,通过遍历指定路径完成文件查找。

特点:实时查找、精确查找、查找速度较 locate 略慢、查找条件丰富、可能只搜索用户具备的读取和执行权限目录。

find [选项]...[查询路径] [查找条件] [处理动作]
  • 查找路径:指定具体目标路径,默认为当前目录。
  • 查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件。
  • 处理动作:对符合条件的文件做操作,默认输出到屏幕。

根据文件名查找:

// 语法示例:
find [起始路径] -name "被查找文件名"
// -name 选项表示,按照文件名搜索
// -iname 选项表示,按照文件名搜索,且不区分大小写
// 在被查找文件名参数上,支持使用通配符 * 来做模糊查询

根据文件大小查询:

// 语法示例:
find [起始路径] -size +/-n[kMG] "被查找文件名"
// +,- 表示大于和小于,缺省标识【等于】
// n 表示大小数字
// kMG 表示大小单位,k(小写字母)表示 kb,M 表示 MB,G 表示 GB
// 示例:
find / -size -10k // 查找小于 10KB 的文件
find / -size 10k // 查找等于 10KB 的文件
find / -size +100M // 查找大于 100MB 的文件

通过正则表达式查询:

// 语法示例:(查询文件后缀为 json 或 txt 的全部文件)
find [起始路径] -type f -regex '.*\(\.json\|\.txt\)'
// type 参数:f 代表普通文件,d 代表目录,l 代表符号链接,b 代表块设备文件,c 代表字符设备文件,p 代表管道文件,s 代表套接字文件
// regex 参数:正字表达式内容

多条件复合查询:

// 与:-a(默认多个条件是与关系)
// 或:-o
// 非:-not
// 语法示例:(查询类型为文件或路径)
find [起始路径] -type f -o -type d
// 语法示例:(查询类型为 txt 后缀的文件或包含 test 的路径)
find [起始路径] -type f -regex '.*\.txt' -o -type d -regex '.*test'

按时间查询:

// 语法示例:
// 【近一天】修改过的文件:
find [起始路径] -type f -mtime -1
// -mtime:单位为【天】
// 【近十分钟】修改过的文件:
find [起始路径] -type f -mmin -10
// -mmin:单位为【分钟】

文件查询详情可参考:https://www.cnblogs.com/cn-leoblog/p/15707078.html        

Linux 文件夹和文件操作【Linux 常用命令系列一】的更多相关文章

  1. Linux下常用设置文件和文件夹读写权限操作

    1.查看权限 ls -l xxx.xxx (xxx.xxx是文件名)   2.常见权限 -rw------- (600) 只有所有者才有读和写的权限 -rw-r--r-- (644) 只有所有者才有读 ...

  2. linux安装PyCharm,PyCharm常用快捷键及调试模式,pycharm里面对文件夹或者文件进行重命名

    PyCharm常用快捷键及调试模式 2017年10月18日 23:13:43 菜鸟之神 阅读数:5835    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  3. Linux中在主机上实现对备机上文件夹及文件的操作的C代码实现

    需求描写叙述 编敲代码.完毕在主机上实现对备机上文件夹及文件的操作. 比如,主机为A,备机为B,要求编写的程序运行在A机上,该程序实如今B机上创建文件文件夹及复制文件的操作. 需求分析 我们先不考虑用 ...

  4. Linux 文件操作相关常用命令

    1.创建文件夹 [root@izwz9148jq0xmzrb36r113z 20190726]# mkdir aaa //创建aaa文件夹 2.创建文件 [root@izwz9148jq0xmzrb3 ...

  5. Linux上统计文件夹下文件个数以及目录个数

    对于linux终端用户而言,统计文件夹下文件的多少是经常要做的操作,于我而言,我会经常在谷歌搜索一个命令,“如何在linux统计文件夹的个数”,然后点击自己想要的答案,但是有时候不知道统计文件夹命令运 ...

  6. linux 批量设置文件夹755 文件644权限

    linux 批量设置文件夹755 文件644权限 文件来源 http://www.111cn.net/sys/linux/109724.htm 本文章来为各位介绍一篇关于linux 批量设置文件夹75 ...

  7. 在Linux中要修改一个文件夹或文件的权限

    在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...

  8. albert1017 Linux下压缩某个文件夹(文件夹打包)

    albert1017 Linux下压缩某个文件夹(文件夹打包) tar -zcvf /home/xahot.tar.gz /xahottar -zcvf 打包后生成的文件名全路径 要打包的目录例子:把 ...

  9. Linux 删除文件夹和文件的命令

    linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字-r 就 ...

  10. Linux下查看文件和文件夹大小的df和du命令

        转自:http://www.yayu.org/look.php?id=162 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比 ...

随机推荐

  1. C 语言编程 — 变量与常量

    目录 文章目录 目录 前文列表 变量与常量 变量 变量的类型 变量的声明 变量的定义 变量的初始化与赋值 常量 整型常量 浮点型常量 字符型场景 字符串常量 符号常量 作用域 存储类 auto 修饰符 ...

  2. redis持久化存储数据(rdb和aof)

    rdb持久化存储数据 总的 redis持久化 防止数据丢失,持久化到本地,以文件形式保存 持久化的方式 ,两种 aof和 rdb模式 1.触发机制, - 手动执行save命令 - 或者配置触发条件 s ...

  3. Linux使用宝塔面板发布.NetCore3.1

    1,安装宝塔面板 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0 ...

  4. Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能

    前言 在 SwaggerUI 中加入登录验证,是我很早前就做过的,不过之前的做法总感觉有点硬编码,最近 .Net8 增加了一个新特性:调用 MapSwagger().RequireAuthorizat ...

  5. 低代码与 Echarts 融合:开启智能可视化的创新浪潮

    前言 在当今数字化时代,数据的价值愈发凸显,企业和组织需要有效地利用数据来作出战略决策和优化业务流程.可视化是一种强大的工具,可以将复杂的数据以直观的方式展现出来,帮助用户更好地理解和分析数据.近年来 ...

  6. Java中File类和I/O

    目录 File 类 File 构造方法 输入输出(I/O) 字节流与字符流 输入流与输出流 输入输出字节流 构造方法 方法 InputStream 基本方法 public int read() thr ...

  7. react的反向代理

    在配置在src文件夹中setupProxy.js文件,并通过npm安装http-proxy-middleware,代理中间件模块 npm i -S http-proxy-middleware 配置反向 ...

  8. OpenSpeedTest-Server局域网速度测试服务程序

    OpenSpeedTest-Server局域网速度测试服务程序,局域网测速.

  9. EF 从设计器改为 DB First时遇到 Keyword not supported: 'data source'.

    EF 从设计器改为 DB First时遇到 Keyword not supported: 'data source'. 解决方法: 把providerName="System.Data.En ...

  10. vue bus传参

    新建一个js文件,命名为bus.js.bus.js文件的内容为: import Vue from 'vue' const bus = new Vue() export default bus 页面de ...