今天作shell脚本,来自动更新web项目版本,可是遇到了一个问题php
一开始百度查找缘由,没找到,百思不得其解,后来在qq群里求助,热心的群友告诉我,是否是这个文件被锁定了,建议我用chattr -i命令,因而我开始学习chattrweb
如下介绍摘自菜鸟教程shell
Linux chattr命令用于改变文件属性。服务器
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有如下8种模式:函数
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
-R 递归处理,将指定目录下的全部文件及子目录一并处理。学习
-v<版本编号> 设置文件或目录版本。spa
-V 显示指令执行过程。.net
+<属性> 开启文件或目录的该项属性。code
-<属性> 关闭文件或目录的该项属性。server
=<属性> 指定文件或目录的该项属性。
chattr -i的意思就是关闭"i"选项所对应的功能:不得任意更动文件或目录.
chattr -i .user.ini,再尝试chown www:www .user.ini,能够了.
其实这个文件不能够被chown,由于这个.user.ini是php的配置文件.不能够随意改动
如下是官方手册描述
自 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 | 可在任何地方设定 |