1.快速切换到上次访问目录。
linux中操作经常在两个目录中切换。简单操作方法,在命令行输入“cd -”即可跳转到上次访问目录。
2.转换文本文件编码
iconv -f gbk -t utf8 test.txt > test.txt.utf8
参数:-f 输入编码 -t ENCODING 输出编码 -l 列出支持的编码 -s 不显示有关转换出错的信息
1.快速切换到上次访问目录。
linux中操作经常在两个目录中切换。简单操作方法,在命令行输入“cd -”即可跳转到上次访问目录。
2.转换文本文件编码
iconv -f gbk -t utf8 test.txt > test.txt.utf8
参数:-f 输入编码 -t ENCODING 输出编码 -l 列出支持的编码 -s 不显示有关转换出错的信息
[整理 :张子萌 如有转载请保留整理人信息]
测试系统为redhat linux
搭建pptpd VPN服务需要内核支持mppe,内核为2.6以后的内核支持该选项。
查看内核命名# uname -r。注意:如果要远程安装调试,首先将防火墙设置为
不随操作系统启动。
1. 需要安装ppp和pptp服务,本文为使用yum安装。如果希望手动安装请到
http://poptop.sourceforge.net下载pptp源码包。
#yum -y install ppp
#yum -y install pptpd
查看内核是否加载 mppe 模块
# lsmod | grep ppp
如下图:
说明pptp 所又模块加载成功
2. 修改配置文件
安装完成后修改配置文件
2.1 配置pptpd.conf文件
#vi /etc/pptpd.conf
option /etc/ppp/options.pptpd # PPP使用的配置文件位置
stimeout 10 # 控制pptp连接超时,单位为秒
localip 192.168.0.1 # 服务器VPN虚拟接口将分配的IP地址
remoteip 192.168.0.234-238,192.168.0.245 # 客户端VPN连接成功后将分配的IP或IP地址范围。
说明localip和remoteip 不需要必须在同一网段,网络可以连通网段均可。
2.2 配置options.pptpd文件,此处只是对配置文件中部分配置做说明,如无特殊要求可以使用默认配置。
# vi /etc/ppp/options.pptpd
lock
auth # 启用身份验证
name cc3 # 相当于身份验证时的域,这里填上VPN服务器的名字
refuse-pap # 拒绝pap身份验证
refuse-chap # 拒绝chap身份验证
refuse-mschap # 拒绝mschap身份验证
refuse-eap # 拒绝eap身份验证
require-mschap-v2 #使用mschap-v2身份验证,使用windows可以直接建客户端
require-mppe-128 # 要求128位MPPE加密
nomppe-stateful # 无状态,有状态有mppe-stateful
ms-dns 202.106.46.151 # VPN客户端连接成功后将被分配的DNS参数,如只是ip访问可以不用此项
ms-wins 64.32.16.8 # VPN客户端连接成功后将被分配的WINS参数
proxyarp # 启用ARP代理
2.3 创建用户名和密码,可以再文件中直接编写,也可以使用命令创建。推荐使用命令创建。
2.3.1 创建用户
账户为vpntest 密码为123
#vpnuser add vpntest 123
2.3.2 删除用户:
删除 vpntest账户
#vpnuser del vpntest
2.3.3 查看当前用户表
# vpnuser show
2.3.4 直接文件编辑修改账户
#vi /etc/ppp/chap-secrets
格式如下
test pptpd 123 *
注:末尾“*”为分配给vpn客户端ip池的地址,也就是上面设置的remoteip部分。如需要分配指定IP,可以直接打入IP地址。
3. 启动pptpd服务
#service pptpd start
或
# /etc/init.d/pptpd start
pptpd参数有start|stop|restart|restart-kill|status,分别为启动、停止、重启、直接杀进程后重启、查看进程运行状态。
要查看连入vpn服务器的客户端信息,可以使用route命令,Use Iface列为ppp的为连入vpn服务器的客户信息。也可以使用ifconfig查看。
到此linux pptp vpn配置完成,可以使用windows来连接看看是否正常。
4. 安全防范
VPN使用GRE协议用的47端口 也需要开放 1723,如果使用防火墙需要添加如下配置。
#i ptables -A INPUT -p gre -j ACCEPT
如果开启selinux 还需要设置
#setsebool pppd_disable_trans 1
#setsebool pptp_disable_trans 1
如果客户端想用vpn server来上网的话,需要打开vpn server上的ip_forward
# echo “1” > /proc/sys/net/ipv4/ip_forward
永久更改:
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 0 将 0 改为 1
保存后运行# sysctl –p 是参数生效。
设置ip伪装
#iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source XXX.XXX.XXX.XXX (vpn 服务器公网ip)
#iptables -t nat -A FORWARD -o eth0 -j ACCEPT
如果还想访问vpn server所在的局域网,还需要在vpn server上添加路由
* 使用route 命令配置路由表 */
//添加到主机路由
# route add –host 192.168.168.110 dev eth0:1
# route add –host 192.168.168.119 gw 192.168.168.1
//添加到网络的路由
# route add –net IP netmask MASK eth0
# route add –net IP netmask MASK gw IP
# route add –net IP/24 eth1
//添加默认网关
# route add default gw IP
//删除路由
# route del –host 192.168.168.110 dev eth0
5. 常见问题处理
a) MGR: Maximum of 10 connections reduced to 3, not enough IP addresses given
说明配置文件中最大连接为10,但是只分配了3个地址。通过/etc/pptpd.conf配置文件修改
b)连接vpn后经常断线
pppd[18052]: Terminating on signal 15
pppd[18052]: Modem hangup
pppd[18052]: Connect time 1.0 minutes.
pppd[18052]: Sent 12143 bytes, received 4968 bytes.
pppd[18052]: MPPE disabled
pppd[18052]: Connection terminated.
pppd[18052]: Exit.
查看日志发现以上信息:
“Connect time 1.0 minutes.”说明用户连接vpn服务器后只连接了1分钟就断开了。
“Sent 12143 bytes, received 4968 bytes.”说明客户在连接后与vpn服务器间的传输量也不大。如
果流量过大,需要注意检查是否存在攻击。
“Terminating on signal 15”此条信息比较主要,说明vpn程序是被系统其它程序发出停止命令后强行
中断连接的。具体信号可以查看http://simon-zzm.blog.163.com/blog/static/8880952220103110240877/
[编写整理:simonzhang 2010-03-15 2012-04-08修改]
在linux下有大量日志需要压缩备份,并定期清理长期保存的备份日志。对于多处日志存放使用数组进行循环处理。脚本修改好后,设置定时任务即可。
#!/bin/sh ############################################## # AUTHOR: simonzhang # back log # Ver : 1.1 For Production # description: # 2010-03-12 ############################################## ####### set log patch log_path=("/usr/local/nginx/logs/" "/usr/local/tomcat6/logs/" ) ####### set backup log patch bak_log_path=("/usr/local/nginx/logs/back" "/usr/local/tomcat6/logs/back") ####### set backup 3 day ago log backupdays=3 #######clear 180 day ago compress log deletedays=180 ####### start for (( i=0 ; i<${#log_path[@]} ; i++ )) do cd ${log_path[i]} if [ ! -f ${bak_log_path[i]} ] ; then /bin/mkdir -p ${bak_log_path[i]} fi /usr/bin/find * -ctime +$backupdays -maxdepth 0 -not -name *.pid -not -name error* -exec zip -m {}.zip {} \; /bin/mv *.zip ${bak_log_path[$i]} cd ${bak_log_path[$i]} echo /usr/bin/find * -ctime +$deletedays -maxdepth 0 -exec rm {} \; done ############ end
系统报出错误”Too many open files”,说明系统资源调用需要进行调整。
ulimit 通过一些参数选项来管理不同种类的系统资源。
ulimit 命令的格式为:ulimit [options] [limit]
具体的 options 含义以及简单示例可以参考以下表格。
选项 [options] | 含义 | 例子 |
-H | 设置硬资源限制,一旦设置不能增加。 | ulimit – Hs 64;限制硬资源,线程栈大小为 64K。 |
-S | 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 | ulimit – Sn 32;限制软资源,32 个文件描述符。 |
-a | 显示当前所有的 limit 信息。 | ulimit – a;显示当前所有的 limit 信息。 |
-c | 最大的 core 文件的大小, 以 blocks 为单位。 | ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。 |
-d | 进程最大的数据段的大小,以 Kbytes 为单位。 | ulimit -d unlimited;对进程的数据段大小不进行限制。 |
-f | 进程可以创建文件的最大值,以 blocks 为单位。 | ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。 |
-l | 最大可加锁内存大小,以 Kbytes 为单位。 | ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。 |
-m | 最大内存大小,以 Kbytes 为单位。 | ulimit – m unlimited;对最大内存不进行限制。 |
-n | 可以打开最大文件描述符的数量。 | ulimit – n 128;限制最大可以使用 128 个文件描述符。 |
-p | 管道缓冲区的大小,以 Kbyts 为单位。 | ulimit – p 512;限制管道缓冲区的大小为 512 Kbytes。 |
-s | 线程栈大小,以 Kbytes 为单位。 | ulimit – s 512;限制线程栈的大小为 512 Kbytes。 |
-t | 最大的 CPU 占用时间,以秒为单位。 | ulimit – t unlimited;对最大的 CPU 占用时间不进行限制。 |
-u | 用户最大可用的进程数。 | ulimit – u 64;限制用户最多可以使用 64 个进程。 |
-v | 进程最大可用的虚拟内存,以 Kbytes 为单位。 | ulimit – v 200000;限制最大可用的虚拟内存为 200000 Kbytes。 |
可以使用ulimit命令修改系统资源处理限制,但是修改只对当前操作起作用,当用户注销后参数回还原为默认值。可以通过修改系统配置文件使参数生效。
使用管理员权限打开/etc/security/limits.conf
在文件中添加
* soft nofile 8192
* hard nofile 20480
添加后保存文件,再次登录使用ulimit -a命令查看是否修改成功。
修改内容分为四列:
第一列为分配用户,可以为用户名、用户组名(@group) ,统配符 * 表示缺省规则
第二列为执行模式,hard 强制实行由管理员设置由Linux Kernel执行,用户无权改变。
soft 非强制执行,用户可以改变在之前存在的,但是用户注销后参数还原为默认值。
第三列为资源种类:
core – core 文件的大小 (KB)
da
fsize – maximum filesize (KB)
memlock – max locked-in-memory address space (KB)
nofile – max number of open files
rss – max resident set size (KB)
stack – max stack size (KB)
cpu – max CPU time (MIN)
nproc – max number of processes
as – address space limit
maxlogins – max number of logins for this user.
第四列为数值。
参考文档:
http://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/index.html
linux安装软件时经常需要依赖其他软件包,使用源码和安装包安装给工作带来很多不便。幸好linux厂商提供了强大的
更新升级工具:
yum用于centos、RedHat和fedora
apt-get用于Ubuntu
pacman用于Arch
安装工具均为单进程,所以只能逐个升级。我收集的主要使用命令如下。
yum 使用
um update packagename #升级包
yum -y upgrade #升级系统中的所有包
yum check-update #显示可升级的软件包
yum clean #删除下载后的旧的header。和clean all相同
yum clean oldheaders #删除旧的headers
yum clean packagename #删除下载后的软件包
yum info #显示可用软件包信息
yum info packagename #显示指定软件包信息
yum install packagename #安装指定软件包
yum list #显示可用软件包
yum list packagename #列出软件包
yum list installed #显示安装了的软件包
yum list updates #显示可升级的软件包
yum provides packagename #显示软件包所包含的文件
yum remove packagename #删除制定的软件包,确认判定指定软件包的依存关系。
yum search 关键字 #利用关键字搜索软件包。搜索对象是,RPM文件名,Packager(包),Dummary,Description的各型
apt-get 使用
apt-cache search packagename #搜索包
apt-cache show packagename #获取包的相关信息
apt-cache depends packagename #了解使用依赖
apt-cache rdepends packagename #查看该包被哪些包依赖
apt-get install packagename #安装包
apt-get install packagename – – reinstall #重新安装包
apt-get -f install #修复安装”-f = ——fix-missing”
apt-get remove packagename #删除包
apt-get remove packagename – – purge #删除包,包括删除配置文件等
apt-get update #更新源
apt-get upgrade #更新已安装的包
apt-get dist-upgrade #升级系统
apt-get dselect-upgrade #使用 dselect 升级
apt-get build-dep packagename #安装相关的编译环境
apt-get source packagename #下载该包的源代码
apt-get autoclean #清理无用的包
apt-get check #检查是否有损坏的依赖
pacman 使用
pacman -S packagename #安装软件包
pacman -R packagename #删除软件包
pacman -Syu #升级系统中的所有包
pacman -Ss package #查询软件包
pacman -Qs package #查询已安装的包
pacman -Sw package #下载但不安装包
(本文为张子萌整理,如有遗漏请提醒)