建安四年(199年)十二月,曹操自率军屯于官渡(今中牟北),准备迎击袁绍。
官渡之战
官渡之战 [22]
刘备在陶谦死后,曾一度出任徐州牧,后徐州被吕布攻占,刘备投奔曹操。曹操认为刘备是个英雄,先后表他为豫州牧、左将军。曹操攻占徐州不久,淮南袁术准备逃往青州往依袁绍,曹操派刘备去截击,袁术北上不得,呕血而死。
建安五年(200年)正月,董承等人谋诛曹操事泄,被曹操杀掉。刘备于是袭杀徐州刺史车胄,占据徐州。
“刘备以徐州叛 [23]”。因此,曹操决定东征刘备。 [23]诸将皆说:“与公争天下者,袁绍也。今绍方来而弃之东,绍乘人后,若何?”。曹操说:“刘备,人杰也,今不击,必有后患。袁绍虽有大志,而见事迟,必不动也。”遂进军,以迅雷不及掩耳之势击破刘备,刘备逃奔袁绍。
袁绍是当时北方最强大的一股势力,也是曹操统一北方最强大的敌人。袁氏一门,自袁绍曾祖袁安以下,“四世居三公位”,“门生故吏遍于天下”,势力本就很大,后袁绍取得冀、并、幽、青四州之地,实力大增,有军队数十万人。袁绍以其长子袁谭、次子袁熙、外甥高干分守青、幽、并三州,后方稳固,兵精粮足,根本不把曹操放在眼里。他挑选精兵十万、战马万匹,志在一举消灭曹操。
建安五年(200年),袁绍命大将颜良等人进兵白马(今滑县),自率大军进屯黎阳(今浚县东),向曹操发动进攻。曹操的实力比袁绍弱得多 [24],曹操所占的大河以南地区,地盘既小,又是四战之地,残破不堪,还没有完全恢复,物资比不上袁绍那样丰富。曹操的兵力也远不及袁绍,其总兵力大概不过几万人,投入前线的兵力据《武帝纪》说“兵不满万,伤者十二三”。裴松之认为此数不准确,曹操的兵力不会如此之少,但曹操兵力远逊于袁绍却是毫无疑问的。 [25]
袁绍大军来攻,许都震动。曹操安慰众将说:“吾知绍之为人,志大而智小,色厉而胆薄,忌克而少威,兵多而分画不明,将骄而众令不一,土地虽广,粮食虽丰,适足以为我奉也。”
二月,袁绍大将颜良等人围攻白马,拉开了大战的序幕。四月,曹操亲自率兵北上解白马之围,他采纳谋士荀攸之计,先进军延津(今延津北一带),做出要渡河袭击袁军的态势,吸引袁军分兵西向,然后突然转向迅速赶往白马。曹操军突然杀到,袁军措手不及,颜良被关羽斩首 [26],袁军大败,白马之围遂解。曹操救出白马军民,沿黄河西撤。袁绍闻知,立即命文丑、刘备渡河追赶曹操。曹操见追兵渐近,命军士解鞍放马,并置辎重于道。袁军追兵大至,争抢辎重,阵形混乱。曹操率领仅有的骑兵突然杀出,大破追兵,阵斩文丑。袁军大震。曹操初战得胜,主动撤军,继续扼守官渡。
八月,袁绍大军连营而进,东西数十里,依沙堆为屯,进逼官渡。曹操分兵坚守营垒,伺机而动。袁军向曹营发动猛攻,先是作高橹、起土山,由上向曹营中射箭,接着又挖地道,欲从地下袭击曹营,皆被曹操以设投石机、挖掘沟壑之法破解。两军一攻一守,相持近二个月。久战之下,曹操处境极为困难。
客观条件上,曹操处于劣势,但由于他能正确分析客观条件,善于听取别人的正确意见,所以能扬长避短,采用正确的战略战术,使战争向有利于自己的方面转化,经过自己主观上的努力,终于赢得了胜利。官渡之战,曹操击溃了最大的敌人袁绍,由他统一北方已是大势所趋。官渡之战也是中国战争史上以少胜多、以弱胜强的著名战例。
远征乌桓
建安七年(202年),袁绍病死,袁绍的两个儿子袁谭、袁尚不和,发生火拼。袁谭不敌袁尚,向曹操乞降。
建安九年(204年)二月,曹操乘袁尚出兵攻打袁谭之机,进军围攻邺城(今河北邯郸临漳西一带)。袁尚率军回救,依滏水(今滏阳河)为营,曹操进军将其营寨包围。袁尚害怕,请求投降,曹操不许。袁尚乘夜逃跑,袁军溃散。袁尚逃奔中山(今河北定县)。曹操命人拿着缴获袁尚的印绶节钺招降邺城守军,城中斗志崩溃。邺城遂被曹操攻破。从这一年起,曹操把自己的据点北迁到了冀州邺城 [28],政令军队此后皆从此出,而汉献帝的都城许县则只留些许官吏。
建安十年(205年)正月,曹操又以负约为名,攻灭袁谭,冀、青二州平定。于是,曹操上表让还兖州牧,改任冀州牧。袁尚兵败后,逃奔幽州刺史袁熙。不久,袁尚、袁熙又逃奔三郡乌桓。同年,黑山军首领张燕率领其部众十余万人投降曹操。 [29]
建安十一年(206年),曹操攻灭高干,平定并州。
建安十二年(207年),曹操为了肃清袁氏残余势力,也为了彻底解决三郡乌桓入塞为害问题,决定远征乌桓。汉末,辽西、辽东、右北平三郡乌桓结合,是为三郡乌桓,其首领为辽西部的蹋顿。三郡乌桓与袁氏关系一直很好,并屡次侵扰边境,掳掠人口财物。