Linux目录操作-增删改查【mkdir、touch、ln、cp、mv、rm】

109 阅读8分钟

增、删、改、查\color{blue}{增、删、改、查}

1. 创建

1.1 mkdir 创建新目录

命令格式\color{red}{命令格式 } : mkdir [选项] 目录位置及名称....

命令效果
-p递归建立
-v显示过程
[root@localhost data]# mkdir a b c d         //创建多个目录
[root@localhost data]# ls
a  b  c  d
[root@localhost data]# mkdir -p aaa/bbb/cccc    //递归创建目录
[root@localhost data]# ls
a  aaa  b  c  d
​
[root@localhost data]# tree        //以树状图形式列出目录的内容,显示出文件目录结构
.
├── a
├── aaa
│   └── bbb
│       └── cccc
├── b
├── c
└── d
​
[root@localhost data]# mkdir `date`    //创建含有当天日期、时间的目录
[root@localhost data]# ls
03月  16:32:27  28日  2024年  CST  星期四

1.2 touch 创建空文件

命令格式\color{red}{命令格式} : touch 文件名.....

  • 文件已存在 : touch作用是 刷新文件时间
  • 文件不存在 : touch作用是 新建文件 (空文件)

1.3 ln 创建链接文件

为文件或目录建立链接文件,类似于windows系统的快捷方式

链接文件类型分为硬链接和软链接

1.3.1 硬链接

命令格式\color{red}{命令格式} : ln 源文件(绝对路径) 硬链接位置

多了一种找到文件的方法 ( 无法对文件夹做硬链接 )

硬链接(hard link, 也称链接 )就是一个文件的一个或多个文件名, 把文件名和计算机文件系统使用的节点号链接起来。可以将它理解为一个 “指向原始文件 inode 的指针”, 系统不为它分配独立的 inode 和 文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。

硬链接引用的是文件在文件系统中的物理索引(也称为inode)。当移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。

1.3.2 软链接

命令格式\color{red}{命令格式} : ln -s 源文件(绝对路径) 软连接位置

软链接又叫符号链接,这个文件包含了另一个文件的路径名。 可以是任意文件或目录,可以链接不同文件系统的文件。

1.3.3 两者区别

对比项硬链接软链接
本质本质是同一个文件本质不是同一个文件
inode(身份证号)相同不同
连接数创建新的硬链接,链接数会增加,删除硬链接,链接数减少删除,新建都不会改变
文件夹不支持支持
删除源文件只是链接数减一,但链接文件的访问不受影响无法访问连接文件
文件类型和源文件相同链接文件,和源文件无关
文件大小和源文件相同(指向硬盘上的同一个文件)源文件的路径的长度
  • 注意!只用软连接,不用硬连接

2. 复制

cp 复制文件或目录

命令格式\color{red}{命令格式} :cp [选项]... 源文件 存放点/可以改名也可以不改名

命令效果
-i提醒覆盖
-f不提醒,强制覆盖
-p保留权限的复制 (有缺陷)
-a  更强大的保留权限(完整保留所有的信息),可以替代-r
-r递归复制所有文件及子目录 (复制文件夹一定要加)
 -u相当于增备,差异备份(只对文件夹起作用)
[root@localhost data]# cp  /etc/passwd  /etc/shadow  /opt            //复制多个文件时目标必须是目录,不能是文件,且目录要存在。
[root@localhost data]# cp  /etc/passwd  /etc/shadow  /opt/f111.txt   //复制多个文件时目标如果不是目录,系统会提示无法复制。
cp: 目标"/opt/f111.txt" 不是目录

3. 移动 / 改名

mv (move) 移动或改名 / 移动并改名

命令格式\color{red}{命令格式} :mv [选项] 源文件 目的地

选项效果
-f强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-n如果目标文件已经存在,则不会覆盖移动,而且不询问用户
-v显示文件或目录的移动过程
  • 源文件不改变路径就是 改名 ( 不可以批量改名,只能一个个改;想批量改名需要写脚本 )
  • 源文件改变路径就是 移动 ( 也可以移动并且修改名字 )

mv移动并改名.png

rename 可以批量修改统一制式(后缀名)文件

命令格式\color{red}{命令格式} :rename 旧字符 新字符 目标文件

rename.png

4. 删除

rm (remove) 删除文件或目录

命令格式\color{red}{命令格式} :rm [选项] 要删除的文件或目录

选项效果
-r递归((删除目录时要加-r,将指定目录下的所有文件和子目录一并删除))
-f强制
  • 删除文件后空间不释放:有别的用户在使用这个文件,造成空间不释放,其他人退出使用该文件后空间会被释放。

shred

命令格式\color{red}{命令格式} :shred [选项]... 文件...

rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件

5.查找

which 查找命令所在位置

命令格式\color{red}{命令格式} :which 命令(常用外部命令)

搜索范围由环境变量 PATH决定 (echo $PATH).在PATH变量指定的路径中,搜索某个系统命令的位置 。

which.png

whereis

命令格式\color{red}{命令格式} :whereis 命令

用来查找命令的具体位置。可以查看到二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

locate 查找文件

命令格式\color{red}{命令格式} : locate [选项] 待查找文件

选项效果
-i不区分大小写的搜索
-n N只列举前N个匹配项目

找到是系统中的数据库

  • 缺点:不是实时查找,为模糊查找
  • 优点:快,可以在搜寻数据库时快速找到档案

find 精确查找

命令格式\color{red}{命令格式} : find [查找范围] [查找条件表达式] [处理动作]

  • 范围:你要找的文件范围,不写就是默认在当前文件夹
  • 条件表达式: 选项 + 表达式,描述你要找的文件
  • 处理动作:对找到的文件进行处理(删除,复制,移动,显示)

常用查找条件类型

查找类型关键字说明
按名称查找-name根据目标文件的名称进行查找,允许使用“*”及“?”通配符 -iname "文件名称" 不区分大小写
按文件大小查找-size根据目标文件的大小进行查找 ,一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 ;常用的容量单位包括 kB(注意 k 是小写)、MB、GB
按文件属主查找-user根据文件是否属于目标用户进行查找
按文件类型查找-type根据文件的类型进行查找 ,文件类型包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等
按时间戳查找-mtimefind  /  -mtime  +30      //查找根下大于30天的文件   (现阶段就记住这一个)
按inode号-inum根据文件inode号查找
  • 按名称查找
[root@localhost data]#find  /etc/  -name  "*.conf"  

-name   区分大小写
-iname  不区分大小写
  • 按文件大小查找
[root@test1 opt]# find -size 1k          //查找(0,1]k的文件

find -size 1G:查找的是从0G到1G,不包括0G,即(01]。
find -size 2G:查找的是从1G到2G,不包括1G,即(12]。
find -size 1024M:查找的是从1023M到1024M,不包括1023M,即(10231024]。

find -size 1024M 和 1G 一样么?
1024M 表示 1023M ~ 1024M,不包括 1023M。
1G 表示 0G ~1G,不包括 0G。
故使用 find -size 1024M 查找更加精准。

10k、-10k、+10k的大小范围分别是多少?
-size 10k :表示9k到10k,包括10k、不包括9k,即(910]
-size -10k :表示9k以内,包括9k,即 [09]
-size +10k :表示10k以上,不包括10k,即(10,+∞)
  • 按时间查找
find  /  -mtime  +30      //查找根下大于30天的文件
  • 按inode号查找

inode号查找.png

  • 找到文件并删除的三种方式
 find -name "*.img"  -delete               
 find -name "*.img"  -exec rm -rf {} \;
 find -name "*.img"  | xargs rm -rf

使用find命令实现多个查找条件

各表达式之间使用逻辑运算符

-a  and  与
-o  or   或
-not  或 !   取反 (指除了XXX)
【-a 优先级比 -o 高】

处理动作

处理动作效果
-print默认的处理动作,显示至屏幕
-fls file查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-ls类似于对查找到的文件执行"ls -dils"命令格式输出
-delete删除查找到的文件,慎用!
-exec COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令
-ok COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
{}用于引用查找到的文件名称自身
```举例
找到/var/log目录下 30天以上 大于1G 以log结尾的普通文件
find  /var/log  -mtime +30  -size +1G  -name  “*log”  -type f

找到/var/log目录下 30天以上 大于1G 以log结尾的普通文件 移动到/data
find  /var/log  -mtime +30  -size +1G  -name  “*log”  -type f  -exec  mv { }  /data  \