Linux mkdir 命令

mkdir 命令用于创建目录,例如

mkdir test

-p 选项

如果 test 目录不存在,那么会创建这个目录,否则会提示创建失败,如下

~ $ mkdir test
mkdir: 无法创建目录"test": 文件已存在

在命令行提示创建失败,其实没有任何影响,但是在 shell 脚本中就有影响了,这个命令的退出状态是 1,表示执行失败,这会影响脚本后面的逻辑。那么有没有办法,在目录已经存在的情况下,执行 mkdir 命令不会报错呢?使用 -p 选项

~ $ ls -d test
test
~ $ mkdir -p test
~ $ echo $?
0

可以看到,在 test 目录存在的情况下,如果使用 -p 选项创建 test 目录,那么退出状态是 0,也就是命令执行成功,这在 shell 脚本中非常有用。

-p 选项其实还有另外一个作用,那就是创建多级目录

~ $ ls test/
hello.c  world.c
~ $ mkdir test/dir1/dir2
mkdir: 无法创建目录"test/dir1/dir2": 没有那个文件或目录
~ $ mkdir -p test/dir1/dir2
~ $ tree test
test
├── dir1
│   └── dir2
├── hello.c
└── world.c

2 directories, 2 files

可以看到,如果不使用 -p 选项,那么是无法创建多级目录的。

指定创建目录的权限

通过 -m 选项可以指定创建目录的权限,例如

~ $ mkdir -m 744 hello
~ $ ls -ld hello
drwxr--r-- 2 david david 4096 9月  29 15:08 hello

我们可以发现 hello 目录的权限正好对应 744 ,而并没有受 umask 值的影响。

这只是创建一级目录,如果创建的是多级目录呢?

~ $ umask 
0022
~$
~ $ mkdir -p -m 744 hello/world/david
~$
~ $ ls -ld hello/world/
drwxr-xr-x 3 umi umi 4096 9月  29 15:16 hello/world/
~$
~ $ ls -ld hello/world/david/
drwxr--r-- 2 umi umi 4096 9月  29 15:16 hello/world/david/

通过mkdir -p -m 744 hello/world/david 创建了两个目录 world 和 david,但是只有 david 目录的权限才是指定的 744,而 world 目录是 755,这是因为 world 目录受 umaks 影响了。

因此如果在创建多级目录时,指定了权限,那么这个权限是赋予了最深的一层目录,而父目录的权限是按系统的方式(受umask影响)。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值