整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何在 Web 服务器文档根目录上设置只读文件权限

如何在 Web 服务器文档根目录上设置只读文件权限

:如何对我存放在 /var/www/html/ 目录中的所有文件设置只读权限?

你可以使用 chmod 命令对 Linux/Unix/macOS/OS X/*BSD 操作系统上的所有文件来设置只读权限。这篇文章介绍如何在 Linux/Unix 的 web 服务器(如 Nginx、 Lighttpd、 Apache 等)上来设置只读文件权限。

如何设置文件为只读模式

语法为:

  1. ### 仅针对文件 ###

  2. chmod 0444 /var/www/html/*

  3. chmod 0444 /var/www/html/*.php

如何设置目录为只读模式

语法为:

  1. ### 仅针对目录 ###

  2. chmod 0444 /var/www/html/

  3. chmod 0444 /path/to/your/dir/

  4. # ***************************************************************************

  5. # 假如 web 服务器的用户/用户组是 www-data,文件拥有者是 ftp-data 用户/用户组

  6. # ***************************************************************************

  7. # 设置目录所有文件为只读

  8. chmod -R 0444 /var/www/html/

  9. # 设置文件/目录拥有者为 ftp-data

  10. chown -R ftp-data:ftp-data /var/www/html/

  11. # 所有目录和子目录的权限为 0445 (这样 web 服务器的用户或用户组就可以读取我们的文件)

  12. find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 "{}"

找到所有 /var/www/html 下的所有文件(包括子目录),键入:

  1. ### 仅对文件有效 ###

  2. find /var/www/html -type f -iname "*" -print0 | xargs -I {} -0 chmod 0444 {}

然而,你需要在 /var/www/html 目录及其子目录上设置只读和执行权限,如此才能让 web 服务器能够访问根目录,键入:

  1. ### 仅对目录有效 ###

  2. find /var/www/html -type d -iname "*" -print0 | xargs -I {} -0 chmod 0544 {}

警惕写权限

请注意在 /var/www/html/ 目录上的写权限会允许任何人删除文件或添加新文件。也就是说,你可能需要设置一个只读权限给 /var/www/html/ 目录本身。

  1. ### web根目录只读 ###

  2. chmod 0555 /var/www/html

在某些情况下,根据你的设置要求,你可以改变文件的属主和属组来设置严格的权限。

  1. ### 如果 /var/www/html 目录的拥有人是普通用户,你可以设置拥有人为:root:root 或 httpd:httpd (推荐) ###

  2. chown -R root:root /var/www/html/

  3. ### 确保 apache 拥有 /var/www/html/ ###

  4. chown -R apache:apache /var/www/html/

关于 NFS 导出目录

你可以在 /etc/exports 文件中指定哪个目录应该拥有只读或者读写权限 [1]。这个文件定义各种各样的共享在 NFS 服务器和他们的权限。如:

  1. # 对任何人只读权限

  2. /var/www/html *(ro,sync)

  3. # 192.168.1.10(upload.example.com)客户端读写权限访问

  4. /var/www/html 192.168.1.10(rw,sync)

关于用于 MS-Windows客户端的 Samba(CIFS)只读共享

要以只读共享 sales,更新 smb.conf,如下:

  1. [sales]

  2. comment = Sales Data

  3. path = /export/cifs/sales

  4. read only = Yes

  5. guest ok = Yes

关于文件系统表(fstab)

你可以在 Unix/Linux 上的 /etc/fstab 文件中配置挂载某些文件为只读模式。

你需要有专用分区,不要设置其他系统分区为只读模式。

如下在 /etc/fstab 文件中设置 /srv/html 为只读模式。

  1. /dev/sda6 /srv/html ext4 ro 1 1

你可以使用 mount 命令重新挂载分区为只读模式[2](使用 root 用户)

  1. # mount -o remount,ro /dev/sda6 /srv/html

或者

  1. # mount -o remount,ro /srv/html

上面的命令会尝试重新挂载已挂载的文件系统到 /srv/html上。这是改变文件系统挂载标志的常用方法,特别是让只读文件改为可写的。这种方式不会改变设备或者挂载点。让文件变得再次可写,键入:

  1. # mount -o remount,rw /dev/sda6 /srv/html

  1. # mount -o remount,rw /srv/html

Linux:chattr 命令

你可以在 Linux 文件系统上使用 chattr 命令改变文件属性为只读[3],如:

  1. chattr +i /path/to/file.php

.editorconfig

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

语法

  1. editorConfig配置文件需要是UTF-8字符集编码的, 以回车换行或换行作为一行的分隔符
    斜线(/)被用作为一个路径分隔符,井号(#)或分号(;)被用作于注释. 注释需要与注释符号写在同一行

通配符

*                匹配除/之外的任意字符串
**               匹配任意字符串
?                匹配任意单个字符
[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文件

.prettierrc(格式化配置项)

1.EditorConfig和Prettier一样,都是用来配置格式化你的代码的,这个格式化代码,要和你lint配置相符!否则会出现你格式化代码以后,却不能通过你的代码校验工具的检验。

2.当我们使用右键格式化的时候,就会自动帮我们补全符号,但是,有些符号在eslint中就会报语法错误,那我们需要怎么办呢?可以通过.prettierrc来进行文件配置

{
    "semi": false,    // 使用分号, 默认true
    "singleQuote": true,   // 使用单引号, 默认false(在jsx中配置无效, 默认都是双引号)
    "bracketSpacing": true   // 对象中的空格 默认true
}

.browserslistrc 文件

在使用脚手架搭建项目时,会自动生成.browserslistrc文件,该文件只要是 配置兼容浏览器
对于部分配置参数做一些解释:
" >1%" :代表着全球超过1%人使用的浏览器
“last 2 versions” : 表示所有浏览器兼容到最后两个版本
“not ie <=8” :表示IE浏览器版本大于8(实则用npx browserslist 跑出来不包含IE9 )
“safari >=7”:表示safari浏览器版本大于等于7


Vue .env .env.development .env.production

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`
  1. 那为什么是三个文件呢?
    比如现在三个文件里内容分别如下:
// .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`

.eslintrc.js

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。

0x01 指定 target 目录

另外当电脑中的 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 目录了。

0x02 target 目录有什么

下面是一个简单项目的 target 目录,让我们看下它会包含什么呢?

target 目录包含以下几个子目录和文件:

target/debug:

  • 存储调试模式下构建的可执行文件和库文件。
  • 包含中间编译产物,如对象文件(.o 文件)和生成的二进制文件。

target/release:

  • 存储发布模式下构建的可执行文件和库文件。
  • 与调试模式相比,发布模式进行了优化,生成的二进制文件通常更小且运行速度更快。

target/doc:

  • 存放项目文档(通常是通过 cargo doc 命令生成的 HTML 文档)。

target/.fingerprint:

  • 存储构建的指纹文件,用于跟踪哪些文件已经被编译以及是否需要重新编译。

target/package:

  • 存放项目打包后的文件,通常用于 cargo publish 命令发布到 crates.io 仓库。

其他临时文件和目录:

  • 包括构建缓存、生成的汇编代码等。

0x03 指定 target 目录的优缺点

统一存放 target 文件既有优点也有缺点:

优点

缓存复用

如果多个项目使用相同的依赖库,通过指定一个共享的 target 目录,可以复用编译缓存,减少重复编译的时间,大幅提升构建效率。

管理方便

通过将编译输出集中到一个特定目录,可以更方便地管理和清理编译输出文件。当 Rust 项目过多时,我们可以随时清理 target 文件。

缺点

多个项目共享同一个 target 目录可能会因为不同的依赖版本而产生冲突,当遇到冲突时需要及时清理 target 目录。

0x04 小结

总体上讲,指定 target 目录可以带来显著的构建效率提升,但也需要考虑潜在的版本冲突问题,这个需要根据实际的项目来取舍。