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
注意:
当文件正在被其他人使用时,也是可以删除的,但是空间不会释放。其他人退出使用该文件后空间会被释放。