linux维护日常疑难问题

grep过滤进程时去掉自身的一个小技巧

很多时候,我们需要查看某个进程是否存在,一般可以通过

ps -ef | grep <程序名>

来查看。但是,它有一个小缺陷:结果里会多出一个 grep xxx 条目。这个条目正是 grep 进程本身的。

这里有一个小技巧可以消除 grep 进程自身的条目。如下:

ps -ef | grep [j]ava

 

具体含义:

1) | 是管道符号,代表 管道前进程的输出 连接到 后面进程的输入。

2) ps -ef 会输出一个列表,包含当前系统中的所有进程

可以想象一下,实际上 前面 ps 列表中的 grep 进程条目会是类似这个样子:

root     13264  0.0  0.0 103292   492 pts/8    D+   19:02   0:00 grep [j]ava

3) 而 grep [j]ava 表示过滤出包含 [j]ava 字串的进程。[j]ava 字串是一个正则表达式,它的含义实际上就是 java  字串,不能匹配 [j]ava 字串,所以过滤掉了!

正则表达式匹配复杂密码的一个实例

参考来源:

  1. http://deerchao.net/tutorials/regex/regex.htm#lookaround
  2. http://www.regular-expressions.info/lookaround.html

刚刚听赵杰说到正则表达式,突然想起以前看过的一个例子,感觉想法很巧妙,所以记录下来,分享一下。

在网站注册过程中,经常能看到类似这样的要求:密码必须包含一个大写字母,一个小写字母,一个数字,位数超过8位等等。

很自然的,会想到用正则表达式来做。比如说

1. 匹配 8位以上 这个要求,很容易: .{8,}

2. 匹配 至少一个大写字母,也很容易:.*[A-Z].*

3. 匹配 至少一个小写字母:.*[a-z].*

4. 匹配 至少一个数字: .*[0-9].*

但是继续分析就会发现,把上面几个部分组合的时候就会遇到一些麻烦。

比如,类似 .*[A-Z].*[a-z].*[0-9].* 这样的表达式就达不到要求。它有下列缺陷:

1.限定了 大写字母,小写字母,数字 出现的顺序。比如说, 本来 heLLO2012 这样的字符串是符合业务要求的,但是上述表达式却无法匹配它。然后我们可能想试试 分支 (Alternation),比如:

.*[A-Z].*[a-z].*[0-9].* | .*[a-z].*[A-Z].*[0-9].* | .*[0-9].*[a-z].*[A-Z].* | .....

恩..虽然说能达到 不限顺序 的要求,不过很难看,而且它还有一个致命问题(见第二条)。

2.总位数没有限制到。虽然改成 .*[A-Z].*[a-z].*[0-9].{5,}  确实可以让达成 8位以上 这一限制。但是它却限定了字符串必须是 <大写字母><小写字母><数字>xxxx 这种模式,显然不符合业务要求。而且很快会发现 .{5,}  放在哪里都不合适。

综合以上两点,使用普通的元字符和重复组合是非常难达到要求的。

为了解决类似的较复杂的情况,正则引擎引入了一个很强大的功能:向前搜索 (lookahead)。向前搜索又称为零宽断言。它和匹配单词开头和结尾的锚 (anchor) 很相似。不同之处在于,它确实会去匹配一些字符,然后丢弃匹配到的结果,只返回一个结果:匹配 还是 不匹配。这也是为什么它被叫做“断言”。它不会消费待测试字符串里的字符,仅仅只是判断匹配是否可能。

注:这里“向前”中的“前”是指字符串的右边(从左到右阅读)。

比如: ab(?=c) 表示仅匹配后面跟着 的 ab 字串。ab,abd 等字符串就匹配失败。

关键的地方到了。看看把向前搜索放到前面会是什么样子?比如: (?=a)bc, 它的意思是匹配字串 bc,然后 这个字串的第一个字母是 a,很明显,这个表达式永远匹配失败,因为它本身就是矛盾的。看起来似乎把 向前搜索 放到前面没什么用。

其实稍微做一点改变,它就能化腐朽为神奇了: (?=.*[a-z]).* ,这个表达式的含义是: 匹配任意的字符串,但是其中必须包含一个小写字母,且位置不限!

现在回头看看问题,答案就出来了:

(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])\w{8,}

centos6.3修改硬盘分区后必须重启的问题

有时候,出于一些原因需要对硬盘进行分区调整。但是经常发现分区修改后,系统无法重读分区信息到内存中,必须重启。很多时候,这实在是很不方便,而且也没什么道理的感觉(?)。

在网上搜索这个问题的时候,找到了答案:

https://bugzilla.redhat.com/show_bug.cgi?id=614357

问题原因:centos6.3 的软件库提供的 parted 是 2.1 版本的。软件作者处于安全考虑,禁止不重启的情况下分区表生效(类似于fdisk等软件的方式)。

解决方法:很简单,更新parted到最新版(3.1)即可解决。编译过程略。

nfs网络文件系统的用户名问题

问题:

渠道那边的服务器出了个问题:192.168.0.24 通过nfs来共享一个文件夹 x。 但在192.168.0.21里挂载到该文件夹x后,看到的用户名和24上看到的不一样,甚至是uid也是不同的。

原因:

后面发现,nfs使用了一种uid映射机制nfsidmap,有可能x目录在0.24上的拥有者用户id是501,但是在0.21上看着是502。当然,一般情况下应该是一致的,不过由于手动修改过用户名对应的uid,而nfsidmap却没有相应的更新。导致前面情况的出现。

解决方法:

很简单,执行一下:

nfsidmap -c

部分内网http服务器只有一个域名(虚拟主机)能正确响应的问题

问题

最近,渠道的一台服务器出了一个问题:这台服务器的http配置了多个域名(虚拟主机),但是只有一个域名能正确响应。比如:

192.168.0.2x 的http上有两个域名,channel-X.ccms.fenxibao.com 和 channel-Y.ccms.fenxibao.com。他们都是通过 192.168.100.2 这台代理服务器接受外部网络的http请求。但是实际使用发现,从外部网络只能访问channle-X。

原因

这个是由于http代理服务器的一个特性导致的:当一个http请求经过代理的时候,它的host头信息会变成代理配置的目标ip(或域名)。如果目标机器的http服务器上只有一个虚拟主机,这样做没什么问题。但如果有多个虚拟主机的时候,目标机器就无法做出正确判断了。这时候我们需要保留原始http请求的host头,以便位于代理之后的http服务器能正确区分虚拟主机(域名)。

解决

在代理服务器上给相应的域名(虚拟主机)增加一个配置项:

ProxyPreserveHost On

问题

上次在apache代理服务器中配置了ProxyPreserveHost On后,后端的http服务器能够正确响应请求了。但是又出了一个新问题,后端服务器发出的重定向请求的端口未经修改就直接发送给了客户端,导致客户端连接重定向页面时失败。

比如:在代理服务器中配置了channel-X.ccms.fenxibao.com这个域名,指向的是内部的192.168.0.20这台服务器,配置如下:

<VirtualHost *:80>

ServerName channel-X.ccms.fenxibao.com

...

ProxyRequests Off 
ProxyPreserveHost On

ProxyPass / http://192.168.0.20:18000/
ProxyPassReverse / http://192.168.0.20:18000/

...

</VirtualHost>

但是当客户端访问首页时,会被重定向到 channel-X.ccms.fenxibao.com:18000/xxx 这样的URL,导致访问失败。

解决方法

加上一条配置:

ProxyPassReverse / http://channel-X.ccms.fenxibao.com:18000/

关于脚本中read流操作的一些注意事项

我们在用

while read i

do

done < filename

这种格式时 要注意

如果我们在循环执行 ssh 远程操作事 循环会被ssh打断,为了避免这种问题,我们可以在ssh中加上 -n 命令 。

libtool编译错误

在centos6.3上编译sysbench的时候,会出现类似下列libtool错误:

../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found

后面网上查找发现是在./configure的时候会在源文件目录下生成一个libtool文件。而这个libtool文件有错误(不兼容?)。

解决方法有两种:

1.在源文件目录下执行:

autoreconf -fi

然后重新make就行了

2.把系统的libtool复制到源文件目录下,覆盖掉configure生成的

重新make

总结:

具体过程还不清楚。有待进一步了解编译系统。

时间: 2024-10-16 06:07:26

linux维护日常疑难问题的相关文章

linux下日常较频繁需要操作的文件

1.linux下日常较频繁需要操作的文件: 网卡配置文件/etc/sysconfig/network-scripts/ifcfg-ethx注:不同品牌的服务器或者不同的系统版本之间,可能网卡名有所不同,配置时需要注意. DNS配置文件/etc/resolv.conf 远程配置文件/etc/ssh/sshd_config 防火墙配置文件/etc/sysconfig/iptables 日志文件/var/log/xx ;如secure记录登陆等安全日志:boot.log记录引导日志:messages记

第一阶段考试:实战Linux系统日常管理

1. [项目名称] 实战Linux系统日常管理 [项目说明] 1.安装部署rhel系统,组建RAID磁盘阵列. 2.安装nginx 通过脚本编写 nginx服务服务启动脚本 [项目考核技能点] 1.安装部署rhel系统,网络设置. 2.shell脚本的基本用法 3. nginx的安装 4.整个方案中要包括:系统的安装,磁盘分区格式化,shell脚本的应用等相关内容. 项目环境可以参考如下: 1.安装两台rhel主机 对应主机名与IP :xuegod63.cn 192.168.1.63 xuego

Linux系统日常管理2 tcpdump,iptables

Linux系统日常管理2 tcpdump,iptables  Linux抓包工具 tcpdump 系统自带抓包工具 如果没有安装,需要安装之后才可以使用 安装: [[email protected] ~]# yum install -y tcpdump tcpdump -nn 不转换顿口的名字,直接显示端口号 tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80 抓取192.168.0.1ip地址的80端口的tcp包,并且不进行端口名字

linux系统日常管理

以下资料来源于<跟阿铭学Linux> 1.监控当前系统状态 1. w查看当前系统的负载 [[email protected] sbin]# w 15:23:46 up 3:34, 2 users, load average: 0.03, 0.05, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 - 12:26 2:55m 0.11s 0.11s -bash root pts/0 10.72.137.53 1

Linux平台日常运维管理

查看系统负载命令 [[email protected] ~]# w 04:24:14 up 3:35,  4 users,  load average: 0.40, 0.17, 0.14 USER    TTY      FROM              [email protected]   IDLE  JCPU   PCPU WHAT root    pts/0    192.168.137.1    00:50   2:09m  0.63s  0.63s -bash root    pt

linux这些都不会如何能够优雅而害羞的对妹子说:“起开,让老子来!”(linux之日常之带你装逼带你飞篇(初))

1.shutdown 常用命令: (1) shutdown -h 1 --一分钟关机 (2) shutdown -h now --现在关机 (3) shutdown -h 15:30 --定在某一个时间关机 细节: shutdown -r 2 --系统在两分钟启动 2.poweroff命令: poweroff ---立即关闭电源3. halt --- 挂起系统 4. reboot ------重新启动系统 5.***--- init命令 ----*** init [0-停机,1-单用户模式,2-

Linux的日常(1)--Linux系统

linux系统开机要挂载的文件系统的查看(fstab) linux中 查看文件行数 进程正常运行为1,未运行为0. 配置文件,使文件开机自启动 各路英雄,请多多指教.如有错误,望各位指正. 小生这厢有礼了!!!

centos linux系统日常管理3 第十六节课

上半节课 下半节课 Linux系统服务管理 ntsysv工具ntsysv 类似图形界面管理工具,如果没有该命令安装  yum install -y ntsysv  常用服务:crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl 保存后需要reboot才能生效 chkconfig (命令行服务管理工具) 列出服务列表: chkconfig --list 关闭2级别 : chkconfig --leve

Linux(CentOS)日常操作命令

用硬件检测程序kuduz探测新硬件:service kudzu start (or restart)查看CPU信息:cat /proc/cpuinfo查看板卡信息:cat /proc/pci查看PCI信息:lspci (相比cat /proc/pci更直观)查看内存信息:cat /proc/meminfo查看USB设备:cat /proc/bus/usb/devices查看键盘和鼠标:cat /proc/bus/input/devices查看系统硬盘信息和使用情况:fdisk & disk –