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