邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

centos7下gcc升级
=====下载地址=====
https://ftp.gnu.org/gnu/gcc/

=====下载gcc和相关依赖=====
wget https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz
tar -zxvf gcc-5.4.0.tar.gz
cd gcc-5.4.0
./contrib/download_prerequisites //相关依赖


=====建立存放编译文件的文件夹+编译=====
mkdir gcc-build-5.4.0
cd gcc-build-5.4.0/
../configure --prefix=/usr/local/gcc5 --enable-languages=c,c++,go  --disable-multilib
make  //耗时很长很长
make install 

=====复制命令=====
rm -f /usr/bin/gcc
rm -f /usr/bin/g++
ln -s /usr/local/gcc5/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc5/bin/g++ /usr/bin/g++


=====关联新的动态库=====
cd /usr/local/gcc5/lib64/
cp libstdc++.so.6.0.21 /usr/lib64/
rm -rf /usr/lib64/libstdc++.so.6
ln -s libstdc++.so.6.0.21 libstdc++.so.6
Linux 中查看文件第n行内容的命令
Linux 中查看文件第n行内容的命令

方法1:
head -m filename | tail -1                    //查看filename文件的第m行(tail -1 是数字1)
例子:head -100 data.txt | tail -1          //查看data.txt文件的第100行

方法2:
 nl filename | sed -n 'mp'                     //查看filename文件的第m行
例子:nl data.txt | sed -n '100p'             //查看data.txt文件的第100行

方法3:
sed -n 'mp' filename                            //查看filename文件的第m行
例子:sed -n '100p 'data.txt                   //查看data.txt文件的第100行

方法4:
awk 'NR==m' filename                        //查看filename文件的第m行
例子:awk 'NR==100 'data.txt               //查看data.txt文件的第100行
linux下自制证书
cd /etc/pki/tls/certs
make action.key //期间会让你输入密码

mv action.key action.key.raw
openssl rsa -in action.key.raw -out action.key   //期间会让你输入刚刚的密码,此步骤是将刚建立的文件的密码取消掉

rm -f action.key.raw
chmod 400 action.key  //权限400

make action.crt SERIAL=20170820  //建立所需要的最终证书文件,期间会让你输入证书的信息
ll action* //查看

笔记来源:linux鸟哥的私房菜 服务器架设篇 -www服务器


linux下logrotate配置参数说明
参数 功能
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,轮循不会进行。
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ 
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).

vim /etc/logrotate.d/nginx
/data/wwwlogs/*nginx.log {
  daily
  rotate 5
  missingok
  dateext
  compress
  notifempty
  sharedscripts
  postrotate
    [ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
  endscript
}
linux下通过postfix发送邮件以及shell监控报警脚本
postfix安装

首先查看本机有没有安装 sendmail 
rpm -qa|grep sendmail 或者 alternatives --display mta
如果存在则删除或者停止
yum remove sendmail

安装postfix
yum -y install postfix*
vim /etc/postfix/main.cf
修改
myhostname = mail.flycoder.cn
mydomain = flycoder.cn
myorigin = $mydomain
inet_protocols = ipv4

启动服务
service postfix restart
chkconfig postfix on 
alternatives --set mta /usr/sbin/sendmail.postfix 或者 alternatives --config mta  选择对应的/usr/sbin/sendmail.postfix

测试邮件
echo 'Hello world!' | mail -s 'Test Email' youremail@domain.com

监控脚本

nginx监控脚本,php mysql redis和此类似
vim nginx.sh
#!/bin/bash
#nginx.sh
nc -w2 localhost 80
if [ $? -ne 0 ]
then
        echo 'Nginx is down' | mail -s 'Nginx is down' youremail@domain.com
        /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
fi

disk监控脚本
vim dish.sh  
#!/bin/bash
#disk.sh awk后面的具体跟随自身服务器显示的内容来写
num=`df |awk 'NR==2{print int($5)}'`
if [ $num -gt 80 ]
then
        echo "disk space is ${num}%" | mail -s 'disk space > 80' youremail@domain.com
fi

了解 Linux中Buffer和Cache

Buffer和Cache的区别 buffer与cache操作的对象就不一样。

buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。
 
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。

简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。 buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。


cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计的,也就是平常见到的一级缓存、二级缓存、三级缓存。 cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价高,又由于在cpu内不能集成太多集成电路,所以一般cache比较小,以后intel等公司为了进一步提高速度,又增加了二级cache,甚至三级cache,它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。

cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能。
NFS服务器搭建案例展示(转私房菜)
NFS服务器搭建案例展示(转私房菜)

模拟的环境状态中,服务器端的想法如下:

假设服务器的 IP 为 192.168.100.254 这一部;
/tmp 分享为可擦写,并且不限制使用者身份的方式,分享给所有 192.168.100.0/24 这个网域中的所有计算机;
/home/nfs 分享的属性为只读,可提供除了网域内的工作站外,向 Internet 亦提供数据内容;
/home/upload 做为 192.168.100.0/24 这个网域的数据上传目录,其中,这个 /home/upload 的使用者及所属群组为 nfs-upload 这个名字,他的 UID 与 GID 均为 210;
/home/andy 这个目录仅分享给 192.168.100.10 这部主机,以提供该主机上面 andy 这个使用者来使用,也就是说, andy 在 192.168.100.10 及 192.168.100.254 均有账号,且账号均为 andy ,所以预计开放 /home/andy 给 andy 使用他的家目录啦!


1.首先,就是要建立 /etc/exports 这个档案的内容啰,你可以这样写吧!
[root@www ~]# vim /etc/exports
/tmp         192.168.100.0/24(rw,no_root_squash)
/home/nfs    192.168.100.0/24(ro)  *(ro,all_squash)
/home/upload 192.168.100.0/24(rw,all_squash,anonuid=210,anongid=210)
/home/andy   192.168.100.10(rw)

2.再来,就是要建立每个对应的目录的实际 Linux 权限了!我们一个一个来看:

# 1. /tmp
[root@www ~]# ll -d /tmp
drwxrwxrwt. 12 root root 4096 2011-07-27 23:49 /tmp

# 2. /home/nfs
[root@www ~]# mkdir -p /home/nfs
[root@www ~]# chmod 755 -R /home/nfs
# 修改较为严格的档案权限将目录与档案设定成只读!不能写入的状态,会更保险一点!

# 3. /home/upload
[root@www ~]# groupadd -g 210 nfs-upload
[root@www ~]# useradd -g 210 -u 210 -M nfs-upload
# 先建立对应的账号与组名及 UID 喔!
[root@www ~]# mkdir -p /home/upload
[root@www ~]# chown -R nfs-upload:nfs-upload /home/upload
# 修改拥有者!如此,则用户与目录的权限都设定妥当啰!

# 4. /home/andy
[root@www ~]# useradd andy
[root@www ~]# ll -d /home/andy
drwx------. 4 andy andy 4096 2011-07-28 00:15 /home/andy


3.重新启动 nfs 服务:
[root@www ~]# /etc/init.d/nfs restart


4.在 192.168.100.10 这部机器上面演练一下:
# 1. 确认远程服务器的可用目录:
[root@clientlinux ~]# showmount -e 192.168.100.254
Export list for 192.168.100.254:
/home/andy   192.168.100.10
/home/upload 192.168.100.0/24
/home/nfs    (everyone)
/tmp         192.168.100.0/24

# 2. 建立挂载点:
[root@clientlinux ~]# mkdir -p /mnt/{tmp,nfs,upload,andy}

# 3. 实际挂载:
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/tmp         /mnt/tmp
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/nfs    /mnt/nfs
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/upload /mnt/upload
[root@clientlinux ~]# mount -t nfs 192.168.100.254:/home/andy   /mnt/andy

一个局域网络的 DHCP 服务器设定案例(转私房菜)
一个局域网络的 DHCP 服务器设定案例(转私房菜)

Linux 主机对内的 eth1 的 IP 设定为 192.168.100.254 这个;
内部网段设定为 192.168.100.0/24 这一段,且内部计算机的 router 为 192.168.100.254 ,此外 DNS 主机的 IP 为中华电信的 168.95.1.1 及 Seednet 的 139.175.10.20 这两个;
我想要让每个使用者预设租约为 3 天,最长为 6 天;
只想要分配的 IP 只有 192.168.100.101 到 192.168.100.200 这几个,其他的 IP 则保留下来;
我还有一部主机,他的 MAC 是『 08:00:27:11:EB:C2 』,我要给他的主机名为 win7 ,且 IP 为 192.168.100.30 

[root@www ~]# vim /etc/dhcp/dhcpd.conf
# 1. 整体的环境设定
ddns-update-style            none;            <==不要更新 DDNS 的设定
ignore client-updates;                        <==忽略客户端的 DNS 更新功能
default-lease-time           259200;          <==预设租约为 3 天
max-lease-time               518400;          <==最大租约为 6 天
option routers               192.168.100.254; <==这就是预设路由
option domain-name           "centos.vbird";  <==给予一个领域名
option domain-name-servers   168.95.1.1, 139.175.10.20;
# 上面是 DNS 的 IP 设定,这个设定值会修改客户端的 /etc/resolv.conf 档案内容

# 2. 关于动态分配的 IP
subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.101 192.168.100.200;  <==分配的 IP 范围

    # 3. 关于固定的 IP 啊!
    host win7 {
        hardware ethernet    08:00:27:11:EB:C2; <==客户端网卡 MAC
        fixed-address        192.168.100.30;    <==给予固定的 IP
    }
}

启动后观察一下埠口的变化:
[root@www ~]# /etc/init.d/dhcpd start
[root@www ~]# chkconfig dhcpd on
[root@www ~]# netstat -tlunp | grep dhcp


优惠券
广告位-淘宝
最新微语