Linux编译安装

编译准备

提前做好如下准备:

  1. 下载gcc/gcc+/cmake等编译工具
  2. 检查并安装软件对应的开发库,如:zlib expat等;
  3. 以下常用库的说明:
    1. zlib
    2. expat
    3. 待补充
  4. 使用以下简单的术语:
    1. 二进制文件:编译后生成的可执行文件(bin)、库文件(lib)、资源文件(res)(包括图片、图标等);
    2. 配置文件:编译后生成的配置文件(etc),类似xxx.conf的文件,一般存放到/etc或等目录;

编译步骤

  1. 配置configure
    1. configure是一个脚本,根据当前的平台,已有编译器的类型,生成makefile文件,即编译文件;
    2. 通过configure -h(–help)查看相应的帮助;
    3. -V 查看版本
    4. –prefix=/path/to/destination 编译后的二进制文件(bin/lib/res)安装目录
    5. –sysconfigdir=/path/to/etc 编译后的配置文件(etc)目录;注意虽然一般有此配置项,但很多软件,尤其是库实际上并没有etc文件;
    6. –with-arp=/path/to/apr 这是指定apache portable run-time Libraries;根据网络需要可能会有其它特殊参数需要指定;此参数并非编译的通用参数。
    7. –with-expat=buildin 使用内置的expat库;也是对部分编译可能有用;
    8. Makefile是configure成功之后生成的文件
    9. Makefile.in是预选准备的Makefile模板
    10. –prefix等参数可能未写入Makefile文件,如:httpd的参数写入了config.nice文件;
    11. 部分软件可能是没有configure脚本的,此时只能使用自带的Makefile编译,如:Redis5;
  2. 编译 make
    1. make执行前先执行./configure;
    2. 遇到错误时,可以先尝试make clean再试;
    3. make clean是make命令的内置功能,无需Makefile中有相应的配置;
    4. make clean操作理论不删除Makefile,即不影响./configure的结
    5. 编译完成后,通过make test测试编译结果,正常时一般会显示All tests passed;注意:这并不一定是最后一行!!
    6. 根据Makefile文件的内容,不是所有的软件都有test指令,如apache httpd 2.4就没有;此时需要特别关注make的输出;
  3. 安装make install
    1. 删除make uninstall 注意,这并非标准操作,大多数软件可能没有此功能;

其它说明

  1. yum/apt-get等一般安装到/usr目录,即可执行文件位于/usr/bin目录;
  2. 通过本文方案自行编译的文件,默认安装到/usr/local目录,即可执行文件位于/usr/local/bin目录;
  3. /opt目录于用于自行下载的或通过./configure –prefix=/opt/xxxx指定的三方软件目录;
  4. ./configure脚本的用途是生成Makefile文件,其中可以包含多个指令,如:install uninstall
  5. make命令则相当于执行Makefile中所包含的指令。

Continue Reading

CentOS 7网络配置笔记

主要配置文件

网卡配置文件

/etc/sysconfig/network-scripts/ifcfg-xxxx 其中xxxx是网卡名;常见的有ens##,eth#等;

其中ifcfg-lo表示local,即:127.0.0.1地址。

DNS配置文件

/etc/resolv.conf

此文件是自动生成(覆盖)的,每次重启(reboot)或重启网络(systemctl restart network)此文件将重新生成;因此修改此文件只能影响“当前”配置,一旦重启配置将丢失。

配置心得

  1. 网卡需要配置ONBOOT=yes网卡才会被启用;未被启用的网卡将不会工作,相当于windows中的禁用;如果配置为no,则此时将发现连接上有线网络后有灯闪(绿),但却实际不能通信。信号灯仅表示mac的工作状态。
  2. 默认是动态IP,即:dhcp,一般无需修改其它配置;
  3. 配置静态IP时
    1. BOOTPROTO=static
    2. IPADDR=192.168.1.100
    3. GATEWAY=192.168.1.1
    4. NETMASK=255.255.255.0
  4. 配置DNS时
    1. DNS1=1.2.3.4
    2. DNS2=5.6.7.8
  5. DNS配置对resolv.conf的影响;
    1. PEERDNS=yes为默认值;网卡启动时此文件中的配置将影响(写入)resolv.conf文件;配置为no时,此网卡不影响resolv.conf文件;但根据实际测试结果:此时相应文件中配置的DNS并不会生效!
      1. 例如:在网卡A中配置peerdns=yes,且配置DNS1=1.2.3.4;在网卡B中配置peerdns=no,且配置DNS1=223.5.5.5;其中1.2.3.4是一个错误的DNS不可解析域名;重启网卡后resolv.conf中将只有nameserver=1.2.3.4,而不包括223.5.5.5;同时将无法解析域名。
    2. 对dhcp而言,将获取来自DHCP的配置;
    3. 对static而言,将获取DNS1/DNS2配置;
Continue Reading

Linux代理设置

网上找了一堆的教程,其实都提到了,但没提到关键的容易踩中的坑:两者的环境变量名不同!

  1. shell中可用的全局代理,是在/etc/profile文件或~/.bash_profile中export http_proxy=http://xxxx的方式实现;注意:环境变量名是http_proxy;
  2. yum则需要修改/etc/yum.conf文件,而其中的变量名是proxy!!!

Continue Reading

Linux配置虚拟内存

  1. 用root用户登录系统
  2. 创建/usr/swap目录
  3. 执行dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096
  4. 其中的4096可修改为2048或其它大小,为虚拟内存大小;
  5. mkswap /usr/swap/swapfile
  6. swapon /usr/swap/swapfile
  7. 修改/etc/fstab,在第一行后(视情况)增加一行/usr/swap/swapfile swap swap defaults 0 0
  8. 重启:)通过free -m检查
Continue Reading

Linux命令经验——mount相关

之前用过很多次mount相关的功能,包括加载远程NFS等,最近因为配置vsftpd又用到,所以记录一下。

绑定A与B目录

这一操作感觉上类似于ln -s或者ln(实际上)。区别在于ln根本不能实现(硬链接不支持目录),而ln -s实际上是创建了一个文件指向了目标。

需求来自于一个ftp的配置。多个帐户要求共享若干个目录,每个帐户又有各自独立的目录,并且这些目录需要隐藏而不仅仅是禁止访问。

解决的方案是:

mount -bound /source/dir /target/dir

在fstab中启动时加载

这也是经常需要的功能,毕竟一次性加载的时候不多。

方法是编辑/etc/fstab文件,此文件的各个字段的标准解释参考这里

简单点说包括:fs_spec(加载系统) fs_file(挂载点<目录>) fs_type(文件系统类型) fs_options(参数) fs_dump(转储频率) fs_pass(启动时加载顺序)

翻译得通俗一点就是;

/source/dirOrDevice    /target/dir     file_system_type option1,option2 #1 #2

其中#1,#2一般为0,0。

对于上面提到的A目录挂载B目录时,对应的写法是:

/ftp/public     /ftp/users/ftp/public       none defaults,bind 0 0

字段之间可以使用“任意数量”的“空字符”分隔,至少包括:空格和制表符,且允许多个。

选项(option)之间使用逗号分隔。常用的除了上面的defaults,bind之外,还有ro(只读),rw(读写)等。

在另一个项目中,我试过用如下的方式加载远程的目录,通过NFS方式共享文件,实现上传文件的统一管理。

172.17.16.24:/nfs/upload    /nfs/upload    nfs    defaults 0 0

172.17.16.24:/nfs/archive    /nfs/archive    nfs    defaults 0 0

172.17.16.24:/nfs/share    /nfs/share    nfs    defaults 0 0

与之对应的的NFS配置虽然与mount无关,这里也列一下以便对照。

/nfs/share 172.17.16.25/32(rw,sync,no_root_squash,no_all_squash)
/nfs/share 172.17.16.30/32(rw,sync,no_root_squash,no_all_squash)
/nfs/share 172.17.16.45/32(rw,sync,no_root_squash,no_all_squash)
/nfs/archive 172.17.16.25/32(ro,sync)
/nfs/archive 172.17.16.30/32(ro,sync)
/nfs/archive 172.17.16.45/32(ro,sync)
/nfs/upload 172.17.16.25/32(rw,sync,no_root_squash,no_all_squash)
/nfs/upload 172.17.16.30/32(rw,sync,no_root_squash,no_all_squash)

fstab校验

之前遇到过一次修改了fstab把主机搞挂了的情况,所以一直对修改这个文件有点发怵,今天上网发现了一个命令,应该是非常实用的:

mount -a

该命令尝试加载fstab文件,可以不重启验证fstab文件是否有异常。

解除挂载

其实这个命令很简单,就是umount 挂载点路径

唯一需要说明的就是不是unmount,而是umount,一开始打错了。

Continue Reading

VPS常用操作

我的VPS,除了这个网站还赚着SS服务器的功能,但是Linux用得少,有些操作还是经常忘记了。

1、查看端口打开情况
netstat
注意的是windows下可以用netstat -ano用数字方式查看所有端口,但在Linux只能用netstat -an
另外,如果只用netstat也能看到连接,但只能看到已经连接的。
如果是处于Listen状态的打开端口则看不到,因此一般要用
netstat -a
来查看

2、Shadowsocks的配置文件

启动
ssserver -start
ssserver -stop

配置文件位置
/etc/shasowsocks/config.json

3、过滤
|grep 参数
比如
netstat -an | grep 1234
就只显示有1234的行

4、查看占用或连接某端口的程序
losf -i:XXXX
其中XXXX为端口号

5、查看进程
ps
ps -aux

Continue Reading