Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
:如何對我存放在 /var/www/html/
目錄中的所有文件設置只讀權限?
你可以使用 chmod
命令對 Linux/Unix/macOS/OS X/*BSD 操作系統上的所有文件來設置只讀權限。這篇文章介紹如何在 Linux/Unix 的 web 服務器(如 Nginx、 Lighttpd、 Apache 等)上來設置只讀文件權限。
如何設置文件為只讀模式
語法為:
### 僅針對文件 ###
chmod 0444 /var/www/html/*
chmod 0444 /var/www/html/*.php
如何設置目錄為只讀模式
語法為:
### 僅針對目錄 ###
chmod 0444 /var/www/html/
chmod 0444 /path/to/your/dir/
# ***************************************************************************
# 假如 web 服務器的用戶/用戶組是 www-data,文件擁有者是 ftp-data 用戶/用戶組
# ***************************************************************************
# 設置目錄所有文件為只讀
chmod -R 0444 /var/www/html/
# 設置文件/目錄擁有者為 ftp-data
chown -R ftp-data:ftp-data /var/www/html/
# 所有目錄和子目錄的權限為 0445 (這樣 web 服務器的用戶或用戶組就可以讀取我們的文件)
find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 "{}"
找到所有 /var/www/html
下的所有文件(包括子目錄),鍵入:
### 僅對文件有效 ###
find /var/www/html -type f -iname "*" -print0 | xargs -I {} -0 chmod 0444 {}
然而,你需要在 /var/www/html
目錄及其子目錄上設置只讀和執行權限,如此才能讓 web 服務器能夠訪問根目錄,鍵入:
### 僅對目錄有效 ###
find /var/www/html -type d -iname "*" -print0 | xargs -I {} -0 chmod 0544 {}
警惕寫權限
請注意在 /var/www/html/
目錄上的寫權限會允許任何人刪除文件或添加新文件。也就是說,你可能需要設置一個只讀權限給 /var/www/html/
目錄本身。
### web根目錄只讀 ###
chmod 0555 /var/www/html
在某些情況下,根據你的設置要求,你可以改變文件的屬主和屬組來設置嚴格的權限。
### 如果 /var/www/html 目錄的擁有人是普通用戶,你可以設置擁有人為:root:root 或 httpd:httpd (推薦) ###
chown -R root:root /var/www/html/
### 確保 apache 擁有 /var/www/html/ ###
chown -R apache:apache /var/www/html/
關于 NFS 導出目錄
你可以在 /etc/exports
文件中指定哪個目錄應該擁有只讀或者讀寫權限 [1]。這個文件定義各種各樣的共享在 NFS 服務器和他們的權限。如:
# 對任何人只讀權限
/var/www/html *(ro,sync)
# 對192.168.1.10(upload.example.com)客戶端讀寫權限訪問
/var/www/html 192.168.1.10(rw,sync)
關于用于 MS-Windows客戶端的 Samba(CIFS)只讀共享
要以只讀共享 sales
,更新 smb.conf
,如下:
[sales]
comment = Sales Data
path = /export/cifs/sales
read only = Yes
guest ok = Yes
關于文件系統表(fstab)
你可以在 Unix/Linux 上的 /etc/fstab
文件中配置掛載某些文件為只讀模式。
你需要有專用分區,不要設置其他系統分區為只讀模式。
如下在 /etc/fstab
文件中設置 /srv/html
為只讀模式。
/dev/sda6 /srv/html ext4 ro 1 1
你可以使用 mount
命令重新掛載分區為只讀模式[2](使用 root 用戶)
# mount -o remount,ro /dev/sda6 /srv/html
或者
# mount -o remount,ro /srv/html
上面的命令會嘗試重新掛載已掛載的文件系統到 /srv/html
上。這是改變文件系統掛載標志的常用方法,特別是讓只讀文件改為可寫的。這種方式不會改變設備或者掛載點。讓文件變得再次可寫,鍵入:
# mount -o remount,rw /dev/sda6 /srv/html
或
# mount -o remount,rw /srv/html
Linux:chattr 命令
你可以在 Linux 文件系統上使用 chattr
命令改變文件屬性為只讀[3],如:
chattr +i /path/to/file.php
1.EditorConfig和Prettier一樣,都是用來配置格式化你的代碼的,這個格式化代碼,要和你lint配置相符!否則會出現你格式化代碼以后,卻不能通過你的代碼校驗工具的檢驗。
2.讓使用不同編輯器的開發者在共同開發一個項目時“無痛”地遵循編碼規范(編碼風格),就可以使用EditorConfig插件,會在項目根目錄尋找.editorconfig文件并使用其中定義的編碼風格。 默認配置
[*]
charset=utf-8
indent_style=space
indent_size=2
end_of_line=lf
insert_final_newline=true
trim_trailing_whitespace=true
語法
通配符
* 匹配除/之外的任意字符串
** 匹配任意字符串
? 匹配任意單個字符
[name] 匹配name中的任意一個單一字符
[!name] 匹配不存在name中的任意一個單一字符
{s1,s2,s3} 匹配給定的字符串中的任意一個(用逗號分隔)
{num1..num2} 匹配num1到num2之間的任意一個整數, 這里的num1和num2可以為正整數也可以為負整數
屬性
所有的屬性和值都是忽略大小寫的. 解析時它們都是小寫的
indent_size 用一個整數定義的列數來設置縮進的寬度,如果indent_style為tab,則此屬性默認為tab_width
tab_width 用一個整數來設置tab縮進的列數。默認是indent_size
end_of_line 設置換行符,值為lf、cr和crlf
charset 設置編碼,值為latin1、utf-8、utf-8-bom、utf-16be和utf-16le,不建議使用utf-8-bom
trim_trailing_whitespace 設為true表示會去除換行行首的任意空白字符。
insert_final_newline 設為true表示使文件以一個空白行結尾
root 表示是最頂層的配置文件,發現設為true時,才會停止查找.editorconfig文件
1.EditorConfig和Prettier一樣,都是用來配置格式化你的代碼的,這個格式化代碼,要和你lint配置相符!否則會出現你格式化代碼以后,卻不能通過你的代碼校驗工具的檢驗。
2.當我們使用右鍵格式化的時候,就會自動幫我們補全符號,但是,有些符號在eslint中就會報語法錯誤,那我們需要怎么辦呢?可以通過.prettierrc來進行文件配置
{
"semi": false, // 使用分號, 默認true
"singleQuote": true, // 使用單引號, 默認false(在jsx中配置無效, 默認都是雙引號)
"bracketSpacing": true // 對象中的空格 默認true
}
在使用腳手架搭建項目時,會自動生成.browserslistrc文件,該文件只要是 配置兼容瀏覽器
對于部分配置參數做一些解釋:
" >1%" :代表著全球超過1%人使用的瀏覽器
“last 2 versions” : 表示所有瀏覽器兼容到最后兩個版本
“not ie <=8” :表示IE瀏覽器版本大于8(實則用npx browserslist 跑出來不包含IE9 )
“safari >=7”:表示safari瀏覽器版本大于等于7
1.項目根目錄下創建.env、.env.development和.env.production三個文件,文件名解釋分別如下: .env 無論開發環境還是生產環境都會加載的配置文件 .env.development 開發環境加載的配置文件 .env.production 生產環境加載的配置文件
2.環境變量的簡單使用示例。需要注意,配置文件里的屬性名必須以VUE_APP_開頭,比如在.env文件這樣聲明一個環境變量:
VUE_APP_QQQ=`QQ`
然后就可以在代碼里這樣用了:
console.log(process.env.VUE_APP_QQQ) // -> `QQ`
// .env
VUE_APP_QQQ=`QQ`
// .env.development
VUE_APP_QQQ=`WW`
// .env.production
VUE_APP_QQQ=`RR`
那么首先,Vue在啟動時,無論是在開發環境還是在生產環境,它始終都會加載.env文件里的內容,然后(劃重點)=>根據Node環境變量’NODE_ENV’的值來選擇加載’development’還是’production’。
比如我們平常通過npm run serve啟動時,我們本地系統的環境變量NODE_ENV 值默認是development,這時就會先后加載.env和.env.development這兩個文件。
而當我們打包到服務器后,服務器的NODE_ENV值一般為production,則此時Vue仍會先加載.env文件,然后加載.env.production文件。
其次,在按順序加載文件時,Vue會把后一個加載的文件內容和前面加載的文件內容進行比較,如果存在變量名相同,那么它會采用后一個文件里的變量值為變量的最終值。
拿上面三個文件內容打個比方:我們在日常開發時,NODE_ENV值是development,那么Vue就會首先加載.env文件里的內容,然后繼續加載.env.development文件里的內容。那么我們發現變量名VUE_APP_QQQ存在多個,這時Vue就會采用后一個文件里的變量值為變量的最終值。因此我們通過console輸出看一看。
console.log(VUE_APP_QQQ) // -> `WW`
module.exports={
root: true,
parser: 'babel-eslint',
parserOptions: {
//設置"script"(默認)或"module"如果你的代碼是在ECMAScript中的模塊。
sourceType: 'module'
},
env: {
browser: true,
},
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
extends: 'standard',
// required to lint *.vue files
plugins: [
'html'
],
// add your custom rules here
'rules': {
// allow paren-less arrow functions
'arrow-parens': 0,
// allow async-await
'generator-star-spacing': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV==='production' ? 2 : 0,
"no-unused-vars": [2, {
// 允許聲明未使用變量
"vars": "local",
// 參數不檢查
"args": "none"
}],
// 關閉語句強制分號結尾
"semi": [0],
//key值前面是否要有空格
"key-spacing": [0, {
"singleLine": {
"beforeColon": false,
"afterColon": true
},
"multiLine": {
"beforeColon": true,
"afterColon": true,
"align": "colon"
},
//空行最多不能超過100行
"no-multiple-empty-lines": [0, {"max": 100}],
//關閉禁止混用tab和空格
"no-mixed-spaces-and-tabs": [0],
//數組第一個指定是否啟用這個規則,第二個指定幾個空格
"indent":[1,2],
}
其中的rules是配置規則的
配置參數
rules: {
"規則名": [規則值, 規則配置]
}
規則值
"off"或者0 //關閉規則關閉
"warn"或者1 //在打開的規則作為警告(不影響退出代碼)
"error"或者2 //把規則作為一個錯誤(退出代碼觸發時為1)
常見規則列表
Rust 編程語言中,target 目錄是由 Cargo(Rust 的包管理和構建工具)自動生成的。它主要用于存放構建輸出的產物文件和相關的編譯期產生的中間文件等。但是 target 目錄往往會非常大,即使一個簡單的 hello world 程序,就已經達到 9 MB 了。
可能一個比較簡單的項目,會達到 1 GB 多。甚至有些網友調侃——如果電腦硬盤太小,可能學不了 Rust。
另外當電腦中的 Rust 項目太多時,無法管理 target 目錄。其實我們可以指定所有項目統一的 target 目錄。下面將以 Windows 操作系統為例演示。
首先在 C:\Users\用戶名\.cargo\ 目錄下,找到 config.toml 文件。如果在該目錄下沒有 config.toml 文件,則需要創建該文件。如下圖所示:
注意:config 文件也有可能沒有擴展名,如 config,又或者是其它擴展名,如 config.txt,配置文件的擴展名不重要,重要的是文件名稱必須是 config。
在文件中添加下面的配置信息:
[build]
target-dir="D:/my-target"
上面的配置是指定所有項目的統一 target 目錄為 D:/my-target。如下圖:
我們再次編譯項目,查看項目根目錄和 D:/my-target 目錄,如下圖:
可以看到,在項目的工程目錄已經沒有 target 目錄,真正的 target 目錄已經被我們指定為 D:/my-target 目錄了。
下面是一個簡單項目的 target 目錄,讓我們看下它會包含什么呢?
target 目錄包含以下幾個子目錄和文件:
target/debug:
target/release:
target/doc:
target/.fingerprint:
target/package:
其他臨時文件和目錄:
統一存放 target 文件既有優點也有缺點:
優點
緩存復用:
如果多個項目使用相同的依賴庫,通過指定一個共享的 target 目錄,可以復用編譯緩存,減少重復編譯的時間,大幅提升構建效率。
管理方便:
通過將編譯輸出集中到一個特定目錄,可以更方便地管理和清理編譯輸出文件。當 Rust 項目過多時,我們可以隨時清理 target 文件。
缺點
多個項目共享同一個 target 目錄可能會因為不同的依賴版本而產生沖突,當遇到沖突時需要及時清理 target 目錄。
總體上講,指定 target 目錄可以帶來顯著的構建效率提升,但也需要考慮潛在的版本沖突問題,這個需要根據實際的項目來取舍。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。