分類
讀書

《中國歷代政治得失》——漢代選舉制度與經濟制度

中國歷代政治得失

作者:錢穆


二、漢代選舉制度

上面講了漢代中央和地方的許多官,但這許多官從哪裏來的呢?什麼人才可以做宰相御史大夫乃至這個部門的長官呢?這是講中國政治制度上一個最主要的大題目。

在古代封建世襲,天子之子為天子,公之子為公,卿之子為卿,大夫之子為大府,做官人有一定的血統,自然不會發生有此問題。但到秦漢時期便不同了。封建世襲制度已推翻,誰該從政,誰不該從政呢?除卻貴族世襲外,首先令人想到軍人政治,誰握有兵權,誰就掌握政權,支配仕途,但漢代又並不然。其次令人想到富人政治,誰有財富,誰便易於入仕,易於握權,但漢代也不然。我們講漢代關於此一方面的制度,要到漢武帝以後,才漸趨於定型。那時已有了太學,好如現在的國立大學。當時國立大學,只有一個,這裏面的學生,考試畢業分兩等,當時稱科。甲科出身的為郎;乙科出身的為吏。郎官是屬於光祿勳下面的皇宮裏的侍衛,依舊例,凡做二千石官的,︵漢朝這樣的官很多,中央雖只有三公九卿十多個,地方上的太守就有一百多個。︶ 他們的子侄後輩,都得照例請求,送進皇宮當侍衛。待他在皇帝面前服務幾年,遇政府需要人,就在這裏面挑選分發。這一制度,雖非貴族世襲,但貴族集團,同時便是官僚集團,仕途仍為貴族團體所壟斷。這在西方,直到近代還見此制。中國則自漢武帝以後便變了。

當時定制,太學畢業考試甲等的就得為郎,如是則郎官裏面,便羼進了許多知識分子,知識分子卻不就是貴族子弟。至考乙等的,回到其本鄉地方政府充當吏職。吏是地方長官的掾屬。漢代官吏任用,有一限制,地方長官定要由中央派,太守如是,縣令也如是。但郡縣掾屬,必得本地人充當。譬如臺北市的人,不能當臺北市的市長;但臺北市政府從市長以下的一切官,在漢代稱為掾屬的,那就絕對要用臺北市的本地人。不過辟用掾屬的權,則在長官手裏,這叫做辟屬。三公、九卿、郡太守、縣令,這些是由皇帝由中央政府任命的。宰相下面的十三曹,就由宰相自己辟用。此外各衛門首長以下,全是吏,全由各衙門首長自己任用。現在這個太學生考了乙等,譬如他是會稽郡人,他便回到會稽,指定由郡縣政府試用,這所謂補吏。補郎與補吏,是太學生畢業後應有的待遇。

再說到漢代的選舉制度,歷史上稱之謂鄉舉里選。當時各地方時時可以選舉人才到中央。他們的選舉,大體可分為兩種,也可說是三種:

一種是無定期的,譬如老皇帝死了,新皇帝即位,往往就下一道詔書,希望全國各地選舉人才到朝廷;或是碰著大荒年,大水災,或是大瘟疫,這表示政府行政失職,遭受天譴,也常下詔希望地方推舉賢人,來向政府說話,或替國家做事。這些選舉是無定期的。這樣選舉來的人,多半稱為賢良。賢良選到了政府以後,照例由政府提出幾個政治上重大的問題,向他們請教。這叫做策問。策即是一種竹片。問題寫在竹簡上,故稱策問。一道道的策問,請教賢良們大家發表意見,這叫對策。政府看了他們的意見,再分別挑選任用,這是一個方式。這一種選舉,既不定期,也無一定的選舉機關。地方民意也可舉,三公九卿,政府大僚,也可舉。所舉則稱為賢良,賢良是指有特出才能的人。

第二種是特殊的選舉,譬如政府今年要派人出使匈奴,出使西域,需要通外國語,能吃苦,能應變,所謂出使絕域的人,政府常常下詔徵求,只要自問自己有此才幹,可以自己報選。又如軍隊裏要用軍事人才,或如黃河決口,需要曉習治水的人,大家知道有這種人才,大家可以舉,自己覺得有把握,自己也可直接來應選。這是一種特殊的選舉。

後來又有一種有定期的選舉,那就是選舉孝廉。漢代一向有詔令地方察舉孝子廉吏的。但地方政府有時並不注意這件事,應選人也不踴躍。漢武帝時,曾下了一次詔書,大意說:你們偌大一個郡,若說竟沒有一個孝子一個廉吏可以察舉到朝廷,那是太說不過去的事。而且地方長官的職責,不僅在管理行政,還該替國家物色人才;若一年之內,連一個孝子一個廉吏都選不出,可見是沒有盡到長官的責任。於是漢武帝就下令叫大家公議,不舉孝子廉吏的地方長官應如何處罰。這一來,就無形中形成了一種有定期的選舉。無論如何,每郡每年都要舉出一個兩個孝子廉吏來塞責。漢代一百多個郡,至少每年要有兩百多孝廉舉上朝廷。這些人到了朝廷,並不能像賢良般有較好較快的出身,他們大抵還是安插在皇宮裏做一個郎官。如是則一個太學生,當他分發到地方政府充當吏屬之後,他仍還有希望被察舉到皇宮裏做一個郎。待他在郎署服務幾年,再分發出去。

自從武帝以後,漢代逐漸形成了一種一年一舉的郡國孝廉,至少每年各郡要新進兩百多個孝廉入郎署,十幾年就要有兩千個。從前皇宮裏的郎官侍衛本也只有二千左右。自此制度形成,二三十年後,皇宮裏的郎官,就全都變成郡國孝廉,而那些郡國孝廉,又多半是由太學畢業生補吏出身的。如是則皇帝的侍衛集團,無形中也變質了。全變成大學畢業的青年知識分子了。於是從武帝以後,漢代的做官人漸漸變成都是讀書出身了。後來郎署充斥,要待分發任用的人才盡多,於是就把無定期選舉,特殊選舉都無形擱下,仕途只有孝廉察舉的一條路,這是到東漢時代的事了。

這一制度,又由分區察舉,演進到按照戶口數比例分配,制為定額。那時是郡國滿二十萬戶的得察舉一孝廉,由是孝廉只成為一個參政資格的名稱,把原來孝子廉吏的原義都失去了。最後又由郡國察舉之後,中央再加上一番考試。這一制度,於是會合有教育、行政實習、選舉與考試之四項手續而始達於完成。

我們從此看出:這一制度在當時政治上是非常重要的。一個青年跑進太學求學,畢業後,派到地方服務。待服務地方行政有了成績,再經長官察選到中央,又須經過中央一番規定的考試,然後才始正式入仕。那是當時入仕從政的唯一正途。政府一切官吏,幾乎全由此項途徑出身。這樣的政府,我們再也不能叫它做貴族政府。郎官之中雖然也盡有貴族子弟,但究竟是少數。我們也不能稱之謂軍人政府,因郎官並不是由軍人出身的。我們也不能稱之為資本主義的政府,因這些郎官,都不是商人資本家的子弟。這樣的政府,我們只能叫它做讀書人的政府,或稱士人政府。漢代從昭宣以下的歷任宰相,幾乎全是讀書人,他們的出身,也都是經由地方選舉而來。並不是由其血統上和皇帝以及前任大官有什麼關係,或者是大軍人大富人,才爬上政治舞臺。完全是因其是一讀書知識分子而獲入仕途。這一情形,直從漢代起。我們可說中國歷史上此下的政府,既非貴族政府,也非軍人政府,又非商人政府,而是一個﹁崇尚文治的政府﹂,即士人政府。只許這些人跑上政治舞臺,政府即由他們組織,一切政權也都分配在他們手裏。

三、漢代經濟制度

上面講的是政府之形成,及其職權分配之內容。下面要講到支持政府的主要經濟問題,即賦稅制度。

漢代對於輕徭賦這一理想算是做到了。戰國時孟子講過:﹁什一而稅,王者之政﹂,可見戰國稅額,是不止什一的,在孟子以為什一之稅已是很好了。可是漢代,稅額規定就只有﹁十五稅一﹂。而且,實際上只要納一半,三十稅一。一百石穀子,只要納三石多一點的稅。甚至當時人還說有百一之稅的︵見旬悅︽前漢紀︾ ︶ ,並在文帝時,曾全部免收田租,前後歷十一年之久。這是中國歷史上僅有的一次。這因中國疆土廣,賦稅盡輕,供養一個政府,還是用不完。

然而漢代稅制,有一個大毛病,當時對於土地政策,比較是採用自由主義的。封建時代的井田制早已廢棄,耕者有其田,土地的所有權屬於農民私有,他可自由使用,也可自由出賣。遇到經濟困乏,田地可以買賣,就形成了兼併。若我們進一步問,為什麼政府稅額輕了,農民還要賣去自己的田地呢?這當然還有其他原因。這須講到當時的人口稅兵役稅,乃及社會經濟之全體貌。此刻無暇涉及。但耕戶賣去了他的土地所有權以後,他就變成一佃農,田主對佃農的租額是很高的。有的高到百分之五十︵即十分之五︶ 。結果政府的租稅愈輕,地主愈便宜,農民賣了地,要納十分之五的租給地主,地主向政府只要納三十分之一的稅。政府減輕田租,只便宜了地主,農民沒有受到分毫的好處。這是講的田租。

但這裏已牽涉到土地所有權問題。封建時代,四封之內,莫非王土,食土之毛,莫非王臣,土地為封建貴族所專有。耕田者依時還受,這是井田制度一項主要的條件。現在封建破壞,土地歸民間私有。既屬私有,自可自由買賣。政府只管按田收稅,不管田地誰屬。賣田的和買田的,雙方共同成立一種契約。這純是民間經濟貿易關係。所以在自由買賣下的大地主,並不即是封建貴族。封建是政治性的,而此刻的地主,則由經濟條件而形成。他可以自由買進,也可以自由賣出。正因為土地私有,耕者有其田,才有了自由買賣,才開始有兼併,才使貧者無立錐之地。以後中國歷史上的土地政策,一面常欣羨古代井田制度之土地平均佔有,但一面又主張耕者有其田,承認耕地應歸屬民間之私產。在這兩觀念之衝突下,終使土地租稅問題得不到一個妥適的解決。

再說全國土地,也並非全屬耕地。則試問非耕地的主權,又是誰的呢?一座山,一帶樹林,一個大的湖,在封建時代,自然是四封之內,莫非王土,耕地非耕地,同樣該屬於貴族。耕地開放了,散給農民,平均分配,成為井田,而非耕地則成為不公開的禁地。山林池澤,貴族另派管理員如虞人之類去看守。後來情勢變了,耕地所有權,逐漸轉移到農夫手裏,而非耕地的禁區呢?也漸漸被民間私下闖入,燒炭伐木,捕魚獵獸,這是一種違法的牟利。這一些時時闖入禁區的,在當時被目為盜賊,而他們這種耕地以外的生產,則稱之為奸利。政府設官防止,有權征討。待後防不勝防,討不勝討,索性把禁地即山林池澤也逐漸開放了。只在出入關隘,設一徵收員,遇在禁區捕魚伐木的,只就其所獲,徵收其所獲幾分之幾的實物,這就在田租之外,另成一種賦稅。這是關稅商稅之緣起。所以稱之曰徵者,原先是徵伐禁止的,後來只以分享獲得為妥協條件,而仍以徵字目之。這一種轉變,春秋末年,已在大大開始。土地狹或是人口密的國家,如鄭、如晉、如齊,都有此現象,都有此措施。然直到秦漢統一政府出現,關於土地所有權的觀念卻依然承襲舊貫。他們認耕地為農民私有,而非耕地,即封建時代相傳之禁地,則仍為公家所有。換言之,即成為王室所有。此因封建貴族都已消失,只剩皇帝一家,承襲舊來的封建傳統,所有全國的山林池澤,照當時人觀念,便全歸皇室。再從這一所有權的觀念影響到賦稅制度,所以當時凡農田租入歸諸大司農,充當政府公費。而山海池澤之稅則屬少府,專供皇帝私用。這一分別,若非從封建時代之井田制度以及其他土地所有權之分別轉變說來,便不易明瞭。

現在再說,此一公私分稅的制度,在開始時也頗合理。因耕地多,田賦是大宗,而山林池澤的商稅只佔少數。把大宗歸國家,小數劃歸皇室,這也並非皇帝私心自肥。但戰國以下,鹽鐵之利逐漸龐大起來,社會經濟情形變了,山海池澤之稅逐步超過了全國的田租。這一轉變,是開始定制時所不曾預料的。正如清代末年,並不知商埠對外通商關稅之逐年增添,卻把此事讓給外國人去管,後來遂吃了大虧。清代如此,漢代亦復如是。商稅漸漸地超過了田租,於是少府收入,反而勝過了大司農。漢武帝是一個雄才大略的皇帝,討匈奴,通西域,軍費浩繁,大司農的錢用完了,連他父親︵景帝︶ ,祖父︵文帝︶ 幾輩子積蓄下來的財富都花光了。政府支出龐大,陷入窘地,這又怎樣辦呢?農民的田租,三十分之一的定額,制度定了,又不便輕易再變更,再增加。漢武帝就只有自己慷慨,把少府的經濟拿出來,這等於是把皇室私款來捐獻給政府。所以武帝同時也命令地方上有錢的人,最主要的是如鹽鐵商人等,也能如他般大家自由樂捐。結果社會響應不佳,擁有大資產的,不理會政府之號召。漢武帝不禁要想:你們的錢究竟由哪裏來的呢?豈不是都由我把山海池澤讓給你們經營,你們才能煮鹽冶鐵,發財賺錢。現在我把少府收入都捐獻給國家,而你們不回應,那麼我只有把全國的山海池澤一切非耕地收還,由我讓給政府來經營吧!這便是漢武帝時代有名的所謂﹁鹽鐵政策﹂。

鹽鐵商是當時最大最易發財的兩種商業。鹽沒有一人不吃的,鐵也沒有一家不用,而煮海成鹽,開山出鐵,這山與海的主權,卻在皇帝手裏。現在漢武帝再不讓商人們擅自經營了,把其所有權收回,讓政府派管理去自己燒鹽,自己冶鐵,其利息收入則全部歸給政府,於是鹽鐵就變成國營與官賣。這個制度,很像近代西方德國人之所首先創始的所謂國家社會主義的政策。可是我們遠在漢代已經發明了這樣的制度,直到清代,小節上的變化雖然有,而大體上總還遵循這一政策,總還不離於近代之所謂國家社會主義的路線。這一制度,也不專限於鹽鐵兩項。又如酒,這是消耗著人生日用必需的米麥來做成的一種奢侈享樂品,因此也歸入官賣,不許民間自由釀造。

這些制度的後面,自然必有其理論的根據。我們要講中國的經濟思想史,必須注意到歷史上種種實際制度之措施。而講中國經濟制度,卻又該注意此項制度之所由演變完成的一種歷史真相。所以我講漢武帝時代的鹽鐵政策,卻遠遠從古代井田制度與山澤禁地在法理上所有權之區分,直講到少府與大司農的稅收之分配於政府與皇室之由來,而由此再引申出鹽鐵官賣來。這並不專是一個思想與理論的問題,而實際上則有極佔重要的歷史傳統之現實情況來決定。為了這一問題,在當時也爭辯得很久,到漢昭帝時還有一番熱烈的討論,全國各地民眾代表和政府的財政主管大臣在特別召集的會議席上往返辯論,互相詰難。有當時一位民眾代表事後留下一份記錄,就是有名的鹽鐵論。當然民間主張開放,政府主張國營。而當時實際上的利弊得失,則非熟究當時人的意見,是無法懸揣的。我們此刻要討論歷史制度,全該注意當時的歷史傳統與當時人的歷史意見,作為主要之參考。不該把我們的時代意見來抹殺當時的歷史意見,這才是正辦呀!

我們概括上述漢代的經濟政策,對工商業是近於主張如近人所謂的節制資本的一面,而在對農民田租方面,則也已做到了輕徭薄賦,但並未能平均地權。在漢武帝時,董仲舒曾主張限田政策,縱不能將全國田畝平均分派,也須有一最高限度,使每一地主不能超過若干畝之限制,惜乎連這個政策也並未能推行。於是王莽起來,就激起了一項大改革,把一切田畝盡歸國有,稱為皇田,重行分配。當時的意想,實在要恢復封建之井田制,而結果則引生一次大變亂。王莽失敗了,從此中國歷史上的土地制度也不再有徹底的改革了。


上一篇:︽中國歷代政治得失︾ -漢代政府組織

下一篇:︽中國歷代政治得失︾ -漢代兵役制度與漢制得失檢

分類
讀書

《中國歷代政治得失》——漢代政府組織

中國歷代政治得失

作者:錢穆


一、漢代政府組織

甲、皇室與政府

嚴格說來,要到秦漢才是中國歷史上正式有統一政府。秦以前的中國,只可說是一種封建的統一。只要到秦漢,中央方面才有一個更像樣的統一政府,而其所轄的各地方,也已經不是封建性的諸侯列國並存,而是緊密隸屬於中央的郡縣制度的行政區分了。因此講中國傳統政治,可以逕從秦漢講起,以前暫略不論。秦代只是漢代之開始,漢代大體是秦代之延續。所以秦代暫亦不講,而只講漢代。

現在專說漢代政府究是怎樣組織的?我們要看政府的組織,最重要的是看政府的職權分配。在此方面,我亦只想提出兩點來加以申說。第一是皇室與政府之職權劃分,第二是中央與地方的職權劃分。

我們知道:秦以後,中國就開始有一個統一政府,在一個統一政府裏,便不能沒有一個領袖。中國歷史上這一個政治領袖,就是皇帝。這皇帝又是怎樣產生的呢?在中國傳統政治裏,皇位是世襲的──父親傳給兒子。若用現代政治眼光來衡量,大家會懷疑,皇帝為什麼要世襲呢?但我們要知道,中國的立國體制和西方歷史上的希臘、羅馬不同。他們國土小,人口寡。如希臘,在一個小小半島上,已包有一百幾十個國。他們所謂的國,僅是一個城市。每一個城市的人口,也不過幾萬。他們的領袖,自可由市民選舉。只要城市居民集合到一曠場上,那裏便可表現所謂人民的公意。羅馬開始,也只是一城市。後來向外征服,形成帝國。但其中央核心,還是希臘城邦型的。中國到秦、漢時代,國家疆土,早和現在差不多。戶口亦至少在幾千萬以上。而且中國的立國規模,並不是向外征服,而是向心凝結。漢代的國家體制,顯與羅馬帝國不同。何況中國又是一個農業國,幾千萬個農村,散佈全國,我們要責望當時的中國人,早就來推行近代的所謂民選制度,這是不是可能呢?我們若非專憑自己時代判斷,來吞滅歷史判斷,我們應該承認皇位世襲,是中國已往政治條件上一種不得已或說是一種自然的辦法。況且世界各國,在歷史上有皇帝的,實在也不在少數。我們不能說,中國從前不用民主選舉制,而有一個世襲的皇帝,便夠證明中國傳統政治之黑暗與無理性。在封建時代,本來有很多家庭有他們世襲的特權,這些皆所謂貴族。但從秦漢以後,封建制度早已推翻。單只皇室一家是世襲的,除卻皇帝可以把皇位傳給他兒子以外,政府裏便沒有第二個職位,第二個家庭,可以照樣承襲。郡太守不能把郡太守的職位傳給他兒子,縣令不能把縣令的職位傳給他兒子。這已是政治制度上一項絕大的進步。從前封建時代,政府和家庭,有分不開的關係,現在則不然了。組織政府的是一個一個人,不再是一個一個家。不過在那時,還留下一個很大的問題:便是皇室和政府的關係。皇室是不是即算政府?若把皇室和政府劃開,這兩邊的職權又怎樣分?這是秦漢時代首先遇到的一個大問題,也是此下中國政治史上一向要碰到的一個大問題。

拿歷史大趨勢來看,可說中國人一向意見,皇室和政府是應該分開的,而且也確實在依照此原則而演進。皇帝是國家的唯一領袖,而實際政權則不在皇室而在政府。代表政府的是宰相。皇帝是國家的元首,象徵此國家之統一;宰相是政府的領袖,負政治上一切實際的責任。皇權和相權之劃分,這常是中國政治史上的大題目。我們這幾十年來,一般人認為中國從秦漢以來,都是封建政治,或說是皇帝專制,那是和歷史事實不相符合的。

要講漢代皇權和相權之劃分,讓我先舉一實例:當時皇帝宰相,各有一個﹁秘書處﹂,而兩邊的組織,大小不同。漢代皇帝有六尚,尚是掌管意。六尚是尚衣、尚食、尚冠、尚席、尚浴與尚書。五尚都只管皇帝私人的衣服飲食起居。只有尚書是管文書的,這真是皇宮裏的﹁秘書﹂了。漢代開始的尚書,其職權地位本不高,後來才愈弄愈大。最先尚書只是六尚之一,這是皇帝的秘書處。若說到宰相的秘書處呢?共有十三個部門,即是當時所謂的十三曹,一個曹等於現在一個司。我們且列舉此十三曹的名稱,便可看出當時宰相秘書處組織之龐大,與其職權之廣泛。

一西曹,主府史署用。

二東曹,主二千石長吏遷除,並包軍吏在內。二千石是當時最大的官,以年俸有兩千石穀得名。可見朝廷一切官吏任免升降,都要經宰相的秘書處。

三戶曹,主祭祀農桑。

四奏曹,管理政府一切章奏,略如唐代的樞密院,明代的通政司。

五詞曹,主詞訟,此屬法律民事部分。

六法曹,掌郵驛科程,這像現在的交通部,科程是指一切交通方面之時限及量限等。

七尉曹,主卒曹轉運,是管運輸的,略如清代之有漕運總督。

八賊曹,管盜賊。九決曹,主罪法。此兩曹所管屬於法律之刑事方面。

十兵曹,管兵役。

十一金曹,管貨幣鹽鐵。

十二倉曹,管倉穀。

十三黃閣,主簿錄眾事,這是宰相府秘書處的總務主任。

這十三個機關,合成一個宰相直轄的辦公廳。我們只根據這十三曹名稱,便可想見當時政務都要彙集到宰相,而並不歸屬於皇帝。因為皇帝只有一個籠統的尚書處,只有一個書房。最先的尚書也僅有四人,而宰相府下就有十三個機關。這相府十三曹,此諸皇室尚書的範圍大得多,而且此十三曹的權位也很重,也竟儼如後代之專部大臣。可見漢代一切實際事權,照法理,該在相府,不在皇室,宰相才是政府的真領袖。以上單據一例來講皇室和政府的區別。從中國傳統政治的大趨勢看,一般意見一向是看重這區別的。

乙、中央政府的組織

現在說到漢代中央政府的組織。當時有所謂三公、九卿,這是政府裏的最高官。

丞相太尉御史大夫稱三公,丞相管行政,是文官首長;太尉管軍事,是武官首長;御史大夫管監察,輔助丞相來監察一切政治設施。它是副丞相。按照漢代習慣,用現代語說,這裏有一種不成文法的規定,須做了御史大夫,才得升任為丞相。太尉雖與丞相尊位相等,實際除卻軍事外,不預聞其他政事。因此當時最高行政長官實在是丞相。

依照文字學原義,丞是副貳之意。所謂相,也是副。就如現俗稱嬪相,這是新郎新娘的副,新郎新娘不能做的事,由嬪相代理來做。所以丞是副,相也是副,正名定義,丞相就是一個副官。是什麼人的副官呢?他該就是皇帝的副官。皇帝實際上不能管理一切事,所以由宰相來代理,皇帝可以不負責任。為什麼又叫宰相呢?在封建時代,貴族家庭最重要事在祭祀。祭祀是最重要事在宰殺牲牛。象徵這一意義,當時替天子諸侯乃及一切貴族公卿管家的都稱宰。到了秦、漢統一,由封建轉為郡縣,古人稱﹁化家為國﹂,一切貴族家庭都倒下了,只有一個家卻變成了國家。於是他家裏的家宰,也就變成了國家的政治領袖。

本來封建時代,在內管家稱宰,出外作副官稱相,所以照歷史傳統講,宰相本來只是封建時代貴族私官之遺蛻。但正因如此,所以秦漢時代的宰相,他不但要管國家政務,還要管及皇帝的家務。這在周官書裏的天官冢宰的職權,便是如此的。但現在的宰相,他既要掌管國家政府的一切事情,他再沒有工夫管皇帝的家事,於是在御史大夫,即副丞相之下,設有一個御史中丞,他便是御史大夫的副,這個人就住在皇宮裏。那時凡具中字的官,都是指是住在皇宮的。皇室的一切事,照例都歸御史中丞管。御史中丞屬於御史大夫,御史大夫隸屬於宰相,如實則皇室一切事仍得由宰相管。從另一方面講,宰相的來歷,本只是皇帝的私臣,是皇帝的管家,自該管皇宮裏的事。那是封建舊制遺脫未盡。但從另一方面看,只好說,皇帝也不過市政府下面的一部分。所以宮廷事,也歸宰相來統治。那時,皇帝有什麼事,交待御史中丞,御史中丞報告御史大夫,御史大夫再轉報宰相。宰相有什麼事,也照這個手續,由御史大夫轉中丞,再轉入內廷,這是當時皇帝與政府關係之大概。

再說漢代的九卿,那是:太常、光祿勳、衛尉、太僕、廷尉、大鴻臚、宗正、大司農、少府。他們的官位都是二千石,又稱中二千石。因他們都是中央政府裏的二千石,以示別於郡太守地方行政首長之亦是二千石而名。若講到這些九卿職名的來歷,卻很有趣味:

太常在秦代叫泰常,這個常字,本當作嘗。他是管祭祀祖先鬼神的。依四時奉獻時物,讓祖先鬼神時時嘗新,故稱泰嘗。在古代,宗教意味猶在政治意味之上。古代的住宅,東偏是祠堂,即廟,西偏是家屋,即寢。生宅死宅,連在一起。後代民間此制雖廢,皇宮仍沿舊軌。直到清代,太廟不是緊貼在皇宮的東邊嗎?古代的家庭,最重要的,可說不是活人而是死人,祭祖自屬大事。宰就是掌管殺牛祭祖的。所以漢廷九卿的第一卿,也是管祭祀的。這個官,正名定義,該屬於皇家,管皇家的廟,管皇家祭祖的一個家務官。不好算是朝廷公職。

其次是光祿勳。這個官名,直到清代還有,但這三字的原義,卻早就忘失了。依文義講,勳該就是閽,古音相同,這是皇家的門房。光是大義,光祿該即是大麓,祿麓音同相借。為什麼門房稱大麓呢?此因古時代的皇帝,多半靠山住家,好像宋江在梁山泊,朱貴在山腳下開設酒店,好通報消息。所以皇帝居山,房門就設在山麓。尚書上說舜管堯的大麓,那便是舜做了堯的宰相。換言之,乃是當了堯的門房。因此光祿與勳是古今語,都指門房言。

衛尉是一個武職,掌門衛屯兵,這是皇宮的衛兵司令。當時凡屬軍事方面的官都稱尉。

太僕猶之是皇帝的車夫,︽論語︾ :﹁子適衛,冉有僕﹂,僕是趕車的。皇帝出去,太僕就替他趕車。那是皇帝的汽車司機。

廷尉是掌法的,犯了皇帝的法,都歸他管。

如此看來,太常管皇家太廟,光祿衛尉,一是門房頭兒,一是衛兵頭兒。這都是在裏面的。皇帝出門,隨帶的是太僕,在外面有人犯法,就是廷尉的事。

大鴻臚,一直相沿到清代,就等於外交部。也如現在之禮賓司,是管交際的。臚是傳呼義。古禮主賓交接,由主傳到主身邊的相,再由主身邊的相傳到賓邊的相,由是而再傳達到賓之自身。鴻即大義。大臚是傳達官。

宗正是管皇帝的家族,其同姓本家及異姓親戚的。

以上七個卿,照名義,都管的皇家私事,不是政府的公務。由這七卿,我們可以看出漢代政治,還有很多是古代封建制度下遺留的陳跡,然而那時已是化家為國了,原來管皇帝家務的,現在也管到國家大事了。譬如太常就兼管教育,因為古代學術都是在宗廟的。西方也一樣,直到現在,在他們,教育和宗教還是分不開。光祿勳原是皇帝的總門房,現在皇宮裏一切侍衛都要他管。那時皇宮裏的侍從,還不完全是太監,而且太監很少,大部分還是普通人。當時一般要跑入政府做官的人,第一步就得現進入皇宮裏,充侍衛,奉侍皇帝,讓皇帝認識,然後得機會再派出去當官。這些在皇宮裏服務的,多半是年輕人,當時稱作郎官,都歸光祿勳管。孔子十二世孫孔安國,也就做過郎官。太僕呢?因管車馬,所以國家一切武裝,好像﹁坦克車、飛機﹂之類,他也連帶管了。廷尉就變成司法,大鴻臚就變成外交。這是歷史演變。我們推尋出這一演變,卻並不是說漢代的中央政府還是一個封建政府,而當時的九卿還是皇帝之私臣。因此等卿都隸屬於宰相,而所管亦全是國家公事。

此外還有兩個卿,就是大司農和少府,都是管財政經濟的。大司農管的是政府經濟,少府管的是皇室經濟。大司農的收入支銷國家公費,少府收入充當皇室私用。皇室不能用大司農的錢。所以我們說當時皇室和政府在法理上是鮮明劃分的。當時全國田賦收入是大宗,由大司農管。工商業的稅收,譬如海邊的鹽,山裏的礦,原來收入很少,由少府管。

這九卿,全都隸屬於宰相。

我們上面講九卿,照名義來歷,都是皇帝的家務官,是宮職,而系統屬於宰相,豈不是宰相本是皇帝的總管家嗎?但換句話說,便是當時政府的首長,宰相,可以管到皇宮裏的一切。舉例來說,少府掌管皇室經費,而少府屬於宰相,宰相可以支配少府,即是皇室經濟也由宰相支配。這樣一講,豈不是皇室反而在政府之下了嗎?本來封建時代的宰相,就是皇帝的管家,但到了郡縣時代,化家為國,宰相管的,已經是國家了,不是私家了,所以他成了政府正式的首長。從前私家家庭中的各部門,也就變成公家政府的各部門。封建時代,以家為國,周天子是一個家,齊國也是一個家,魯國又是一個家,這樣的貴族家庭很多,天下為此許多家庭所分割。那時在大體上說,則只有家務,沒有政務。現在中國已經只剩了一家,就是當時的皇室。這一家為天下共同所戴,於是家務轉變成政務了。這個大家庭也轉變成了政府。原先宰相是這個家庭的管家,現在則是這個政府的領袖。

以上對漢代的三公九卿,已經講了一個大概。這是當時中央政府的組織情形。

丙、漢代地方政府

漢代的地方政府,共分兩級:即郡與縣。中國歷史上的地方政府以縣為單位,直到現在還沒有變。漢時縣的上面是郡,郡縣數當然也隨時有變動。大體說,漢代有一百多個郡,一個郡管轄十個到二十個縣。大概漢代縣數,總在一千一百到一千四百之間。中國歷史上講到地方行政,一向推崇漢朝,所謂兩漢吏治,永為後世稱美,這一點值得我們的注意。若以近代相比,今天的地方行政區域,最高為省。一省之大,等於一國,或者還大過一國。一省所轄縣,有六七十個以至一二百個,實在太多了。但就行政區域之劃分而論,漢制是值得稱道的。

漢代郡長官叫太守,地位和九卿平等,也是二千石。不過九卿稱為中二千石,郡太守是地方上的二千石。郡太守調到中央可以做九卿,再進一級就可當三公,九卿放出來也做郡太守。漢代官級分得少,升轉極靈活,這又是漢制和後來極大的不同。九卿放出來當太守,並不是降級。地方二千石來做中二千石,也不是升級,名義上還是差不多。當時全國一百多個郡,太守的名位,都和九卿差不多,因此雖是中央政府大一統的局面,雖是地方行政區域劃分得比較小,卻不感覺得這個中央政府高高在上。

丁、中央與地方之關係

說到中央與地方的關係。每郡每年要向中央上計簿,計簿就是各項統計表冊,也就是地方的行政成績。一切財政、經濟、教育、刑事、民事、盜賊、災荒,每年有一個簿子,分項分類,在九十月間呈報到中央,這叫做上計。

中央特派專員到地方來調查的叫刺史。全國分為十三個調查區,每一區派一個刺史,平均每一刺史的調查區域,不會超過九個郡。他的調查項目也有限制,政府規定根據六條考察,六條以外,也就不多管。地方實際行政責任,是由太守負責的。政府派刺史來調查,不過當一個耳目。所以太守官俸二千石,而刺史原始只是俸給六百石的小官。根據政府規定項目調查,縱是小官也能稱任。而且惟其官小,所以敢說敢講,無所避忌。

這些刺史,上屬於御史丞。皇宮裏還有十五個侍御史,專事劾奏中央乃及皇宮裏的一切事情的。部刺史和侍御史的意見,都報告到副宰相御史大夫,副宰相再報告到宰相。副宰相所輔助宰相的,便是這一個監察的責任。


下一篇:︽中國歷代政治得失︾-漢代選舉制度與經濟制

分類
软件

使用 Screen Stream 來分享安卓屏幕

Screen Stream 是一款由 Dmitriy Krivoruchko 開發的老牌(始於 2016 年)開源安卓屏幕共享軟件。使用方便,還支持中文,推薦有需要的朋友使用。

它主要是局域網共享屏幕,甲手機打開軟件,點擊開始即可。然後乙手機,在瀏覽器裏輸入甲手機的網址(或掃碼)就可以觀看了。就是這麼簡單!如果想要通過因特網分享屏幕,那麼你得確保你有公網 IP,使用方法是一樣的。

通過調教幀率和畫質,可以減輕手機網絡和性能消耗(少發一點熱)。通過設置安全選項,可以控制只通過 WiFi 網絡分享(即不通過手機網絡分享)或者只在本機分享(相當於是程序接口)。

通過服務器實現屏幕共享

由於沒有公網 IP,又想要分享屏幕給遠方親友,則可以通過服務器來實現。思路有很多,我有實現一個非常簡單辦法。對分享一方來說,可以通過 Termux 來把圖片 Post 到服務器,服務器收到圖片後展示出來即可。所用的 Termux 命令爲:

watch -n 3 "curl http://127.0.0.0.1:8080/stream.jpeg | curl -k -s -X POST --data-binary @- https://my.image.server/image_in"
#即每隔 3 秒,把圖片傳送到服務器一次

我的圖片服務是一個簡單的 Django 網站,免費部署在 pythonanywhere,等我有空了可以把代碼整理下發出來。我也測試過讓甲通過瀏覽器,用 Javascript 來把圖片轉發到服務器,Chrome 下是可以的,但是火狐裏網頁一到後臺,JS 就停止工作,搜了一下也沒找到火狐網頁保活的辦法。

理論上,把視頻流直接轉發到 Nginx,應該更加高效流暢,但是我沒有測試過。

分類
网站

Ten plugins and ten themes for WordPress

Here is a collection of plugins and themes from Chapter 16: The Part of Tens of the book WordPress for dummies by Lisa Sabin-Wilson.

Plugins

Custom Post Type UI

For custom post types and taxonomy.

Jetpack

A suit of plugins provided by wordpress.com.

Limit Login Attempts Reloaded

Limit Login Attempts.

Cookie Notice for GDPR & CCPA

Cookie Notice for GDPR & CCPA

Yoast SEO

Search engine optimization

BackupBuddy

For backing up and transfering website. Price strats from $80.

WP Super Cache

Create static HTML files from your dynamic WordPress content.

WooCommerce

Selling product or service on your website.

Google XML Sitemap

Create a Google-compliant XML site map of your entire site and submit it to major search engines.

Sucuri Security

Scan for malware, spam, blacklisting and other security issues hidden inside your code files.

Themes

Hybrid Core

Highly customizable parent theme. It's a WordPress Framework now.

Hestia

One-page theme built for use on a small-business website.

Responsive

Nine templates built on a fluid grid system as well as webmaster toos, logo management and multilingual support.

Ashe

Suit for personal website, lifestyle blog, bakery, travel agency.Support WooCommerce.

Prefer Blog

Simple blog with built-in Auther and Contact Us block.

BlackBird

Use your own logo, analytics code, customize featured text with an easy-to-use widget, post thumbnails, header image.

Storefront

For store with WooCommerce support, custom widgets and sidebars.

Sinatra

Good for general websites like restaurants, bakeries tech startups and blog.

Nisarg

A nice clean blog theme.

Optics

A minimalist theme featuring a grid layout. Clean and Simple.

分類
网站

在線 cron 定時請求

有時我們需要定時執行一些網絡任務,但是所使用的服務又不支持 crontab 定時任務,這時可以考慮使用在線的 cron-job.org 來觸發,它可以根據你的需要在在指定的時間或按照特定頻率執行網絡請求。是一個免費又開源的服務。

如果你的任務對於執行時間沒有那麼精確,也可以使用之前推薦過的 StatusCake ,它的 Push Test 也是非常好用的。如果是要監測網站或服務器的在線情況,則使用它的 Uptime test。

這兩個服務的免費版本個人使用應該都夠用,如果它們有幫到你,請量力考慮贊助它們。

分類
网站

使用 Django Q 方便地執行耗時任務

Django Q 是一個使用 Python 多進程製作的原生 Django 任务队列、调度器和 worker 应用。它具有很多優異特性但我只是粗淺使用了如下幾點:

  • 多進程 worker 池
  • 異步任務
  • 定時任務、cron 和重複的任務
  • 把失敗和成功結果保存到數據庫或緩存
  • 自動集成到 Django Admin,就可以在後臺添加和管理任務
  • 支持 Redis, Disque, IronMQ, SQS, MongoDB 或 ORM 這麼多種隊列代理方式,最方便的當然是 ORM
  • 注意:Django Q 的任務間隔粒度是 30 秒,如果你的任務頻率或精準度要求高於 30 秒,你需要嘗試修改源碼或使用其他任務隊列

安裝 Django Q

pip install django-q
#如果要使用 cron 規則,則也要安裝
pip install croniter
#在項目的 settings.py 文件 INSTALLED_APPS 裏加入 django_q
INSTALLED_APPS = (
    # other apps
    'django_q',
)
#設置代理方式,我選擇 ORM,
#只需把下面字段也加入 settings.py

#更多設置請參見 https://django-q.readthedocs.io/en/latest/configure.html
Q_CLUSTER = {
    'name': 'djangtasks',
    'workers': 2,
    'timeout': 180,
    'retry': 200,
    'queue_limit': 50,
    'bulk': 10,
    'orm': 'default'
}

#執行數據庫遷移來創建數據庫表
python manage.py migrate
#運行 Django Q 來處理任務隊列
python manage.py qcluster

我是使用 screen 來在後臺運行 qcluster,很方便的。

使用 Django Q 在 Django 後臺執行耗時任務

# file: views.py
import datetime
from django.http import HttpResponse
from django.utils import timezone
from django_q.tasks import async_task, schedule
from django_q.models import Schedule

def a_longtime_task(arg):
    time.sleep(30)
    return arg

def scheduled_task(arg):
    time.sleep(30)
    return arg

def a_longtime_task_request(request):
    #立即在後臺執行
    async_task(a_longtime_task,'args for the function')
    return HttpResponse('The longtime task has been started.')

def another_longtime_task_request(request):
    #三分鐘後執行
    schedule('YOURAPP.views.scheduled_task',
            'args for the function',
            schedule_type=Schedule.ONCE,
            next_run=timezone.now() + datetime.timedelta(minutes=3))
    return HttpResponse('The task has been scheduled.')

在 Django Admin 佈置定時任務

這個就比較直接,比如要每天 10 點都執行上面例子中的 scheduled_task,就點擊 Admin 頁面 Scheduled tasks 旁邊的「新增」。

Func(填入完整的函數路徑):YOURAPP.views.scheduled_task
Args:'args for the function'
Schedule Type:Daily
Next Run(設置要運行的時間如):2022-08-27 10:00

最後點擊「儲存」就可以了。

同樣的,如果選擇 Cron 類型,就需要在 Cron 輸入框填入 Cron 計劃。比如在 9 點到 23 點期間,每 5,15,25,35,45,55 各執行一次:
5,15,25,35,45,55 9-23 * * *
更多 Cron 用法和組合可以參考 crontab.guru 這個網站。

等待執行的任務、失敗的任務和成功的任務都可以方便的在Admin頁面查看和操作,非常方便。

管理隊列任務與已完成任務 Schedule Task

# file: tasks.py
from django_q.models import Schedule, Task
from django.db.models import Q
#your model to be checked
from app1.models import Race
from django.utils import timezone

import datetime
import operator
from functools import reduce

# Task to delete successful old tasks
def delete_old_tasks():
    len_task_20 = 0
    len_task_gen = 0
    now = datetime.datetime.now()
    days_passed_2 = timezone.utc.localize(now - datetime.timedelta(days=2))
    days_passed_7 = timezone.utc.localize(now - datetime.timedelta(days=7))
    task_q_list = []
    task_q_list.append(Q(group__startswith='20'))
    task_q_list.append(Q(started__lt=days_passed_7))
    task_q_list.append(Q(success__exact=True))
    task_20_queryset = Task.objects.filter(reduce(operator.and_, task_q_list))
    len_task_20 = len(task_20_queryset)
    for task in task_20_queryset:
        task.delete()

    task_q_list = []
    task_q_list.append(Q(group__exact='generate_0_task'))
    task_q_list.append(Q(started__lt=days_passed_2))
    task_q_list.append(Q(success__exact=True))
    task_gen_queryset = Task.objects.filter(reduce(operator.and_, task_q_list))
    len_task_gen = len(task_gen_queryset)
    for task in task_gen_queryset:
        task.delete()

    return f'{len_task_20} checked tasks and {len_task_gen} checking tasks have been removed.'

#generate 0 task every 5 minuts
def generate_0_task():
    res=[]
    now = datetime.datetime.now()
    dto_now = timezone.utc.localize(now)
    start_datetime_6 = now + datetime.timedelta(minutes=6)
    dto_plus6 = timezone.utc.localize(start_datetime_6)
    current_races = Race.objects.filter(post_time_live__lte=dto_plus6,
                                          post_time_live__gte=dto_now)
    if len(current_races) == 0:
        res.append('no current races')
        return res
    for race in current_races:
        if race.race_conditions.find('SIMULCAST')>-1:
            res.append(str(race)+': task passed SIMULCAST')
            continue
        tasks = Schedule.objects.filter(name=str(race))
        if len(tasks)==0:
            schedule('app1.views.zero_mtp_task',
                    race.id, race.track_id, race.race_number, race.race_date, race.post_time_live.isoformat(),
                    schedule_type=Schedule.ONCE,
                    next_run=race.post_time_live,
                    name=str(race))
            res.append(str(race)+': task added'+' post time:'+str(race.post_time_live))
        else:
            res.append(str(race)+': task already added'+' post time:'+str(race.post_time_live))
    return res

本文更新於 2023/01/27。

分類
网站

Django with PostgreSQL

參考 PostgreSQL:Linux downloads (Red Hat family) 來安裝PostgreSQL,比如 Fedora 35 可以這樣:

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/F-35-x86_64/pgdg-fedora-repo-latest.noarch.rpm
sudo dnf install -y postgresql13-server libpq-devel
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13

安裝完成後來初始化一個數據庫和用戶。

#使用 root 登錄 PostgreSQL
sudo -u postgres psql
#創建數據庫
CREATE DATABASE project;
#創建新用戶
CREATE USER user42 WITH PASSWORD 'password42';
#下面這三行優化是 Django 推薦的
ALTER ROLE user42 SET client_encoding TO 'utf8';
ALTER ROLE user42 SET default_transaction_isolation TO 'read committed';
ALTER ROLE user42 SET timezone TO 'Asia/Taipei';
#把數據庫授權給新用戶
GRANT ALL PRIVILEGES ON DATABASE project TO user42;
#退出數據庫
\q

要在 Django 中使用 PostgreSQL 數據庫,需要還安裝 psycopg2:

pip install Django psycopg2
#如果像我一樣在 Fedora 安裝失敗了
#可以嘗試安裝編譯好的版本
pip install Django psycopg2-binary

之後在項目的設置中把默認的 SQLite 數據庫資料改成 PostgreSQL 就可以了。更像詳細的步驟與解釋,可以參考:How To Use PostgreSQL with your Django Application on Ubuntu 20.04

刪除 Django 數據庫中的表格並重建

這似乎不是正確的回滾數據庫的操作辦法,但是也可以一試。

#從 migrations 目錄找到要刪除的數據庫變更文件,刪除掉
#進入數據庫操作程序
python manage.py dbshell
#查看並找到要刪除的表名
SELECT * FROM pg_catalog.pg_tables;
#如果是MariaDB,這樣查看表名
show tables;
#比如表名爲 task_day,則這樣刪除
DROP TABLE task_day;
#退出數據庫操作程序
exit;
#刪掉數據庫裏的 migrations
python manage.py migrate --prune task

#現在可以重新建立表格了
python manage.py makemigrations
python manage.py migrate

本文更新於 2022/10/24。