文件管理命令

mkdir命令

创建目录

使用方法:mkdir [参数] [目录…]

省略号代表可以建立多个目录

例如:建立一个 demo 目录

  • 在根目录下建立:mkdir /demo
  • 在当前目录下建立:mkdir ./demo “./“可以省略
  • 建立多个目录:mkdir demo1 demo2 demo3
  • 如果目录已存在,建立会失败
1
2
root@CHJ-20190520VPS:/# mkdir home
mkdir: cannot create directory ‘home’: File exists

参数的使用

-p

一次创建多级目录,既父目录不存在先创建父目录

1
2
3
4
5
6
7
8
9
10
11
12
root@CHJ-20190520VPS:/# mkdir -p a/b/c/d
root@CHJ-20190520VPS:/# ls -R /a
/a:
b

/a/b:
c

/a/b/c:
d

/a/b/c/d:

相比Windows,我们发现命令行的好处就在于可以一次创建多级目录

-v

显示目录创建的过程

1
2
3
root@CHJ-20190520VPS:/# mkdir -p -v /e/f
mkdir: created directory '/e'
mkdir: created directory '/e/f'

rmdir命令

删除目录

使用方法:rmdir [目录…]

注意:rmdir 只能删除空的目录,删除非空目录会失败,必须逐级删除目录中的文件

1
2
root@CHJ-20190520VPS:/# rmdir a
rmdir: failed to remove 'a': Directory not empty

rm命令

删除文件或目录

使用方法:rm [参数] [目录…]

参数的使用

-i

交互模式,在删除前询问用户是否操作

-r

如果删除的是目录,则需要使用此参数,作用是即使目录是非空的,也能逐级删除,但是每一级都要手动确认

-f

即使原档案属性设为唯读,亦直接删除,无需逐一确认。

特别需要注意这条命令,注意他的目录是可以写多个的,如果我们的命令写成 “rm -r -f / a “,既 不小心在 “/“ 与 “a” 之间多了一个空格,那么系统下所有的文件都会被删除,而且不会有任何提示。

所以我们在使用此项命令时一定要留意检查,避免操作失误

-r -f 可以合并使用:

1
2
3
4
5
root@CHJ-20190520VPS:/# mkdir -p a/b/c/d/f/e
root@CHJ-20190520VPS:/# rm -rf a
root@CHJ-20190520VPS:/# ls
bin boot dev e etc home init lib lib64 media mnt opt proc root run sbin snap srv sys tmp usr var
root@CHJ-20190520VPS:/#

cp命令

文件复制命令,copy简写

使用方法:

  • cp [参数] [文件…] 目录
  • cp [参数] [文件] 文件…目录

参数的使用

-r

当我们直接使用cp命令复制目录的时候,是会失败的,因为cp命令本身是只复制文件,递归复制,用于目录的复制操作

1
2
3
4
5
root@CHJ-20190520VPS:/# cp a /tmp
cp: -r not specified; omitting directory 'a'
root@CHJ-20190520VPS:/# cp -r a /tmp
root@CHJ-20190520VPS:/# ls /tmp
a

-v

复制时显示复制信息,类似进度条,直接复制文件的时候不会有任何提示

1
2
root@CHJ-20190520VPS:/# cp -v /filea /tmp
'/filea' -> '/tmp/filea'

-p

与文件的属性一起复制,而非使用默认属性,例如文件创建更新时间

-a

与文件的属性一起复制,包括文件的属主,权限等

1
2
3
4
5
6
root@CHJ-20190520VPS:/# cp -v -a filea /tmp
'filea' -> '/tmp/filea'
root@CHJ-20190520VPS:/# ls -l /tmp/filea
-rw-r--r-- 1 root root 0 Jul 13 18:47 /tmp/filea
root@CHJ-20190520VPS:/# ls -l filea
-rw-r--r-- 1 root root 0 Jul 13 18:47 filea

-i

若目标文件已存在,在覆盖时会先询问是否真的操作

1
2
3
root@CHJ-20190520VPS:/# cp -v -a -i filea /tmp
cp: overwrite '/tmp/filea'? yes
'filea' -> '/tmp/filea'

注意词命令的第二种语法

表示将文件复制并重命令为自定义名称

1
2
3
4
5
root@CHJ-20190520VPS:/# cp -v -a -i -r filea /tmp/fileb
'filea' -> '/tmp/fileb'
root@CHJ-20190520VPS:/# ls /tmp
a filea fileb
root@CHJ-20190520VPS:/#

mv命令

mv命令有两个功能,一个是文件及文件夹的移动功能,另一个是重命名功能

使用方法: mv [参数] 源文件 目录…文件名

重命名演示:

1
2
3
4
root@CHJ-20190520VPS:/# mv filea fileb
root@CHJ-20190520VPS:/# ls
a boot e fileb init lib64 mnt proc run snap sys usr
bin dev etc home lib media opt root sbin srv tmp var

注意:重命名的本质其实就是将文件移动

移动演示:

1
2
3
root@CHJ-20190520VPS:/# mv fileb /tmp
root@CHJ-20190520VPS:/# ls /tmp
a filea fileb

还可以移动并重命名,使用命令: mv filea /tmp/filec

通配符的使用

*

*号表示匹配当前目录下所有目录及文件

使用示例,例如我们在 /tmp 目录下创建三个文件 filea、filebb、fileccc,然后使用通配符将此三个文件复制到其他目录下

1
2
3
4
5
6
root@CHJ-20190520VPS:/tmp# ls
a dira dirb dirc filea fileb filec
root@CHJ-20190520VPS:/# cp /tmp/file* /
root@CHJ-20190520VPS:/# ls
a boot e filea fileccc init lib64 mnt proc run snap sys usr
bin dev etc filebb home lib media opt root sbin srv tmp var

?

? 号与 * 作用相同,但是它只匹配一个字符,* 匹配多个字符

1
2
3
4
5
6
7
8
9
10
11
root@CHJ-20190520VPS:/# ls
a boot e home lib media opt root sbin srv tmp var
bin dev etc init lib64 mnt proc run snap sys usr
root@CHJ-20190520VPS:/# ls /tmp/file*
/tmp/filea /tmp/filebb /tmp/fileccc

root@CHJ-20190520VPS:/# cp -v /tmp/file? /
'/tmp/filea' -> '/filea'
root@CHJ-20190520VPS:/# ls
a boot e filea init lib64 mnt proc run snap sys usr
bin dev etc home lib media opt root sbin srv tmp var

通过示例我们发现这里只复制过来 filea 目录,所以 ? 表示只匹配一个字符

注意上面我们使用ls命令也是用了通配符,表示通配符可以在很多命令中使用

最后更新: 2019年07月14日 13:53

原始链接: https://jjw-story.github.io/2019/07/11/文件管理命令/

× 请我吃糖~
打赏二维码