今天作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 | 可在任何地方設定 |