作者: 8bto

  • FreeBSD install shadowsocks-libev

    cd /usr/ports/net/shadowsocks-libev

    make install clean;rehash

    ee /etc/rc.conf 加入

    shadowsocks_libev_enable=”YES”
    shadowsocks_libev_flags=”-c /usr/local/etc/shadowsocks-libev/config.json”

    在/usr/local/etc/shadowsocks-libev/config.json中加入

    {
    “server”:”136.0.16.99″,
    “server_port”:1234,             //服务端端口
    “local_address”: “127.0.0.1”,
    “local_port”:4321,                 //客户端端口
    “password”:”password”,      //客户端连接密码
    “timeout”:300,
    “method”:”aes-256-cfb”     //加密方式
    }

    然后客户端,在本地,用config.json文件内容对shadowsocks-gui进行相应配置并运行客户端,

    shadowsocks-gui下载地址:http://sourceforge.net/projects/shadowsocksgui/files/dist/

    最后设置浏览器代理。Chrome 推荐使用 SwitchySharp 切换代理设置。把浏览器代理设为下列参数即可:

    协议: socks5

    地址: 127.0.0.1

    端口: 你填的 local_port

    service shadowsocks-libev restart

    ok应该可以科学上网了

  • Connect To OpenVPN Over Shadowsocks

    按照https://github.com/clowwindy/shadowsocks/wiki/Connect-to-OpenVPN-over-Shadowsocks给的教程;我试了一下,步骤如下:

    1、之前安装的OPENVPN服务端 server.conf配置文件里的proto udp 改为 proto tcp

    2、openvpn客户端proto udp 也是改为 proto tcp

    3、openvpn直接在客户端最后面加入

    socks-proxy 127.0.0.1 19999

    route 123.xxx.xxx.xxx 255.255.255.255 net_gateway

    保存,在服务器重启openvpn 搞定。

  • debian Shadowsocks Supervisor

    执行

    apt-get install python-pip python-m2crypto supervisor

    pip install shadowsocks

     

    服务端安装好以后,创建一个配置文件 /etc/shadowsocks.json。 示例:

     

    {

    “server”:”服务器 IP 地址”,

    “server_port”:8388,

    “local_address”: “127.0.0.1”,

    “local_port”:1080,

    “password”:”mypassword”,

    “timeout”:300,

    “method”:”aes-256-cfb”,

    “fast_open”: false,

    “workers”: 1

    }

     多用户配置文件

    {

    “server”:”your_server_ip”,

    “local_address”: “127.0.0.1”,

    “local_port”:1080,

    “port_password”:{

    “8989”:”password0″,

    “9001”:”password1″,

    “9002”:”password2″,

    “9003”:”password3″,

    “9004”:”password4″

    },

    “timeout”:60,

    “method”:”aes-256-cfb”,

    “fast_open”: false,

    “workers”: 1

    }

    在服务器上运行 ssserver -c /etc/shadowsocks.json 即可。

     

    在本地,用上文的客户端shadowsocks-gui进行相应配置并运行客户端,

    shadowsocks-gui下载地址:http://sourceforge.net/projects/shadowsocksgui/files/dist/

     

    最后设置浏览器代理。Chrome 推荐使用 SwitchySharp 切换代理设置。把浏览器代理设为下列参数即可:

     

    协议: socks5

    地址: 127.0.0.1

    端口: 你填的 local_port

     

    如果要在后台运行, 使用supervisor, supervisor配置如下:

    安装完supervisor后创建

    vi /etc/supervisor/conf.d/shadowsocks.conf

    内容如下:

    [program:shadowsocks]

    command=ssserver -c /etc/shadowsocks.json

    autorestart=true

    user=nobody

    如果端口 < 1024,把上面的 user=nobody 改成 user=root。保存

    在 /etc/default/supervisor 最后加一行:

    ulimit -n 51200

    执行

    service supervisor start

    supervisorctl reload

    就好了。

    如果遇到问题,可以检查日志:

    supervisorctl tail -f shadowsocks stderr

    如果修改了 shadowsocks 配置 /etc/shadowsocks.json, 可以重启 shadowsocks:

    supervisorctl restart shadowsocks

    如果修改了 Supervisor 的配置文件 /etc/supervisor/*, 可以更新 supervisor 配置:

    supervisorctl update

  • linux 下查看机器是cpu是几核的

    几个cpu

     

    more /proc/cpuinfo |grep “physical id”|uniq|wc -l

     

    每个cpu是几核(假设cpu配置相同)

     

    more /proc/cpuinfo |grep “physical id”|grep “0”|wc -l

     

    cat /proc/cpuinfo | grep processor

     

    1. 查看物理CPU的个数

    #cat /proc/cpuinfo |grep “physical id”|sort |uniq|wc -l

     

    2. 查看逻辑CPU的个数

    #cat /proc/cpuinfo |grep “processor”|wc -l

     

    3. 查看CPU是几核

    #cat /proc/cpuinfo |grep “cores”|uniq

     

    4. 查看CPU的主频

    #cat /proc/cpuinfo |grep MHz|uniq

     

     

    # uname -a

    Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux

    (查看当前操作系统内核信息)

     

    # cat /etc/issue | grep Linux

    Red Hat Enterprise Linux AS release 4 (Nahant Update 5)

    (查看当前操作系统发行版信息)

     

    # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

    8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz

    (看到有8个逻辑CPU, 也知道了CPU型号)

     

    # cat /proc/cpuinfo | grep physical | uniq -c

    4 physical id : 0

    4 physical id : 1

    (说明实际上是两颗4核的CPU)

     

    # getconf LONG_BIT

    32

    (说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)

     

    # cat /proc/cpuinfo | grep flags | grep ‘ lm ‘ | wc -l

    8

    (结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)

     

     

    如何获得CPU的详细信息:

    linux命令:cat /proc/cpuinfo

    用命令判断几个物理CPU,几个核等:

    逻辑CPU个数:

    # cat /proc/cpuinfo | grep “processor” | wc -l

    物理CPU个数:

    # cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l

    每个物理CPU中Core的个数:

    # cat /proc/cpuinfo | grep “cpu cores” | wc -l

    是否为超线程?

    如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。

    每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:

    # cat /proc/cpuinfo | grep “siblings”

  • mysql查看表结构命令

    mysql查看表结构命令,如下:

     

    desc 表名;

    show columns from 表名;

    describe 表名;

    show create table 表名;

     

    use information_schema

    select * from columns where table_name=’表名’;

     

    顺便记下:

    show databases;

    use 数据库名;

    show tables;

     

     

     

    原有一unique索引AK_PAS_Name(PAC_Name)在表tb_webparamcounter中,

    执行以下sql修改索引

    alter table tb_webparamcounter drop index AK_PAS_Name;

    alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name);

     

    若发现索引的逻辑不对,还需要再加一个字段进去,执行

    alter table tb_webparamcounter drop index AK_PAS_Name;

    alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name,PAC_Value);

    注意:这时的PC_ID,PAC_Name,PAC_Value三个字段不是FOREIGN KEY

    否则必需先drop FOREIGN KEY,再重做上一步才行

     

    顺便提下oracle

    select * from v$database;

    select * from all_users;

    select * from user_tables;

     

  • Apache的prefork模式和worker模式

    prefork模式

    这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它的工作方式类似于Apache 1.3。它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。

     

    这个MPM具有很强的自我调节能力,只需要很少的配置指令调整。最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

     

    worker模式

    此多路处理模块(MPM)使网络服务器支持混合的多线程多进程。由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM。但是,它也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。

     

    控制这个MPM的最重要的指令是,控制每个子进程允许建立的线程数的ThreadsPerChild指令,和控制允许建立的总线程数的MaxClients指令。

     

    prefork和worker模式的切换

    1.将当前的prefork模式启动文件改名

    mv httpd httpd.prefork

    2.将worker模式的启动文件改名

    mv httpd.worker httpd

    3.修改Apache配置文件

    vi /usr/local/apache2/conf/extra/httpd-mpm.conf

    找到里边的如下一段,可适当修改负载等参数:

    <IfModule mpm_worker_module>

    StartServers 2

    MaxClients 150

    MinSpareThreads 25

    MaxSpareThreads 75

    ThreadsPerChild 25

    MaxRequestsPerChild 0

    </IfModule>

    4.重新启动服务

    /usr/local/apache2/bin/apachectl restart

    即可换成worker方式启动apache2

     

    处于稳定性和安全性考虑,不建议更换apache2的运行方式,使用系统默认prefork即可。另外很多php模块不能工作在worker模式下,例如redhat linux自带的php也不能支持线程安全。所以最好不要切换工作模式。

     

    prefork和worker模式的比较

    prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

     

    worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间,所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。

     

    总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。

     

    prefork模式配置详解

    <IfModule mpm_prefork_module>

    ServerLimit 256

    StartServers 5

    MinSpareServers 5

    MaxSpareServers 10

    MaxClients 256

    MaxRequestsPerChild 0

    </IfModule>

    ServerLimit

    默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。如果需要更大,则必须编译apache,此前都是不需要重新编译Apache。

    生效前提:必须放在其他指令的前面

     

    StartServers

    指定服务器启动时建立的子进程数量,prefork默认为5。

     

    MinSpareServers

    指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。此参数不要设的太大。

     

    MaxSpareServers

    设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设的太大。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。

     

    MaxClients

    限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit。

     

    MaxRequestsPerChild

    每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:

    1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。

    2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

     

    worker模式配置详解

    <IfModule mpm_worker_module>

    StartServers 2

    MaxClients 150

    MinSpareThreads 25

    MaxSpareThreads 75

    ThreadsPerChild 25

    MaxRequestsPerChild 0

    </IfModule>

     

    StartServers

    服务器启动时建立的子进程数,默认值是”3″。

     

    MaxClients

    允许同时伺服的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列。默认值是”400″,16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要增加MaxClients的时候,你必须同时增加ServerLimit的值。

     

    MinSpareThreads

    最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

     

    MaxSpareThreads

    设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。

     

    ThreadsPerChild

    每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。

     

    MaxRequestsPerChild

    设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。将MaxRequestsPerChild设置成非零值有两个好处:

    1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。

    2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

    注意对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。

  • Android出现“Read-only file system”解决办法

    操作设备文件系统上的文件结果遇到”… Read-only file system”。

     

    解决办法:

    1. 最简单的,adb remount

    2. 不行的话,adb shell su之后将文件系统remount为读写权限: mount -o remount rw /system。出于安全考虑,记得完事后remount回只读: mount -o ro,remount /system

    3. 和方法2类似,mount -o rw,remount -t ext3 /dev/block/mmcblk1p21 /system

  • android手机铃声存放路径

    /system/media/audio/ringtones 来电铃声

    /system/media/audio/notifications 短信通知铃声

    /system/media/audio/alarms 闹钟铃声

  • FreeBSD安装Pure-FTPd及user manager for PureFTPd

    1、首先安装需要配置好apache2/mysql/php等服务!前面有过笔记。

    2、安装pure-ftpd

    cd /usr/ports/ftp/pure-ftpd/

    make with_language=simplified-chinese install clean;rehash

    安装时,会有选择项;勾选:

    MYSQL Support for users in mysql database

    PRIVSEP Enable privileges separation

    PERUSERLIMITS Per-user concurrency limits

    THROTTLING Bandwidth throttling

    BANNER Show pure-ftpd welcome upon session start

    UTF8 Support for charset conversion (expreimental)

    安装完成后 添加pureftpd_enable=”YES”到/etc/rc.conf文件中。

    3、创建MySQL数据库,登陆mysql

    INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, ssl_cipher, x509_issuer, x509_subject)

    VALUES(‘localhost’,’ftp’,PASSWORD(‘tmppasswd’),’Y’,’Y’,’Y’,’Y’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’, Hex(“”), Hex(“”), Hex(“”));

     

    FLUSH PRIVILEGES;

    CREATE DATABASE ftpusers;

    USE ftpusers;

     

    drop table if exists ftpusers.admin;

    CREATE TABLE ftpusers.admin (

    Username varchar(35) NOT NULL default ”,

    Password char(32) binary NOT NULL default ”,

    PRIMARY KEY (Username)

    ) ;

    — Data for table ‘admin’

    INSERT INTO ftpusers.admin VALUES (‘Administrator’,MD5(‘tmppasswd’));

    — Table structure for table ‘users’

    drop table if exists ftpusers.users;

    CREATE TABLE ftpusers.users (

    `User` varchar(16) NOT NULL default ”,

    `Password` varchar(32) binary NOT NULL default ”,

    `Uid` int(11) NOT NULL default ’14’,

    `Gid` int(11) NOT NULL default ‘5’,

    `Dir` varchar(128) NOT NULL default ”,

    `QuotaFiles` int(10) NOT NULL default ‘500’,

    `QuotaSize` int(10) NOT NULL default ’30’,

    `ULBandwidth` int(10) NOT NULL default ’80’,

    `DLBandwidth` int(10) NOT NULL default ’80’,

    `Ipaddress` varchar(15) NOT NULL default ‘*’,

    `Comment` tinytext,

    `Status` enum(‘0′,’1’) NOT NULL default ‘1’,

    `ULRatio` smallint(5) NOT NULL default ‘1’,

    `DLRatio` smallint(5) NOT NULL default ‘1’,

    PRIMARY KEY (`User`),

    UNIQUE KEY `User` (`User`)

    ) ;

    — Data for table ‘users’

    INSERT INTO ftpusers.users VALUES (‘ftpuser_1’,MD5(‘tmppasswd’),65534, 31, ‘/usr’, 100, 50, 75, 75, ‘*’, ‘Ftp user (for example)’, ‘1’, 0, 0);

     

     

    配置pure-ftpd.conf

    cp /usr/local/etc/pure-ftpd.conf.sample pure-ftpd.conf

    编辑pure-ftpd.conf文件 ee pure-ftpd.conf

    MySQLConfigFile /usr/local/etc/pureftpd-mysql.conf

    CreateHomeDir yes

    DisplayDotFiles no

    保存退出

    配置pureftpd-mysql.conf

    cd /usr/local/etc/

    fetch http://machiel.generaal.net/files/pureftpd/v2.x/pureftpd-mysql.conf

    或者自己网站上镜像下载

    /usr/local/etc/rc.d/pure-ftpd restart

     

    安装User manager for PureFTPd

    cd /usr/ports/www/usermanager/

    make install clean;rehash

     

    以上全部正确安装完毕后:进入ftp目录下载

    http://machiel.generaal.net/files/pureftpd/ftp_v2.1.tar.gz或自己网站镜像

    解压后http://ip/ftp/install.php安装即可。

    Step [1 – 7]

    This configuration script has carried out a few checks to see if everything is ready to start the configuration.

    Checking if config.php exists OK!

    Checking if config.php is writable OK!

    Checking if PHP Extension MYSQL is enabled OK!

    Checking if PHP Extension PCRE is enabled OK!

    Checking if PHP Extension POSIX is enabled OK!

    Checking if PHP Extension SESSION is enabled OK!

    Please choose your configuration type:.选择New installation,create a new database.

     

    Step [3 – 7]输入正确的root用户和root的密码。

    Settings MySQL database.直接按默认设置(要是你改过密码,就输入你的密码)

    Step [4 – 7]语言选择中文,选择Quota support,Ratio support(上传下载比可以选择或不选择)按Save按钮保存配置文件,然后点Setp5进行下一步。

    Step [5 – 7]这里你可以更改管理员Administator的密码,也可以创建一个自己的帐号代替Administrator

    Step [6 – 7]系统有一些提示,说需要编辑那2个配置文件,因为前面已经编辑过了。所以直接下一步。

    Step [7 – 7]恭喜你安装完成了。建议把install.php文件更改一下名称

     

  • WindowsXP停服后获取微软update方法

    2014年4月8日,微软停止了对Windows XP的支持,不再向该系统提供热修复、产品更新及安全补丁等服务。微软多次表示,XP在无法获取系统更新、安全补丁后极易受到攻击,建议大家抓紧时间升级到Win7或者Win8.1 Update。

    事实上,Windows XP仍然有办法能获得微软发布的更新。有德国技术高手在论坛上发布了一则教程,对Windows XP做一些手脚,就能让Windows Update服务器误以为你的XP是Windows Embedded POSReady 2009,从而继续为电脑提供Windows更新和安全补丁。

    具体方法:

    1、在桌面空白处右键点击,创建一个新的文本文档,可以随意命名,然后将其扩展名更改为.reg,右键点击该文件,选择“编辑”。

    2、在打开的窗口中粘贴下列代码并保存:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\WPA\PosReady]

    “Installed”=dword:00000001

    复制代码双击该.reg文件,重启计算机,然后去检查Windows Update,如果不是人品太差,你就会发现一些新的更新可以下载。Windows XP与Windows Embedded POSReady 2009十分相似,所以你可以安装后者的系统更新来获取微软的保护。与Windows XP不同,Windows Embedded POSReady 2009的官方支持期限截至2019年4月9日,所以你的Windows XP还能在未来5年内继续获取微软更新,除非微软封堵上述伪装手段。

    不过还是提醒各位XP用户,如果能够升级到Windows7或者Windows 8.1 Update的话还是建议各位升级啦。