最近一直在折腾新服务器,虽然之前也玩过一阵Ubuntu,但仅仅只是玩过,深入了解的东西不多,很多学过的东西都忘得差不多了,导致现在使用起来很吃力,只能靠搜索引擎现学现用了。今天就记录一下umask的简单用法,方便以后用时查阅。
umask设置
现在服务器用的是sFTP来给服务器传输文件,使用过程中发现一个问题,就是从本地上传文件到服务器后,服务器端的文件夹权限是775,文件权限是664,但是出于安全考虑,想让上传到服务器的文件夹自动设置权限为755,文件权限为644。搜索了相关资料,在Linux系统下修改默认文件夹和文件的默认权限需要用到umask,使用这个命令可以查看当前的默认权限设置:
umask
输出结果一般是4位数字,如 0002、0022等,这个数字对应的权限可以到百度百科关于 umask 的说明中查看。常用的umask值代表的默认文件和目录的权限如下(0022跟022含义是一样的):
umask 值 | 文件 | 目录 |
---|---|---|
0022 | 644 | 755 |
0027 | 640 | 750 |
0002 | 664 | 775 |
0006 | 660 | 771 |
0007 | 660 | 770 |
对照上表,为了实现默认文件权限644,目录权限755的需求,我们运行这个命令:
umask 0022
但是设置完成后,发现新上传的文件权限还是664,说明还没修改成功,接着还需要再编辑一下当前用户目录下的 .bashrc 文件
cd ~
vim .bashrc
在该文件中另起一行,输入:umask 022
保存后,重启sshd即可:
sudo service sshd restart
批量设置目录和文件权限
另外,如果文件已经上传,想批量修改目录和文件的权限该怎么做呢?我们可以使用以下命令:
# 对当前目录下所有的子目录及以下目录都设置成为 755权限
find . -type d -exec chmod 755 {} ;
# 对当前目录下的所有文件设置 644的权限。
find . -type f -exec chmod 644 {} ;
参考文章
- What is Umask and How To Setup Default umask Under Linux?
- Linux批量修改目录和文件权限
- 配置 bash 默认的 umask 更改 SFTP 上传文件的权限