my blog my blog

Tag: Linux
手动开启BBR方式优化TCP拥堵控制

在Linux的内核中,默认有reno和cubic,还有一些tcp拥堵算法Hybla,比如这里奶牛推荐使用BBR(Bottleneck Bandwidth and RTT)。这里我们需要先将Linux的kenel内核版本升级到4.9+以及5.x,因为kenel 4.9之后才默认加入了bbr的支持。

echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
sysctl -p
reboot

升级内核后执行上面的命令就可以设置bbr为默认了。查看bbr是否设置成功?

sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
sysctl -n net.ipv4.tcp_congestion_control
bbr
lsmod | grep bbr
tcp_bbr                16384  0

 

SSH与Linux主机交互文件传输工具lrzsz安装使用教程

以前传文件,奶牛一直是喜欢搭个web,然后直接把服务器文件扔上去然后从本地下载,或者用Bitvise SSH的SFTP工具来传输,直到忘了多久之前看到一个教学视频里面,有直接通过一条命令来传输本地文件到服务器上。最近无意中又看到了这个软件,名字叫lrzsz,推荐搭配Xshell这个SSH工具来使用。

lrzsz安装

CentOS下安装:

yum -y install lrzsz

Ubuntu下安装:

apt-get install lrzsz

lrzsz使用教程

lrzsz分开是两个命令,一个是rz,一个是sz。rz是用来从本地文件传输到服务器端,sz是用来从服务器端拉取文件到本地的。

使用方法也很简单:

sz filename
rz

其中sz后面直接加文件路径或者当前路径下的文件名即可,rz直接回车在Xshell下会直接弹出对话框来选择需要上传的文件的。

Linux下使用tar进行差异备份

说实话,奶牛这些年来一直都是手动完整备份文件,而且每次都是完整备份,其实很早之前就知道有增量备份这种东西了,可能是不太习惯吧,还是一直都是完整备份。今天就记录下tar进行差异备份和增量备份的一些心得。

首先说怎么做一个完整的备份

tar -czvf filename.tgz filename

这是普通的打包命令,没什么特别,下面我们使用一个-g参数

tar -g snapshot -czvf filename.tgz filename

执行完成后会生成一个snapshot文件,里面记录着备份信息。

这里插个分割线,说说增量备份和差异备份。

如果我们想进行增量备份,那么这个snapshot就需要一直更新,每次增量过后这个snapshot文件都会发生改变,如果我们需要还原,则需要把所有增量备份和完整备份一起还原。

如果我们想进行差异备份,那么我们需要把这个snapshot保护起来,然后每次都做针对完整备份的增量备份,那么恢复的时候我们只需要把最后一次增量备份和完整备份一起还原。

优缺点:增量备份占用的空间要小于差异备份,但是恢复起来非常麻烦,特别是比如一个月内只做一次完整备份,其它每天只做增量备份,那么恢复的时候要恢复很多个增量备份文件。

差异备份占用空间要比增量备份大一些,但是如果备份文件修改较少,则差异备份的文件也不会很大,恢复的时候只需要恢复完整备份和差异备份即可,工作量会小很多。

好了,回归正题,我们这里就讲差异备份,增量备份网上一堆参考,不多介绍了。

cp snapshot snapshot.backup
tar -g snapshot -czvf filename-1.tgz filename
mv snapshot snapshot-1.backup
cp snapshot.backup snapshot

这样一来,我们就在snapshot-1.backup中记录了这次差异备份的变化信息了,然后差异备份文件是filename-1.tgz

如果我们要备份的文件或目录里面存在软链接,而我们又需要备份其中软链接对应的文件或目录的源文件,我们则需要增加一个-h属性

tar -czvhf filename.tgz filename

查看tgz文件内容

tar -tvf filename.tgz

好了,奶牛今天的记录至此。

Linux下挂载VisualBox的共享目录

奶牛最近还是切换到了虚拟机下的linux,因为windows还得玩儿游戏,ps:游戏毁一生,吃鸡都是挂。

好了,方法:

1.安装Vbox的增强工具,方法不讲了

2.mount

mount -t vboxsf shared_dir_name /location_name
使用ab在linux下进行网站压力测试

ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。原理就是模拟并发请求访问指定次数,如果并发很大就相当于cc攻击了。

安装:我们当然不要安装一整套apache来用这么一个工具了,只安装相应套件就可以了。

sudo apt-get install apache2-utils  
sudo yum -y install httpd-tools

在ubuntu里面用apache2-utils,在centos里面用httpd-tools.

测试:

ab -n 1000 -c 10 https://www.xxx.com/

其中-n是指定总的访问次数,总的访问次数,总的访问次数,重要的事儿说三遍。

-c是指定并发数。

https://www.xxx.com/后面的/不能省略,或者需要指定完整的页面路径

上面命令的解释就是用10个并发访问https://www.xxx.com/,每个并发访问100次,总共访问了1000次。

自己玩儿了下,发现缓存插件真的能有效降低cpu的压力,提高网站性能,如果不用缓存cpu占用率简直不要飞到天上去。

Linux使用Curl并启用cookie功能

奶牛最近发现有的网站为了阻止第7层网络的攻击,选择了使用cookie进行阻止恶意攻击。比如Voxility在防护启用的时候,就会用如下的方式:

<html>
<head><meta http-equiv="refresh" content="1" /><meta http-equiv="cache-control"                                                                                                                                                              content="max-age=0" /><meta http-equiv="cache-control" content="no-cache" /><met                                                                                                                                                             a http-equiv="expires" content="-1" /><meta http-equiv="expires" content="Tue, 0                                                                                                                                                             1 Jan 1980 1:00:00 GMT" /><meta http-equiv="pragma" content="no-cache" /></head>
<script type="text/javascript">
<!--
function getCookie(w){
        cName = "";
        pCOOKIES = new Array();
        pCOOKIES = document.cookie.split('; ');
        for(bb = 0; bb < pCOOKIES.length; bb++){
                NmeVal  = new Array();
                NmeVal  = pCOOKIES[bb].split('=');
                if(NmeVal[0] == w){
                        cName = unescape(NmeVal[1]);
                }
        }
        return cName;
}
function printCookies(w){
        cStr = "";
        pCOOKIES = new Array();
        pCOOKIES = document.cookie.split('; ');
        for(bb = 0; bb < pCOOKIES.length; bb++){
                NmeVal  = new Array();
                NmeVal  = pCOOKIES[bb].split('=');
                if(NmeVal[0]){
                        cStr += NmeVal[0] + '=' + unescape(NmeVal[1]) + '; ';
                }
        }
        return cStr;
}
function setCookie(name, value, expires, path, domain, secure){
        var vlad = name + "=" + escape(value);
        if(expires){
                expires = setExpiration(expires);
                vlad += ";expires=" + expires;
        }
        if(path){
                vlad += ";path=" + path;
        }
        if(domain){
                vlad += ";domain=" + domain;
        }
        if(secure){
                vlad += ';secure';
        }
document.cookie = vlad;
}
function setExpiration(cookieLife){
    var today = new Date();
    var expr = new Date(today.getTime() + cookieLife * 24 * 60 * 60 * 1000);
    return  expr.toGMTString();
}
function delete_cookie(name){
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
// -->
</script>
<script type="text/javascript">
<!--
delete_cookie('hasVisitedSite');
setCookie('hasVisitedSite', 'Yes', '3', '/', '300', '');
delete_cookie('fb624561f4f8b25819e9b3c4fad70f85');
setCookie('fb624561f4f8b25819e9b3c4fad70f85', 'Yes', '3', '/', '300', '');
-->
</script><body></body></html>

如果我们直接curl加网址的话得到的就是这种情况。如果我们想访问真实内容需要启用cookie。

curl -c cookie.txt www.nenew.net
curl -b cookie.txt www.nenew.net

当第一次访问的时候,奶牛保存cookie信息在cookie.txt中,第二次访问包含cookie.txt中的信息,就可以访问到真实页面了。

Ubuntu安装配置Linux性能实时监测工具NetData

最近测试了ntopng,虽然普通版本的也还凑合,但是还是企业版的实时展示奶牛更喜欢,可是普通版本就没有实时功能了,所以就又找了一下,发现在github上这个netdata的star最多,目前已经达到了28.9K,感兴趣的朋友可以去https://github.com/topics/monitor看看。

言归正传,奶牛来说说netdata的安装过程。

安装:

curl -Ss 'https://raw.githubusercontent.com/firehol/netdata-demo-site/master/install-required-packages.sh' >/tmp/kickstart.sh && bash /tmp/kickstart.sh -i netdata-all

安装netdata编译所需组件,这里奶牛以全监控安装方式安装

git clone https://github.com/firehol/netdata.git --depth=1
cd netdata
./netdata-installer.sh --dont-start-it

这里根据提示进行安装即可,安装完成后我们可以通过service netdata start 来启动。

配置:

这里有个有趣的现象,在/etc/netdata/netdata.conf文件中并没有配置选项,而是需要从web下载配置文件,当然这个web是localhost了。

#  wget -O /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
#  curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf

所以呢,就按照这个说明把netdata.conf文件下载下来就可以配置了。

在此,奶牛更希望我们以反向代理的方式进行访问netdata,所以奶牛并不推荐直接将netdata端口暴露出来,所以我们将netdata.conf文件中的

[web]
	bind to = 127.0.0.1

修改为绑定到本地地址。最后我们可以通过Nginx反向代理来进行访问,或者如果你不介意,不这样配置也无所谓。

VPS磁盘空间大小调整小记

MySQL的日志文件又一次把奶牛博客的磁盘撑爆了,今天一下班发现网站挂了,然后ping还可以通,就进ssh看看究竟,然后很无语,mysql无法关闭也无法启动,df -h看了一下,发现/目录已经爆满。之前已经遇到过一次这种情形了,所以直接去看MySQL的日志文件,果然,几个G在那里堆着,删删删,反正也懒得去分析日志找原因了。删了之后发现/目录还是占用了近80%的空间,呃,这就有点儿纠结了吧,然后仔细看了一下df -h,我去,VPS还自带分区的,两块盘,一块30G的盘竟然挂载到了/mnt目录下,好吧,还有这种玩儿法。然后就想把这个vdb的硬盘给挂载到/目录下,但是回头一想,LVM貌似也不合适,没法直接加的,因为/是vda1这个主分区在挂载,所以,好吧,直接把vdb分给/usr目录吧,反正一般的东西也就扔这里面的,比如那个可恶的MySQL日志文件。

cp -Rf -p /usr /mnt

其中的-p参数是为了保证文件的uid和gid都保持不变,当然,这里是使用root帐号来操作的。

然后

umount /dev/vdb
mount /dev/vdb /usr
df -h

查看下确实挂载没有问题了,然后程序也都正常运行,之后再修改fstab

vim /etc/fstab

将原先挂载在/mnt目录下的vdb修改为挂载在/usr目录下。

最后再说下MySQL的日志,配置文件在/etc/my.cnf下,可以进行自动过期处理等操作,也可以直接注释掉不记录日志。

军哥LNMP下typecho的rewrite配置隐藏index.php

最近新建了站点优推网并且开始使用typecho,安装配置过程中发现自带的rewrite无法隐藏index.php,解决方案是修改

/usr/local/nginx/conf/vhost/www.affu.net.conf

配置文件,将include enable-php.conf;修改为include enable-php-pathinfo.conf;

然后再在typecho的设置中启用固定链接即可正常显示。

最近打算将博客转入Sharktech的服务器,并且将使用7年的wordpress更换为typecho,wordpress不可说不好,但是现在感觉太臃肿了,对于一个写博客的感觉还是不太需要这么臃肿,轻便最好,再续…

Ubuntu下安装Intel 9260AC无线网卡教程

奶牛很久没有写ubuntu的文章了,虽然自己的服务器依然是使用ubuntu server,但是比较懒,也没有太多折腾,今天记录一下intel最新的9260ac无线网卡在ubuntu下的安装与使用。

Intel的中文支持页面更新还是有些缓慢,所以驱动程序我们可以在英文页面找到。Linux* Support for Intel® Wireless Adapters

官方页面给出的安装介绍如下

To install firmware:

    Copy the files into the distribution-specific firmware directory, /lib/firmware.
    If the directory does not work, consult your distribution documentation.
    If you configure the kernel yourself, make sure firmware loading is enabled.

首先是下载驱动程序:Intel 9260AC驱动

官方提到intel无线网卡驱动是依赖iwlwifi来加载驱动的,但是安装官方的方法将驱动文件解压后拷贝至/lib/firmware文件夹中重启是无法实现加载的,至少奶牛这里不行,也许你们把内核更新到最新大概可能会实现自动识别吧,但是奶牛把自己折腾的过程分享下。

DeviceKernelsFirmware
Intel® Wireless-AC 92604.14+iwlwifi-9260-th-b0-jf-b0-34.618819.0.tgz

官方的说明是内核要在4.14+,现在内核已经到了4.15RC版本了,4.14也更新到了4.14.10,奶牛第一次是安装的4.14版本内核,结果发现设备可以识别了,但是无法使用。然后找到iwlwifi的支持页面

页面中又说到iwlwifi-fixes with fixes for the current kernel release cycle,所以我们又去看iwlwifi-fixes,在2017-12-05这天更新了内容iwlwifi: add new cards for 9260 and 22000 series

好吧,看样子内核需要在12.05之后,奶牛这里安装的是4.14.10,看日期4.14.04也是12.05日,所以就索性当4.14.04之后的内核版本才支持吧。更新内核也很简单

mkdir kernel
cd kernel
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-headers-4.14.10-041410_4.14.10-041410.201712291810_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-headers-4.14.10-041410-generic_4.14.10-041410.201712291810_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-image-4.14.10-041410-generic_4.14.10-041410.201712291810_amd64.deb
dpkg -i *.deb

奶牛这里是安装的64位ubuntu操作系统,32位操作系统的同志自己去http://kernel.ubuntu.com/~kernel-ppa/mainline下面找对应的内核版本就好了。

更新内核后重启系统,安装wicd进行无线网卡管理,不要问奶牛为啥要装wicd,因为奶牛发现系统自带的那个管理器还是识别不了。。。好吧,就此折腾完毕。