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

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

 

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

 

硬链接和软链接对比:

 

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 [选项]... 源文件... 目录 多个源文件只能复制到文件夹

选项说明:

 

示例

[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 [选项] … 源文件或目录… 目标文件或目录

选项说明:

 

示例:

[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 [选项] 要删除的文件或目录

选项说明:

 

示例:

[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

 

 

 

阅读剩余
THE END