建安四年(公元199年)十二月,曹操自率军屯于官渡(今河南中牟北),准备迎击袁绍。
刘备在陶谦死后,曾一度出任徐州牧,后徐州被吕布攻占,刘备投奔曹操。曹操认为刘备是个英雄,先后表他为豫州牧、左将军。曹操攻占徐州不久,淮南袁术准备逃往青州往依袁绍,曹操派刘备去截击,袁术北上不得,呕血而死。[]刘备到达下邳后,袭杀徐州刺史车胄,占据徐州,自己屯于小沛。曹操令刘岱、王忠率兵征讨,被刘备击败。[]
建安五年(公元200年)正月,董承等人谋诛曹操,事泄被杀。曹操决定东征刘备。[]诸将皆说:“与您争夺天下的人是袁绍,如今袁绍要来讨战,您却弃之不顾,而要东征刘备,倘若袁绍乘机从背后进攻,该怎么办呢?”曹操说:“刘备是人杰,现在不除掉他,以后一定会成为心腹大患。袁绍虽然有远大的志向,但反应迟钝,不会马上出兵。”于是急速进军,以迅雷不及掩耳之势击破刘备,刘备逃奔袁绍处。[
袁绍是当时北方最强大的一股势力,也是曹操统一北方最强大的敌人。袁氏一门,自袁绍曾祖袁安以下,“四世居三公位”,“门生故吏遍于天下”,势力本就很大,后袁绍取得冀、并、幽、青四州之地,实力大增,有军队数十万人。袁绍以其长子袁谭、次子袁熙、外甥高干分守青、幽、并三州,后方稳固,兵精粮足。他挑选精兵十万、战马万匹,志在一举消灭曹操。
建安五年(公元200年),袁绍命大将颜良等进兵白马(今河南滑县),自率大军进屯黎阳(今河南浚县东),向曹操发动进攻,拉开了大战的序幕。曹操的实力比袁绍弱得多,曹操所占的黄河以南地区,是残破不堪、尚未恢复生产的四战之地,物资储备也不如袁绍。其总兵力大概不过几万人,投入前线的兵力据《武帝纪》说“兵不满万,伤者十二三”。裴松之认为此数不准确,曹操的兵力不会如此之少,但曹操兵力远逊于袁绍却是毫无疑问的。
袁绍大军来攻,许都震动。曹操安慰众将,分析了袁绍的性格缺陷:“吾知绍之为人,志大而智小,色厉而胆薄,忌克而少威”,虽然“兵多而分画不明,将骄而众令不一”,在这种情况下,袁绍地盘虽大,粮草虽足,但只能是“为我奉也”。正是因为对袁绍有很深的认识,曹操才敢于在袁绍将要大军压境之时抽身去进攻刘备。
四月,曹操亲自率兵北上解白马之围,他采纳谋士荀攸之计,先进军延津(今延津北一带),做出要渡河袭击袁军的态势,吸引袁军分兵西向,然后突然转向迅速赶往白马。曹操军突然杀到,袁军措手不及,颜良被将军关羽斩首[24],袁军大败,白马之围遂解。曹操救出白马军民,沿黄河西撤。袁绍闻知,立即命文丑、刘备渡河追赶曹操。曹操见追兵渐近,命军士解鞍放马,并置辎重于道。袁军追兵大至,争抢辎重,阵形混乱。曹操率领仅有的骑兵突然杀出,大破追兵,阵斩文丑。曹操初战得胜,主动撤军,继续扼守官渡。[
八月,袁绍大军连营而进,东西数十里,依沙堆为屯,进逼官渡。曹操分兵坚守营垒,伺机而动。袁军向曹营发动猛攻,先是作高橹、起土山,由上向曹营中射箭,接着又挖地道,欲从地下袭击曹营,皆被曹操以设投石机、挖掘沟壑之法破解。两军一攻一守,相持近二个月。久战之下,曹操处境极为困难。
十月,袁绍从河北运来粮草万余车,派大将淳于琼等带万余人沿途护送,夜宿于离袁绍大营四十里的乌巢。这时袁绍谋士许攸因向袁绍献偷袭许都之计不成,且在河北的家眷犯法被抓,心生悔恨,而来投曹操,献计让曹操偷袭乌巢。曹操大喜,跣足出迎,之后亲率精锐步骑五千人,军队人衔枚,马勒口,打着袁军旗帜,乘夜从小路偷袭乌巢。曹操军至乌巢,命四面放火,袁军大乱,淳于琼拒营死守。[]袁绍闻知,急忙派兵救援,曹操左右说:“贼骑稍近,请分兵拒之。”曹操大怒说:“贼在背后,乃白!”士卒都拼死力战,因此大破袁军,斩淳于琼等,尽燔其粮草,袁绍派遣的援兵也战败而走。起初袁绍听说曹操袭击乌巢时,令张合、高览率重兵围攻曹军营地。由于曹军营地营垒坚固,乌巢先被攻破,张合、高览等人闻讯率部投曹,袁军溃散。袁绍与其子袁谭弃军逃回黄河以北,曹军大获全胜。剩余的袁军假降,曹操将他们坑杀。曹军前后斩首七万余级,尽获袁军辎重图书珍宝。曹操清点袁绍书信,得到自己部下勾结袁绍的信,尽烧之,说:“当袁绍强大时,孤尚且不能自保,何况众人呢!”官渡之战后,冀州诸郡皆举城归顺曹操。
在客观上说,官渡之战中的曹操处于劣势,但由于他能正确分析客观条件,善于听取正确意见,所以能扬长避短,采用正确的战略战术,使战争向有利于自己的方面转化,经过自己主观上的努力,终于赢得了胜利。此战之后,曹操击溃了最大的敌人袁绍,由他统一北方已是大势所趋。
建安六年(公元201年)四月,曹操扬兵于黄河边,击破袁绍在仓亭的驻军。袁绍在官渡之败后,收合部队,平定了反叛的诸郡县。九月,曹操回到许县。又南征在汝南的刘备、龚都,刘备投奔刘表,龚都等人皆逃散。
建安七年(公元202年)正月,曹操驻军谯县。又到达浚仪县,治理睢阳渠,又派使者祭祀已故的太尉桥玄。然后,曹操进军官渡。[]
五月,袁绍病死[],袁绍之子袁尚继位,袁谭屯兵黎阳。九月,曹操亲自北征,大战于黎阳,袁谭、袁尚多次战败。
建安八年(公元203年)三月,曹操大破黎阳,袁谭、袁尚逃回邺城。四月,曹操进军邺城。五月,曹操引军退还,留贾信守黎阳。[]不久后,曹操引兵向南,征讨刘表,袁谭、袁尚反目成仇,互相攻击,袁谭不敌袁尚,败走平原,遣辛毗向曹操乞降求救。当时诸将都怀疑有诈,只有荀攸劝曹操答应袁谭,曹操说:“我攻打吕布之时,刘表没有侵犯我方;官渡之战时,他又不肯帮助袁绍。这只是个自守的贼子,应该等到以后再来对付他。而袁谭、袁尚狡猾,我正应该趁北方混乱时发动攻击。就算袁谭挟诈,不肯真心屈服我军,但我击破袁尚,夺取他的地盘,对我军也更加有利。”于是再次北上,袁尚闻讯也退回邺城。当时,袁尚部将吕旷、吕翔背叛袁尚,率众投降曹操,曹操封两人为列侯。[]袁谭私自刻将军印绶,交给吕旷两人,吕旷把将军印送给曹操,曹操说:“我自然知道袁谭会耍些小聪明。他想让我攻击袁尚,然后趁机略民聚众,自以为破袁尚后,实力足以自强,可趁我军疲敝来与我抗衡。但击破袁尚后,我的势力更加强盛,哪可能会疲敝,让他有机可乘呢?”[305]曹操为了让袁谭暂时安心,还和袁谭结亲,让自己的儿子曹整娶袁谭的女儿。
建安九年(公元204年)正月,曹操率兵渡过黄河,截断淇水,引入白沟,作为运粮的通道。二月,袁尚再次出兵攻打袁谭,曹操趁机进军邺城。当时苏由、审配镇守邺城,曹操进军到洹水时,苏由投降。曹操到达邺城外,做土山、地道。当时武安长尹楷屯毛城,通上党粮道。四月,曹操留曹洪攻打邺城,亲自击破尹楷。又击破邯郸的沮鹄。易阳令韩范、涉长梁岐皆举县投降。五月,曹操毁土山、地道,作围堑,决漳水灌城,城中饿死者过半。七月,袁尚率军回救,依滏水(今滏阳河)为营,曹操进军将其营寨包围。袁尚害怕,请求投降,曹操不许。袁尚乘夜逃跑,袁军溃散。袁尚逃奔中山(今河北定县)。曹操命人拿着缴获袁尚的印绶节钺招降邺城守军,城中斗志崩溃。八月,审配的侄子审荣打开东城门,曹操军一举攻破邺城,擒杀审配。之后,曹操哭祭袁绍墓,慰劳袁绍妻子,将袁绍的家人和宝物都还给了袁家,并赐给他们杂缯絮,供养他们家。[]从这一年起,曹操把自己的据点北迁到了冀州的邺城,政令军队此后皆从此出,而许县则只留些许官吏。
九月,曹操下令:“河北遭受袁氏之难,不用再上缴今年租赋!”又严厉打压豪强兼并,百姓喜悦。曹操领冀州牧,并上表让还兖州牧。当初,曹操围攻邺城时,袁谭趁机攻取甘陵、安平、勃海、河间,又击破故安的袁尚败军,兼并其众。曹操写信给袁谭,责备他负约,与他断绝婚姻,将他的女儿送回,然后进兵。十二月,曹操进入平原,略定诸县。
建安十年(公元205年)正月,曹操攻灭袁谭,冀、青二州平定。当初袁尚兵败后,投奔幽州刺史袁熙。此月,幽州大将焦触、张南起兵反袁氏,袁尚、袁熙又逃奔三郡乌桓。焦触自称幽州刺史,举郡县归附曹操。[]四月,黑山军首领张燕率领其部众十余万人投降曹操。[]故安人赵犊、霍奴起兵,杀死幽州刺史,三郡乌桓又围攻鲜于辅于犷平。八月,曹操率兵北征,斩杀赵犊,又渡河救援犷平,乌桓奔走出塞。
当初,袁绍令其外甥高干领并州。曹操攻破邺城后,高干投降了曹操,仍然被任命为并州刺史。而曹操讨伐乌丸之时,高干举州反曹操,捉拿上党太守,举兵守壶口关。曹操遣乐进、李典讨伐高干,高干退守壶关城。
建安十一年(公元206年)正月,曹操攻打高干,高干留别将守城,自己逃入匈奴,向单于求救,单于不从。曹操围壶关前后三月,最终城陷。高干逃向荆州,在途中被上洛都尉王琰捕杀。]又东征淳于,遣乐进、李典击破海贼管承。[]
建安十二年(公元207年),曹操回到邺城,大封功臣二十多人,皆为列侯,其余依次受封。
曹操为了肃清袁氏残余势力,也为了彻底解决三郡乌桓入塞为害问题,决定远征乌桓。汉末,辽西、辽东、右北平三郡乌桓结合,是为三郡乌桓,其首领为辽西部的蹋顿。三郡乌桓与袁氏关系一直很好,并屡次侵扰边境,掳掠人口财物。
五月,曹操亲率大军到达无终(今河北玉田)。时正雨季,道路积水,“浅不通车马,深不载舟船”。曹操从无终人田畴之议,改从一条久已断绝,但“尚有微径可寻”的路线进军。在田畴的引导下,曹操大军登徐无山(今河北玉田北),出卢龙塞(今河北喜峰口附近),“堑山堙谷五百余里”,直指乌桓老巢柳城(今辽宁朝阳南)。
八月,曹军进至离柳城不足二百里时,乌桓才发现,于是蹋顿与袁尚、袁熙等人率数万骑兵迎击。二军相遇,时乌桓军军势甚盛,而曹军则是“车重在后,被甲者少,左右皆惧”,唯独张辽力劝曹操迎战。曹操登高了望,见乌桓军虽多,但阵势尚未摆好,遂命将自己的持麾授予张辽暂用。张辽指挥先锋部队,乘乌桓军阵稍动之机,向乌桓军发动猛攻。乌桓军大败,死者被野。乌桓单于蹋顿也被临阵斩杀。曹军在白狼山之战中大获全胜,胡、汉降者二十余万。
袁尚等人逃奔割据平州的公孙康。这时,有人劝曹操乘势进击公孙康,曹操说:“吾方使康斩送尚、熙首,不烦兵也。”遂率军还师。不久,公孙康果然斩杀袁尚、袁熙,并将其首级献与曹操。诸将不明所以,曹操说:“彼素畏尚等,吾急之则并力,缓之则自相图,其势然也。”于是,曹操攻破三郡乌桓,也彻底肃清了袁氏势力。[]
十一月,曹操行至易水,代郡乌丸行单于普富卢、上郡乌丸行单于那楼率其部下名王来贺。
建安十三年(公元208年),曹操开辟玄武池训练水军。六月,曹操废三公,恢复丞相制度,自任汉朝丞相。曹操基本平定北方后,兵锋转而南向。七月,进军南征荆州牧刘表。八月,刘表病死,其子刘琮接任。九月,曹操大军进至新野,刘琮以为无法抵挡,举荆州之众投降曹操。
曹操进军江陵后,下令荆州官民,“与之更始”,同时封降服者十五人为侯,任刘表大将文聘为江夏太守,引用荆州名士韩嵩、邓义等。益州牧刘璋也遣使向曹操致敬[],并开始接受征役,派兵充实曹军。[]
这时,官渡之战后投奔刘表的刘备屯驻于樊城(今湖北襄樊),听说刘琮投降,便率军向江陵(今属湖北)撤退。江陵为荆州重镇,存有大量军用物资。曹操听说,怕江陵落入刘备之手,遂亲率五千骑兵从襄阳(今湖北襄樊)疾驰三百里,在当阳长坂(今湖北当阳东北)将刘备追上,大破其军,随后进占江陵。
曹操在击溃刘备后,乘势想一举鲸吞江东。孙刘两军在鲁肃和诸葛亮等人的努力下,结成联盟,孙权命都督周瑜率军三万[133],与刘备的两万人马组成联军抵抗曹操。曹操自江陵东下,至赤壁(今湖北武昌西赤矶山)与孙、刘联军接战不利,暂驻军于乌林(今湖北洪湖东北),周瑜等人在南岸[],双方隔江对峙。周瑜用诈降之计,命大将黄盖率小战船十艘,上装柴草,灌以膏油,船头钉上大钉,假称投降,向北岸而进,至离曹营二里之处时,各船一齐点火,然后借助风势,直向曹军冲去,曹军大败,舟船被烧[]。曹操率军从华容道(今湖北监利西北)陆路撤回江陵。撤军北还。
建安十四年(公元209年),周瑜攻取南郡,孙权借南郡予刘备,孙刘联盟进一步得到巩固。为防范孙权,曹操强制内迁淮南的民众,引发江淮十余万户百姓惊慌,使其尽皆渡江归附孙权。同时,为稳定内部,曹操下令“死者家无基业不能自存者,县官勿绝廪,长吏存恤抚循”。同年还亲临合肥,设置了扬州郡县的长吏,修治芍陂屯田。年底回到谯。[]
赤壁之战后,天下三分的局势已经奠定。自此以后,曹操虽时有征伐,但主要精力用在经营曹氏势力之上。[
建安十五年(公元210年)春,曹操下《求贤令》,提出不拘品行、唯才是举的用人方针,目的是尽量把人才收罗到自己身边。同年冬,修建铜雀台。[]
建安十六年(公元211年)正月,曹操的三个儿子被封为县侯,世子曹丕成为五官中郎将,设置官属,为丞相副。太原人商曜以大陵起兵,曹操遣夏侯渊、徐晃将其击破。
三月,曹操遣司隶校尉钟繇讨伐汉中(治南郑,今陕西汉中东)张鲁,并令夏侯渊等出兵河东,与钟繇会合。[]西征汉中要经过关中,关中诸侯马超、韩遂、杨秋等十部心生疑惧,一时俱反。曹操立即派大将曹仁讨伐他们,马超等人屯据潼关,曹操对诸将说:“关西兵勇敢强悍,你们坚守不得与他们交战。”[
七月,曹操率大军亲征关中。八月,曹操到达战场,与马超的军队隔着潼关对峙。曹操拖住马超的部队,暗中派徐晃、朱灵等将乘天黑渡过蒲阪津,占领河西,安营扎寨。闰八月,曹操在潼关北面强渡黄河,渡了一半,马超赶来,猛攻曹军船只。校尉丁斐见情况危急,放出大批牛马引诱贼兵,敌军争抢牛马,队形大乱,曹操才得以渡过黄河,沿河边向南修筑通道。敌军败退,占据渭口抵抗,曹操多设疑兵,暗中用船将部队送入渭水,架设浮桥,乘夜分兵在渭水南岸扎营。敌军于夜间偷袭曹营,曹操派伏兵将他们击败。马超等人驻守渭南,派人送信,以割让黄河以西为条件求和,曹操不许。九月,进军渡渭水,马超等人多次挑战,曹操并不应战;马超等人再三请求割地,并让自己的儿子做人质求和,曹操听从贾诩之计,假意答应。韩遂请求与曹操会面,曹操与韩遂的父亲同一年被举为孝廉,又与韩遂是平辈,因此两人马靠马在阵前谈了很长时间,不谈军事,只叙朋友旧事,说到高兴处,二人拍手大笑。会见结束后,马超问韩遂:“曹公说了些什么?”韩遂回答:“没说什么。”于是马超等人对他产生了猜疑。后来曹操又和韩遂等人阵前见面,众将劝道:“您和敌人见面交谈,不可大意,可设木行马防备敌军。”曹操照办。两军见面,敌将都在马上向曹操行礼,秦、胡士兵都来看曹操,前后数层。曹操大笑着对他们说:“你们想看曹公吗?他也是个人,没有四只眼睛、两张嘴,只是多了点智慧而已!”胡人前前后后挤上来看。曹操又列五千铁骑为十重阵,铠甲精光耀日,敌军更加震恐。过了几天,曹操又给韩遂写了封信,上面故意涂改许多地方,假装成是韩遂改的,马超等人因此对韩遂越来越怀疑。于是曹操与他们约定日期会战,先用轻兵挑战敌军,打了很长时间后,曹操派出精锐骑兵夹攻,大败关中联军。韩遂、马超败走凉州,杨秋则逃回安定,曹军阵斩成宜和李堪等叛将,关中自此平定。[