以下 30 个重点是 RHCE 考试的主要方向:

w4zw 发表于 2008-08-11 13:33:52

1 .熟悉 RedHat Linux 各种安装选项,特别是网络安装   2 .了解 LILO , GRUB 等启动管理程序及开机流程   3 .能够事后安装 (rpm) 及设置其它的安装选项   4 .了解 RedHat Linux 的系统配置   5 .熟悉 /etc/sysconfig/network-scripts 下的各种配置文件   6 .了解并实践 RedHat 各种安装工具及多重启动   7 .自动安装 RedHat Linux(kickstart installation)   8 .了解并实践 rpm 的安装,移除及查询,特别是指令集上的安装及查询语法   9 .熟悉 *.src.rpm 的基本概念   10 .熟悉救援模式 (rescue environment)   11 .用户帐户管理   12 .管理用户环境   13 .了解系统及用户的 bash 配置文件   14 .设置用户磁盘配额 (quota)   15 .了解并使用计划任务 (corn 和 at)   16 .了解系统内核 (kernel) 的各项概念,如 monolithic , modular kernels , initial ramdisks 等   17 .能重编/自定/升级系统内核 (kernel)   18 .能在 LILO 或 GRUB 中设置新的系统核心及其它的选项   19 .设置基本的 Apache , Samba , NIS , NFS , basic sendmail, POP3/IMAP4 mail service, DNS, 和 ftp 服务   20 .能设置,启动,关闭上述的服务并在失败的状况下除错,并管理相关的日志 (log)   21 .能限制上述服务的网络访问   22 .憝悉其它的网络服务,例如 squid, innd NNTP server 和 xntpd   23 .了解 XFree86 的基本环境和理论,特别是 X Server 和它的配置工具 (redhat-config-xfree86)   24 .能设置各种不同的窗口管理员 (window manager) 并切换不同的桌面模式 (switchdesk)   25 .憝悉各种包含 X 在内的 Linux 远程控制方式 (ssh )   26 . 能设置 xinetd 服务并整合 tcp_wrapper   27 .了解并设置 PAM   28 .了解并设置 IP 路由   29 .了解并以 iptables 设置防火墙   30 .建置 User Private Group Scheme

2008年新书预告《黑客社会工程学攻击》

w4zw 发表于 2008-03-10 21:20:44

 
你若青涩,便还能成长,你若熟透,便将腐烂。请记住,只要你还肯学,就能不断成长。是成长的机会或腐烂的开始,全由你自已来决定。
lizaib @ 2008-03-06 18:21



——————————————部分目录————————————————————————

第一章.黑客时代的神话
目录:
1.1 华丽而浪漫的安全对抗
1.2 凯文·米特尼克(KevinMitnick)简史
1.2.1 美国五大最危险的头号黑客之一
1.2.2 电脑化空间的头号通缉犯
1.3 什么是社会工程学攻击
1.3.1 狭义与广义的社会工程学
1.3.2 无法忽视的非传统信息安全
1.4 第一个案例:编辑部的窃密事件
1.4.1 巧妙地利用手机收集信息
1.4.2 冒认身份获取系统口令
1.4.3 伪造调查文件,设置陷阱
1.5 你该学习怎样的信息技能?
1.5.1 快速信息筛选与处理技巧
1.5.1 快速掌握新技术的学习技巧

第二章.无处藏身—信息搜索的艺术
目录:
1.1 千万不要把真名放在网上
1.2   Google搜索引擎黑客
1.2.1 Google高级搜索应用技术
1.2.1.1 组合式语法搜索
1.2.1.2 善用搜索特征码定位
1.2.2 探寻敏感信息
1.2.3 你在哪里?哪个市区?哪条街道?
1.2.4 第一手情报
1.3 门户站点,信息泄露的入口点
1.3.1 围攻小企鹅——万能的QQ信息刺探
1.3.2 网易、新浪、搜狐、雅虎聚会记
1.3.3 高端用户的选择:Google与微软
1.4 综合信息的搜索,你会了吗?
1.4.1 你需要掌握的搜索引擎有哪些?
1.4.1.1 网页与图片的搜索
1.4.1.2 博客与论坛的搜索
1.4.1.3 论坛程序与网站内的的信息搜索
1.4.1.4 微型博客的搜索
1.4.2 一些你不能忽视的信息查询
1.4.2.1 你的同学在这里——校友录
1.4.2.2 另类的窃秘点——搜人网
1.4.2.3 邮箱的查询——支付宝
1.4.2.4 IP地址、身份证与手机的号码查询
1.4.2.5 域名Whois的查询 
1.5 案例攻击应用与分析
1.5.2 一分钟,和美丽的女孩谈论天气的方法
1.5.3 深层挖掘骗子黑客站长的秘密
1.5.3 告诉你如何跟踪网站信息
1.6 尾语:是否真的无处藏身?
1.6.1如何保护自己免受伤害
1.6.2附注:搜索引擎资源


第三章.商业间谍窃密技法
目录
1.1 别再拒绝公司数据被窃取的事实
1.1.1 内鬼,《征途》网游源代码泄露事件
1.1.2 电信企业的脆弱,口令泄露事件
1.2 社会工程学师惯用信息搜集技巧
1.2.1 从最无关紧要的员工开始
1.2.2 冒称与利用权威身份
1.2.3 垃圾桶,绝妙的信息翻查处
1.3 巧设人为陷阱套取信息
1.3.1 寻找企业内部的矛盾
1.3.1.1 事实!曾经的企业内鬼事件
1.3.2 制造拒绝服务的陷阱
1.4 信息高级刺探技术
1.4.1 自由交谈的内部术语
1.4.2 信息调查表格——你准备了吗?
1.4.3 看上去可信任吗?——标准化策略
1.5  商业窃密惯用技法
1.5.1 电话窃听
1.5.1.1  任何人都会的手机监听方法
1.5.1.2  智能手机高级窃密技巧
1.5.1.3  窃听内部线路电话的技巧
1.5.2 语音与影像监控
1.5.2.1  无处不在的窃听
1.5.2.2  影像监控
1.5.3GPS跟踪与定位
1.6 案例攻击应用与分析
1.6.1 淘宝网的盗窃们
1.6.1.1 一线生机
1.6.1.2 交易
1.6.1.3 最后的陷阱
1.6.2 谁泄露了防火墙源代码?
1.6.2.1 销售部的后门
1.6.2.2 合作者的阴谋
1.6.2.3 消失的100万源代码
1.6.3 亲密接触国际电子监控



第四章.刨根问底挖隐私
目录
1.1 让系统泄露你曾经的秘密
1.1.1 芝麻开门,你去过哪些网站?
1.1.2 你最近碰过哪些文件?
1.1.2.1 我的文档历史
1.1.2.2 最后的时间截
1.1.2.3 应用软件的蛛丝马迹
1.1.3 缩略图,你的图片删干净了么
1.1.4 相片中的Exif信息
1.1.5 最后的复制记录
1.2 应用软件也捣乱
1.2.1 谁在临时目录偷偷留下了备份?
1.2.2 生成的文件,你有注意到么?
1.3  Web 2.0,人性化服务背后的威胁
1.3.1 像Google那般的令人恐怖
1.3.2 信任,Web 2.0的大敌
1.4 实名制,致命的大漏洞
1.4.1 相信么?我知道你的一切
1.4.2 加速高智能犯罪升级
1.4.3 实名制信息安全不容忽视!!
1.5 你的隐私正在被谁偷窃?
1.5.1 隐藏的特洛伊木马
1.5.2 嗅探,从数据包中挖掘你的秘密
1.5.3 间谍软件,曾经的僵尸军团
1.6 案例攻击与应用
1.6.1 典型性隐私泄露——木马屠城
1.6.2 网吧实名制:中间人的黑手


第五章.窥探你心中的秘密
目录
1.1 善用人性弱点的心理学攻击
1.1.1 “入侵你的心”
1.1.2 不要轻易给予信任
1.2 开始入门另类的攻击
1.2.1 认识信念系统
1.2.2 “需求层次”找出你的需要
1.2.3 五个阶段,推测你的人生影响
1.3  神经语言程序学的“入侵”
1.3.1  NLP始源与简史
1.3.2 表象系统(Representationalsystem)
1.3.2.1 你的表象系统是什么?
1.3.2.2 《犯罪现场鉴证》关键点
1.3.2.3 模仿中的信任
1.3.3 语言模式(LanguageMode)
1.3.3.1 检定语言模式
1.3.3.2 催眠性暗示语言模式
1.4 九型人格中的秘密
1.4.1 什么是九型人格?
1.4.2 与不同人格的人交谈
1.5 长驱直入攻击信息拥有者
1.5.1 塑造友善的第一印象
1.5.2 让“帮助”来的猛烈点吧





第六章.网络钓鱼攻击
目录:
1.1 钓信用卡、钓隐私:恐怖的钓鱼攻击
1.2 钓鱼:盯上163邮箱
1.2.1 将163邮箱整站扒下来
1.2.2 继续完善,让伪造生效
1.2.3 逃脱识别,进阶伪装
1.2.3.1 使用header()函数跳转到真实163邮箱网站
1.2.3.2 用javascript增加迷惑性
1.2.3.3 逼真一点,真不知鬼不觉
1.3 真网址PK假网址
1.3.1 假域名注册欺骗
1.3.2 状态栏中的网址欺骗
1.3.3 巧妙利用URLs特性的欺骗
1.3.4 IP转换与URL编码
1.4 电子邮件钓鱼
1.4.1 钓鱼关键点:制造一封神秘的邮件
1.4.2 邮件地址发送也伪造
1.4.3 弹指间,百万E-mail地址收集
1.4.4 坐等鱼上钩,钓鱼邮件群发
1.5 XSS跨站钓鱼也疯狂
1.5.1 深入浅出部析XSS漏洞形成
1.5.2 隐藏中的Cookie窃取
1.5.3 亿聚网的登陆框—XSS的另类钓鱼大法
1.6 劫持中的钓鱼艺术
1.6.1 Hosts文件的映射劫持
1.6.2 DNS下的劫持
1.6.3 BHO,浏览器的劫持
1.6.4 搜索引擎的SEO劫持钓鱼
1.7 案例攻击与应用
1.7.1 帮MM找回被盗QQ
1.7.2 揭露“QQ中奖网络诈骗”全过程


只是部分目录,近期出版,敬请期待 :) 
Mail:lizaib[at]163.com


 
lizaib @ 2008-02-21 23:05

图书:
《黑客之道——漏洞发掘的艺术》……………………RMB:25:00
《潜在威胁分析——从恶作剧到恶意犯罪》…………RMB:58:00

杂志:
南风》2008/02………………………………………RMB:6:00
推理》2008/02………………………………………RMB:6:00
电脑爱好者》2008/02………………………………RMB:5:00
黑客X档案》2008/02………………………………..RMB:9:00
黑客手册》2008/02…………………………………RMB:9:00

报刊:
南方周末》2008/02…………………………………RMB:2:00

^_^买的比较少,下次继续


 
lizaib @ 2008-02-21 23:01

在ph4nt0m邮件列表看到大风发表的了对社工FUZZ高见,有所感悟,便生出了这篇东西。

FUZZ:黑箱测试。在尚未形成对漏洞成因的的黑盒测试。

直白一点,施展社交工程对企业内部薄弱点的测试。这包括人力资源部、财务部、销售部、网络部、客户中心等。既然人是影响的因素,但FUZZ是有目的性,不存在薄弱性的认识,不能因为财务部的重要性放弃而考虑从销售部入手。

矩阵只是一种模型,是死的。人,才是目的。它并不像exploits按规律寻找到一个缓冲区写入非法数据,而是类似三国演义行兵作战考虑天时地利,建立于知已知彼的前提信息。个人观点,FUZZ之前是"扫描"外部信息,这包括:
1.企业注册信息(注册机构);媒介报导信息(报纸、电视、杂志);企业对外信息(网站、公关)
2.垃圾桶(清洁员、垃圾存储点、垃圾处理公司)

脆弱性的分析认识(建立已知信息基础),"扫描"内部信息:
1.以正常身份(普通用户)进入企业,如客户接待中心,询问相关问题获取信息。
2.熟悉大楼布局,参考对外信息(墙上的规章制度、企业价值观念),获取免费的赠送资料,以客户身份取是相关责任人名片。

构造陷阱获取目的信息,"脆弱"性攻击:
1.制造"灾难",向受害者发送大量垃圾邮件,声明网络故障。
2.利用权威可信的身份,声称内部员工,提供可信信息证明(内部网络IP、员工标识)
3.窃听、监控……(安装电子窃听装置、置入后门)
……

在大量实践中,有时候甚至没有规律而按信息的情况攻击,事实绝非是单纯拨打电话设下陷阱。边界(Border)和数据流向(Data
Flow)分析攻击范围(Attack Surface)并不能万能适用于人的FUZZ安全上。安全是有限的,人是无限的。

在攻击之前,我们还得检讨是否满足如下要求:
1.术语
2.掌握专业知识(心理学、人类行为学、企业管理学、法律、智能设备操作……)。
3.技术伪造(图片加水印、通行证)。
4.自信

五项经典linux系统安全管理技巧

w4zw 发表于 2008-02-20 18:37:37

一、文件系统

在Linux系统中,分别为不同的应用安装单独的主分区把关键的分区设置为只读把大大提高文件系统的安

全。这主要涉及到Linux自身的ext2文件系统的只添加(只添加)和不可变这两大属性。

●文件分区Linux的文件系统可以分成几个主要的分区,每个分区分别进行不同的配置和安装,一般情况

下至少要建立/、/usr/local、/var和/home等分区。/usr可以安装成只读并且可以被认为是不可修改的

。如果/usr中有任何文件发生了改变,那么系统把立即发出安全报警。当然这不包括用户自己改变/usr

中的内容。/lib、/boot和/sbin的安装和设置也一样。在安装时应该尽量把它们设置为只读,并且对它

们的文件、目录和属性进行的任何修改都会导致系统报警。

当然把所有主要的分区都设置为只读是不可能的,有的分区如/var等,其自身的性质就决定了不能把它们

设置为只读,但应该不允许它具有执行权限。

●扩展ext2使用ext2文件系统上的只添加和不可变这两种文件属性可以进一步提高安全级别。不可变和

只添加属性只是两种扩展ext2文件系统的属性标志的方法。一个标记为不可变的文件不能被修改,甚至

不能被根用户修改。一个标记为只添加的文件可以被修改,但只能在它的后面添加内容,即使根用户也

只能如此。

可以通过chattr命令来修改文件的这些属性,如果要查看其属性值的话可以使用lsattr命令。要想了解

更多的关于ext2文件属性的信息,可使用命令man chattr来寻求帮助。这两上文件属性在检测黑客企图

在现有的文件中安装入侵后门时是很有用的。为了安全起见,一旦检测到这样的活动就应该立即把其阻

止并发出报警信息。

如果你的关键的文件系统安装成只读的并且文件被标记为不可变的,入侵者必须重新安装系统才能删除

这些不可变的文件但这会立刻产生报警,这样就大大减少了被非法入侵的机会。

●保护log文件当与log文件和log备份一起使用时不可变和只添加这两种文件属性特别有用。系统管理员

应该把活动的log文件属性设置为只添加。当log被更新时,新产生的log备份文件属性应该设置成不可变

的,而新的活动的log文件属性又变成了只添加。这通常需要在log更新脚本中添加一些控制命令。

二、备份

在完成Linux系统的安装以后应该对整个系统进行备份,以后可以根据这个备份来验证系统的完整性,这

样就可以发现系统文件是否被非法窜改过。如果发生系统文件已经被破坏的情况,也可以使用系统备份

来恢复到正常的状态。

●CD-ROM备份当前最好的系统备份介质就是CD-ROM光盘,以后可以定期把系统与光盘内容进行比较以验

证系统的完整性是否遭到破坏。如果对安全级别的要求特别高,那么可以把光盘设置为可启动的并且把

验证工作作为系统启动过程的一部分。这样只要可以通过光盘启动,就说明系统尚未被破坏过。

如果你创建了一个只读的分区,那么可以定期从光盘映像重新装载它们。即使象/boot、/lib和/sbin这

样不能被安装成只读的分区,你仍然可以根据光盘映像来检查它们,甚至可以在启动时从另一个安全的

映像重新下载它们。

●其它方式的备份虽然/etc中的许多文件经常会变化,但/etc中的许多内容仍然可以放到光盘上用于系

统完整性验证。其它不经常进行修改的文件,可以备份到另一个系统(如磁带)或压缩到一个只读的目

录中。这种办法可以在使用光盘映像进行验证的基础上再进行额外的系统完整性检查。

既然现在绝大多数操作系统现在都在随光盘一起提供的,制作一个CD-ROM紧急启动盘或验证盘操作起来

是十分方便的,它是一种十分有效而又可行的验证方法。
三、改进系统内部安全机制

可以通过改进Linux操作系统的内部功能来防止缓冲区溢出攻击这种破坏力极强却又最难预防的攻击方式

,虽然这样的改进需要系统管理员具有相当丰富的经验和技巧,但对于许多对安全级别要求高的Linux系

统来讲还是很有必要的。

●Solaris Designer的安全Linux补丁Solaris Designer用于2.0版内核的安全Linux补丁提供了一个不可

执行的栈来减少缓冲区溢出的威胁,从而大大提高了整个系统的安全性。

缓冲区溢出实施起来是相当困难的,因为入侵者必须能够判断潜在的缓冲区溢出何时会出现以及它在内

存中的什么位置出现。缓冲区溢出预防起来也十分困难,系统管理员必须完全去掉缓冲区溢出存在的条

件才能防止这种方式的攻击。正因为如此,许多人甚至包括Linux Torvalds本人也认为这个安全Linux补

丁十分重要,因为它防止了所有使用缓冲区溢出的攻击。但是需要引起注意的是,这些补丁也会导致对

执行栈的某些程序和库的依赖问题,这些问题也给系统管理员带来的新的挑战。

不可执行的栈补丁已经在许多安全邮件列表(如securedistros@nl.linux.org)中进行分发,用户很容

易下载到它们等。

●StackGuardStackGuard是一个十分强大的安全补丁工具。你可以使用经StackGuard修补过的gcc版本来

重新编译和链接关键的应用。

StackGuard进行编译时增加了栈检查以防止发生栈攻击缓冲区溢出,虽然这会导致系统的性能略有下降

,但对于安全级别要求高的特定应用来讲StackGuard仍然是一个十分管用的工具。

现在已经有了一个使用了SafeGuard的Linux版本,用户使用StackGuard把会更加容易。虽然使用

StackGuard会导致系统性能下降约10~20%,但它能够防止整个缓冲区溢出这一类攻击。

●增加新的访问控制功能Linux的2.3版内核正试图在文件系统中实现一个访问控制列表,这要可以在原

来的三类(owner、group和other)访问控制机制的基础上再增加更详细的访问控制。

在2.2和2.3版的Linux内核中还把开发新的访问控制功能,它最终把会影响当前有关ext2文件属性的一些

问题。与传统的具有ext2文件系统相比它提供了一个更加精确的安全控制功能。有了这个新的特性,应

用程序把能够在不具有超级用户权限的情况下访问某些系统资源,如初始套接等。

●基于规则集的访问控制现在有关的Linux团体正在开发一个基于规则的访问控制(RSBAC)项目,该项

目声称能够使Linux操作系统实现B1级的安全。RSBAC是基于访问控制的扩展框架并且扩展了许多系统调

用方法,它支持多种不同的访问和认证方法。这对于扩展和加强Linux系统的内部和本地安全是一个很有

用的。

四、设置陷井和蜜罐

所谓陷井就是激活时能够触发报警事件的软件,而蜜罐(honey pot)程序是指设计来引诱有入侵企图者

触发专门的报警的陷井程序。通过设置陷井和蜜罐程序,一旦出现入侵事件系统可以很快发出报警。在

许多大的网络中,一般都设计有专门的陷井程序。陷井程序一般分为两种:一种是只发现入侵者而不对

其采取报复行动,另一种是同时采取报复行动。

设置蜜罐的一种常用方法是故意声称Linux系统使用了具有许多脆弱性的IMAP服务器版本。当入侵者对这

些IMAP服务器进行大容量端口扫瞄就会落入陷井并且激发系统报警。

另一个蜜罐陷井的例子就是很有名的phf,它是一个非常脆弱的Web cgi-bin脚本。最初的phf是设计来查

找电话号码的,但它具有一个严重的安全漏洞:允许入侵者使用它来获得系统口令文件或执行其它恶意

操作。系统管理员可以设置一个假的phf脚本,但是它不是把系统的口令文件发送给入侵者,而是向入侵

者返回一些假信息并且同时向系统管理员发出报警。

另外一类蜜罐陷井程序可以通过在防火墙中把入侵者的IP地址设置为黑名单来立即拒绝入侵者继续进行

访问。拒绝不友好的访问既可以是短期的,也可以是长期的。Linux内核中的防火墙代码非常适合于这样

做。

五、把入侵消灭在萌芽状态

入侵者进行攻击之前最常做的一件事情就是端号扫瞄,如果能够及时发现和阻止入侵者的端号扫瞄行为

,那么可以大大减少入侵事件的发生率。反应系统可以是一个简单的状态检查包过滤器,也可以是一个

复杂的入侵检测系统或可配置的防火墙。

Abacus Port SentryAbacus Port Sentry是开放源代码的工具包,它能够监视网络接口并且与防火墙交

互操作来关闭端口扫瞄攻击。当发生正在进行的端口扫瞄时,Abacus Sentry可以迅速阻止它继续执行。

但是如果配置不当,它也可能允许敌意的外部者在你的系统中安装拒绝服务攻击。

Abacus PortSentry如果与Linux中透明的代理工具一起使用可以提供一个非常有效地入侵防范措施。这

样可以把为所有IP地址提供通用服务的未使用端口重定向到Port Sentry中,Port Sentry可以在入侵者

采取进一步行动之前及时检测到并阻止端口扫瞄。

Abacus Port Sentry能够检测到慢扫瞄(slow scan),但它不能检测到结构化攻击(structured

attack)。这两种方式最终目的都要试图掩盖攻击意图。慢扫瞄就是通过把端口扫瞄分散到很长的时间

内来完成,而在结构化的攻击中,攻击者试图通过扫瞄或探测多个源地址中来掩盖自己的真实攻击目标

。正确地使用这个软件把能够有效地防止对IMAP服务大量的并行扫瞄并且阻止所有这样的入侵者。

 

最全的2007年度流行语

w4zw 发表于 2008-02-20 18:27:53


1、这个世界上我只相信两个人,一个是我,另一个不是你。
2、生活真他妈好玩,因为生活老他妈玩我。
3、好好学习,天天想上!
4、花前月下,不如花钱“日”下。
5、爱情就是犯贱,而且还是一次又一次的犯贱。什么时候你不犯贱了,女人就来了!
6、叶子的离开,是因为风的追求还是树的不挽留?
7、有些人就是这样不懂事,你不X他妈,他就不知道你是他爹。
8、你以为我会眼睁睁地看着你去送死吗?我会闭上眼睛的!
9、佛曰:“前世的500次回眸才换来今生的一次擦肩而过”。我宁愿用来世的一次擦肩而过来换得今生的500次回 眸。
10、我拿什么整死你的爱人……
11、黑夜给了我一双黑色的眼睛,可我却用它来翻白眼。
12、网络就像是监狱,本来是偷了个钱包进来的,等出去的 时候就什么都学会了。
13、女娲日天,后羿射之。
14、兄弟如手足,女人如衣服,谁动我手足,我扒他衣服!
15、我是个演员,一看见漂亮MM眼就圆……
16、上帝把所有人都骗了,因为地狱才是最美的!佛知道真相,所以佛说:“我不入地狱,谁入地狱?”
17、我床上的不知道是谁媳妇,我媳妇不知道在谁的床上!
18、看到你我连食欲都没了,还谈什么性欲?
19、天使之所以会飞,是因为她们把自己看得很轻……
20、我想早恋,但是已经晚了……
21、别人的失败就是我的快乐!
22、天哪!我的衣服又瘦了。
23、生下来的人没有怕死的,怕死的都TM没生下来,所以谁都别TM的装横!
24、现实的社会,毁了我一个做好人的机会!
25、以后不要在我面前说英文,OK?
26、名花虽有主,我来松松土!
27、有钱男子汉,没钱汉子难!
28、我要是妞,早爱上我了……
29、我以为我颓废,原来我报废了!
30、问世间情为何物?圣人答曰:“废物!   
31、我不能给你幸福,但可以给你舒服!
32、思想有多远,你就给我滚多远!
33、流氓不害怕,就怕流氓有文化……
34、客官请自重,小女子只卖身不卖艺。
35、你不能让所有人满意,因为不是所有的人都是人!
36、有事秘书干,没事干秘书。
37、你给我一份爱,我还你***!
38、师太!你就从了老衲吧!
39、我爱你!关你什么事?
40、你的就是我的,我的还是我的!
41、不错!人都是逼出来的。
42、时间就像乳沟,只要挤一挤总还是有的!
43、****做的事,交配交的人!
44、男人的谎言可以骗女人一夜,女人的谎言可以骗男人一生!
45、鸳鸯戏水,都他妈淹死;比翼双飞,都他妈摔死。
46、承诺就象“操NI妈”一样,经常说却很难做得到!
47、我的爱人都叫我第三者!
48、喜欢是淡淡的爱;爱是深深的喜欢!
49、人不猥琐枉少年!
50、我不是一个随便的人,我随便起来不是人
 

10大高招保你的linux系统安全

w4zw 发表于 2008-02-20 18:13:47

第1招:取消不必要的服务

早期的Unix版本中,每一个不同的网络服务都有一个服务程序在后台运行,后来的版本用统一

的/etc/inetd服务器程序担此重任。Inetd是 Internetdaemon的缩写,它同时监视多个网络端口,一旦

接收到外界传来的连接信息,就执行相应的TCP或UDP网络服务。

由于受inetd的统一指挥,因此Linux中的大部分TCP或UDP服务都是在/etc/inetd.conf文件中设定。所以

取消不必要服务的第一步就是检查/etc/inetd.conf文件,在不要的服务前加上“#”号。

一般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网

络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime

和time等。

还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户

非常有用,但也给黑客提供了方便之门。例如,黑客可以利用finger服务查找用户的电话、使用目录以

及其他重要信息。因此,很多Linux系统把这些服务全部取消或部分取消,以增强系统的安全性。

Inetd除了利用/etc/inetd.conf设置系统服务项之外,还利用/etc/services文件查找各项服务所使用的

端口。因此,用户必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。

在Linux 中有两种不同的服务型态:一种是仅在有需要时才执行的服务,如finger服务;另一种是一直

在执行的永不停顿的服务。这类服务在系统启动时就开始执行,因此不能靠修改inetd来停止其服务,而

只能从修改/etc/rc.d/rc[n].d/文件或用Run level editor去修改它。提供文件服务的NFS服务器和提供

NNTP新闻服务的news都属于这类服务,如果没有必要,最好取消这些服务。

第2招:限制系统的出入

在进入Linux系统之前,所有用户都需要登录,也就是说,用户需要输入用户账号和密码,只有它们通过

系统验证之后,用户才能进入系统。

与其他Unix操作系统一样,Linux一般把密码加密之后,存放在/etc/passwd文件中。Linux系统上的所有

用户都可以读到 /etc/passwd文件,虽然文件中保存的密码已经经过加密,但仍然不太安全。因为一般

的用户可以利用现成的密码破译工具,以穷举法猜测出密码。比较安全的方法是设定影子文

件/etc/shadow,只允许有特殊权限的用户阅读该文件。

在Linux 系统中,如果要采用影子文件,必须把所有的公用程序重新编译,才能支持影子文件。这种方

法比较麻烦,比较简便的方法是采用插入式验证模块(PAM)。很多 Linux系统都带有Linux的工具程序

PAM,它是一种身份验证机制,可以用来动态地改变身份验证的方法和要求,而不要求重新编译其他公用

程序。这是因为PAM采用封闭包的方式,把所有与身份验证有关的逻辑全部隐藏在模块内,因此它是采用

影子档案的最佳帮手。

此外,PAM还有很多安全功能:它可以把传统的DES加密方法改写为其他功能更强的加密方法,以确保用

户密码不会轻易地遭人破译;它可以设定每个用户使用电脑资源的上限;它甚至可以设定用户的上机时

间和地点。

Linux系统管理人员只需花费几小时去安装和设定PAM,就能大大提高Linux系统的安全性,把很多攻击阻

挡在系统之外。

第3招:保持最新的系统核心

由于Linux流通渠道很多,而且经常有更新的程序和系统补丁出现,因此,为了加强系统安全,一定要经

常更新系统内核。

Kernel是Linux操作系统的核心,它常驻内存,用于加载操作系统的其他部分,并实现操作系统的基本功

能。由于Kernel控制计算机和网络的各种功能,因此,它的安全性对整个系统安全至关重要。

早期的Kernel版本存在许多众所周知的安全漏洞,而且也不太稳定,只有2.0.x以上的版本才比较稳定和

安全,新版本的运行效率也有很大改观。在设定 Kernel的功能时,只选择必要的功能,千万不要所有功

能照单全收,否则会使Kernel变得很大,既占用系统资源,也给黑客留下可乘之机。

在internet上常常有最新的安全修补程序,Linux系统管理员应该消息灵通,经常光顾安全新闻组,查阅

新的修补程序。

第4招:检查登录密码

设定登录密码是一项非常重要的安全措施,如果用户的密码设定不合适,就很容易被破译,尤其是拥有

超级用户使用权限的用户,如果没有良好的密码,把给系统造成很大的安全漏洞。

在多用户系统中,如果强迫每个用户选择不易猜出的密码,把大大提高系统的安全性。但如果passwd程

序无法强迫每个上机用户使用恰当的密码,要确保密码的安全度,就只能依靠密码破解程序了。

实际上,密码破解程序是黑客工具箱中的一种工具,它把常用的密码或者是英文字典中所有可能用来作

密码的字都用程序加密成密码字,然后把其与Linux系统的 /etc/passwd密码文件或/etc/shadow影子文

件相比较,如果发现有吻合的密码,就可以求得明码了。

在网络上可以找到很多密码破解程序,比较有名的程序是crack。用户可以自己先执行密码破解程序,找

出容易被黑客破解的密码,先行改正总比被黑客破解要有利。

第5招:设定用户账号的安全等级

除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立

一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。

在Linux 系统上的tcpd中,可以设定允许上机和不允许上机人员的名单。其中,允许上机人员名单

在/etc/hosts.allow中设置,不允许上机人员名单在 /etc/hosts.deny中设置。设置完成之后,需要重

新启动inetd程序才会生效。此外,Linux把自动把允许进入或不允许进入的结果记录到

/rar/log/secure文件中,系统管理员可以据此查出可疑的进入记录。

每个账号ID应该有专人负责。在企业中,如果负责某个ID的职员离职,管理员应立即从系统中删除该账

号。很多入侵事件都是借用了那些很久不用的账号。

在用户账号之中,黑客最喜欢具有root权限的账号,这种超级用户有权修改或删除各种系统设置,可以

在系统中畅行无阻。因此,在给任何账号赋予root权限之前,都必须仔细考虑。

Linux 系统中的/etc/securetty文件包含了一组能够以root账号登录的终端机名称。例如,在

RedHatLinux系统中,该文件的初始值仅允许本地虚拟控制台(rtys)以root权限登录,而不允许远程用

户以root权限登录。最好不要修改该文件,如果一定要从远程登录为root权限,最好是先以普通账号登

录,然后利用su命令升级为超级用户。

第6招:消除黑客犯罪的温床

在Unix 系统中,有一系列r字头的公用程序,它们是黑客用以入侵的武器,非常危险,因此绝对不要把

root账号开放给这些公用程序。由于这些公用程序都是用. rhosts文件或者hosts.equiv文件核准进入的

,因此一定要确保root账号不包括在这些文件之内。

由于r字头指令是黑客们的温床,因此很多安全工具都是针对这一安全漏洞而设计的。例如,PAM工具就

可以用来把r字头公用程序的功力废掉,它在 /etc/pam.d/rlogin文件中加上登录必须先核准的指令,使

整个系统的用户都不能使用自己home目录下的.rhosts文件。

第7招:增强安全防护工具

SSH是安全套接层的简称,它是可以安全地用来取代rlogin、rsh和rcp等公用程序的一套程序组。SSH采

用公开密钥技术对网络上两台主机之间的通信信息加密,并且用其密钥充当身份验证的工具。

由于SSH把网络上的信息加密,因此它可以用来安全地登录到远程主机上,并且在两台主机之间安全地传

送信息。实际上,SSH不仅可以保障Linux主机之间的安全通信,Windows用户也可以通过SSH安全地连接

到Linux服务器上。

第8招:限制超级用户的权力

我们在前面提到,root是Linux保护的重点,由于它权力无限,因此最好不要轻易把超级用户授权出去。

但是,有些程序的安装和维护工作必须要求有超级用户的权限,在这种情况下,可以利用其他工具让这

类用户有部分超级用户的权限。Sudo就是这样的工具。

Sudo 程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能

执行有限的几个指令。例如,应用sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取

得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。

Sudo 不但限制了用户的权限,而且还把每次使用sudo所执行的指令记录下来,不管该指令的执行是成功

还是失败。在大型企业中,有时候有许多人同时管理 Linux系统的各个不同部分,每个管理人员都有用

sudo授权给某些用户超级用户权限的能力,从sudo的日志中,可以追踪到谁做了什么以及改动了系统的

哪些部分。

值得注意的是,sudo并不能限制所有的用户行为,尤其是当某些简单的指令没有设置限定时,就有可能

被黑客滥用。例如,一般用来显示文件内容的/etc/cat指令,如果有了超级用户的权限,黑客就可以用

它修改或删除一些重要的文件。

第9招:追踪黑客的踪迹

当你仔细设定了各种与Linux相关的组态,并且安装了必要的安全防护工具之后,Linux操作系统的安全

性的确大为提高,但是却并不能保证防止那些艺高人胆大的网络黑客的入侵。

在平时,网络管理人员要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包

括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否

有不合常理的时间记载。例如:

正常用户在半夜三更登录;

不正常的日志记录,比如日志只记录了一半就切断了,或者整个日志文件被删除了;

用户从陌生的网址进入系统;

因密码错误或用户账号错误被摈弃在外的日志记录,尤其是那些一再连续尝试进入失败,但却有一定模

式的试错法;

非法使用或不正当使用超级用户权限su的指令;

重新开机或重新启动各项服务的记录。

第10招:共同防御,确保安全

从计算机安全的角度看,世界上没有绝对密不透风、百分之百安全的计算机系统,Linux系统也不例外。

采用以上的安全守则,虽然可以使Linux系统的安全性大大提高,使顺手牵羊型的黑客和电脑玩家不能轻

易闯入,但却不一定能阻挡那些身怀绝技的武林高手,因此,企业用户还需要借助防火墙等其他安全工

具,共同防御黑客入侵,才能确保系统万无一失

是高手的话就过unix20个习题吧

w4zw 发表于 2008-02-20 17:50:39

采用 10 个能够提高您的 UNIX® 命令行效率的好习惯——并在此过程中摆脱不良的使用模式。本文循序

渐进地指导您学习几项用于命令行操作的技术,这些技术非常好,但是通常被忽略。了解常见错误和克

服它们的方法,以便您能够确切了解为何值得采用这些 UNIX 习惯。
引言

当您经常使用某个系统时,往往会陷入某种固定的使用模式。有时,您没有养成以尽可能最好的方式做

事的习惯。有时,您的不良习惯甚至会导致出现混乱。纠正此类缺点的最佳方法之一,就是有意识地采

用抵制这些坏习惯的好习惯。本文提出了 10 个值得采用的 UNIX 命令行习惯——帮助您克服许多常见

使用怪癖,并在该过程中提高命令行工作效率的好习惯。下面列出了这 10 个好习惯,之后对进行了更

详细的描述。

采用 10 个好习惯

要采用的十个好习惯为:

在单个命令中创建目录树。
更改路径;不要移动存档。
将命令与控制操作符组合使用。
谨慎引用变量。
使用转义序列来管理较长的输入。
在列表中对命令分组。
在 find 之外使用 xargs。
了解何时 grep 应该执行计数——何时应该绕过。
匹配输出中的某些字段,而不只是对行进行匹配。
停止对 cat 使用管道。
在单个命令中创建目录树

清单 1 演示了最常见的 UNIX 坏习惯之一:一次定义一个目录树。


清单 1. 坏习惯 1 的示例:单独定义每个目录树
 
~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

 


使用 mkdir 的 -p 选项并在单个命令中创建所有父目录及其子目录要容易得多。但是即使对于知道此选

项的管理员,他们在命令行上创建子目录时也仍然束缚于逐步创建每级子目录。花时间有意识地养成这

个好习惯是值得的:


清单 2. 好习惯 1 的示例:使用一个命令来定义目录树
~ $ mkdir -p tmp/a/b/c

 


您可以使用此选项来创建整个复杂的目录树(在脚本中使用是非常理想的),而不只是创建简单的层次

结构。例如:


清单 3. 好习惯 1 的另一个示例:使用一个命令来定义复杂的目录树
~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

 


过去,单独定义目录的唯一借口是您的 mkdir 实现不支持此选项,但是在大多数系统上不再是这样了。

IBM、AIX®、mkdir、GNU mkdir 和其他遵守单一 UNIX 规范 (Single UNIX Specification) 的系统现在

都具有此选项。

对于仍然缺乏该功能的少数系统,您可以使用 mkdirhier 脚本(请参见参考资料),此脚本是执行相同

功能的 mkdir 的包装:

~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

 


更改路径;不要移动存档

另一个不良的使用模式是将 .tar 存档文件移动到某个目录,因为该目录恰好是您希望在其中提取 .tar

文件的目录。其实您根本不需要这样做。您可以随心所欲地将任何 .tar 存档文件解压缩到任何目录—

—这就是 -C 选项的用途。在解压缩某个存档文件时,使用 -C 选项来指定要在其中解压缩该文件的目

录:


清单 4. 好习惯 2 的示例:使用选项 -C 来解压缩 .tar 存档文件
~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

 


相对于将存档文件移动到您希望在其中解压缩它的位置,切换到该目录,然后才解压缩它,养成使用 -C

的习惯则更加可取——当存档文件位于其他某个位置时尤其如此。

将命令与控制操作符组合使用
仅当另一个命令返回零退出状态时才运行某个命令

使用 && 控制操作符来组合两个命令,以便仅当 第一个命令返回零退出状态时才运行第二个命令。换句

话说,如果第一个命令运行成功,则第二个命令将运行。如果第一个命令失败,则第二个命令根本就不

运行。例如:


清单 5. 好习惯 3 的示例:将命令与控制操作符组合使用
~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

 

 

在此例中,存档的内容将提取到 ~/tmp/a/b/c 目录中,除非该目录不存在。如果该目录不存在,则 tar

命令不会运行,因此不会提取任何内容。

仅当另一个命令返回非零退出状态时才运行某个命令

类似地,|| 控制操作符分隔两个命令,并且仅当第一个命令返回非零退出状态时才运行第二个命令。换

句话说,如果第一个命令成功,则第二个命令不会运行。如果第一个命令失败,则第二个命令才会 运行

。在测试某个给定目录是否存在时,通常使用此操作符,如果该目录不存在,则创建它:


清单 6. 好习惯 3 的另一个示例:将命令与控制操作符组合使用
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

 

 

您还可以组合使用本部分中描述的控制操作符。每个操作符都影响最后的命令运行:


清单 7. 好习惯 3 的组合示例:将命令与控制操作符组合使用
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

 


 

谨慎引用变量

始终要谨慎使用 Shell 扩展和变量名称。一般最好将变量调用包括在双引号中,除非您有不这样做的足

够理由。类似地,如果您直接在字母数字文本后面使用变量名称,则还要确保将该变量名称包括在方括

号 ([]) 中,以使其与周围的文本区分开来。否则,Shell 将把尾随文本解释为变量名称的一部分——

并且很可能返回一个空值。清单 8 提供了变量的各种引用和非引用及其影响的示例。


清单 8. 好习惯 4 的示例:引用(和非引用)变量
~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa

~ $ echo "$VARa"

~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $

 


使用转义序列来管理较长的输入

您或许看到过使用反斜杠 (\) 来将较长的行延续到下一行的代码示例,并且您知道大多数 Shell 都将

您通过反斜杠联接的后续行上键入的内容视为单个长行。然而,您可能没有在命令行中像通常那样利用

此功能。如果您的终端无法正确处理多行回绕,或者您的命令行比通常小(例如在提示符下有长路经的

时候),反斜杠就特别有用。反斜杠对于了解键入的长输入行的含义也非常有用,如以下示例所示:


清单 9. 好习惯 5 的示例:将反斜杠用于长输入
~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

 

 

或者,也可以使用以下配置:


清单 10. 好习惯 5 的替代示例:将反斜杠用于长输入
~ $ cd tmp/a/b/c \
>                 || \
> mkdir -p tmp/a/b/c \
>                    && \
> tar xvf -C tmp/a/b/c ~/archive.tar

 

 

然而,当您将输入行划分到多行上时,Shell 始终将其视为单个连续的行,因为它总是删除所有反斜杠

和额外的空格。

注意:在大多数 Shell 中,当您按向上箭头键时,整个多行输入将重绘到单个长输入行上。

在列表中对命令分组

大多数 Shell 都具有在列表中对命令分组的方法,以便您能将它们的合计输出向下传递到某个管道,或

者将其任何部分或全部流重定向到相同的地方。您一般可以通过在某个 Subshell 中运行一个命令列表

或通过在当前 Shell 中运行一个命令列表来实现此目的。

在 Subshell 中运行命令列表

使用括号将命令列表包括在单个组中。这样做将在一个新的 Subshell 中运行命令,并允许您重定向或

收集整组命令的输出,如以下示例所示:


清单 11. 好习惯 6 的示例:在 Subshell 中运行命令列表

~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

 

 

在此示例中,该存档的内容将提取到 tmp/a/b/c/ 目录中,同时将分组命令的输出(包括所提取文件的

列表)通过邮件发送到地址 admin。

当您在命令列表中重新定义环境变量,并且您不希望将那些定义应用于当前 Shell 时,使用 Subshell

更可取。

在当前 Shell 中运行命令列表

将命令列表用大括号 ({}) 括起来,以在当前 Shell 中运行。确保在括号与实际命令之间包括空格,否

则 Shell 可能无法正确解释括号。此外,还要确保列表中的最后一个命令以分号结尾,如以下示例所示


清单 12. 好习惯 6 的另一个示例:在当前 Shell 中运行命令列表
~ $ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"

 


在 find 之外使用 xargs

使用 xargs 工具作为筛选器,以充分利用从 find 命令挑选的输出。find 运行通常提供与某些条件匹

配的文件列表。此列表被传递到 xargs 上,后者然后使用该文件列表作为参数来运行其他某些有用的命

令,如以下示例所示:


清单 13. xargs 工具的经典用法示例
~ $ find some-file-criteria some-file-path | \
> xargs some-great-command-that-needs-filename-arguments

 

 

然而,不要将 xargs 仅看作是 find 的辅助工具;它是一个未得到充分利用的工具之一,当您养成使用

它的习惯时,将会希望进行所有试验,包括以下用法。

传递空格分隔的列表

在最简单的调用形式中,xargs 就像一个筛选器,它接受一个列表(每个成员分别在单独的行上)作为

输入。该工具将那些成员放置在单个空格分隔的行上:


清单 14. xargs 工具产生的输出示例
~ $ xargs
a
b
c
Control-D
a b c
~ $

 

 

您可以发送通过 xargs 来输出文件名的任何工具的输出,以便为其他某些接受文件名作为参数的工具获

得参数列表,如以下示例所示:


清单 15. xargs 工具的使用示例
~/tmp $ ls -1 | xargs
December_Report.pdf README a archive.tar mkdirhier.sh
~/tmp $ ls -1 | xargs file
December_Report.pdf: PDF document, version 1.3
README: ASCII text
a: directory
archive.tar: POSIX tar archive
mkdirhier.sh: Bourne shell script text executable
~/tmp $

 

 

xargs 命令不只用于传递文件名。您还可以在需要将文本筛选到单个行中的任何时候使用它:


清单 16. 好习惯 7 的示例:使用 xargs 工具来将文本筛选到单个行中
~/tmp $ ls -l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $

 

 

谨慎使用 xargs

从技术上讲,使用 xargs 很少遇到麻烦。缺省情况下,文件结束字符串是下划线 (_);如果将该字符作

为单个输入参数来发送,则它之后的所有内容将被忽略。为了防止这种情况发生,可以使用 -e 标志,

它在不带参数的情况下完全禁用结束字符串。

了解何时 grep 应该执行计数——何时应该绕过

避免通过管道将 grep 发送到 wc -l 来对输出行数计数。grep 的 -c 选项提供了对与特定模式匹配的

行的计数,并且一般要比通过管道发送到 wc 更快,如以下示例所示:


清单 17. 好习惯 8 的示例:使用和不使用 grep 的行计数
~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real    0m0.097s
user    0m0.006s
sys     0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real    0m0.013s
user    0m0.006s
sys     0m0.005s
~ $

 

除了速度因素外,-c 选项还是执行计数的好方法。对于多个文件,带 -c 选项的 grep 返回每个文件的

单独计数,每行一个计数,而针对 wc 的管道则提供所有文件的组合总计数。

然而,不管是否考虑速度,此示例都表明了另一个要避免地常见错误。这些计数方法仅提供包含匹配模

式的行数——如果那就是您要查找的结果,这没什么问题。但是在行中具有某个特定模式的多个实例的

情况下,这些方法无法为您提供实际匹配实例数量 的真实计数。归根结底,若要对实例计数,您还是要

使用 wc 来计数。首先,使用 -o 选项(如果您的版本支持它的话)来运行 grep 命令。此选项仅 输出

匹配的模式,每行一个模式,而不输出行本身。但是您不能将它与 -c 选项结合使用,因此要使用 wc

-l 来对行计数,如以下示例所示:


清单 18. 好习惯 8 的示例:使用 grep 对模式实例计数
~ $ grep -o and tmp/a/longfile.txt | wc -l
3402
~ $

 

 

在此例中,调用 wc 要比第二次调用 grep 并插入一个虚拟模式(例如 grep -c)来对行进行匹配和计

数稍快一点。

匹配输出中的某些字段,而不只是对行进行匹配

当您只希望匹配输出行中特定字段 中的模式时,诸如 awk 等工具要优于 grep。

下面经过简化的示例演示了怎么样仅列出 12 月修改过的文件。


清单 19. 坏习惯 9 的示例:使用 grep 来查找特定字段中的模式
~/tmp $ ls -l /tmp/a/b/c | grep Dec
-rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
-rw-r--r--  1 root root  238 Dec 03 08:19 README
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
~/tmp $

 

 

在此示例中,grep 对行进行筛选,并输出其修改日期和名称中带 Dec 的所有文件。因此,诸如

December_Report.pdf 等文件是匹配的,即使它自从一月份以来还未修改过。这可能不是您希望的结果

。为了匹配特定字段中的模式,最好使用 awk,其中的一个关系运算符对确切的字段进行匹配,如以下

示例所示:


清单 20. 好习惯 9 的示例:使用 awk 来查找特定字段中的模式
~/tmp $ ls -l | awk ' == "Dec"'
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
-rw-r--r--  1 root root  238 Dec 03 08:19 README
~/tmp $

 

 

有关怎么样使用 awk 的更多详细信息,请参见参考资料。

停止对 cat 使用管道

grep 的一个常见的基本用法错误是通过管道将 cat 的输出发送到 grep 以搜索单个文件的内容。这绝

对是不必要的,纯粹是浪费时间,因为诸如 grep 这样的工具接受文件名作为参数。您根本不需要在这

种情况下使用 cat,如以下示例所示:


清单 21. 好习惯和坏习惯 10 的示例:使用带和不带 cat 的 grep
 
~ $ time cat tmp/a/longfile.txt | grep and
2811

real    0m0.015s
user    0m0.003s
sys     0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real    0m0.010s
user    0m0.006s
sys     0m0.004s
~ $

 

 

此错误存在于许多工具中。由于大多数工具都接受使用连字符 (-) 的标准输入作为一个参数,因此即使

使用 cat 来分散 stdin 中的多个文件,参数也通常是无效的。仅当您使用带多个筛选选项之一的 cat

时,才真正有必要在管道前首先执行连接。

结束语:养成好习惯

最好检查一下您的命令行习惯中的任何不良的使用模式。不良的使用模式会降低您的速度,并且通常会

导致意外错误。本文介绍了 10 个新习惯,它们可以帮助您摆脱许多最常见的使用错误。养成这些好习

惯是加强您的 UNIX 命令行技能的积极步骤。