0%

前言

初学 Linux 总是好奇 Linux 系统下各个文件夹为什么这么命名,它们的用途是什么。本文主要介绍 Linux 下各文件夹的结构和用途说明。

文件颜色

一般人性化点的 Shell 都会有文件的不同颜色显示。下图为 Linux 下不同颜色的文件代表的含义。比如可执行文件显示绿色,目录显示蓝色,链接文件显示浅蓝色等
linuxfilecolor

FHS

Linux 有专门的指导文件系统的标准,叫做 FHS(全称 Filesystem Hierarchy Standard)。Linux 所依赖的文件系统,有两个基本的概念:

1
2
shareable / unshareable (共享性)
static / variable (稳定性)

对于可分享(shareable)的文件系统,FHS 规定:可分享文件能够被存放在一台将被多个用户同时访问的主机上,通常情况下,当一个系统所需的所有文件都存放在一台外部主机上时,可以方便的挂载一个或很少几个目录来使这些文件可用。但是,并不是在文件系统架构中的所有文件都是可分享的,所以每个系统都至少需要一处能够存放不可共享文件的本地空间。

对于静态(static)文件系统,FHS 规定:静态文件需要与动态文件隔离,因为,不同于动态文件,静态文件可以存放在只读介质上(而动态文件不可以),并且不需要和动态文件一起备份。

FHS 中关于特定文件夹用途和所需包含内容的规定:

阅读全文 »

Preface

工作中难免有不能使用外网的环境,虽然说不能连外网安装软件真的是很费劲,但是为了安全着想也没得办法嘛


Prerequisites


Installing

  • 上传各个 tar 包至服务器的/opt目录,然后使用tar -xzvf解压

    1
    2
    3
    4
    scp /Users/s1mple/Downloads/nginx-1.12.2.tar.gz root@10.0.1.16:/opt
    scp /Users/s1mple/Downloads/pcre-8.41.tar.gz root@10.0.1.16:/opt
    scp /Users/s1mple/Downloads/zlib-1.2.11.tar.gz root@10.0.1.16:/opt
    scp /Users/s1mple/Downloads/openssl-1.0.2n.tar.gz root@10.0.1.16:/opt
  • 前往解压出来的/opt/nginx-1.12.2文件夹,其中包含了 Nginx 的配置脚本configure,运行这个脚本并指导刚才解压的各依赖的路径

    1
    ./configure --with-pcre=/opt/pcre-8.41 --with-zlib=/opt/zlib-1.2.11 --with-openssl=/opt/openssl-1.0.2n
  • 执行后的结果,生成了 Makefile 文件,并输出了一些配置的摘要。简单看一下,默认的 Nginx 安装在/usr/local/nginx下,以及启动脚本、配置、日志的路径

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    creating objs/Makefile

    Configuration summary
    + using PCRE library: /opt/pcre-8.41
    + using OpenSSL library: /opt/openssl-1.0.2n
    + using zlib library: /opt/zlib-1.2.11

    nginx path prefix: "/usr/local/nginx"
    nginx binary file: "/usr/local/nginx/sbin/nginx"
    nginx modules path: "/usr/local/nginx/modules"
    nginx configuration prefix: "/usr/local/nginx/conf"
    nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
    nginx pid file: "/usr/local/nginx/logs/nginx.pid"
    nginx error log file: "/usr/local/nginx/logs/error.log"
    nginx http access log file: "/usr/local/nginx/logs/access.log"
    nginx http client request body temporary files: "client_body_temp"
    nginx http proxy temporary files: "proxy_temp"
    nginx http fastcgi temporary files: "fastcgi_temp"
    nginx http uwsgi temporary files: "uwsgi_temp"
    nginx http scgi temporary files: "scgi_temp"
  • makeLinux 下常用的构建工具,主要用于 C 语言,它会根据 Makefile 中的构建规则生成文件。在/opt/nginx-1.12.2目录下执行这俩个命令

    1
    2
    make
    make install
  • /opt/nginx-1.12.2目录下的 Makefile 文件包含了实际执行的命令。-f指定了刚刚生成的/objs/Makefile文件

    1
    2
    3
    default:    build
    build: $(MAKE) -f objs/Makefile
    install: $(MAKE) -f objs/Makefile install
  • 构建完成后前往/usr/local/nginx查看生成的文件

    1
    2
    3
    $ ls /usr/local/nginx
    client_body_temp fastcgi_temp logs sbin uwsgi_temp
    conf html proxy_temp scgi_temp

Running

阅读全文 »

Preface

关于平时工作时前端的编码规范,多采用官方或者推荐的编码规范。包括 JavaScriptVue.js 规范


JavaScript规范

JavaScript 的规范采用 AirbnbESLint 规范。原则上能使用 ES6 语法的地方均使用 ES6 语法

  • 因为我是用的 vue-cli 搭建的 Vue 项目的脚手架,所以可以很方便的应用 ESLint 来规范代码。生成的两个文件,.eslintrc.js中包含了 ESLint 配置和规则,.eslintignore包含忽略检测的文件,类似.gitignore

  • .eslintrc.js中自定义的规则,详细的规则请参考 ESLint官网

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // allow debugger during development
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    // allow console during development
    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
    // allow unused variables during development
    'no-unused-vars': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
    // disallow trailing commas
    'comma-dangle': ['error', 'never'],
    // disallow trailing semi
    'semi': ['error', 'never'],
    // allow the unary operators ++ and --
    'no-plusplus': 'off'

Tips

  • 关于句尾是否该加分号,应该看个人习惯,我倒觉得两种风格都应该能适应,只要保证一个项目中统一风格即可。作为前端项目,个人为了简洁清爽所以没加分号

  • ASI( or Automatic Semicolon Insertion自动分号插入机制),现在的 ECMAScript 实现,无论是浏览器还是 Node.js 都包含了 ASI 功能,可以动态识别 JS 语句并判断是否在句尾插入分号


Vue.js规范

阅读全文 »

Preface

最近在看 《鸟哥的Linux私房菜–服务器架设》 这本书,感觉受益匪浅,特别是关于网络、各种协议、安全等方面的知识讲得比较透彻。所以整理了一篇博客,也算顺便温习一遍上学时计算机网络学的知识

  • 本片博客主要介绍 TCP/IP 协议及各层之间的职责
  • 图片使用微软的 Office Lens 拍取鸟哥书中图片截取而来

Overview

  • 最初,网络的数据传递被划分为如下七个层次,亦即 OSI七层协议 (or Open System Interconnection)
    IMG_0058-3

  • 可以看到,数据包从一个应用程序传递到网络上的另一个应用程序,是一层一层传递的过程,每一层只认识对方相同层级的数据,而数据头(Header)就包含了互相认识的信息,所以数据自顶向下被层层Header包裹起来,最后在物理介质上传输

通俗理解,网络协议干的事就是让数据能精确投递到另一个人手中,你比如说网络层的IP数据包Header 就包含了源IP地址、目的IP地址等信息,再比如传输层的源端口号、目的端口号

  • 而如今的 TCP/IP协议 是由 OSI七层协议 简化而来的
    IMG_0059

  • 实际上就是简化合并了一些没那么重要的层,相反,从 TCP/IP 的命名就可以看出传输层网络层的重要性


阅读全文 »

前言

ES6(or ECMAScript 6)规定了新一代的 JavaScript 语法,其中含有许多必要且实用的新特性。尤其是加入了一些语法糖使我们代码更简洁明了。本文所有代码都在浏览器的 JavaScript 控制台或者 Node 环境下运行过,输出结果在// result:注释后。

Arrows

箭头函数是使用 => 语法缩写的一个函数(相当于匿名函数),左边是参数,右边可以是表达式(expression)或者声明体(statement bodies)。

=>右边接表达式:

1
2
console.log([1,2,4].map(v => v + 1))
// result: [ 2, 3, 5 ]

=>右边接声明体:

1
2
3
4
5
6
console.log([1,2,4].forEach(v => {
if(v > 2){
console.log(v)
}
}))
// result: 4

箭头函数可以和不定参数配合使用,下面代码定义了一个求和方法:

1
2
3
4
5
6
7
const sum = (...nums) => {
let sumValue = 0
nums.forEach(num => sumValue += num)
console.log(sumValue)
}
sum(1,2,4)
// result: 7
阅读全文 »