Linux:文件、目录相关指令-cp、mv、rm、mkdir、rmdir指令

0、常用

1)cp

cp A /tmp/A
cp -i A /tmp/A #同名覆盖,询问
cp -f A /tmp/A #同名覆盖,不询问(强制)
cp -r A /tmp/A #目录复制,复制后目录的归属人变为当前用户
cp -a A /tmp/A #目录复制,保留原归属人

cp A B C /tmp #多文件复制,目的地必须为目录

2)rm

rm -i A #删除前询问
rm -f A #删除前不询问
rm -r A #递归删除目录
rm -f 202507* #删除以202507开头的文件

3)mv

mv A /tmp #简单移动
mv A B C /tmp #一次移动多个
mv -i A /tmp #同名时询问
mv -f A /tmp #同名时强制覆盖

4)mkdir

mkdir -m 711 /data #设定权限
mkdir -p /tmp/dir1/dir2 #递归创建dir1、dir2

 

1、文件

1)cp:复制

用法:

  • cp [-adfilprsu] [--preserver=all] 源文件路径 目标文件路径

  • cp [options] 源1 源2 ... 目标文档路径

选项

选项

说明

a 相当于-dr --preserve=all,所有特性(包括所有者)完全复制
d 若源文件为链接文件,那么复制的是链接文件属性而非用文件本身的属性
f 强制,若目标文件已存在,则移除后再尝试一次
i 若目标文件已存在,则会在覆盖时先询问
l 建立硬式连结,而非复制文件本身(此时会采用执行者的特性)
p 连同文件属性一起复制,而不使用新属性
r 递归复制,用于目录的复制
s 复制成符号链接文件,即快捷方式
u 目标文件不存在或比源文件旧时才复制
--preserve=all 除了-p的权限相关参数外,还加入SELinux的属性

说明

  1. 如果有多个源文件,那么目标一定是目录;
  2. 不同身份的人执行这个指令会有不同的结果产生;
  3. cp别人的文件要先有r权限;
  4. 默认情况下,cp后的文件所有者指令操作者本身;
  5. 复制目录必须加选项-r(使用新特性,可能改变权限)或-a(保持原特性);
  6. 可以通过修改目标文件名的方式实现复制+改名;
  7. 如果执行人本身没有修改文件拥有者与群组的权限,那么即使加上-a,他也无法为复制后的文件修改拥有者群组(第三和第四部分)

 例子

①简单复制和覆盖复制

[root@study ~]# cp ~/.bashrc /tmp/bashrc
[root@study ~]# cp -i ~/.bashrc /tmp/bashrc
cp: overwrite `/tmp/bashrc'? n <==n 不覆盖,y 为覆盖

复制并改名(直接修改目标文件名即可)

cp -a wtmp dmtsai_wtmp

②复制前后的属性、特性变化

[root@study ~]# cd /tmp
[root@study tmp]# cp /var/log/wtmp . <==想要复制到当前目录,最后的 . 不要忘
[root@study tmp]# ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-r--r--. 1 root root 28416 Jun 11 19:01 wtmp

如果要保证文件特性不变,应该在复制时加入选项-a或-p,此时看起来像是源文件的镜像

[root@study tmp]# cp -a /var/log/wtmp wtmp_2
[root@study tmp]# ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 /var/log/wtmp
-rw-rw-r--. 1 root utmp 28416 Jun 11 18:56 wtmp_2

③目录复制

需要加选项-r(会改变特性)、-a或-p(保证特性不变)

[root@study tmp]# cp /etc/ /tmp
cp: omitting directory `/etc' <== 如果是目录则不能直接复制,要加上 -r 的选项
[root@study tmp]# cp -r /etc/ /tmp
[root@study tmp]# cp -a /etc/ /tmp

④连结档

硬链接、实体链接:-l,会使文件属性第二项[连接数]增加

符号链接、快捷方式:-s

[root@study tmp]# cp -s bashrc bashrc_slink
[root@study tmp]# cp -l bashrc bashrc_hlink
[root@study tmp]# ls -l bashrc*
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc <==与源文件不太一样了!
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc_hlink
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc

2)rm:删除文件或目录

用法:rm [-fir] 路径/正则路径

选项

选项

说明

f force,忽略不存在的文件,不出现警告讯息
i 互动模式,删除前询问
r 递归删除,用于目录删除(危险选项)

说明

  1. 使用正则路径,会删除所有匹配的路径

例子

①正则删除

[root@study tmp]# rm -i bashrc*
# 注意那个星号,代表的是 0 到无穷多个任意字符喔!很好用的东西!

②删除目录,与rmdir的区别

[root@study tmp]# rmdir /tmp/etc
rmdir: failed to remove '/tmp/etc': Directory not empty <== 删不掉啊!因为这不是空的目录!
[root@study tmp]# rm -r /tmp/etc

3)mv:移动(重命名)文件

用法

  • mv [-fiu] 源路径 目标路径

  • mv [options] 源1 源2 源3 ... 目标路径

选项

选项

说明

f force,如果目标文件存在,则直接覆盖
i 若目标文件存在,会询问是否覆盖
u 若目标文件存在,且源文件较新,才会覆盖

说明

  1. 如果有多个来源文件或目录,则最后一个目标文件一定是目录

例子

①常规复制、移动

例一:复制一文件,建立一目录,将文件移动到目录中
[root@study ~]# cd /tmp
[root@study tmp]# cp ~/.bashrc bashrc
[root@study tmp]# mkdir mvtest
[root@study tmp]# mv bashrc mvtest

②更名

范例二:将刚刚的目录名称更名为 mvtest2
[root@study tmp]# mv mvtest mvtest2

还有个rename指令,可以同时对多个文档更名

③一次移动多个文件

[root@study tmp]# mv bashrc1 bashrc2 mvtest2

4)touch:①创建文件;②修改文件时间

用法:touch [-acdmt] 文件

选项

选项

说明

a 修改atime
c 修改ctime
d

修改a、m时间

后接指定的时间而不用当前时间,也可以用--date="日期/时间"

m 修改mtime
t

修改a、m时间

后接指定时间而不用当前时间,格式[YYYYMMDDhhmm]

例子

①常规,新建一个空文件并观察时间

[dmtsai@study tmp]# touch testtouch
[dmtsai@study tmp]# ls -l testtouch
-rw-rw-r--. 1 dmtsai dmtsai 0 Jun 16 00:45 testtouch

②复制,并观察前后文件的时间

[dmtsai@study tmp]# touch -d "2 days ago" bashrc
[dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
Tue Jun 16 00:51:52 CST 2015
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 14 00:51 bashrc
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 14 00:51 bashrc
-rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:51 bashrc

变化的是atime和mtime,而ctime没变

 

2、目录

1)新建:mkdir

用法:mkdir [-mp] 目录名

参数

  • -m:指定该目录的权限(不然会用默认权限);
  • -p:递归建立该目录(包括它所在的上层目录)。

例子

  • -m指定目录权限
    mkdir -m 711 test1

2)rmdir:删除(空)目录(可以用rm -r起到相同的作用)

用法:rmdir [-p] 目录名

参数

  • -p:递归删除这个目录(会删除所有上层空的目录)
posted @ 2025-07-24 10:16  ShineLe  阅读(238)  评论(0)    收藏  举报