给已安装的Linux新增Swap交换分区

跟了我 5 年多的本本已步入花甲,CPU 严重老化,运行 Windows 异常吃力,于是考虑换成 Linux 试试。忙活了一天,测试了 2 个“家用”Linux 发行版,一个是深度的 Linux Deepin 2013,另一个是雨林木风的 StartOS 5.1。在测试过程中也遇到一些有用的经验,现在就一一记录一下。

这是在安装完 StartOS 后进行的记录,因为是安装在以前的 C 盘,就没继续分区来新增挂载点,直接挂了个根分区(/)就装完了系统。进入系统之后,发现没 swap 交换分区,所以就手动添加了一下。

Ps:添加 swap 交换分区是需要 root 权限的,不会的可以点击查看如何启用此类系统的 root 帐号


 

新增 swap 分区,四个步骤即可搞定:

完成以上三个步骤之后,就可以使用 free -m 的命令查看到 swap 分区已经生效了,但是这还只是临时的,重启系统后将会失效,所以我们要将这个分区写到 fstab 中:

使用  vim /etc/fstab 编辑 fstab 文件,在后面追加以下内容(路径依然不变)

如果不太会使用 vim,可以使用 echo 追加的方式写入,注意写入前先备份一下 fstab 文件。

记录到此结束,最后附上博主的前三步操作截图,供参考:

给已安装的Linux新增Swap交换分区

Linux系统监控、诊断工具之top命令详解

暂时没有写作灵感,就整理一些 Linux 基础知识好了,方便自己查阅,同时也是温故而知新嘛~!

在三叶运维,同样很有用的知识性博文还有以下几篇,也许你也会比较感兴趣:

详解 Linux 系统的 CPU 负载均值

教你如何查看 Linux 的 CPU 负载

Linux 服务器的进程查看命令详解

Llinux 文件目录权限及 chmod 命令简析

Linux 系统内存监控、性能诊断工具 vmstat 命令详解

Ps:更多相关博文,请访问系统运维 或 站内搜索,当然有其他 Linux 相关知识的需求也欢迎留言。

接触 linux 的人对于 top 命令可能不会陌生(不同系统名字可能不一样,如 IBM 的 aix 中叫 topas ),它的作用主要用来监控系统实时负载率、进程的资源占用率及其它各项系统状态属性是否正常。

下面我们先来看张 top 命令的截图:Linux系统监控、诊断工具之top命令详解

(1)系统、任务统计信息:

前 8 行是系统整体的统计信息。第 1 行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60,0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。注意:这三个值可以用来判定系统是否负载过高——如果值持续大于系统 cpu 个数,就需要优化你的程序或者架构了。

(2)进程、 cpu 统计信息:

第 2~6 行为进程和 CPU 的信息。当有多个 CPU 时,这些内容可能会超过两行。内容如下:

Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用 CPU 百分比
1.0% sy 内核空间占用 CPU 百分比
0.0% ni 用户进程空间内改变过优先级的进程占用 CPU 百分比
98.7% id 空闲 CPU 百分比
0.0% wa 等待输入输出的 CPU 时间百分比
0.0% hi Hardware IRQ 即“中断请求”的意思。
0.0% si Software IRQ

(3)最后两行为内存信息:

Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

PS:如何计算可用内存和已用内存?

除了 free -m 之外,也可以看 top:

3.1  实际的程序可用内存数怎么算呢?

The answer is: free + (buffers + cached)

88024k + (25068k + 85724k) = 198816k

3.2  程序已用内存数又怎么算呢?

The answer is: used – (buffers + cached)

167568k – (25068k + 85724k) = 56776k

3.3  怎么判断系统是否内存不足呢?

如果你的 swap used 数值大于 0 ,基本可以判断已经遇到内存瓶颈了,要么优化你的代码,要么加内存。

3.4  buffer 与 cache 的区别

A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use 从应用程序角度来看,buffers/cached 是等于可用的,因为 buffer/cached 是为了提高文件读写的性能,当应用程序需在用到内存的时候,buffer/cached 会很快地被回收。

所以从应用程序的角度来说,【可用内存】=【系统 free memory】+【buffers】+【cached】

buffers 是指用来给块设备做的缓冲大小,他只记录文件系统的 metadata 以及 tracking in-flight pages.
cached 是用来给文件做缓冲。

那就是说:buffers 是用来存储,目录里面有什么内容,权限等等。而 cached 直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次 cat 一个比较大的日志文件,比如 nginx 的 access.log,你就可以明显的感觉到第二次的开打的速度快很多。

因为 Linux 将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像 windows 那样,即使你有很多空闲内存,他也要访问一下磁盘中的 pagefiles)

(4)进程信息区:

统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号 列名 含义
a PID 进程 id
b PPID 父进程 id
c RUSER Real user name
d UID 进程所有者的用户 id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice 值。负值表示高优先级,正值表示低优先级
j P 最后使用的 CPU,仅在多 CPU 环境下有意义
k %CPU 上次更新到现在的 CPU 时间占用百分比
l TIME 进程使用的 CPU 时间总计,单位秒
m TIME+ 进程使用的 CPU 时间总计,单位 1/100 秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位 kb。
q RES 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位 kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位 kb
t SHR 共享内存大小,单位 kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

(5)查看指定列

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。
可以通过下面的快捷键来更改显示内容:

5.1 f 键选择显示内容

通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。

5.2 o 键改变显示顺序

按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。

5.3 F/O 键将进程按列排序

按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

(6)常用交互命令

从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了 s 选项,则可能其中一些命令会被屏蔽掉。

(7)最后的技能:top 命令小技巧

12、增强版的 top:htop ,一个更加强大的交互式进程管理器:

Linux系统监控、诊断工具之top命令详解

php平滑重启nginx,彻底清除WordPress的静态缓存

每一次分享技术文章,都是基于自己的痛点,基于自己的需求。这次也一样,所以分享具体方法之前,我先说一下我这次的需求与痛点:

一、需求痛点

在博客集成了代码版缓存功能之后,为了方便在前台清理页面缓存,我特意写了ajax 清理缓存的功能相关文章)。这个功能写好之后确实可以正常工作。

但是,为了让网站加载速度提升到极致,我还在 nginx 里面加了类似于 WP Super Cache 的 mod_rewrite 机制:当存在页面缓存时,会绕过 PHP 解析,而直接调取缓存在前台展示。

这样就发现了一个问题:当我在前台点击缓存清理后,后台的页面缓存文件确实是删除了,但是 nginx 却在内存里面缓存了一份!!从而导致一段时间内怎么刷新页面,展示的依然是缓存内容!这样一来,不管是我还是用户,点击前台这个清理按钮根本就不能实时看到效果,明显就鸡肋了!

我发现这个问题的做法是,点击按钮删除缓存,然后进入 Linux 系统去 reload 一下 nginx,才能彻底刷新缓存!我勒个去,每次我调试代码的时候,真心能把人累死(虽然我可以关闭缓存功能,但是我就是要享受一下自己写的清理功能嘛!)。

需求都有了,怎能让技术成为瓶颈?

所以,根据以上需求,很容易得出一个解决方案:当点击前台清理按钮时,php 先删除缓存文件,然后 reload 平滑重启 nginx 就可以实现彻底清除缓存了!

测试了半天,发现难点是 php 如何才能执行 Linux 命令。经过不断测试,终于搞定这个问题,下面开始分享!

二、执行权限

php 执行 Linux 命令有几个前提条件:

①、php 必须开放一些执行外部命令的函数,比如 exec()、system()等;

②、必须赋予 WEB 启动帐号(比如 www 帐号)执行特殊命令(比如 …/nginx -s reload)的权限。

对于问题 ①:

i. 修改 php 配置文件 php.ini,先找到 safe_mode 配置,确认 safe_mode=off,即关闭 php 安全模式(lnmp 一键安装包默认已经是关闭的了);

ii. 继续找到 disable_functions 配置,将其中的 exec 删除,即允许执行 exec()函数;

ii. 最后重载 php-fpm 或 php 即可生效,比如 lnmp 环境可以执行 service php-fpm reload 命令。

Ps:开启 exec 函数存在被恶意注入的风险,不过我这种小博客就没什么好惧怕的,况且我的备份及防护都很完善!

对于问题②:

我们需要在 Linux 中赋予 WEB 帐号使用 sudo 执行指定命令的权限,在这个需求中,我们可以这样做:

Ps:操作 vim 需要一定的 Linux 基础知识,不会的童鞋先脑补一下吧!

三、部署代码

①、新增平滑重启 nginx 的脚本

②、PHP 代码

php 执行这个脚本的代码很简单:

Ps:实际上,使用 exec(/opt/reload_nginx.sh””) ; 也是完全可以的。多套了一层 EscapeShellCmd 是为了安全考虑(其实这里貌似没啥必要,算是掩耳盗铃吧!)。

既然知道 php 代码了,那么只要修改上次分享的缓存清理代码,如下新增 26 行和 33 行即可:

Ps:若对以上代码有任何疑问,请务必参考上一篇相关文章

全部完成之后,现在在前台使用缓存清理功能,将会先删除缓存文件,然后平滑重启 nginx,从而真正实现在纯静态的前台实时清理缓存,显示最新内容!

四、写在最后

这篇教程算是我这种强迫症&发骚友学习实验之作,而且整个教程并未过多考虑安全问题。所以,如果不是和我这种既不在意被人攻击,又清楚个中原理的人,还是不建议做这种强迫症设置(实际上也就是解禁了 exec 函数存在隐患而已)!

总之,这篇文章分享的方案,还是有一定的参考价值的,根据本文思路,就可以实现在 WEB 界面任意操作服务器了,其实也就和大部分站长用的 Linux 系统面板差不多,希望能给有需要的人提供一些参考,有任何相关问题记得给我留言。

Redhat设置NFS挂载的简单步骤

初识 nfs 还是在测试 lvs 负载均衡的时候,为了保证代码的一致性,将一台 Realserver 作为 nfs 服务器,而其他 Realserver 均以 nfs 将代码挂载过来。这样就保证了代码的一致性,但也是由很大隐患的,一旦那台 Realserver 宕机,那就全军覆没了…好了,废话不多说,进入 nfs 挂载简单步骤。

一、安装 nfs

一般 redhat 是默认安装了 nfs 服务的,如果非默认安装且取消勾选 nfs 的话,需要挂载 iso 或下载安装包手动安装,就几个 rpm 包,就不多说了。

二、配置/etc/exports

nfs 允许挂载的目录及权限需在文件/etc/exports 中进行定义。例如,我们要将代码所在目录/www/code 共享出来,那么我们需要编辑/etc/exports 文件,追加一行:

其中:

  • /www/code 是要共享的目录;
  • * 代表允许所有的网络段访问(仅测试中使用,实际使用应该做严格的 IP 限制);
  • rw 开启共享目录的可读写权限;
  • sync 是资料同步写入内存和硬盘;
  • no_root_squash 是客户端分享目录使用者的权限,如果客户端使用 root,那对于该共享目录而言,客户端就有 root 权限;

其他更多参数说明:

三、启动 nfs 服务

在启动 nfs 之前需要先启动 portmap 服务,否则如下报错:

正确方法先启动 portmap 再启动 nfs,如下:

四、在客户端主机上挂载共享目录

1、挂载之前同样需要先启动 portmap 服务(同上);

2、在客户端使用 showmount -e 查看 nfs 主机共享情况:

3、在客户端建立 code 文件夹(名称需相同,路径可以不同),并使用 mount 挂载命令:

注意事项:千万不要学博主,测试时误使用了 mount -t nfs 192.168.1.100:/www/code  /www/,导致原先/www 目录内容全部被卸下,就算重新 mount -o loop 也是很麻烦的!所以强烈建议路径保持一致!

4、若无报错,则可使用 df -h 查看到挂载情况:

5、若是需要长期使用,则可以设置开机自动挂载,将相关服务设置为自启动,并将挂载命令也加入开机启动即可(略)


五、在客户端卸载已挂载的目录

1、常规卸载命令:

2、有时因为 nfs 主机或网络故障,会出现常规卸载提示 device is busy 的提示,此时强制卸载命令如下:

3、上述卸载命令均无法生效时,请继续往下看:

以下摘自网络:

fuser 通常被用在诊断系统的“resource busy”问题,通常是在你希望 umount 指定的挂载点得时候遇到。 如果你希望 kill 所有正在使用某一指定的 file, file system or sockets 的进程的时候,你可以使用-k 选项。

格式为: $ fuser -m -v  (nfs 挂载点) 回车执行后得到的结果依次是:用户 进程号 权限 命令

此命令可以查看到访问此设备的所有进程,停止进程后 umount.

如果添加参数 -k 则可以一次性将所有当前访问 nfs 共享盘阵的进程停止 也可以加-i 打开交互显示,以便用户确认

或者用 fuser 命令:

#fuser -v -m 挂载点

即可查处 用户 PID 等,KILL 掉该进程后再 umount.

或者

#umount -l 挂载点

选项 –l 并不是马上 umount,而是在该目录空闲后再 umount.还可以先用命令 ps aux 来查看占用设备的程序 PID,然后用命令 kill 来杀死占用设备的进程,这样就 umount 的 NFS 服务安全非常放心了.

 


好了,以上就是 redhat 下的简单设置,也是博主自己用的步骤,适合初次使用 nfs 的筒子参考,希望对你有所帮助!

事实证明Linux永远是NO.1

嗨,我正在写一个简单的程序,我要让这个程序打印出一个整数。

  1. #include <stdio.h>   
  2. int main() {   
  3.     int linux = 701;   
  4.     printf(“%d”, linux);   
  5.     return 0;   
  6. }  

够简单吧。真的吗?

我把它存成了 code.c

现在我编译并运行它:

  1. $ gcc code.c && ./a.out  

糟糕!,编译失败,出现了下面的错误信息:

  1. code.c: In function ‘main’:   
  2. code.c:4:6: error: expected identifier or ‘(’ before numeric constant    
  3. int linux = 701;   
  4.      ^  

这是一个在线编译这段代码的链接:http://ideone.com/kQCmVL

困惑 !!

在谷歌上搜索这个错误——得到的信息是这种错误需要对代码进行预处理。

于是,我在编译时带上了-E 参数,它能让编译在预处理后停止:

  1. $ gcc -E code.c  

预处理过的 main()函数代码显示如下:

  1. int main() {   
  2.     int 1 = 701;   
  3.     printf(“%d\n”, 1);   
  4.     return 0;   
  5. }  

我晕!C 语言的预处理编辑器竟然将变量 Linux 换成了整数 1。当编译器遇到了 int 1 = 701;语句时,抛出了错误。

现在,我不对变量 Linux 赋任何值:

  1. #include <stdio.h>   
  2. int main() {   
  3.     printf(“%d\n”, linux);   
  4.     return 0;   
  5. }  

编译并运行:

  1. $ gcc code.c && ./a.out  

在线编译的链接地址:http://ideone.com/kyrNDw

编译成功并且输出:

  1. 1  

事实证明,Linux 总是 Number 1。

事实证明 Linux 永远是 NO.1

[英文原文:C language and the linux macro – proof that linux is always Number 1 ]


 

 博主:我刚刚特意在 redhat 系统中试了下,还真是这样,哈哈,这是 linux 系统默认赋值么?看来 linux 确实是开发者引以为傲的系统呢!

在Linux中发现IP地址冲突的方法

Linux 下出现 IP 冲突,是不会像 Windows 那样,在右下角弹出冲突提示的。博主就出过一次糗,记得当时是在 VM 虚拟机里面安装了 4 个 redhat,测试 LVS 集群。结果发现其中一台 RealServer 老是掉线,重启 network 服务后能正常几分钟,然后又掉线了。。。

4 个 Redhat 都是 VM 克隆出来的、完全一致的系统,仅其中一台出问题,所以博主觉得匪夷所思!直到,后来我的办公电脑(宿主)网线直接没信号了,才知道原因:

原来,是那台频繁掉线的虚拟系统和其他部门的办公电脑出现了 IP 冲突,由于 Linux 不会出现冲突提示,作为“始作俑者”的我依然蒙在鼓里!桌面运维那边兄弟,估计暗地里把造成 IP 冲突的人骂了个狗血淋头了(后来才知道是我)。。。网络每隔几分钟掉线的原因是因为,那边的用户发现 IP 冲突后,不能上网,然后重启电脑,就把我给冲下来了!而我重启 network 服务又把她给冲下去了。。。我了个去,恶性循环啊!哈哈!!后来,桌面运维兄弟一时找不到冲突来源,就直接通过交换机查到了这个冲突 IP 的端口,然后把网线拔了,等“始作俑者”去找他。。。最后,发现这个人居然是我。。哈哈!

以上,就是博主以前经历的糗事了,拿来分享下,正好引出下面的查看 linux 系统 IP 冲突的教程。在Linux中发现IP地址冲突的方法

在虚拟机里面直接配了和宿主一个段的 IP 地址,

你们都知道什么是 IP 地址,是吧?它们被分配给网络上的设备来代表它们。它们通过 DHCP 服务器分配并且会经常改变。现在有两种 IP 地址。动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态的,意味着它们不会改变。

有时这会引发一些冲突。当一个动态 IP 被分配了并且有另外一台网络设备已经拥有了相同的 IP。或者在相同网络子网上有多台分配 IP 的 DHCP 服务器。如果你有连通问题并且假设它是由于 IP 冲突造成的,那么你可以使用一个工具称作 arp-scan 来扫描它们。

这个工具会在本地网络发送 ARP(Address Resolution Protocol)(地址解析协议)包来收集地址。如果有多个 MAC 地址声称拥有相同的 IP 地址,那么这里就存在冲突。

要在 Ubuntu 或者 Debian 上安装 arp-scan 则输入:

对于 Fedora,CentOS 或者 RedHat:

要检测 IP 冲突,运行下面的命令:

博主补充:redhat root 用户不需要前面的 sudo 命令了。

输出示例:

在本例中,192.168.1.39 这个 IP 冲突了,因为它出现了两次。


via: http://www.unixmen.com/find-ip-conflicts-linux/

译者:geekpi 校对:wxy

为网站开启Nginx缓存加速,支持html伪静态页面

上一篇文章分享了如何开启 Nginx 的缩略图功能,也提到了 Nginx 缩略图在完美替代七牛缩略图或 PHP 缩略图的同时,还会带来一定的 CPU 负载消耗。

因此,本文就来分享一下如何解决这个实时生成缩略图带来的 CPU 开销问题。

思路很简单,既然你要实时生成,那我就将你生成的缩略图缓存一份好了!在我测试期间发现,Nginx 的缓存也同样可以缓存伪静态的 html 页面,完全可以替代 WP-Super-Cache 这类缓存插件了。相信大部分 CDN 也是用的这个原理,比如百度云加速,我们可以在 header 里面发现一个 “Server:yunjiasu-nginx”的标识。

好了,废话不说,一起来看看如何实现吧!

为网站开启Nginx缓存加速,支持html伪静态页面

一、代理模式

代理模式,即在使用 Nginx 反向代理时缓存指定内容,所用模块为 proxy_cache。这里网络上的很多教程会说,这个模式必须在反向代理中才能使用,说的好像不能用在只有一台服务器的情况似的。其实不然,我们用点小技巧,将 Nginx 本机的 80 端口代理转发到 本机的 8080 端口即可变相的开启反向代理模式,在这期间,就完全可以指定缓存内容了,且继续往下看!

①、下载模块

所用模块为 ngx_cache_purge,官方地址:http://labs.frickle.com/files/,我们可以挑选一个新版本下载到服务器上,比如 http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

②、重新编译

所以先执行 -V 命令查看 Nginx 是否已经编译了该模块,

如果编译参数中找不到 ngx_cache_purge,就需要重新编译 Nginx ,新增编译参数:

我现在用的是淘宝开放的 Tengine ,可以使用动态加载模块功能,如果是原版 Nginx ,可以参考三叶运维之前分享的文章,在原来的基础上加上上述参数重新编译 Nginx 即可:

Nginx 在线服务状态下平滑升级或新增模块的详细操作记录

③、新增配置

A. 在 http 上下文中新增缓存配置:

Ps:上述配置中出现的目录,请在保存配置后,使用 mkdir 手动创建。

B. 如下修改网站原来的 server 模块:

B. 如下新增一个反向代理 Server 模块,用于转发请求到本地 8080,变相实现反向代理模式:

全部保存后,执行 nginx -s reload 让配置生效即可。现在你再去访问网站的 html 页面,刷新一次就可以看到效果了!加载速度绝逼会有质的飞跃!而且你可以在 F12 开发模式的 Network 状态中看到 Nginx-Cache HIT 的标识!

④、清理缓存

清理缓存就有点麻烦了,我弄了多次也还是感觉不怎么好用!网上也有不少先驱分享了自动清理脚本或批量清理代码等。不过用了下也是不咋的好用。

还是说一下清理方法吧!在 A 部分的配置中,我们已经加入了 purge 缓存清理页面,假设一个 URL 为 http://192.168.1.1/test.html,通过访问 http://192.168.1.1/purge/test.html 就可以清除该 URL 的缓存(我实际测试经常是 404…)。

二、本地模式

第一种代理模式,我们是利用本地转发变相实现反向代理下的 Nginx 缓存功能,并且可以缓存 html 伪静态页面。从整体的配置可以看出,已经非常接近百度云加速等 CDN 的缓存功能了!对于理解 CDN 缓存还是有不小的帮助的!

现在分享一下,如果不用反向代理模式,该如何实现 Nginx 缓存呢?很简单,进一步借助 ngx_slowfs_cache 模块即可,这也是三叶运维在用模式,如何实现,且继续往下看。

①、下载模块

这个模式需要下载 2 个缓存模块:ngx_cache_purge 和 ngx_slowfs_cache 。这 2 个模块都出自一个网站,下载地址依然是 http://labs.frickle.com/files/ ,挑选一个最新版下载即可,比如:

http://labs.frickle.com/files/ngx_slowfs_cache-1.9.tar.gz

②、重新编译

和第一种模式一样,新增 2 个 –add-module 重新编译 Nginx 即可:

具体就不赘述了,参考上文和博客之前的分享就可以搞定了。

③、新增配置

I. 在 http 上下文新增如下配置:

Ps:以上配置中所涉及的目录请手动创建。

II. 在 server 模块中新增如下配置:

保存后,执行 nginx -s reload 重载 Nginx 即可。测试中发现,这种模式貌似无法缓存 html 伪静态页面,稍有遗憾,有兴趣的童鞋可以深入研究看看,可能是我没测试到位。

三、惯例总结

好了,通过以上折腾,我们已经完美的解决了 Nginx 实时生成缩略图带来的 CPU 开销问题了!而且,从代理模式的缓存中,我们甚至可以缓存 html 伪静态页面,这意味着什么?强迫症们有可以无情的丢弃一款 WordPress 缓存插件啦!不过,三叶运维暂时还是使用自己写的 php 代码来实现静态缓存,没有别的,主要是为了方便管理。

总体来说,对于 Nginx 的缩略图和缓存,我还是非常满意的,喜欢折腾的朋友也可以亲自试试,也许你能找到比本文更多的经验呢!

Windows 7下获取System权限

公司推 Win7 了,作为 IT 部门,铁定是先行测试的小白鼠。于是先给我们安装了 Win7 工作环境。一直以来,除了服务器,普通办公 PC 的管理员都是被桌面运维部收管的,其他 IT 部门使用的都是普通 AD 账号。

对于我这样喜欢折腾测试软件的人来说,没有管理员权限是很痛苦的一件事情!还未推广 Win7 时,我就用了这个获取 System 权限的办法,变相的取得管理员权限,而网域监测系统却不会报警。废话不多说,直接上菜:

PS:这个方法的前提是必须有管理员权限(在系统安装完成后,会让我们自己调试一段时间再回收管理员,所以就趁这个时间段来做这个小动作了)

原理很简单,其实就是添加一个系统服务来调用 cmd 窗口,因为系统服务都是管理员权限创建的,所以调出来的 CMD 也是有管理员权限的。


 

方法:在管理员环境下打开 CMD 窗口,输入以下命令来添加一个 syscmd 的服务(syscmd 名称可以自定义):

提示添加成功后,就算桌面工程师把管理员密码收走了,你在普通账号环境下只需打开 cmd 执行:

即可打开一个具有管理员权限的 CMD 窗口!这时候你就可以再 CMD 中执行需要管理员权限的所有动作了,比如安装软件、新建账号等等,而这一切都可以避开 AD 的监控机制哦!

如果什么时候你不想用了,可以先调出这个 CMD 窗口,然后执行如下删除语句即可:

以上就是普通账号下获取超级管理员权限的方法了,网上一搜一大把教程,大同小异,我也只是记录一下,便于记忆也帮助了有需要的朋友。

经测试,Win7 网域账号下也能使用,不过显示界面会有所不同,XP 下使用 net start syscmd 可以直接调出 CMD 窗口,而 Win7 则会弹出一个如下提示(繁体 Win7):

 Windows 7下获取System权限

选择第一项【查看信息】之后,就能切换到一个如下图所示界面,仅剩下一个 CMD 窗口和一个交互界面:

Windows 7下获取System权限

如图,我通过 echo %username%输出当前用户名是 IT-C11040324$,也就是电脑名称!话说这个账号的权限级别比 Adminsitrator 还要高呢!网上说是 System 权限,我也不管它是不是 system 权限了,反正我知道就算是普通账号环境,只要调出上图的 CMD,就可以做到 Adminsitrator 能做的所有事情,这就是我所需要的!

Linux系统chmod误操作目录权限恢复方法

部门刚上线了一个新系统,发现一个 BUG,于是开发直接上机器调试,他认为是文件目录权限不够的问题,于是想用 chmod -R 777 先给这个程序目录全部权限试试。

结果,那家伙手一抖命令敲成了:

而且想都不想就回车了,然后弹出一堆 /proc/*** 没权限更改目录权限的错误提示,我一看就冷了一大截。。。里面让他 ctrl +C 终止命令。

不出所想,系统文件权限已经大部分都变成了”777″!下面是解决方法:


Linux 中,如果意外误操作将根目录目录权限批量设置,比如 chmod -R 777 / ,系统中的大部分服务以及命令将无法使用,这时候可以通过系统自带的 getfacl 命令来拷贝和还原系统权限,若是其他系统目录被误操作,同样可行。修复的方法如下:

1、通过一台权限正常的 Linux(最好内核版本和故障服务器相同) 通过 getfacl -R / >systemp.bak 将这个正常系统的/目录下所有文件的权限都备份保存在 systemp.bak 中。

2、如果异常服务器未重启等操作并且连接未端,可以使用 scp 命令将正常的备份文件传至异常服务器中,命令如下:

scp root@目标机器 IP:system.bak 文件路径  本地存放 system.bak 路径

也可用其他方法把 systemp.bak 移动到异常服务器中。

3、在异常服务器中执行命令 setfacl –restore=systemp.bak 即可将现在的系统权限恢复成和正常系统一样。

4、reboot 重启系统

Linux网络实时流量监测工具iftop的安装使用

概述:网络管理是基础运维中一个很重要的工作,在看似平静的网络运行中,其实暗流汹涌,要保证业务系统稳定运行,网络运维者必须要了解网络的流量状态、各个网段的使用情形,带宽的利用率、网络是否存在瓶颈等,同时,当网络发生故障时,必须能够及时发现问题,迅速定位问题,进而解决问题,这就需要一些网络监测工具的辅助,本节将介绍一款小巧但功能很强大的网络实时流量监测工具 iftop。

一、iftop 概述

iftop 是 Linux 系统一个免费的网卡实时流量监控工具,类似于 top 命令。iftop 可以监控指定网卡的实时流量、端口连接信息、反向解析 IP 等,还可以精确显示本机网络流量及网络内各主机和本机相互通信的流量集合,非常适合于监控代理服务器或路由器的网络流量。同时,iftop 对检测流量异常的主机非常有效,通过 iftop 的输出可以迅速定位主机流量异常的根源,这对于网络故障排查、网络安全检测是十分有用的。

二、iftop 安装

iftop 的官方网站为:http://www.ex-parrot.com/pdw/iftop/, 目前的最新稳定版本为 iftop-0.17。安装 iftop 非常简单,有源码编译安装和 yum 方式安装两种方式,这里以 Centos6.4 版本为例,简单介绍如下。

①、源码编译安装

安装 iftop 必需的软件库:

前往iftop 官网下载最新的源码包,编译安装:

 ②、yum 在线安装

这样,iftop 就安装完成了。

三、iftop 使用

安装完 iftop 工具后,直接输入 iftop 命令即可显示网卡实时流量信息。在默认情况下,iftop 显示系统第一块网卡的流量信息,如果要显示指定网卡信息,可通过“-i”参数实现。

①、iftop 输出界面说明

执行“iftop -P -i em1”命令,得到如下图所示的 iftop 的一个典型输出界面:

Linux网络实时流量监测工具iftop的安装使用

iftop 的输出从整体上可以分为三大部分:

第一部分。是 iftop 输出中最上面的一行,此行信息是流量刻度,用于显示网卡带宽流量。

第二部分。是 iftop 输出中最大的一个部分,此部分又分为左、中、右三列,左列和中列记录了哪些 IP 或主机正在和本机的网络进行连接。其中,中列的“=>”代表发送数据,“<=”代表接收数据,通过这个指示箭头可以很清晰地知道两个 IP 之间的通信情况。最右列又分为三小列,这些实时参数分别表示外部 IP 连接到本机 2 秒内、10 秒内和 40 秒内的平均流量值。另外,这个部分还有一个流量图形条,流量图形条是对流量大小的动态展示,以第一部分中的流量刻度为基准。通过这个流量图形条可以很方便地看出哪个 IP 的流量最大,进而迅速定位网络中可能出现的流量问题。

第三部分位于 iftop 输出的最下面,可以分为三行,其中,“TX”表示发送数据,“RX”表示接收数据,“TOTAL”表示发送和接收全部流量。与这三行对应的有三列,其中“cum”列表示从运行 iftop 到目前的发送、接收和总数据流量。“peak”列表示发送、接收以及总的流量峰值。“rates”列表示过去 2s、10s、40s 的平均流量值。

②、iftop 使用参数说明

iftop 还有很多附加参数和功能。执行“iftop -h”即可显示 iftop 可使用的所有参数信息。iftop 常用的参数以及含义如下表所示。

③、iftop 的交互操作

在 iftop 的实时监控界面中,还可以对输出结果进行交互式操作,用于对输出信息进行整理和过滤,在上图所示界面中,按键“h”即可进入交互选项界面,如下图所示:

Linux网络实时流量监测工具iftop的安装使用

iftop 的交互功能和 Linux 下的 top 命令非常类似,交互参数主要分为 4 个部分,分别是一般参数、主机显示参数、端口显示参数和输出排序参数。相关参数的含义如下表所示。

iftop 的强大之处在于它能够实时显示网络的流量状态,监控网卡流量的来源 IP 和目标地址,这对于检测服务器网络故障、流量异常是非常有用的,只需通过一个命令就能把流量异常或网络故障的原因迅速定位,因此对于运维人员来说,iftop 命令是必不可少的一个网络故障排查工具。