Linux目录和文件管理:mkdir、touch、cp、mv、rm

简介: 1 创建文件名最长255个字节包括路径在内文件名称最长4095个字节除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用

1 创建

  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 除了斜杠和NULL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引
    号来引用

1.1 创建目录 mkdir

mkdir(make direction) 创建文件夹

命令格式:

mkdir [选项] 目录位置及名称…

-p 递归创建多层目录,当上级目录不存在时,会按目录层级自动创建目录。

[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
02月  09:26:53  07日  2022年  CST  星期一
复制代码


1.2 创建文件 touch

touch命令格式:

  • touch 文件名称(可为空)
  • touch 文件若已存在,不会破坏已有文件,会更新时间

每个文件有三个时间戳:

  • access time 访问时间,atime,读取文件内容
  • modify time 修改时间,mtime,改变文件内容(数据)
  • change time 改变时间,ctime,元数据发生改变(文件大小、权限等属性)
[root@localhost data]# touch  1 2 3      //创建新文件,或空的新文件
[root@localhost data]# ls
1  2  3
[root@localhost data]# echo "" > 4      //创建4的空文件
[root@localhost data]# ls
1  2  3  4 
[root@localhost bin]# stat /etc/passwd       //查看三种时间
  文件:"/etc/passwd"
  大小:2337       块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:9381005     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2021-08-28 22:53:51.539000016 +0800
最近更改:2021-08-27 16:48:55.881739056 +0800
最近改动:2021-08-27 16:48:55.881739056 +0800
[root@localhost bin]# touch /etc/passwd      //刷新三种时间
[root@localhost bin]# stat /etc/passwd
  文件:"/etc/passwd"
  大小:2337       块:8          IO 块:4096   普通文件
设备:fd00h/64768d Inode:9381005     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2021-08-29 01:43:01.305128380 +0800
最近更改:2021-08-29 01:43:01.305128380 +0800
最近改动:2021-08-29 01:43:01.305128380 +0800
创建时间:-
[root@localhost data]# touch `date`  //创建含有当天日期、时间的文件
[root@localhost data]# ls
02月  09:26:53  07日  2022年  CST  星期一
复制代码


1.3 创建链接文件 ln

1.3.1 硬链接

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

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

注意事项:

  • 硬链接只能对已存在的文件进行创建 。
  • 不支持给目录创建硬链接;
  • 不支持跨分区创建硬链接。
  • 硬链接文件不占用存储空间。
  • 修改源文件或者目标文件,对应另外一个文件也会发生相应修改。
  • 删除源文件或者目标文件,对另外一个文件没有影响。


1.3.2 软链接

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

注意事项:

  • 可对不存在的文件或目录创建软链接,可交叉文件系统。
  • 删除源文件无法访问,再新建同名文件后依然可以访问。

硬链接和软链接对比:

对比项 硬链接 软链接
本质 本质是同一个文件 本质不是同一个文件
inode 和源文件相同 和源文件不同
链接数 创建新的硬链接,链接数会增加;删除硬链接,链接数减少 删除新建不会改变
目录 不支持 支持
删除源文件 只是链接数减一,但链接文件的访问不受影响 无法访问链接文件
文件类型 和源文件相同 链接文件,和源文件无关
文件大小 和源文件相同 源文件的路径的长度


1.3.3 创建硬链接和软链接

ln命令格式:

  • ln 源文件 目标文件:创建硬链接文件
  • ln -s 源文件 目标文件:创建软连接文件

硬链接示例:

[root@localhost data]# ln /data/f1.txt /data/f11.txt    //给文件创建硬链接
[root@localhost data]# ls
f1.txt  f11.txt
[root@localhost data]# ln /data/f1.txt  /boot/f111.txt      //不能跨分区创建硬链接
ln: 无法创建硬链接"/boot/f111.txt" => "/data/f1.txt": 无效的跨设备连接
[root@localhost tmp]# ln /tmp/ceshi  ceshi01       //不支持给目录创建硬链接
ln: "/tmp/ceshi": 不允许将硬链接指向目录
复制代码


软链接示例:

[root@localhost test]# ln -s file1.txt  soft.txt     //给文件创建软链接
[root@localhost test]# ls
file1.txt  soft.txt
[root@localhost test]# ln -s /tmp/dir01  dir02       //给目录创建软链接
[root@localhost test]# ls
file1.txt  soft.txt  dir02
[root@localhost lianjie2]# find file99.txt
find: ‘file99.txt’: 没有那个文件或目录
[root@localhost lianjie2]# ln -s file99.txt soft99.txt    //可对不存在的文件或目录创建软链接
[root@localhost lianjie2]# ls
file1  file2  hard.txt  soft1  soft99.txt  soft.txt
复制代码


1.3.4 硬链接数

每创建一个硬链接,链接数增加1个;删除后硬链接,链接数相应减少。

1)普通文件的硬链接数

[root@localhost dir01]# ll   //查看硬链接数,1.txt的硬链接为1,是它自己
总用量 0
-rw-r--r--. 1 root root 0 2月  15 16:01 1.txt
[root@localhost dir01]# ln 1.txt /tmp/1hard.txt    //给1.txt创建硬链接
[root@localhost dir01]# ll   //查看文件属性,硬链接数变为2
总用量 0
-rw-r--r--. 2 root root 0 2月  15 16:01 1.txt
[root@localhost dir01]# rm -rf /tmp/1hard.txt   //删除硬链接文件
[root@localhost dir01]# ll   //查看文件属性,硬链接数变回1
总用量 0
-rw-r--r--. 1 root root 0 2月  15 16:01 1.txt
复制代码


2)目录的硬链接数

硬链接不支持对目录创建,但查看目录属性,会发现也有链接数,是因为目录自身会统计一次,目录内的“.” 也表示自身又统计一次,另外二层子目录内的“..”也表示该目录,同样会统计在内。

[root@localhost etc]# ls -dl    //查看/etc目录的硬链接数为138
drwxr-xr-x. 138 root root 8192 2月  15 15:10 .
[root@localhost etc]# find -maxdepth 1 -type d|wc -l   //统计/etc的二层子目录数为137(包含.)
137
#/etc目录的二层子目录数为137(包含.),加上/etc本身为1,故/etc目录的硬链接数为138
复制代码



2 复制cp


cp(copy)备份

cp命令格式

  • cp [选项]… 源文件 目标 相当改名复制
  • cp [选项]... 源文件... 目录 多个源文件只能复制到文件夹

选项说明:

选项 说明
-f 覆盖目标同名文件或目录时不进行提醒,直接强制复制
-i 覆盖目标同名文件或目录时提醒用户确认
-p 复制时保持源文件的权限、属主及时间标记等属性不变(但不保留软链接文件)
-r 复制目录时必须使用此选项,表示递归复制所有文件及子目录
-a 完整保留所有的信息(保留软链接属性)
-v 可视化
-u 相当于增备,差异备份(只针对文件夹)
-b 当目标文件存在时,先进行备份再覆盖(只保留最近)
-s 复制成为符号连结文件 (symbolic link),亦即”快捷方式“档案; 作用为创建新的符号链接文件,指向原符号链接文件,能保证链接文件可以使用


示例:

[zhangsan@localhost ~]$ ll
#张三用户新建文件
总用量 0
-rw-rw-r--. 1 zhangsan zhangsan 0 8月  29 11:17 zhansan
[root@localhost zhangsan]# cp -a zhansan /data/     //保留所有权限,包括软链接文件
[root@localhost data]# ll
总用量 0
-rw-r--r--. 1 root     root     0 8月  29 11:06 1
-rw-rw-r--. 1 zhangsan zhangsan 0 8月  29 11:17 zhansan
[root@localhost data]# cp -r /etc/ /opt/            //复制目录需要加-r 
[root@localhost data]# cp -r /etc/ /opt/etc.bak     //复制并改名
[root@localhost data]# cp -r /etc/ /opt/etc.bak     //复制后变成etc.bak 的子目录
[root@localhost data]# cp -r /etc/ /opt/etc.bak     //目录内有相同名称子目录,系统会询问要不要覆盖,cp是别名 加\cp 直接覆盖
[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

mv(move) 移动或改名

mv命令格式:

mv [选项] … 源文件或目录… 目标文件或目录

选项说明:

选项 说明
-f 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-n 如果目标文件已经存在,则不会覆盖移动,而且不询问用户
-v 显示文件或目录的移动过程


示例:

[root@localhost test]# mv bbb aaa      //将目录bbb改名为aaa
[root@localhost test]# mv aaa /tmp     //将目录aaa移动到/tmp目录下
复制代码


如果源文件为多个,则目标必须是目录:

[root@localhost test]# mv 1.txt 2.txt  file01.txt   //源文件为多个时目标必须是目录,否则系统会报错
mv: 目标"file02" 不是目录
[root@localhost test]# mv 1.txt 2.txt  /tmp/aaa    //将多个文件移动到/tmp/aaa目录下
[root@localhost test]# ls /tmp/aaa
1.txt  2.txt
复制代码


-i:默认选项,当目标文件存在时,提示是否覆盖

[root@localhost test]# which mv             //查看mv命令,发现mv=mv -i
alias mv='mv -i'
        /usr/bin/mv
[root@localhost test]# ls /tmp/aaa
1.txt  2.txt
[root@localhost test]# mv 1.txt /tmp/aaa     //当目标文件存在时,提示是否覆盖 
mv:是否覆盖"/tmp/aaa/1.txt"?
复制代码


4 删除rm

rm(remove)命令格式:

rm [选项] 要删除的文件或目录

选项说明:

选项 说明
-f 删除前不作询问,直接强制删除
-i 删除前逐一询问确认
-r 递归删除,将指定目录下的所有文件和子目录一并删除


示例:

[root@localhost ~]# rm -rf /     //操作十分危险,系统拒绝执行
rm: 在"/" 进行递归操作十分危险
rm: 使用 --no-preserve-root 选项跳过安全模式
[root@localhost ~]# rm -rf /data/*     //删除/data/目录下所有文件
[root@localhost ~]# rm -rf /data /*    //注意和上一步之间的区别误操作,这样操作等于删根
复制代码


-i:默认选项,系统在删除前会询问是否删除。

[root@localhost test]# rm  1.txt
rm:是否删除普通空文件 "1.txt"?
复制代码


-f:强制删除,删除前不做询问

[root@localhost test]# ls
1.txt  2.txt
[root@localhost test]# rm -f  1.txt   //删除前不做询问,强制删除
[root@localhost test]# ls
2.txt
复制代码


-r:删除目录时要加-r,将指定目录下的所有文件和子目录一并删除

[root@localhost test]# ls
2.txt aaa
[root如何删除特殊的文件localhost ceshi]# rm aaa        //删除目录时如果不加-r,系统会报错
rm: 无法删除"aaa": 是一个目录
[root@localhost test]# rm -rf aaa    //删除目录时要加-r
[root@localhost test]# ls
2.txt
复制代码


删除特殊的文件,需要加路径或--

[root@localhost test]# touch ./-f   //创建-开头的文件
[root@localhost test]# ls
2.txt -f
[root@localhost test]# rm -f -f    //无法删除,文件还是存在
[root@localhost test]# ls
2.txt  -f
[root@localhost test]# rm -f ./-f   //需要加路径,加路径后可删除
[root@localhost test]# ls
2.txt
[root@localhost test]# touch ./-f
[root@localhost test]# rm -- -f     //加--也可删除
rm:是否删除普通空文件 "-f"?y


相关文章
|
3月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
1月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
56 2
|
1月前
|
存储 Linux
Linux文件管理(超详细讲解)
Linux文件管理(超详细讲解)
131 5
|
1月前
|
Linux
Linux的cp命令如何使用?
Linux的cp命令如何使用?
59 5
|
2月前
|
Linux
深入理解Linux中的cp命令:文件与目录的复制利器
深入理解Linux中的cp命令:文件与目录的复制利器
|
3月前
|
存储 Linux Shell
Linux 导航和文件管理
Linux 导航和文件管理
19 0
|
Shell Linux 数据安全/隐私保护
|
5天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
22 3
|
5天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
17 2
|
12天前
|
缓存 监控 Linux