[{"data":1,"prerenderedAt":5361},["ShallowReactive",2],{"series:index":3,"content:\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter3-viandshell":972,"surround:\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter3-viandshell":5358},[4,15,25,35,45,54,64,74,82,91,101,110,120,129,138,147,152,162,172,181,189,194,203,213,223,233,243,253,263,273,283,293,303,313,323,333,339,348,357,366,372,381,391,401,410,420,429,439,448,457,467,476,485,494,504,513,522,531,540,549,559,569,578,587,596,605,610,620,629,638,644,649,658,666,674,679,687,692,700,708,716,724,732,740,749,758,766,774,779,787,796,805,814,823,831,836,845,850,855,863,871,879,887,895,900,905,914,923,931,939,947,955,963],{"stem":5,"path":6,"title":7,"date":8,"collapsed":9,"readingTime":10},"posts\u002F2024\u002FXZZD-Aquire-Score","\u002F2024\u002F10\u002F23\u002FXZZD-Aquire-Score","XZZD_Aquire_Score","2024-10-23 15:08:30",false,{"text":11,"minutes":12,"time":13,"words":14},"3 min read",2.955,177300,591,{"stem":16,"path":17,"title":18,"date":19,"collapsed":9,"readingTime":20},"posts\u002F2024\u002Felec-design-contest-2024","\u002F2024\u002F07\u002F07\u002Felec-design-contest-2024","东四——隐秘的角落","2024-07-07 11:44:32",{"text":21,"minutes":22,"time":23,"words":24},"2 min read",1.74,104400,348,{"stem":26,"path":27,"title":28,"date":29,"collapsed":9,"readingTime":30},"posts\u002F2024\u002Fmechanics","\u002F2024\u002F07\u002F08\u002Fmechanics","about力学","2024-07-08 14:14:07",{"text":31,"minutes":32,"time":33,"words":34},"9 min read",8.54,512400,1708,{"stem":36,"path":37,"title":38,"date":39,"collapsed":9,"readingTime":40},"posts\u002F2025\u002F25GElecDesignContest","\u002F2025\u002F08\u002F26\u002F25GElecDesignContest","纪念最好的大二五组 - Soleil 的 电赛回忆录","2025-08-26 11:06:33",{"text":41,"minutes":42,"time":43,"words":44},"30 min read",29.99,1799400,5998,{"stem":46,"path":47,"title":48,"date":49,"collapsed":9,"readingTime":50},"posts\u002F2025\u002FEngineering-Innovation","\u002F2025\u002F01\u002F20\u002FEngineering-Innovation","工程实践与创新能力大赛","2025-01-20 22:20:59",{"text":21,"minutes":51,"time":52,"words":53},1.365,81900,273,{"stem":55,"path":56,"title":57,"date":58,"collapsed":9,"readingTime":59},"posts\u002F2025\u002FTOP","\u002F2025\u002F01\u002F20\u002FTOP","置顶","3025-01-20 21:53:36",{"text":60,"minutes":61,"time":62,"words":63},"1 min read",0.285,17100,57,{"stem":65,"path":66,"title":67,"date":68,"collapsed":9,"readingTime":69},"posts\u002FUGCourses\u002F1.freshman-spring\u002Fengineering-drawing-notes","\u002F2024\u002F06\u002F30\u002Fengineering-drawing-notes","工程图学期末复习","2024-06-30 21:02:09",{"text":70,"minutes":71,"time":72,"words":73},"15 min read",14.78,886800,2956,{"stem":75,"path":76,"title":77,"date":78,"collapsed":9,"readingTime":79},"posts\u002FUGCourses\u002F1.freshman-spring\u002Findex","\u002Fugcourses\u002Ffreshman-spring","大一春夏","2024-06-30 19:15:28",{"text":80,"minutes":81,"time":81,"words":81},"0 min read",0,{"stem":83,"path":84,"title":85,"date":86,"collapsed":9,"readingTime":87},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FComplex-Analysis","\u002F2025\u002F01\u002F21\u002FComplex-Analysis","复变函数与积分变换","2025-01-21 13:23:59",{"text":11,"minutes":88,"time":89,"words":90},2.855,171300,571,{"stem":92,"path":93,"title":94,"date":95,"collapsed":9,"readingTime":96},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FFundamentalsMarxism","\u002F2025\u002F06\u002F06\u002FFundamentalsMarxism","马克思主义基本原理","2025-06-06 00:22:45",{"text":97,"minutes":98,"time":99,"words":100},"6 min read",5.54,332400,1108,{"stem":102,"path":103,"title":104,"date":105,"collapsed":9,"readingTime":106},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FMathematical-Modeling","\u002F2024\u002F09\u002F22\u002FMathematical-Modeling","数学建模（课程）","2024-09-22 19:07:42",{"text":11,"minutes":107,"time":108,"words":109},2.475,148500,495,{"stem":111,"path":112,"title":113,"date":114,"collapsed":9,"readingTime":115},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FMicroelectronic-Circuits","\u002F2025\u002F01\u002F20\u002FMicroelectronic-Circuits","电基小子","2025-01-20 23:02:49",{"text":116,"minutes":117,"time":118,"words":119},"5 min read",4.225,253500,845,{"stem":121,"path":122,"title":123,"date":124,"collapsed":9,"readingTime":125},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FMumerical-Analysis","\u002F2024\u002F09\u002F19\u002FMumerical-Analysis","数值分析方法","2024-09-19 17:12:56",{"text":11,"minutes":126,"time":127,"words":128},2.1,126000,420,{"stem":130,"path":131,"title":132,"date":133,"collapsed":9,"readingTime":134},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002FProbability-Theory","\u002F2025\u002F01\u002F21\u002FProbability-Theory","概率论与数理统计","2025-01-21 12:52:11",{"text":11,"minutes":135,"time":136,"words":137},2.205,132300,441,{"stem":139,"path":140,"title":141,"date":142,"collapsed":9,"readingTime":143},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002Fengineering-training","\u002F2024\u002F09\u002F17\u002Fengineering-training","工程训练","2024-09-17 21:40:26",{"text":11,"minutes":144,"time":145,"words":146},2.385,143100,477,{"stem":148,"path":149,"title":150,"date":78,"collapsed":9,"readingTime":151},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002Findex","\u002Fugcourses\u002Fsophomore-autumn","大二秋冬",{"text":80,"minutes":81,"time":81,"words":81},{"stem":153,"path":154,"title":155,"date":156,"collapsed":9,"readingTime":157},"posts\u002FUGCourses\u002F2.sophomore-autumn\u002Fsolid-state-physics","\u002F2024\u002F09\u002F11\u002Fsolid-state-physics","固体物理基础","2024-09-11 19:15:26",{"text":158,"minutes":159,"time":160,"words":161},"4 min read",3.21,192600,642,{"stem":163,"path":164,"title":165,"date":166,"collapsed":9,"readingTime":167},"posts\u002FUGCourses\u002F3.sophomore-spring\u002FAIFrontier","\u002Fugcourses\u002Fsophomore-spring\u002Faifrontier","人工智能前沿","2025-06-12 14:58:16",{"text":168,"minutes":169,"time":170,"words":171},"25 min read",24.02,1441200,4804,{"stem":173,"path":174,"title":175,"date":166,"collapsed":9,"readingTime":176},"posts\u002FUGCourses\u002F3.sophomore-spring\u002FDigitalSys","\u002Fugcourses\u002Fsophomore-spring\u002Fdigitalsys","数字系统设计",{"text":177,"minutes":178,"time":179,"words":180},"45 min read",44.87,2692200,8974,{"stem":182,"path":183,"title":184,"date":166,"collapsed":9,"readingTime":185},"posts\u002FUGCourses\u002F3.sophomore-spring\u002FMaoTheory","\u002F2025\u002F06\u002F12\u002FMaoTheory","毛概",{"text":70,"minutes":186,"time":187,"words":188},14.63,877800,2926,{"stem":190,"path":191,"title":192,"date":78,"collapsed":9,"readingTime":193},"posts\u002FUGCourses\u002F3.sophomore-spring\u002Findex","\u002Fugcourses\u002Fsophomore-spring","大二春夏",{"text":80,"minutes":81,"time":81,"words":81},{"stem":195,"path":196,"title":197,"date":198,"collapsed":9,"readingTime":199},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture1","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture1","Lecture 1：摩尔定律与 CMOS","2026-09-09 19:39:00",{"text":60,"minutes":200,"time":201,"words":202},0.535,32100,107,{"stem":204,"path":205,"title":206,"date":207,"collapsed":9,"readingTime":208},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture10","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture10","Lecture 10：从 MOS 电容到 MOSFET","2026-09-10 00:10:00",{"text":209,"minutes":210,"time":211,"words":212},"18 min read",17.615,1056900,3523,{"stem":214,"path":215,"title":216,"date":217,"collapsed":9,"readingTime":218},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture11","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture11","Lecture 11：亚阈值效应与 MOSFET 尺寸缩放","2026-09-10 00:20:00",{"text":219,"minutes":220,"time":221,"words":222},"23 min read",22.35,1341000,4470,{"stem":224,"path":225,"title":226,"date":227,"collapsed":9,"readingTime":228},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture12","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture12","Lecture 12：MOSFET 尺寸缩微","2026-09-10 00:30:00",{"text":229,"minutes":230,"time":231,"words":232},"35 min read",34.225,2053500,6845,{"stem":234,"path":235,"title":236,"date":237,"collapsed":9,"readingTime":238},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture13","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture13","Lecture 13：MOS 新范式","2026-09-10 00:40:00",{"text":239,"minutes":240,"time":241,"words":242},"24 min read",23.25,1395000,4650,{"stem":244,"path":245,"title":246,"date":247,"collapsed":9,"readingTime":248},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture2","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture2","Lecture 2：半导体基础","2026-09-09 19:39:31",{"text":249,"minutes":250,"time":251,"words":252},"7 min read",6.02,361200,1204,{"stem":254,"path":255,"title":256,"date":257,"collapsed":9,"readingTime":258},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture3","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture3","Lecture 3：费米能级、载流子散射与迁移率","2026-09-09 21:00:00",{"text":259,"minutes":260,"time":261,"words":262},"13 min read",12.565,753900,2513,{"stem":264,"path":265,"title":266,"date":267,"collapsed":9,"readingTime":268},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture4","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture4","Lecture 4：漂移电流、扩散电流与产生复合","2026-09-09 23:00:00",{"text":269,"minutes":270,"time":271,"words":272},"10 min read",9.22,553200,1844,{"stem":274,"path":275,"title":276,"date":277,"collapsed":9,"readingTime":278},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture5","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture5","Lecture 5：PN 结与耗尽区","2026-09-09 23:10:00",{"text":279,"minutes":280,"time":281,"words":282},"14 min read",13.515,810900,2703,{"stem":284,"path":285,"title":286,"date":287,"collapsed":9,"readingTime":288},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture6","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture6","Lecture 6：正向偏置 PN 结与理想二极管方程","2026-09-09 23:20:00",{"text":289,"minutes":290,"time":291,"words":292},"20 min read",19.095,1145700,3819,{"stem":294,"path":295,"title":296,"date":297,"collapsed":9,"readingTime":298},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture7","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture7","Lecture 7：金半接触","2026-09-09 23:40:00",{"text":299,"minutes":300,"time":301,"words":302},"16 min read",15.195,911700,3039,{"stem":304,"path":305,"title":306,"date":307,"collapsed":9,"readingTime":308},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture8","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture8","Lecture 8：PN 结在光电领域的应用","2026-09-09 23:50:00",{"text":309,"minutes":310,"time":311,"words":312},"54 min read",53.955,3237300,10791,{"stem":314,"path":315,"title":316,"date":317,"collapsed":9,"readingTime":318},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FLecture9","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Flecture9","Lecture 9：MOS 电容","2026-09-10 00:00:00",{"text":319,"minutes":320,"time":321,"words":322},"21 min read",20.355,1221300,4071,{"stem":324,"path":325,"title":326,"date":327,"collapsed":9,"readingTime":328},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FMidtermExam","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Fmidtermexam","期中复习题","2026-09-09 23:30:00",{"text":329,"minutes":330,"time":331,"words":332},"8 min read",7.595,455700,1519,{"stem":334,"path":335,"title":336,"date":337,"collapsed":9,"readingTime":338},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002FMockExam","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices\u002Fmockexam","押题密卷","2026-09-10 00:50:00",{"text":21,"minutes":51,"time":52,"words":53},{"stem":340,"path":341,"title":342,"date":198,"collapsed":343,"readingTime":344},"posts\u002FUGCourses\u002F4.junior-autumn\u002F1.microelectronic-devices\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Fmicroelectronic-devices","微电子器件",true,{"text":158,"minutes":345,"time":346,"words":347},3.055,183300,611,{"stem":349,"path":350,"title":351,"date":352,"collapsed":9,"readingTime":353},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F1.HistoryMetaCharacters","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fhistorymetacharacters","History & Meta Characters","2026-09-10 20:25:44",{"text":269,"minutes":354,"time":355,"words":356},9.36,561600,1872,{"stem":358,"path":359,"title":360,"date":361,"collapsed":9,"readingTime":362},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F1.ExamAutumn2223","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexamautumn2223","22-23 秋冬历年卷","2026-09-10 20:26:49",{"text":319,"minutes":363,"time":364,"words":365},20.295,1217700,4059,{"stem":367,"path":368,"title":369,"date":370,"collapsed":9,"readingTime":371},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F2.Exam2021","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexam2021","20-21 历年卷","2026-09-10 20:26:50",{"text":289,"minutes":290,"time":291,"words":292},{"stem":373,"path":374,"title":375,"date":376,"collapsed":9,"readingTime":377},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F3.ExamRecall1","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexamrecall1","不知名回忆卷 1","2026-09-10 20:26:51",{"text":116,"minutes":378,"time":379,"words":380},4.215,252900,843,{"stem":382,"path":383,"title":384,"date":385,"collapsed":9,"readingTime":386},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F10.PastExams\u002F4.ExamRecall23","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fpastexams\u002Fexamrecall23","不知名回忆卷 2\u002F3","2026-09-10 20:26:52",{"text":387,"minutes":388,"time":389,"words":390},"12 min read",11.235,674100,2247,{"stem":392,"path":393,"title":394,"date":395,"collapsed":9,"readingTime":396},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F1.Chapter1-Introduction","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter1-introduction","Chapter 1：Introduction","2026-09-10 20:27:26",{"text":397,"minutes":398,"time":399,"words":400},"19 min read",18.435,1106100,3687,{"stem":402,"path":403,"title":404,"date":405,"collapsed":9,"readingTime":406},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F2.Chapter2-IntroductionToUnix","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter2-introductiontounix","Chapter 2：Introduction to Unix","2026-09-10 20:27:40",{"text":168,"minutes":407,"time":408,"words":409},24.895,1493700,4979,{"stem":411,"path":412,"title":413,"date":414,"collapsed":9,"readingTime":415},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F3.Chapter3-ViAndShell","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter3-viandshell","Chapter 3：Vi and Shell","2026-09-10 20:27:41",{"text":416,"minutes":417,"time":418,"words":419},"32 min read",31.035,1862100,6207,{"stem":421,"path":422,"title":423,"date":424,"collapsed":9,"readingTime":425},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F4.Chapter4-Network","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter4-network","Chapter 4：Network","2026-09-10 20:27:49",{"text":239,"minutes":426,"time":427,"words":428},23.975,1438500,4795,{"stem":430,"path":431,"title":432,"date":433,"collapsed":9,"readingTime":434},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F5.Chapter5-Administration","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter5-administration","Chapter 5：Administration","2026-09-10 20:27:51",{"text":435,"minutes":436,"time":437,"words":438},"36 min read",35.41,2124600,7082,{"stem":440,"path":441,"title":442,"date":443,"collapsed":9,"readingTime":444},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F6.Chapter6-Xwindow","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter6-xwindow","Chapter 6：Xwindow","2026-09-10 20:27:53",{"text":319,"minutes":445,"time":446,"words":447},20.235,1214100,4047,{"stem":449,"path":450,"title":451,"date":452,"collapsed":9,"readingTime":453},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F7.Chapter7-SoftwareDevelopmentTools","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter7-softwaredevelopmenttools","Chapter 7：Software Development Tools","2026-09-10 20:27:54",{"text":209,"minutes":454,"time":455,"words":456},17.85,1071000,3570,{"stem":458,"path":459,"title":460,"date":461,"collapsed":9,"readingTime":462},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F8.Chapter8-CProgrammingInUnix","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fdetailed\u002Fchapter8-cprogramminginunix","Chapter 8：C Programming in Unix","2026-09-10 20:27:57",{"text":463,"minutes":464,"time":465,"words":466},"17 min read",16.855,1011300,3371,{"stem":468,"path":469,"title":470,"date":471,"collapsed":9,"readingTime":472},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F2.LinuxUnix","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Flinuxunix","Linux & Unix","2026-09-10 20:25:46",{"text":41,"minutes":473,"time":474,"words":475},29.33,1759800,5866,{"stem":477,"path":478,"title":479,"date":480,"collapsed":9,"readingTime":481},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F3.Vi","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fvi","Vi","2026-09-10 20:25:47",{"text":329,"minutes":482,"time":483,"words":484},7.95,477000,1590,{"stem":486,"path":487,"title":488,"date":489,"collapsed":9,"readingTime":490},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F4.ViCopy","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fvicopy","Vi（详细版）","2026-09-10 20:25:49",{"text":279,"minutes":491,"time":492,"words":493},13.785,827100,2757,{"stem":495,"path":496,"title":497,"date":498,"collapsed":9,"readingTime":499},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F5.Shells","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fshells","Shells","2026-09-10 20:25:51",{"text":500,"minutes":501,"time":502,"words":503},"22 min read",21.21,1272600,4242,{"stem":505,"path":506,"title":507,"date":508,"collapsed":9,"readingTime":509},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F6.Network","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fnetwork","Network","2026-09-10 20:25:54",{"text":319,"minutes":510,"time":511,"words":512},20.595,1235700,4119,{"stem":514,"path":515,"title":516,"date":517,"collapsed":9,"readingTime":518},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F7.SystemAdministration","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fsystemadministration","System Administration","2026-09-10 20:26:44",{"text":329,"minutes":519,"time":520,"words":521},7.12,427200,1424,{"stem":523,"path":524,"title":525,"date":526,"collapsed":9,"readingTime":527},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F8.XWindow","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fxwindow","XWindow","2026-09-10 20:26:45",{"text":97,"minutes":528,"time":529,"words":530},5.105,306300,1021,{"stem":532,"path":533,"title":534,"date":535,"collapsed":9,"readingTime":536},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F9.SystemDevelopmentTools","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad\u002Fsystemdevelopmenttools","System Development Tools","2026-09-10 20:26:47",{"text":387,"minutes":537,"time":538,"words":539},11.35,681000,2270,{"stem":541,"path":542,"title":543,"date":544,"collapsed":343,"readingTime":545},"posts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Ficcad","面向 ICCAD 的软件基础技术","2026-09-10 12:37:00",{"text":60,"minutes":546,"time":547,"words":548},0.185,11100,37,{"stem":550,"path":551,"title":552,"date":553,"collapsed":9,"readingTime":554},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FFeiQilai1","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Ffeiqilai1","飞起来1.0","2026-09-10 12:51:49",{"text":555,"minutes":556,"time":557,"words":558},"105 min read",104.655,6279300,20931,{"stem":560,"path":561,"title":562,"date":563,"collapsed":9,"readingTime":564},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FFeiQilai2","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Ffeiqilai2","飞起来2.0","2026-09-10 12:52:06",{"text":565,"minutes":566,"time":567,"words":568},"29 min read",28.755,1725300,5751,{"stem":570,"path":571,"title":572,"date":573,"collapsed":9,"readingTime":574},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FFeiQilai3","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Ffeiqilai3","飞起来3.0","2026-09-10 12:52:12",{"text":116,"minutes":575,"time":576,"words":577},4.49,269400,898,{"stem":579,"path":580,"title":581,"date":582,"collapsed":9,"readingTime":583},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FLecture13","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Flecture13","Lecture 13：浮点数标准","2026-09-10 12:51:27",{"text":11,"minutes":584,"time":585,"words":586},2.575,154500,515,{"stem":588,"path":589,"title":590,"date":591,"collapsed":9,"readingTime":592},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FLecture6","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Flecture6","Lecture 6：Behavioral Modeling，非阻塞赋值","2026-09-10 12:51:12",{"text":97,"minutes":593,"time":594,"words":595},5.34,320400,1068,{"stem":597,"path":598,"title":599,"date":600,"collapsed":9,"readingTime":601},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002FPPTCorrespondence","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl\u002Fpptcorrespondence","与PPT的对应","2026-09-10 12:52:18",{"text":269,"minutes":602,"time":603,"words":604},9.275,556500,1855,{"stem":606,"path":607,"title":608,"date":544,"collapsed":343,"readingTime":609},"posts\u002FUGCourses\u002F4.junior-autumn\u002F3.HDL\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Fhdl","硬件描述语言原理与应用",{"text":60,"minutes":61,"time":62,"words":63},{"stem":611,"path":612,"title":613,"date":614,"collapsed":9,"readingTime":615},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002F1.BeforeMidterm","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign\u002Fbeforemidterm","期中前","2026-09-10 20:28:52",{"text":616,"minutes":617,"time":618,"words":619},"11 min read",10.835,650100,2167,{"stem":621,"path":622,"title":623,"date":624,"collapsed":9,"readingTime":625},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002F2.MidtermExam2425","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign\u002Fmidtermexam2425","24-25 期中","2026-09-10 20:29:00",{"text":21,"minutes":626,"time":627,"words":628},1.22,73200,244,{"stem":630,"path":631,"title":632,"date":633,"collapsed":9,"readingTime":634},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002F3.FinalExamReview","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign\u002Ffinalexamreview","期末考试整理","2026-09-10 20:29:09",{"text":387,"minutes":635,"time":636,"words":637},11.36,681600,2272,{"stem":639,"path":640,"title":641,"date":642,"collapsed":343,"readingTime":643},"posts\u002FUGCourses\u002F4.junior-autumn\u002F4.analogICDesign\u002Findex","\u002Fugcourses\u002Fjunior-autumn\u002Fanalogicdesign","模拟集成电路设计","2026-09-10 20:00:00",{"text":80,"minutes":81,"time":81,"words":81},{"stem":645,"path":646,"title":647,"date":78,"collapsed":9,"readingTime":648},"posts\u002FUGCourses\u002F4.junior-autumn\u002Findex","\u002Fugcourses\u002Fjunior-autumn","大三秋冬",{"text":80,"minutes":81,"time":81,"words":81},{"stem":650,"path":651,"title":652,"date":653,"collapsed":9,"readingTime":654},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F1.Chapter3-Device","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter3-device","Chapter 3：器件 Device","2026-09-10 21:14:41",{"text":249,"minutes":655,"time":656,"words":657},6.055,363300,1211,{"stem":659,"path":660,"title":661,"date":653,"collapsed":9,"readingTime":662},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F10.Chapter12-Arithmetic","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter12-arithmetic","Chapter 12：算术运算电路 Arithmetic",{"text":168,"minutes":663,"time":664,"words":665},24.245,1454700,4849,{"stem":667,"path":668,"title":669,"date":653,"collapsed":9,"readingTime":670},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F11.Chapter13-Memory","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter13-memory","Chapter 13：存储器 Memory",{"text":229,"minutes":671,"time":672,"words":673},34.235,2054100,6847,{"stem":675,"path":676,"title":677,"date":653,"collapsed":9,"readingTime":678},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F12.Chapter14","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter14","Chapter 14",{"text":80,"minutes":81,"time":81,"words":81},{"stem":680,"path":681,"title":682,"date":653,"collapsed":9,"readingTime":683},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F13.PastExams\u002F1.Midterm2022","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fpastexams\u002Fmidterm2022","2022 期中试题",{"text":60,"minutes":684,"time":685,"words":686},0.075,4500,15,{"stem":688,"path":689,"title":690,"date":653,"collapsed":9,"readingTime":691},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F13.PastExams\u002F2.Midterm2023","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fpastexams\u002Fmidterm2023","2023 期中试题",{"text":80,"minutes":81,"time":81,"words":81},{"stem":693,"path":694,"title":695,"date":653,"collapsed":9,"readingTime":696},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F13.PastExams\u002F3.FinalPolished","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fpastexams\u002Ffinalpolished","期末历年卷（AI 润色版）",{"text":21,"minutes":697,"time":698,"words":699},1.575,94500,315,{"stem":701,"path":702,"title":703,"date":653,"collapsed":9,"readingTime":704},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F14.ExamRecall2026","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fexamrecall2026","数字集成电路回忆 2026",{"text":60,"minutes":705,"time":706,"words":707},0.49,29400,98,{"stem":709,"path":710,"title":711,"date":653,"collapsed":9,"readingTime":712},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F2.Chapter4-Wire","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter4-wire","Chapter 4：导线 Wire",{"text":397,"minutes":713,"time":714,"words":715},18.65,1119000,3730,{"stem":717,"path":718,"title":719,"date":653,"collapsed":9,"readingTime":720},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F3.Chapter5-Inverter","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter5-inverter","Chapter 5：CMOS 反相器 Inverter",{"text":269,"minutes":721,"time":722,"words":723},9.385,563100,1877,{"stem":725,"path":726,"title":727,"date":653,"collapsed":9,"readingTime":728},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F4.Chapter6-LogicGate","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter6-logicgate","Chapter 6：逻辑门 Logic Gate",{"text":31,"minutes":729,"time":730,"words":731},8.635,518100,1727,{"stem":733,"path":734,"title":735,"date":653,"collapsed":9,"readingTime":736},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F5.Chapter7-SequentialLogic","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter7-sequentiallogic","Chapter 7：时序逻辑 Sequential Logic",{"text":463,"minutes":737,"time":738,"words":739},16.645,998700,3329,{"stem":741,"path":742,"title":743,"date":653,"collapsed":9,"readingTime":744},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F6.Chapter8-Speed","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter8-speed","Chapter 8：延迟与速度 Speed",{"text":745,"minutes":746,"time":747,"words":748},"33 min read",32.885,1973100,6577,{"stem":750,"path":751,"title":752,"date":653,"collapsed":9,"readingTime":753},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F7.Chapter9-Power","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter9-power","Chapter 9：功耗 Power",{"text":754,"minutes":755,"time":756,"words":757},"31 min read",31.005,1860300,6201,{"stem":759,"path":760,"title":761,"date":653,"collapsed":9,"readingTime":762},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F8.Chapter10-Interconnect","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter10-interconnect","Chapter 10：互连 Interconnect",{"text":463,"minutes":763,"time":764,"words":765},16.32,979200,3264,{"stem":767,"path":768,"title":769,"date":653,"collapsed":9,"readingTime":770},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002F9.Chapter11-Timing","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign\u002Fchapter11-timing","Chapter 11：时序 Timing",{"text":289,"minutes":771,"time":772,"words":773},19.68,1180800,3936,{"stem":775,"path":776,"title":777,"date":653,"collapsed":343,"readingTime":778},"posts\u002FUGCourses\u002F5.junior-spring\u002F1.digitalICDesign\u002Findex","\u002Fugcourses\u002Fjunior-spring\u002Fdigitalicdesign","数字集成电路设计",{"text":80,"minutes":81,"time":81,"words":81},{"stem":780,"path":781,"title":782,"date":653,"collapsed":9,"readingTime":783},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F1.L1-Intro","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl1-intro","L1：计算机发展史与体系结构导论",{"text":397,"minutes":784,"time":785,"words":786},18.695,1121700,3739,{"stem":788,"path":789,"title":790,"date":653,"collapsed":9,"readingTime":791},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F10.L8-9-Memory","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl8-9-memory","L8-9：存储器层次结构",{"text":792,"minutes":793,"time":794,"words":795},"128 min read",127.1,7626000,25420,{"stem":797,"path":798,"title":799,"date":653,"collapsed":9,"readingTime":800},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F11.L10-11-Parallelism","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl10-11-parallelism","L10-11：并行性",{"text":801,"minutes":802,"time":803,"words":804},"159 min read",158.86,9531600,31772,{"stem":806,"path":807,"title":808,"date":653,"collapsed":9,"readingTime":809},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F12.L12-CacheCoherence","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl12-cachecoherence","L12：缓存一致性 Cache Coherence",{"text":810,"minutes":811,"time":812,"words":813},"76 min read",75.395,4523700,15079,{"stem":815,"path":816,"title":817,"date":653,"collapsed":9,"readingTime":818},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F13.L13-14-ComplexPipeline","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl13-14-complexpipeline","L13-14：复杂流水线（衔接 L7）",{"text":819,"minutes":820,"time":821,"words":822},"44 min read",43.985,2639100,8797,{"stem":824,"path":825,"title":826,"date":653,"collapsed":9,"readingTime":827},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F14.L15","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl15","L15：期末复习问答",{"text":269,"minutes":828,"time":829,"words":830},9.105,546300,1821,{"stem":832,"path":833,"title":834,"date":653,"collapsed":9,"readingTime":835},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F2.L2-Binary","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl2-binary","L2：二进制数制",{"text":80,"minutes":81,"time":81,"words":81},{"stem":837,"path":838,"title":839,"date":653,"collapsed":9,"readingTime":840},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F3.L3-CMemory","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl3-cmemory","L3：C 语言与内存模型",{"text":841,"minutes":842,"time":843,"words":844},"98 min read",97.32,5839200,19464,{"stem":846,"path":847,"title":848,"date":653,"collapsed":9,"readingTime":849},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F4.L4a-wbx","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl4a-wbx","L4a：wbx",{"text":80,"minutes":81,"time":81,"words":81},{"stem":851,"path":852,"title":853,"date":653,"collapsed":9,"readingTime":854},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F5.L4b-MachineCode","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl4b-machinecode","L4b：机器码 Machine Code",{"text":80,"minutes":81,"time":81,"words":81},{"stem":856,"path":857,"title":858,"date":653,"collapsed":9,"readingTime":859},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F6.L5-DSD","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl5-dsd","L5：数字系统设计 Digital System Design",{"text":269,"minutes":860,"time":861,"words":862},9.955,597300,1991,{"stem":864,"path":865,"title":866,"date":653,"collapsed":9,"readingTime":867},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F7.L6a-SingleCycle","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl6a-singlecycle","L6a：单周期处理器设计",{"text":219,"minutes":868,"time":869,"words":870},22.125,1327500,4425,{"stem":872,"path":873,"title":874,"date":653,"collapsed":9,"readingTime":875},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F8.L6b-Microcode","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl6b-microcode","L6b：微码处理器架构",{"text":387,"minutes":876,"time":877,"words":878},11.86,711600,2372,{"stem":880,"path":881,"title":882,"date":653,"collapsed":9,"readingTime":883},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002F9.L7-Pipeline","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization\u002Fl7-pipeline","L7：流水线处理器",{"text":177,"minutes":884,"time":885,"words":886},44.505,2670300,8901,{"stem":888,"path":889,"title":890,"date":653,"collapsed":343,"readingTime":891},"posts\u002FUGCourses\u002F5.junior-spring\u002F2.computerOrganization\u002Findex","\u002Fugcourses\u002Fjunior-spring\u002Fcomputerorganization","计算机组成与系统结构",{"text":60,"minutes":892,"time":893,"words":894},0.12,7200,24,{"stem":896,"path":897,"title":898,"date":78,"collapsed":9,"readingTime":899},"posts\u002FUGCourses\u002F5.junior-spring\u002Findex","\u002Fugcourses\u002Fjunior-spring","大三春夏",{"text":80,"minutes":81,"time":81,"words":81},{"stem":901,"path":902,"title":903,"date":78,"collapsed":9,"readingTime":904},"posts\u002FUGCourses\u002Findex","\u002Fugcourses","本科课程",{"text":80,"minutes":81,"time":81,"words":81},{"stem":906,"path":907,"title":908,"date":909,"collapsed":9,"readingTime":910},"posts\u002Fubuntu\u002F1.config","\u002Fubuntu\u002Fconfig","ubuntu 系统配置","2025-08-26 19:38:06",{"text":158,"minutes":911,"time":912,"words":913},3.815,228900,763,{"stem":915,"path":916,"title":917,"date":918,"collapsed":9,"readingTime":919},"posts\u002Fubuntu\u002F2.cadence\u002F1.mmsim","\u002Fubuntu\u002Fcadence\u002Fmmsim","在 Ubuntu 24.04 上安装 Cadence MMSIM 15.1 的兼容性问题","2026-09-09 14:06:40",{"text":158,"minutes":920,"time":921,"words":922},3.5,210000,700,{"stem":924,"path":925,"title":926,"date":918,"collapsed":9,"readingTime":927},"posts\u002Fubuntu\u002F2.cadence\u002F2.innovus","\u002Fubuntu\u002Fcadence\u002Finnovus","Innovus安装",{"text":11,"minutes":928,"time":929,"words":930},2.08,124800,416,{"stem":932,"path":933,"title":934,"date":918,"collapsed":9,"readingTime":935},"posts\u002Fubuntu\u002F2.cadence\u002Findex","\u002Fubuntu\u002Fcadence","Ubuntu24.04安装Cadence 系列软件",{"text":269,"minutes":936,"time":937,"words":938},9.98,598800,1996,{"stem":940,"path":941,"title":942,"date":918,"collapsed":9,"readingTime":943},"posts\u002Fubuntu\u002F3.synopsys","\u002Fubuntu\u002Fsynopsys","Ubuntu 24.04 安装 Synopsys",{"text":269,"minutes":944,"time":945,"words":946},9.555,573300,1911,{"stem":948,"path":949,"title":950,"date":918,"collapsed":9,"readingTime":951},"posts\u002Fubuntu\u002F4.vivado","\u002Fubuntu\u002Fvivado","Ubuntu 24.04 安装 Vivado 2020.1",{"text":60,"minutes":952,"time":953,"words":954},0.62,37200,124,{"stem":956,"path":957,"title":958,"date":918,"collapsed":9,"readingTime":959},"posts\u002Fubuntu\u002F5.migrate","\u002Fubuntu\u002Fmigrate","硬盘迁移系统",{"text":60,"minutes":960,"time":961,"words":962},0.64,38400,128,{"stem":964,"path":965,"title":966,"date":967,"collapsed":9,"readingTime":968},"posts\u002Fubuntu\u002Findex","\u002Fubuntu","Ubuntu装进移动硬盘","2025-08-25 19:38:06",{"text":269,"minutes":969,"time":970,"words":971},9.26,555600,1852,{"id":973,"title":413,"body":974,"categories":5344,"collapsed":9,"date":414,"description":5345,"draft":9,"extension":5346,"hideInArchive":343,"hideInList":343,"image":5347,"meta":5348,"navigation":343,"path":412,"permalink":5347,"published":5347,"readingTime":5350,"recommend":5347,"references":5347,"seo":5351,"sitemap":5352,"stem":411,"tags":5353,"type":5356,"updated":414,"__hash__":5357},"content\u002Fposts\u002FUGCourses\u002F4.junior-autumn\u002F2.ICCAD\u002F11.Detailed\u002F3.Chapter3-ViAndShell.md",{"type":975,"value":976,"toc":5262},"minimark",[977,981,984,989,1091,1093,1097,1152,1154,1158,1205,1207,1211,1249,1251,1255,1307,1309,1313,1402,1404,1408,1455,1457,1461,1501,1503,1507,1570,1572,1576,1647,1649,1653,1719,1721,1725,1788,1790,1794,1852,1854,1858,1915,1917,1921,1982,1984,1988,2051,2053,2057,2073,2075,2079,2148,2150,2154,2225,2227,2231,2259,2261,2265,2322,2324,2328,2429,2431,2435,2498,2500,2503,2535,2537,2541,2594,2596,2600,2621,2623,2627,2650,2652,2656,2706,2708,2712,2781,2783,2787,2803,2805,2809,2862,2864,2868,2893,2902,2904,2908,2995,2997,3001,3054,3056,3060,3111,3113,3117,3149,3151,3155,3214,3216,3220,3262,3264,3268,3310,3312,3316,3353,3355,3359,3391,3393,3396,3527,3529,3533,3538,3553,3592,3666,3668,3672,3730,3732,3736,3783,3785,3789,3844,3846,3850,3875,3877,3881,3886,3893,3895,3899,3963,3965,3969,3987,3989,3992,4000,4002,4005,4020,4022,4026,4134,4136,4140,4147,4191,4193,4197,4203,4251,4253,4257,4263,4308,4310,4314,4320,4383,4385,4389,4438,4440,4444,4493,4495,4499,4569,4571,4575,4651,4653,4657,4699,4701,4705,4717,4723,4725,4729,4788,4794,4796,4800,4841,4847,4849,4853,4915,4921,4923,4927,4984,4990,4992,4996,5058,5064,5066,5070,5127,5133,5135,5139,5167,5173,5198,5200,5204],[978,979,980],"h2",{"id":980},"vi",[982,983],"hr",{},[985,986,988],"h3",{"id":987},"editors","Editors",[990,991,992,996,1060],"ul",{},[993,994,995],"li",{},"编辑器：允许用户交互地编辑纯文本文件的程序。",[993,997,998,999],{},"常见平台与工具：\n",[990,1000,1001,1017,1027,1039,1045],{},[993,1002,1003,1004,1008,1009,1012,1013,1016],{},"MSDOS：",[1005,1006,1007],"code",{"code":1007},"edlin",", ",[1005,1010,1011],{"code":1011},"edit","（仍可在 ",[1005,1014,1015],{"code":1015},"C:\\Windows\\System32"," 找到）。",[993,1018,1019,1020,1008,1023,1026],{},"MS Windows：",[1005,1021,1022],{"code":1022},"notepad",[1005,1024,1025],{"code":1025},"wordpad","。",[993,1028,1029,1030,1008,1033,1035,1036,1026],{},"Unix 早期：",[1005,1031,1032],{"code":1032},"ed",[1005,1034,980],{"code":980},"，之后有增强版 ",[1005,1037,1038],{"code":1038},"vim",[993,1040,1041,1042,1026],{},"更高级使用：GNU ",[1005,1043,1044],{"code":1044},"emacs",[993,1046,1047,1048,1008,1051,1008,1054,1008,1057,1026],{},"其他：",[1005,1049,1050],{"code":1050},"xedit",[1005,1052,1053],{"code":1053},"gedit",[1005,1055,1056],{"code":1056},"nano",[1005,1058,1059],{"code":1059},"pico",[993,1061,1062,1063],{},"文字处理软件（带排版功能）：\n",[990,1064,1065,1080],{},[993,1066,1067,1008,1070,1008,1073,1008,1076,1079],{},[1005,1068,1069],{"code":1069},"WordStar",[1005,1071,1072],{"code":1072},"MSWord",[1005,1074,1075],{"code":1075},"Framemaker",[1005,1077,1078],{"code":1078},"Acrobat"," 等。",[993,1081,1082,1008,1085,1008,1088,1079],{},[1005,1083,1084],{"code":1084},"StarOffice",[1005,1086,1087],{"code":1087},"OpenOffice",[1005,1089,1090],{"code":1090},"LibreOffice",[982,1092],{},[985,1094,1096],{"id":1095},"vi-modes","vi Modes",[990,1098,1099],{},[993,1100,1101,1102],{},"vi 有两大基本模式：\n",[990,1103,1104,1129],{},[993,1105,1106,1110,1111],{},[1107,1108,1109],"strong",{},"Command Mode（命令模式）","：\n",[990,1112,1113,1116,1119],{},[993,1114,1115],{},"启动时默认处于命令模式。",[993,1117,1118],{},"每个按键都被当成编辑命令，而不是文本输入。",[993,1120,1121,1122,1125,1126,1026],{},"输入冒号 ",[1005,1123,1124],{"code":1124},":"," 进入命令行模式，如 ",[1005,1127,1128],{"code":1128},":help",[993,1130,1131,1110,1134],{},[1107,1132,1133],{},"Insert Mode（插入模式）",[990,1135,1136,1139],{},[993,1137,1138],{},"用于输入文本。",[993,1140,1141,1142,1008,1145,1008,1148,1151],{},"通过执行各种插入类命令进入（如 ",[1005,1143,1144],{"code":1144},"i",[1005,1146,1147],{"code":1147},"a",[1005,1149,1150],{"code":1150},"o"," 等）。",[982,1153],{},[985,1155,1157],{"id":1156},"sample-vi-edit-session","Sample vi Edit Session",[990,1159,1160,1199],{},[993,1161,1162,1163],{},"基本编辑流程示例：\n",[1164,1165,1166,1173,1176,1182,1185,1192],"ol",{},[993,1167,1168,1169,1172],{},"在命令行输入：",[1005,1170,1171],{"code":1171},"vi tmp.txt"," 打开文件。",[993,1174,1175],{},"启动后处于 Command Mode。",[993,1177,1178,1179,1181],{},"按下“追加”类命令键（如 ",[1005,1180,1147],{"code":1147},"，在光标后开始输入）。",[993,1183,1184],{},"进入 Insert Mode，输入文本内容。",[993,1186,1187,1188,1191],{},"按 ",[1005,1189,1190],{"code":1190},"ESC"," 返回 Command Mode。",[993,1193,1194,1195,1198],{},"输入 ",[1005,1196,1197],{"code":1197},":wq"," 回车，保存并退出。",[993,1200,1201,1202,1204],{},"示例中展示了在 vi 中输入多行文本、以 ",[1005,1203,1197],{"code":1197}," 结束编辑的流程。",[982,1206],{},[985,1208,1210],{"id":1209},"easier-ways-for-practicing","Easier Ways for Practicing",[990,1212,1213,1227],{},[993,1214,1215,1216,1110,1219],{},"推荐使用 ",[1107,1217,1218],{},"vim 教学工具",[990,1220,1221],{},[993,1222,1223,1224,1026],{},"命令：",[1005,1225,1226],{"code":1226},"vimtutor",[993,1228,1229,1230],{},"先了解有图形界面的 vi 与纯文本 vi 的差异：\n",[990,1231,1232,1239,1242],{},[993,1233,1234,1235,1238],{},"GUI 版：",[1005,1236,1237],{"code":1237},"gvim","（GNU 版），可用命令例如：",[993,1240,1241],{},"sudo apt-get install vim-gnome",[993,1243,1244,1245,1248],{},"课程建议：优先熟悉 ",[1107,1246,1247],{},"文本界面 vi\u002Fvim","，更通用。",[982,1250],{},[985,1252,1254],{"id":1253},"cursor-movement-1","Cursor Movement (1)",[990,1256,1257],{},[993,1258,1259,1260],{},"光标移动方式：\n",[990,1261,1262,1265],{},[993,1263,1264],{},"可用方向键（依终端而定）。",[993,1266,1267,1268,1008,1271,1008,1274,1008,1277,1280,1281],{},"使用 ",[1005,1269,1270],{"code":1270},"h",[1005,1272,1273],{"code":1273},"j",[1005,1275,1276],{"code":1276},"k",[1005,1278,1279],{"code":1279},"l"," 作为替代：\n",[990,1282,1283,1289,1295,1301],{},[993,1284,1285,1288],{},[1005,1286,1287],{"code":1287},"[n] h","：向左移动 n 个字符。",[993,1290,1291,1294],{},[1005,1292,1293],{"code":1293},"[n] j","：向下移动 n 行。",[993,1296,1297,1300],{},[1005,1298,1299],{"code":1299},"[n] k","：向上移动 n 行。",[993,1302,1303,1306],{},[1005,1304,1305],{"code":1305},"[n] l","：向右移动 n 个字符。",[982,1308],{},[985,1310,1312],{"id":1311},"cursor-movement-2","Cursor Movement (2)",[990,1314,1315,1344,1379],{},[993,1316,1317,1318],{},"以屏为单位的移动：\n",[990,1319,1320,1326,1332,1338],{},[993,1321,1322,1325],{},[1005,1323,1324],{"code":1324},"^F","：前进一屏（Forward）。",[993,1327,1328,1331],{},[1005,1329,1330],{"code":1330},"^B","：后退一屏（Back）。",[993,1333,1334,1337],{},[1005,1335,1336],{"code":1336},"^D","：向下移动半屏。",[993,1339,1340,1343],{},[1005,1341,1342],{"code":1342},"^U","：向上移动半屏。",[993,1345,1346,1347],{},"以行号或行内位置移动：\n",[990,1348,1349,1355,1361,1367,1373],{},[993,1350,1351,1354],{},[1005,1352,1353],{"code":1353},"G","：移动到文件最后一行。",[993,1356,1357,1360],{},[1005,1358,1359],{"code":1359},"[n] G","：移动到第 n 行；若不带 n，则到最后一行。",[993,1362,1363,1366],{},[1005,1364,1365],{"code":1365},"$","：移到当前行行尾。",[993,1368,1369,1372],{},[1005,1370,1371],{"code":1371},"^","：移到当前行第一个非空白字符。",[993,1374,1375,1378],{},[1005,1376,1377],{"code":1377},"0","：移到当前行开头（列 0）。",[993,1380,1381,1382],{},"以单词为单位移动：\n",[990,1383,1384,1390,1396],{},[993,1385,1386,1389],{},[1005,1387,1388],{"code":1388},"[n] w","：向前移动 n 个单词开头。",[993,1391,1392,1395],{},[1005,1393,1394],{"code":1394},"[n] b","：向后移动 n 个单词开头。",[993,1397,1398,1401],{},[1005,1399,1400],{"code":1400},"e","：移动到当前或下一个单词结尾。",[982,1403],{},[985,1405,1407],{"id":1406},"cursor-movement-by-matching","Cursor Movement by Matching",[990,1409,1410],{},[993,1411,1412,1413],{},"按字符\u002F模式匹配移动：\n",[990,1414,1415,1425,1431,1437,1443,1449],{},[993,1416,1417,1420,1421,1424],{},[1005,1418,1419],{"code":1419},"f \u003Cchar>","：在当前行向前找到下一个 ",[1005,1422,1423],{"code":1423},"\u003Cchar>"," 并移动到那里。",[993,1426,1427,1430],{},[1005,1428,1429],{"code":1429},"\u002F pattern","：向下搜索 pattern，并把光标移动到匹配位置。",[993,1432,1433,1436],{},[1005,1434,1435],{"code":1435},"? pattern","：向上搜索 pattern。",[993,1438,1439,1442],{},[1005,1440,1441],{"code":1441},"n","：重复上一次搜索，继续找下一个匹配。",[993,1444,1445,1448],{},[1005,1446,1447],{"code":1447},"N","：重复上一次搜索，反向搜索。",[993,1450,1451,1454],{},[1005,1452,1453],{"code":1453},"%","：在括号、花括号等成对符号间跳转匹配。",[982,1456],{},[985,1458,1460],{"id":1459},"inserting-text","Inserting Text",[990,1462,1463],{},[993,1464,1465,1466],{},"文本插入\u002F追加命令：\n",[990,1467,1468,1473,1478,1484,1490,1495],{},[993,1469,1470,1472],{},[1005,1471,1144],{"code":1144},"：在光标前开始插入。",[993,1474,1475,1477],{},[1005,1476,1147],{"code":1147},"：在光标后开始追加。",[993,1479,1480,1483],{},[1005,1481,1482],{"code":1482},"I","：在当前行行首（文本开始位置）插入。",[993,1485,1486,1489],{},[1005,1487,1488],{"code":1488},"A","：在当前行行尾追加。",[993,1491,1492,1494],{},[1005,1493,1150],{"code":1150},"：在当前行下方新开一行，并进入插入模式。",[993,1496,1497,1500],{},[1005,1498,1499],{"code":1499},"O","：在当前行上方新开一行，并进入插入模式。",[982,1502],{},[985,1504,1506],{"id":1505},"deleting-text","Deleting Text",[990,1508,1509,1536,1547],{},[993,1510,1511,1512],{},"删除行与单词：\n",[990,1513,1514,1520,1530],{},[993,1515,1516,1519],{},[1005,1517,1518],{"code":1518},"dd","：删除当前整行。",[993,1521,1522,1525,1526,1529],{},[1005,1523,1524],{"code":1524},"[n] dd"," 或 ",[1005,1527,1528],{"code":1528},"d [n] d","：删除连续 n 行。",[993,1531,1532,1535],{},[1005,1533,1534],{"code":1534},"[n] dw","：删除 n 个单词。",[993,1537,1538,1539],{},"删除到行尾：\n",[990,1540,1541],{},[993,1542,1543,1546],{},[1005,1544,1545],{"code":1545},"D","：从光标处删除到当前行末尾。",[993,1548,1549,1550],{},"删除字符：\n",[990,1551,1552,1558,1564],{},[993,1553,1554,1557],{},[1005,1555,1556],{"code":1556},"x","：删除当前字符。",[993,1559,1560,1563],{},[1005,1561,1562],{"code":1562},"[n] x","：删除光标起始的 n 个字符。",[993,1565,1566,1569],{},[1005,1567,1568],{"code":1568},"[n] X","：向前删除 n 个字符（类似多次退格）。",[982,1571],{},[985,1573,1575],{"id":1574},"changing-commands-1","Changing Commands (1)",[990,1577,1578,1640],{},[993,1579,1580,1581],{},"修改类命令：\n",[990,1582,1583,1593,1602,1622,1628,1634],{},[993,1584,1585,1588,1589,1592],{},[1005,1586,1587],{"code":1587},"s"," \u002F ",[1005,1590,1591],{"code":1591},"S","：替换字符或整行（具体行为随实现）。",[993,1594,1595,1588,1598,1601],{},[1005,1596,1597],{"code":1597},"r",[1005,1599,1600],{"code":1600},"R","：替换字符或连续替换。",[993,1603,1604,1607,1608],{},[1005,1605,1606],{"code":1606},"c","：change（“改写”），配合移动使用：\n",[990,1609,1610,1616],{},[993,1611,1612,1615],{},[1005,1613,1614],{"code":1614},"[n] cw","：修改接下来的 n 个单词。",[993,1617,1618,1621],{},[1005,1619,1620],{"code":1620},"c$","：从光标处修改到行尾。",[993,1623,1624,1627],{},[1005,1625,1626],{"code":1626},"~","：切换光标处字符大小写。",[993,1629,1630,1633],{},[1005,1631,1632],{"code":1632},"J","：将当前行和下一行合并为一行。",[993,1635,1636,1639],{},[1005,1637,1638],{"code":1638},"u","：撤销上一次操作。",[993,1641,1642,1643,1646],{},"幻灯片提出问题：如何 redo（重做）？（后续通过 ",[1005,1644,1645],{"code":1645},"."," 或其他机制实现）。",[982,1648],{},[985,1650,1652],{"id":1651},"changing-commands-2","Changing Commands (2)",[990,1654,1655],{},[993,1656,1657,1658],{},"重复和拷贝相关：\n",[990,1659,1660,1665,1674,1680,1686,1692,1709,1712],{},[993,1661,1662,1664],{},[1005,1663,1645],{"code":1645},"：重复上一次“修改类”操作。",[993,1666,1667,1525,1670,1673],{},[1005,1668,1669],{"code":1669},"[n] yy",[1005,1671,1672],{"code":1672},"y [n] y","：将 n 行“yank”（复制）到缓冲区。",[993,1675,1676,1679],{},[1005,1677,1678],{"code":1678},"[n] yw","：复制 n 个单词到缓冲区。",[993,1681,1682,1685],{},[1005,1683,1684],{"code":1684},"p","：在光标之后粘贴 yank 或删除的内容。",[993,1687,1688,1691],{},[1005,1689,1690],{"code":1690},"P","：在光标之前粘贴。",[993,1693,1694,1588,1697,1700,1701,1588,1704,1588,1706,1708],{},[1005,1695,1696],{"code":1696},"v",[1005,1698,1699],{"code":1699},"V","：可视模式，结合 ",[1005,1702,1703],{"code":1703},"y",[1005,1705,1556],{"code":1556},[1005,1707,1684],{"code":1684}," 做可视选择复制\u002F删除\u002F粘贴。",[993,1710,1711],{},"文本缓冲区中存在默认缓冲与命名缓冲。",[993,1713,1714,1715,1718],{},"示例组合：",[1005,1716,1717],{"code":1717},"4dd10jp","（删除 4 行并在第 10 行之后粘贴等）。",[982,1720],{},[985,1722,1724],{"id":1723},"command-line-mode","Command Line Mode",[990,1726,1727,1733],{},[993,1728,1729,1730,1732],{},"通过输入冒号 ",[1005,1731,1124],{"code":1124}," 进入命令行模式。",[993,1734,1735,1736],{},"常用行范围标记：\n",[990,1737,1738,1744,1750,1755,1760,1769],{},[993,1739,1740,1741,1026],{},"单个行号：",[1005,1742,1743],{"code":1743},"20",[993,1745,1746,1747,1026],{},"行号范围：",[1005,1748,1749],{"code":1749},"1,5",[993,1751,1752,1754],{},[1005,1753,1645],{"code":1645},"：当前行。",[993,1756,1757,1759],{},[1005,1758,1365],{"code":1365},"：最后一行。",[993,1761,1762,1764,1765,1768],{},[1005,1763,1453],{"code":1453},"：相当于 ",[1005,1766,1767],{"code":1767},"1,$","（整个文件）。",[993,1770,1771,1774,1775,1778,1779,1774,1782,1774,1785,1079],{},[1005,1772,1773],{"code":1773},"+","、",[1005,1776,1777],{"code":1777},"-","：表示相对行，比如 ",[1005,1780,1781],{"code":1781},"+5",[1005,1783,1784],{"code":1784},"-10",[1005,1786,1787],{"code":1787},"$-3",[982,1789],{},[985,1791,1793],{"id":1792},"file-manipulation","File Manipulation",[990,1795,1796,1818,1835],{},[993,1797,1798,1799],{},"写文件相关：\n",[990,1800,1801,1807,1812],{},[993,1802,1803,1806],{},[1005,1804,1805],{"code":1805},":[n1,n2]w[>>][file]","：将范围内的文本写入文件，可选择追加。",[993,1808,1809,1811],{},[1005,1810,1197],{"code":1197},"：写入并退出。",[993,1813,1814,1817],{},[1005,1815,1816],{"code":1816},":w!","：强制覆盖原文件。",[993,1819,1820,1821],{},"退出相关：\n",[990,1822,1823,1829],{},[993,1824,1825,1828],{},[1005,1826,1827],{"code":1827},":q","：在无修改时退出。",[993,1830,1831,1834],{},[1005,1832,1833],{"code":1833},":q!","：不保存修改直接退出。",[993,1836,1837,1838],{},"其他：\n",[990,1839,1840,1846],{},[993,1841,1842,1845],{},[1005,1843,1844],{"code":1844},":![cmd]","：执行外部 shell 命令。",[993,1847,1848,1851],{},[1005,1849,1850],{"code":1850},":r [file]","：在光标处读入另一个文件的内容。",[982,1853],{},[985,1855,1857],{"id":1856},"configuring-vi-session","Configuring vi Session",[990,1859,1860,1904],{},[993,1861,1267,1862,1865,1866],{},[1005,1863,1864],{"code":1864},":set"," 配置 vi 行为：\n",[990,1867,1868,1874,1880,1886,1892,1895],{},[993,1869,1870,1873],{},[1005,1871,1872],{"code":1872},":set all","：显示所有当前配置项。",[993,1875,1876,1879],{},[1005,1877,1878],{"code":1878},":set ignorecase","：搜索时忽略大小写。",[993,1881,1882,1885],{},[1005,1883,1884],{"code":1884},":set number","：显示行号。",[993,1887,1888,1891],{},[1005,1889,1890],{"code":1890},":set nonumber","：关闭行号显示。",[993,1893,1894],{},"示例：",[993,1896,1897,1900,1901,1903],{},[1898,1899],"set",{}," nu\n",[1898,1902],{}," nonu",[993,1905,1906,1907,1910,1911,1914],{},"其他常用选项包括：",[1005,1908,1909],{"code":1909},"wrap","（是否折行）、",[1005,1912,1913],{"code":1913},"indent","（缩进）等。",[982,1916],{},[985,1918,1920],{"id":1919},"line-manipulation","Line Manipulation",[990,1922,1923,1934,1954],{},[993,1924,1925,1926],{},"行定位：\n",[990,1927,1928],{},[993,1929,1930,1933],{},[1005,1931,1932],{"code":1932},":number","：跳转到指定行。",[993,1935,1936,1937],{},"行移动与复制：\n",[990,1938,1939,1945],{},[993,1940,1941,1944],{},[1005,1942,1943],{"code":1943},":n1,n2mn3","：将 n1～n2 的行移动到 n3 行之后。",[993,1946,1947,1525,1950,1953],{},[1005,1948,1949],{"code":1949},":n1,n2tn3",[1005,1951,1952],{"code":1952},":n1,n2copy n3","：复制行到 n3 之后。",[993,1955,1956,1957],{},"删除：\n",[990,1958,1959,1965],{},[993,1960,1961,1964],{},[1005,1962,1963],{"code":1963},":n1,n2d","：删除范围行。",[993,1966,1967,1968],{},"示例：\n",[990,1969,1970,1976],{},[993,1971,1972,1975],{},[1005,1973,1974],{"code":1974},":.,$-2d","：从当前行到倒数第 2 行删除。",[993,1977,1978,1981],{},[1005,1979,1980],{"code":1980},":1,.d","：删除从第 1 行到当前行。",[982,1983],{},[985,1985,1987],{"id":1986},"substitution","Substitution",[990,1989,1990,2000],{},[993,1991,1992,1993],{},"替换命令基本格式：\n",[990,1994,1995],{},[993,1996,1997],{},[1005,1998,1999],{"code":1999},":[Addr]s\u002Fold-expr\u002Fnew-string\u002F[g]",[993,2001,1967,2002],{},[990,2003,2004,2017,2029,2041],{},[993,2005,2006,2009,2010,2013,2014,1026],{},[1005,2007,2008],{"code":2008},":s\u002Fhte\u002Fthe\u002Fg","：当前行将所有 ",[1005,2011,2012],{"code":2012},"hte"," 换成 ",[1005,2015,2016],{"code":2016},"the",[993,2018,2019,2022,2023,2013,2026,1026],{},[1005,2020,2021],{"code":2021},":2,30s\u002Fuse\u002Fused","：第 2～30 行将 ",[1005,2024,2025],{"code":2025},"use",[1005,2027,2028],{"code":2028},"used",[993,2030,2031,2034,2035,2013,2038,1026],{},[1005,2032,2033],{"code":2033},":1,$s\u002FOct\\.\u002FNov.","：整个文件将 ",[1005,2036,2037],{"code":2037},"Oct.",[1005,2039,2040],{"code":2040},"Nov.",[993,2042,2043,2046,2047,2050],{},[1005,2044,2045],{"code":2045},":%s\u002FOct\\.\u002FNov.\u002Fg","：同样是全文件替换、并加 ",[1005,2048,2049],{"code":2049},"g"," 做每行全局替换。",[982,2052],{},[985,2054,2056],{"id":2055},"regular-expression-syntax-1","Regular Expression Syntax (1)",[990,2058,2059],{},[993,2060,2061,2062],{},"正则表达式（Regular Expressions, RE）：\n",[990,2063,2064,2067,2070],{},[993,2065,2066],{},"用于在文本中做模式匹配。",[993,2068,2069],{},"由普通字符和特殊字符（元字符）组成。",[993,2071,2072],{},"与 Shell 中匹配文件名的通配符不同（后续专门区分）。",[982,2074],{},[985,2076,2078],{"id":2077},"meta-characters-as-wild-cards","Meta-Characters as Wild Cards",[990,2080,2081],{},[993,2082,2083,2084,1110,2087],{},"通配符元字符用于 ",[1107,2085,2086],{},"命令行中文件名匹配",[990,2088,2089,2095,2101,2107,2113,2123,2133,2140],{},[993,2090,2091,2094],{},[1005,2092,2093],{"code":2093},"?","：匹配任意单个字符。",[993,2096,2097,2100],{},[1005,2098,2099],{"code":2099},"*","：匹配任意长度（0 个或更多）的字符串。",[993,2102,2103,2106],{},[1005,2104,2105],{"code":2105},"[abc...]","：匹配括号中任一字符。",[993,2108,2109,2112],{},[1005,2110,2111],{"code":2111},"[a-e]","：匹配 a～e 之间任一字符。",[993,2114,2115,2118,2119,2122],{},[1005,2116,2117],{"code":2117},"[!def]","：匹配不在 d,e,f 中的字符（",[1005,2120,2121],{"code":2121},"sh\u002Fbash","）。",[993,2124,2125,2128,2129,2132],{},[1005,2126,2127],{"code":2127},"{abc,bcd,cde}","：匹配集合中任一串（",[1005,2130,2131],{"code":2131},"bash\u002Fcsh","，逗号分隔且无空格）。",[993,2134,2135,2137,2138,2122],{},[1005,2136,1626],{"code":1626},"：当前用户家目录（",[1005,2139,2131],{"code":2131},[993,2141,2142,2145,2146,2122],{},[1005,2143,2144],{"code":2144},"~user","：指定用户的家目录（",[1005,2147,2131],{"code":2131},[982,2149],{},[985,2151,2153],{"id":2152},"where-are-they-being-used","Where Are They Being Used?",[990,2155,2156,2164,2204,2219],{},[993,2157,2158,2159],{},"通配符元字符主要用于：\n",[990,2160,2161],{},[993,2162,2163],{},"Shell 命令涉及文件名时的匹配。",[993,2165,2166,2167],{},"正则表达式（REPs）中的元字符主要用于：\n",[990,2168,2169,2181,2201],{},[993,2170,2171,2172,1008,2175,1008,2178,1079],{},"文本工具：",[1005,2173,2174],{"code":2174},"grep",[1005,2176,2177],{"code":2177},"sed",[1005,2179,2180],{"code":2180},"awk",[993,2182,2183,2184],{},"vi 中：\n",[990,2185,2186,2195],{},[993,2187,2188,2191,2192,2194],{},[1005,2189,2190],{"code":2190},"\u002F"," 和 ",[1005,2193,2093],{"code":2093}," 搜索命令。",[993,2196,2197,2200],{},[1005,2198,2199],{"code":2199},":s"," 替换命令。",[993,2202,2203],{},"脚本语言：Tcl、Perl、Python 的正则模块等。",[993,2205,2206,2207],{},"示例应用：\n",[990,2208,2209],{},[993,2210,2211,2212,1525,2215,2218],{},"查找单元名字以 ",[1005,2213,2214],{"code":2214},"CLK",[1005,2216,2217],{"code":2217},"clk"," 开头的标准单元名。",[993,2220,2221,2222,1026],{},"结论：",[1107,2223,2224],{},"通配符与正则表达式不是同一套东西",[982,2226],{},[985,2228,2230],{"id":2229},"regular-expression-syntax-2","Regular Expression Syntax (2)",[990,2232,2233,2256],{},[993,2234,2235,2236],{},"正则表达式的三种基本形式：\n",[990,2237,2238,2244,2250],{},[993,2239,2240,2243],{},[1107,2241,2242],{},"Anchors","（锚定）：绑定到行的特定位置。",[993,2245,2246,2249],{},[1107,2247,2248],{},"Character sets","（字符集）：在某位置匹配一个字符。",[993,2251,2252,2255],{},[1107,2253,2254],{},"Modifiers","（修饰符）：指定前一个表达式重复次数。",[993,2257,2258],{},"正则表达式可以组合，构成更长的模式。",[982,2260],{},[985,2262,2264],{"id":2263},"regular-expression-syntax-3","Regular Expression Syntax (3)",[990,2266,2267],{},[993,2268,2269,2270],{},"常用元字符：\n",[990,2271,2272,2277,2282,2288,2294,2304,2310,2316],{},[993,2273,2274,2276],{},[1005,2275,1645],{"code":1645},"：匹配除换行外任意单个字符。",[993,2278,2279,2281],{},[1005,2280,2099],{"code":2099},"：匹配前一个表达式的 0 次或多次重复。",[993,2283,2284,2287],{},[1005,2285,2286],{"code":2286},"[abc]","：匹配任一括号内字符。",[993,2289,2290,2293],{},[1005,2291,2292],{"code":2292},"[a-d]","：匹配 a～d 范围内的任一字符。",[993,2295,2296,2299,2300,2303],{},[1005,2297,2298],{"code":2298},"[^abc]","：匹配",[1107,2301,2302],{},"不在","集合中的任一字符。",[993,2305,2306,2309],{},[1005,2307,2308],{"code":2308},"^exp","：模式必须从行首开始。",[993,2311,2312,2315],{},[1005,2313,2314],{"code":2314},"exp$","：模式必须在行尾结束。",[993,2317,2318,2321],{},[1005,2319,2320],{"code":2320},"\\","：将下一个字符“转义”为普通含义。",[982,2323],{},[985,2325,2327],{"id":2326},"sample-reps-and-meanings","Sample REPs and Meanings",[990,2329,2330,2336,2359,2374,2380,2386,2395,2405,2411,2417,2423],{},[993,2331,2332,2335],{},[1005,2333,2334],{"code":2334},"cat","：匹配字符串 “cat”。",[993,2337,2338,2341,2342,1008,2344,1008,2347,1008,2350,1008,2353,1008,2356,1079],{},[1005,2339,2340],{"code":2340},".at","：匹配 ",[1005,2343,2334],{"code":2334},[1005,2345,2346],{"code":2346},"rat",[1005,2348,2349],{"code":2349},"mat",[1005,2351,2352],{"code":2352},"bat",[1005,2354,2355],{"code":2355},"fat",[1005,2357,2358],{"code":2358},"hat",[993,2360,2361,2364,2365,2367,2368,2370,2371,1026],{},[1005,2362,2363],{"code":2363},"xy*z","：匹配一个 ",[1005,2366,1556],{"code":1556},"，后跟 0 个或多个 ",[1005,2369,1703],{"code":1703},"，再跟 ",[1005,2372,2373],{"code":2373},"z",[993,2375,2376,2379],{},[1005,2377,2378],{"code":2378},"^cat","：匹配行首为 “cat” 的行。",[993,2381,2382,2385],{},[1005,2383,2384],{"code":2384},"cat$","：匹配行尾为 “cat” 的行。",[993,2387,2388,2391,2392,2394],{},[1005,2389,2390],{"code":2390},"\\*","：匹配字符 ",[1005,2393,2099],{"code":2099}," 本身。",[993,2396,2397,2341,2400,1525,2402,1026],{},[1005,2398,2399],{"code":2399},"[cC]at",[1005,2401,2334],{"code":2334},[1005,2403,2404],{"code":2404},"Cat",[993,2406,2407,2410],{},[1005,2408,2409],{"code":2409},"[^a-zA-Z]","：匹配任意非字母字符。",[993,2412,2413,2416],{},[1005,2414,2415],{"code":2415},"[0-9]$","：匹配以数字结尾的行。",[993,2418,2419,2422],{},[1005,2420,2421],{"code":2421},"[A-Z][A-Z]*","：匹配一个或多个大写字母。",[993,2424,2425,2428],{},[1005,2426,2427],{"code":2427},"[A-Z]*","：匹配 0 个或多个大写字母（即理论上可匹配“任何东西”）。",[982,2430],{},[985,2432,2434],{"id":2433},"more-on-vi","More on vi",[990,2436,2437,2468,2481],{},[993,2438,2439,2440],{},"多文件编辑：\n",[990,2441,2442,2451],{},[993,2443,2444,2447,2448,1026],{},[1005,2445,2446],{"code":2446},"vi file-list","：一次打开多个文件，例如：",[1005,2449,2450],{"code":2450},"vi *.c",[993,2452,2453,2454],{},"在 vi 中：\n",[990,2455,2456,2462],{},[993,2457,2458,2461],{},[1005,2459,2460],{"code":2460},":n","：切换到下一个文件。",[993,2463,2464,2467],{},[1005,2465,2466],{"code":2466},":rew","：回到第一个文件。",[993,2469,2470,2471],{},"显示当前编辑文件信息：\n",[990,2472,2473],{},[993,2474,2475,1525,2478,1026],{},[1005,2476,2477],{"code":2477},":f",[1005,2479,2480],{"code":2480},"^G",[993,2482,2483,2484],{},"特殊打开方式：\n",[990,2485,2486,2492],{},[993,2487,2488,2491],{},[1005,2489,2490],{"code":2490},"vi -R filename","：只读方式打开。",[993,2493,2494,2497],{},[1005,2495,2496],{"code":2496},"vi -r filename","：恢复模式打开（崩溃后恢复）。",[982,2499],{},[978,2501,497],{"id":2502},"shells",[990,2504,2505,2519],{},[993,2506,2507,2508],{},"Shell 位于用户和操作系统之间：\n",[990,2509,2510,2513,2516],{},[993,2511,2512],{},"作为命令解释器。",[993,2514,2515],{},"读取用户输入。",[993,2517,2518],{},"将命令翻译成系统动作。",[993,2520,2521,2522],{},"查看当前登录 shell：\n",[990,2523,2524,2529],{},[993,2525,2526,1026],{},[1005,2527,2528],{"code":2528},"echo $SHELL",[993,2530,2531,2534],{},[1005,2532,2533],{"code":2533},"cat \u002Fetc\u002Fshells","：查看系统支持的所有 shell 列表。",[982,2536],{},[985,2538,2540],{"id":2539},"shell-types","Shell Types",[990,2542,2543,2560,2583],{},[993,2544,2545,2546],{},"主要 shell 类型：\n",[990,2547,2548,2554],{},[993,2549,2550,2551,1026],{},"Bourne Shell：",[1005,2552,2553],{"code":2553},"sh",[993,2555,2556,2557,1026],{},"C Shell：",[1005,2558,2559],{"code":2559},"csh",[993,2561,2562,2563],{},"基于 Bourne Shell 的：\n",[990,2564,2565,2571,2577],{},[993,2566,2567,2570],{},[1005,2568,2569],{"code":2569},"ksh","（Korn shell）。",[993,2572,2573,2576],{},[1005,2574,2575],{"code":2575},"bash","（Bourne-Again Shell）。",[993,2578,2579,2582],{},[1005,2580,2581],{"code":2581},"zsh","（Z Shell）。",[993,2584,2585,2586],{},"基于 C Shell 的：\n",[990,2587,2588],{},[993,2589,2590,2593],{},[1005,2591,2592],{"code":2592},"tcsh","（T C shell）。",[982,2595],{},[985,2597,2599],{"id":2598},"bourne-shell","Bourne Shell",[990,2601,2602,2616],{},[993,2603,2604,2605],{},"特点：\n",[990,2606,2607,2610,2613],{},[993,2608,2609],{},"拥有较好的 I\u002FO 控制功能，适合写脚本。",[993,2611,2612],{},"交互性较弱，对普通用户交互不够方便。",[993,2614,2615],{},"很多基于 Bourne 的 shell 在交互方面做了改进。",[993,2617,2618,2619,1026],{},"默认提示符：",[1005,2620,1365],{"code":1365},[982,2622],{},[985,2624,2626],{"id":2625},"c-shell","C Shell",[990,2628,2629,2632,2635,2638,2646],{},[993,2630,2631],{},"由 Bill Joy 编写。",[993,2633,2634],{},"语法类似 C 语言，更适合写“类 C 风格”的脚本。",[993,2636,2637],{},"I\u002FO 控制不如 Bourne shell 方便。",[993,2639,2640,2641],{},"交互体验相对更好：\n",[990,2642,2643],{},[993,2644,2645],{},"支持作业控制（job control）、命令历史（history）等。",[993,2647,2618,2648,1026],{},[1005,2649,1453],{"code":1453},[982,2651],{},[985,2653,2655],{"id":2654},"bourne-again-shell","Bourne-Again Shell",[990,2657,2658,2661,2675],{},[993,2659,2660],{},"GNU 项目开发的自由软件。",[993,2662,2663,2664],{},"提供：\n",[990,2665,2666,2669,2672],{},[993,2667,2668],{},"交互式命令行编辑。",[993,2670,2671],{},"支持作业控制（在支持的体系结构上）。",[993,2673,2674],{},"类 csh 的历史替换、花括号扩展等特性。",[993,2676,2677,1110,2679],{},[1005,2678,2575],{"code":2575},[990,2680,2681,2689,2695,2700],{},[993,2682,2683,2684,1774,2686,2688],{},"交互特性吸收了 ",[1005,2685,2559],{"code":2559},[1005,2687,2569],{"code":2569}," 的优点。",[993,2690,2691,2692,2694],{},"编程语言上兼容 Bourne shell (",[1005,2693,2553],{"code":2553},")。",[993,2696,2697,2698,1026],{},"Linux 平台上非常常见，默认提示符通常也是 ",[1005,2699,1365],{"code":1365},[993,2701,2702,2703,1151],{},"支持便捷的命令行编辑（方向键、Tab、",[1005,2704,2705],{"code":2705},"CTRL+L",[982,2707],{},[985,2709,2711],{"id":2710},"meta-characters-again","Meta-Characters Again",[990,2713,2714,2729,2770],{},[993,2715,2716,2717],{},"Shell 命令行中常见的特殊字符：\n",[990,2718,2719],{},[993,2720,2721,2724,2725,2728],{},[1005,2722,2723],{"code":2723},"\u002F \\ \" \\"," * : ; ' ^ ? ~ { } ( ) ",[2726,2727],"span",{}," ~ ! $ \u003C > | & #@% ,+=`",[993,2730,1967,2731],{},[990,2732,2733,2742,2751,2764],{},[993,2734,2735,2738,2739,2741],{},[1005,2736,2737],{"code":2737},"ls *","：列出当前目录下所有不以 ",[1005,2740,1645],{"code":1645}," 开头的文件。",[993,2743,2744,2747,2748,1026],{},[1005,2745,2746],{"code":2746},"ls chpt[1-4]","：等价于 ",[1005,2749,2750],{"code":2750},"ls chpt1 chpt2 chpt3 chpt4",[993,2752,2753,2756,2757,1774,2760,2763],{},[1005,2754,2755],{"code":2755},"ls m?n","：匹配形如 ",[1005,2758,2759],{"code":2759},"man",[1005,2761,2762],{"code":2762},"men"," 的三个字符文件名。",[993,2765,2766,2769],{},[1005,2767,2768],{"code":2768},"ls [a-z]*","：匹配以小写字母开头的文件（与正则不同）。",[993,2771,2772,2773,1774,2775,2777,2778,2780],{},"注意：与前面“Wild Card”部分相联系，",[1005,2774,2099],{"code":2099},[1005,2776,2093],{"code":2093}," 等在 shell 中匹配文件名；",[1005,2779,2320],{"code":2320}," 用于转义，与正则中的用法类似。",[982,2782],{},[985,2784,2786],{"id":2785},"io-redirection-and-piping-in-unix","I\u002FO Redirection and Piping in Unix",[990,2788,2789,2792,2795],{},[993,2790,2791],{},"输出重定向到文件。",[993,2793,2794],{},"输入重定向自文件。",[993,2796,2797,2798],{},"管道（piping）：\n",[990,2799,2800],{},[993,2801,2802],{},"一个命令的输出作为下一个命令的输入。",[982,2804],{},[985,2806,2808],{"id":2807},"standard-file-descriptors-1","Standard File Descriptors (1)",[990,2810,2811,2834,2837,2854],{},[993,2812,2813,2814],{},"标准文件描述符：\n",[990,2815,2816,2822,2828],{},[993,2817,2818,2821],{},[1005,2819,2820],{"code":2820},"stdin","：标准输入。",[993,2823,2824,2827],{},[1005,2825,2826],{"code":2826},"stdout","：标准输出。",[993,2829,2830,2833],{},[1005,2831,2832],{"code":2832},"stderr","：标准错误输出。",[993,2835,2836],{},"在 shell 中一般用编号引用，而不是名字。",[993,2838,2839,2840],{},"默认情况下：\n",[990,2841,2842,2847],{},[993,2843,2844,2846],{},[1005,2845,2820],{"code":2820}," 来自键盘。",[993,2848,2849,2191,2851,2853],{},[1005,2850,2826],{"code":2826},[1005,2852,2832],{"code":2832}," 输出到终端屏幕。",[993,2855,2856,2857],{},"可以重定向：\n",[990,2858,2859],{},[993,2860,2861],{},"把输入、输出、或错误重定向到文件或其他命令。",[982,2863],{},[985,2865,2867],{"id":2866},"standard-file-descriptors-2","Standard File Descriptors (2)",[990,2869,2870,2890],{},[993,2871,2872,2873],{},"当前 shell 中常用的描述符号：\n",[990,2874,2875,2880,2885],{},[993,2876,2877,2879],{},[1005,2878,2820],{"code":2820},"：0。",[993,2881,2882,2884],{},[1005,2883,2826],{"code":2826},"：1。",[993,2886,2887,2889],{},[1005,2888,2832],{"code":2832},"：2。",[993,2891,2892],{},"在 C 语言中的使用（示例）：",[2894,2895,2900],"pre",{"className":2896,"code":2898,"language":1606,"meta":2899},[2897],"language-c","#include \u003Cstdio.h>\nint main(int argc, char\\*\\* argv) {\n    fprintf(stdout, \"abcd\\n\"); \u002F\u002F 等价于 printf(\"abcd\\n\");\n    fprintf(stderr, \"efgh\\n\");\n}\n","",[1005,2901,2898],{"__ignoreMap":2899},[982,2903],{},[985,2905,2907],{"id":2906},"file-redirection","File Redirection",[990,2909,2910,2939,2953,2967,2973,2976],{},[993,2911,2912,2913],{},"标准输出重定向：\n",[990,2914,2915,2927,2930,2936],{},[993,2916,2917,1774,2920,1525,2923,2926],{},[1005,2918,2919],{"code":2919},">",[1005,2921,2922],{"code":2922},">!",[1005,2924,2925],{"code":2925},">|","：覆盖输出到文件。",[993,2928,2929],{},"command > outfile",[993,2931,2932,2935],{},[1005,2933,2934],{"code":2934},">>","：追加输出到文件。",[993,2937,2938],{},"command >> outfile",[993,2940,2941,2942],{},"标准输入重定向：\n",[990,2943,2944,2950],{},[993,2945,2946,2949],{},[1005,2947,2948],{"code":2948},"\u003C","：从文件读入作为标准输入。",[993,2951,2952],{},"command \u003C infile",[993,2954,2955,2956],{},"管道：\n",[990,2957,2958,2964],{},[993,2959,2960,2963],{},[1005,2961,2962],{"code":2962},"|","：把前一命令输出作为后一命令输入。",[993,2965,2966],{},"command1 | command2",[993,2968,2969,2972],{},[1005,2970,2971],{"code":2971},"tee","：复制标准输出，一边显示，一边写文件：",[993,2974,2975],{},"ls -l | tee lslist",[993,2977,2978,2979],{},"丢弃输出：\n",[990,2980,2981,2988],{},[993,2982,2983,2984,2987],{},"重定向到 ",[1005,2985,2986],{"code":2986},"\u002Fdev\u002Fnull","，作为“黑洞”：",[993,2989,2990],{},[2991,2992,2993],"blockquote",{},[1684,2994,2986],{},[982,2996],{},[985,2998,3000],{"id":2999},"file-redirection-csh","File Redirection (csh)",[990,3002,3003,3043,3051],{},[993,3004,3005,3006],{},"C Shell 中的特殊写法：\n",[990,3007,3008,3022,3033],{},[993,3009,3010,3013,3014,2191,3016,3018,3019,1026],{},[1005,3011,3012],{"code":3012},">& file","：把 ",[1005,3015,2826],{"code":2826},[1005,3017,2832],{"code":2832}," 都重定向到 ",[1005,3020,3021],{"code":3021},"file",[993,3023,3024,3027,3028,2191,3030,3032],{},[1005,3025,3026],{"code":3026},">> & file","：追加写入 ",[1005,3029,2826],{"code":2826},[1005,3031,2832],{"code":2832}," 到文件。",[993,3034,3035,3013,3038,2191,3040,3042],{},[1005,3036,3037],{"code":3037},"|& command",[1005,3039,2826],{"code":2826},[1005,3041,2832],{"code":2832}," 都通过管道给下一个命令。",[993,3044,3045,3046,2191,3048,3050],{},"将 ",[1005,3047,2826],{"code":2826},[1005,3049,2832],{"code":2832}," 分开重定向的示例：",[993,3052,3053],{},"% (command > outfile) >& errfile",[982,3055],{},[985,3057,3059],{"id":3058},"file-redirection-shbash","File Redirection (sh\u002Fbash)",[990,3061,3062,3072,3085,3095,3105,3108],{},[993,3063,3064,3065],{},"仅重定向标准错误：\n",[990,3066,3067],{},[993,3068,3069,1026],{},[1005,3070,3071],{"code":3071},"2> file",[993,3073,3074,3075],{},"同时重定向标准输出与错误：\n",[990,3076,3077],{},[993,3078,3079,1525,3082,1026],{},[1005,3080,3081],{"code":3081},"> file 2>&1",[1005,3083,3084],{"code":3084},"&> file",[993,3086,3087,3088],{},"追加重定向：\n",[990,3089,3090],{},[993,3091,3092,1026],{},[1005,3093,3094],{"code":3094},">> file 2>&1",[993,3096,3097,3098],{},"把两者一起通过管道传给命令：\n",[990,3099,3100],{},[993,3101,3102,1026],{},[1005,3103,3104],{"code":3104},"2>&1 | command",[993,3106,3107],{},"将二者分别重定向：",[993,3109,3110],{},"$ command > outfile 2> errfile",[982,3112],{},[985,3114,3116],{"id":3115},"other-special-command-symbols","Other Special Command Symbols",[990,3118,3119,3125,3131,3137,3143],{},[993,3120,3121,3124],{},[1005,3122,3123],{"code":3123},";","：命令分隔符（在同一行串联多个命令）。",[993,3126,3127,3130],{},[1005,3128,3129],{"code":3129},"&","：在后台运行命令。",[993,3132,3133,3136],{},[1005,3134,3135],{"code":3135},"&&","：仅在前一个命令成功时才执行下一个命令。",[993,3138,3139,3142],{},[1005,3140,3141],{"code":3141},"||","：仅在前一个命令失败时才执行下一个命令。",[993,3144,3145,3148],{},[1005,3146,3147],{"code":3147},"( )","：将命令组在子 shell 中执行。",[982,3150],{},[985,3152,3154],{"id":3153},"quoting","Quoting",[990,3156,3157,3162,3177,3195],{},[993,3158,3159,3161],{},[1005,3160,2320],{"code":2320},"：转义下一个字符，使其按字面意义处理。",[993,3163,3164,3165,1110,3168],{},"单引号 ",[1005,3166,3167],{"code":3167},"' '",[990,3169,3170],{},[993,3171,3172,3173,3176],{},"其中字符全部按字面意义使用（在 csh 中 ",[1005,3174,3175],{"code":3175},"!"," 是例外）。",[993,3178,3179,3180,1110,3183],{},"双引号 ",[1005,3181,3182],{"code":3182},"\" \"",[990,3184,3185,3188],{},[993,3186,3187],{},"允许变量替换与命令替换。",[993,3189,3190,3191,2191,3193,1026],{},"不屏蔽 ",[1005,3192,1365],{"code":1365},[1005,3194,2320],{"code":2320},[993,3196,3197,3198,3201,3202],{},"反引号或 ",[1005,3199,3200],{"code":3200},"$()","：命令替换：\n",[990,3203,3204,3209,3211],{},[993,3205,3206,3208],{},[1005,3207,2320],{"code":2320},"command```或``$(command)`：命令输出替换到当前命令行。",[993,3210,1894],{},[993,3212,3213],{},"echo \"Today is $(date).\"",[982,3215],{},[985,3217,3219],{"id":3218},"job-control-cshbash","Job Control (csh\u002Fbash)",[990,3221,3222,3238,3244,3250,3256],{},[993,3223,3224,3225],{},"把任务放入后台：\n",[990,3226,3227,3232],{},[993,3228,3229,3230,1026],{},"在命令末尾加 ",[1005,3231,3129],{"code":3129},[993,3233,1267,3234,3237],{},[1005,3235,3236],{"code":3236},"^Z","（Ctrl+Z）中止正在前台运行的任务。",[993,3239,3240,3243],{},[1005,3241,3242],{"code":3242},"^C","：中断前台任务。",[993,3245,3246,3249],{},[1005,3247,3248],{"code":3248},"bg","：在后台继续运行被暂停的任务。",[993,3251,3252,3255],{},[1005,3253,3254],{"code":3254},"fg [%n]","：把某个任务带回前台。",[993,3257,3258,3261],{},[1005,3259,3260],{"code":3260},"jobs"," 命令：列出后台任务列表。",[982,3263],{},[985,3265,3267],{"id":3266},"process-commands-ps","Process Commands – ps",[990,3269,3270,3281],{},[993,3271,3272,3273],{},"进程与线程：\n",[990,3274,3275,3278],{},[993,3276,3277],{},"Process：用 PID（进程 ID）标识。",[993,3279,3280],{},"Thread：轻量级进程、位于进程内部（详细见 C 语言部分）。",[993,3282,3283,3286,3287],{},[1005,3284,3285],{"code":3285},"ps [options]","：显示进程状态：\n",[990,3288,3289,3295,3304],{},[993,3290,3291,3292,1026],{},"基本：",[1005,3293,3294],{"code":3294},"ps",[993,3296,3297,3298,1525,3301,1026],{},"常用：",[1005,3299,3300],{"code":3300},"ps -ef",[1005,3302,3303],{"code":3303},"ps -aux",[993,3305,3306,3307,1026],{},"选项在不同系统中略有差异，可查阅 ",[1005,3308,3309],{"code":3309},"man ps",[982,3311],{},[985,3313,3315],{"id":3314},"example-outputs-of-ps","Example Outputs of ps",[990,3317,3318,3335],{},[993,3319,3320,3321],{},"示例展示：\n",[990,3322,3323,3329],{},[993,3324,1267,3325,3328],{},[1005,3326,3327],{"code":3327},"ps -ef | more"," 输出进程列表，包括 UID、PID、PPID、CPU、TTY、CMD 等字段。",[993,3330,1267,3331,3334],{},[1005,3332,3333],{"code":3333},"ps -l"," 输出详细格式，包括优先级、状态等。",[993,3336,3337,3338,1008,3341,1008,3344,3347,3348,1008,3350,2122],{},"示例中列出了系统进程（如 ",[1005,3339,3340],{"code":3340},"sched",[1005,3342,3343],{"code":3343},"init",[1005,3345,3346],{"code":3346},"pageout","）和用户进程（如 ",[1005,3349,2559],{"code":2559},[1005,3351,3352],{"code":3352},"xterm",[982,3354],{},[985,3356,3358],{"id":3357},"getting-process-information","Getting Process Information",[990,3360,3361,3371,3381],{},[993,3362,3363,1110,3366],{},[1005,3364,3365],{"code":3365},"top",[990,3367,3368],{},[993,3369,3370],{},"动态显示进程信息和系统资源使用情况（默认每 5 秒更新）。",[993,3372,3373,1110,3376],{},[1005,3374,3375],{"code":3375},"pstree",[990,3377,3378],{},[993,3379,3380],{},"以树状结构显示进程之间的父子层级关系。",[993,3382,3383,1110,3386],{},[1005,3384,3385],{"code":3385},"uptime",[990,3387,3388],{},[993,3389,3390],{},"显示系统已运行时间、登录用户数、平均负载等。",[982,3392],{},[985,3394,3395],{"id":3395},"kill",[990,3397,3398,3411,3417,3470,3484,3512],{},[993,3399,3400,3402,3403],{},[1005,3401,3395],{"code":3395},"：用于终止或发送信号给进程。\n",[990,3404,3405],{},[993,3406,3407,3408,1026],{},"基本格式：",[1005,3409,3410],{"code":3410},"kill [-signal] processID",[993,3412,3413,3416],{},[1005,3414,3415],{"code":3415},"kill -l","：列出所有可用信号。",[993,3418,3419,3420],{},"示例信号列表：\n",[990,3421,3422],{},[993,3423,3424,1008,3427,1008,3430,1008,3433,1008,3436,1008,3439,1008,3442,1008,3445,1008,3448,1008,3451,1008,3454,1008,3457,1008,3460,1008,3463,1008,3466,3469],{},[1005,3425,3426],{"code":3426},"HUP",[1005,3428,3429],{"code":3429},"INT",[1005,3431,3432],{"code":3432},"QUIT",[1005,3434,3435],{"code":3435},"ILL",[1005,3437,3438],{"code":3438},"TRAP",[1005,3440,3441],{"code":3441},"ABRT",[1005,3443,3444],{"code":3444},"BUS",[1005,3446,3447],{"code":3447},"FPE",[1005,3449,3450],{"code":3450},"KILL",[1005,3452,3453],{"code":3453},"USR1",[1005,3455,3456],{"code":3456},"SEGV",[1005,3458,3459],{"code":3459},"USR2",[1005,3461,3462],{"code":3462},"PIPE",[1005,3464,3465],{"code":3465},"ALRM",[1005,3467,3468],{"code":3468},"TERM",", 等。",[993,3471,3472,1110,3475],{},[1005,3473,3474],{"code":3474},"kill -9 processID",[990,3476,3477],{},[993,3478,3479,3480,3483],{},"发送 ",[1005,3481,3482],{"code":3482},"SIGKILL","，强制终止进程（“最后手段”）。",[993,3485,3486,3487],{},"常见键盘中断与信号对应关系：\n",[990,3488,3489,3497,3505],{},[993,3490,3491,3493,3494,1026],{},[1005,3492,3242],{"code":3242}," → ",[1005,3495,3496],{"code":3496},"SIGINT(2)",[993,3498,3499,3493,3502,1026],{},[1005,3500,3501],{"code":3501},"^\\",[1005,3503,3504],{"code":3504},"SIGQUIT(3)",[993,3506,3507,3493,3509,1026],{},[1005,3508,3236],{"code":3236},[1005,3510,3511],{"code":3511},"SIGSTOP(19)",[993,3513,3514,3515],{},"可在头文件中查找信号定义：\n",[990,3516,3517,3522],{},[993,3518,3519,1026],{},[1005,3520,3521],{"code":3521},"\u002Fusr\u002Finclude\u002Flinux\u002Fsignal.h",[993,3523,3524,1079],{},[1005,3525,3526],{"code":3526},"\u002Fusr\u002Finclude\u002Fasm-generic\u002Fsignal.h",[982,3528],{},[985,3530,3532],{"id":3531},"environment-variables","Environment Variables",[3534,3535,3537],"h4",{"id":3536},"shell-variable","Shell Variable",[1684,3539,3540,3541,3544,3545,3548,3549,3552],{},"为什么执行命令的时候 ",[1005,3542,3543],{"code":3543},".\u002Ftype.sh","可以，但是",[1005,3546,3547],{"code":3547},"type.sh","就不行呢？（已经给了权限",[1005,3550,3551],{"code":3551},"chmod u+x type.sh","）",[2991,3554,3555],{},[1684,3556,3557,3558,3561,3562,3564,3565,3568,3569,3572,3573,3576,3579,3582,3584,3587,3589],{},"答：",[1005,3559,3560],{"code":3560},".\u002F","表示当前目录, 而对于",[1005,3563,3547],{"code":3547},"直接执行这条命令，系统会从环境变量",[1005,3566,3567],{"code":3567},"$PATH$","中去找是否有这个指令，显然是找不到的，于是返回",[1005,3570,3571],{"code":3571},"command not found"," ",[1107,3574,3575],{},"当然也可以在",[1005,3577,3578],{"code":3578},"$PATH",[1107,3580,3581],{},"里面加入",[1005,3583,3560],{"code":3560},[1107,3585,3586],{},",这样命令行就可以找到",[1005,3588,3547],{"code":3547},[1107,3590,3591],{},"命令了",[990,3593,3594,3597,3607,3624],{},[993,3595,3596],{},"环境变量为程序提供运行所需的环境信息。",[993,3598,3599,1110,3602],{},[1107,3600,3601],{},"全局环境变量",[990,3603,3604],{},[993,3605,3606],{},"可以被子进程使用。",[993,3608,3609,1110,3612],{},[1107,3610,3611],{},"本地 shell 变量",[990,3613,3614,3617],{},[993,3615,3616],{},"仅在当前 shell 内使用，不向父进程回传。",[993,3618,3619,3620,3623],{},"在脚本内，默认变量通常是“全局”的，函数内部可用 ",[1005,3621,3622],{"code":3622},"local varName"," 定义局部变量（视具体 shell 而定）。",[993,3625,3626,3627],{},"常见保留变量：\n",[990,3628,3629],{},[993,3630,3631,1008,3634,1008,3637,1008,3640,1008,3643,1008,3646,1008,3648,1008,3651,1008,3654,1008,3657,1008,3660,1008,3663,1079],{},[1005,3632,3633],{"code":3633},"USER",[1005,3635,3636],{"code":3636},"HOME",[1005,3638,3639],{"code":3639},"PATH",[1005,3641,3642],{"code":3642},"SHELL",[1005,3644,3645],{"code":3645},"TZ",[1005,3647,3468],{"code":3468},[1005,3649,3650],{"code":3650},"DISPLAY",[1005,3652,3653],{"code":3653},"LD_LIBRARY_PATH",[1005,3655,3656],{"code":3656},"LANG",[1005,3658,3659],{"code":3659},"PS1",[1005,3661,3662],{"code":3662},"PS2",[1005,3664,3665],{"code":3665},"EDITOR",[982,3667],{},[985,3669,3671],{"id":3670},"setting-environment-variables","Setting Environment Variables",[990,3673,3674,3697,3713],{},[993,3675,3676,3677],{},"设置全局环境变量：\n",[990,3678,3679,3682,3685,3688,3691,3694],{},[993,3680,3681],{},"csh：",[993,3683,3684],{},"setenv NAME value",[993,3686,3687],{},"sh：",[993,3689,3690],{},"NAME=value\nexport NAME",[993,3692,3693],{},"bash：",[993,3695,3696],{},"export NAME=value",[993,3698,3699,3700],{},"设置本地 shell 变量：\n",[990,3701,3702,3704,3707,3710],{},[993,3703,3681],{},[993,3705,3706],{},"set name=value",[993,3708,3709],{},"sh\u002Fbash：",[993,3711,3712],{},"name=value",[993,3714,3715,3716],{},"删除变量：\n",[990,3717,3718,3726],{},[993,3719,3681,3720,1774,3723,1026],{},[1005,3721,3722],{"code":3722},"unsetenv",[1005,3724,3725],{"code":3725},"unset",[993,3727,3709,3728,1026],{},[1005,3729,3725],{"code":3725},[982,3731],{},[985,3733,3735],{"id":3734},"showinggetting-variables-1","Showing\u002FGetting Variables (1)",[990,3737,3738,3760],{},[993,3739,3740,3743,3744],{},[1005,3741,3742],{"code":3742},"env","：显示当前环境变量：\n",[990,3745,3746],{},[993,3747,3748,3749,1008,3751,1008,3753,1008,3755,1008,3758,1079],{},"示例输出包括：",[1005,3750,3636],{"code":3636},[1005,3752,3642],{"code":3642},[1005,3754,3633],{"code":3633},[1005,3756,3757],{"code":3757},"PWD",[1005,3759,3639],{"code":3639},[993,3761,1267,3762,3765,3766],{},[1005,3763,3764],{"code":3764},"echo"," 查看单个变量：\n",[990,3767,3768,3773,3780],{},[993,3769,3770,1026],{},[1005,3771,3772],{"code":3772},"echo $HOME",[993,3774,3775,3776,3779],{},"也可使用 ",[1005,3777,3778],{"code":3778},"${variable_name}"," 形式：",[993,3781,3782],{},"echo \"::${HOME}_stuffs\"",[982,3784],{},[985,3786,3788],{"id":3787},"showinggetting-variables-2","Showing\u002FGetting Variables (2)",[990,3790,3791],{},[993,3792,3793,3795,3796],{},[1005,3794,1898],{"code":1898},"：显示当前 shell 内所有变量（bash 示例）：\n",[990,3797,3798],{},[993,3799,3800,3801],{},"输出包括：\n",[990,3802,3803,3814,3825,3834],{},[993,3804,3805,1008,3808,1008,3811,1026],{},[1005,3806,3807],{"code":3807},"BASH",[1005,3809,3810],{"code":3810},"BASH_VERSINFO",[1005,3812,3813],{"code":3813},"BASH_VERSION",[993,3815,3816,1008,3819,1008,3822,1026],{},[1005,3817,3818],{"code":3818},"COLORS",[1005,3820,3821],{"code":3821},"COLUMNS",[1005,3823,3824],{"code":3824},"CVSROOT",[993,3826,3827,1008,3829,1008,3831,1026],{},[1005,3828,3659],{"code":3659},[1005,3830,3662],{"code":3662},[1005,3832,3833],{"code":3833},"PS4",[993,3835,3836,1008,3839,1008,3842,1079],{},[1005,3837,3838],{"code":3838},"PVM_ROOT",[1005,3840,3841],{"code":3841},"PVM_RSH",[1005,3843,3757],{"code":3757},[982,3845],{},[985,3847,3849],{"id":3848},"shell-controls","Shell Controls",[990,3851,3852,3858,3861],{},[993,3853,3854,3855,1026],{},"本部分主要讨论 ",[1107,3856,3857],{},"C Shell 的控制结构",[993,3859,3860],{},"C Shell 的控制结构与 C 语言相似。",[993,3862,3863,3864],{},"学习路线建议：\n",[990,3865,3866,3869,3872],{},[993,3867,3868],{},"在教材中学习 sh\u002Fbash 的编程。",[993,3870,3871],{},"阅读并理解 ICCAD 软件中真实脚本（包括 csh 和 sh\u002Fbash）。",[993,3873,3874],{},"熟悉如何查找和使用参考资料。",[982,3876],{},[985,3878,3880],{"id":3879},"ifthenendif","if\u002Fthen\u002Fendif",[990,3882,3883],{},[993,3884,3885],{},"C Shell 中的条件语句结构：",[2894,3887,3891],{"className":3888,"code":3890,"language":2559,"meta":2899},[3889],"language-csh","if (condition1) then\n    command list if condition1 is true\n[else if (condition2) then\n    command list if condition2 is true]\n[else\n    command list if condition1 is false]\nendif\n",[1005,3892,3890],{"__ignoreMap":2899},[982,3894],{},[985,3896,3898],{"id":3897},"some-if-conditions","Some if Conditions",[990,3900,3901,3960],{},[993,3902,3903,3904],{},"Shell 提供对文件类型和权限的检测操作符：\n",[990,3905,3906,3912,3918,3924,3930,3936,3942,3948,3954],{},[993,3907,3908,3911],{},[1005,3909,3910],{"code":3910},"-r","：文件存在且可读则为真。",[993,3913,3914,3917],{},[1005,3915,3916],{"code":3916},"-w","：文件存在且可写。",[993,3919,3920,3923],{},[1005,3921,3922],{"code":3922},"-x","：文件存在且可执行。",[993,3925,3926,3929],{},[1005,3927,3928],{"code":3928},"-f","：存在且为普通文件（在 csh 中为“存在且不是目录”）。",[993,3931,3932,3935],{},[1005,3933,3934],{"code":3934},"-d","：存在且为目录。",[993,3937,3938,3941],{},[1005,3939,3940],{"code":3940},"-e","：文件存在。",[993,3943,3944,3947],{},[1005,3945,3946],{"code":3946},"-o","：当前用户是文件所有者。",[993,3949,3950,3953],{},[1005,3951,3952],{"code":3952},"-z","：文件大小为 0（空文件）。",[993,3955,3956,3959],{},[1005,3957,3958],{"code":3958},"-s","：存在且非空（可在相关文档中查具体含义）。",[993,3961,3962],{},"幻灯片提示：可在接下来的示例脚本中看到这些操作符的实际使用。",[982,3964],{},[985,3966,3968],{"id":3967},"switchcase","switch\u002Fcase",[990,3970,3971,3974],{},[993,3972,3973],{},"C Shell 中的分支结构：",[993,3975,3976,3977,3980,3981,3983,3984,3986],{},"switch (parameter)\ncase pattern1:\ncommand list1\n",[2726,3978,3979],{},"breaksw","\ncase pattern2:\ncommand list2\n",[2726,3982,3979],{},"\ndefault:\ncommand list for default behavior\n",[2726,3985,3979],{},"\nendsw",[982,3988],{},[985,3990,3991],{"id":3991},"foreach",[990,3993,3994,3997],{},[993,3995,3996],{},"C Shell 的循环结构之一：",[993,3998,3999],{},"foreach variable (list_of_variable_values)\ncommand list\nend",[982,4001],{},[985,4003,4004],{"id":4004},"while",[990,4006,4007,4010],{},[993,4008,4009],{},"C Shell 的 while 循环：",[993,4011,4012,4013,4016,4019],{},"while (condition)\ncommand list\n",[2726,4014,4015],{},"break",[2726,4017,4018],{},"continue","\nend",[982,4021],{},[985,4023,4025],{"id":4024},"shell-startup","Shell Startup",[990,4027,4028,4051,4075,4089,4103],{},[993,4029,4030,4031],{},"传统 shell 启动文件：\n",[990,4032,4033,4039,4045],{},[993,4034,4035,4038],{},[1005,4036,4037],{"code":4037},"~\u002F.profile","（sh）。",[993,4040,4041,4044],{},[1005,4042,4043],{"code":4043},"~\u002F.login","（csh），登录时执行一次。",[993,4046,4047,4050],{},[1005,4048,4049],{"code":4049},"~\u002F.cshrc"," 在每次启动 C shell 时执行。",[993,4052,4053,4054],{},"bash 登录 shell 的执行顺序：\n",[1164,4055,4056,4061,4066,4071],{},[993,4057,4058],{},[1005,4059,4060],{"code":4060},"\u002Fetc\u002Fprofile",[993,4062,4063],{},[1005,4064,4065],{"code":4065},"~\u002F.bash_profile",[993,4067,4068],{},[1005,4069,4070],{"code":4070},"~\u002F.bash_login",[993,4072,4073],{},[1005,4074,4037],{"code":4037},[993,4076,4077,4078],{},"bash 非登录 shell：\n",[990,4079,4080],{},[993,4081,4082,4083,2191,4086,1026],{},"执行 ",[1005,4084,4085],{"code":4085},"\u002Fetc\u002Fbashrc",[1005,4087,4088],{"code":4088},"~\u002F.bashrc",[993,4090,4091,4092],{},"登出时：\n",[990,4093,4094],{},[993,4095,4096,1774,4099,4102],{},[1005,4097,4098],{"code":4098},"\u002Fetc\u002Fbash.logout",[1005,4100,4101],{"code":4101},"~\u002F.bash_logout"," 会被执行。",[993,4104,4105,4106],{},"启动脚本中常见任务：\n",[990,4107,4108,4113,4116,4122,4125,4131],{},[993,4109,4110,4111,1026],{},"设置 ",[1005,4112,3639],{"code":3639},[993,4114,4115],{},"定义函数。",[993,4117,4118,4119,2122],{},"设置终端参数（",[1005,4120,4121],{"code":4121},"stty",[993,4123,4124],{},"设置终端类型。",[993,4126,4127,4128,2122],{},"设置默认文件权限（",[1005,4129,4130],{"code":4130},"umask",[993,4132,4133],{},"其他初始化操作。",[982,4135],{},[985,4137,4139],{"id":4138},"sample-login-on-solaris","Sample .login on Solaris",[2894,4141,4145],{"className":4142,"code":4144,"language":2575,"meta":2899},[4143],"language-bash","# @(#)local.login 1.4 98\u002F02\u002F06 SMI\nstty -istrip #strip to 7 bits\n# if possible, start the windows system.\n# Give user a chance to bail out\nif ( \"`tty`\" == \"\u002Fdev\u002Fconsole\" ) then\nif ( \"$TERM\" == \"sun\" || \"$TERM\" == \"AT386\" ) then\n    if ( ${?OPENWINHOME} == 0 ) then\n        setenv OPENWINHOME \u002Fusr\u002Fopenwin\n    endif\n    echo \"\"\n    echo -n \"Starting OpenWindows in 5 seconds (type Control-C to cancel)\"\n    sleep 5\n    echo \"\"\n    $OPENWINHOME\u002Fbin\u002Fopenwin\n    clear # get rid of annoying cursor rectangle\n    logout # logout after leaving windows system\nendif\nendif\n",[1005,4146,4144],{"__ignoreMap":2899},[990,4148,4149],{},[993,4150,4151,4152],{},"核心功能：\n",[990,4153,4154,4157,4171,4181,4188],{},[993,4155,4156],{},"设置终端为 7 位模式。",[993,4158,4159,4160,4163,4164,1525,4167,4170],{},"仅在控制台 ",[1005,4161,4162],{"code":4162},"\u002Fdev\u002Fconsole"," 且终端类型为 ",[1005,4165,4166],{"code":4166},"sun",[1005,4168,4169],{"code":4169},"AT386"," 时尝试启动 OpenWindows。",[993,4172,4173,4174,4177,4178,1026],{},"若 ",[1005,4175,4176],{"code":4176},"OPENWINHOME"," 未设置，则设为 ",[1005,4179,4180],{"code":4180},"\u002Fusr\u002Fopenwin",[993,4182,4183,4184,4187],{},"提示用户可在 5 秒内用 ",[1005,4185,4186],{"code":4186},"Ctrl+C"," 取消。",[993,4189,4190],{},"启动图形系统后，清屏并在退出图形界面时自动注销。",[982,4192],{},[985,4194,4196],{"id":4195},"sample-etcprofile-on-linux-1","Sample \u002Fetc\u002Fprofile on Linux (1)",[2894,4198,4201],{"className":4199,"code":4200,"language":2575,"meta":2899},[4143],"# \u002Fetc\u002Fprofile: system-wide .profile file for the Bourne shell\n# and Bourne compatible shells\nif [ \"$PS1\" ]; then\nif [ \"$BASH\" ] && [ \"$BASH\" != \"\u002Fbin\u002Fsh\" ]; then\n    # The file bash.bashrc already sets the default PS1.\n    # PS1='\\h:\\w\\$ '\n    if [ -f \u002Fetc\u002Fbash.bashrc ]; then\n        . \u002Fetc\u002Fbash.bashrc # i.e. source \u002Fetc\u002Fbash.bashrc\n        # try command line ‘$ help .’ ?\n    fi\nelse # original bourne shell not bash\n    if [ \"`id -u`\" -eq 0 ]; then\n        PS1='# '\n    else\n        PS1='$ '\n    fi\nfi\nfi\n",[1005,4202,4200],{"__ignoreMap":2899},[990,4204,4205],{},[993,4206,4207,4208],{},"主要逻辑：\n",[990,4209,4210,4216,4237],{},[993,4211,4212,4213,4215],{},"若存在 ",[1005,4214,3659],{"code":3659},"（交互式 shell），继续。",[993,4217,4218,4219,4221,4222,4225,4226],{},"若为真正的 ",[1005,4220,2575],{"code":2575},"（而非 ",[1005,4223,4224],{"code":4224},"\u002Fbin\u002Fsh"," 兼容模式）：\n",[990,4227,4228],{},[993,4229,4212,4230,4233,4234,4236],{},[1005,4231,4232],{"code":4232},"\u002Fetc\u002Fbash.bashrc","，则通过 ",[1005,4235,1645],{"code":1645},"（source）加载。",[993,4238,4239,4240],{},"否则视为原始 Bourne shell：\n",[990,4241,4242],{},[993,4243,4244,4245,4248,4249,1026],{},"root 用户提示符为 ",[1005,4246,4247],{"code":4247},"#","，普通用户为 ",[1005,4250,1365],{"code":1365},[982,4252],{},[985,4254,4256],{"id":4255},"sample-etcprofile-on-linux-2","Sample \u002Fetc\u002Fprofile on Linux (2)",[2894,4258,4261],{"className":4259,"code":4260,"language":2575,"meta":2899},[4143],"# The default umask is now handled by pam_umask.\n# See pam_umask(8) and \u002Fetc\u002Flogin.defs.\nif [ -d \u002Fetc\u002Fprofile.d ]; then\nfor i in \u002Fetc\u002Fprofile.d\u002F*.sh; do\n    if [ -r $i ]; then \n        . $i # i.e. source $i for various initializations\n    fi\ndone\nunset i\nfi\n",[1005,4262,4260],{"__ignoreMap":2899},[990,4264,4265],{},[993,4266,4267,4268],{},"功能：\n",[990,4269,4270,4280,4301],{},[993,4271,4272,4273,4275,4276,4279],{},"默认 ",[1005,4274,4130],{"code":4130}," 已由 ",[1005,4277,4278],{"code":4278},"pam_umask"," 统一管理。",[993,4281,4212,4282,4285,4286],{},[1005,4283,4284],{"code":4284},"\u002Fetc\u002Fprofile.d"," 目录：\n",[990,4287,4288,4298],{},[993,4289,4290,4291,4294,4295,1026],{},"遍历其中可读的 ",[1005,4292,4293],{"code":4293},"*.sh"," 文件并逐个 ",[1005,4296,4297],{"code":4297},"source",[993,4299,4300],{},"这些脚本用于各种初始化（由系统和软件包提供）。",[993,4302,4303,4304,4307],{},"最后 ",[1005,4305,4306],{"code":4306},"unset i"," 清理循环变量。",[982,4309],{},[985,4311,4313],{"id":4312},"sample-profile-on-linux","Sample ~\u002F.profile on Linux",[2894,4315,4318],{"className":4316,"code":4317,"language":2575,"meta":2899},[4143],"# ~\u002F.profile: executed by the command interpreter for login shells.\n# This file is not read by bash(1), if ~\u002F.bash_profile or ~\u002F.bash_login\n# exists.\n# see \u002Fusr\u002Fshare\u002Fdoc\u002Fbash\u002Fexamples\u002Fstartup-files for examples.\n# the files are located in the bash-doc package.\n# the default umask is set in \u002Fetc\u002Fprofile; for setting the umask\n# for ssh logins, install and configure the libpam-umask package.\n#umask 022\n# if running bash\nif [ -n \"$BASH_VERSION\" ]; then # variable non-empty?\n# include .bashrc if it exists\nif [ -f \"$HOME\u002F.bashrc\" ]; then\n    . \"$HOME\u002F.bashrc\" # i.e. source ~\u002F.bashrc\nfi\nfi\n# set PATH so it includes user's private bin if it exists\nif [ -d \"$HOME\u002Fbin\" ] ; then\nPATH=\"$HOME\u002Fbin:$PATH\" # why add ~\u002Fbin to $PATH?\nfi\n",[1005,4319,4317],{"__ignoreMap":2899},[990,4321,4322],{},[993,4323,4324,4325],{},"主要内容：\n",[990,4326,4327,4342,4354,4369],{},[993,4328,4329,4332,4333,1525,4336,4339,4340,1026],{},[1005,4330,4331],{"code":4331},".profile"," 只在 login shell 中执行；若有 ",[1005,4334,4335],{"code":4335},".bash_profile",[1005,4337,4338],{"code":4338},".bash_login","，bash 不再读 ",[1005,4341,4331],{"code":4331},[993,4343,4272,4344,4346,4347,4349,4350,4353],{},[1005,4345,4130],{"code":4130}," 在 ",[1005,4348,4060],{"code":4060}," 设置，SSH 登录可通过 ",[1005,4351,4352],{"code":4352},"libpam-umask"," 管理。",[993,4355,4173,4356,4358,4359],{},[1005,4357,3813],{"code":3813}," 非空（表示正在运行 bash）：\n",[990,4360,4361],{},[993,4362,4212,4363,4365,4366,4368],{},[1005,4364,4088],{"code":4088},"，则将其 ",[1005,4367,4297],{"code":4297}," 进来。",[993,4370,4371,4372,4285,4375],{},"若用户家目录下存在 ",[1005,4373,4374],{"code":4374},"~\u002Fbin",[990,4376,4377],{},[993,4378,4379,4380,4382],{},"将其加入 ",[1005,4381,3639],{"code":3639},"，以便执行用户自定义脚本。",[982,4384],{},[985,4386,4388],{"id":4387},"history","History",[990,4390,4391,4399,4423],{},[993,4392,4393,4394],{},"C Shell、bash 等支持命令历史功能：\n",[990,4395,4396],{},[993,4397,4398],{},"保存之前执行过的命令。",[993,4400,4401,4402],{},"历史记录条数可通过变量设置：\n",[990,4403,4404,4411,4414,4420],{},[993,4405,4406,4407,4410],{},"例如在 ",[1005,4408,4409],{"code":4409},".cshrc"," 中：",[993,4412,4413],{},"set history=200\nset savehist=100",[993,4415,4416,4417,4410],{},"在 ",[1005,4418,4419],{"code":4419},".bashrc",[993,4421,4422],{},"export HISTSIZE=1000",[993,4424,4425,4426],{},"历史命令通常保存在用户家目录下：\n",[990,4427,4428,4433],{},[993,4429,2556,4430,1026],{},[1005,4431,4432],{"code":4432},"~\u002F.history",[993,4434,3693,4435,1026],{},[1005,4436,4437],{"code":4437},"~\u002F.bash_history",[982,4439],{},[985,4441,4443],{"id":4442},"history-commands","History Commands",[990,4445,4446,4479],{},[993,4447,4448,4449],{},"常用历史命令操作：\n",[990,4450,4451,4457,4463,4469],{},[993,4452,4453,4456],{},[1005,4454,4455],{"code":4455},"history [nn]","：显示最近 nn 条命令。",[993,4458,4459,4462],{},[1005,4460,4461],{"code":4461},"!!","：重复上一条命令。",[993,4464,4465,4468],{},[1005,4466,4467],{"code":4467},"!nn","：重复编号为 nn 的命令。",[993,4470,4471,4474,4475,4478],{},[1005,4472,4473],{"code":4473},"!string","：重复最近以 ",[1005,4476,4477],{"code":4477},"string"," 开头的命令。",[993,4480,4481,4482],{},"在 Linux 终端中：\n",[990,4483,4484,4487],{},[993,4485,4486],{},"可用方向键（↑ ↓）浏览历史命令并编辑。",[993,4488,4489,4492],{},[1005,4490,4491],{"code":4491},"CTRL+R"," 可在历史中搜索匹配的命令。",[982,4494],{},[985,4496,4498],{"id":4497},"magic-symbol-or-shebang-hashbang","Magic Symbol #! (or Shebang \u002F Hashbang)",[990,4500,4501,4521,4543],{},[993,4502,4503,4504,4507,4508],{},"Unix 脚本应以 ",[1005,4505,4506],{"code":4506},"#!"," 开头，告诉内核该脚本可直接执行，并指定解释器：\n",[990,4509,4510,4513,4516,4518],{},[993,4511,4512],{},"Bourne Shell \u002F Bash：",[993,4514,4515],{},"#! \u002Fbin\u002Fsh\n#! \u002Fbin\u002Fbash",[993,4517,2556],{},[993,4519,4520],{},"#! \u002Fbin\u002Fcsh -f   # -f 表示不读取 .cshrc",[993,4522,4523,4524,4526,4527],{},"没有 ",[1005,4525,4506],{"code":4506}," 时，可用以下方式运行脚本：\n",[990,4528,4529],{},[993,4530,4531,1588,4534,1588,4537,1588,4540,1026],{},[1005,4532,4533],{"code":4533},"sh sh_script",[1005,4535,4536],{"code":4536},"csh csh_script",[1005,4538,4539],{"code":4539},"bash bash_script",[1005,4541,4542],{"code":4542},"app_prog app_script",[993,4544,4545,4546,4548,4549,4552,4553],{},"加上 ",[1005,4547,4506],{"code":4506}," 并赋予执行权限后（",[1005,4550,4551],{"code":4551},"chmod +x script","），可直接执行：\n",[990,4554,4555],{},[993,4556,4557,1588,4560,1588,4563,1588,4566,1026],{},[1005,4558,4559],{"code":4559},"sh_script",[1005,4561,4562],{"code":4562},"csh_script",[1005,4564,4565],{"code":4565},"bash_script",[1005,4567,4568],{"code":4568},"app_script",[982,4570],{},[985,4572,4574],{"id":4573},"target-of-the-sample-csh-script","Target of the Sample csh Script",[990,4576,4577,4615,4643],{},[993,4578,4579,4580],{},"示例 csh 脚本的目标场景：\n",[990,4581,4582,4599],{},[993,4583,4584,4585,4588,4589],{},"应用包目录（",[1005,4586,4587],{"code":4587},"$SYNOPSYS_ROOT","）下存在一套 X11 相关文件：\n",[990,4590,4591],{},[993,4592,4593,1008,4596,1079],{},[1005,4594,4595],{"code":4595},"admin\u002Fsetup\u002Frgb.txt",[1005,4597,4598],{"code":4598},"XErrorDB",[993,4600,4601,4602,4605,4606],{},"系统目录 ",[1005,4603,4604],{"code":4604},"$LIBDIR\u002FX11"," 下也有对应文件：\n",[990,4607,4608],{},[993,4609,4610,1008,4613,1079],{},[1005,4611,4612],{"code":4612},"rgb.txt",[1005,4614,4598],{"code":4598},[993,4616,4617,4618],{},"检查目标：\n",[1164,4619,4620,4626,4630],{},[993,4621,4622,4623,4625],{},"系统端是否存在 ",[1005,4624,4612],{"code":4612},"？",[993,4627,4622,4628,4625],{},[1005,4629,4598],{"code":4598},[993,4631,4632,4633,4635,4636,4639,4640,4642],{},"应用端 ",[1005,4634,4598],{"code":4598}," 中每个 ",[1005,4637,4638],{"code":4638},"XRequest"," 代码是否都在系统端 ",[1005,4641,4598],{"code":4598}," 中存在？",[993,4644,4645,4646],{},"若以上任意检测失败：\n",[990,4647,4648],{},[993,4649,4650],{},"将应用端文件复制到系统端，完成安装\u002F修复。",[982,4652],{},[985,4654,4656],{"id":4655},"flow-graph-of-the-sample-script","Flow Graph of the Sample Script",[990,4658,4659],{},[993,4660,4661,4662],{},"幻灯片以流程图形式描述脚本逻辑，大致流程：\n",[990,4663,4664,4667,4670,4673,4676,4682,4693,4696],{},[993,4665,4666],{},"判断是否 Sun 机器。",[993,4668,4669],{},"输入 Synopsys 根目录，并检查目录合法性。",[993,4671,4672],{},"检查应用端 X11 文件是否存在。",[993,4674,4675],{},"检查系统端 X11 文件是否存在。",[993,4677,4678,4679,4681],{},"检查 ",[1005,4680,4638],{"code":4638}," 代码是否全部存在。",[993,4683,4684,4685],{},"判断是否需要更新：\n",[990,4686,4687,4690],{},[993,4688,4689],{},"若无缺失且无不匹配，则无需操作。",[993,4691,4692],{},"否则检查系统目录写权限。",[993,4694,4695],{},"备份旧文件。",[993,4697,4698],{},"把应用端 X11 文件复制到系统端并验证复制结果。",[982,4700],{},[3534,4702,4704],{"id":4703},"a-sample-csh-script-file-1","A Sample csh Script File (1)",[2991,4706,4707,4710],{},[1684,4708,4709],{},"第一行是 -f fast模式，使用csh解释",[1684,4711,4712,4713,4716],{},"bash中不支持",[1005,4714,4715],{"code":4715},"PATH \u003Cspace> = \u003Cspace> XXX"," ,等号前后不能有空格，但是csh支持",[2894,4718,4721],{"className":4719,"code":4720,"language":2575,"meta":2899},[4143],"#! \u002Fbin\u002Fcsh -f\nset path = (\u002Fbin \u002Fusr\u002Fbin \u002Fusr\u002Fucb)\nset LIBDIR = \u002Fusr\u002Flib\nset LIBX11 = $LIBDIR\u002FX11 # \u002Fusr\u002Fshare\u002FX11 for Linux?\nset XERRDB = $LIBX11\u002FXErrorDB\nset XRGB = $LIBX11\u002Frgb.txt\necho \" \"\necho \"Synopsys X11 Installation Script (Version 3.1)\"\necho \"Modified for Educational Use\"\necho \" \"\n# Check for valid platform\nif (-x \u002Fbin\u002Farch) then\nset ARCH = `\u002Fbin\u002Farch`\nelse\necho \"Error: \u002Fbin\u002Farch does not exist or is not executable.\"\nset ARCH = unknown\nendif\n",[1005,4722,4720],{"__ignoreMap":2899},[982,4724],{},[3534,4726,4728],{"id":4727},"a-sample-csh-script-file-2","A Sample csh Script File (2)",[2991,4730,4731],{},[990,4732,4733,4739,4749,4752,4760,4785],{},[993,4734,4735,4738],{},[1005,4736,4737],{"code":4737},"$?SYNOPSYS"," 检查 SYNOPSYS 变量是否已定义",[993,4740,4741,4742,4745,4746],{},"echo ",[1005,4743,4744],{"code":4744},"-n"," 参数的作用是:",[1107,4747,4748],{},"阻止在输出末尾添加换行符",[993,4750,4751],{},"goto 语句跳转点——readdir:",[993,4753,4754,4757,4758],{},[1005,4755,4756],{"code":4756},"$\u003C"," 从标准输入读取一行，赋值给变量 ",[1005,4759,1147],{"code":1147},[993,4761,4762,4763,4766,4767],{},"如果用户输入了内容（",[1005,4764,4765],{"code":4765},"$a"," 不为空）：\n",[990,4768,4769,4775,4778],{},[993,4770,4771,4774],{},[1005,4772,4773],{"code":4773},"-d $a"," 检查路径是否存在且是目录",[993,4776,4777],{},"如果是有效目录，更新 SYNOPSYS 变量",[993,4779,4780,4781,4784],{},"如果不是，显示错误并跳回 ",[1005,4782,4783],{"code":4783},"readdir"," 标签重新询问",[993,4786,4787],{},"如果用户直接按回车（空输入），保持默认值",[2894,4789,4792],{"className":4790,"code":4791,"language":2575,"meta":2899},[4143],"if (\"$ARCH\" != \"sun4\") then\necho \"Error: architecure is invalid or unknown.\"\necho \"This script only runs on SPARC platforms.\"\nexit 1\nendif\n# 检查 $ARCH 变量是否为 \"sun4\"（Sun SPARC 架构）\n# 如果不是，输出错误信息并退出脚本\n# Validate Root Directory\n# goto 语句跳转点\nreaddir:\nif (! $?SYNOPSYS) then\nset SYNOPSYS = `pwd`\nendif\necho -n \"Synopsys root directory [\" $SYNOPSYS \"]: \"\nset a = $\u003C\nif ($a != \"\") then\nif (-d $a) then\n    set SYNOPSYS = $a\nelse\n    echo \"Error: root directory $a does not exist.\"\n    goto readdir\nendif\nendif\n",[1005,4793,4791],{"__ignoreMap":2899},[982,4795],{},[3534,4797,4799],{"id":4798},"a-sample-csh-script-file-3","A Sample csh Script File (3)",[2991,4801,4802,4808,4813,4818,4827,4830],{},[1684,4803,4804,4807],{},[1005,4805,4806],{"code":4806},"foreach f ($FILES)"," - 遍历 FILES 列表中的每个文件",[1684,4809,4810,4812],{},[1005,4811,3940],{"code":3940}," 检查文件是否存在",[1684,4814,4815,4817],{},[1005,4816,3175],{"code":3175}," 取反，即\"如果不存在\"",[1684,4819,4820,4821,2191,4824],{},"完整路径是：",[1005,4822,4823],{"code":4823},"$SYNOPSYS\u002Fadmin\u002Fsetup\u002Frgb.txt",[1005,4825,4826],{"code":4826},"$SYNOPSYS\u002Fadmin\u002Fsetup\u002FXErrorDB",[1684,4828,4829],{},"如果文件不存在：",[990,4831,4832,4835],{},[993,4833,4834],{},"输出错误信息",[993,4836,3045,4837,4840],{},[1005,4838,4839],{"code":4839},"missing"," 设为 1（true）",[2894,4842,4845],{"className":4843,"code":4844,"language":2575,"meta":2899},[4143],"# Consistency check or Root Directory\nset FILES = \"rgb.txt XErrorDB\"\nset missing = 0\nforeach f ($FILES)\nif (! -e $SYNOPSYS\u002Fadmin\u002Fsetup\u002F$f) then\n    echo \"Error: file $SYNOPSYS\u002Fadmin\u002Fsetup\u002F$f does not exist.\"\n    set missing = 1\nendif\nend\nif ($missing) then\ngoto readdir\nendif\n",[1005,4846,4844],{"__ignoreMap":2899},[982,4848],{},[3534,4850,4852],{"id":4851},"a-sample-csh-script-file-4","A Sample csh Script File (4)",[2991,4854,4855,4867,4873,4886,4894,4905],{},[1684,4856,4857,4858,1774,4861,1774,4864],{},"遍历三个变量：",[1005,4859,4860],{"code":4860},"$LIBX11",[1005,4862,4863],{"code":4863},"$XRGB",[1005,4865,4866],{"code":4866},"$XERRDB",[1684,4868,4869,4870,4872],{},"如果是 ",[1005,4871,4860],{"code":4860},"：",[990,4874,4875,4880],{},[993,4876,4877,4879],{},[1005,4878,3934],{"code":3934}," 检查是否为目录",[993,4881,4882,4883,4885],{},"不存在则报错，",[1005,4884,4839],{"code":4839}," 加 1",[1684,4887,4888,4889,1525,4891,4893],{},"如果是其他（",[1005,4890,4863],{"code":4863},[1005,4892,4866],{"code":4866},"）：",[990,4895,4896,4901],{},[993,4897,4898,4900],{},[1005,4899,3928],{"code":3928}," 检查是否为文件",[993,4902,4882,4903,4885],{},[1005,4904,4839],{"code":4839},[1684,4906,4907,4910,4911,4914],{},[1005,4908,4909],{"code":4909},"@ missing = $missing + 1"," 是 C Shell 中的",[1107,4912,4913],{},"算术运算","语法",[2894,4916,4919],{"className":4917,"code":4918,"language":2575,"meta":2899},[4143],"# Analyze current installation\necho \"\"\necho \"Checking existing X11 installation\"\necho \"\"\nset missing = 0\nset keys = -1\nforeach f ($LIBX11 $XRGB $XERRDB)\nif ($f == $LIBX11) then\n    if (! -d $f) then\n        echo \"Required directory $f does not exist.\"\n        @ missing = $missing + 1\n    endif\nelse\n    if (! -f $f) then\n        echo \"Required file $f does not exist.\"\n        @ missing = $missing + 1\n    endif\nendif\nend\n",[1005,4920,4918],{"__ignoreMap":2899},[982,4922],{},[3534,4924,4926],{"id":4925},"a-sample-csh-script-file-5","A Sample csh Script File (5)",[2991,4928,4929,4938],{},[1684,4930,4931,4932,4934,4935,4937],{},"如果 ",[1005,4933,4860],{"code":4860}," 目录和 ",[1005,4936,4866],{"code":4866}," 文件都存在：",[990,4939,4940,4947,4957,4963,4969,4975,4981],{},[993,4941,4942,4943,4946],{},"切换到 ",[1005,4944,4945],{"code":4945},"$SYNOPSYS\u002Fadmin\u002Fsetup"," 目录",[993,4948,4949,4950,4952,4953,4956],{},"从 ",[1005,4951,4598],{"code":4598},"（Synopsys 自带）中提取所有以 ",[1005,4954,4955],{"code":4955},"XRequest."," 开头的行",[993,4958,4959,4962],{},[1005,4960,4961],{"code":4961},"awk '{print $1}'"," 提取第一列（请求代码名称）",[993,4964,4965,4966,4968],{},"对每个请求代码，检查系统的 ",[1005,4967,4866],{"code":4866}," 文件中是否存在",[993,4970,4971,4974],{},[1005,4972,4973],{"code":4973},">& \u002Fdev\u002Fnull"," 抑制 grep 输出",[993,4976,4977,4980],{},[1005,4978,4979],{"code":4979},"$status"," 是上一条命令的退出状态（0=成功，非0=失败）",[993,4982,4983],{},"如果找不到，报错并计数",[2894,4985,4988],{"className":4986,"code":4987,"language":2575,"meta":2899},[4143],"if (-d $LIBX11 && -f $XERRDB) then\ncd $SYNOPSYS\u002Fadmin\u002Fsetup\nset reqs = 0\nforeach xreq (`grep '^XRequest\\.' XErrorDB | awk '{print $1}'`)\n    grep $xreq $XERRDB >& \u002Fdev\u002Fnull\n    if ($status) then\n        echo \"Required $xreq code does not exist in $XERRDB\"\n        @ reqs = $reqs + 1\n    endif\nend\nendif\necho \"\"\necho \"Finished checking existing X11 installation\"\necho \"\"\n",[1005,4989,4987],{"__ignoreMap":2899},[982,4991],{},[3534,4993,4995],{"id":4994},"a-sample-csh-script-file-6","A Sample csh Script File (6)",[2991,4997,4998],{},[990,4999,5000,5009,5028,5045,5050,5055],{},[993,5001,5002,5003,5006,5007],{},"如果缺少请求代码（",[1005,5004,5005],{"code":5005},"$reqs > 0","），提示需要更新 ",[1005,5008,4866],{"code":4866},[993,5010,5011,5012,5015,5016,5019,5020],{},"如果没有缺失文件（",[1005,5013,5014],{"code":5014},"$missing == 0","）且没有缺少请求代码（",[1005,5017,5018],{"code":5018},"$reqs == 0","）\n",[990,5021,5022,5025],{},[993,5023,5024],{},"说明 X11 安装完整，无需修改",[993,5026,5027],{},"直接退出脚本",[993,5029,5030,5031],{},"确定要检查的目录：\n",[990,5032,5033,5038],{},[993,5034,4931,5035,5037],{},[1005,5036,4860],{"code":4860}," 目录存在，使用它",[993,5039,5040,5041,5044],{},"否则使用 ",[1005,5042,5043],{"code":5043},"$LIBDIR","（父目录）",[993,5046,5047,5049],{},[1005,5048,3916],{"code":3916}," 检查目录是否可写",[993,5051,5052,5054],{},[1005,5053,2320],{"code":2320}," 表示续行（跨行字符串）",[993,5056,5057],{},"如果没有写权限，报错退出（需要 root 或适当权限）",[2894,5059,5062],{"className":5060,"code":5061,"language":2575,"meta":2899},[4143],"if ($reqs > 0) then\necho \"$XERRDB needs to be updated.\"\nendif\nif ($missing == 0 && $reqs == 0) then\necho \"$LIBX11 installation requires no changes.\"\nexit 0\nendif\n# Check write permissions\nif (-d $LIBX11) then\nset DIR = \"$LIBX11\"\nelse\nset DIR = \"$LIBDIR\"\nendif\nif (! -w $DIR) then\necho \"Error: directory $DIR must be writable to perform \\\ninstallation.\"\nexit 1\nendif\n",[1005,5063,5061],{"__ignoreMap":2899},[982,5065],{},[3534,5067,5069],{"id":5068},"a-sample-csh-script-file-7","A Sample csh Script File (7)",[2991,5071,5072],{},[990,5073,5074,5090,5093,5120],{},[993,5075,5076,5077],{},"定义需要的目录列表：\n",[990,5078,5079,5084],{},[993,5080,5081,5083],{},[1005,5082,4860],{"code":4860},"：X11 库的主目录",[993,5085,5086,5089],{},[1005,5087,5088],{"code":5088},"$LIBX11\u002Fapp-defaults","：X11 应用程序默认配置目录",[993,5091,5092],{},"遍历每个目录",[993,5094,5095,5096,5099,5100],{},"如果目录不存在（",[1005,5097,5098],{"code":5098},"! -d $dir","）：\n",[990,5101,5102,5105,5111,5117],{},[993,5103,5104],{},"输出提示信息",[993,5106,1267,5107,5110],{},[1005,5108,5109],{"code":5109},"mkdir"," 创建目录",[993,5112,5113,5116],{},[1107,5114,5115],{},"再次检查","目录是否创建成功",[993,5118,5119],{},"如果创建失败（可能因权限问题），报错退出",[993,5121,5122,5123,5126],{},"这种",[1107,5124,5125],{},"双重检查","确保目录确实创建成功",[2894,5128,5131],{"className":5129,"code":5130,"language":2575,"meta":2899},[4143],"# Create missing directories\nset DIRS = \"$LIBX11 $LIBX11\u002Fapp-defaults\"\nforeach dir ($DIRS)\nif (! -d $dir) then\n    echo \"Creating directory $dir\"\n    mkdir $dir\n    if (! -d $dir) then\n        echo \"Error: could not create directory $dir\"\n        exit 1\n    endif\nendif\nend\n# Determine the file(s) to install\nset FILES = \"\"\nif (! -f $XRGB) then\nset FILES = rgb.txt\nendif\nif (! -f $XERRDB || $reqs != 0) then\nset FILES = \"$FILES XErrorDB\"\nendif\n",[1005,5132,5130],{"__ignoreMap":2899},[982,5134],{},[3534,5136,5138],{"id":5137},"a-sample-csh-script-file-8","A Sample csh Script File (8)",[2991,5140,5141,5152,5155],{},[1684,5142,5143,5144,5147,5148,2191,5150,3552],{},"遍历 ",[1005,5145,5146],{"code":5146},"$FILES","（之前定义的 ",[1005,5149,4612],{"code":4612},[1005,5151,4598],{"code":4598},[1684,5153,5154],{},"如果目标文件已存在：",[990,5156,5157,5164],{},[993,5158,5159,5160,5163],{},"备份旧文件，重命名为 ",[1005,5161,5162],{"code":5162},".old"," 后缀",[993,5165,5166],{},"防止覆盖丢失原有配置",[2894,5168,5171],{"className":5169,"code":5170,"language":2575,"meta":2899},[4143],"# Install the required file(s)\nforeach f ($FILES)\nif (-f $LIBX11\u002F$f) then\n    echo \"Preserving old $f file in $LIBX11\u002F$f.old\"\n    mv $LIBX11\u002F$f $LIBX11\u002F$f.old\nendif\necho \"Copying $f to $LIBX11\"\ncp $SYNOPSYS\u002Fadmin\u002Fsetup\u002F$f $LIBX11\ndiff $SYNOPSYS\u002Fadmin\u002Fsetup\u002F$f $LIBX11\u002F$f >& \u002Fdev\u002Fnull\nif ($status) then\n    echo \"Error: could not copy file $f\"\n    exit 1\nendif\nchmod 444 $LIBX11\u002F$f\nend\nexit 0\n",[1005,5172,5170],{"__ignoreMap":2899},[990,5174,5175],{},[993,5176,5177,5178],{},"逻辑总结：\n",[990,5179,5180,5183,5186,5188,5195],{},[993,5181,5182],{},"检测和创建路径。",[993,5184,5185],{},"校验文件存在性与内容一致性。",[993,5187,4695],{},[993,5189,5190,5191,5194],{},"复制新文件并做 ",[1005,5192,5193],{"code":5193},"diff"," 校验。",[993,5196,5197],{},"设置权限（只读 444）。",[982,5199],{},[985,5201,5203],{"id":5202},"comparing-shell-features-and-learn-more","Comparing Shell Features and Learn More",[990,5205,5206,5225,5232,5251],{},[993,5207,5208,5209],{},"建议了解更多 shell 特性：\n",[990,5210,5211],{},[993,5212,5213,5214],{},"参考文献：\n",[990,5215,5216,5219,5222],{},[993,5217,5218],{},"《Introduction to Linux》附录 C。",[993,5220,5221],{},"表 C-1：各 shell 的共同特性。",[993,5223,5224],{},"表 C-2：各 shell 的差异特性。",[993,5226,5227,5228,2191,5230,1026],{},"学习重点：",[1005,5229,2575],{"code":2575},[1005,5231,2559],{"code":2559},[993,5233,5234,5235,5237,5238],{},"建议使用 ",[1005,5236,2759],{"code":2759}," 查看手册：\n",[990,5239,5240],{},[993,5241,5242,1774,5245,1774,5248,1026],{},[1005,5243,5244],{"code":5244},"man sh",[1005,5246,5247],{"code":5247},"man bash",[1005,5249,5250],{"code":5250},"man csh",[993,5252,5253,5254],{},"bash 调试模式：\n",[990,5255,5256],{},[993,5257,1267,5258,5261],{},[1005,5259,5260],{"code":5260},"bash -x"," 可以跟踪脚本执行过程。",{"title":2899,"searchDepth":5263,"depth":5263,"links":5264},4,[5265,5292],{"id":980,"depth":5266,"text":980,"children":5267},2,[5268,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291],{"id":987,"depth":5269,"text":988},3,{"id":1095,"depth":5269,"text":1096},{"id":1156,"depth":5269,"text":1157},{"id":1209,"depth":5269,"text":1210},{"id":1253,"depth":5269,"text":1254},{"id":1311,"depth":5269,"text":1312},{"id":1406,"depth":5269,"text":1407},{"id":1459,"depth":5269,"text":1460},{"id":1505,"depth":5269,"text":1506},{"id":1574,"depth":5269,"text":1575},{"id":1651,"depth":5269,"text":1652},{"id":1723,"depth":5269,"text":1724},{"id":1792,"depth":5269,"text":1793},{"id":1856,"depth":5269,"text":1857},{"id":1919,"depth":5269,"text":1920},{"id":1986,"depth":5269,"text":1987},{"id":2055,"depth":5269,"text":2056},{"id":2077,"depth":5269,"text":2078},{"id":2152,"depth":5269,"text":2153},{"id":2229,"depth":5269,"text":2230},{"id":2263,"depth":5269,"text":2264},{"id":2326,"depth":5269,"text":2327},{"id":2433,"depth":5269,"text":2434},{"id":2502,"depth":5266,"text":497,"children":5293},[5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5315,5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,5343],{"id":2539,"depth":5269,"text":2540},{"id":2598,"depth":5269,"text":2599},{"id":2625,"depth":5269,"text":2626},{"id":2654,"depth":5269,"text":2655},{"id":2710,"depth":5269,"text":2711},{"id":2785,"depth":5269,"text":2786},{"id":2807,"depth":5269,"text":2808},{"id":2866,"depth":5269,"text":2867},{"id":2906,"depth":5269,"text":2907},{"id":2999,"depth":5269,"text":3000},{"id":3058,"depth":5269,"text":3059},{"id":3115,"depth":5269,"text":3116},{"id":3153,"depth":5269,"text":3154},{"id":3218,"depth":5269,"text":3219},{"id":3266,"depth":5269,"text":3267},{"id":3314,"depth":5269,"text":3315},{"id":3357,"depth":5269,"text":3358},{"id":3395,"depth":5269,"text":3395},{"id":3531,"depth":5269,"text":3532,"children":5313},[5314],{"id":3536,"depth":5263,"text":3537},{"id":3670,"depth":5269,"text":3671},{"id":3734,"depth":5269,"text":3735},{"id":3787,"depth":5269,"text":3788},{"id":3848,"depth":5269,"text":3849},{"id":3879,"depth":5269,"text":3880},{"id":3897,"depth":5269,"text":3898},{"id":3967,"depth":5269,"text":3968},{"id":3991,"depth":5269,"text":3991},{"id":4004,"depth":5269,"text":4004},{"id":4024,"depth":5269,"text":4025},{"id":4138,"depth":5269,"text":4139},{"id":4195,"depth":5269,"text":4196},{"id":4255,"depth":5269,"text":4256},{"id":4312,"depth":5269,"text":4313},{"id":4387,"depth":5269,"text":4388},{"id":4442,"depth":5269,"text":4443},{"id":4497,"depth":5269,"text":4498},{"id":4573,"depth":5269,"text":4574},{"id":4655,"depth":5269,"text":4656,"children":5334},[5335,5336,5337,5338,5339,5340,5341,5342],{"id":4703,"depth":5263,"text":4704},{"id":4727,"depth":5263,"text":4728},{"id":4798,"depth":5263,"text":4799},{"id":4851,"depth":5263,"text":4852},{"id":4925,"depth":5263,"text":4926},{"id":4994,"depth":5263,"text":4995},{"id":5068,"depth":5263,"text":5069},{"id":5137,"depth":5263,"text":5138},{"id":5202,"depth":5269,"text":5203},[903],"Vi 编辑器与 Shell：详细版笔记","md",null,{"slots":5349},{},{"text":416,"minutes":417,"time":418,"words":419},{"title":413,"description":5345},{"loc":412},[5354,5355],"Linux","课程笔记","tech","2g7hBMgVppij5ehhvNHvP-VkpDmk_szgWr93adColoU",[5359,5360],{"title":404,"path":403,"stem":402,"date":405,"type":5356,"children":-1},{"title":423,"path":422,"stem":421,"date":424,"type":5356,"children":-1},1789057284160]