|
|
用户名:烂漫心情 笔名:醉翁 地区: 浙江-杭州 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
清晨的阳光透过窗子,洒落在雪白的墙上,斑驳着树叶的影子. 然而,时间好像定格在了那段时光一样.开始不停的想同一个人,做同一个梦,许同一个愿望… 我不明白,在门窗紧闭的夜里,思念还会从窗外飘来. 于是,我吻着照片,躺在床上,放牧着思念.归来吧,我的爱人…
股市牛转熊与货币政策调整
股市是否已进入熊市?需要澄清两个问题:第一,牛转熊的一般技术界定;第二,牛转熊的中国特殊标准。
第一个问题的答案古已有之:股市的核心指数跌幅超过20%(或30%),持续两个季度以上。蓝筹股主导的股市如纽约证券交易所,以20%跌幅为界;成长股主导的股市如纳斯达克,以30%跌幅为界。
武汉科技大学的董登新教授对中国股市核心指数波动的研究提出了中国股市牛熊更替的标准,他的研究把18年中国股市分为五轮,并提出了中国熊市底部判断的三重标准。在董登新教授看来,本轮股市波动已经进入“慢熊通道”,或将持续到2009年底。值得注意的是:中国历次熊市的指数跌幅都超过50%,历时都超过两年,本轮跌幅是否也会如此惨烈?
中国股市的核心指数是沪综指,推动指数走向的主力是隐形或公开的机构投资人,特别是最近几年迅速崛起的公募基金。中国投资机构的风格其实有两大类,一类机构的兴奋点是“抄底”,一类机构的兴奋点是“冲高”,前者可以界定为价值驱动型,后者则被称为情绪驱动型。当情绪驱动型投资机构和散户投资人合流之时,市场高潮迭起,股指连创新高。
沪指4800-5000点是关键的心理价位,因为那是情绪驱动型机构的“跳板”。这个“跳板”一被踏翻,市场情绪会发生逆转。沪指4800-5000点的情绪跳板为什么在两周内突然跌破?一个再度起飞的牛市为何像紧急迫降的飞机?这绝不是用基本面分析能够解读的市场现象,因为上市公司的基本面不可能在两周内同时恶化。从资金流和信息流两条主线看,是国内因素切断了情绪驱动的资金流,国际国内的偶发事件切断了牛市情绪的信息流。
有三个政策性的因素导致了股市资金断流:基金发行关闸,蓝筹结群增发,货币政策收紧。这三个因素的市场效应依次发生在过去-现在-未来,结果在信息流转向之时突然诱发资金断流,就像飞机油箱起火后的紧急迫降一样。信息流的逆转也有三个因素:次贷危机加深,冰雪灾情肆虐,增长减速预期。这三个因素的市场效应也是依次发生在过去-现在-未来,信息流的逆转和资金流的放缓同时作用于股市,导致了突发性的牛转熊。此时此刻,如果没有新的信息流和资金流在相反方向进入市场,本轮“慢熊”确实有可能像专家暗示的那样:指数跌幅50%以上,持续时间接近两年。
监管者是否应该 “救市”,颇多争议,也不是本文的主题。去年确定的货币政策从紧在当时无疑是正确的,而且也已经产生了积极的效果。但是现在,美联储大幅度连续降息,股市房市双双 “熄火”,货币政策是否应该做些调整?(不是救市,而是调整)如果答案是肯定的,接下来的问题是应该如何调整?
货币政策从紧的基调应该调整为“收而不紧”,也就是只收不紧,积极在公开市场回收以往过度发行的货币,但不再直接收紧银根,简言之就是在今年内“三不一升”:第一不提高利率,第二不提高准备金率,第三不限制消费信贷,第四要加速人民币升值。
我们不能用行政拘留对付国际金融市场的“带头大哥”,也就无法抑制全球的经济增长减速和通货膨胀加速。该怎么办呢?只好“以毒攻毒,以胀制胀”。美联储已经暂时放弃反通胀目标,贸然大幅降息,说明伯南克趴下了,我们是否也趴下找找感觉?也能体会出新的意境:退一步海阔天空。
“收而不紧”的货币政策并非笔者创新,人们应该提出并思考以下问题了:中美利率已经倒挂了,还能再调高利率吗?存款准备金率高达15%了,银行还能保持稳定成长吗?银行股在股市中的市值占比达三成以上,银行业绩下滑,股市岂能新高?如果收紧消费信贷,经济增长的三套马车刚刚实现消费领先的和谐发展,岂不又是昙花一现?次贷危机的爆发使人们开始学习国际金融了,虽然多数人还是似懂非懂,至少现在都知道美国穷人买房子可以选择固定利率加“零首付”,我们为什么就要浮动利率加首付四成呢?学习美国,还要多学些让穷人享福的金融政策;防范美国,也要多用些让国人受益的政策工具。摘自《证券时报》
08年投资宝典:重点关注的三大主题
一、主题投资将成为08年的主线思路之一
从一般的规律来看,完整的牛市通常要经历价值发现、价值挖掘、价值创造三个过程。
当牛市已经完成价值发现、价值挖掘两个阶段,开始过度到第三个阶段时,市场将呈现以下特点是:市场整体估值水平相对较高,对个股价值的认识和挖掘相对充分。
显然,目前的市场情况较为符合以上的特点。据有关统计显示,目前沪深300的市盈率为37倍左右。考虑到07年是宏观经济的景气高点,08年上市公司的盈利增速将可能回落到30%左右,那么08年沪深300的市盈率仍接近30倍,估值水平仍然不低。另外,经过二年的牛市行情,每个行业基本上都得到了充分的挖掘,已不存在明显的估值洼地。
那么,当市场正式步入第三阶段时,哪些板块将成为主流呢?这一阶段将明显体现出价值创造的精神。也就是说,尽管部分行业或个股的估值水平不低,但由于具备着良好成长前景或故事,因此仍然能享受更高的溢价。对于这些成长故事,我们可以称之为主题投资。从目前的情况来看,新能源、医药、资产注入等将有望成为08年上涨动力较大的投资主题。
二、挖掘08年的潜力投资主题
展望未来,在08年中新能源、医药、资产注入等投资主题值得中长线关注。
首先,新能源方面,随着高油价时代的来临,与及越来越严峻的国际能源形势,世界各国开始高度重视新能源的开发。例如,美国最近通过的新能源法案规定,到2015年,多达一半的新出产汽车,必须能使用生物油料比例达85%的混合汽油;到2022年,美国年产生物能源将达到360亿加仑,为去年产量的七倍。
我国方面,鼓励与支持新能源、替代能源的政策也相继出台,在“十一五”规划中,就赫然将“发展煤化工,开发煤基液体燃料”纳入优化发展能源章节。事实上,煤化工也是当前的新能源、替代能源中最具技术可行性与经济可行性的一种。据测算,当原油价格超过40美元/桶时,甲醇、二甲醚等产品就可以实现盈利。值得一提的是,二甲醚的前景较为乐观。如果车用二甲醚推广后替代10%的柴油,那么年需求量就达到1000万吨,再加民用二甲醚的需求,将大大超出目前我国800万吨的产能。
医药方面,随着医疗改革的不断推进,未来医院将更多地采取集中招标、采购的方式,这在很大程度上将加速医药流通业的集中。事实上,美国市场化主导医疗模式,仅5年时间前三大企业的集中度由30%上升70%。日本医疗政府主导,6年时间前三大企业的市场份额由30%上升至71%.目前,我国前三大医药流通企业的市场占有率不到30%,远低于发达国家水平,在医疗改革等因素催化下,小部分医药流通企业将可能出现迅速成长为行业的巨无霸。
资产注入方面,目前已经处于重工业化的中期阶段,产业结构已经面临着调整升级的要求,在这种背景下,行业并购、资产注入的发生率将明显提高,其中央企的整合将是其中一支重要力量。另外,我国已经进入加息周期,08年以后企业间接融资的成本与难度将大大提高。因此,将会有更多的公司将通过增发或IPO来实现直接融资。可以预期,在即将到来的08年中,资产注入仍将是市场的热点主题之一。
三、消费与成长构筑投资主基调
2008年多市场的联动使得A股市场波动性增加,市场投资机会将呈现局部的、阶段性的特征,操作策略上应把握好风格与主题轮换带来的投资机会。我们判断,08年上证指数将在4800—7000点区间运行,上半年成长股收益好于价值股,中小盘股收益好于大盘股。08年最大的投资机会在于快速成长的公司和资产重组预期的公司,重点关注人民币升值、通胀与消费升级、环保与新能源、奥运、创业板、央企整合六大主题的投资机会。
从经济增长的三驾马车来看,我们判断,2008年,我国投资增速有所回落,出口增速可能出现明显调整,进口增速平稳,贸易顺差仍将持续,而消费增速加快,GDP增速虽有回落,但仍可保持在10%以上,经济软着陆的可能性大。由于08年我国证券市场受到短期局部热点及政策事件因素的冲击比较大,市场波动性将加大,市场投资机会将呈现局部的、阶段性的特征,在操作策略上应把握好风格与主题轮换带来的投资机会。
在对宏观经济运行脉络进行自上而下的梳理后,我们建议08年重点关注六大主题投资机会,它们分别是:人民币升值、通胀与消费升级、节能环保与新能源、奥运主题、创投概念、央企整合。
人民币升值:我们认为,银行、地产、航空、造纸是人民币升值受益明显的行业,可重点关注其中的投资机会。
银行业:人民币升值将增强银行业的盈利能力,并助推金融资产重估,为上市银行的向上估值提供了合理空间。在上市银行中,净利息收入在总营业收入中的占比超过80%,今年以来信贷规模的扩张和净利差的扩大成为主要推动力。
航空:07年三季度航空业业绩的增长相当部分来自于汇兑损益的增加,如上航93%的利润来自于汇兑损益,海航58%的利润来自汇兑损益,因此航空业受人民币升值影响最直接。
造纸:2007年纸品普遍涨价,产能扩张速度放缓,毛利率小幅回升,造纸行业景气度上升。由于国际木浆产能开始扩张,国际价格在08—09年将进入下降通道,有利于造纸行业进一步降低成本,提高盈利水平,而人民币升值将使08年造纸行业毛利率至少提升1个百分点。
通胀与消费升级:通胀与消费升级相辅相成,将成为08年最大的投资亮点,相关受益行业包括:农业、医药、传媒、旅游、食品饮料、商业零售等。
农业:今年以来最上游的种植业产品价格上涨,推动饲料的成本提高,饲料价格上涨又进一步刺激下游的养殖业成本上升,最终传递到下游加工业和消费者。如果各项政策陆续落实到位,农业上市公司迎来真正的投资机会。
医药:尽管近两年我国医药行业政策处于调整期,但整体市场需求量还是明显增加,平均17%的增幅要远高于全球7%—8%的增幅。我国医药行业2007年开始进入新一轮快速增长期。医疗卫生体制改革工作稳步推进,已初步形成改革的总体思路和框架,医改的深化将有效扩大医药市场的规模,为行业龙头性企业带来了新的发展机遇。
商业零售:我们认为,商业零售业转嫁成本的能力较强。温和通胀对零售商的直接影响是增加生产成本,但零售商可以通过控制销售渠道来提高零售价,从而将成本的提高转嫁给消费者,所以其盈利水平不会因此下降。
节能环保、新能源:“十一五”期间,我国水务行业总投资达到一万亿元,其中自来水7000亿,污水处理3000亿。2006年4月25日,《城市污水再生利用技术政策》发布实施,再生水的发展获得了国家政策支持。《节能减排综合性工作方案》要求各城市污水处理收费标准在2008年内至少将提高到0.8元/吨,增幅20%,这将明显提升污水处理公司的业绩。
奥运主题:从奥运主题投资的热点轮换看,奥运会前,投资先行启动,因此如交通运输、建材、房地产、电子信息、环保设备等行业首先启动,随着奥运会的临近,电视转播、体育用品、食品饮料、农林牧渔、商业零售、旅游酒店、金融等行业都将迎来消费高峰。奥运会后,品牌消费品、奢侈品、文化创意产业将应来新的发展机遇。
创投概念:我们认为,上市公司参股风险投资公司,比直接参与单个高风险投资项目,风险收益比更好,因为风险投资公司以其人力、技术等方面的专业性进行多个项目的投资,可以较好的化解单个风险项目投资的风险,特别是那些资金实力雄厚的风险投资公司。
央企整合:2008年政府将继续推进中央企业重组调整,鼓励和支持中央企业通过多种形式进行并购重组。探索组建新的资产经营公司,推进中央企业重组和国有资本有进有退、合理流动。根据计划,国资委将力争于08年6月底以前完成中央企业政策性关闭破产工作。国家将在军工、煤炭、电网电力、民航、航运、电信、石油石化等七大行业保持国有经济的绝对控制力,但同时也需注意其中的不确定性带来的风险。
教会你聪明
男人成熟的N种表现(自我对照版)
| 1.以事业为重。 2.脚踏实地,明白物质也是爱情的基础之一。 3.当心爱的女人和别的男人在一起时,衷心祝福。 4.不对情充满太多幻想。 5.着装得体,精神饱满。 6.擅于发现女人的优点长处并赞美对方。 7.有女人缘,但善于把握寸度。 8.信守承诺,没有把握不会轻易许诺。 9.说话干净利落,不婆婆妈妈。 10.有绅士风度,细心且幽默。 11.不向女人要太多为什么。 12.懂得做女人的忠实听众。 13.相信所爱的女人是个谜。 14.明白女人是最爱撒谎的动物。 15.明白女人心是世上最不稳定和难以捉摸的东西。 16.察言观色,后发制人。 17.不会为失恋丢掉人生目标。 |
18.会记住父母妻子和孩子的生日,并给他们带个礼物。
19.重视事件的结果,而不把过程看得很重。
20.学会对自己的爱人说“真实的谎言”。
中国特种兵之王
[转贴]一个真实故事--跪下来,叫声娘
中国,你别再有地域歧视好吗??
在中国,不知什么时候开始,中部成为“印象塌陷”的重灾区,提到河南,就想到骗子;提到山西,就想到反复重演的矿难;提到安徽,想到的是灾民、是乞丐……其实认清中国历史发展的走向可以知道,中部的过去、现在和未来与中国的发展密切相关———
千多年前,当“中国”这个名词刚被使用时,它的范围只是指今天的河南一带,以后才逐步扩大到黄河中下游地区。这得益于当时黄河中下游地区的气候温和,降水充沛,是最大、最发达的农业区。从夏、商、周起,直到公元12世纪,统一政权和实际政治中心都没有离开过这一范围。西汉时还有“江南(指今湖南、江西的长江以南)卑湿,丈夫早夭”的说法,中原人视为畏途。贾谊被任命为长沙王太傅,就担心住在长沙会活不长,成天忧心忡忡,果然33岁就去世。
但从秦汉以来,由中原向南方的***持续不断,从东汉、唐朝到北宋的一系列***后更形成一次次***高潮。大批中原人南迁,不仅将先进文化传播到南方,也使南方的开发扩大和深化,经济实力不断增强。加上黄河流域气温下降,降水减少,环境恶化。北宋以后,南方的经济地位已超过北方。到明代,南方的文化已明显居于优势。直到近代,这种趋势均未逆转。
中国首都的转移基本是由西向东的,除了出于防御北方游牧民族的目的,也是为了便于获得南方的粮食。元朝定都北京,从此全国政治中心离开中原。朱元璋建明朝时虽定都南京,却深知南方在战略上的弱点,一度考虑迁都开封。但经过考察,发现以前的汴渠早已淤塞,无法将南方的粮食运往开封,只能作罢。
但到了近代,由于西方的现代文明主要是由海上传入的,中国的资本主义工商业首先是在通商口岸和沿海地区发展起来的,然后再向内地扩展,所以基本上是由东向西的,上海成为其“龙头”。黄河下游和海河水系基本不通航运,近代的淮河已经没有自己的出海口,所以尽管北方也有天津、青岛等通商口岸,却无法通过水运影响中原地区。铁路和公路的拉网分布也没能弥补了水运的缺陷,即使处于京汉、陇海两条干线枢纽的郑州,也不能与同样处于中部、却得益于长江的武汉相比,而沿陇海线的开封、洛阳早已失去昔日的荣华,沦为衰败中的区域城市。可耕地开垦已尽,自然条件日渐恶化,人口不断增长,曾经是中华民族文明摇篮和政治、经济、文化中心的中原地区,已经成为全国人口密度最高的贫穷地区之一。
上世纪60年代,“三年自然灾害”更使河南这个农业大省一蹶不振。这时国家的“大三线建设”越过中部,将东部沿海地区和京津地区的重要工业、科研机构西迁至云、贵、川、陕,仅上海迁往“三线”的资产就高达2000亿元人民币(1970年代末统计数)。而中原却只能望洋兴叹。
当一个地方经济繁荣,政治地位优越,处于全国瞩目的中心地位时,必定具有巨大的吸引力,想当年洛阳太学三万子弟,西晋左思《三都赋》引起的“洛阳纸贵”,都在政经衰落后成为历史。更何况,社会的大多数只能根据物质条件维持生活,在持续的穷困中形成某些恶俗也在所难免。明人王士性是一位杰出的人文地理学家,他在《广志绎》一书中肯定了河南人的优点:“中州淳厚质直,有古风,虽一时好刚,而可以义感。语言少有诡诈,一斥破之,则愧汗而不敢强辩”。还列举了两种“善俗”:一是“告助”,如因贫无法交纳赋税被官府追讨,亲友就会集资帮助。一是“吃会”,凑集十多人,每月两次在社庙聚餐,每人将一点余钱交给会长储存,会员如遇到父母丧葬等急难可得到资助,以免借高利贷。会员父子相继,时间越长钱积得越多。他列举的恶俗是:百姓不重视积蓄,丰收时将粮食卖光挥霍,灾年就挑着箩筐全家逃荒要饭。赌博成风,穷人有十文钱也要赌光才罢休。输了就偷,所以小偷盛行。而偷术太差,往往登堂入室时就杀人,偷的东西都是笨重而容易辨认的,今天偷来的衣服明天就穿在身上,马上被抓获。赃物值不了几个钱,但因杀了人,有时竟有十多个人被判死刑。如果不顾“淳厚质直”的传统优点,只强调存在的恶俗,或者一味夸张这类恶俗,那必然会像今天某些人那样制造地域歧视了。
中国有许多人自称根在河洛,都认中原为祖籍,然而却嘲笑自己的故里。但这种社会心理,终究不过是历史长河上的一二朵水花。所有中国人和中国所有的地方都不过是这个历史走向中的一环。这种认识当有助于国民以宽容、理性、克制的心情,看待这个国家中尚还存在的落后的地区和贫穷的人。从中了解到,彼人彼地彼时的疾苦,和此时此地自己的命运,其实根本相关。
矛盾之中
七个习惯可使你成功 (有时间就看看吧)
Windows 到 Linux 之旅4
Windows 到 Linux 之旅:网络在如今这个时代,运行一台没有连接到网络的计算机几乎是难以想像的。电子邮件、Web 浏览和文件共享像打印和查看屏幕上的信息一样,都是用户所期待的。
幸运的是,Liunx 从一开始就是为网络而开发的。事实上,网络是 Linux 做得最好的事情之一。Linux 支持诸如TCP/IP 和 SMB(NetBIOS)等流行的网络协议。Linux 还具有用于监控和过滤网络流量的成熟工具。诸如 FTP、Windows 文件和打印共享以及 Web 托管等服务也是可用的。Linux 甚至还提供了用于集中目录服务、虚拟专用网(VPN)和远程过程调用的工具。
网络硬件
Linux 能够使用具有驱动程序的任何网络硬件。Linux 驱动程序单独地或以可加载模块的形式编译到内核中。Linux 内核默认支持许多流行的网卡。在选择网络硬件时,最好总是使用“硬件兼容性列表”中列出的设备。另外还要使用最新的 Linux 发行版本。
一般情况下,如果使用的是兼容的网络硬件,安装系统时网卡会自动得到识别。可以使用 ifconfig 命令来检查系统上的网络硬件。默认情况下,ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所有设备。
清单 1. 使用 ifconfig
refname: ifconfig-a
[root@cmw-t30 root]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:09:6B:60:8B:1E
inet addr:9.41.209.160 Bcast:9.41.209.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:47255 errors:0 dropped:0 overruns:0 frame:0
TX packets:32949 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:22140365 (21.1 Mb) TX bytes:13519623 (12.8 Mb)
Interrupt:11 Base address:0xf000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1308081 errors:0 dropped:0 overruns:0 frame:0
TX packets:1308081 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:183376967 (174.8 Mb) TX bytes:183376967 (174.8 Mb)
在上面的清单中,系统中只有一块网卡,标识为 eth0。lo 适配器是一个回环(lookback),由 Linux 用来与它自身通信。后面还会进一步讨论 ifconfig 命令。
网络设备名称
Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0,其他设备依次被编号为 1、2、3,等等。在给设备命名时将使用下面的约定。本信息摘自 Linux Network Administrator's Guide。
eth0, eth1 ...
这些是以太网卡接口。它们用于大多数的以太网卡,包括许多并行端口以太网卡。
tr0, tr1 ...
这些是令牌环网卡接口。它们用于大多数的令牌环网卡,包括非 IBM 生产的网卡。
s10, s11 ...
这些是 SLIP 接口 。SLIP 接口与串行线关联,关联顺序就是它们被分配给 SLIP 的顺序。
ppp0, ppp1 ...
这些是 PPP 接口。就像 SLIP 接口一样,PPP 接口一旦被转换到 PPP 模式,它就与串行线关联。
plip0. plip1 ...
这些是 PLIP 接口。PLIP 接口通过并行线传输 IP 数据报。这些接口在系统启动时由 PLIP 驱动程序分配,并被映射到并行端口。在 2.0.x 内核中,设备名称和并行端口的 I/O 端口之间存在直接的关系,但是在更新版本的内核中,设备名称是顺序分配的,就像 SLIP 和 PPP 设备一样。
ax0, ax1 ...
这些是 AX.25 接口。AX.25 是业余无线电操作人员使用的主要协议。AX.25 接口的分配和映射方式与 SLIP 设备类似。
还有其他许多可用于其他网络驱动程序的接口类型。我们仅列出了一些最常见的。
既然以太网是最常见的配置,下面就重点来讨论它。
网络配置
在安装 Linux 发行版本时,就得配置网络。您或许已经有一个来自初始配置的活动 eth0。这个配置对于当前的使用也许足够,但是您可能需要随着时间的推移做出更改。下面将介绍与 IP 网络相关的不同配置项,以及用于使用这些配置项的文件和工具。
Webmin
Webmin 在 Networking 下的 Network Configuration 中提供一组优秀的网络配置工具。您可以配置单独的接口并调整它们的当前设置或已保存的设置。还可以配置路由和网关、DNS 客户端设置以及本地主机地址。在编辑好所有的配置之后,可以单击 Apply Configuration 来应用它们,不必重新启动系统。
不同发行版本中的工具
每个发行版本都有它自己用于配置网络设置的工具。 应该参考特定发行版本的文档来确定要使用的工具。每种工具提供与 Webmin 工具基本上相同的配置选项。 其中有些版本可能提供特定于该发行版本的选项。
手动配置也是可能的,不过这是一个非常深奥的主题。
分析和监控工具
Linux 附带了许多工具来监控网络任务。
ifconfig
我们在上面使用过 ifconfig 命令来查看以太网卡的状态。然而,ifconfig 还可以配置设备并报告关于设备的情况。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用 ifconfig ,我们无需影响已保存的设置,就能够快速地配置网卡:
ipconfig eth0 192.168.13.13 netmask 255.255.255.0 up
上面这条命令使用一个 C 类 IP 地址将 eth0 设置到地址 192.168.13.13,并确保它正常运行。
ipconfig eth0 down
上面这条命令将关闭 eth0 设备。关于使用 ifconfig 的完整细节,请参见 info ifconfig 页面。
ifup/ifdown
要使用已保存的配置来激活和禁用网络设备,请分别使用 ifup 和 ifdown。
# Bring up eth0 using the saved configuration
ifup eth0
#&bsp;Shut down eth0
ifdown eth0
netstat
使用 netstat 控制台命令来输出网络连接、路由表、接口统计、伪装连接和组播成员。netstat 具有多个命令行开关来控制其功能。下面是其中一些常用的开关:
输出网络状态
netstat -p 显示每个套接字所属的程序的 PID 或名称
netstat -a 同时显示侦听和非侦听套接字
netstat -t 显示 TCP 连接
netstat -u 显示 UDP 连接
netstat -e 显示附加信息;使用这个选项两次,可以获得最详细的信息
下面是 netstat -tp 的一个例子:
清单 2. 使用 netstat
[root@cmw-t30 root]# netstat -tp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 localhost.localdo:29000 *:* LISTEN
2389/attvpnctl
tcp 0 0 *:10000 *:* LISTEN
5945/perl
tcp 0 0 *:x11 *:* LISTEN
1120/X
tcp 0 0 *:ftp *:* LISTEN
724/xinetd
tcp 0 0 *:ssh *:* LISTEN
710/sshd
tcp 0 0 *:ipp *:* LISTEN
797/cupsd
tcp 0 0 *:505 *:* LISTEN
1043/rcd
tcp 0 0 localhost.localdoma:ipp localhost.localdo:32772 ESTABLISHED
797/cupsd
tcp 0 0 sig-9-65-39-140.m:44916 sdoprods2.austin.i:1352 TIME_WAIT
-
tcp 0 0 10.100.100.101:33020 64.12.29.100:5190 ESTABLISHED
1433/gaim
tcp 0 0 localhost.localdo:44954 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 localhost.localdo:44955 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 localhost.localdo:44897 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 localhost.localdo:44902 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 localhost.localdo:44903 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 localhost.localdo:44900 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 localhost.localdo:44901 localhost.localdoma:ipp TIME_WAIT
-
tcp 0 0 10.100.100.101:44888 cs9336-61.austin.r:pop3 TIME_WAIT
-
tcp 0 0 localhost.localdo:32772 localhost.localdoma:ipp ESTABLISHED
1246/gnome-cups-man
tcp 1 0 localhost.localdo:32774 localhost.localdoma:ipp CLOSE_WAIT
1246/gnome-cups-man
tcp 0 0 10.100.100.101:33019 cs46.msg.sc5.yahoo:5050 ESTABLISHED
1433/gaim
tcp 0 0 sig-9-65-39-140.m:35061 d03nm119.boulder.i:1352 CLOSE_WAIT
1720/wineserver
tcp 0 0 10.100.100.101:33021 64.12.30.4:5190 ESTABLISHED
1433/gaim
我最常使用 netstat 命令来查看处于 LISTEN 或 ESTABLISHED 状态的连接。LISTEN 是系统上的服务,它接受来自其他机器的连接。ESTABLISHED 是您的机器和其他机器之间的活动连接。请确保您知道正在运行的所有 LISTEN 程序。如果看到某些无法识别的内容,它可能就是一个安全顾虑。netstat 具有许多选项。请在命令行键入 info netstat 来获得该命令的细节。
route
route 控制台命令允许您显示和操作 IP 路由表。
清单 3. 使用 route
[root@cmw-t30 plugins]# route|grep -v ipsec
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
204.146.24.42 10.100.100.1 255.255.255.255 UGH 0 0 0 eth1
10.100.100.0 * 255.255.255.0 U 0 0 0 eth1
127.0.0.0 * 255.0.0.0 &bsp;U 0 0 0 lo
default 10.100.100.1 0.0.0.0 UG 0 0 0 eth1
不带命令行开关运行 route 将显示当前路由表。可以使用 route 对该路由表进行非常精细的修改。
route add default gw 10.10.10.1
上面的命令添加一个默认的路由(它将在没有其他路由匹配的情况下被使用)。使用这个路由的所有分组都将途经网关“10.10.10.1”。实际将用于该路由的设备取决于我们如何到达“10.10.10.1”——到“10.10.10.1”的静态路由必须预先设置好。
route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
上面的命令添加一个通过“eth0”到网络 192.56.76.x 的路由。这里的 C 类网络掩码修饰符实际上并不是必需的,因为 192.* 就是一个 C 类 IP 地址。这里的单词“dev”也可以省略。
路由选择是一个非常深奥的主题。关于 route 选项的完整信息可通过 info route 命令获得。
结束语
Linux 从一开始就是为网络而设计的。它内置了以前仅在高端企业产品中才可见到的成熟功能。然而,尽管拥有所有这些强大的能力,Linux 网络的配置却远没有 Windows 网络的配置复杂。诸如 Webmin、redhat-config-network 和 YAST这样的工具允许执行图形化的配置。诸如 ifconfig 和 route 这样的工具允许通过控制台或脚本查看和修改网络参数。诸如 netstat 这样的工具允许查看单独的网络连接,并显示它们与运行着的进程的关系。
Localhost
本地主机地址包含在/etc/hosts 中。这个文件和 C:\winnt\system32\drivers\etc\hosts 文件等价。其中的条目显示 IP 地址的别名,用于在不必查询 DNS 的情况下指派名称。
127.0.0.1 localhost.localdomain localhost
10.10.10.10 cmw-t30
Windows 到 Linux 之旅:备份与恢复Linux 是一个稳定而可靠的环境。但是任何计算系统都有无法预料的事件,比如硬件故障。拥有关键配置信息的可靠备份是任何负责任的管理计划的组成部分。在 Linux 中可以通过各种各样的方法来执行备份。所涉及的技术从非常简单的脚本驱动的方法,到精心设计的商业化软件。备份可以保存到远程网络设备、磁带驱动器和其他可移动媒体上。备份可以是基于文件的或基于驱动器映像的。可用的选项很多,您可以混合搭配这些技术,为您的环境设计理想的备份计划。
确定策略
可以采用许多不同的方法来备份系统。
所备份的内容很大程度上取决于您备份它们的理由。您是否试图从严重的故障(比如硬盘驱动器问题)中恢复?您是否想归档以便能在需要时恢复旧的文件?您计划从一个冷系统和还原着手,还是从一个预加载的备用系统着手?
确定要备份的内容
在备份和还原系统时,Linux 基于文件的性质成了一个极大的优点。在 Windows 系统中,注册表与系统是非常相关的。配置和软件安装不仅仅是将文件放到系统上。因此,还原系统就需要有能够处理 Windows 这种特性的软件。在 Linux 中,情况就不一样了。配置文件是基于文本的,并且除了直接处理硬件时以外,它们在很大程度上是与系统无关的。硬件驱动程序的现代方法是,使它们以动态加载的模块的形式可用,这样内核就变得更加与系统无关。不同于让备份必须处理操作系统如何安装到系统和硬件上的复杂细节,Linux 备份处理的是文件的打包和解包。
一般情况下,以下这些目录是需要备份的:
/etc
包含所有核心配置文件。这其中包括网络配置、系统名称、防火墙规则、用户、组,以及其他全局系统项。
/var
包含系统守护进程(服务)所使用的信息,包括 DNS 配置、DHCP 租期、邮件缓冲文件、HTTP 服务器文件、db2 实例配置,等等。
/home
包含所有用户的默认用户主目录。这包括他们的个人设置、已下载的文件和用户不希望失去的其他信息。
/root
是根(root)用户的主目录。
/opt
是安装许多非系统文件的地方。IBM 软件就安装在这里。OpenOffice、JDK 和其他软件在默认情况下也安装在这里。
有些目录是应该考虑不 备份的。
/proc
应该永远不要备份这个目录。它不是一个真实的文件系统,而是运行内核和环境的虚拟化视图。它包括诸如 /proc/kcore 这样的文件,这个文件是整个运行内存的虚拟视图。备份这些文件只是在浪费资源。
/dev
包含硬件设备的文件表示。如果计划还原到一个空白的系统,那就可以备份 /dev。然而,如果计划还原到一个已安装的 Linux 系统,那么备份 /dev 是没有必要的。
其他目录包含系统文件和已安装的包。在服务器环境中,这其中的许多信息都不是自定义的。大多数自定义都发生在 /etc 和/home 目录中。不过出于完整性的考虑,您可能希望备份它们。
在生产环境中,我希望确保数据不会丢失,因而我会备份除 /proc 目录之外的整个系统。如果最担心用户和配置,我会仅备份 /etc、/var、/home 和 /root 目录。
备份工具
正如前面提到过的, Linux 备份在很大程度上就是打包和解包文件。这允许使用现有的系统实用工具和脚本来执行备份,而不必购买商业化的软件包。在许多情况下,这类备份将是足够的,并且为管理员提供了极大的控制能力。备份脚本可以使用 cron 命令来自动化,这个命令控制 Linux 中预定的事件。
tar
tar 是一个已移植到 Linux 中的经典 UNIX 命令。tar 是 tape archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上。如果您下载过 Linux 源代码,或许已经碰到过 tar 文件。这是一个基于文件的命令,它本质上是连续地、首尾相连地堆放文件。
使用 tar 可以打包整个目录树,这使得它特别适合用于备份。归档文件可以全部还原,或从中展开单独的文件和目录。备份可以保存到基于文件的设备或磁带设备上。文件可以在还原时重定向,以便将它们重新放到一个与最初保存它们的目录(或系统)不同的目录(或系统)。tar 是与文件系统无关的。它可以使用在 ext2、ext3、 jfs、Reiser 和其他文件系统上。
使用 tar 非常类似于使用诸如 PKZip 这样的文件实用工具。只需将它指向一个目的(可以是文件或设备),然后指定您想要打包的文件。您可以通过标准的压缩类型来动态压缩归档文件,或指定一个自己选择的外部压缩程序。要通过 bzip2 压缩或解压缩文件,可使用 tar -z 命令。
要使用 tar 来把除 /proc 目录之外的整个文件系统备份到 SCSI 磁带设备:
tar -cpf /dev/st0 / --exclude=/proc
在上面的例子中,-c 开关表示归档文件正在被创建。-p 开关表示我们希望保留文件许可权限,这对良好的备份来说是很关键的。-f 开关指向该归档文件的文件名。在本例中,我们使用的是原始磁带设备 /dev/st0。/ 表示我们想要备份的内容。既然我们想要备份整个系统,因此把这个开关指定为根(root)。当把 tar 指向一个目录(以 / 结尾)时,它会自动递归。最后,我们排除了 /proc 目录,因为它没有包含需要保存的任何内容。如果单盒磁带容纳不下这个备份,我们需要添加 -M 开关(本例中没有显示)以进行多卷备份。
要还原一个或多个文件,可以使用带提取开关(-x)的 tar 命令:
tar -xpf /dev/st0 -C /
这里的 -f 开关同样指向归档文件,-p 开关表明我们想要还原归档的权限。-x 开关表明从归档中提取文件。-C / 表明我们想要让还原从 / 开始。tar 通常还原到运行这个命令的目录。-C 开关使我们的当前目录不再相关。
您可能会经常使用的另外两个 tar 命令是 -t 和 -d 开关。-t 开关列出某个归档文件的内容。-d 开关将归档文件的内容与系统上的当前文件作比较。
为便于操作和编辑,您可以将想要归档的文件和目录放进一个文本文件中,然后在命令行通过 -T 开关引用这个文本文件。这些文件和目录可以与命令行上列出的其他目录结合起来。下面的命令行备份 MyFiles 中列出的所有文件和目录、/ 根目录和 /tmp 目录中的所有 iso 文件。
tar -cpf /dev/st0 -T MyFiles /root /tmp/*.iso
文件列表只是一个文本文件,其中列出文件或目录。下面是一个例子:
/etc
/var
/home
/usr/local
/opt
请注意 tar -T(或 files-from)命令不能接受通配符。文必须明确地列出。上面的例子展示了一种单独地引用文件的方法。您还可以执行脚本来搜索系统,然后建立一个列表。下面就是这样一个脚本的例子:
#!/bin/sh
cat MyFiles > TempList
find /usr/share -iname *.png >> TempList
find /tmp -iname *.iso >> TempList
tar -cpzMf /dev/st0 -T TempList
上面的脚本首先将 MyFiles 中的所有现有文件列表复制到 TempList。然后它执行两个 find 命令来搜索文件系统中匹配某个模式的文件,并将它们附加到 TempList。第一次是搜索 /usr/share 目录树中以 .png 结尾的所有文件。第二次是搜索 /tmp 目录树中以 .iso 结尾的所有文件。在建立好列表之后,tar 然后在文件设备 /dev/st0 (第一个 SCSI 磁带设备)上创建 一个新的归档文件,该文件使用 gzip 格式来压缩,并保留所有文件权限。该归档文件将跨越多个卷。要归档的文件的名称将从 TempList 文件中提取。
还可以使用脚本来执行更精细的操作,比如增量备份。Gerhard Mourani 在他的 Securing and Optimizing Linux 一书中给出了一个优秀的脚本,您可在本文结尾处的 参考资料 中找到关于这本书的信息。
也可以编写脚本来还原文件,虽然还原通常是手动进行的。正如上面提到过的,用于提取文件的 -x 开关代替了 -c 开关。可以还原整个归档文件,或者还原指定的个别文件或者目录。使用通配符来引用归档文件中的文件是可以的。还可以使用开关来转储和还原。
dump 和 restore
dump 可以执行类似 tar 的功能。然而,dump 倾向于考虑文件系统而不是个别的文件。下面是引自 dump 手册文件中的内容:“dump 检查 ext2 文件系统上的文件,并确定哪些文件需要备份。这些文件将出于安全保护而被复制到给定的磁盘、磁带或其他存储媒体上……大于输出媒体容量的转储将被划分到多个卷。在大多数媒体上,容量是通过一直写入直至返回一个 end-of-media 标记来确定的。”
配合 dump 的程序是 restore,它用于从转储映像还原文件。
restore 命令执行转储的逆向功能。可以首先还原文件系统的完全备份,而后续的增量备份可以在已还原的完全备份之上覆盖。可以从完全或部分备份中还原单独的文件或者目录树。
dump 和 restore 都能在网络上运行,因此您可以通过远程设备进行备份或还原。dump 和 restore 使用磁带驱动器和提供广泛选项的文件设备。然而,两者都仅限用于 ext2 和 ext3 文件系统。如果使用的是 JFS、Reiser 或者其他文件系统,您将需要其他的实用工具,比如 tar 。
使用 dump 执行备份
使用 dump 执行备份是相当简单的。下面的命令执行一个完全 Linux 备份,它把所有 ext2 和 ext3 文件系统备份到一个 SCSI 磁带设备。
dump 0f /dev/nst0 /boot
dump 0f /dev/nst0 /
在这个例子中,系统中有两个文件系统。一个用于 /boot,另一个用于 / ,这是常见的配置。它们必须在执行备份时单独地引用。 /dev/nst0 引用第一个 SCSI 磁带驱动器,不过是以非重绕的模式引用。这样确保各个卷在磁带上一个接一个地排列。
dump 的一个有趣特性是其内置的增量备份功能。在上面的例子中,0 表示 0 级或基本级备份。这是完全系统备份,您要定期执行以保存整个系统。对于后续的备份,您可以使用其他数字(1-9)来代替 0,以改变备份级别。1 级备份会保存自从执行 0 级备份以来更改过的所有文件。2 级备份会保存自从执行 1 级备份以来更改过的所有文件,以此类推。使用 tar 和脚本可以执行相同的功能,但要求脚本创建人员提供一种机制来确定上次备份是何时执行的。dump 具有它自己的机制,即它在执行备份时会输出一个更新文件(/etc/dumpupdates)。这个更新文件将在每次执行 0 级备份时被重设。后续级别的备份会保留它们的标记,直至执行另一次 0 级备份。如果您在执行基于磁带的备份,dump 会自动跟踪多个卷。
使用 restore 来执行还原
要还原使用 dump 保存的信息,可以使用 restore 命令。像 tar 一样,dump 能够列出(-t)归档文件的内容,并与当前文件作比较(-C)。使用 dump 時必须小心的地方是还原数据。有两种非常不同的还原方法,您必须使用正确的方法才能获得可预测的结果。
重建 (-r)
记住,在设计 dump 时考虑得更多的是文件系统,而不是单独的文件。因此,存在两种不同的文件还原风格。要重建一个文件系统,可使用 -r 命令行开关。设计重建的目的是为了能在空文件系统上操作,并将它还原为已保存的状态。在执行重建之前,您应该已经创建、格式化和装载(mount)了该文件系统。不应该对包含文件的文件系统执行重建。
下面是使用上面执行的转储来执行完全重建的例子。
restore -rf /dev/nst0
上面这个命令需要针对要还原的每个文件系统分别执行。
在需要的时候,可以重复这个过程来添加增量备份。
提取 (-x)
如果需要使用单独的文件而不是使用整个文件系统,您必须使用 -x 开关来提取它们。例如,要仅从我们的磁带备份中提取 /etc 目录,可使用以下命令:
restore -xf /dev/nst0 /etc
交互式还原 (-i)
restore 提供的另外一个特性是交互式模式。使用命令:
restore -if /dev/nst0
将把您置于交互式 shell 中,同时还显示了包含在该归档文件中的项。键入“help”将会显示一个命令列表。然后您就可以浏览并选择希望提取的项。务必记住,您提取的任何文件都将进入当前目录。
dump 与 tar
dump 和 tar 都有一批拥护者。两者都各有优点和缺点。如果您运行的是除 ext2 或 ext3 之外的任何文件系统,那么 dump 就对您不可用。然而如果不是这种情况,那么只需最少的脚本就能运行 dump,并且 dump 还具有可用于帮助还原的交互式模式。
我倾向于使用 tar,因为我喜欢编写脚本来获得额外的控制级别。此外还有用于操作 .tar 文件的多平台工具。
其他工具
在 Linux 中,任何能够复制文件的程序都可以用来执行某种程度的备份。有人就使用 cpio 和 dd 来执行备份 。cpio 是又一个与 tar 差不多的打包实用工具,但使用得不太普遍。dd 是一个文件系统复制实用工具,它产生文件系统的二进制副本。dd 还可用于产生硬盘驱动器的映像,类似于使用诸如 Symantec 的 Ghost 这样的产品。然而,dd 不是基于文件的,因此您只能使用它来将数据还原到完全相同的硬盘驱动器分区。
前瞻和回顾
拥有良好备份的第一步是拥有计划。首先知道您需要保存的数据以及需要什么恢复策略,然后使用最适合该策略的工具。
Linux 附带了一些现成的(out of the box)有用备份工具。其中两个最常用的是 tar 和 dump/restore。两者都能执行完全系统备份。使用创造性的脚本,您能够设计一个自定义的方案来本地和远程地备份系统。
然而,编写自己的备份脚本可能是一项繁重的任务,对于复杂的企业来说更是如此。诸如 Tivoli Storage Manager 这样的商业化软件降低了学习难度,并允许您立即控制自己的备份,但是您可能必须调整自己的策略来适应这些工具的功能。
Windows 到 Linux 之旅:安装软件 安装 Linux 时首先注意到的事情之一,就是 Linux 发行版本中有如此多可用的包。大多数发行版本都附带了 Linux 操作系统、安装工具和管理工具。它们还包括 Internet 工具、开发工具、办公工具、游戏,以及一些您不曾听说过的程序。Linux 发行版本附带数千个 可用包的情况并不鲜见。如果您没有选择“完整安装”,则只会安装这些包的一个子集。
现在您可能想知道“如何删除不想要的包?如何安装遗漏了的包?是否能够使用不是该发行版本附带的软件?”
RPM
在安装 Linux 时,您或许会注意到关于正在安装的 RPM 的许多信息。RPM 代表 Redhat Package Manager(Redhat 包管理器),这是 Redhat 的贡献,现在已成为管理 Redhat 和 UnitedLinux 以及其他许多发行版本上的软件的标准。
RPM 本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的 Linux 软件。最初加载到发行版本中的所有软件都是通过一个 RPM 来安装的。
RPM 剖析
RPM 是文件包。它包括的 .spec 文件提供了关于包及其功能和依赖关系(即在该包能够运行之前必须安装其他哪些包)的信息。.spec 还包含包中的文件清单,指定这些文件须加载到系统中的何处,以及它们的初始权限如何。RPM 还包含安装前脚本,这是由包开发人员编写的。RPM 其次还包含已编译的二进制文件。最后,RPM 包含了安装后脚本。
RPM 结构
.spec 安装前脚本 二进制文件 二进制文件 ... 二进制文件 安装后脚本
在安装 RPM 时,系统首先检查该包的依赖关系是否得到满足。如果不满足, 安装过程就会终止,除非您指定了迫使安装无论如何都要继续的选项。
如果一切顺利,安装前脚本就会运行。这个脚本可以做任何事情。它通常创建用户和目录。然而,它可以做许多类型的动态配置,甚至以自定义的方式编译运行系统的源代码。
如果安装前脚本成功完成,二进制文件将依照清单被复制到系统上。在复制完所有的文件和设置了它们的权限之后,安装后脚本就会运行。同样,这个脚本几乎能够做任何事情。
一旦完成所有这些步骤,关于包的信息就被添加到 RPM 数据库,安装过程就完成了。使用这种简单的机制,您能够执行通过更完善的商业安装程序所能执行的所有功能。
RPM 数据库
RPM 的优雅之处是 RPM 数据库。这个数据库通常位于 /var/lib/rpm 目录,它包含关于系统上已安装的每个 RPM 的信息。这个数据库知道包之间的依赖关系,当删除某个包将导致其他包无法工作时,它将发出警告。这个数据库知道最初随某个包安装的每个文件以及这些文件在系统上的最初状态。它还知道每个包的文档和配置文件的位置。这听起来好像是大量的信息,事实上确实如此。但它并不是过多而庞大的。在一个包含 1,066 个包、由 203,272 个文件组成的系统上,数据库文件仅有 45 MB!在加载和卸载包时,RPM 使用这个数据库来检查依赖关系。用户还可以在这个数据库中查询关于包的信息。
使用 RPM
配合 RPM 包使用的程序被相应地命名为 rpm。rpm 以多种不同的模式运行,不过最常见的任务是安装、升级、查询、验证和删除。
rpm -i (装)
在第一次安装某个包时,您要使用 -i 或安装模式。只需将 rpm 指向某个二进制包并执行它, rpm 就会把该包安装到您的系统上。安装过程一般只需几秒钟。我经常会在安装包时使用 -v(详细)开关来提供关于该过程的更多信息,以及使用 -h(哈希线)开关来通过输出在控制台上的哈希(#)符号提供安装进度更新。下面是安装某个包的例子:
清单 1. 安装 MyPackage
$ rpm -ivh MyPackage-1.0.0.i386.rpm
Preparing... ########################################### [100%]
1:MyPackage ########################################### [100%]
就是这个样子!MyPackage 现在已经安装完成,可供使用了。
rpm -e (删除)
要删除已安装的包,可使用 -e 开关。rpm 将使用数据库来删除该包的所有文件。如果有已安装的其他包依赖正在删除的包,rpm 将会异常退出。您必须使用 nodeps 开关来执行强制删除(nodeps 还可以用于强制安装)。在使用这个开关来强制安装或删除时,务必 非常 小心。删除其他包所依赖的包,可能会导致灾难性的结果。下面这个命令删除我们在上面安装的包:
$ rpm -e MyPackage
注意,包的删除并不一定需要它的完整名称(包括版本号)。安装时需要完整名称,因为我们是在引用一个文件名称。已安装的包仅通过它们的名称来引用。包的名称是版本号之前的所有内容。
rpm -V(验证)
验证开关非常有用。它将包文件的当前状态与它们在安装时的原始状态作比较。两种状态之间的区别将用一个代码来显示:
文件验证结果
S 文件大小不一致
M 模式不一致(包括权限和文件类型)
5 MD5 校验和不一致
D 设备主要/次要编号不匹配
L readLink(2) 路径不匹配
U 用户拥有关系不一致
G 群组拥有关系不一致
T mTime 不一致
如果您对某个包运行 rpm -V,并且发现某个可执行文件的大小发生了变化,那可能就是安全漏洞的征兆。
rpm -U(升级)
一旦某个包已经安装,尝试安装具有相同名称的包将产生一条消息,指出该包已经安装。 如果想要将某个包升级到更新的版本,可使用 -U 开关来升级。升级还具有另一个影响。当对多个包名称运行升级时,它将设法按依赖关系的顺序放置包。换句话说,必需的包将首先安装。不管某个包是否已经安装,都可以对它使用升级开关,许多人使用它而不是使用 -i 开关来执行安装和升级。下面是使用升级开关来加载多个 rpm 包的例子:
清单 2. 交互式升级
$ rpm -Uvh My*.rpm
Preparing... ########################################### [100%]
1:bMyPackageDep ########################################### [ 50%]
1:aMyPackageNew ########################################### [100%]
在上面的例子中,bMyPackageDep 是 aMyPackageNew 的前提条件,因此尽管文件名称以相反的顺序排列,rpm 也会对它们正确排序。
rpm -q(查询)
可以从 rpm 数据库中查询多种有用的信息。对 rpm 数据库拥有读访问权限的任何用户都能够运行查询。默认情况下,全部用户都拥有读访问权限。要运行一个查询,可使用 -q 开关带上要查询的包的名称。这样将返回该包的版本。
$ rpm -q MyPackage
MyPackage-1.0.0
包的名称必须精确匹配,不允许使用通配符。然而,如果记不住包的完整名称,您可以使用 grep 工具来帮助找到它。可以使用 -qa 开关来查询所有已安装的包,并用 grep 来管道输出您能记住的信息。例如:
$ rpm -qa | grep IBM
IBMWSAppDev-Product-5.0-0
IBMWSSiteDevExp-Core-5.0-0
IBMWSSiteDev-Core-5.0-0
IBMWSTools-WAS-BASE-V5-5.0-0
IBMJava118-SDK-1.1.8-5.0
IBMWSWB-samples-5.0-0
IBMWSWB-5.0-0
IBMWSAppDev-Core-5.0-0
IBMWSAppDev-5.0-0
IBMWSTools-5.0-0
除了版本号外,rpm -q 还可以提供关于包的其他有用信息。下面就是这样一些例子:
使用 rpm 查询获取信息
rpm -q changelog 显示包的开发变更历史记录
rpm -qc 显示包的配置文件
rpm -qd 显示包的文档文件
rpm -qi 显示包描述
rpm -ql 显示包的文件的列表
rpm -qR 显示包的依赖关系
还有另一个有趣的查询命令,它针对文件而不是针对包运行。
rpm -q whatprovides <filename>
上面这个命令将识别与给定的 filename(文件名)相关联的包。filename 必须包括文件的绝对路径,因为信息就是以这种方式存储在 rpm 数据库中的。
RPM 前端
从控制台操作 rpm 很容易,但有时使用图形用户界面会更方便。在典型的 Linux 风格中,有一些前端程序为 rpm 程序提供界面。每种发行版本都有一个前端,但是它们各不相同。请参考您的发行版本文挡,以了解关于所提供的包管理工具的信息。
源代码
由于 Linux 是开放源代码的操作系统,它附带了编译软件所需的所有开发工具。虽然您使用的大多数包将以二进制 RPM 的形式提供,但是您并不仅限于使用那些包。如果愿意,您可以为您的系统下载原始源代码,并以自定义的方式进行编译。
应该对在生产系统上编译源代码保持谨慎,因为这样可能导致问题,或者不再支持系统上正在使用的商业软件(比如 IBM DB2)。然而,熟悉从源代码编译软件的过程将使您能够对软件应用补丁,以及使用从其他环境移植过来的包。一旦成功地编译代码,创建您自己的 RPM 也是可以做到的!
源代码 RPM
当 RPM 被创建时,还有一个称作源代码 RPM 的产物。这是一个与源代码组合在一起的 SPEC 文件,设计它的目的是为了在一个或多个体系结构上生成程序。这对源代码和二进制这两个世界来说是最佳的!对于源代码 RPM,您可以在系统上定制编译软件,但是完成的产品将是一个可安装的 RPM,而不是原始的二进制。以预编译 RPM 的形式可用的大多数包还以 SRPM 的形式可用。这也许是在 Linux 中软件跨平台转移的简单途径。当您在一个不同的平台上成功地重新编译时,可考虑与整个开发社区享完成的 RPM。
也许源代码更适合您
如果您是 Linux 新手,安装软件的方法与您过去习惯使用的方法不同。然而,RPM 安装方法是优雅的,同时提供了您很快就会欣赏的新能力。
您应该熟悉从控制台使用 rpm 的选项,不过对于日常使用,有一些前端界面选项使得 rpm 更易于管理。您的发行版本提供了这样一个界面,也有其他类似的界面可供使用,比如 Webmin 中的那一个界面。
您并不仅限于使用预编译的 rpm,还可以利用 Linux 的开放源代码性质,直接从源代码编译应用程序。对于成熟的项目,编译通常是很容易的。记住,从源代码安装的代码在 rpm 数据库中没有相应的条目。在使用源代码时,可考虑使用源代码 rpm,它组合了已编译源代码的强大能力和 rpm 的可管理性。
rpm 必须以 root 身份运行
必须以 root 身份执行 rpm 安装和删除,因为需要访问文件系统和 rpm 数据库。
Windows 到 Linux 之旅3
Windows 到 Linux 之旅:Linux 日志成功地管理任何系统的关键之一,是要知道系统中正在发生什么事。Linux 中提供了异常日志,并且日志的细节是可配置的。
Linux 日志都以明文形式存储,所以您不需要特殊的工具就可以搜索和阅读它们。您还可以编写脚本,来扫描这些日志,并基于它们的内容去自动执行某些功能。
Linux 日志存储在 /var/log 目录中。这里有几个由系统维护的日志文件,但其他服务和程序也可能会把它们的日志放在这里。大多数日志只有 root 才可以读,不过只需要修改文件的访问权限就可以让其他人可读。
/var/log/messages
messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。
/var/log/XFree86.0.log
这个日志记录的是 Xfree86 Xwindows 服务器最后一次执行的结果。如果您在启动到图形模式时遇到了问题,一般情况从这个文件中会找到失败的原因。
其他日志
根据您的 Linux 发行版本以及您所运行的服务和应用程序的不同,/var/log 目录下还会有其他日志文件。例如,可能会有与邮件服务器、资源共享、自动任务等相关的日志。
准备好了就开始轮循
您将看到,/var/log 目录下有一些文件以一个数字结尾,这些是已轮循的归档文件。日志文件会变得特别大,特别笨重。Linux 提供了一个命令来轮循这些日志,以使您的当前日志信息不会淹没在旧的无关信息之中。logrotate 通常是定时自动运行的,但是也可以手工运行。当执行后,logrotate 将取得当前版本的日志文件,然后在这个文件名最后附加一个“.1”。其他更早轮循的文件为“.2”、“.3”,依次类推。文件名后的数字越大,日志就越老。
您可以通过编辑 /etc/logrotate.conf 文件来配置 logrotate 的自动行为。通过 man logrotate 来学习 logrotate 的全部细节。
日志工具
任何文本工具都可以用来处理日志文件。下面是一些特别有用的工具。
dmesg
使用 dmesg 命令可以快速查看最后一次系统引导的引导日志。通常它的内容会很多,所以您往往会希望将其通过管道传输到一个阅读器。
dmesg | more
上面的命令将以分页的方式显示引导信息。
tail
有时,当某些行为发生时,您会希望密切关注一个日志文件。Tail 命令设计用于显示文本文件的最后几行。使用 -f 开关,当日志增加新的内容时,tail 将继续显示新的输出。
tail -f /var/log/messages
上面的命令将显示 /var/log/messages 文件的最后 10 行,然后继续监控那个文件,并输出新的行为。要停止 tail -f 命令,使用 Ctrl + C 来中止进程。
more
More 的工作方式与 DOS 版本相同。您可以将它指向一个文件,或者通过它以管道输出信息,以分页的方式来查看信息。例如,以分页方式显示 Xfree86 启动日志文件的内容:
more /var/log/XFree86.0.log
使用“q”或者 [Ctrl]-C 来停止查看文件。
less
Less 是另一个文本阅读器,不过它还允许在文件中滚动浏览以及检索信息。
less /var/log/messages
上面的命令将显示 /var/log/messages 文件的内容。使用“q”来停止查看文件。使用“h”来获得 less 的使用帮助。
logger
您可能会希望将自己的消息也记录到日志文件。您可以只是将日志消息附加到恰当的文本文件,但是您必须得套用日志信息格式。同样,如果日志系统被定制,您还将不得不修改您的代码。llogger 命令使您可以将自己的消息发送到日志工具。在脚本中使用它来提供关于执行和错误的消息。
定制的日志
有两个服务,或者称之为后台程序,在控制日志,分别是 klogd 和 syslogd。klogd 只处理内核消息,syslogd 处理其他系统消息,比如应用程序。您可以通过编辑 /et/syslog.conf 和 /etc/sysconfig/syslog 来配置它们的行为。完全定制日志超出了本文的范围,不过在本文最后的 参考资料 列表中可以找到详细的资料。您也可以查看 /etc/syslogd.conf 的 man 页面来进一步学习。
本质上,软件所产生的每一条消息都提供一些信息用于确定消息是从哪里来的以及这个消息是什么。/etc/syslog.conf 文件允许您来指定如何处理那种类型的消息。您可以将它转储到消息文件,也可以将它转储到一个定制的文件。您可以将它发送到远程的主机,由远程主机来根据其自己的 syslogd 配置来处理它。远程日志是一个非常好的安全功能。通过将您的日志放置到远程系统中,您可以防止有人通过改变日志文件来掩饰其踪迹。
下面是取自 man /etc/syslog.conf 页面中的一个定制日志的例子:
定制的日志
# Kernel messages are first, stored in the kernel
# file, critical messages and higher ones also go
# to another host and to the console
#
kern.* /var/adm/kernel
kern.crit @finlandia
kern.crit&nsp; /dev/console
kern.info;kern.!err /var/adm/kernel-info
第一个规则将所有内核消息定向到 /var/adm/kernel 文件。
第二个语句将所有优先级为 crit 或者更高的内核消息定向到一个名为 finlandia 的远程主机。这是有用的,因为如果主机崩溃以及磁盘错误无法恢复,您将无法读取存储的消息。如果那些消息同时在远程主机上也存在,您就依然可以找出崩溃的原因。
第三个规则将这些消息定向到实际的控制台,这样,在这台机器上工作的人也可以看到它们。
第四行告诉 syslogd 将所有优先级为 info 到 warning 的内核消息保存到 /var/adm/kernel-info 文件。所有优先级为 err 以及更高的消息不包括在内。
像这种定制日志的能力为 Linux 环境提供了极大的灵活性与可控制性。
您生活中的日志
Linux 中的日志文件对于系统的故障诊断和维护来说至关重要。Linux 日志记录到文本文件,所以不需要专门的工具来查看这些文件。文本文件也容易用于定制脚本和程序。
日志被轮循,以避免变得过大,同时可以将当前信息与老的数据相分离。日志轮循是可配置的。
日志是高度可配置的,为了安全和备份,日志甚至可以存储到单独的系统中。您可以让自己的脚本和程序产生系统日志消息,这些消息将被 syslogd 后台进程识别出并进行处理。
在控制台中查看日志文件
由于 Linux 中的日志文件以明文的形式记录,所以不需要特殊的工具来解释它们。任何文本文件阅读器都可以显示 Linux 日志文件。浏览器,比如 Mozilla,可以显示日志文件,并且提供搜索功能。Linux 还有控制台工具可以查看文本文件。more,如同 MS DOS 版本一样以分页方式显示文件。less 命令将在只读阅读器中显示文件,这个阅读器具有双向滚动和搜索的功能。现在,在命令行中输入 less /var/log/messages,体会一下这个命令。
Windows 到 Linux 之旅:使用分区和文件系统在 Linux 中文件和存储设备的使用与 Windows 中不同。虽然同样有文件和分层目录结构,但是除此以外您还需要建立一种不同的思维方式。
清单 1. 目录结构
/
|-- bin
|-- boot
|-- dev
|-- etc
|-- mnt
|-- opt
| |-- IBM
| | |-- WebSphereStudio
| | `-- db2
| |-- IBMHttpServer
|-- root
|-- sbin
|-- tmp
|-- usr
| |-- X11R6
| | |-- bin
| | |-- include
| | |-- lib
| | |-- man
| | `-- share
| |-- bin
| |-- dict
| |-- doc
| |-- etc
| |-- include
| |-- lib
| |-- libexec
| |-- local
| | |-- OpenOffice
| | | |-- sbin
没有驱动器字母!
在 Linux 中没有驱动器字母,这确实相当有用。如果您曾经在复杂的网络环境中使用过 Windows 系统,并且运行这个系统的机器带有若干个设备,那么您可能会发现字母表中的字母不够用。在 Linux 中,只有一个文件结构。它以 root (/) 开始,所有的本地文件系统,所有本地设备,以及所有的远程文件系统都表示为这个结构中的子目录。
当 Linux 第一次引导时,它根据 /etc/fstab 文件中的信息构建这个文件结构。Windows 为硬盘驱动器分区和其他存储设备分配驱动器字母,而 Linux 在 root 文件结构中为它们分配目录。这个分层的结构是完全可配置的,并且可以动态地修改。
装载!
将一个设备添加到文件系统中,术语上称为 装载 。Linux 会自动装载一个 / (root) 文件系统。也可能会有一个单独的 /boot 文件系统,其中存放的是核心的内核引导文件。Linux 还将装载一些特殊的文件系统。交换分区并不表示为文件系统的一部分,但是内核会处理它。不过,其他特殊的文件系统,比如 proc,被看作是文件系统的常规部分,可以像普通文件一样对它进行处理。
其他文件系统,比如可移动的媒体或者远程文件系统,需要手工装载。装载一个文件系统时,您需要知道在 Linux 中对它进行引用的正确方法,还需要有一个空目录作为 装载点。对于可移动媒体,Linux 可能在安装时就为您创建了装载点。在 Red Hat Linux 中,cdrom 设备被设置装载到 /mnt/cdrom 目录。也就是说,当您将一张 CD 放入 CDROM 设备后,输入命令:
mount /mnt/cdrom
CD 就会被添加到文件系统中,CDROM 设备会被锁定以使它不会被意外弹出。只需要到 /mnt/cdrom 目录就可以访问 CD 中的内容。当不再使用 CD 时,您可以用下面的命令将它从文件系统中移除:
umount /mnt/cdrom
/mnt/cdrom 目录将变空,CDROM 设备的锁定被解除。您现在可以安全地弹出 CD。对其他可移动媒体也是如此,比如软盘驱动器 (/mnt/floppy)。
运行不带参数的 mount 命令会显示出当前已装载的文件系统。
/etc/fstab 文件
设备与其装载点之间的关联关系在 /etc/fstab 中配置。这个文件可以直接修改,也可以由管理工具来维护。下面是一个 /etc/fstab 示例:
理解 /etc/fstab
/dev/hda5 ext3 defaults 1 1
/dev/hda2 /boot ext3 exec,dev,duid,rw 1 2
/dev/hda6 swap swap defaults 0 0
/dev/scd0 /mnt/cdrom auto ro,noauto,exec 0 0
none /dev/pts devpts id=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
每一行表示一个要装载的文件系统。第一列指出的是要装载的设备。第二列是装载点,也就是设备在文件系统中的位置。第三列指出了文件系统的类型。第四列是处理文件系统的选项。最后一列是文件系统的标志位。第一个数字是 1 或者 0,指定系统是否应该用 dump(系统备份的一个选项)进行复制。第二个数字是 0、1 或者 2,指定了在引导时检查文件系统的次序。0 表示完全不检查。1 表示要最先检查, root (/) 文件系统需要指定为 1。其他文件系统应该是 2。
在上面列出的 fstab 文件中,root 文件系统位于第一个 IDE 硬盘驱动器的第五个分区中,这个分区是扩展分区的第一个逻辑驱动器。/boot 文件系统位于第一个 IDE 硬盘驱动器的第二个主分区中,其中存放的是内核启动文件。交换分区位于第一个 IDE 硬盘驱动器的第六个分区,也就是扩展分区的第二个逻辑驱动器。列表中的其他文件系统相应的设备是“none”。我们马上就要阐述这一问题。现在我们先来关注物理磁盘。
第四列中的选项将随文件系统类型而不同。在上面的例子中,/ 和 /boot 的装载选项为“default”。也就是说,它们使用异步 I/O 以可读写方式自动装载。只有 root 可以装载或者缷载设备,但是用户可以执行二进制文件和使用“sticky bit”(稍后介绍)。文件系统将被作为块字符设备来处理。然而,对 /mnt/cdrom 来说,选项就不同了。它不会被自动装载,并且将会作为只读文件系统装载。用户将可以在该文件系统中执行脚本和程序。
添加文件系统
在 /etc/fstab 文件中添加新的一行,您就可以将文件系统添加到 /etc/fstab。作为一个实际的例子,我有一个 RAID 设备,存储的是部门所用到的文件资源。这个设备中只有数据文件,并且保持与操作系统分离,这样在出现硬件故障时可以将它转移到另一个系统。RAID 已经配置好,在 Linux 中识别为 /dev/sdc,即第三个 SCSI 设备。在第一个分区上创建了带日志的 ext3 文件系统,这样我们通过 /dev/sdc1 就可以访问它。我希望在计算机引导时自动将这个 RAID 装载到文件系统中。
我在 /etc/fstab&nsp;中添加了如下一行:
/dev/sdc1 /data ext3 defaults 0 0
这样在引导时 RAID 就会像 / 和 /boot 系统一样被装载。现在我只要再创建一个目录作为指定的装载点:
mkdir /data
一旦创建了这个空目录,我们可以将文件系统装载到它:
mount /data
RAID 现在关联到了 /data。如果系统被重新引导,/data 将自动装载。
分区
在 Linux 中分区与 Windows 中本质上相同。控制台命令 fdisk 可以创建和管理分区。当您使用 fdisk 时,您必须指明它要操作哪个设备。可使用命令 fdisk -l 来查看可用设备。
清单 2. 使用 fdisk
[root@cmw-t30 root]# fdisk -l
Disk /dev/hda: 240 heads, 63 sectors, 7752 cylinders
Units = cylinders of 15120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 8 60448+ 8e Linux LVM
/dev/hda2 9 15 52920 83 Linux
/dev/hda3 * 16 1403 10493280 c Win95 FAT32 (LBA)
/dev/hda4 1404 7751 47990880 f Win95 Ext'd (LBA)
/dev/hda5 1404 5565 31464688+ 83 Linux
/dev/hda6 5566 5635 529168+ 82 Linux swap
/dev/hda7 5636 7751 15996928+ b Win95 FAT32
上面的清单来自于一台膝上型电脑,所以它显示的结构与服务器有些不同。它显示了一个有若干个分区的 IDE 硬盘驱动器。如果有其他设备,同样也将会被列出。例如,第二个 IDE 硬盘驱动器可能会显示为 /dev/hdb。
指定一个设备再次运行 fdisk,您会得到一个简短的提示。
清单 3. 对一个设备运行 fdisk
[root@cmw-t30 root]# fdisk /dev/hda
The number of cylinders for this disk is set to 7752.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help):
输入“m”可以查看命令菜单。您可以使用“p”来显示当前的分区表。您可以创建、删除和修改现有分区的类型。“l”将为您列出可用分区类型的完全列表。用“w”将您的修改写入到分区表并退出程序,或者使用“q”不保存修改而退出。一些修改会立即生效。有一些修改需要系统重新引导方能生效。
Linux 下的分区规则与 Windows 中相同。您可以使用 4 个主分区,每个都可以成为扩展分区。
文件系统类型
Linux 可以处理内核所能识别的任何文件系统类型。相当多的类型是默认编译到内核中的,并且可以再添加新的文件系统。下面是一些重要的文件系统类型:
ext2:标准 Linux 文件系统
ext3:带日志的标准 Linux 文件系统
vfat:Microsoft 的 Fat32 文件系统
jfs:IBM 的日志文件系统
reiserfs:另一个流行的日志文件系统
格式化分区
分区创建完成后,用适当版本的 mkfs 命令对其进行格式化。文件系统将有其自己版本的 mkfs ,比如 mkfs.ext2 或者 mkfs.ext3。这些助手脚本让您可以只需要指定分区就可以创建一个文件系统。下面是一些例子:
清单 4. 使用 mkfs
# Create an ext2 file system on the third
# parition of the first IDE hard drive
mkfs.ext2 /dev/hda3
# Create an ext3 file system on the first
# partition of the 2nd SCSI hard drivemkfs.ext2
mkfs.ext3 /dev/sdb1
# Create a jfs file system in an extended
# partition on the first IDE hard drive.
mkfs.jfs /dev/hda5
有一些高级的参数会影响分区如何格式化,但是对通常的用途来说,使用默认的参数就可以了。一旦分区经过了格式化,它就可以装载到 / 文件系统中。一个文件系统必须在被缷载后才可以重新格式化。
其他文件系统工具
让我们来看一看其他有用的工具。
控制台工具
有几个工具可以查看磁盘和文件系统的状态。
df
df 表示“disk free”。它会报告装载的文件系统上已用的和可用的磁盘空间的大小。有用的开关:
检查磁盘空间
df -h 人类可读的格式;以易读的 k、M、G 而不是以字节为单位来显示文件的大小
df -l 仅列出本地文件系统;默认情况下,远程文件系统也会被列出
du
du 表示“disk usage”。它会报告特定的文件和每个子目录 (参数中指定的目录) 所使用的磁盘空间大小。有用的开关:
检查磁盘使用情况
du -a 列出所有文件所占的空间,而不仅是目录
du -h 人类可读的格式;以易读的 k、M、G 而不是以字节为单位来显示文件的大小
du -c 在所有的参数处理完成后输出一个总计;可以用来得到给定的一组文件或目录所占的总的磁盘空间
du -s 只显示出每个参数指定的文件大小的总和
fsck
这个程序用来检查和修复文件系统,相当于 Windows 中的 chkdsk。如同 mkfs 一样,对应不同的文件系统类型它有不同的版本。 fsck 必须运行于已缷载的卷上,虽然除非是在文件系统没有缷载完全的时候,否则很少会用到它。
硬件、本地磁盘上的分区
每一个磁盘和分区以及它们的使用情况都被显示出来。点击一个文件系统可以查看详细信息。对于已卸载的分区,可以编辑它的类型,以及格式化它的文件系统。
系统、磁盘和网络文件系统
装载的和卸载的文件系统都在 /etc/fstab 中列出。普通文件系统类型有一个用于创建条目的向导。没有识别出的文件系统类型可以在这里装载和缷载,但是只能手工编辑 /etc/fstab。大多数服务器文件系统在这里都可以很好地处理。
完整的体系是分区的总和
虽然在 Linux 中对分区和文件系统的管理与 Windows 中有很多类似之处,但是从驱动器字母过渡到完全的分层树可能还需要作一些调整。因此,有一些健壮的控制台工具可以使用这些功能及 /etc 目录下的配置文件。Webmin 等基于浏览器的前端提供了一些有用的工具。
什么是 /proc?
/proc 文件系统是 Windows 思想与 Linux 思想不同之处的极好示例。 /proc 存储的是对正在运行的系统各个方面的虚拟描述。在那里有 IRQ 设置、内存使用、加载的设备驱动器、网络状态等很多信息。甚至有一个叫做 /proc/kcore 的文件,是所有用到的系统内存的虚拟描述。这里的每一个文件都可以像普通文件或二进制文件一样解析。可以编写某些文件来改变运行着的内核的行为,而不用重新引导。例如,为打开系统中启用的第一个以太网设备的&nbp;IP 转发,您可以使用一个文件命令:
echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
这种系统的主要好处在于,您只需要使用简单的脚本技术,就可以对您的正在运行的系统进行深入而有效的操作。
为什么都需要加锁?
不要忘记,Linux 不仅是多用户的,而且是多会话的。也就是说几个用户可以同时登录到系统中、运行程序、使用资源。这与 Windows 中的登录后使用共享文件不同。每一个用户都可以像自己坐在控制台前一样使用系统。为了保持稳定,Linux 不允许任意释放当前正在使用的文件系统,通过锁定 CD,在直到没有人再使用之前 CD 不会被弹出。
什么都是文件
在 Linux 中,文件系统由类似于文件的名称来表示。在 /dev 目录下的所有文件都是称为 nodes 的特殊文件,它们通过设备驱动程序链接到物理设备。这就使得您可以做一些有趣的事情。例如,为制作一张 CD 的 ISO 映像,您可以使用 cp (copy) 命令:
cp /dev/cdrecorder MyCD.iso
这样复制的是一个二进制映像而不是 CD 的文件结构。
以文件为中心的方法还允许您可以为设备名称指定有意义的别名。例如,通常有一个叫做 /dev/cdrom 的别名,指向物理 CDROM 设备,而这个设备通常是 /dev/hdc。 一旦创建了别名,您就可以通过 /dev/cdrom 访问那个设备,这样更好记。别名技术还允许您标准化脚本,使这些脚本可以在物理配置不同的系统上使用。
日志节约时间,保全数据
日志文件系统有助于在非正常关闭时保护数据。如果一个卷没有缷载就被关闭,可能还遗留下未完成的工作,以及处于 in-between 状态的文件。在典型的文件系统中,需要对这个卷进行全面的检查,对较大的卷来说这需要比较长的时间。日志文件系统会对磁盘的每一个写操作的事务记录保持一段时间(比如 5 秒)。当这个卷没有被完全地缷载时,文件系统只需要回滚到最后一个已知的正常状态。原来恢复一个卷需要 20 分钟时间,现在只需要几秒!
Windows 到Linux之旅2
Windows 到 Linux 之旅:控制台速成班 Linux 中的所有管理任务都可以在控制台中完成。许多情况下,使用控制台比使用图形化的程序更快捷,而且还可能实现额外的功能。不仅如此,所有的控制台任务都可以写到脚本中,这样就可以自动执行。为了真正地驾驭您的 Linux 环境,您将希望掌握如何在控制台中工作。如果您曾经使用过 DOS/Windows,本文将引导您开始使用 Linux 控制台。
进入控制台
如果您的系统引导进入文本模式(为了降低服务开销,服务器通常是这样配置的),那么您在以文本形式登录后就已经在控制台中了。在典型的 Linux 系统中,通过组合键 Ctrl + Alt + (F1 - F6) 您可以切换到另外的控制台。每一个控制台是系统中一个完全独立的会话,不同的用户可以同时使用。
这一多控制台的特点与 Windows 中的多桌面不同。在 Linux 中,每一个控制台可以分别由完全不同的用户来控制。例如,您可能在控制台 1 中以 root 身份登录,而在控制台 2 中以 joeuser 身份登录。两个控制台在各自的用户空间中运行不同的程序。与此类似,不同的用户可以远程登录到同一个 Windows 系统中。就这一点来说,Linux 更像是主机而不是简单的服务器或工作站。
如果您是在图形模式下,那么您可以打开一个 终端 (terminal) 以进入控制台窗口。通常在桌面的任务条上会有终端的按钮。您也可以从上下文菜单(在桌面上单击右键)打开终端 。
命令
在控制台中可以使用的命令很多。其中有一些实际上只在编写脚本时才会用到。这里介绍一些您最可能用到的命令。不要忘记,所有的命令和选项都区分大小写。-R 与 -r 不同,会去执行不同的操作。控制台命令几乎全都是小写的。
cd
使用我们所熟悉的 cd 命令可以在目录间切换。一定注意的是在 Linux 中用的是正斜杠 (/),而不是您所熟悉的反斜杠 (\)。反斜杠也用到了,但只是用来说明命令需要换行继续,这样可以提高比较长的命令的可读性。
ls
ls 命令用于列出一个目录下的所有文件。可以使用许多不同的开关更改列表的表示形式:
列出文件
ls -l 以长格式列出文件,包括文件大小、日期和时间、属性
ls -t 对文件以时间排序
ls -S 对文件以大小排序
ls -r 与一个排序开关组合起来使用,逆序排列。ls -t 将最新的文件显示在列表的顶部。ls -t将最新的文件显示在底部。
ls -h 易读格式。使用 k、M、G 等来标识文件的大小,而不是以字节为单位。
ls -a 显示目录中所有的文件,包括隐藏文件
cp
使用 cp 命令来复制文件。这个命令与 DOS 下的 copy 命令基本一样。基本的开关如下:
复制文件
cp -R 递归地复制文件;当需要复制整个目录时会用到
cp -f 强制复制并覆盖已有的文件,不询问用户
cp -l 链接文件,而不是复制;见下面的说明
使用复制命令创建链接
用 cp 命令可以创建指向一个文件或者整个文件结构的硬链接。使用 -l 开关来指明操作是链接复制。所有的目录仍作为目录创建,但所有的文件会被设置为硬链接。
cp -lR /data/accounting/payroll /data/management/hr
上面的命令将把整个目录结构及其下面的文件从 /data/accounting/payroll 复制到 /data/management/hr/payroll。目录结构下的所有文件将被设置为硬链接。这样使一个文件在同一个文件系统中可以具备不同的视图。这也是有用的安全技术,使得在不同的目录下对同一文件有不同的访问权限。
mv
使用 mv 命令来移动和重命名文件。这个命令的工作方式基本上与 DOS 中的 move 命令一样,不过它可以移动整个目录结构及所有文件。
cat
使用 cat 命令来查看文件的内容。它相当于 DOS 中的 type 命令。它将把文件的内容转储到另一个文件、屏幕或者其他命令。cat 是concatenate 的简写,还可以将一系列的文件合并为一个大文件。
more
使用命令 more 可以以分页的方式查看文件。它基本上与 DOS 中的 more 命令相同。
less
less 命令也是用来查看文件,但是它支持上下滚屏以及在文档中进行文本搜索。
vi
有一些人可能会说 vi 表示“virtually impossible”。它是 Unix 中的一个历史悠久的文本编辑器。vi 并不真正直观,但是现在几乎所有的类 Unix 环境中都有 vi。对于 Linux 中安装的版本有一个内置的教程,一旦您熟悉了 vi,只需几次击键就可以完成不可思议的任务。说实话,有任何编辑器能够取代 vi 来编辑密码和配置文件。
man
使用 man 命令来查看命令的文档。man 是 manual 的缩写。几乎每一个命令都有相应的文档。要深入了解 man,请输入以下命令:
man man
info
info 命令与 man 命令类似,不过它提供了超链接文本,可以更方便地浏览文档。
哪个 shell?
DOS/Windows 与 Linux 的最重要的区别之一是 Linux 的命令 shell 是与操作系统相分离的一层。不同的 shell 环境影响您具备不同的功能,比如可编辑的命令行和历史命令回查等。shell 还决定了脚本中函数的语法。在 DOS/Windows 中,编写脚本程序只有一种情况,那就是使用效率低下的 .BAT 文件。它的确可以完成很多功能,但除了完成那些基本的任务,复杂些的任务就需要脚本编写者具有极强的创造性。在 Linux 中,脚本中可以有循环,不仅可以执行基本的条件语句,很多在编程语言中才有的功能它都具备。如果您擅长编写 .BAT 文件,那么 shell 脚本更会使您大展才华。
默认的 shell 是每个用户帐号的一个参数。Linux 中典型的默认 shell 是 /bin/bash,不过也可以用其他的 shell。每个 shell 的 man 文档实际上都非常好,都对各种 shell 及其使用进行了详细的说明。仅仅阅读下面的解释是不够的,应该从下面列出的 shell 中选择一个,去查看它的 man 文档。
bash
bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,包括许多附加的特点。Bash 有可编辑的命令行,可以回查历史命令,支持 tab 键补齐以使用户避免输入长的文件名。
csh
C shell 使用的是“类C”语法,借鉴了 Bourne shell 的许多特点,只是内部 shell 命令集有所不同。
ksh
Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。许多安装脚本都使用 ksh,即使您不把它作为您的主 shell,您也应该在系统中安装它。
tcsh
TC shell 是 C shell 的一个增强版本,与 C shell 完全兼容。
zsh
Z shell 是 Korn shell 的一个增强版本,具备 bash shell 的许多特色。
Shell 规则
您只需在控制台中执行相应的命令就可以随时切换 shell。只要在文件顶部放置一个井号 (#!) 指向需要的 shell,脚本就可以指定想要运行的 shell。当脚本运行的时候,不管用户所处的 shell 环境是什么,它都会在正确的 shell 环境中运行。下面例子中的这行代码指出脚本需要在 C shell 下运行:
#!/bin/csh
给我做链接,这样就更安全!
Linux 文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。不过,在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本。有两种类型的链接:硬链接和符号链接。
硬链接:只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。
符号链接:是一个指针,指向文件在文件系统中的位置。符号链接可以跨文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。
两种链接都可以通过命令 ln
# Create a hard link from MyFile in the current
# directory to /YourDir/MyFile
ln MyFile /YourDir
# Create a symbolic (soft) link from MyFile in
# the current directory to /YourDir/YourFile
ln -s MyFile /YourDir/Yourfile
在上面的例子中,MyFile、/YourDir/MyFile 和 /YourDir/Yourfile 会被看成是同一个文件。
走出您的 shell
对 Linux 管理来说,必须学习在控制台环境下工作。虽然有一些工具可以让您避免使用控制台,但是您会受到那些工具的很多限制。进入控制台很简单,使用 man 和 info 命令访问命令文档也很方便。
Windows 到 Linux 之旅:用户管理 Linux 中的用户管理与 Windows 中的用户管理很相似,但又很不相同。两个系统都是多用户系统,基于用户身份来控制他们对资源的访问。两个操作系统都允许将用户分组管理以简化访问控制,以避免为众多用户分别设置权限。不过,相同之处也仅此而已。
超级用户
在 Linux 中,超级用户称为 root。root 用户可以控制所有的程序,访问所有文件,使用系统上的所有功能。对 root 用户来说没有不可以做的事情。就管理的角度而言,root 的权限是至高无上的。所以,root 帐号一定要通过安全的密码保护起来,这一点非常重要。您不应该使用 root 身份来处理日常的事务。
其他用户也可以被赋予 root 特权,但一定要谨慎行事。通常您可以配置一些特定的程序由某些用户以 root 身份去运行,而不必赋予他们 root 权限。
创建新用户
可以通过命令行或者 Webmin 等工具来创建新用户。
添加用户的命令是 useradd。例如,从控制台中创建一个新用户:
useradd -c "normal user" -d /home/userid -g users\
-G webadm,helpdesk -s\ /bin/bash userid
这个命令创建了一个名为“userid”(命令的最后一个参数)的新用户。“normal user”是对这个用户的注释。userid 的主目录将是“/home/userid”。userid 的主组将是 users,但他也被加入到“webadm”和“helpdesk”这两个组。userid 将使用“/bin/bash”shell 作为他的常规控制台环境。
修改密码
可以从控制台使用 passwd 命令来修改用户的密码:
passwd userid
只有 root 用户可以用 passwd 修改其他用户的密码。输入完命令后,系统将提示您输入并确认您要设置的密码。如果两次输入一致,用户的标识就会更新,密码修改成功。从控制台输入 passwd,用户可以修改自己的密码;在这种情况下,系统会向用户询问原来的密码,验证通过后才可以输入新密码。
大多数的 Linux 发行版本安装时都会启用 password cracker 模块,用于修改密码。这个模块将检查密码是否遵循了良好的密码设置习惯。如果用户使用了不安全的密码,它将自动警告用户。您可以将系统配置为要求用户必须使用安全的密码。root 在设置不安全的密码时也会被警告,但是仍然可以设置成功。
删除用户
可以从控制台使用 userdel 命令来删除用户。
userdel -r userid
使用可选的 -r 开关可以将用户的主目录及所有相关信息全部删除。如果想要保留用户主目录,那么不要使用 -r 开关。这个开关不会自动删除系统中所有属于这个用户的文件,只是删除他的主目录。
如何组织用户
Linux 的配置是基于文本的。Linux 中的所有用户都存放于 /etc/passwd 文件中。您可以使用 more 命令来分页查看这个文件:
&nsp; more /etc/passwd
这个文件的结构非常直观。每一行是一个新用户,参数用冒号隔开。
userid:x:75000:75000::/home/userid:/bin/bash
第一列是用户名。第二列是用户的密码。第三列是用户的数字 ID。第四列是用户的主组的 ID。第五列是用户的全名,或者是注释。第六列是用户主目录的位置,这个目录通常位于 /home 目录下,目录名与用户 ID 相同。第七列是用户的默认控制台 shell。
Password 文件结构
Login ID: Password:User ID:Group ID:Comment:Home directory: Default shell
userid:x:75000:75000:/home/userid:/bin/bash
注意上面的例子中 Password 列是一个“x”。这并不是说用户的密码是“x”。以前密码曾经是以平文本的形式存储在这个文件中。现在也还有这样的配置,但由于密码容易泄露,已经很少有人再这样做了。解决的方法是创建 shadow password。在 /etc/passwd 文件中存放密码的位置只是存放一个“x”,而经过加密的密码存放于 /etc/shadow 文件中。这项技术通过将用户信息与密码数据分离而提高了安全性。MD5 密码加密算法支持更为可靠的密码,从而进一步提高了安全性。一个映像密码条目的样例如下所示:
userid:$1$z2NXZR19$PZpyL84DmPKBXMeURaXXM.:12138:0:186:7:::
所有的映像密码过程都是在后台进行,您只需要启用这项功能,别的什么都不用去做。
组
Linux 中的组与 Windows 中的组很类似。您可以创建一个组,然后将成员添加到这个组的列表中。可以以组为单位来分配资源。隶属于同一个组的成员可以访问同一资源。
使用控制台命令 groupadd 创建组很简单:
groupadd mygroup
这将创建一个名为“newgroup”的没有任何成员的组。组存放于 /etc/group 文件中。每一个组由单独的一行列出,如下所示:
mygroup:x:527:
第一列是组的名字。第二列是一个密码。同样,“x”说明真正的密码存放在 /etc/gshadow 映像文件中。第三列是组的一个数字索引。在第三列之后将是以逗号隔开的组的成员的用户 ID。
可以使用 gpasswd 命令向组中添加成员,要使用 -a 开关,后面跟要添加的用户名:
gpasswd -a userid mygroup
删除组的成员还是使用这个命令,不过使用的开关是 -d 而不是 -a:
gpasswd -d userid mygroup
也可以通过直接编辑 /etc/group 文件来对组进行修改。
用户和组的关联
虽然在这里我们不能详尽地论述访问控制,不过您应该对用户和组对文件的访问权限有初步的了解。如果您以长格式列出一个目录下的文件,您看到的将如下显示。
-rw-r--r-- 1 userid mygroup 703 Jun 23 22:12 myfile
现在暂时忽略其他的列,只去看第三、四和最后一列。第三列是文件主人的名字,userid。第四列是关联到这个文件的组,mygroup。最后一列是文件名。每个文件只能属于一个主人和一个组。可以为不能归于这两类的其他用户 (Other)设置权限。可以认为 Other 相当于 Windows 中的 Everyone 组。
一个文件只能属于一个主人,这在操作系统中很常见,但是,文件只能属于一个组,初次使用这一规则的管理员可能会觉得受到了限制。事实并不如此。由于用户可以同时是多个组的成员,所以只需要创建新的组就可以安全使用资源。在 Linux 中,往往是基于所需要的资源访问权限而不是根据业务单位来定义组。如果系统的资源逻辑上是有组织的,那么可以创建更多的组来更好地控制对资源的访问。
结束语
在 Linux 中管理用户和组的方式与 Windows 中本质上是相同的,但是 Linux 中只能有惟一的组可以关联到一个系统资源。应该这样认识 Linux 中的组管理:不要吝惜对组的使用,在复杂的环境中,不要害怕创建很多组。应该根据资源访问权限而不是基于业务单位去创建组。
用户和组信息分别存储在 /etc/passwd 文件和 /etc/group 文件中。您的系统可能还会有 /etc/shadow 和 /etc/gshadow 文件,它们存储的是为了安全而经过加密的密码。直接编辑这些文件来管理用户和组不是不可以,但您一定要谨慎行事。
所有的用户和组的管理都可以在控制台中完成,可以写成脚本。也可以使用 Webmin 等工具以图形化的方式管理用户和组。
/etc 目录
不要忘记,Linux 的大多数配置文件都是在 /etc 目录下。
映像密码和用户权限
Linux 用户管理的特点之一在于它沿袭了 UNIX 风格,使用 passwd 文件。登录的用户必须可以读取 /etc/passwd 文件,以判断他的用户名是否存在。如果将用户名和密码存放在同一个文件中,潜在的攻击者就可能获得密码;他们可以下载 /etc/passwd 文件,然后以暴力破解的方法获得密码。映像文件不必所有人都可读,这样攻击者将不能获得任何形式的密码。
这种方法还是不最好的,因为攻击还是可以得到 一些 用户信息。更好的方法是将用户保存于一个单独的地方,比如使用 LDAP。
编辑 passwd 文件时要当心
直接编辑 /etc/passwd 文件和 /etc/group 文件的真正危险在于有可能偶然失误而造成 ID 编号的重复。所有的资源都通过 ID 编号而不是用户或组的名字来确定用户的身份。如果您不小心造成了 ID 编号的重复,那么可能会有一些意想不到的事情发生。例如,如果您将一个用户的 ID 编号设置为 0 (root 用户的 ID),那个用户的身份将是 root!。另外,如果您在文件中删除了用户行或者组行,那么对应的用户或组也就被删掉了。
这些都是人为的错误。使用工具可以避免这些错误。不过,有时直接去编辑 /etc/group 文件是解决问题最快捷的途径。您一定要记住,当您在编辑那些文件时,您管理的是实际的权力。一定要小心。