在曹操迎接汉献帝到许以前,曹操和袁绍分别在黄河南北发展自己的势力,双方还一直保持着友好的关系。但随着双方势力的扩张,利害冲突也跟踪而来。曹操打着“天子”招牌,操纵封赏大权,自为大将军,以袁绍为太尉。袁绍素来骄贵,声望和地位一向在曹操之上,这时,绍耻班在曹操下,怒曰:“曹操当死数矣,我辄救存之,今乃背恩,挟天子以令我乎!”不旨接受太尉官职。由于袁绍势力很大,曹操不得不把大将军让给他,而自为司空、行车骑将军。
建安三年(198年)十二月曹操擒杀吕布,取得徐州,次年三月,袁绍削灭公孙瓒,兼并幽州,于是袁、曹两大势力之间的对立显得更加突出,便不能不以战争相见了。
就地广、兵多、粮足各方面而论,袁绍都胜过曹操。曹操所占领的兗、豫、徐三州,都是残破之余。袁绍所统辖的冀、青、幽、并四州,则受战争破坏较少,比较富实。再就四周形势来说,袁绍所控制的地区,西界黄河,东临大海,北面的乌桓素受袁绍笼络。曹操则南有刘表,东南有孙策。关中将帅韩遂、马腾等都拥强兵,徘徊观望于袁曹二者之间。
客观形势是利于袁绍而不利于曹操的。
建安四年(199年)三月,袁绍灭公孙瓒之后,挑选步兵十万,骑兵一万,准备进攻许都。当时谋臣沮授向袁绍建议利用优越的人力,物力与地理形势,对曹操进行持久战以消耗其军事实力。“进屯黎阳,渐营河南”,从正面稳扎稳打;同时“分遣骑兵,抄其边境,令彼不得安,我取其逸。”这样就可十全必克,而不必决胜负于一役。可是袁绍不能用。
曹操针对当时情况,采取了一系列措施。首先进取河内,河内地区北靠太行山,南临黄河,占有了它,不仅可以阻挡袁绍在并州东南地区的军队东下,而且可以有效地阻止袁绍大军从东沿河西上。建安四年(199年)八月,曹操派遣原泰山将帅臧霸等带领精兵回到青州,利用他们在当地原有的影响进行活动,以牵制袁绍在青州方面的军队,使之不能西上增援。十一月,曹操又舍弃杀子之仇,把正在被袁绍招诱的张绣争取过来。这时,关中诸将见袁曹将要战争,皆中立观望,曹操使卫觊前往关中协助司隶校尉钟繇安抚韩遂、马腾等,使其不致为患。并开始派遣谒者仆射到关中监盐官,以市盐钱购买耕牛,供回到生产线上的农民使用,这对于安定关中社会秩序也起了一定的作用。这样,曹操就把一些不利因素转变为有利因素。后来曹操从关中获得一千余匹军马,弥补了一部分骑兵不足的缺陷。张绣在与袁绍作战中,亦“力战有功”。
曹操在做了以上部署以后,于建安四年(199年)年底,亲自率领大军进驻重要战略要地——官渡(今河南中牟北)。就在这时,发生了一件对曹操不利的事,就是刘备在徐州的叛变。刘备自投归曹操后,操给他一个豫州牧的名义,一同驻在许都。这时,淮南军阀袁术由于屡吃败仗,力穷势窘,打算经过徐州北上投奔袁绍,曹操派刘备前往截击,袁术被阻南归,刘备占据徐州叛操,并与袁绍联合。曹操派将前往击备,未能取胜。操留下部分兵力把守官渡,自己率领精锐骑兵前往击备。诸将恐袁绍乘机进攻,操曰:“刘备,人杰也,今不击,必为后患。袁绍虽有大志,而见事迟,必不动也。”遂东行,很快就击溃了刘备的军队,迫使刘备连妻子都扔掉,仓皇北上投奔袁绍。刘备手下亲信大将关羽,也被操俘获。操再回到官渡,前后还不到一个月的工夫。
曹操东征刘备,给袁绍造成的可乘之机,在袁绍集团中,并不是没有人看到。袁绍的谋臣田丰就曾经劝他抓住这个战机,袭取许都,但绍却以幼子患病的理由不肯出击,田丰急得用手杖击地说:“遭难遇之机,而以婴儿之病失其会,惜哉!”
袁绍在曹操进攻刘备时,不采取积极的行动,但当曹操打垮了刘备,回军官渡后,他却召集部属商议出兵的问题。田丰重申沮授前议,说:“操善用兵,变化无方,众虽少,未可轻也,不如以久持之。将军据山河之固,拥四州之众,外结英雄,内修农战,然后简其精锐,分为奇兵,乘虚迭出,以扰河南,救右则击其左,救左则击其右,使敌疲于奔命,民不得安业;我未劳而彼已困,不及二年,可坐克也。今释庙胜之策,而决成败于一战,若不如志,悔无及也。”袁绍对田丰的意见,不但不听,反而认为“沮众”,把他囚禁起来。沮授原来在袁绍幕府中是内为谋主,外监诸将的首要人物,这次也因谏阻出兵,违背了袁绍的意旨,郭图等人又乘机进谗,说沮授权势太大,继续重用下去,会无法控制,引起了袁绍对沮授的怀疑,终于把沮授统率的军队分为三部分,让他和郭图、淳于琼各统一军,这就大大削减了沮授的职权。
袁绍集团就在这种意见不一,矛盾重重的情况下,出动大军南下进攻曹操了。
建安五年(200年)正月,袁绍首先向各州郡发布了一篇讨伐曹操的檄文。二月,袁绍亲自率领大军由邺城南下,进驻黎阳。
袁绍向曹操进攻的第一步棋,就是派遣骁将颜良渡过黄河进攻白马(今河南滑县东),以便为主力渡河打下前进基地。曹操是要救援白马的,但所使用的战略,并不是派军直奔白马,而是声东击西,分散袁军兵力。曹操首先引兵到延津,装出要渡河抄袭袁军后路的样子。袁绍忙分兵西上进行邀击,曹操则率领轻骑迅速驰往白马。在曹军离白马只有十几里的时候,颜良才发觉,仓猝应战。曹操令张辽、关羽为先锋,关羽望见颜良麾盖,迅速冲进敌阵,刺死颜良,袁军失去主将,登时溃散,于是曹军胜利解救了白马之围。
曹操深知白马孤城在袁绍优势兵力的压迫下,终究不能坚守,乃向官渡进行战略转移,令白马居民和辎重一齐跟随军队沿黄河南岸向西撤退。
袁绍凭仗兵多势众,率领大军继续推进,沮授再次向袁绍进谏,劝他不可轻率冒进。袁绍不但不听,还把沮授仅余的部分军队交由郭图带领。
袁军先头部队在离延津不远的地方,赶上了曹军。这时,曹操令部队停止后撤,在南山下扎好营垒,派人登高瞭望。瞭望者报告袁军大约有五、六百骑来到。接着又报敌骑续有增加,步兵多得不可胜数。操吩咐不要再报告了,他要骑兵解鞍放马,休息待命。这时,从白马撤出的辎重还在路上,诸将担心敌骑掳掠,建议连人马带辎重一齐进入营垒。荀攸认为现在正是利用辎重引诱敌人的时候,怎能移进营内呢!胸有成竹的曹操对荀攸的意见,点头表示赞同,脸上不禁发出会心的微笑。
袁绍骑将文丑和刘备带领五、六千骑先后到来。诸将催请曹操赶紧上马迎战。操不动,过了一会儿,袁军骑兵到来,见路上有那样多的辎重,分外眼红,争先恐后地去抢劫,因而队伍大乱,操乘隙下令冲击,这时操身边骑兵不满六百人,但他们是以逸击劳,故能一举击杀文丑。文丑和颜良都是袁军名将,经过两次战役便被斩杀,大大提高了曹军的士气。
曹操在初战胜利之后,仍旧按照原定计划,退到官渡,集中兵力,筑垒固守。这样,既免遭敌人包抄,又缩短了军粮供应线。也使得袁军远离后方,给自己以更多伺隙出击的机会。
袁绍尽管两次受挫,但凭仗其兵多势众,仍旧推进至阳武(今河南原阳东南)。八月,袁军进临官渡,于是关系袁曹成败的官渡之战进入了决战阶段。然而,从史料上看,这个阶段的战争情况是含糊不清的,如《三国志》卷1《武帝纪》载:
八月,绍连营稍前,依沙塠为屯,东西数十里。公亦分营与相当,合战不利。时公兵不满万,伤者十二三。绍复进临官渡,起土山地道。公亦于内作之,以相应。绍射营中,矢如雨下,行者皆蒙楯,众大惧。时公粮少,与荀彧书,议欲还许。彧以为:“绍悉众聚官渡,欲与公决胜败。公以至弱当至强,若不能制,必为所乘,是天下之大机也。且绍,布衣之雄耳,能聚人而不能用。夫以公之神武明哲,而辅以大顺,何向而不济!”公从之。
所谓“合战不利”,虽然不能说是打了败仗,至少也是受到挫折。史书上关于官渡战役的描述,多来自曹魏官方,讳败夸胜,自为情所难免。从以上叙述可知,两军相持,曹守袁攻,曹军虽然焚过袁军的运粮车,但曹军乏食的情况仍较袁军严重。操非暗于军事者,犹欲知难而退,退保许都,从知曹军缺粮情况实为严重。而曹操集团在军事上亦必有隐讳败衂之事,惜后人已无从知晓当时真相了。
在袁曹两军半年多的敌对中,袁绍未能取胜,曹操更陷于窘境,百姓困于役赋,反抗事件不断发生。汝南郡是袁绍的老家,袁氏门生故吏遍布境内,他们大都拥有武装,乘机起兵反操,遥为袁绍声援,刘备也一再领兵到汝南,骚扰曹操后方。袁绍还多次派出小股军队抄掠曹军的粮食供应线。这些都给曹操造成了很大的困难,迫使曹操一度考虑退守许都。经过荀彧谏阻,操始决定在官渡与袁绍周旋到底。他派遣曹仁带兵到汝南把刘备赶走,镇压了地方反抗势力,稳定了后方。
曹操除了采取严密措施,以足够的武装卫护粮食运输外,也十分注意用劫粮的办法制服袁军。恰好这时侦察到袁绍部将韩猛押运粮车数千辆来到官渡北面几十里的故市(今河南延津)。操知韩猛有勇无谋,乃派得力将领徐晃、史涣前往截击,把韩猛押送的粮谷全部烧掉。十月,袁绍大将淳于琼等率兵万余,押送大队粮车,停在离袁绍大营北面四十里的乌巢(今河南延津东南)。沮授为了确保这支运粮部队的安全,向绍建议派一支军队协助守卫,以防曹操再次抄袭。可是,袁绍认为没有必要。
这时,谋士许攸向绍献策:曹操兵少,其主力部队都集中在这里,许都防务必然空虚。可遣精骑前往偷袭,操失许都,进退狼狈,必然不能再战。绍不从,一定要先攻下操营。恰好这时许攸家人在邺犯法,被留守审配收治,攸既因此怀恨,又嫌绍无能,乃转而投奔曹操。据《三国志》卷1《武帝纪》注引《曹瞒传》曰:
公闻攸来,跣出迎之,抚掌笑曰:“子远,卿来,吾事济矣!”既入坐,谓公曰:“袁氏军盛,何以待之?今有几粮乎?”公曰:“尚可支一岁。”攸曰:“无是,更言之!”又曰:“可支半岁。”攸曰:“足下不欲破袁氏邪?何言之不实也!”公曰:“向言戏之耳。其实可一月,为之奈何?”攸曰:“公孤军独守,外无救援而粮谷已尽,此危急之日也。今袁氏辎重有万余乘,在故市、乌巢,屯军无严备;今以轻兵袭之,不意而至,燔其积聚,不过三日,袁氏自败也。”
以上即许攸给曹操献的乌巢劫粮之计,操与亲信商议,诸谋士对许攸的话半信半疑,只有荀攸、贾诩劝操采纳。于是操断然采取行动,留下曹洪和荀攸守住大营,亲自率领步骑五千,趁朦胧的月色,从小道直趋乌巢。操军打着袁军旗帜,每个士兵带上一捆干柴,嘴啣枚,马缚口,路上遇人盘问,答以袁公怕曹操抄袭我军后路,特地前往加强戒备。这样,顺利地到达了乌巢。曹军在袁军屯地周围点燃干柴,大火顿时燃烧起来。袁军从梦中惊醒,只见大火熊熊,喊杀之声,震耳欲聋,于是惊惶失措,乱作一团。至拂晓,淳于琼等见曹军兵少,又产生轻敌情绪,出营迎战,操不待其摆好阵势,即挥军急击,琼等抵挡不住,退回营中。
袁绍听说操往袭乌巢,并不赶紧派兵救援,还对其子谭说:“即使曹操攻破淳于琼等,我攻下其大营,他就无处措身了”。于是命高览、张郃等加紧攻营。张郃建言:“曹操兵精,往必破琼等;琼等破,则将军事去矣,宜急引兵救之。”可是袁绍只遣少量骑兵往救琼,而以全力进攻曹营。曹营坚固,屹立不动。
当操正激励士卒攻打淳于琼等的时候,传来了袁绍援军将到的消息,有人劝操分兵拒敌。操以为兵分势弱,后顶不住援军,前攻不下敌营,必致两头败衄,于是令士卒拼命进攻琼等,一举破之,除杀琼等外,还烧掉袁军全部存粮。及袁绍援军到来,乌巢已经失守,援军也就不战而溃了。
乌巢粮谷被烧的消息传到官渡,袁军登时土崩瓦解,张郃、高览烧毁攻具,率部降操,其他将士,也不再听从袁绍指挥,纷纷逃命。袁绍、袁谭父子率领仅存的八百骑兵渡过黄河,逃回冀州。袁军的辎重、图书、珍宝都成了曹操的战利品,来不及逃跑的袁军多向操投降。
经过这次战役,袁绍的主力部队基本被消灭,曹操的军事力量大大增强,为日后统一北方奠定了牢靠的军事基础。