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