Archive for the ‘Unix/Linux’ Category.

Linux 下屏幕截图工具 Scrot

Scrot 是 Linux下小巧而实用的截图工具,它采用基于命令行的工作方式。使用起来很方便。以ubuntu为例介绍scrot的使用方法

安装:    sudo apt-get install scrot

1.抓取整个桌面:    scrot pic1.jpg    #此命令将抓取整个桌面,并且生成名字为pic1.jpg的截图保存在当前目录下

2.抓取窗口:    scrot -bs pic2.jpg    #此命令将抓取一个窗口,选项b使得抓取窗口时一并抓取其边框,选项s使得用户可以用鼠标选定抓取的是哪个窗口(在想抓取的窗口上用鼠标点一下)

3.区域截图:    scrot -s pic3.jpg    #此命令用于矩形区域截图,用鼠标选定想截图的矩形区域

4.定时截图:    scrot -cd 10 pic4.jpg    #此命令用于定时截图,选项d后接数字10,代表定时为10秒钟,选项c显示倒计时

5.生成缩略图:    scrot -t 70% pic5.jpg    #此命令除了生成pic5.jpg外,还会生成名字为pic5-thumb.jpg缩略百分比为70%的缩略图

6.更改截图品质:    scrot -q 80 pic6.jpg    #此命令选项q用于决定截图的品质,数值介于1-100之间,数值越大,品质越好,占用的空间也越大。默认为75.

CentOS yum 安装 Apache + PHP + MySQL

# 检查并卸载
rpm -qa|grep httpd
rpm -e httpd
rpm -qa|grep mysql
rpm -e mysql
rpm -qa|grep php
rpm -e php

# 删除默认的Apache
yum -y remove httpd

# 查找最快的源
yum -y install yum-fastestmirror

# 更新
yum -y update

# 安装必要的组件
yum -y install patch make gcc gcc-c++ gcc-g77 flex bison file
yum -y install libtool libtool-libs autoconf kernel-devel
yum -y install libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel
yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel
yum -y install glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel
yum -y install ncurses ncurses-devel curl curl-devel e2fsprogs
yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel
yum -y install openssl openssl-devel vim-minimal nano sendmail
yum -y install fonts-chinese gettext gettext-devel
yum -y install ncurses-devel
yum -y install gmp-devel pspell-devel
yum -y install unzip

# 安装Apache+MySQL+PHP
yum -y install httpd php mysql mysql-server php-mysql

# 启动httpd服务
/sbin/service httpd start

# 启动mysql服务
/sbin/service mysqld start

# 设置mysql数据库root帐号密码,引号内填密码
mysqladmin -u root password ’123′

# 默认站点目录为/var/www/html/

# 安装apache扩展
yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql
# 安装php的扩展
yum install php-gd
yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc
# 安装mysql扩展
yum -y install mysql-connector-odbcmysql-devel libdbi-dbd-mysql

CentOS 同步系统时间问题

CentOS 系统同步时间需要使用 ntpdate 工具,但是使用时发现 command not found.

网上有人说是需要绝对路径:/usr/sbin/ntpdate

发现仍然是 command not found

原因是:工具没有安装。使用yum来安装: yum install ntp

安装完毕就可以使用了,同步北京时间:/usr/sbin/ntpdate cn.pool.ntp.org

编译安装 PHP 的 Redis 扩展

Redis 官网,客户端页面,有几个官方推荐的 PHP 客户端:

phpredis 是使用 C 写成的 PHP 扩展模块。这里就选择这个进行编译安装。

1. 首先,下载 phpredis 源码:

wget https://nodeload.github.com/nicolasff/phpredis/zipball/master

2. 解压源码:

unzip master

3. 进入源码目录,开始编译:

cd nicolasff-phpredis-5d4eb6c

/path/to/php/bin/phpize

./configure --with-php-config=/path/to/php/bin/php-config

make && make install

4. 配置 php.ini

cat >> /path/to/php/etc/php.ini
[redis]
extension="redis.so"

5. 重启 php-fpm, 测试结果.
重启 php-fpm 后,查看 phpinfo 页面,搜索 “redis” ,如果能找到下面的段落,即表示安装成功。

备:phpredis github https://github.com/nicolasff/phpredis

FreeBSD Ports 方式安装 MySQL 注意事项

需要注意的几点:

make安装时候的参数
WITH_XCHARSET=all 不加这个的话会不支持GBK编码
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes 这2项都是起到优化作用,都加上的好
mysql默认读取/etc目录下面的my.cnf,但是安装过程不会自动在这目录下创建本文件,默认这个文件在/usr/local/share/mysql目录下面,有3个版本:
my-large.cnf 一般高配置服务器或者mysql专用服务器用这个配置文件
my-medium.cnf 服务器配置并跑有其它应用时用这个配置文件
my-small.cnf 服务器资源紧张的就用这个好了
根据你的机器配置选择一个cp /usr/local/share//my-large.cnf /etc/my.cnf
安装过程并不会自动创建默认的数据库,需要手工创建
/usr/local/bin/mysql_install_db –user=mysql
并且需要更改数据库目录的权限,不然会启动不起来
chown -R mysql:mysql /var/db/mysql
启动mysql,好像第一次用脚本启动的话要使用
/usr/local/etc/rc.d/mysql-server onestart
使用/usr/local/etc/rc.d/mysql-server start不行
修改root密码,比如我们要修改成123456
mysqladmin -uroot -p password 123456
会提示你再次输入一次密码Enter password:,再输入一次123456即可(Fising注:这里应该是输入原来的老密码,而非确认新密码)
修改数据文件的默认目录
vi /etc/my.cnf中加入datadir=数据库的目录,记得把原/var/db/mysql中的文件都复制过去,再执行
chown -R mysql:mysql 数据库的目录
最后一点千万别忘记,要不然mysql又该启动不起来了
修改/usr/local/etc/rc.d/mysql-server文件中的mysql_dbdir=”/var/db/mysql”为你的新目录
或者在/etc/rc.conf中加入mysql_dbdir=”新目录”
最后在/etc/rc.conf加入mysql_enable=”yes”让mysql开机自启动

原文:http://www.viyin.net/2010/04/freebsd-ports-mysql.html

自定义 nginx 404 error page 相关问题

照着网上的帖子自定义nginx 404 错误页面:

1. 创建自己的404.html页面

2. 更改nginx.conf在http定义区域加入:fastcgi_intercept_errors on;

3. 更改nginx.conf(或单独网站配置文件,例如在nginx -> sites-enabled下的站点配置文件)中在server 区域加入: error_page 404 = /404.html 或者 error_page 404 = http://www.xxx.com/404.html

4. 更改后重启nginx,,测试nginx.conf正确性: /opt/nginx/sbin/nginx –t

注意:上面的做法的确可以实现自定义 404 错误页面,不过很快我发现了一个问题:当我访问一个不存在的页面时,虽然浏览器里面显示的是我自己制作的 404.html, 然而,我看到服务器端响应回来的 HTTP Status Code 还是 200 OK!

这对于 SEO 必定不利。

后来发现,更改一下配置语句即可修正这个问题,即:

将 “error_page 404 = /404.html” 这一句改为 “error_page 404 404.html”.

发现不同了么?就是去掉中间的等号!奇怪的~ 先记录下来备忘吧。

关于 Unix / Linux syslog

关于syslog协议

Syslog protocol(syslog协议)是一种工业标准的协议,允许一个设备通过IP网络把通告信息传递给事件信息接收者(也称之为“syslogd”,“syslog daemon”或“日志服务器”)。术语“syslog”一般用作真正的syslog protocol,或者也用作应用程序或库发送syslog信息。Syslog是一个简单协议,常用来管理计算机系统和安全审计。虽然存在大量不足,Syslog获得了大量设备和接收者跨越多个平台和操作系统的支持。因此,Syslog可用来将日志数据从多种不同类型的系统整合到一个存贮中心。

由于每个进程、应用程序和操作系统都或多或少地被独立完成,在syslog信息内容会有一些不一致的地方。因此,协议中并没有任何关于信息的格式或内容的假设。这个协议就是简单地被设计用来传送事件信息。在所有情况下,都有一个产生这个信息的设备,其中的syslog 程序可以发送信息到接收者,但是事件已经被接收到不会被通知。Syslog 采用用户数据报协议(UDP)作为其底层传输层机制。被分配syslog的端口是514端口。数据通常是以简明文本的形式发送的,但诸如Stunnel, sslio或sslwrap的SSL wrapper会被用来通过SSL/TLS提供层加密。

Syslog 协议和进程最基本原则就是其简便性,在协议的发送者和接收者之间不要求有严格的相互协调。事实上,syslog 信息的传递可以在接收器没有被配置甚至没有接收器的情况下开始。反过来,在没有被清晰配置或者定义的情况下,接收器也很可能接收到信息。这个简单原则很好地促进了syslog 的认可和开展。

从目前的情况来看,Syslog(系统日志)这一历史悠久的日志系统仍旧占据着最主流的地位。由于与类 UNIX平台之间的渊源,Syslog是在实际应用环境中最容易获得的日志系统。 同时,还有很多的基于Syslog的扩展产品存在,这其中也包括大量基于UNIX平台构建内核的网络硬件设备,这些设备往往都内置了Syslog功能支持,例如Cisco路由器就是如此。

配置 syslog 守护进程

syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。syslog守护进程是可配置的,它允许人们为每一种类型的系统信息精确地指定一个存放地点。现在,我们先看看syslog.conf文件的配置行格式(这个文件里的每一个配置行都是同样的格式),然后再看一个完整的syslog配置文件。syslog配置行的格式如下所示:

mail.*                /var/log/mail

这一行由两个部分组成。第一个部分是一个或多个“选择条件”;上例中的选择条件是“mail”。选择条件后面跟一些空格字符,然后是一个“操作动作”;上例中的操作动作是:/var/log/mail

1. 选择条件

选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件其实是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)把它们分隔开。上面给出的例子里只有一个选择条件“mail”。大家可以在我们后面给出的那个完整的syslog配置文件示例里看到同时有多个选择条件的配置行。表1列出了绝大多数Linux操作系统变体都可以识别的选择条件。

SYSLOG 设备

SYSLOG 设备

2. 优先级

优先级是选择条件的第二个字段,它代表消息的紧急程度。对一个应用程序来说,它发出的哪些消息属于哪一种优先级是由当初编写它的程序员决定的,应用程序的使用者只能接受这样的安排——除非打算重新编译系统应用程序。表2按严重程度由低到高的顺序列出了所有可能的优先级。注意,这里的LOG_*常量与PHP中的LOG_*常量的值不完全相同。

SYSLOG 消息优先级

SYSLOG 消息优先级

不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、“err”、“crit”、“alert”和“emerg”都包括在内。

3. 优先级限定符

syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!)。熟悉规则表达式的读者应该对这三种限定符不会感到陌生。星号(*)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点”。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。

等号(=)的含义是“只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点”。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。

就像它在编程时的用法一样,等号意味着等于且仅等于。叹号(!)的含义是“把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内”。比如说,这条syslog配置行将把除info优先级以外的所有消息发送到/var/log/mail文件里:

mail.*;mail.!info        /var/log/mail

在这个例子里,“mail.*”将发送所有的消息,但“mail.!info”却把info优先级的消息排除在外。就像它在编程时的用法一样,叹号意味着“非”。

4. 操作动作

日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。syslog配置文件并不复杂,既容易阅读又容易操作使用。这个文件里的注释都非常有用,应该好好读读它们。

建立一个中央日志服务器

1. 建立中央日志服务器前的准备工作

配置良好的网络服务(DNS和NTP)有助于提高日志记录工作的精确性。在默认情况下,当有其他机器向自己发送日志消息时,中央日志服务器将尝试解析该机器的FQDN(fullyqualifieddomainname,完整域名)。(你可以在配置中央服务器时用“-x”选项禁止它这样做。)如果syslog守护进程无法解析出那个地址,它将继续尝试,这种毫无必要的额外负担将大幅降低日志记录工作的效率。类似地,如果你的各个系统在时间上不同步,中央日志服务器给某个事件打上的时间戳就可能会与发送该事件的那台机器打上的时间戳不一致,这种差异会在你对事件进行排序分析时带来很大的困扰;对网络时间进行同步有助于保证日志消息的时间准确性。如果想消除这种时间不同步带来的麻烦,先编辑/etc/ntp.conf文件,使其指向一个中央时间源,再安排ntpd守护进程随系统开机启动就可以了。

2. 配置一个中央日志服务器

只须稍加配置,就可以用syslog实现一个中央日志服务器。任何一台运行syslog守护进程的服务器都可以被配置成接受来自另一台机器的消息,但这个选项在默认情况下是禁用的。在后面的讨论里,如无特别说明,有关步骤将适用于包括SUSE和RedHat在内的大多数Linux发行版本。我们先来看看如何激活一个syslog服务器接受外来的日志消息:

1). 编辑/etc/sysconfig/syslog文件。

在“SYSLOGD_OPTIONS”行上加“-r”选项以允许接受外来日志消息。如果因为关于其他机器的DNS记录项不够齐全或其他原因不想让中央日志服务器解析其他机器的FQDN,还可以加上“-x”选项。此外,你或许还想把默认的时间戳标记消息(–MARK–)出现频率改成比较有实际意义的数值,比如240,表示每隔240分钟(每天6次)在日志文件里增加一行时间戳消息。日志文件里的“–MARK–”消息可以让你知道中央日志服务器上的syslog守护进程没有停工偷懒。按照上面这些解释写出来的配置行应该是如下所示的样子:

SYSLOGD_OPTIONS=”-r-x-m240″

2). 重新启动syslog守护进程。

修改只有在syslog守护进程重新启动后才会生效。如果你只想重新启动syslog守护进程而不是整个系统,在RedHat机器上,执行以下两条命令之一:

/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart

3). 如果这台机器上运行着iptables防火墙或TCPWrappers,请确保它们允许514号端口上的连接通过。syslog守护进程要用到514号端口。

4). 为中央日志服务器配置各客户机器

让客户机把日志消息发往一个中央日志服务器并不困难。编辑客户机上的/etc/syslog.conf文件,在有关配置行的操作动作部分用一个“@”字符指向中央日志服务器,如下所示:

authpriv.*@192.168.1.40

另一种办法是在DNS里定义一个名为“loghost”的机器,然后对客户机的syslog配置文件做如下修改(这个办法的好处是:当你把中央日志服务器换成另一台机器时,不用再修改每一个客户机上的syslog配置文件):

authpriv.*@loghost

接下来,重新启动客户机上的syslog守护进程让修改生效。让客户机在往中央日志服务器发送日志消息的同时继续在本地进行日志工作仍有必要,起码在调试客户机的时候不必到中央日志服务器查日志,在中央日志服务器出问题的时候还可以帮助调试。

总结

日志系统承担着整个信息基础设施中感觉器官的作用,一个完善的、工作良好的体系需要在正确的地点部署日志采集工具。syslog-ng是syslog的增强版本。

转载自

http://www.networkdictionary.net/Protocol/Syslog-Protocol.php

http://server.it168.com/server/2007-10-28/200710281631265_1.shtml

Shell echo 的转义序列

序列 说明
\a 警示字符,通常是ASCII的BEL字符
\b 退格(Backspace)
\c 输出中忽略最后的换行符号(Newline). 这个参数之后的任何字符,包括接下来的参数,都会被忽略掉(不打印)
\f 清除屏幕(Formfeed)
\n 换行(Newline)
\r 回车(Carriage return)
\t 水平制表符(Horizontal tab)
\v 垂直制表符(Vertical tab)
\\ 反斜杠字符
\0ddd 将字符表示成1-3位的八进制数值

[学习笔记]为什么要使用 shell 脚本

之所以要使用 Shell 脚本是因为:

A. 简单性 – Shell是一个高级语言; 通过它,你可以简洁地表达复杂的操作。

B. 可移植性 – 使用 POSIX 所定义的功能,可以做到脚本无需修改就可以在不同的系统上运行。

C. 开发容易 – 可以在简短时间内完成一个功能强大又好用的脚本。

后台运行 MongoDB 服务进程 mongod

在 UNIX/Linux 系统中,通过 ./bin/mongod 启动 MongoDB 服务时,屏幕会输出很多运行信息,并不会回到 shell 提示符。除非 Ctrl + C,但是这样会停止 MongoDB 服务进程。

那么如何使 MongoDB 后台运行呢?可以使用下面的办法:

# 方法1:(推荐)
# --fork 选项将会通知 mongod 在后台运行
/path/to/MongoDB_Dir/bin/mongod --logpath /path/to/file.log --logappend --fork

# 方法2:
# 将输出重定向到 file.log 文件
# & 将该进程置于后台运行
/path/to/MongoDB_Dir/bin/mongod >> /path/to/file.log &

# 还可以这样运行(不记录日志)
# 因为所有重定向到位桶文件 /dev/null 的信息都会被丢弃
/path/to/MongoDB_Dir/bin/mongod >> /dev/null &