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