曹操的兵力也遠不及袁紹,其總兵力大概不過幾萬人,投入前線的兵力據《武帝紀》“兵不滿萬,傷者十二三”。
裴松之認為此數不準確,曹操的兵力不會如此之少,但曹操兵力遠遜于袁紹卻是毫無疑問的。
袁紹大軍來攻,許都震動。曹操安慰眾將:“吾知紹之為人,志大而智,色厲而膽薄,忌克而少威,兵多而分畫不明,將驕而眾令不一,土地雖廣,糧食雖豐,適足以為我奉也。”
二月,袁紹大將顏良等人圍攻白馬,拉開了大戰的序幕。
四月,曹操親自率兵北上解白馬之圍,他采納謀士荀攸之計,先進軍延津(今河南延津北,白馬以西),做出要渡河襲擊袁軍的態勢,吸引袁軍分兵西向,然后突然轉向迅速趕往白馬。
曹操軍突然殺到,袁軍措手不及,顏良被關羽斬首,袁軍大敗,白馬之圍遂解。
曹操救出白馬軍民,沿黃河西撤。
袁紹聞知,立即命文丑、劉備渡河追趕曹操。
曹操見追兵漸近,命軍士解鞍放馬,并置輜重于道。袁軍追兵大至,爭搶輜重,陣形混亂。
曹操率領僅有的騎兵突然殺出,大破追兵,陣斬文丑。袁軍大震。曹操初戰得勝,主動撤軍,繼續扼守官渡。
八月,袁紹大軍連營而進,東西數十里,依沙堆為屯,進逼官渡。曹操分兵堅守營壘,伺機而動。
袁軍向曹營發動猛攻,先是作高櫓、起土山,由上向曹營中射箭,接著又挖地道,欲從地下襲擊曹營,皆被曹操以設投石機、挖掘溝壑之法破解。
兩軍一攻一守,相持近二個月。久戰之下,曹操處境極為困難。
十月,袁紹從河北運來糧草萬余車,派大將淳于瓊等帶萬余人看守,屯于離袁紹大營四十里的烏巢。
這時袁紹謀士許攸因向袁紹獻偷襲許都之計不成,且在河北的家眷犯法被抓,心生悔恨,而來投曹操,獻計讓曹操偷襲烏巢。
曹操大喜,跣足出迎,之后親率精銳步騎五千人,軍隊人銜枚,馬勒口,換袁軍軍裝乘夜從路偷襲烏巢。
曹操軍至烏巢,命四面放火,袁軍大亂,淳于瓊拒營死守。
袁紹聞知,急忙派兵救援,曹操左右見“賊騎稍近,請分兵拒之。”曹操大怒:“賊在背后,乃白!”
士卒都拼死力戰,因此大破袁軍,斬淳于瓊等,盡燔其糧草。
而當袁紹聽曹操襲擊烏巢時,認為這正是攻破曹操大營的好機會,因此派去的援兵很少,而以重兵圍攻曹操大營。
由于曹操預留兵力精且多,曹營未破,烏巢敗訊已經傳來,大將張郃、高覽等人率部投降曹操,袁軍潰散。袁紹棄軍逃回黃河以北。
曹軍大獲全勝,斬首七萬余級,盡獲袁軍輜重圖書珍寶。
曹操清袁紹書信,得到自己部下勾結袁紹的信,盡燒之,:“當紹之強,孤猶不能自保,而況眾人乎!”
客觀條件上,曹操處于劣勢,但由于他能正確分析客觀條件,善于聽取別人的正確意見,所以能揚長避短,采用正確的戰略戰術,使戰爭向有利于自己的方面轉化,經過自己主觀上的努力,終于贏得了勝利。
官渡之戰,曹操擊潰了最大的敵人袁紹,由他統一北方已是大勢所趨。官渡之戰也是中國戰爭史上以少勝多、以弱勝強的著名戰例。
公元0年(建安七年),袁紹病死,袁紹的兩個兒子袁譚、袁尚不和,發生火拼。袁譚不敵袁尚,向曹操乞降。
公元04年(建安九年)二月,曹操乘袁尚出兵攻打袁譚之機,進軍圍攻鄴城(今河北臨漳西,河南安陽北)。袁尚率軍回救,依滏水(今滏陽河)為營,曹操進軍將其營寨包圍。
袁尚害怕,請求投降,曹操不許。袁尚乘夜逃跑,袁軍潰散。
袁尚逃奔中山(今河北定縣)。曹操命人拿著繳獲袁尚的印綬節鉞招降鄴城守軍,城中斗志崩潰。鄴城遂被曹操攻破。
從這一年起,曹操把自己的據北遷到了冀州鄴城,政令軍隊此后皆從此出,而漢獻帝的都城許縣則只留些許官吏。
公元05年(建安十年)正月,曹操又以負約為名,攻滅袁譚,冀、青二州平定。
于是,曹操上表讓還兗州牧,改任冀州牧。袁尚兵敗后,逃奔幽州刺史袁熙。不久,袁尚、袁熙又逃奔三郡烏桓。
公元06年(建安十一年),曹操攻滅高干,平定并州。
公元07年(建安十二年),曹操為了肅清袁氏殘余勢力,也為了徹底解決三郡烏桓入塞為害問題,決定遠征烏桓。
漢末,遼西、遼東、右北平三郡烏桓結合,是為三郡烏桓,其首領為遼西部的蹋頓。
三郡烏桓與袁氏關系一直很好,并屢次侵擾邊境,擄掠人口財物。
這年五月,曹操親率大軍到達無終(今薊縣)。
時正雨季,道路積水,“淺不通車馬,深不載舟船”。曹操從無終人田疇之議,改從一條久已斷絕,但“尚有微徑可尋”的路線進軍。
在田疇的引導下,曹操大軍登徐無山(今河北玉田北),出盧龍塞(今河北喜峰口附近),“塹山堙谷五百余里”,直指烏桓老巢柳城(今遼寧朝陽南)。
八月,曹軍進至離柳城不足二百里時,烏桓才發現,于是蹋頓與袁尚、袁熙等人率數萬騎兵迎擊。
二軍相遇,時曹軍輜重在后,“被甲者少,”而烏桓軍軍勢甚盛。
曹操登高瞭望,見烏桓軍雖多,但陣勢不整,遂命大將張遼為前鋒,乘烏桓軍陣稍動之機,向烏桓軍發動猛攻。
烏桓軍大亂,曹軍陣斬蹋頓,大獲全勝,胡、漢降者二十余萬,袁尚等人逃奔割據平州的公孫康。
這時,有人勸曹操乘勢進擊公孫康,曹操:“吾方使康斬送尚、熙首,不煩兵也。”
遂率軍還師。不久,公孫康果然斬殺袁尚、袁熙,并將其首級獻與曹操。
諸將不明所以,曹操:“彼素畏尚等,吾急之則并力,緩之則自相圖,其勢然也。”于是,曹操攻破三郡烏桓,也徹底肅清了袁氏勢力。
十一月至易水,代郡烏丸行單于普富盧、上郡烏丸行單于那樓將其名王來賀。
同年郭嘉因水土不服、氣候惡劣、日夜急行操勞過度,在曹操北歸前病逝。
歸程途中,據《曹瞞傳》記載:“時寒且旱,二百里無復水,軍又乏食,殺馬數千匹以為糧,鑿地入三十馀丈乃得水。
既還,科問前諫者,眾莫知其故,人人皆懼。公皆厚賞之,曰:‘孤前行,乘危以徼幸,雖得之,天所佐也,故不可以為常。諸君之諫,萬安之計,是以相賞,后勿難言之。’”
公元08年(建安十三年),開辟玄武池訓練水軍。六月,曹操廢三公,恢復丞相制度,并自任漢朝丞相。基本平定北方后,兵鋒轉而南向。
七月,進軍南征荊州劉表。八月,劉表病死,其子劉琮接任荊州牧。
九月,曹操大軍進至新野(今屬河南),劉琮以為無法抵擋,舉荊州之眾投降曹操。
這時,官渡之戰后投奔劉表的劉備屯駐于樊城(今湖北襄樊),聽劉琮投降,便率軍向江陵(今屬湖北)撤退。
江陵為荊州重鎮,存有大量軍用物資。
曹操聽,怕江陵落入劉備之手,遂親率五千騎兵從襄陽(今湖北襄樊)疾馳三百里,在當陽長坂(今湖北當陽東北)將劉備追上,大破其軍,隨后進占江陵。