今天做shell脚本,来自动更新web项目版本,但是遇到了一个问题
一开始百度查找原因,没找到,百思不得其解,后来在qq群里求助,热心的群友告诉我,是不是这个文件被锁定了,建议我用chattr -i命令,于是我开始学习chattr
以下介绍摘自菜鸟教程
Linux chattr命令用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- u:预防以外删除。
语法
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
参数
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。
chattr -i的意思就是关闭"i"选项所对应的功能:不得任意更动文件或目录.
chattr -i .user.ini,再尝试chown www:www .user.ini,可以了.
其实这个文件不可以被chown,因为这个.user.ini是php的配置文件.不可以随意改动
以下是官方手册描述
.user.ini 文件
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR
和 PHP_INI_USER
模式的 INI 设置(注释1)可被识别。
两个新的 INI 指令,user_ini.filename 和 user_ini.cache_ttl 控制着用户 INI 文件的使用。
user_ini.filename 设定了 PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。默认值是 .user.ini。
user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。
注释1.
配置文件(php.ini)在 PHP 启动时被读取。对于服务器模块版本的 PHP,仅在 web 服务器启动时读取一次。对于 CGI 和 CLI 版本,每次调用都会读取。
php的配置可以在不同情况下被设置。有的配置既可以在php.ini中设置,也可以在php脚本中设置(使用 ini_set函数),有的配置只能在php.ini或者httpd.conf中.
例如 output_buffering指令是属于 PHP_INI_PERDIR,因而就不能用 ini_set() 来设定。但是 display_errors指令是属于 PHP_INI_ALL 因而就可以在任何地方被设定,包括 ini_set() 。
下表摘自手册
模式 | 含义 |
---|---|
PHP_INI_USER | 可在用户脚本(例如 ini_set() )或 Windows 注册表(自 PHP 5.3 起)以及 .user.ini 中设定 |
PHP_INI_PERDIR | 可在 php.ini,.htaccess 或 httpd.conf 中设定 |
PHP_INI_SYSTEM | 可在 php.ini 或 httpd.conf 中设定 |
PHP_INI_ALL | 可在任何地方设定 |