Linux 常见目录结构说明

主要总结 Linux 下常用的目录,主要是为了学习 Linux, 以及了解各个目录的作用,以便于方便的管理 Linux 下的配置以及文件。绝大多数的 Unix-like 操作系统都遵循 Filesystem Hierarchy Standard 这个标准,这个标准规定了哪些目录作为什么功能,存放一些什么内容。

什么是文件系统

了解 Linux 文件系统的目录结构,是学好 Linux 的至关重要的一步。

当您使用 Linux 的时候,如果您通过 ls -l / 查询根目录结构,就会发现,根目录下包含了很多的目录,比如 etc、usr、var、bin 等等,而在这些目录中,也有很多的目录或文件。文件系统在 Linux 下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为树形结构。

Linux 文件系统的最顶端是 /,我们称 / 为 Linux 的 root,也就是 Linux 操作系统的文件系统。Linux 的文件系统的入口就是 /,所有的目录、文件、设备都在 / 之下,/ 就是 Linux 文件系统的组织者,也是最上级的领导者。

文件系统的类型

Linux 有四种基本文件系统类型:

  • 普通文件:比如文本文件、C 语言源代码、SHELL 脚本、二进制的可执行文件等,可用 cat、less、more、vi、emacs 来察看内容
  • 目录文件:包括文件名、子目录名及其指针。它是 Linux 储存文件名的唯一地方,可用 ls 列出目录文件时,用 d 来标识
  • 连接文件:指向同一索引节点的那些目录条目。可以使用 ln 来创建,用 ls 来查看时,连接文件会用 l 来标识,而文件面后以”->”指向所连接的文件。
  • 特殊文件:Linux 的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,这类文件就是特殊文件,常放在 /dev 目录内,Linux 使用类似于 /dev/sda1, /dev/sda2 这样的方式来表示磁盘分区

文件类型可以用 file 命令来识别。

Linux 文件系统的目录结构

/ 是 Linux 文件系统的入口,目录树的根节点。

  • /bin 系统所需的命令,比如 ls、cp、mkdir 等命令,该目录中包含单用户模式下所有可执行的文件,功能和 /usr/bin 类似,这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里
  • /dev 设备文件存储目录,比如磁盘,光驱…
  • /boot Linux 的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB 或 LILO 系统引导管理器也位于这个目录
  • /etc 系统配置文件所在地
  • /home 普通用户目录默认存放目录,不同用户会在该目录下有对应用户名的子目录,保存用户个人文件以及个人配置
  • /lib 库文件存放目录,一般用来存放给 /bin 或者 /sbin 目录下可执行文件的依赖库
  • /mnt 临时挂载点,这个目录一般是用于存放挂载储存设备的挂载目录的,比如有 cdrom 等目录。可以参看 /etc/fstab 的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看 /etc/fstab 中怎么定义了;比如光驱可以挂载到 /mnt/cdrom 。
  • /opt 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在 Fedora Core 5.0 中,OpenOffice 就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过 ./configure –prefix=/opt/ 目录
  • /proc 操作系统运行时,进程信息及内核信息(比如 cpu、硬盘分区、内存信息等)存放在这里。/proc 目录伪装的文件系统 proc 的挂载目录,proc 并不是真正的文件系统,它的定义可以参见 /etc/fstab
  • /root 超级权限用户 root 的家目录
  • /sbin 大多是系统管理的命令的存放位置,是超级权限用户 root 的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和 /usr/sbin; /usr/X11R6/sbin 或 /usr/local/sbin 目录是相似的;我们记住凡是目录 sbin 中包含的都是 root 权限才能执行的。
  • /usr 是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多的文件和目录。当我们安装一个 Linux 发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在 /etc 目录中。/usr 目录下包括涉及字体目录 /usr/share/fonts ,帮助目录 /usr/share/man 或 /usr/share/doc,普通用户可执行文件目录 /usr/bin 或 /usr/local/bin 或 /usr/X11R6/bin ,超级权限用户 root 的可执行命令存放目录,比如 /usr/sbin 或 /usr/X11R6/sbin 或 /usr/local/sbin 等;还有程序的头文件存放目录 /usr/include。
  • /var 目录存放经常变化的内容
  • /lost+found 在 ext2 或 ext3 文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中 fsck 工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上
  • /tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp 就用来存放临时文件的。/var/tmp 目录和这个目录相似

root

开机过程中仅有根目录会被挂载, 其他分区则是在开机完成之后才会持续的进行挂载的行为。

  • /etc:配置文件
  • /bin:重要执行档
  • /dev:所需要的装置文件
  • /lib:执行档所需的函式库与核心所需的模块
  • /sbin:重要的系统执行文件

以上目录不可与根目录分开在不同的分区。

usr

包含 multi-user 可以使用的工具和应用。

  • /usr/bin 所有用户都能使用的二进制可执行文件
  • /usr/lib/usr/bin/usr/sbin 的库文件
  • /usr/sbin 非必须的系统二进制文件
  • /usr/local 这台机器使用的本地文件,一般也有bin, lib, share 等几个目录

etc

/etc 目录用来存放系统及应用配置文件。

  • /etc/opt 附加包的配置信息存放地
  • /etc/X11 X Window System, version 11 配置文件存放地
  • /etc/passwd 系统用户名

其他插件的软件一般会在 /etc 目录下新建一个以自己名字命名的文件夹并将自己的配置文件放在其中,比如 /etc/nginx, /etc/mysql, /etc/redis 等等。

var

/var 该目录用来存放经常会发生变化的数据,程序运行中的数据存放地,比如系统日志、邮件内容、网站内容等,/varvariable 的缩写。

  • /var/log 用来存放系统日志
  • /var/www 存放 Apache/Nginx 服务器内容
  • /var/mail存放邮箱内容
  • /var/lib 用来存放一些库文件,比如程序运行时的持久化内容
  • /var/run 某些程序或者服务启动后会将 PID 存放于此
  • /var/spool 队列数据,这些数据经常在使用后被删除,比如 crontab 数据就在该目录

2014-04-26 linux , dir-structure , file-system , command

Visual Assist And Eclipse使用doxygen注释

##修改Visual Assist中的方法注释样式

Visual Assist生成的方法注释又长又丑有木有?那就简单修改一下吧~

  • 如下面的两张图所示,打开在Visual Assist的选项卡,按图中标示顺序打开Refactor Document Method脚本,就可以按照自己喜欢的风格修改了~不同版本的Visual Assist中设置的路径可能不一样,总之都在Suggestions选项卡下。
  • 可用的宏可以点左上角最后一个图标查看,意思看名字就能推断出来了~
  • 是不是还想来个快捷键什么的,在想要注释的函数定义上方敲 /** 回车就行

visual assist 1

visual assist 2

###Eclipse中使用doxygen注释C++方法 修改一下选项就可以了~然后在要注释的方法的上一行输入 /** 按回车即可. enter image description here

参考: http://cherishlc.iteye.com/blog/1777034


2014-04-25 doxygen , Visual Studio , Eclipse

Java 字节码 类文件结构

Java 文件编译后会生成 .class 二进制文件,这个文件以 8 字节为单元组织。在 Class 文件中定义了一些数据类型,u1,u2,u4,u8 分别代表 1 个字节、2 个字节、4 个字节、8 个字节的无符号数。

Class 文件像一张大表格,以一定的格式记录。

ClassFile
{
	 magic_number;
	 minor_version;
	 major_version;
	 constant_pool_count;
	 constant_pool[];
	 access_flags;
	 this_class;
	 super_class;
	 interfaces_count;
	 interfaces[];
	 fields_count;
	 fields[];
	 methods_count;
	 methods[];
	 attributes_count;
	 attributes[];
}

Magic Number

每个 Class 文件头 4 个字节称为 Magic Number,用于确认该文件是否能被虚拟机接受。

java class magic number

Class 文件的 Magic Number 是 0xCAFEBABE .

apt install ghex

Class 版本

接着 Magic Number 后面 4 个字节就是 Class 文件的版本号

  • 第 5,6 个字节是次版本号 Minor Version
  • 第 7,8 个字节是主版本号 Major Version

Java 版本号从 45 开始,JDK 1.1 后每个 JDK 大版本发布主版本加 1,高版本的 JDK 向下兼容以前的 Class 文件,但不能运行以后的版本。

看到上图里面,5,6 个字节 0x0000,主版本号 0x0033,就是十进制的 51,说明这个 Class 文件可以被 JDK 1.7 或者以上版本虚拟机执行。

常量值 constant_pool

在主版本号后面是常量池入口,所有的变量,方法都会在该常量池有一份引用。因为常量值数量不固定,所以常量值入口会放置 u2 类型数据,表示常量池容量计数 constant_pool_count ,这个容量计数是从 1 开始。

常量池主要存放两大类常量:

  • 字面值 Literial
  • 符号引用 Symbolic References , 包含

      - 类和接口的全限定名 Fully Qualified Name
      - 字段名和描述符 Descriptor
      - 方法的名称和描述符
    

常量池中每一项都是一个表

第一位是 u1 类型标志位,取值 1 到 12,缺少标志为 2 的数据类型,该标志表示当前常量属于哪种类型。

类型 标志 描述
CONSTANT_Utf8_info 1 UTF-8 编码字符串
CONSTANT_Integer_info 3 整型字面值
CONSTANT_Float_info 4 浮点
CONSTANT_Long_info 5 长整型
CONSTANT_Double_info 6 双精度浮点
CONSTANT_Class_info 7 类或者接口符号引用
CONSTANT_String_info 8 字符串类型
CONSTANT_Fieldref_info 9 字符的符号引用
CONSTANT_Methodref_info 10 类中方法的符号引用
CONSTANT_InterfaceMethodref_info 11 接口中方法的符号引用
CONSTANT_NameAndType_info 12 字段或方法的部分符号引用

如果看二进制的 Class 文件比较麻烦,JDK 中提供了了分析 Class 文件字节码的工具:javap

javap -verbose filename.class

可以看到类似如下的内容:

Constant pool:
   #1 = Methodref          #11.#36        // java/lang/Object."<init>":()V
   #2 = Fieldref           #37.#38        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = String             #39            // hello
   #4 = Methodref          #40.#41        // java/io/PrintStream.println:(Ljava/lang/String;)V

访问标志 access flags

常量池结束后接 2 字节代表访问标志 access_flag. 用于识别类或接口层次的访问信息,包括 Class 是类还是接口,是否定义为 public,是否定义为 abstract 类型,类是否被声明为 final .

类索引 this_class 父索引 super_class 接口索引 interfaces

Class 文件由这个三个数据来确定类的继承关系。

  • 类索引确定类的全限定名
  • 父类索引确定这个父类的全限定名,除 java.lang.Object 外,所有 Java 类的父类索引都不是 0
  • 接口索引描述类实现了哪些接口,按照实现的顺序排列

类索引、父类索引和接口索引都按照顺序排列在访问标志后,类索引和父类索引用两个 u2 类型索引值表示,各自指向 CONSTANT_Class_info 的类描述符常量,通过 CONSTANT_Class_info 类型的常量中的索引值来找到定义在 CONSTANT_Utf8_info 类型的常量中的全限定名字符串。

接口索引,入口是 u2 类型数据的接口计数 interfaces_count ,表示索引表容量,如果没有实现任何接口,则计数器为 0。

字段表集合 field info

用于描述接口或者类中声明的变量,包括类级变量或者实例级变量,但不包括方法内部声明变量。

  • 字段作用域 public private protected
  • 类级变量还是实例变量 static
  • 可变性 final
  • 并发可见性 volatile,是否强制从主存读写
  • 可否序列化 transient
  • 字段基本类型,对象,数组
  • 字段名称

方法表集合

方法表结构和字段表相同,依次包括了访问标志 access flags, 名称索引 name index, 描述符索引 descriptor index , 属性表集合 attributes

属性表集合 attribute info

与 Class 文件中其他数据项目要求严格的顺序、长度和内容不同,属性表集合限制宽松,不要求属性表具有严格顺序,只要不与已有的属性名重复,任何人实现的编译器都可以向属性中写入自己定义的属性信息,Java 虚拟机在运行时会忽略掉它不认识的属性。


2014-04-05 java , class , cross-platform , bytecode

CPU知识

###步进 所谓步进:同一处理器型号随着时间推移,会有一些小的改进,厂商把这些小的改进通过新的步进来体现。 (通过汉语意思理解:就是与之前相比进了一小步,针对同一型号) 酷睿 i3/i5全线将从C2步进转换到K0,预计在品质等诸多方面比上一个步进要更加出色。 现在知道了吧,不用去关注它,只要知道是处理器在架构或者其他方面提高了就行。 步进更多的知识详见百度百科,里面讲到了用CPU-z识别当前使用的CPU的步进信息,如何通过编码知道步进信息。

###CPU各版本信息 ####ES 测试版CPU,发给制造商用于各类测试的版本,因为不是免费提供,intel无法回收CPU,测试结束以后部分CPU会流入市场,该类CPU如要购买最好先搜一下看看ES版是否存在一些BUG

####QS 最后一个版本的ES,一般用工具检测,固件烧录的也是ES,用于区分正式版

####BGA、PGA

BGA和PGA是intel的两种封装类型,BGA没有阵脚,直接焊在主板上,PGA带有阵脚,可以插在socket插座上使用,一些JS把BGA的CPU拆掉私自焊针脚来销售,稳定性极差,价格要低很多,温度要高一些,BGA和PGA无法用软件区分,只能拆开自己检查

引用:低电压板,L,SP,SU开头的型号,基本都是bga的 引用:http://www.xj123.info/1717.html

###CPU后面跟随的数字 I3 后面有四个数字 拿I3 3220为例, 第一个3就是第三代,所以2100就是第二代,530(三个数字)就是第一代 第二个2就是规格,一般取比第一个数字小1的数字,比如第一个是4,后面就是3,如果小于3,那就是进一步降低主频或删减缓存的缩水货。 第三个2就是等级,档次,越高越好。 最后一个0只是加上去为了英语发音好读。

I5也是一样,比如I5 3570K 第一个数字3代表第三代,第二个数字固定为5,小于5的就是精简过规格的产品,第三个是等级。

另外关于第二个数字还有一个小秘密,一般3以下都是I3(也有双核I5,很少),3-5是I5,6-9是I7。 引用:http://zhidao.baidu.com/question/573950249.html


2014-03-13

Android SDK环境变量配置

Android SDK就是Google提供的Android开发工具包,之前请先配置好JDK

###Android SDK下载地址

  • Google搜索Android SDK
  • 或者https://developer.android.com/sdk/index.html

###配置Android SDK环境变量

  1. 下载Android SDK,点击安装,直接默认路径即可! 下载地址:https://developer.android.com/sdk/index.html

  2. 默认路径安装后,安装完成,开始配置环境变量。

  3. 打开计算机属性——高级系统设置——环境变量(如上文)

  4. 新建一个环境变量,变量名:ANDROID_HOME,变量值:D:\Android\android-sdk(以你安装目录为准,确认里面有tools和add-ons等多个文件夹),点击确认。

  5. 在用户变量PATH后面加上变量值;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;点击确认即可

  6. Android SDK配置完成,接下来验证配置是否成功。

  7. 点击运行——输入cmd——回车——输入adb——回车,如果出现一堆英文,即表示配置成功,输入Android,启动Android SDK Manager。

###目录tools和platform-tools的区别

Android sdk目录里,有一些文件夹:

  • tools:该目录存放大量的Android开发,调试工具,该目录下存放大量Android开发工具,例如SDK Manager、androidavd、emulator、ddms等等。
  • platforms-tools:该文件夹存放Android平台和相关工具,存放Android不同平台的相关工具;随着SDK更新版本,这里的工具会有相应更新变化,但是一般都是向后兼容。最常用的是Android Debug Bridge(adb)工具
  • add-ons:该目录存放额外的附件软件。刚解压时该目录为空。
  • platforms:该目录存放不同版本的Android版本。刚解压时该目录为空。
  • SDK Manager.exe:该程序就是Andriod SDK管理器。
  • AVD Manager.exe:该程序就是Andoid虚拟设备。
  • docs:该文件夹存放了Android SDK开发文件和API文档等
  • samples:该文件夹存放不同的Android平台和示例程序。

参考:http://blog.csdn.net/rflyee/article/details/8973529


2014-03-04 Android , JDK

Vim 插件介绍:Nerdtree

地址

介绍

:help NERDTree

Config

通常情况下会设置一个 map

nmap <F2> :NERDTreeToggle<cr>

然后设置

" nerd comment
" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1

" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1

" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'

" Set a language to use its alternate delimiters by default
let g:NERDAltDelims_java = 1

" Add your own custom formats or override the defaults
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }

" Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDCommentEmptyLines = 1

" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1

" Highlight Cursor line
let g:NERDTreeHighlightCursorline = 1
" Show hidden files
let NERDTreeShowHidden=1
" NERDTree will recursively open dirs with only one child
let NERDTreeCascadeOpenSingleChildDir=1

Keyboard Mappings

使用 :help NERDTreeMappings 来查看插件所有的绑定,这一些是日常中使用频率比较高的:

  • Enter 在窗口打开文件
  • i 水平分割线分割,如果有一个打开的窗口,那么会分成上下两个窗口
  • s 垂直分割线分割,左右两个窗口
  • I 显示或者隐藏 hidden file
  • m 菜单,m 是一个非常强大的命令,可以支持新增,删除,重命名,复制等等操作
  • r 递归刷新当前目录
  • R 递归刷新 root 目录
  • ?

2014-02-21 vim , nerdtree , vim-tips , vim-plugin

Blogger 主题中Widget使用

Blogger 的主题和插件有自带的一套语法,下面就是 Blogger 主题中关于 Widget 的使用说明。

Widget Tags for Layouts

标签是用来创建最基本的widget的,描述在 [Page Element Tags for Layouts](http://help.blogger.com/bin/answer.py?answer=46888) 中.而这篇是描述在widget标签中具体可以设置哪些东西的,例如你可以在widget中放置什么. 第一件事就是放置一个闭合的标签,像这样: `<b:widget [...attributes...] />` 展开之后是这样的: `<b:widget [...attributes...]>

`

接下来谈论一下可以在widget中放置什么

Includes

Widget的内容包含在”includable” section中,像这样:

<b:includable id='main' var='thiswidget'>
    [insert whatever content you want here]
</b:includable>

includable的属性有:

  • id:(必须)唯一标识符,由字母和数字组成
  • var:(可选)标识符,由字母数字组成,用来引用section中的data.(具体请见下面说的data section)

每一个widget必须有一个具有id='main'的 includable 。通常这个widget的大部分内容都包含在这个includable中.

如果你有很多具有不同id属性的includable,他们不会自动的显示出来.但是如果你有一个includable带有id='new'的属性,那么在main includable中通过<b:include name='new' />就能够引用,并显示出来.

b:include标签的属性如下:

  • name:(必须)标识符由字母和和数字组成,它必须是在同一个widget中已经存在的b:includable的id
  • data:(可选)An expression or peice of data to pass on to the includable section. This will become the value of the var attribute in the includable.

简单例子同来讲解b:includableb:include的用法.Loops和data会在后面讲述,这里主要要理解’main’ section是如何包含 ‘post’ section的.main包含了一个includable,传递了一个data叫做’i’,included section引用做’p’,使用p访问title.

<b:includable id='main'>
   <b:loop var='i' values='posts'>
      <b:include name='post' data='i'/>
   </b:loop>
</b:includable>

<b:includable id='post' var='p'>
   Title: <data:p.title/>
</b:includable>

下面这段的意思就是说如果你想重复使用代码,可以将代码放到includable中,然后用include引用.就不翻译了. Includes are most useful if you have a section of code that you want to repeat multiple times in different places. You can just write the code once, put it inside a b:includable, then use b:include wherever you want it to appear. If you don’t need to do that, then you can just stick with the single main includable and not worry about the rest. (Note that the main includable is included automically – is unnecessary.)

Data

data:标签大概是最为重要的一个标签了,因为它是获取一切事实数据的途径,一些例子如下:

<data:title/>

or

<data:photo.url/>

这个例子非常简单,他能够在几乎所有的widget中起作用,因为大多数widget有title.上面的例子就是打印出widget的title.第二个例子是一个较为复杂的变量,获取photo的url.

有很多data你能够通过data:标签来获取,查阅 comprehensive list 查询需要的data,一些data只能在特定的widget中使用.

Loops

b:loop 标签让你重复使用section中内容.通常用在打印给定的一系列post,或者每一条留言,或者每一个label,等等.通常用法,像这样:

<b:loop var='identifier' values='set-of-data'>
   [repeated content goes here]
</b:loop>
  • identifier 可以选用任何名字,用来代表list中每一个item.可以简单的设定为”i”.
  • set-of-data 可以是在 data tags article中定义的任何一系列data

例如,在blog post widget中, posts是一个list,下面的代码是遍历每一个post,打印出每一个的标题title

<b:loop var='i' values='data:posts'>
   <h2><data:i.title/></h2>
</b:loop>

注意,”i”是每一个post,在循环中使用i获取每一个post的title

if / Else

if/else像很多编程语言一样,条件判断,这里是选择哪些显示和哪些不显示.通常如下:

<b:if cond='condition'> 
   [content to display if condition is true]
<b:else/>
   [content to display if condition is false]
</b:if>

b:else tag是可省略的. 而</b:if>是不可省略的. 如果没有else子句,那么只有满足if条件才会执行if子句中代码,不然什么都不执行

条件语句中你可以放置任何结果是true或者false的语句,有一些data本身就表示true/false,像post中allowComments.其他data,你可以用来比较得到结果.一些例子:

<b:if cond='data:post.showBacklinks'> True if the current post is set to show backlinks.
<b:if cond='data:blog.pageType == "item"'> True if the current page is an item page (post page).
<b:if cond='data:displayname != "Fred"'> True if this is not Fred's display name.
<b:if cond='data:post.numComments > 1'> True if the current post has more than one comment.

翻译自:Blogger Help Widget Tags for Layouts


2014-02-04 Google , Blogger , Knowledge

HAProxy 转发 shadowsocks

HAProxy is free, open source software that provides a high availability load balancer and proxy server for TCP and HTTP-based applications that spreads requests across multiple servers. It is written in C and has a reputation for being fast and efficient.

简单的来说 HAProxy 就是一个负载均衡,TCP 和 HTTP 的代理程序,开源,高可用,C 写成。他原本的作用是将前端的大量流量分发到后端的服务器中,用于负载特别大的 WEB 网站的,这里被大材小用了。

使用 HAProxy 中转 SS 流量至少需要两台 VPS,国内一台,国外一台,SS 客户端直接连国内的 VPS,而通过国内的 VPS 转发流量到国外的 VPS 上。

安装

sudo apt install -y haproxy

配置

HAProxy 的配置文件在 /etc/haproxy/haproxy.cfg 下:

global
    ulimit-n  51200

defaults
    log global
    mode    tcp
    option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000

frontend ss-in
    bind *:8888
    default_backend ss-out

backend ss-out
	balance roundrobin
    server server1 [VPS-IP]:8888 maxconn 20480
    server server2 [VPS2-IP]:8888 maxconn 20480

主要的配置就是 frontendbackend,也很好理解,将入站的 8888 端口中的流量转发到 VPS 的 8888 端口。然后重启 HAProxy 即可

sudo /etc/init.d/haproxy restart

启动之后,本地的 SS 客户端直接连国内的 IP 即可,需要注意的是配置用的是 ssserver 的配置。

监控页面

配置监控界面监控转发流量:

listen stats    #定义监控页面 $
	bind *:1080                     #绑定端口 1080$
	mode http                       # http mode$
	stats refresh 30s               #每 30 秒更新监控数据 $
	stats uri /stats                #访问监控页面的 uri$
	stats realm HAProxy\ Stats      #监控页面的认证提示 $
	stats auth username:password    #监控页面的用户名和密码 $

reference


2014-02-03 haproxy , shadowsocks , ss , tcp , load-balancer , proxy-server , proxy

Linux Mint 下开机自启动应用

在 Cinnamon 桌面环境下有一个开机启动应用的管理程序叫做 startup applications,用该程序来管理开机启动应用是非常方便的。更准确的来说应该是 login 到桌面环境中启动的应用程序管理。

使用

命令行是

cinnamon-settings startup

同样在 gnome 的桌面环境下也有一个相似的 gnome-session-properties 但是这个应用没有 Cinnamon 提供的方便友好,一个很大的差别就是 Cinnamon 提供的 startup 工具允许用户直接选择已经安装的应用,而 gnome 提供的只允许用户自己选择执行脚本(命令),自己选择图标,标题等等。Cinnamon 帮我们做了很多友好的工作。

实际上所有开机自启动的配置都在 ~/.config/autostart 目录中,每一个启动项都以自己名字开头,叫做 goldendict.desktop 这样的名字,包含如下内容。

[Desktop Entry]
Type=Application
Terminal=false
Categories=Office;Dictionary;Education;Qt
Name=GoldenDict
GenericName=Multiformat Dictionary
Comment=GoldenDict
Encoding=UTF-8
Icon=goldendict
Exec=goldendict
X-GNOME-Autostart-enabled=true
NoDisplay=false
Hidden=false
Name[en_US]=GoldenDict
Comment[en_US]=GoldenDict
X-GNOME-Autostart-Delay=100

其中定义了常见的配置,包括启动命令,图标,名字等等。

reference


2014-02-02 linux , linux-mint , cinnamon , startup , application

manual guide tutorial 区别

manual 一般翻译为手册,指南。通常是制造商提供的一份详细的操作指示,更具体来说一般为官方提供的。

guide 向导,指南。是一个比较宽泛的词,鉴于 manual 可能是一份文档,游戏的小册子,或者更加复杂的汽车的手册,但是 guide 可能就是一个卡片,或者介绍的视频。guide 可能是一个比较细节的说明,但也可能是一个简单的介绍或者说明。

tutorial 通常翻译为教程,通常是针对无经验的初学者提供 step-by-step 每一步详细的说明。

cookbook 直译是食谱,在 鉴别 Mastering Cookbook xxx in Action 系列图书 文章中就已经解释了,通常指的是比较实用的一些用例。

reference 一般译作参考,引用,这个 reference 倒是不会产生什么歧义。我的文章中也经常使用。

reference


2014-02-01 document , guide , difference

电子书

最近文章

  • 使用 flexget 实现下载更新自动化 FlexGet 官网是这样描述自己的,媒体文件的多功能自动化工具。可以支持 torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, 等等作为输入。FlexGet 是 Python 编写的,所以如果想要实现更加复杂的功能,也可以自己写脚本来处理。
  • 自架的服务整理 这篇文章主要整理比较流行的可以自建的服务,按照功能分类,我并没有每一个服务都尝试,但基本上每个功能下都有一个服务在跑着。
  • 关于 BitTorrent 和 PT 你需要知道的一切 几个 bt 中经常见到的词汇 bt 其实是 BitTorrent 的缩写,后文为了描述简单统一简称为 bt.
  • NAS 上的音乐管理 NAS 上的文件已经有足够多的管理系统 了 12,而电影也有 Kodi, Emby, Plex 等等工具,图片同样 Chevereto,Lychee,电子书有 Calibre-web,但就是音乐管理工具没有找到一个比较合适的。 FileRun ↩ NextCloud ↩
  • 几个常见的 NAS 系统整理 看文章老有几个 NAS 系统被翻来覆去的提到,这里就一起看看 Wiki,看看有什么区别吧。