[{"data":1,"prerenderedAt":5750},["ShallowReactive",2],{"sidebar-page":3,"tag-运维":4},null,[5],{"id":6,"title":7,"author":8,"body":9,"cover":3,"date":5739,"description":15,"extension":5740,"meta":5741,"navigation":253,"path":5742,"seo":5743,"stem":5744,"tags":5745,"__hash__":5749},"content\u002Flinux-memo-2026-09-25.md","Linux 备忘录","AeYunDian",{"type":10,"value":11,"toc":5691},"minimark",[12,16,21,26,29,101,112,135,145,149,219,223,335,341,420,425,470,474,481,489,492,550,554,653,656,714,718,723,782,831,837,841,871,875,880,922,926,1006,1010,1207,1210,1364,1368,1764,1767,1834,1838,1945,1948,1994,2012,2015,2074,2078,2278,2281,2342,2346,2674,2677,2815,2819,2949,2952,3000,3004,3188,3192,3388,3391,3400,3406,3410,3574,3580,3655,3683,3687,3796,3801,3807,3814,3817,3937,3941,3945,4143,4147,4349,4353,4437,4441,4562,4566,4713,4717,4786,4789,4828,4831,4970,4974,5007,5010,5016,5018,5024,5027,5042,5046,5250,5253,5324,5327,5518,5522,5633,5636,5639,5687],[13,14,15],"p",{},"国内环境下的高频命令。换源和镜像放在最前面。",[17,18,20],"h2",{"id":19},"一换源","一、换源",[22,23,25],"h3",{"id":24},"_11-aptdebian-ubuntu","1.1 apt（Debian \u002F Ubuntu）",[13,27,28],{},"先备份，再替换：",[30,31,36],"pre",{"className":32,"code":33,"language":34,"meta":35,"style":35},"language-bash shiki shiki-themes monokai","sudo cp \u002Fetc\u002Fapt\u002Fsources.list \u002Fetc\u002Fapt\u002Fsources.list.bak\nsudo sed -i 's|http:\u002F\u002Farchive.ubuntu.com|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn|g' \u002Fetc\u002Fapt\u002Fsources.list\nsudo sed -i 's|http:\u002F\u002Fsecurity.ubuntu.com|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn|g' \u002Fetc\u002Fapt\u002Fsources.list\nsudo apt update\n","bash","",[37,38,39,58,76,90],"code",{"__ignoreMap":35},[40,41,44,48,52,55],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"sHkqI","sudo",[40,49,51],{"class":50},"s_Ekj"," cp",[40,53,54],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list",[40,56,57],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list.bak\n",[40,59,61,63,66,70,73],{"class":42,"line":60},2,[40,62,47],{"class":46},[40,64,65],{"class":50}," sed",[40,67,69],{"class":68},"s7s5_"," -i",[40,71,72],{"class":50}," 's|http:\u002F\u002Farchive.ubuntu.com|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn|g'",[40,74,75],{"class":50}," \u002Fetc\u002Fapt\u002Fsources.list\n",[40,77,79,81,83,85,88],{"class":42,"line":78},3,[40,80,47],{"class":46},[40,82,65],{"class":50},[40,84,69],{"class":68},[40,86,87],{"class":50}," 's|http:\u002F\u002Fsecurity.ubuntu.com|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn|g'",[40,89,75],{"class":50},[40,91,93,95,98],{"class":42,"line":92},4,[40,94,47],{"class":46},[40,96,97],{"class":50}," apt",[40,99,100],{"class":50}," update\n",[13,102,103,107,108,111],{},[104,105,106],"strong",{},"Ubuntu 24.04+"," 使用新格式 ",[37,109,110],{},"\u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources","：",[30,113,115],{"className":32,"code":114,"language":34,"meta":35,"style":35},"sudo sed -i 's|http:\u002F\u002Farchive.ubuntu.com|https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn|g' \\\n  \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[37,116,117,130],{"__ignoreMap":35},[40,118,119,121,123,125,127],{"class":42,"line":43},[40,120,47],{"class":46},[40,122,65],{"class":50},[40,124,69],{"class":68},[40,126,72],{"class":50},[40,128,129],{"class":68}," \\\n",[40,131,132],{"class":42,"line":60},[40,133,134],{"class":50},"  \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[13,136,137,140,141,144],{},[104,138,139],{},"Debian 12+"," 使用 ",[37,142,143],{},"\u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdebian.sources","，同理。",[22,146,148],{"id":147},"_12-常用-apt-镜像源","1.2 常用 apt 镜像源",[150,151,152,165],"table",{},[153,154,155],"thead",{},[156,157,158,162],"tr",{},[159,160,161],"th",{},"源",[159,163,164],{},"URL",[166,167,168,179,189,199,209],"tbody",{},[156,169,170,174],{},[171,172,173],"td",{},"清华",[171,175,176],{},[37,177,178],{},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn",[156,180,181,184],{},[171,182,183],{},"阿里云",[171,185,186],{},[37,187,188],{},"https:\u002F\u002Fmirrors.aliyun.com",[156,190,191,194],{},[171,192,193],{},"中科大",[171,195,196],{},[37,197,198],{},"https:\u002F\u002Fmirrors.ustc.edu.cn",[156,200,201,204],{},[171,202,203],{},"华为云",[171,205,206],{},[37,207,208],{},"https:\u002F\u002Fmirrors.huaweicloud.com",[156,210,211,214],{},[171,212,213],{},"网易",[171,215,216],{},[37,217,218],{},"https:\u002F\u002Fmirrors.163.com",[22,220,222],{"id":221},"_13-yum-dnfrhel-centos-fedora","1.3 yum \u002F dnf（RHEL \u002F CentOS \u002F Fedora）",[30,224,226],{"className":32,"code":225,"language":34,"meta":35,"style":35},"# 备份\nsudo cp -r \u002Fetc\u002Fyum.repos.d \u002Fetc\u002Fyum.repos.d.bak\n\n# CentOS 7 换阿里云\nsudo sed -i 's|mirrorlist=|#mirrorlist=|g' \u002Fetc\u002Fyum.repos.d\u002FCentOS-*.repo\nsudo sed -i 's|#baseurl=http:\u002F\u002Fmirror.centos.org|baseurl=https:\u002F\u002Fmirrors.aliyun.com|g' \\\n  \u002Fetc\u002Fyum.repos.d\u002FCentOS-*.repo\n\nsudo yum clean all\nsudo yum makecache\n",[37,227,228,234,249,255,260,282,296,306,311,325],{"__ignoreMap":35},[40,229,230],{"class":42,"line":43},[40,231,233],{"class":232},"snpHw","# 备份\n",[40,235,236,238,240,243,246],{"class":42,"line":60},[40,237,47],{"class":46},[40,239,51],{"class":50},[40,241,242],{"class":68}," -r",[40,244,245],{"class":50}," \u002Fetc\u002Fyum.repos.d",[40,247,248],{"class":50}," \u002Fetc\u002Fyum.repos.d.bak\n",[40,250,251],{"class":42,"line":78},[40,252,254],{"emptyLinePlaceholder":253},true,"\n",[40,256,257],{"class":42,"line":92},[40,258,259],{"class":232},"# CentOS 7 换阿里云\n",[40,261,263,265,267,269,272,275,279],{"class":42,"line":262},5,[40,264,47],{"class":46},[40,266,65],{"class":50},[40,268,69],{"class":68},[40,270,271],{"class":50}," 's|mirrorlist=|#mirrorlist=|g'",[40,273,274],{"class":50}," \u002Fetc\u002Fyum.repos.d\u002FCentOS-",[40,276,278],{"class":277},"szGx7","*",[40,280,281],{"class":50},".repo\n",[40,283,285,287,289,291,294],{"class":42,"line":284},6,[40,286,47],{"class":46},[40,288,65],{"class":50},[40,290,69],{"class":68},[40,292,293],{"class":50}," 's|#baseurl=http:\u002F\u002Fmirror.centos.org|baseurl=https:\u002F\u002Fmirrors.aliyun.com|g'",[40,295,129],{"class":68},[40,297,299,302,304],{"class":42,"line":298},7,[40,300,301],{"class":50},"  \u002Fetc\u002Fyum.repos.d\u002FCentOS-",[40,303,278],{"class":277},[40,305,281],{"class":50},[40,307,309],{"class":42,"line":308},8,[40,310,254],{"emptyLinePlaceholder":253},[40,312,314,316,319,322],{"class":42,"line":313},9,[40,315,47],{"class":46},[40,317,318],{"class":50}," yum",[40,320,321],{"class":50}," clean",[40,323,324],{"class":50}," all\n",[40,326,328,330,332],{"class":42,"line":327},10,[40,329,47],{"class":46},[40,331,318],{"class":50},[40,333,334],{"class":50}," makecache\n",[13,336,337,340],{},[104,338,339],{},"CentOS 8 \u002F Stream"," 需要先换 vault（官方源已下线）：",[30,342,344],{"className":32,"code":343,"language":34,"meta":35,"style":35},"sudo sed -i 's|mirror.centos.org|mirrors.aliyun.com|g' \u002Fetc\u002Fyum.repos.d\u002F*.repo\nsudo sed -i 's|^#baseurl|baseurl|g' \u002Fetc\u002Fyum.repos.d\u002F*.repo\nsudo sed -i 's|^mirrorlist|#mirrorlist|g' \u002Fetc\u002Fyum.repos.d\u002F*.repo\nsudo dnf clean all && sudo dnf makecache\n",[37,345,346,364,381,398],{"__ignoreMap":35},[40,347,348,350,352,354,357,360,362],{"class":42,"line":43},[40,349,47],{"class":46},[40,351,65],{"class":50},[40,353,69],{"class":68},[40,355,356],{"class":50}," 's|mirror.centos.org|mirrors.aliyun.com|g'",[40,358,359],{"class":50}," \u002Fetc\u002Fyum.repos.d\u002F",[40,361,278],{"class":277},[40,363,281],{"class":50},[40,365,366,368,370,372,375,377,379],{"class":42,"line":60},[40,367,47],{"class":46},[40,369,65],{"class":50},[40,371,69],{"class":68},[40,373,374],{"class":50}," 's|^#baseurl|baseurl|g'",[40,376,359],{"class":50},[40,378,278],{"class":277},[40,380,281],{"class":50},[40,382,383,385,387,389,392,394,396],{"class":42,"line":78},[40,384,47],{"class":46},[40,386,65],{"class":50},[40,388,69],{"class":68},[40,390,391],{"class":50}," 's|^mirrorlist|#mirrorlist|g'",[40,393,359],{"class":50},[40,395,278],{"class":277},[40,397,281],{"class":50},[40,399,400,402,405,407,410,414,416,418],{"class":42,"line":92},[40,401,47],{"class":46},[40,403,404],{"class":50}," dnf",[40,406,321],{"class":50},[40,408,409],{"class":50}," all",[40,411,413],{"class":412},"sCdxs"," && ",[40,415,47],{"class":46},[40,417,404],{"class":50},[40,419,334],{"class":50},[13,421,422,111],{},[104,423,424],{},"Fedora",[30,426,428],{"className":32,"code":427,"language":34,"meta":35,"style":35},"sudo sed -i 's|^metalink=|#metalink=|g' \u002Fetc\u002Fyum.repos.d\u002Ffedora*.repo\nsudo sed -i 's|^#baseurl=http:\u002F\u002Fdownload.example\u002Fpub\u002Ffedora\u002Flinux|baseurl=https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Ffedora|g' \\\n  \u002Fetc\u002Fyum.repos.d\u002Ffedora*.repo\n",[37,429,430,448,461],{"__ignoreMap":35},[40,431,432,434,436,438,441,444,446],{"class":42,"line":43},[40,433,47],{"class":46},[40,435,65],{"class":50},[40,437,69],{"class":68},[40,439,440],{"class":50}," 's|^metalink=|#metalink=|g'",[40,442,443],{"class":50}," \u002Fetc\u002Fyum.repos.d\u002Ffedora",[40,445,278],{"class":277},[40,447,281],{"class":50},[40,449,450,452,454,456,459],{"class":42,"line":60},[40,451,47],{"class":46},[40,453,65],{"class":50},[40,455,69],{"class":68},[40,457,458],{"class":50}," 's|^#baseurl=http:\u002F\u002Fdownload.example\u002Fpub\u002Ffedora\u002Flinux|baseurl=https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Ffedora|g'",[40,460,129],{"class":68},[40,462,463,466,468],{"class":42,"line":78},[40,464,465],{"class":50},"  \u002Fetc\u002Fyum.repos.d\u002Ffedora",[40,467,278],{"class":277},[40,469,281],{"class":50},[22,471,473],{"id":472},"_14-pacmanarch","1.4 pacman（Arch）",[13,475,476,477,480],{},"编辑 ",[37,478,479],{},"\u002Fetc\u002Fpacman.d\u002Fmirrorlist","，把国内源放前面：",[30,482,487],{"className":483,"code":485,"language":486},[484],"language-text","Server = https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Farchlinux\u002F$repo\u002Fos\u002F$arch\nServer = https:\u002F\u002Fmirrors.ustc.edu.cn\u002Farchlinux\u002F$repo\u002Fos\u002F$arch\n","text",[37,488,485],{"__ignoreMap":35},[13,490,491],{},"或者一键：",[30,493,495],{"className":32,"code":494,"language":34,"meta":35,"style":35},"sudo pacman -S reflector\nsudo reflector --country China --latest 5 --sort rate --save \u002Fetc\u002Fpacman.d\u002Fmirrorlist\nsudo pacman -Syyu\n",[37,496,497,510,541],{"__ignoreMap":35},[40,498,499,501,504,507],{"class":42,"line":43},[40,500,47],{"class":46},[40,502,503],{"class":50}," pacman",[40,505,506],{"class":68}," -S",[40,508,509],{"class":50}," reflector\n",[40,511,512,514,517,520,523,526,529,532,535,538],{"class":42,"line":60},[40,513,47],{"class":46},[40,515,516],{"class":50}," reflector",[40,518,519],{"class":68}," --country",[40,521,522],{"class":50}," China",[40,524,525],{"class":68}," --latest",[40,527,528],{"class":68}," 5",[40,530,531],{"class":68}," --sort",[40,533,534],{"class":50}," rate",[40,536,537],{"class":68}," --save",[40,539,540],{"class":50}," \u002Fetc\u002Fpacman.d\u002Fmirrorlist\n",[40,542,543,545,547],{"class":42,"line":78},[40,544,47],{"class":46},[40,546,503],{"class":50},[40,548,549],{"class":68}," -Syyu\n",[22,551,553],{"id":552},"_15-pip-换源","1.5 pip 换源",[30,555,557],{"className":32,"code":556,"language":34,"meta":35,"style":35},"# 永久\npip config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\npip config set global.trusted-host pypi.tuna.tsinghua.edu.cn\n\n# 或写入 ~\u002F.pip\u002Fpip.conf (Linux) \u002F %APPDATA%\\pip\\pip.ini (Windows)\n# [global]\n# index-url = https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n# trusted-host = pypi.tuna.tsinghua.edu.cn\n\n# 一次性\npip install \u003Cpkg> -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[37,558,559,564,581,595,599,604,609,614,619,623,628],{"__ignoreMap":35},[40,560,561],{"class":42,"line":43},[40,562,563],{"class":232},"# 永久\n",[40,565,566,569,572,575,578],{"class":42,"line":60},[40,567,568],{"class":46},"pip",[40,570,571],{"class":50}," config",[40,573,574],{"class":50}," set",[40,576,577],{"class":50}," global.index-url",[40,579,580],{"class":50}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[40,582,583,585,587,589,592],{"class":42,"line":78},[40,584,568],{"class":46},[40,586,571],{"class":50},[40,588,574],{"class":50},[40,590,591],{"class":50}," global.trusted-host",[40,593,594],{"class":50}," pypi.tuna.tsinghua.edu.cn\n",[40,596,597],{"class":42,"line":92},[40,598,254],{"emptyLinePlaceholder":253},[40,600,601],{"class":42,"line":262},[40,602,603],{"class":232},"# 或写入 ~\u002F.pip\u002Fpip.conf (Linux) \u002F %APPDATA%\\pip\\pip.ini (Windows)\n",[40,605,606],{"class":42,"line":284},[40,607,608],{"class":232},"# [global]\n",[40,610,611],{"class":42,"line":298},[40,612,613],{"class":232},"# index-url = https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[40,615,616],{"class":42,"line":308},[40,617,618],{"class":232},"# trusted-host = pypi.tuna.tsinghua.edu.cn\n",[40,620,621],{"class":42,"line":313},[40,622,254],{"emptyLinePlaceholder":253},[40,624,625],{"class":42,"line":327},[40,626,627],{"class":232},"# 一次性\n",[40,629,631,633,636,640,643,646,649,651],{"class":42,"line":630},11,[40,632,568],{"class":46},[40,634,635],{"class":50}," install",[40,637,639],{"class":638},"s8I7P"," \u003C",[40,641,642],{"class":50},"pk",[40,644,645],{"class":412},"g",[40,647,648],{"class":638},">",[40,650,69],{"class":68},[40,652,580],{"class":50},[13,654,655],{},"常用 pip 镜像：",[150,657,658,666],{},[153,659,660],{},[156,661,662,664],{},[159,663,161],{},[159,665,164],{},[166,667,668,677,686,695,705],{},[156,669,670,672],{},[171,671,173],{},[171,673,674],{},[37,675,676],{},"https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[156,678,679,681],{},[171,680,183],{},[171,682,683],{},[37,684,685],{},"https:\u002F\u002Fmirrors.aliyun.com\u002Fpypi\u002Fsimple\u002F",[156,687,688,690],{},[171,689,193],{},[171,691,692],{},[37,693,694],{},"https:\u002F\u002Fpypi.mirrors.ustc.edu.cn\u002Fsimple\u002F",[156,696,697,700],{},[171,698,699],{},"豆瓣",[171,701,702],{},[37,703,704],{},"https:\u002F\u002Fpypi.douban.com\u002Fsimple\u002F",[156,706,707,709],{},[171,708,203],{},[171,710,711],{},[37,712,713],{},"https:\u002F\u002Fmirrors.huaweicloud.com\u002Frepository\u002Fpypi\u002Fsimple\u002F",[22,715,717],{"id":716},"_16-docker-镜像加速","1.6 Docker 镜像加速",[13,719,476,720,111],{},[37,721,722],{},"\u002Fetc\u002Fdocker\u002Fdaemon.json",[30,724,728],{"className":725,"code":726,"language":727,"meta":35,"style":35},"language-json shiki shiki-themes monokai","{\n  \"registry-mirrors\": [\n    \"https:\u002F\u002Fdocker.m.daocloud.io\",\n    \"https:\u002F\u002Fdockerproxy.com\",\n    \"https:\u002F\u002Fmirror.baidubce.com\",\n    \"https:\u002F\u002Fccr.ccs.tencentyun.com\"\n  ]\n}\n","json",[37,729,730,735,744,753,760,767,772,777],{"__ignoreMap":35},[40,731,732],{"class":42,"line":43},[40,733,734],{"class":412},"{\n",[40,736,737,741],{"class":42,"line":60},[40,738,740],{"class":739},"sOx1s","  \"registry-mirrors\"",[40,742,743],{"class":412},": [\n",[40,745,746,750],{"class":42,"line":78},[40,747,749],{"class":748},"susgL","    \"https:\u002F\u002Fdocker.m.daocloud.io\"",[40,751,752],{"class":412},",\n",[40,754,755,758],{"class":42,"line":92},[40,756,757],{"class":748},"    \"https:\u002F\u002Fdockerproxy.com\"",[40,759,752],{"class":412},[40,761,762,765],{"class":42,"line":262},[40,763,764],{"class":748},"    \"https:\u002F\u002Fmirror.baidubce.com\"",[40,766,752],{"class":412},[40,768,769],{"class":42,"line":284},[40,770,771],{"class":748},"    \"https:\u002F\u002Fccr.ccs.tencentyun.com\"\n",[40,773,774],{"class":42,"line":298},[40,775,776],{"class":412},"  ]\n",[40,778,779],{"class":42,"line":308},[40,780,781],{"class":412},"}\n",[30,783,785],{"className":32,"code":784,"language":34,"meta":35,"style":35},"sudo systemctl daemon-reload\nsudo systemctl restart docker\ndocker info | grep -A 5 \"Registry Mirrors\"\n",[37,786,787,797,809],{"__ignoreMap":35},[40,788,789,791,794],{"class":42,"line":43},[40,790,47],{"class":46},[40,792,793],{"class":50}," systemctl",[40,795,796],{"class":50}," daemon-reload\n",[40,798,799,801,803,806],{"class":42,"line":60},[40,800,47],{"class":46},[40,802,793],{"class":50},[40,804,805],{"class":50}," restart",[40,807,808],{"class":50}," docker\n",[40,810,811,814,817,820,823,826,828],{"class":42,"line":78},[40,812,813],{"class":46},"docker",[40,815,816],{"class":50}," info",[40,818,819],{"class":638}," |",[40,821,822],{"class":46}," grep",[40,824,825],{"class":68}," -A",[40,827,528],{"class":68},[40,829,830],{"class":50}," \"Registry Mirrors\"\n",[832,833,834],"blockquote",{},[13,835,836],{},"2024 年后很多公共镜像源已停服，以上仅供参考。企业环境建议自建 Harbor 或使用阿里云\u002F腾讯云容器镜像服务。",[22,838,840],{"id":839},"_17-go-module-代理","1.7 Go module 代理",[30,842,844],{"className":32,"code":843,"language":34,"meta":35,"style":35},"go env -w GOPROXY=https:\u002F\u002Fgoproxy.cn,direct\ngo env -w GOSUMDB=sum.golang.google.cn\n",[37,845,846,860],{"__ignoreMap":35},[40,847,848,851,854,857],{"class":42,"line":43},[40,849,850],{"class":46},"go",[40,852,853],{"class":50}," env",[40,855,856],{"class":68}," -w",[40,858,859],{"class":50}," GOPROXY=https:\u002F\u002Fgoproxy.cn,direct\n",[40,861,862,864,866,868],{"class":42,"line":60},[40,863,850],{"class":46},[40,865,853],{"class":50},[40,867,856],{"class":68},[40,869,870],{"class":50}," GOSUMDB=sum.golang.google.cn\n",[22,872,874],{"id":873},"_18-maven-换源","1.8 Maven 换源",[13,876,476,877,111],{},[37,878,879],{},"~\u002F.m2\u002Fsettings.xml",[30,881,885],{"className":882,"code":883,"language":884,"meta":35,"style":35},"language-xml shiki shiki-themes monokai","\u003Cmirrors>\n  \u003Cmirror>\n    \u003Cid>aliyun\u003C\u002Fid>\n    \u003CmirrorOf>central\u003C\u002FmirrorOf>\n    \u003Curl>https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic\u003C\u002Furl>\n  \u003C\u002Fmirror>\n\u003C\u002Fmirrors>\n","xml",[37,886,887,892,897,902,907,912,917],{"__ignoreMap":35},[40,888,889],{"class":42,"line":43},[40,890,891],{},"\u003Cmirrors>\n",[40,893,894],{"class":42,"line":60},[40,895,896],{},"  \u003Cmirror>\n",[40,898,899],{"class":42,"line":78},[40,900,901],{},"    \u003Cid>aliyun\u003C\u002Fid>\n",[40,903,904],{"class":42,"line":92},[40,905,906],{},"    \u003CmirrorOf>central\u003C\u002FmirrorOf>\n",[40,908,909],{"class":42,"line":262},[40,910,911],{},"    \u003Curl>https:\u002F\u002Fmaven.aliyun.com\u002Frepository\u002Fpublic\u003C\u002Furl>\n",[40,913,914],{"class":42,"line":284},[40,915,916],{},"  \u003C\u002Fmirror>\n",[40,918,919],{"class":42,"line":298},[40,920,921],{},"\u003C\u002Fmirrors>\n",[22,923,925],{"id":924},"_19-换源后必做","1.9 换源后必做",[30,927,929],{"className":32,"code":928,"language":34,"meta":35,"style":35},"# apt\nsudo apt update\n\n# yum \u002F dnf\nsudo yum clean all && sudo yum makecache\nsudo dnf clean all && sudo dnf makecache\n\n# pacman\nsudo pacman -Syyu\n",[37,930,931,936,944,948,953,971,989,993,998],{"__ignoreMap":35},[40,932,933],{"class":42,"line":43},[40,934,935],{"class":232},"# apt\n",[40,937,938,940,942],{"class":42,"line":60},[40,939,47],{"class":46},[40,941,97],{"class":50},[40,943,100],{"class":50},[40,945,946],{"class":42,"line":78},[40,947,254],{"emptyLinePlaceholder":253},[40,949,950],{"class":42,"line":92},[40,951,952],{"class":232},"# yum \u002F dnf\n",[40,954,955,957,959,961,963,965,967,969],{"class":42,"line":262},[40,956,47],{"class":46},[40,958,318],{"class":50},[40,960,321],{"class":50},[40,962,409],{"class":50},[40,964,413],{"class":412},[40,966,47],{"class":46},[40,968,318],{"class":50},[40,970,334],{"class":50},[40,972,973,975,977,979,981,983,985,987],{"class":42,"line":284},[40,974,47],{"class":46},[40,976,404],{"class":50},[40,978,321],{"class":50},[40,980,409],{"class":50},[40,982,413],{"class":412},[40,984,47],{"class":46},[40,986,404],{"class":50},[40,988,334],{"class":50},[40,990,991],{"class":42,"line":298},[40,992,254],{"emptyLinePlaceholder":253},[40,994,995],{"class":42,"line":308},[40,996,997],{"class":232},"# pacman\n",[40,999,1000,1002,1004],{"class":42,"line":313},[40,1001,47],{"class":46},[40,1003,503],{"class":50},[40,1005,549],{"class":68},[17,1007,1009],{"id":1008},"二文件与目录","二、文件与目录",[30,1011,1013],{"className":32,"code":1012,"language":34,"meta":35,"style":35},"pwd                               # 当前目录\nls -alh                           # 详细列表\ncd -                              # 上一个目录\nmkdir -p a\u002Fb\u002Fc                    # 递归创建\nrm -rf \u003Cdir>                      # 递归删除（危险）\ncp -r \u003Csrc> \u003Cdst>                 # 递归复制\nmv \u003Csrc> \u003Cdst>                    # 移动 \u002F 重命名\nln -s \u003Ctarget> \u003Clink>             # 软链接\ntouch \u003Cfile>\nstat \u003Cfile>\nfile \u003Cfile>\n",[37,1014,1015,1024,1035,1046,1060,1081,1111,1135,1165,1181,1194],{"__ignoreMap":35},[40,1016,1017,1021],{"class":42,"line":43},[40,1018,1020],{"class":1019},"sYf5A","pwd",[40,1022,1023],{"class":232},"                               # 当前目录\n",[40,1025,1026,1029,1032],{"class":42,"line":60},[40,1027,1028],{"class":46},"ls",[40,1030,1031],{"class":68}," -alh",[40,1033,1034],{"class":232},"                           # 详细列表\n",[40,1036,1037,1040,1043],{"class":42,"line":78},[40,1038,1039],{"class":1019},"cd",[40,1041,1042],{"class":50}," -",[40,1044,1045],{"class":232},"                              # 上一个目录\n",[40,1047,1048,1051,1054,1057],{"class":42,"line":92},[40,1049,1050],{"class":46},"mkdir",[40,1052,1053],{"class":68}," -p",[40,1055,1056],{"class":50}," a\u002Fb\u002Fc",[40,1058,1059],{"class":232},"                    # 递归创建\n",[40,1061,1062,1065,1068,1070,1073,1076,1078],{"class":42,"line":262},[40,1063,1064],{"class":46},"rm",[40,1066,1067],{"class":68}," -rf",[40,1069,639],{"class":638},[40,1071,1072],{"class":50},"di",[40,1074,1075],{"class":412},"r",[40,1077,648],{"class":638},[40,1079,1080],{"class":232},"                      # 递归删除（危险）\n",[40,1082,1083,1086,1088,1090,1093,1096,1098,1100,1103,1106,1108],{"class":42,"line":284},[40,1084,1085],{"class":46},"cp",[40,1087,242],{"class":68},[40,1089,639],{"class":638},[40,1091,1092],{"class":50},"sr",[40,1094,1095],{"class":412},"c",[40,1097,648],{"class":638},[40,1099,639],{"class":638},[40,1101,1102],{"class":50},"ds",[40,1104,1105],{"class":412},"t",[40,1107,648],{"class":638},[40,1109,1110],{"class":232},"                 # 递归复制\n",[40,1112,1113,1116,1118,1120,1122,1124,1126,1128,1130,1132],{"class":42,"line":298},[40,1114,1115],{"class":46},"mv",[40,1117,639],{"class":638},[40,1119,1092],{"class":50},[40,1121,1095],{"class":412},[40,1123,648],{"class":638},[40,1125,639],{"class":638},[40,1127,1102],{"class":50},[40,1129,1105],{"class":412},[40,1131,648],{"class":638},[40,1133,1134],{"class":232},"                    # 移动 \u002F 重命名\n",[40,1136,1137,1140,1143,1145,1148,1150,1152,1154,1157,1160,1162],{"class":42,"line":308},[40,1138,1139],{"class":46},"ln",[40,1141,1142],{"class":68}," -s",[40,1144,639],{"class":638},[40,1146,1147],{"class":50},"targe",[40,1149,1105],{"class":412},[40,1151,648],{"class":638},[40,1153,639],{"class":638},[40,1155,1156],{"class":50},"lin",[40,1158,1159],{"class":412},"k",[40,1161,648],{"class":638},[40,1163,1164],{"class":232},"             # 软链接\n",[40,1166,1167,1170,1172,1175,1178],{"class":42,"line":313},[40,1168,1169],{"class":46},"touch",[40,1171,639],{"class":638},[40,1173,1174],{"class":50},"fil",[40,1176,1177],{"class":412},"e",[40,1179,1180],{"class":638},">\n",[40,1182,1183,1186,1188,1190,1192],{"class":42,"line":327},[40,1184,1185],{"class":1019},"stat",[40,1187,639],{"class":638},[40,1189,1174],{"class":50},[40,1191,1177],{"class":412},[40,1193,1180],{"class":638},[40,1195,1196,1199,1201,1203,1205],{"class":42,"line":630},[40,1197,1198],{"class":46},"file",[40,1200,639],{"class":638},[40,1202,1174],{"class":50},[40,1204,1177],{"class":412},[40,1206,1180],{"class":638},[22,1208,1209],{"id":1209},"查找",[30,1211,1213],{"className":32,"code":1212,"language":34,"meta":35,"style":35},"find . -name \"*.log\"                          # 按名\nfind . -type f -size +100M                    # >100M\nfind . -mtime -7                              # 7 天内\nfind . -name \"*.tmp\" -delete                  # 找到删除\nfind . -type f -exec chmod 644 {} \\;          # 批量执行\n\nwhich \u003Ccmd>                       # 命令路径\nwhereis \u003Ccmd>\nlocate \u003Cfile>                     # 快速（需 updatedb）\n",[37,1214,1215,1232,1253,1268,1285,1313,1317,1335,1348],{"__ignoreMap":35},[40,1216,1217,1220,1223,1226,1229],{"class":42,"line":43},[40,1218,1219],{"class":46},"find",[40,1221,1222],{"class":50}," .",[40,1224,1225],{"class":68}," -name",[40,1227,1228],{"class":50}," \"*.log\"",[40,1230,1231],{"class":232},"                          # 按名\n",[40,1233,1234,1236,1238,1241,1244,1247,1250],{"class":42,"line":60},[40,1235,1219],{"class":46},[40,1237,1222],{"class":50},[40,1239,1240],{"class":68}," -type",[40,1242,1243],{"class":50}," f",[40,1245,1246],{"class":68}," -size",[40,1248,1249],{"class":50}," +100M",[40,1251,1252],{"class":232},"                    # >100M\n",[40,1254,1255,1257,1259,1262,1265],{"class":42,"line":78},[40,1256,1219],{"class":46},[40,1258,1222],{"class":50},[40,1260,1261],{"class":68}," -mtime",[40,1263,1264],{"class":68}," -7",[40,1266,1267],{"class":232},"                              # 7 天内\n",[40,1269,1270,1272,1274,1276,1279,1282],{"class":42,"line":92},[40,1271,1219],{"class":46},[40,1273,1222],{"class":50},[40,1275,1225],{"class":68},[40,1277,1278],{"class":50}," \"*.tmp\"",[40,1280,1281],{"class":68}," -delete",[40,1283,1284],{"class":232},"                  # 找到删除\n",[40,1286,1287,1289,1291,1293,1295,1298,1301,1304,1307,1310],{"class":42,"line":262},[40,1288,1219],{"class":46},[40,1290,1222],{"class":50},[40,1292,1240],{"class":68},[40,1294,1243],{"class":50},[40,1296,1297],{"class":68}," -exec",[40,1299,1300],{"class":50}," chmod",[40,1302,1303],{"class":68}," 644",[40,1305,1306],{"class":50}," {}",[40,1308,1309],{"class":68}," \\;",[40,1311,1312],{"class":232},"          # 批量执行\n",[40,1314,1315],{"class":42,"line":284},[40,1316,254],{"emptyLinePlaceholder":253},[40,1318,1319,1322,1324,1327,1330,1332],{"class":42,"line":298},[40,1320,1321],{"class":1019},"which",[40,1323,639],{"class":638},[40,1325,1326],{"class":50},"cm",[40,1328,1329],{"class":412},"d",[40,1331,648],{"class":638},[40,1333,1334],{"class":232},"                       # 命令路径\n",[40,1336,1337,1340,1342,1344,1346],{"class":42,"line":308},[40,1338,1339],{"class":46},"whereis",[40,1341,639],{"class":638},[40,1343,1326],{"class":50},[40,1345,1329],{"class":412},[40,1347,1180],{"class":638},[40,1349,1350,1353,1355,1357,1359,1361],{"class":42,"line":313},[40,1351,1352],{"class":46},"locate",[40,1354,639],{"class":638},[40,1356,1174],{"class":50},[40,1358,1177],{"class":412},[40,1360,648],{"class":638},[40,1362,1363],{"class":232},"                     # 快速（需 updatedb）\n",[17,1365,1367],{"id":1366},"三文本处理","三、文本处理",[30,1369,1371],{"className":32,"code":1370,"language":34,"meta":35,"style":35},"cat \u002F less \u002F head -n 20 \u002F tail -n 20\ntail -f \u003Cfile>                    # 实时跟踪日志\ntail -F \u003Cfile>                    # rotate 后仍能跟踪\n\ngrep \"p\" \u003Cfile>                   # 基本\ngrep -r -n -i \"p\" .               # 递归+行号+忽略大小写\ngrep -v \"p\" \u003Cfile>                # 反选\ngrep -E \"a|b\" \u003Cfile>              # 扩展正则\nrg \"p\"                            # ripgrep（快，推荐）\n\nsed 's\u002Fold\u002Fnew\u002Fg' \u003Cfile>          # 替换到 stdout\nsed -i 's\u002Fold\u002Fnew\u002Fg' \u003Cfile>       # 原地替换\nsed -i.bak 's\u002Fold\u002Fnew\u002Fg' \u003Cfile>   # 带备份\nsed -n '10,20p' \u003Cfile>            # 打印范围\n\nawk '{print $1}' \u003Cfile>           # 第一列\nawk -F: '{print $1}' \u002Fetc\u002Fpasswd\nawk '$3 > 100 {print $1}' \u003Cfile>\n\ncut -d: -f1 \u002Fetc\u002Fpasswd\nsort \u003Cfile>\nsort -u \u003Cfile>                    # 去重\nuniq -c                           # 统计相邻（先 sort）\nwc -l \u003Cfile>\ntr 'a-z' 'A-Z'\n",[37,1372,1373,1405,1424,1442,1446,1465,1482,1502,1523,1533,1537,1556,1576,1597,1618,1623,1643,1656,1672,1677,1691,1705,1724,1736,1753],{"__ignoreMap":35},[40,1374,1375,1378,1381,1384,1386,1389,1392,1395,1397,1400,1402],{"class":42,"line":43},[40,1376,1377],{"class":46},"cat",[40,1379,1380],{"class":50}," \u002F",[40,1382,1383],{"class":50}," less",[40,1385,1380],{"class":50},[40,1387,1388],{"class":50}," head",[40,1390,1391],{"class":68}," -n",[40,1393,1394],{"class":68}," 20",[40,1396,1380],{"class":50},[40,1398,1399],{"class":50}," tail",[40,1401,1391],{"class":68},[40,1403,1404],{"class":68}," 20\n",[40,1406,1407,1410,1413,1415,1417,1419,1421],{"class":42,"line":60},[40,1408,1409],{"class":46},"tail",[40,1411,1412],{"class":68}," -f",[40,1414,639],{"class":638},[40,1416,1174],{"class":50},[40,1418,1177],{"class":412},[40,1420,648],{"class":638},[40,1422,1423],{"class":232},"                    # 实时跟踪日志\n",[40,1425,1426,1428,1431,1433,1435,1437,1439],{"class":42,"line":78},[40,1427,1409],{"class":46},[40,1429,1430],{"class":68}," -F",[40,1432,639],{"class":638},[40,1434,1174],{"class":50},[40,1436,1177],{"class":412},[40,1438,648],{"class":638},[40,1440,1441],{"class":232},"                    # rotate 后仍能跟踪\n",[40,1443,1444],{"class":42,"line":92},[40,1445,254],{"emptyLinePlaceholder":253},[40,1447,1448,1451,1454,1456,1458,1460,1462],{"class":42,"line":262},[40,1449,1450],{"class":46},"grep",[40,1452,1453],{"class":50}," \"p\"",[40,1455,639],{"class":638},[40,1457,1174],{"class":50},[40,1459,1177],{"class":412},[40,1461,648],{"class":638},[40,1463,1464],{"class":232},"                   # 基本\n",[40,1466,1467,1469,1471,1473,1475,1477,1479],{"class":42,"line":284},[40,1468,1450],{"class":46},[40,1470,242],{"class":68},[40,1472,1391],{"class":68},[40,1474,69],{"class":68},[40,1476,1453],{"class":50},[40,1478,1222],{"class":50},[40,1480,1481],{"class":232},"               # 递归+行号+忽略大小写\n",[40,1483,1484,1486,1489,1491,1493,1495,1497,1499],{"class":42,"line":298},[40,1485,1450],{"class":46},[40,1487,1488],{"class":68}," -v",[40,1490,1453],{"class":50},[40,1492,639],{"class":638},[40,1494,1174],{"class":50},[40,1496,1177],{"class":412},[40,1498,648],{"class":638},[40,1500,1501],{"class":232},"                # 反选\n",[40,1503,1504,1506,1509,1512,1514,1516,1518,1520],{"class":42,"line":308},[40,1505,1450],{"class":46},[40,1507,1508],{"class":68}," -E",[40,1510,1511],{"class":50}," \"a|b\"",[40,1513,639],{"class":638},[40,1515,1174],{"class":50},[40,1517,1177],{"class":412},[40,1519,648],{"class":638},[40,1521,1522],{"class":232},"              # 扩展正则\n",[40,1524,1525,1528,1530],{"class":42,"line":313},[40,1526,1527],{"class":46},"rg",[40,1529,1453],{"class":50},[40,1531,1532],{"class":232},"                            # ripgrep（快，推荐）\n",[40,1534,1535],{"class":42,"line":327},[40,1536,254],{"emptyLinePlaceholder":253},[40,1538,1539,1542,1545,1547,1549,1551,1553],{"class":42,"line":630},[40,1540,1541],{"class":46},"sed",[40,1543,1544],{"class":50}," 's\u002Fold\u002Fnew\u002Fg'",[40,1546,639],{"class":638},[40,1548,1174],{"class":50},[40,1550,1177],{"class":412},[40,1552,648],{"class":638},[40,1554,1555],{"class":232},"          # 替换到 stdout\n",[40,1557,1559,1561,1563,1565,1567,1569,1571,1573],{"class":42,"line":1558},12,[40,1560,1541],{"class":46},[40,1562,69],{"class":68},[40,1564,1544],{"class":50},[40,1566,639],{"class":638},[40,1568,1174],{"class":50},[40,1570,1177],{"class":412},[40,1572,648],{"class":638},[40,1574,1575],{"class":232},"       # 原地替换\n",[40,1577,1579,1581,1584,1586,1588,1590,1592,1594],{"class":42,"line":1578},13,[40,1580,1541],{"class":46},[40,1582,1583],{"class":68}," -i.bak",[40,1585,1544],{"class":50},[40,1587,639],{"class":638},[40,1589,1174],{"class":50},[40,1591,1177],{"class":412},[40,1593,648],{"class":638},[40,1595,1596],{"class":232},"   # 带备份\n",[40,1598,1600,1602,1604,1607,1609,1611,1613,1615],{"class":42,"line":1599},14,[40,1601,1541],{"class":46},[40,1603,1391],{"class":68},[40,1605,1606],{"class":50}," '10,20p'",[40,1608,639],{"class":638},[40,1610,1174],{"class":50},[40,1612,1177],{"class":412},[40,1614,648],{"class":638},[40,1616,1617],{"class":232},"            # 打印范围\n",[40,1619,1621],{"class":42,"line":1620},15,[40,1622,254],{"emptyLinePlaceholder":253},[40,1624,1626,1629,1632,1634,1636,1638,1640],{"class":42,"line":1625},16,[40,1627,1628],{"class":46},"awk",[40,1630,1631],{"class":50}," '{print $1}'",[40,1633,639],{"class":638},[40,1635,1174],{"class":50},[40,1637,1177],{"class":412},[40,1639,648],{"class":638},[40,1641,1642],{"class":232},"           # 第一列\n",[40,1644,1646,1648,1651,1653],{"class":42,"line":1645},17,[40,1647,1628],{"class":46},[40,1649,1650],{"class":68}," -F:",[40,1652,1631],{"class":50},[40,1654,1655],{"class":50}," \u002Fetc\u002Fpasswd\n",[40,1657,1659,1661,1664,1666,1668,1670],{"class":42,"line":1658},18,[40,1660,1628],{"class":46},[40,1662,1663],{"class":50}," '$3 > 100 {print $1}'",[40,1665,639],{"class":638},[40,1667,1174],{"class":50},[40,1669,1177],{"class":412},[40,1671,1180],{"class":638},[40,1673,1675],{"class":42,"line":1674},19,[40,1676,254],{"emptyLinePlaceholder":253},[40,1678,1680,1683,1686,1689],{"class":42,"line":1679},20,[40,1681,1682],{"class":46},"cut",[40,1684,1685],{"class":68}," -d:",[40,1687,1688],{"class":68}," -f1",[40,1690,1655],{"class":50},[40,1692,1694,1697,1699,1701,1703],{"class":42,"line":1693},21,[40,1695,1696],{"class":46},"sort",[40,1698,639],{"class":638},[40,1700,1174],{"class":50},[40,1702,1177],{"class":412},[40,1704,1180],{"class":638},[40,1706,1708,1710,1713,1715,1717,1719,1721],{"class":42,"line":1707},22,[40,1709,1696],{"class":46},[40,1711,1712],{"class":68}," -u",[40,1714,639],{"class":638},[40,1716,1174],{"class":50},[40,1718,1177],{"class":412},[40,1720,648],{"class":638},[40,1722,1723],{"class":232},"                    # 去重\n",[40,1725,1727,1730,1733],{"class":42,"line":1726},23,[40,1728,1729],{"class":46},"uniq",[40,1731,1732],{"class":68}," -c",[40,1734,1735],{"class":232},"                           # 统计相邻（先 sort）\n",[40,1737,1739,1742,1745,1747,1749,1751],{"class":42,"line":1738},24,[40,1740,1741],{"class":46},"wc",[40,1743,1744],{"class":68}," -l",[40,1746,639],{"class":638},[40,1748,1174],{"class":50},[40,1750,1177],{"class":412},[40,1752,1180],{"class":638},[40,1754,1756,1758,1761],{"class":42,"line":1755},25,[40,1757,156],{"class":46},[40,1759,1760],{"class":50}," 'a-z'",[40,1762,1763],{"class":50}," 'A-Z'\n",[22,1765,1766],{"id":1766},"管道组合",[30,1768,1770],{"className":32,"code":1769,"language":34,"meta":35,"style":35},"awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10\ndu -sh *\u002F | sort -rh | head -10\n",[37,1771,1772,1807],{"__ignoreMap":35},[40,1773,1774,1776,1778,1781,1783,1786,1788,1791,1793,1795,1797,1800,1802,1804],{"class":42,"line":43},[40,1775,1628],{"class":46},[40,1777,1631],{"class":50},[40,1779,1780],{"class":50}," access.log",[40,1782,819],{"class":638},[40,1784,1785],{"class":46}," sort",[40,1787,819],{"class":638},[40,1789,1790],{"class":46}," uniq",[40,1792,1732],{"class":68},[40,1794,819],{"class":638},[40,1796,1785],{"class":46},[40,1798,1799],{"class":68}," -rn",[40,1801,819],{"class":638},[40,1803,1388],{"class":46},[40,1805,1806],{"class":68}," -10\n",[40,1808,1809,1812,1815,1818,1821,1823,1825,1828,1830,1832],{"class":42,"line":60},[40,1810,1811],{"class":46},"du",[40,1813,1814],{"class":68}," -sh",[40,1816,1817],{"class":277}," *",[40,1819,1820],{"class":50},"\u002F",[40,1822,819],{"class":638},[40,1824,1785],{"class":46},[40,1826,1827],{"class":68}," -rh",[40,1829,819],{"class":638},[40,1831,1388],{"class":46},[40,1833,1806],{"class":68},[17,1835,1837],{"id":1836},"四权限","四、权限",[30,1839,1841],{"className":32,"code":1840,"language":34,"meta":35,"style":35},"chmod 755 \u003Cfile>\nchmod +x \u003Cfile>\nchmod -R 644 \u003Cdir>\nchown user:group \u003Cfile>\nchown -R user \u003Cdir>\nchgrp group \u003Cfile>\numask\n",[37,1842,1843,1859,1874,1891,1907,1924,1940],{"__ignoreMap":35},[40,1844,1845,1848,1851,1853,1855,1857],{"class":42,"line":43},[40,1846,1847],{"class":46},"chmod",[40,1849,1850],{"class":68}," 755",[40,1852,639],{"class":638},[40,1854,1174],{"class":50},[40,1856,1177],{"class":412},[40,1858,1180],{"class":638},[40,1860,1861,1863,1866,1868,1870,1872],{"class":42,"line":60},[40,1862,1847],{"class":46},[40,1864,1865],{"class":50}," +x",[40,1867,639],{"class":638},[40,1869,1174],{"class":50},[40,1871,1177],{"class":412},[40,1873,1180],{"class":638},[40,1875,1876,1878,1881,1883,1885,1887,1889],{"class":42,"line":78},[40,1877,1847],{"class":46},[40,1879,1880],{"class":68}," -R",[40,1882,1303],{"class":68},[40,1884,639],{"class":638},[40,1886,1072],{"class":50},[40,1888,1075],{"class":412},[40,1890,1180],{"class":638},[40,1892,1893,1896,1899,1901,1903,1905],{"class":42,"line":92},[40,1894,1895],{"class":46},"chown",[40,1897,1898],{"class":50}," user:group",[40,1900,639],{"class":638},[40,1902,1174],{"class":50},[40,1904,1177],{"class":412},[40,1906,1180],{"class":638},[40,1908,1909,1911,1913,1916,1918,1920,1922],{"class":42,"line":262},[40,1910,1895],{"class":46},[40,1912,1880],{"class":68},[40,1914,1915],{"class":50}," user",[40,1917,639],{"class":638},[40,1919,1072],{"class":50},[40,1921,1075],{"class":412},[40,1923,1180],{"class":638},[40,1925,1926,1929,1932,1934,1936,1938],{"class":42,"line":284},[40,1927,1928],{"class":46},"chgrp",[40,1930,1931],{"class":50}," group",[40,1933,639],{"class":638},[40,1935,1174],{"class":50},[40,1937,1177],{"class":412},[40,1939,1180],{"class":638},[40,1941,1942],{"class":42,"line":298},[40,1943,1944],{"class":1019},"umask\n",[13,1946,1947],{},"数字权限：",[150,1949,1950,1960],{},[153,1951,1952],{},[156,1953,1954,1957],{},[159,1955,1956],{},"数字",[159,1958,1959],{},"权限",[166,1961,1962,1970,1978,1986],{},[156,1963,1964,1967],{},[171,1965,1966],{},"4",[171,1968,1969],{},"r--",[156,1971,1972,1975],{},[171,1973,1974],{},"5",[171,1976,1977],{},"r-x",[156,1979,1980,1983],{},[171,1981,1982],{},"6",[171,1984,1985],{},"rw-",[156,1987,1988,1991],{},[171,1989,1990],{},"7",[171,1992,1993],{},"rwx",[13,1995,1996,1997,2000,2001,2004,2005,2000,2008,2011],{},"例：",[37,1998,1999],{},"755"," = ",[37,2002,2003],{},"rwxr-xr-x","，",[37,2006,2007],{},"644",[37,2009,2010],{},"rw-r--r--","。",[13,2013,2014],{},"特殊权限：",[30,2016,2018],{"className":32,"code":2017,"language":34,"meta":35,"style":35},"chmod u+s \u003Cfile>                  # SUID\nchmod g+s \u003Cdir>                   # SGID\nchmod +t \u003Cdir>                    # Sticky（如 \u002Ftmp）\n",[37,2019,2020,2038,2056],{"__ignoreMap":35},[40,2021,2022,2024,2027,2029,2031,2033,2035],{"class":42,"line":43},[40,2023,1847],{"class":46},[40,2025,2026],{"class":50}," u+s",[40,2028,639],{"class":638},[40,2030,1174],{"class":50},[40,2032,1177],{"class":412},[40,2034,648],{"class":638},[40,2036,2037],{"class":232},"                  # SUID\n",[40,2039,2040,2042,2045,2047,2049,2051,2053],{"class":42,"line":60},[40,2041,1847],{"class":46},[40,2043,2044],{"class":50}," g+s",[40,2046,639],{"class":638},[40,2048,1072],{"class":50},[40,2050,1075],{"class":412},[40,2052,648],{"class":638},[40,2054,2055],{"class":232},"                   # SGID\n",[40,2057,2058,2060,2063,2065,2067,2069,2071],{"class":42,"line":78},[40,2059,1847],{"class":46},[40,2061,2062],{"class":50}," +t",[40,2064,639],{"class":638},[40,2066,1072],{"class":50},[40,2068,1075],{"class":412},[40,2070,648],{"class":638},[40,2072,2073],{"class":232},"                    # Sticky（如 \u002Ftmp）\n",[17,2075,2077],{"id":2076},"五进程管理","五、进程管理",[30,2079,2081],{"className":32,"code":2080,"language":34,"meta":35,"style":35},"ps aux\nps aux | grep nginx\npgrep -f \"pattern\"\npidof \u003Cname>\n\ntop                               # P 按 CPU，M 按内存\nhtop                              # 更友好\n\nkill \u003Cpid>                        # SIGTERM\nkill -9 \u003Cpid>                     # 强制\npkill -f \"pattern\"\nkillall \u003Cname>\n\nnice -n 10 \u003Ccmd>\nrenice -n 5 -p \u003Cpid>\n\nCtrl+Z                            # 挂起\nbg \u002F fg \u002F jobs\n",[37,2082,2083,2091,2105,2115,2129,2133,2141,2149,2153,2170,2188,2197,2210,2214,2232,2251,2255,2263],{"__ignoreMap":35},[40,2084,2085,2088],{"class":42,"line":43},[40,2086,2087],{"class":46},"ps",[40,2089,2090],{"class":50}," aux\n",[40,2092,2093,2095,2098,2100,2102],{"class":42,"line":60},[40,2094,2087],{"class":46},[40,2096,2097],{"class":50}," aux",[40,2099,819],{"class":638},[40,2101,822],{"class":46},[40,2103,2104],{"class":50}," nginx\n",[40,2106,2107,2110,2112],{"class":42,"line":78},[40,2108,2109],{"class":46},"pgrep",[40,2111,1412],{"class":68},[40,2113,2114],{"class":50}," \"pattern\"\n",[40,2116,2117,2120,2122,2125,2127],{"class":42,"line":92},[40,2118,2119],{"class":46},"pidof",[40,2121,639],{"class":638},[40,2123,2124],{"class":50},"nam",[40,2126,1177],{"class":412},[40,2128,1180],{"class":638},[40,2130,2131],{"class":42,"line":262},[40,2132,254],{"emptyLinePlaceholder":253},[40,2134,2135,2138],{"class":42,"line":284},[40,2136,2137],{"class":46},"top",[40,2139,2140],{"class":232},"                               # P 按 CPU，M 按内存\n",[40,2142,2143,2146],{"class":42,"line":298},[40,2144,2145],{"class":46},"htop",[40,2147,2148],{"class":232},"                              # 更友好\n",[40,2150,2151],{"class":42,"line":308},[40,2152,254],{"emptyLinePlaceholder":253},[40,2154,2155,2158,2160,2163,2165,2167],{"class":42,"line":313},[40,2156,2157],{"class":1019},"kill",[40,2159,639],{"class":638},[40,2161,2162],{"class":50},"pi",[40,2164,1329],{"class":412},[40,2166,648],{"class":638},[40,2168,2169],{"class":232},"                        # SIGTERM\n",[40,2171,2172,2174,2177,2179,2181,2183,2185],{"class":42,"line":327},[40,2173,2157],{"class":1019},[40,2175,2176],{"class":68}," -9",[40,2178,639],{"class":638},[40,2180,2162],{"class":50},[40,2182,1329],{"class":412},[40,2184,648],{"class":638},[40,2186,2187],{"class":232},"                     # 强制\n",[40,2189,2190,2193,2195],{"class":42,"line":630},[40,2191,2192],{"class":46},"pkill",[40,2194,1412],{"class":68},[40,2196,2114],{"class":50},[40,2198,2199,2202,2204,2206,2208],{"class":42,"line":1558},[40,2200,2201],{"class":46},"killall",[40,2203,639],{"class":638},[40,2205,2124],{"class":50},[40,2207,1177],{"class":412},[40,2209,1180],{"class":638},[40,2211,2212],{"class":42,"line":1578},[40,2213,254],{"emptyLinePlaceholder":253},[40,2215,2216,2219,2221,2224,2226,2228,2230],{"class":42,"line":1599},[40,2217,2218],{"class":46},"nice",[40,2220,1391],{"class":68},[40,2222,2223],{"class":68}," 10",[40,2225,639],{"class":638},[40,2227,1326],{"class":50},[40,2229,1329],{"class":412},[40,2231,1180],{"class":638},[40,2233,2234,2237,2239,2241,2243,2245,2247,2249],{"class":42,"line":1620},[40,2235,2236],{"class":46},"renice",[40,2238,1391],{"class":68},[40,2240,528],{"class":68},[40,2242,1053],{"class":68},[40,2244,639],{"class":638},[40,2246,2162],{"class":50},[40,2248,1329],{"class":412},[40,2250,1180],{"class":638},[40,2252,2253],{"class":42,"line":1625},[40,2254,254],{"emptyLinePlaceholder":253},[40,2256,2257,2260],{"class":42,"line":1645},[40,2258,2259],{"class":46},"Ctrl+Z",[40,2261,2262],{"class":232},"                            # 挂起\n",[40,2264,2265,2268,2270,2273,2275],{"class":42,"line":1658},[40,2266,2267],{"class":1019},"bg",[40,2269,1380],{"class":50},[40,2271,2272],{"class":50}," fg",[40,2274,1380],{"class":50},[40,2276,2277],{"class":50}," jobs\n",[13,2279,2280],{},"信号：",[150,2282,2283,2296],{},[153,2284,2285],{},[156,2286,2287,2290,2293],{},[159,2288,2289],{},"信号",[159,2291,2292],{},"编号",[159,2294,2295],{},"说明",[166,2297,2298,2309,2320,2331],{},[156,2299,2300,2303,2306],{},[171,2301,2302],{},"SIGHUP",[171,2304,2305],{},"1",[171,2307,2308],{},"挂起 \u002F 重载",[156,2310,2311,2314,2317],{},[171,2312,2313],{},"SIGINT",[171,2315,2316],{},"2",[171,2318,2319],{},"Ctrl+C",[156,2321,2322,2325,2328],{},[171,2323,2324],{},"SIGKILL",[171,2326,2327],{},"9",[171,2329,2330],{},"强杀，不可捕获",[156,2332,2333,2336,2339],{},[171,2334,2335],{},"SIGTERM",[171,2337,2338],{},"15",[171,2340,2341],{},"优雅退出（默认）",[17,2343,2345],{"id":2344},"六网络","六、网络",[30,2347,2349],{"className":32,"code":2348,"language":34,"meta":35,"style":35},"ip addr                           # 查看 IP\nip route\nss -tunlp                         # 监听端口（推荐）\nnetstat -tunlp                    # 老命令\nlsof -i :8080                     # 谁占端口\n\nping \u003Chost>\nping -c 4 \u003Chost>\ntraceroute \u003Chost>\nmtr \u003Chost>                        # 持续 traceroute\n\ncurl -I \u003Curl>                     # 只看头\ncurl -v \u003Curl>                     # 详细\ncurl -o file.zip \u003Curl>            # 下载\ncurl -X POST -d '{}' -H \"Content-Type: application\u002Fjson\" \u003Curl>\n\nwget \u003Curl>\nwget -c \u003Curl>                     # 断点续传\nwget -r -np \u003Curl>                 # 递归\n\ndig \u003Cdomain>\ndig +short \u003Cdomain>\nnslookup \u003Cdomain>\nhost \u003Cdomain>\n",[37,2350,2351,2362,2369,2380,2390,2403,2407,2421,2438,2451,2467,2471,2492,2509,2530,2560,2564,2577,2594,2614,2618,2633,2648,2661],{"__ignoreMap":35},[40,2352,2353,2356,2359],{"class":42,"line":43},[40,2354,2355],{"class":46},"ip",[40,2357,2358],{"class":50}," addr",[40,2360,2361],{"class":232},"                           # 查看 IP\n",[40,2363,2364,2366],{"class":42,"line":60},[40,2365,2355],{"class":46},[40,2367,2368],{"class":50}," route\n",[40,2370,2371,2374,2377],{"class":42,"line":78},[40,2372,2373],{"class":46},"ss",[40,2375,2376],{"class":68}," -tunlp",[40,2378,2379],{"class":232},"                         # 监听端口（推荐）\n",[40,2381,2382,2385,2387],{"class":42,"line":92},[40,2383,2384],{"class":46},"netstat",[40,2386,2376],{"class":68},[40,2388,2389],{"class":232},"                    # 老命令\n",[40,2391,2392,2395,2397,2400],{"class":42,"line":262},[40,2393,2394],{"class":46},"lsof",[40,2396,69],{"class":68},[40,2398,2399],{"class":50}," :8080",[40,2401,2402],{"class":232},"                     # 谁占端口\n",[40,2404,2405],{"class":42,"line":284},[40,2406,254],{"emptyLinePlaceholder":253},[40,2408,2409,2412,2414,2417,2419],{"class":42,"line":298},[40,2410,2411],{"class":46},"ping",[40,2413,639],{"class":638},[40,2415,2416],{"class":50},"hos",[40,2418,1105],{"class":412},[40,2420,1180],{"class":638},[40,2422,2423,2425,2427,2430,2432,2434,2436],{"class":42,"line":308},[40,2424,2411],{"class":46},[40,2426,1732],{"class":68},[40,2428,2429],{"class":68}," 4",[40,2431,639],{"class":638},[40,2433,2416],{"class":50},[40,2435,1105],{"class":412},[40,2437,1180],{"class":638},[40,2439,2440,2443,2445,2447,2449],{"class":42,"line":313},[40,2441,2442],{"class":46},"traceroute",[40,2444,639],{"class":638},[40,2446,2416],{"class":50},[40,2448,1105],{"class":412},[40,2450,1180],{"class":638},[40,2452,2453,2456,2458,2460,2462,2464],{"class":42,"line":327},[40,2454,2455],{"class":46},"mtr",[40,2457,639],{"class":638},[40,2459,2416],{"class":50},[40,2461,1105],{"class":412},[40,2463,648],{"class":638},[40,2465,2466],{"class":232},"                        # 持续 traceroute\n",[40,2468,2469],{"class":42,"line":630},[40,2470,254],{"emptyLinePlaceholder":253},[40,2472,2473,2476,2479,2481,2484,2487,2489],{"class":42,"line":1558},[40,2474,2475],{"class":46},"curl",[40,2477,2478],{"class":68}," -I",[40,2480,639],{"class":638},[40,2482,2483],{"class":50},"ur",[40,2485,2486],{"class":412},"l",[40,2488,648],{"class":638},[40,2490,2491],{"class":232},"                     # 只看头\n",[40,2493,2494,2496,2498,2500,2502,2504,2506],{"class":42,"line":1578},[40,2495,2475],{"class":46},[40,2497,1488],{"class":68},[40,2499,639],{"class":638},[40,2501,2483],{"class":50},[40,2503,2486],{"class":412},[40,2505,648],{"class":638},[40,2507,2508],{"class":232},"                     # 详细\n",[40,2510,2511,2513,2516,2519,2521,2523,2525,2527],{"class":42,"line":1599},[40,2512,2475],{"class":46},[40,2514,2515],{"class":68}," -o",[40,2517,2518],{"class":50}," file.zip",[40,2520,639],{"class":638},[40,2522,2483],{"class":50},[40,2524,2486],{"class":412},[40,2526,648],{"class":638},[40,2528,2529],{"class":232},"            # 下载\n",[40,2531,2532,2534,2537,2540,2543,2546,2549,2552,2554,2556,2558],{"class":42,"line":1620},[40,2533,2475],{"class":46},[40,2535,2536],{"class":68}," -X",[40,2538,2539],{"class":50}," POST",[40,2541,2542],{"class":68}," -d",[40,2544,2545],{"class":50}," '{}'",[40,2547,2548],{"class":68}," -H",[40,2550,2551],{"class":50}," \"Content-Type: application\u002Fjson\"",[40,2553,639],{"class":638},[40,2555,2483],{"class":50},[40,2557,2486],{"class":412},[40,2559,1180],{"class":638},[40,2561,2562],{"class":42,"line":1625},[40,2563,254],{"emptyLinePlaceholder":253},[40,2565,2566,2569,2571,2573,2575],{"class":42,"line":1645},[40,2567,2568],{"class":46},"wget",[40,2570,639],{"class":638},[40,2572,2483],{"class":50},[40,2574,2486],{"class":412},[40,2576,1180],{"class":638},[40,2578,2579,2581,2583,2585,2587,2589,2591],{"class":42,"line":1658},[40,2580,2568],{"class":46},[40,2582,1732],{"class":68},[40,2584,639],{"class":638},[40,2586,2483],{"class":50},[40,2588,2486],{"class":412},[40,2590,648],{"class":638},[40,2592,2593],{"class":232},"                     # 断点续传\n",[40,2595,2596,2598,2600,2603,2605,2607,2609,2611],{"class":42,"line":1674},[40,2597,2568],{"class":46},[40,2599,242],{"class":68},[40,2601,2602],{"class":68}," -np",[40,2604,639],{"class":638},[40,2606,2483],{"class":50},[40,2608,2486],{"class":412},[40,2610,648],{"class":638},[40,2612,2613],{"class":232},"                 # 递归\n",[40,2615,2616],{"class":42,"line":1679},[40,2617,254],{"emptyLinePlaceholder":253},[40,2619,2620,2623,2625,2628,2631],{"class":42,"line":1693},[40,2621,2622],{"class":46},"dig",[40,2624,639],{"class":638},[40,2626,2627],{"class":50},"domai",[40,2629,2630],{"class":412},"n",[40,2632,1180],{"class":638},[40,2634,2635,2637,2640,2642,2644,2646],{"class":42,"line":1707},[40,2636,2622],{"class":46},[40,2638,2639],{"class":50}," +short",[40,2641,639],{"class":638},[40,2643,2627],{"class":50},[40,2645,2630],{"class":412},[40,2647,1180],{"class":638},[40,2649,2650,2653,2655,2657,2659],{"class":42,"line":1726},[40,2651,2652],{"class":46},"nslookup",[40,2654,639],{"class":638},[40,2656,2627],{"class":50},[40,2658,2630],{"class":412},[40,2660,1180],{"class":638},[40,2662,2663,2666,2668,2670,2672],{"class":42,"line":1738},[40,2664,2665],{"class":46},"host",[40,2667,639],{"class":638},[40,2669,2627],{"class":50},[40,2671,2630],{"class":412},[40,2673,1180],{"class":638},[22,2675,2676],{"id":2676},"防火墙",[30,2678,2680],{"className":32,"code":2679,"language":34,"meta":35,"style":35},"# ufw（Ubuntu）\nufw status\nufw allow 22\nufw allow 80\u002Ftcp\nufw delete allow 80\nufw enable\n\n# firewalld（CentOS）\nfirewall-cmd --list-all\nfirewall-cmd --add-port=8080\u002Ftcp --permanent\nfirewall-cmd --reload\n\n# iptables\niptables -L -n -v\niptables -A INPUT -p tcp --dport 8080 -j ACCEPT\n",[37,2681,2682,2687,2695,2705,2714,2726,2733,2737,2742,2750,2760,2767,2771,2776,2789],{"__ignoreMap":35},[40,2683,2684],{"class":42,"line":43},[40,2685,2686],{"class":232},"# ufw（Ubuntu）\n",[40,2688,2689,2692],{"class":42,"line":60},[40,2690,2691],{"class":46},"ufw",[40,2693,2694],{"class":50}," status\n",[40,2696,2697,2699,2702],{"class":42,"line":78},[40,2698,2691],{"class":46},[40,2700,2701],{"class":50}," allow",[40,2703,2704],{"class":68}," 22\n",[40,2706,2707,2709,2711],{"class":42,"line":92},[40,2708,2691],{"class":46},[40,2710,2701],{"class":50},[40,2712,2713],{"class":50}," 80\u002Ftcp\n",[40,2715,2716,2718,2721,2723],{"class":42,"line":262},[40,2717,2691],{"class":46},[40,2719,2720],{"class":50}," delete",[40,2722,2701],{"class":50},[40,2724,2725],{"class":68}," 80\n",[40,2727,2728,2730],{"class":42,"line":284},[40,2729,2691],{"class":46},[40,2731,2732],{"class":50}," enable\n",[40,2734,2735],{"class":42,"line":298},[40,2736,254],{"emptyLinePlaceholder":253},[40,2738,2739],{"class":42,"line":308},[40,2740,2741],{"class":232},"# firewalld（CentOS）\n",[40,2743,2744,2747],{"class":42,"line":313},[40,2745,2746],{"class":46},"firewall-cmd",[40,2748,2749],{"class":68}," --list-all\n",[40,2751,2752,2754,2757],{"class":42,"line":327},[40,2753,2746],{"class":46},[40,2755,2756],{"class":68}," --add-port=8080\u002Ftcp",[40,2758,2759],{"class":68}," --permanent\n",[40,2761,2762,2764],{"class":42,"line":630},[40,2763,2746],{"class":46},[40,2765,2766],{"class":68}," --reload\n",[40,2768,2769],{"class":42,"line":1558},[40,2770,254],{"emptyLinePlaceholder":253},[40,2772,2773],{"class":42,"line":1578},[40,2774,2775],{"class":232},"# iptables\n",[40,2777,2778,2781,2784,2786],{"class":42,"line":1599},[40,2779,2780],{"class":46},"iptables",[40,2782,2783],{"class":68}," -L",[40,2785,1391],{"class":68},[40,2787,2788],{"class":68}," -v\n",[40,2790,2791,2793,2795,2798,2800,2803,2806,2809,2812],{"class":42,"line":1620},[40,2792,2780],{"class":46},[40,2794,825],{"class":68},[40,2796,2797],{"class":50}," INPUT",[40,2799,1053],{"class":68},[40,2801,2802],{"class":50}," tcp",[40,2804,2805],{"class":68}," --dport",[40,2807,2808],{"class":68}," 8080",[40,2810,2811],{"class":68}," -j",[40,2813,2814],{"class":50}," ACCEPT\n",[17,2816,2818],{"id":2817},"七磁盘与内存","七、磁盘与内存",[30,2820,2822],{"className":32,"code":2821,"language":34,"meta":35,"style":35},"df -h                             # 磁盘\ndf -i                             # inode\ndu -sh \u003Cdir>\ndu -sh * | sort -rh | head -10\n\nfree -h                           # 内存\nvmstat 1\niostat -x 1                       # 需 sysstat\n\nlsblk\nfdisk -l\nmount \u002Fdev\u002Fsdb1 \u002Fmnt\numount \u002Fmnt\n",[37,2823,2824,2835,2844,2858,2878,2882,2892,2900,2914,2918,2923,2931,2942],{"__ignoreMap":35},[40,2825,2826,2829,2832],{"class":42,"line":43},[40,2827,2828],{"class":46},"df",[40,2830,2831],{"class":68}," -h",[40,2833,2834],{"class":232},"                             # 磁盘\n",[40,2836,2837,2839,2841],{"class":42,"line":60},[40,2838,2828],{"class":46},[40,2840,69],{"class":68},[40,2842,2843],{"class":232},"                             # inode\n",[40,2845,2846,2848,2850,2852,2854,2856],{"class":42,"line":78},[40,2847,1811],{"class":46},[40,2849,1814],{"class":68},[40,2851,639],{"class":638},[40,2853,1072],{"class":50},[40,2855,1075],{"class":412},[40,2857,1180],{"class":638},[40,2859,2860,2862,2864,2866,2868,2870,2872,2874,2876],{"class":42,"line":92},[40,2861,1811],{"class":46},[40,2863,1814],{"class":68},[40,2865,1817],{"class":277},[40,2867,819],{"class":638},[40,2869,1785],{"class":46},[40,2871,1827],{"class":68},[40,2873,819],{"class":638},[40,2875,1388],{"class":46},[40,2877,1806],{"class":68},[40,2879,2880],{"class":42,"line":262},[40,2881,254],{"emptyLinePlaceholder":253},[40,2883,2884,2887,2889],{"class":42,"line":284},[40,2885,2886],{"class":46},"free",[40,2888,2831],{"class":68},[40,2890,2891],{"class":232},"                           # 内存\n",[40,2893,2894,2897],{"class":42,"line":298},[40,2895,2896],{"class":46},"vmstat",[40,2898,2899],{"class":68}," 1\n",[40,2901,2902,2905,2908,2911],{"class":42,"line":308},[40,2903,2904],{"class":46},"iostat",[40,2906,2907],{"class":68}," -x",[40,2909,2910],{"class":68}," 1",[40,2912,2913],{"class":232},"                       # 需 sysstat\n",[40,2915,2916],{"class":42,"line":313},[40,2917,254],{"emptyLinePlaceholder":253},[40,2919,2920],{"class":42,"line":327},[40,2921,2922],{"class":46},"lsblk\n",[40,2924,2925,2928],{"class":42,"line":630},[40,2926,2927],{"class":46},"fdisk",[40,2929,2930],{"class":68}," -l\n",[40,2932,2933,2936,2939],{"class":42,"line":1558},[40,2934,2935],{"class":46},"mount",[40,2937,2938],{"class":50}," \u002Fdev\u002Fsdb1",[40,2940,2941],{"class":50}," \u002Fmnt\n",[40,2943,2944,2947],{"class":42,"line":1578},[40,2945,2946],{"class":46},"umount",[40,2948,2941],{"class":50},[13,2950,2951],{},"找大文件：",[30,2953,2955],{"className":32,"code":2954,"language":34,"meta":35,"style":35},"find \u002F -type f -size +1G 2>\u002Fdev\u002Fnull\ndu -ah \u002F | sort -rh | head -20\n",[37,2956,2957,2978],{"__ignoreMap":35},[40,2958,2959,2961,2963,2965,2967,2969,2972,2975],{"class":42,"line":43},[40,2960,1219],{"class":46},[40,2962,1380],{"class":50},[40,2964,1240],{"class":68},[40,2966,1243],{"class":50},[40,2968,1246],{"class":68},[40,2970,2971],{"class":50}," +1G",[40,2973,2974],{"class":638}," 2>",[40,2976,2977],{"class":50},"\u002Fdev\u002Fnull\n",[40,2979,2980,2982,2985,2987,2989,2991,2993,2995,2997],{"class":42,"line":60},[40,2981,1811],{"class":46},[40,2983,2984],{"class":68}," -ah",[40,2986,1380],{"class":50},[40,2988,819],{"class":638},[40,2990,1785],{"class":46},[40,2992,1827],{"class":68},[40,2994,819],{"class":638},[40,2996,1388],{"class":46},[40,2998,2999],{"class":68}," -20\n",[17,3001,3003],{"id":3002},"八压缩与归档","八、压缩与归档",[30,3005,3007],{"className":32,"code":3006,"language":34,"meta":35,"style":35},"tar -czvf a.tar.gz \u003Cdir>          # 打包\ntar -xzvf a.tar.gz                # 解包\ntar -tzvf a.tar.gz                # 查看内容\ntar -xzvf a.tar.gz -C \u002Ftmp\n\nzip -r a.zip \u003Cdir>\nunzip a.zip\nunzip -l a.zip\nunzip a.zip -d \u002Ftmp\n\ngzip \u003Cfile>\ngunzip \u003Cfile>.gz\n\nzstd \u003Cfile>                       # 快速压缩\nxz -9 \u003Cfile>                      # 高压缩\n",[37,3008,3009,3031,3043,3055,3069,3073,3091,3099,3107,3117,3121,3134,3150,3154,3170],{"__ignoreMap":35},[40,3010,3011,3014,3017,3020,3022,3024,3026,3028],{"class":42,"line":43},[40,3012,3013],{"class":46},"tar",[40,3015,3016],{"class":68}," -czvf",[40,3018,3019],{"class":50}," a.tar.gz",[40,3021,639],{"class":638},[40,3023,1072],{"class":50},[40,3025,1075],{"class":412},[40,3027,648],{"class":638},[40,3029,3030],{"class":232},"          # 打包\n",[40,3032,3033,3035,3038,3040],{"class":42,"line":60},[40,3034,3013],{"class":46},[40,3036,3037],{"class":68}," -xzvf",[40,3039,3019],{"class":50},[40,3041,3042],{"class":232},"                # 解包\n",[40,3044,3045,3047,3050,3052],{"class":42,"line":78},[40,3046,3013],{"class":46},[40,3048,3049],{"class":68}," -tzvf",[40,3051,3019],{"class":50},[40,3053,3054],{"class":232},"                # 查看内容\n",[40,3056,3057,3059,3061,3063,3066],{"class":42,"line":92},[40,3058,3013],{"class":46},[40,3060,3037],{"class":68},[40,3062,3019],{"class":50},[40,3064,3065],{"class":68}," -C",[40,3067,3068],{"class":50}," \u002Ftmp\n",[40,3070,3071],{"class":42,"line":262},[40,3072,254],{"emptyLinePlaceholder":253},[40,3074,3075,3078,3080,3083,3085,3087,3089],{"class":42,"line":284},[40,3076,3077],{"class":46},"zip",[40,3079,242],{"class":68},[40,3081,3082],{"class":50}," a.zip",[40,3084,639],{"class":638},[40,3086,1072],{"class":50},[40,3088,1075],{"class":412},[40,3090,1180],{"class":638},[40,3092,3093,3096],{"class":42,"line":298},[40,3094,3095],{"class":46},"unzip",[40,3097,3098],{"class":50}," a.zip\n",[40,3100,3101,3103,3105],{"class":42,"line":308},[40,3102,3095],{"class":46},[40,3104,1744],{"class":68},[40,3106,3098],{"class":50},[40,3108,3109,3111,3113,3115],{"class":42,"line":313},[40,3110,3095],{"class":46},[40,3112,3082],{"class":50},[40,3114,2542],{"class":68},[40,3116,3068],{"class":50},[40,3118,3119],{"class":42,"line":327},[40,3120,254],{"emptyLinePlaceholder":253},[40,3122,3123,3126,3128,3130,3132],{"class":42,"line":630},[40,3124,3125],{"class":46},"gzip",[40,3127,639],{"class":638},[40,3129,1174],{"class":50},[40,3131,1177],{"class":412},[40,3133,1180],{"class":638},[40,3135,3136,3139,3141,3143,3145,3147],{"class":42,"line":1558},[40,3137,3138],{"class":46},"gunzip",[40,3140,639],{"class":638},[40,3142,1174],{"class":50},[40,3144,1177],{"class":412},[40,3146,648],{"class":638},[40,3148,3149],{"class":50},".gz\n",[40,3151,3152],{"class":42,"line":1578},[40,3153,254],{"emptyLinePlaceholder":253},[40,3155,3156,3159,3161,3163,3165,3167],{"class":42,"line":1599},[40,3157,3158],{"class":46},"zstd",[40,3160,639],{"class":638},[40,3162,1174],{"class":50},[40,3164,1177],{"class":412},[40,3166,648],{"class":638},[40,3168,3169],{"class":232},"                       # 快速压缩\n",[40,3171,3172,3175,3177,3179,3181,3183,3185],{"class":42,"line":1620},[40,3173,3174],{"class":46},"xz",[40,3176,2176],{"class":68},[40,3178,639],{"class":638},[40,3180,1174],{"class":50},[40,3182,1177],{"class":412},[40,3184,648],{"class":638},[40,3186,3187],{"class":232},"                      # 高压缩\n",[17,3189,3191],{"id":3190},"九用户与权限","九、用户与权限",[30,3193,3195],{"className":32,"code":3194,"language":34,"meta":35,"style":35},"whoami\nid\nwho\nw\nlast\n\nuseradd -m -s \u002Fbin\u002Fbash \u003Cuser>\npasswd \u003Cuser>\nusermod -aG sudo \u003Cuser>\nuserdel -r \u003Cuser>\n\ngroupadd \u003Cgroup>\ngroups \u003Cuser>\n\nsu - \u003Cuser>\nsudo \u003Ccmd>\nsudo -i                           # 进 root shell\nsudo -u \u003Cuser> \u003Ccmd>\n",[37,3196,3197,3202,3207,3212,3217,3222,3226,3248,3261,3280,3295,3299,3313,3326,3330,3345,3357,3366],{"__ignoreMap":35},[40,3198,3199],{"class":42,"line":43},[40,3200,3201],{"class":46},"whoami\n",[40,3203,3204],{"class":42,"line":60},[40,3205,3206],{"class":46},"id\n",[40,3208,3209],{"class":42,"line":78},[40,3210,3211],{"class":46},"who\n",[40,3213,3214],{"class":42,"line":92},[40,3215,3216],{"class":46},"w\n",[40,3218,3219],{"class":42,"line":262},[40,3220,3221],{"class":46},"last\n",[40,3223,3224],{"class":42,"line":284},[40,3225,254],{"emptyLinePlaceholder":253},[40,3227,3228,3231,3234,3236,3239,3241,3244,3246],{"class":42,"line":298},[40,3229,3230],{"class":46},"useradd",[40,3232,3233],{"class":68}," -m",[40,3235,1142],{"class":68},[40,3237,3238],{"class":50}," \u002Fbin\u002Fbash",[40,3240,639],{"class":638},[40,3242,3243],{"class":50},"use",[40,3245,1075],{"class":412},[40,3247,1180],{"class":638},[40,3249,3250,3253,3255,3257,3259],{"class":42,"line":308},[40,3251,3252],{"class":46},"passwd",[40,3254,639],{"class":638},[40,3256,3243],{"class":50},[40,3258,1075],{"class":412},[40,3260,1180],{"class":638},[40,3262,3263,3266,3269,3272,3274,3276,3278],{"class":42,"line":313},[40,3264,3265],{"class":46},"usermod",[40,3267,3268],{"class":68}," -aG",[40,3270,3271],{"class":50}," sudo",[40,3273,639],{"class":638},[40,3275,3243],{"class":50},[40,3277,1075],{"class":412},[40,3279,1180],{"class":638},[40,3281,3282,3285,3287,3289,3291,3293],{"class":42,"line":327},[40,3283,3284],{"class":46},"userdel",[40,3286,242],{"class":68},[40,3288,639],{"class":638},[40,3290,3243],{"class":50},[40,3292,1075],{"class":412},[40,3294,1180],{"class":638},[40,3296,3297],{"class":42,"line":630},[40,3298,254],{"emptyLinePlaceholder":253},[40,3300,3301,3304,3306,3309,3311],{"class":42,"line":1558},[40,3302,3303],{"class":46},"groupadd",[40,3305,639],{"class":638},[40,3307,3308],{"class":50},"grou",[40,3310,13],{"class":412},[40,3312,1180],{"class":638},[40,3314,3315,3318,3320,3322,3324],{"class":42,"line":1578},[40,3316,3317],{"class":46},"groups",[40,3319,639],{"class":638},[40,3321,3243],{"class":50},[40,3323,1075],{"class":412},[40,3325,1180],{"class":638},[40,3327,3328],{"class":42,"line":1599},[40,3329,254],{"emptyLinePlaceholder":253},[40,3331,3332,3335,3337,3339,3341,3343],{"class":42,"line":1620},[40,3333,3334],{"class":46},"su",[40,3336,1042],{"class":50},[40,3338,639],{"class":638},[40,3340,3243],{"class":50},[40,3342,1075],{"class":412},[40,3344,1180],{"class":638},[40,3346,3347,3349,3351,3353,3355],{"class":42,"line":1625},[40,3348,47],{"class":46},[40,3350,639],{"class":638},[40,3352,1326],{"class":50},[40,3354,1329],{"class":412},[40,3356,1180],{"class":638},[40,3358,3359,3361,3363],{"class":42,"line":1645},[40,3360,47],{"class":46},[40,3362,69],{"class":68},[40,3364,3365],{"class":232},"                           # 进 root shell\n",[40,3367,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386],{"class":42,"line":1658},[40,3369,47],{"class":46},[40,3371,1712],{"class":68},[40,3373,639],{"class":638},[40,3375,3243],{"class":50},[40,3377,1075],{"class":412},[40,3379,648],{"class":638},[40,3381,639],{"class":638},[40,3383,1326],{"class":50},[40,3385,1329],{"class":412},[40,3387,1180],{"class":638},[13,3389,3390],{},"sudoers：",[30,3392,3394],{"className":32,"code":3393,"language":34,"meta":35,"style":35},"visudo\n",[37,3395,3396],{"__ignoreMap":35},[40,3397,3398],{"class":42,"line":43},[40,3399,3393],{"class":46},[30,3401,3404],{"className":3402,"code":3403,"language":486},[484],"alice ALL=(ALL:ALL) ALL\n%sudo ALL=(ALL:ALL) ALL\nalice ALL=(ALL) NOPASSWD: ALL     # 免密\n",[37,3405,3403],{"__ignoreMap":35},[17,3407,3409],{"id":3408},"十systemd","十、systemd",[30,3411,3413],{"className":32,"code":3412,"language":34,"meta":35,"style":35},"systemctl start\u002Fstop\u002Frestart\u002Freload\u002Fstatus \u003Csvc>\nsystemctl enable\u002Fdisable \u003Csvc>\nsystemctl is-active \u003Csvc>\nsystemctl list-units --type=service --state=running\nsystemctl daemon-reload\n\njournalctl -u \u003Csvc>\njournalctl -u \u003Csvc> -f\njournalctl -u \u003Csvc> --since \"1 hour ago\"\njournalctl -xe                    # 最近错误\njournalctl -b                     # 本次启动\njournalctl --disk-usage\njournalctl --vacuum-size=500M     # 清理\n",[37,3414,3415,3432,3447,3462,3475,3481,3485,3500,3517,3537,3547,3557,3564],{"__ignoreMap":35},[40,3416,3417,3420,3423,3425,3428,3430],{"class":42,"line":43},[40,3418,3419],{"class":46},"systemctl",[40,3421,3422],{"class":50}," start\u002Fstop\u002Frestart\u002Freload\u002Fstatus",[40,3424,639],{"class":638},[40,3426,3427],{"class":50},"sv",[40,3429,1095],{"class":412},[40,3431,1180],{"class":638},[40,3433,3434,3436,3439,3441,3443,3445],{"class":42,"line":60},[40,3435,3419],{"class":46},[40,3437,3438],{"class":50}," enable\u002Fdisable",[40,3440,639],{"class":638},[40,3442,3427],{"class":50},[40,3444,1095],{"class":412},[40,3446,1180],{"class":638},[40,3448,3449,3451,3454,3456,3458,3460],{"class":42,"line":78},[40,3450,3419],{"class":46},[40,3452,3453],{"class":50}," is-active",[40,3455,639],{"class":638},[40,3457,3427],{"class":50},[40,3459,1095],{"class":412},[40,3461,1180],{"class":638},[40,3463,3464,3466,3469,3472],{"class":42,"line":92},[40,3465,3419],{"class":46},[40,3467,3468],{"class":50}," list-units",[40,3470,3471],{"class":68}," --type=service",[40,3473,3474],{"class":68}," --state=running\n",[40,3476,3477,3479],{"class":42,"line":262},[40,3478,3419],{"class":46},[40,3480,796],{"class":50},[40,3482,3483],{"class":42,"line":284},[40,3484,254],{"emptyLinePlaceholder":253},[40,3486,3487,3490,3492,3494,3496,3498],{"class":42,"line":298},[40,3488,3489],{"class":46},"journalctl",[40,3491,1712],{"class":68},[40,3493,639],{"class":638},[40,3495,3427],{"class":50},[40,3497,1095],{"class":412},[40,3499,1180],{"class":638},[40,3501,3502,3504,3506,3508,3510,3512,3514],{"class":42,"line":308},[40,3503,3489],{"class":46},[40,3505,1712],{"class":68},[40,3507,639],{"class":638},[40,3509,3427],{"class":50},[40,3511,1095],{"class":412},[40,3513,648],{"class":638},[40,3515,3516],{"class":68}," -f\n",[40,3518,3519,3521,3523,3525,3527,3529,3531,3534],{"class":42,"line":313},[40,3520,3489],{"class":46},[40,3522,1712],{"class":68},[40,3524,639],{"class":638},[40,3526,3427],{"class":50},[40,3528,1095],{"class":412},[40,3530,648],{"class":638},[40,3532,3533],{"class":68}," --since",[40,3535,3536],{"class":50}," \"1 hour ago\"\n",[40,3538,3539,3541,3544],{"class":42,"line":327},[40,3540,3489],{"class":46},[40,3542,3543],{"class":68}," -xe",[40,3545,3546],{"class":232},"                    # 最近错误\n",[40,3548,3549,3551,3554],{"class":42,"line":630},[40,3550,3489],{"class":46},[40,3552,3553],{"class":68}," -b",[40,3555,3556],{"class":232},"                     # 本次启动\n",[40,3558,3559,3561],{"class":42,"line":1558},[40,3560,3489],{"class":46},[40,3562,3563],{"class":68}," --disk-usage\n",[40,3565,3566,3568,3571],{"class":42,"line":1578},[40,3567,3489],{"class":46},[40,3569,3570],{"class":68}," --vacuum-size=500M",[40,3572,3573],{"class":232},"     # 清理\n",[13,3575,3576,3577,111],{},"unit 文件示例 ",[37,3578,3579],{},"\u002Fetc\u002Fsystemd\u002Fsystem\u002Fmyapp.service",[30,3581,3585],{"className":3582,"code":3583,"language":3584,"meta":35,"style":35},"language-ini shiki shiki-themes monokai","[Unit]\nDescription=My App\nAfter=network.target\n\n[Service]\nType=simple\nUser=appuser\nWorkingDirectory=\u002Fopt\u002Fmyapp\nExecStart=\u002Fusr\u002Fbin\u002Fnode \u002Fopt\u002Fmyapp\u002Findex.js\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n","ini",[37,3586,3587,3592,3597,3602,3606,3611,3616,3621,3626,3631,3636,3641,3645,3650],{"__ignoreMap":35},[40,3588,3589],{"class":42,"line":43},[40,3590,3591],{},"[Unit]\n",[40,3593,3594],{"class":42,"line":60},[40,3595,3596],{},"Description=My App\n",[40,3598,3599],{"class":42,"line":78},[40,3600,3601],{},"After=network.target\n",[40,3603,3604],{"class":42,"line":92},[40,3605,254],{"emptyLinePlaceholder":253},[40,3607,3608],{"class":42,"line":262},[40,3609,3610],{},"[Service]\n",[40,3612,3613],{"class":42,"line":284},[40,3614,3615],{},"Type=simple\n",[40,3617,3618],{"class":42,"line":298},[40,3619,3620],{},"User=appuser\n",[40,3622,3623],{"class":42,"line":308},[40,3624,3625],{},"WorkingDirectory=\u002Fopt\u002Fmyapp\n",[40,3627,3628],{"class":42,"line":313},[40,3629,3630],{},"ExecStart=\u002Fusr\u002Fbin\u002Fnode \u002Fopt\u002Fmyapp\u002Findex.js\n",[40,3632,3633],{"class":42,"line":327},[40,3634,3635],{},"Restart=on-failure\n",[40,3637,3638],{"class":42,"line":630},[40,3639,3640],{},"RestartSec=5\n",[40,3642,3643],{"class":42,"line":1558},[40,3644,254],{"emptyLinePlaceholder":253},[40,3646,3647],{"class":42,"line":1578},[40,3648,3649],{},"[Install]\n",[40,3651,3652],{"class":42,"line":1599},[40,3653,3654],{},"WantedBy=multi-user.target\n",[30,3656,3658],{"className":32,"code":3657,"language":34,"meta":35,"style":35},"sudo systemctl daemon-reload\nsudo systemctl enable --now myapp\n",[37,3659,3660,3668],{"__ignoreMap":35},[40,3661,3662,3664,3666],{"class":42,"line":43},[40,3663,47],{"class":46},[40,3665,793],{"class":50},[40,3667,796],{"class":50},[40,3669,3670,3672,3674,3677,3680],{"class":42,"line":60},[40,3671,47],{"class":46},[40,3673,793],{"class":50},[40,3675,3676],{"class":50}," enable",[40,3678,3679],{"class":68}," --now",[40,3681,3682],{"class":50}," myapp\n",[17,3684,3686],{"id":3685},"十一ssh","十一、SSH",[30,3688,3690],{"className":32,"code":3689,"language":34,"meta":35,"style":35},"ssh user@host\nssh -p 2222 user@host\nssh -i ~\u002F.ssh\u002Fid_rsa user@host\n\nssh-keygen -t ed25519 -C \"comment\"\nssh-copy-id user@host\n\nssh -L 8080:localhost:80 user@host   # 本地转发\nssh -R 8080:localhost:80 user@host   # 远程转发\nssh -D 1080 user@host                # SOCKS 代理\n",[37,3691,3692,3700,3711,3722,3726,3742,3749,3753,3768,3781],{"__ignoreMap":35},[40,3693,3694,3697],{"class":42,"line":43},[40,3695,3696],{"class":46},"ssh",[40,3698,3699],{"class":50}," user@host\n",[40,3701,3702,3704,3706,3709],{"class":42,"line":60},[40,3703,3696],{"class":46},[40,3705,1053],{"class":68},[40,3707,3708],{"class":68}," 2222",[40,3710,3699],{"class":50},[40,3712,3713,3715,3717,3720],{"class":42,"line":78},[40,3714,3696],{"class":46},[40,3716,69],{"class":68},[40,3718,3719],{"class":50}," ~\u002F.ssh\u002Fid_rsa",[40,3721,3699],{"class":50},[40,3723,3724],{"class":42,"line":92},[40,3725,254],{"emptyLinePlaceholder":253},[40,3727,3728,3731,3734,3737,3739],{"class":42,"line":262},[40,3729,3730],{"class":46},"ssh-keygen",[40,3732,3733],{"class":68}," -t",[40,3735,3736],{"class":50}," ed25519",[40,3738,3065],{"class":68},[40,3740,3741],{"class":50}," \"comment\"\n",[40,3743,3744,3747],{"class":42,"line":284},[40,3745,3746],{"class":46},"ssh-copy-id",[40,3748,3699],{"class":50},[40,3750,3751],{"class":42,"line":298},[40,3752,254],{"emptyLinePlaceholder":253},[40,3754,3755,3757,3759,3762,3765],{"class":42,"line":308},[40,3756,3696],{"class":46},[40,3758,2783],{"class":68},[40,3760,3761],{"class":50}," 8080:localhost:80",[40,3763,3764],{"class":50}," user@host",[40,3766,3767],{"class":232},"   # 本地转发\n",[40,3769,3770,3772,3774,3776,3778],{"class":42,"line":313},[40,3771,3696],{"class":46},[40,3773,1880],{"class":68},[40,3775,3761],{"class":50},[40,3777,3764],{"class":50},[40,3779,3780],{"class":232},"   # 远程转发\n",[40,3782,3783,3785,3788,3791,3793],{"class":42,"line":327},[40,3784,3696],{"class":46},[40,3786,3787],{"class":68}," -D",[40,3789,3790],{"class":68}," 1080",[40,3792,3764],{"class":50},[40,3794,3795],{"class":232},"                # SOCKS 代理\n",[13,3797,3798,111],{},[37,3799,3800],{},"~\u002F.ssh\u002Fconfig",[30,3802,3805],{"className":3803,"code":3804,"language":486},[484],"Host myserver\n    HostName 1.2.3.4\n    User alice\n    Port 2222\n    IdentityFile ~\u002F.ssh\u002Fid_ed25519\n",[37,3806,3804],{"__ignoreMap":35},[13,3808,3809,3810,3813],{},"之后 ",[37,3811,3812],{},"ssh myserver"," 即可。",[22,3815,3816],{"id":3816},"传输",[30,3818,3820],{"className":32,"code":3819,"language":34,"meta":35,"style":35},"scp \u003Cfile> user@host:\u002Fpath\u002F\nscp user@host:\u002Fpath\u002F\u003Cfile> .\nscp -r \u003Cdir> user@host:\u002Fpath\u002F\n\nrsync -avz --progress \u003Csrc> user@host:\u003Cdst>   # 增量同步\nrsync -avz --delete \u003Csrc> user@host:\u003Cdst>\n",[37,3821,3822,3838,3857,3873,3877,3910],{"__ignoreMap":35},[40,3823,3824,3827,3829,3831,3833,3835],{"class":42,"line":43},[40,3825,3826],{"class":46},"scp",[40,3828,639],{"class":638},[40,3830,1174],{"class":50},[40,3832,1177],{"class":412},[40,3834,648],{"class":638},[40,3836,3837],{"class":50}," user@host:\u002Fpath\u002F\n",[40,3839,3840,3842,3845,3848,3850,3852,3854],{"class":42,"line":60},[40,3841,3826],{"class":46},[40,3843,3844],{"class":50}," user@host:\u002Fpath\u002F",[40,3846,3847],{"class":638},"\u003C",[40,3849,1174],{"class":50},[40,3851,1177],{"class":412},[40,3853,648],{"class":638},[40,3855,3856],{"class":50}," .\n",[40,3858,3859,3861,3863,3865,3867,3869,3871],{"class":42,"line":78},[40,3860,3826],{"class":46},[40,3862,242],{"class":68},[40,3864,639],{"class":638},[40,3866,1072],{"class":50},[40,3868,1075],{"class":412},[40,3870,648],{"class":638},[40,3872,3837],{"class":50},[40,3874,3875],{"class":42,"line":92},[40,3876,254],{"emptyLinePlaceholder":253},[40,3878,3879,3882,3885,3888,3890,3892,3894,3896,3899,3901,3903,3905,3907],{"class":42,"line":262},[40,3880,3881],{"class":46},"rsync",[40,3883,3884],{"class":68}," -avz",[40,3886,3887],{"class":68}," --progress",[40,3889,639],{"class":638},[40,3891,1092],{"class":50},[40,3893,1095],{"class":412},[40,3895,648],{"class":638},[40,3897,3898],{"class":50}," user@host:",[40,3900,3847],{"class":638},[40,3902,1102],{"class":50},[40,3904,1105],{"class":412},[40,3906,648],{"class":638},[40,3908,3909],{"class":232},"   # 增量同步\n",[40,3911,3912,3914,3916,3919,3921,3923,3925,3927,3929,3931,3933,3935],{"class":42,"line":284},[40,3913,3881],{"class":46},[40,3915,3884],{"class":68},[40,3917,3918],{"class":68}," --delete",[40,3920,639],{"class":638},[40,3922,1092],{"class":50},[40,3924,1095],{"class":412},[40,3926,648],{"class":638},[40,3928,3898],{"class":50},[40,3930,3847],{"class":638},[40,3932,1102],{"class":50},[40,3934,1105],{"class":412},[40,3936,1180],{"class":638},[17,3938,3940],{"id":3939},"十二软件包管理","十二、软件包管理",[22,3942,3944],{"id":3943},"aptdebian-ubuntu","apt（Debian \u002F Ubuntu）",[30,3946,3948],{"className":32,"code":3947,"language":34,"meta":35,"style":35},"sudo apt update                   # 更新索引\nsudo apt upgrade                  # 升级\nsudo apt full-upgrade             # 含依赖变化\nsudo apt install \u003Cpkg>\nsudo apt remove \u003Cpkg>             # 保留配置\nsudo apt purge \u003Cpkg>              # 含配置\nsudo apt autoremove               # 清理无用依赖\nsudo apt search \u003Ckw>\nsudo apt show \u003Cpkg>\napt list --installed\n\nsudo dpkg -i \u003Cpkg>.deb\ndpkg -l | grep \u003Cpkg>\n",[37,3949,3950,3962,3974,3986,4002,4022,4042,4054,4072,4089,4100,4104,4124],{"__ignoreMap":35},[40,3951,3952,3954,3956,3959],{"class":42,"line":43},[40,3953,47],{"class":46},[40,3955,97],{"class":50},[40,3957,3958],{"class":50}," update",[40,3960,3961],{"class":232},"                   # 更新索引\n",[40,3963,3964,3966,3968,3971],{"class":42,"line":60},[40,3965,47],{"class":46},[40,3967,97],{"class":50},[40,3969,3970],{"class":50}," upgrade",[40,3972,3973],{"class":232},"                  # 升级\n",[40,3975,3976,3978,3980,3983],{"class":42,"line":78},[40,3977,47],{"class":46},[40,3979,97],{"class":50},[40,3981,3982],{"class":50}," full-upgrade",[40,3984,3985],{"class":232},"             # 含依赖变化\n",[40,3987,3988,3990,3992,3994,3996,3998,4000],{"class":42,"line":92},[40,3989,47],{"class":46},[40,3991,97],{"class":50},[40,3993,635],{"class":50},[40,3995,639],{"class":638},[40,3997,642],{"class":50},[40,3999,645],{"class":412},[40,4001,1180],{"class":638},[40,4003,4004,4006,4008,4011,4013,4015,4017,4019],{"class":42,"line":262},[40,4005,47],{"class":46},[40,4007,97],{"class":50},[40,4009,4010],{"class":50}," remove",[40,4012,639],{"class":638},[40,4014,642],{"class":50},[40,4016,645],{"class":412},[40,4018,648],{"class":638},[40,4020,4021],{"class":232},"             # 保留配置\n",[40,4023,4024,4026,4028,4031,4033,4035,4037,4039],{"class":42,"line":284},[40,4025,47],{"class":46},[40,4027,97],{"class":50},[40,4029,4030],{"class":50}," purge",[40,4032,639],{"class":638},[40,4034,642],{"class":50},[40,4036,645],{"class":412},[40,4038,648],{"class":638},[40,4040,4041],{"class":232},"              # 含配置\n",[40,4043,4044,4046,4048,4051],{"class":42,"line":298},[40,4045,47],{"class":46},[40,4047,97],{"class":50},[40,4049,4050],{"class":50}," autoremove",[40,4052,4053],{"class":232},"               # 清理无用依赖\n",[40,4055,4056,4058,4060,4063,4065,4067,4070],{"class":42,"line":308},[40,4057,47],{"class":46},[40,4059,97],{"class":50},[40,4061,4062],{"class":50}," search",[40,4064,639],{"class":638},[40,4066,1159],{"class":50},[40,4068,4069],{"class":412},"w",[40,4071,1180],{"class":638},[40,4073,4074,4076,4078,4081,4083,4085,4087],{"class":42,"line":313},[40,4075,47],{"class":46},[40,4077,97],{"class":50},[40,4079,4080],{"class":50}," show",[40,4082,639],{"class":638},[40,4084,642],{"class":50},[40,4086,645],{"class":412},[40,4088,1180],{"class":638},[40,4090,4091,4094,4097],{"class":42,"line":327},[40,4092,4093],{"class":46},"apt",[40,4095,4096],{"class":50}," list",[40,4098,4099],{"class":68}," --installed\n",[40,4101,4102],{"class":42,"line":630},[40,4103,254],{"emptyLinePlaceholder":253},[40,4105,4106,4108,4111,4113,4115,4117,4119,4121],{"class":42,"line":1558},[40,4107,47],{"class":46},[40,4109,4110],{"class":50}," dpkg",[40,4112,69],{"class":68},[40,4114,639],{"class":638},[40,4116,642],{"class":50},[40,4118,645],{"class":412},[40,4120,648],{"class":638},[40,4122,4123],{"class":50},".deb\n",[40,4125,4126,4129,4131,4133,4135,4137,4139,4141],{"class":42,"line":1578},[40,4127,4128],{"class":46},"dpkg",[40,4130,1744],{"class":68},[40,4132,819],{"class":638},[40,4134,822],{"class":46},[40,4136,639],{"class":638},[40,4138,642],{"class":50},[40,4140,645],{"class":412},[40,4142,1180],{"class":638},[22,4144,4146],{"id":4145},"yum-dnfrhel-centos","yum \u002F dnf（RHEL \u002F CentOS）",[30,4148,4150],{"className":32,"code":4149,"language":34,"meta":35,"style":35},"sudo yum install \u003Cpkg>\nsudo yum remove \u003Cpkg>\nsudo yum update\nsudo yum search \u003Ckw>\nsudo yum info \u003Cpkg>\nyum list installed\nyum clean all && yum makecache\n\nsudo dnf install \u003Cpkg>            # 新一代\ndnf upgrade\ndnf clean all\n\nsudo rpm -ivh \u003Cpkg>.rpm\nrpm -qa | grep \u003Cpkg>\nsudo rpm -e \u003Cpkg>\n",[37,4151,4152,4168,4184,4192,4208,4224,4234,4248,4252,4271,4279,4287,4291,4312,4332],{"__ignoreMap":35},[40,4153,4154,4156,4158,4160,4162,4164,4166],{"class":42,"line":43},[40,4155,47],{"class":46},[40,4157,318],{"class":50},[40,4159,635],{"class":50},[40,4161,639],{"class":638},[40,4163,642],{"class":50},[40,4165,645],{"class":412},[40,4167,1180],{"class":638},[40,4169,4170,4172,4174,4176,4178,4180,4182],{"class":42,"line":60},[40,4171,47],{"class":46},[40,4173,318],{"class":50},[40,4175,4010],{"class":50},[40,4177,639],{"class":638},[40,4179,642],{"class":50},[40,4181,645],{"class":412},[40,4183,1180],{"class":638},[40,4185,4186,4188,4190],{"class":42,"line":78},[40,4187,47],{"class":46},[40,4189,318],{"class":50},[40,4191,100],{"class":50},[40,4193,4194,4196,4198,4200,4202,4204,4206],{"class":42,"line":92},[40,4195,47],{"class":46},[40,4197,318],{"class":50},[40,4199,4062],{"class":50},[40,4201,639],{"class":638},[40,4203,1159],{"class":50},[40,4205,4069],{"class":412},[40,4207,1180],{"class":638},[40,4209,4210,4212,4214,4216,4218,4220,4222],{"class":42,"line":262},[40,4211,47],{"class":46},[40,4213,318],{"class":50},[40,4215,816],{"class":50},[40,4217,639],{"class":638},[40,4219,642],{"class":50},[40,4221,645],{"class":412},[40,4223,1180],{"class":638},[40,4225,4226,4229,4231],{"class":42,"line":284},[40,4227,4228],{"class":46},"yum",[40,4230,4096],{"class":50},[40,4232,4233],{"class":50}," installed\n",[40,4235,4236,4238,4240,4242,4244,4246],{"class":42,"line":298},[40,4237,4228],{"class":46},[40,4239,321],{"class":50},[40,4241,409],{"class":50},[40,4243,413],{"class":412},[40,4245,4228],{"class":46},[40,4247,334],{"class":50},[40,4249,4250],{"class":42,"line":308},[40,4251,254],{"emptyLinePlaceholder":253},[40,4253,4254,4256,4258,4260,4262,4264,4266,4268],{"class":42,"line":313},[40,4255,47],{"class":46},[40,4257,404],{"class":50},[40,4259,635],{"class":50},[40,4261,639],{"class":638},[40,4263,642],{"class":50},[40,4265,645],{"class":412},[40,4267,648],{"class":638},[40,4269,4270],{"class":232},"            # 新一代\n",[40,4272,4273,4276],{"class":42,"line":327},[40,4274,4275],{"class":46},"dnf",[40,4277,4278],{"class":50}," upgrade\n",[40,4280,4281,4283,4285],{"class":42,"line":630},[40,4282,4275],{"class":46},[40,4284,321],{"class":50},[40,4286,324],{"class":50},[40,4288,4289],{"class":42,"line":1558},[40,4290,254],{"emptyLinePlaceholder":253},[40,4292,4293,4295,4298,4301,4303,4305,4307,4309],{"class":42,"line":1578},[40,4294,47],{"class":46},[40,4296,4297],{"class":50}," rpm",[40,4299,4300],{"class":68}," -ivh",[40,4302,639],{"class":638},[40,4304,642],{"class":50},[40,4306,645],{"class":412},[40,4308,648],{"class":638},[40,4310,4311],{"class":50},".rpm\n",[40,4313,4314,4317,4320,4322,4324,4326,4328,4330],{"class":42,"line":1599},[40,4315,4316],{"class":46},"rpm",[40,4318,4319],{"class":68}," -qa",[40,4321,819],{"class":638},[40,4323,822],{"class":46},[40,4325,639],{"class":638},[40,4327,642],{"class":50},[40,4329,645],{"class":412},[40,4331,1180],{"class":638},[40,4333,4334,4336,4338,4341,4343,4345,4347],{"class":42,"line":1620},[40,4335,47],{"class":46},[40,4337,4297],{"class":50},[40,4339,4340],{"class":68}," -e",[40,4342,639],{"class":638},[40,4344,642],{"class":50},[40,4346,645],{"class":412},[40,4348,1180],{"class":638},[22,4350,4352],{"id":4351},"pacmanarch","pacman（Arch）",[30,4354,4356],{"className":32,"code":4355,"language":34,"meta":35,"style":35},"sudo pacman -Syu                  # 同步并升级\nsudo pacman -S \u003Cpkg>\nsudo pacman -Rns \u003Cpkg>            # 卸载含依赖配置\npacman -Ss \u003Ckw>\npacman -Qs \u003Cpkg>\n",[37,4357,4358,4370,4386,4406,4422],{"__ignoreMap":35},[40,4359,4360,4362,4364,4367],{"class":42,"line":43},[40,4361,47],{"class":46},[40,4363,503],{"class":50},[40,4365,4366],{"class":68}," -Syu",[40,4368,4369],{"class":232},"                  # 同步并升级\n",[40,4371,4372,4374,4376,4378,4380,4382,4384],{"class":42,"line":60},[40,4373,47],{"class":46},[40,4375,503],{"class":50},[40,4377,506],{"class":68},[40,4379,639],{"class":638},[40,4381,642],{"class":50},[40,4383,645],{"class":412},[40,4385,1180],{"class":638},[40,4387,4388,4390,4392,4395,4397,4399,4401,4403],{"class":42,"line":78},[40,4389,47],{"class":46},[40,4391,503],{"class":50},[40,4393,4394],{"class":68}," -Rns",[40,4396,639],{"class":638},[40,4398,642],{"class":50},[40,4400,645],{"class":412},[40,4402,648],{"class":638},[40,4404,4405],{"class":232},"            # 卸载含依赖配置\n",[40,4407,4408,4411,4414,4416,4418,4420],{"class":42,"line":92},[40,4409,4410],{"class":46},"pacman",[40,4412,4413],{"class":68}," -Ss",[40,4415,639],{"class":638},[40,4417,1159],{"class":50},[40,4419,4069],{"class":412},[40,4421,1180],{"class":638},[40,4423,4424,4426,4429,4431,4433,4435],{"class":42,"line":262},[40,4425,4410],{"class":46},[40,4427,4428],{"class":68}," -Qs",[40,4430,639],{"class":638},[40,4432,642],{"class":50},[40,4434,645],{"class":412},[40,4436,1180],{"class":638},[17,4438,4440],{"id":4439},"十三日志","十三、日志",[30,4442,4444],{"className":32,"code":4443,"language":34,"meta":35,"style":35},"journalctl -xe\njournalctl --since today\njournalctl -p err                 # 只错误\n\ntail -f \u002Fvar\u002Flog\u002Fsyslog           # Debian\u002FUbuntu\ntail -f \u002Fvar\u002Flog\u002Fmessages         # RHEL\u002FCentOS\ntail -f \u002Fvar\u002Flog\u002Fauth.log         # 认证\ntail -f \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log\ntail -f \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log\n\ndmesg\ndmesg -T                          # 人类可读时间\ndmesg | tail -20\n",[37,4445,4446,4453,4462,4474,4478,4490,4502,4514,4523,4532,4536,4541,4552],{"__ignoreMap":35},[40,4447,4448,4450],{"class":42,"line":43},[40,4449,3489],{"class":46},[40,4451,4452],{"class":68}," -xe\n",[40,4454,4455,4457,4459],{"class":42,"line":60},[40,4456,3489],{"class":46},[40,4458,3533],{"class":68},[40,4460,4461],{"class":50}," today\n",[40,4463,4464,4466,4468,4471],{"class":42,"line":78},[40,4465,3489],{"class":46},[40,4467,1053],{"class":68},[40,4469,4470],{"class":50}," err",[40,4472,4473],{"class":232},"                 # 只错误\n",[40,4475,4476],{"class":42,"line":92},[40,4477,254],{"emptyLinePlaceholder":253},[40,4479,4480,4482,4484,4487],{"class":42,"line":262},[40,4481,1409],{"class":46},[40,4483,1412],{"class":68},[40,4485,4486],{"class":50}," \u002Fvar\u002Flog\u002Fsyslog",[40,4488,4489],{"class":232},"           # Debian\u002FUbuntu\n",[40,4491,4492,4494,4496,4499],{"class":42,"line":284},[40,4493,1409],{"class":46},[40,4495,1412],{"class":68},[40,4497,4498],{"class":50}," \u002Fvar\u002Flog\u002Fmessages",[40,4500,4501],{"class":232},"         # RHEL\u002FCentOS\n",[40,4503,4504,4506,4508,4511],{"class":42,"line":298},[40,4505,1409],{"class":46},[40,4507,1412],{"class":68},[40,4509,4510],{"class":50}," \u002Fvar\u002Flog\u002Fauth.log",[40,4512,4513],{"class":232},"         # 认证\n",[40,4515,4516,4518,4520],{"class":42,"line":308},[40,4517,1409],{"class":46},[40,4519,1412],{"class":68},[40,4521,4522],{"class":50}," \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log\n",[40,4524,4525,4527,4529],{"class":42,"line":313},[40,4526,1409],{"class":46},[40,4528,1412],{"class":68},[40,4530,4531],{"class":50}," \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log\n",[40,4533,4534],{"class":42,"line":327},[40,4535,254],{"emptyLinePlaceholder":253},[40,4537,4538],{"class":42,"line":630},[40,4539,4540],{"class":46},"dmesg\n",[40,4542,4543,4546,4549],{"class":42,"line":1558},[40,4544,4545],{"class":46},"dmesg",[40,4547,4548],{"class":68}," -T",[40,4550,4551],{"class":232},"                          # 人类可读时间\n",[40,4553,4554,4556,4558,4560],{"class":42,"line":1578},[40,4555,4545],{"class":46},[40,4557,819],{"class":638},[40,4559,1399],{"class":46},[40,4561,2999],{"class":68},[17,4563,4565],{"id":4564},"十四环境变量","十四、环境变量",[30,4567,4569],{"className":32,"code":4568,"language":34,"meta":35,"style":35},"env\necho $PATH\nexport FOO=bar\nunset FOO\n\n# 永久\n~\u002F.bashrc                         # bash 交互式\n~\u002F.bash_profile                   # bash 登录\n~\u002F.profile                        # 通用\n\u002Fetc\u002Fprofile                      # 全局\n\nsource ~\u002F.bashrc\n\nexport PATH=\"$HOME\u002F.local\u002Fbin:$PATH\"      # 前置\nexport PATH=\"$PATH:\u002Fopt\u002Ftools\u002Fbin\"        # 后置\n",[37,4570,4571,4576,4584,4598,4606,4610,4614,4625,4635,4645,4653,4657,4665,4669,4695],{"__ignoreMap":35},[40,4572,4573],{"class":42,"line":43},[40,4574,4575],{"class":46},"env\n",[40,4577,4578,4581],{"class":42,"line":60},[40,4579,4580],{"class":1019},"echo",[40,4582,4583],{"class":412}," $PATH\n",[40,4585,4586,4589,4592,4595],{"class":42,"line":78},[40,4587,4588],{"class":638},"export",[40,4590,4591],{"class":412}," FOO",[40,4593,4594],{"class":638},"=",[40,4596,4597],{"class":412},"bar\n",[40,4599,4600,4603],{"class":42,"line":92},[40,4601,4602],{"class":1019},"unset",[40,4604,4605],{"class":50}," FOO\n",[40,4607,4608],{"class":42,"line":262},[40,4609,254],{"emptyLinePlaceholder":253},[40,4611,4612],{"class":42,"line":284},[40,4613,563],{"class":232},[40,4615,4616,4619,4622],{"class":42,"line":298},[40,4617,4618],{"class":638},"~",[40,4620,4621],{"class":412},"\u002F.bashrc                         ",[40,4623,4624],{"class":232},"# bash 交互式\n",[40,4626,4627,4629,4632],{"class":42,"line":308},[40,4628,4618],{"class":638},[40,4630,4631],{"class":412},"\u002F.bash_profile                   ",[40,4633,4634],{"class":232},"# bash 登录\n",[40,4636,4637,4639,4642],{"class":42,"line":313},[40,4638,4618],{"class":638},[40,4640,4641],{"class":412},"\u002F.profile                        ",[40,4643,4644],{"class":232},"# 通用\n",[40,4646,4647,4650],{"class":42,"line":327},[40,4648,4649],{"class":46},"\u002Fetc\u002Fprofile",[40,4651,4652],{"class":232},"                      # 全局\n",[40,4654,4655],{"class":42,"line":630},[40,4656,254],{"emptyLinePlaceholder":253},[40,4658,4659,4662],{"class":42,"line":1558},[40,4660,4661],{"class":1019},"source",[40,4663,4664],{"class":50}," ~\u002F.bashrc\n",[40,4666,4667],{"class":42,"line":1578},[40,4668,254],{"emptyLinePlaceholder":253},[40,4670,4671,4673,4676,4678,4681,4684,4687,4690,4692],{"class":42,"line":1599},[40,4672,4588],{"class":638},[40,4674,4675],{"class":412}," PATH",[40,4677,4594],{"class":638},[40,4679,4680],{"class":50},"\"",[40,4682,4683],{"class":412},"$HOME",[40,4685,4686],{"class":50},"\u002F.local\u002Fbin:",[40,4688,4689],{"class":412},"$PATH",[40,4691,4680],{"class":50},[40,4693,4694],{"class":232},"      # 前置\n",[40,4696,4697,4699,4701,4703,4705,4707,4710],{"class":42,"line":1620},[40,4698,4588],{"class":638},[40,4700,4675],{"class":412},[40,4702,4594],{"class":638},[40,4704,4680],{"class":50},[40,4706,4689],{"class":412},[40,4708,4709],{"class":50},":\u002Fopt\u002Ftools\u002Fbin\"",[40,4711,4712],{"class":232},"        # 后置\n",[17,4714,4716],{"id":4715},"十五性能排查","十五、性能排查",[30,4718,4720],{"className":32,"code":4719,"language":34,"meta":35,"style":35},"uptime                            # 负载\ntop                               # 实时\nfree -h                           # 内存\ndf -h \u002F df -i                     # 磁盘 \u002F inode\niostat -x 1                       # IO\nsar -u 1 5                        # CPU 历史\n",[37,4721,4722,4730,4737,4745,4761,4772],{"__ignoreMap":35},[40,4723,4724,4727],{"class":42,"line":43},[40,4725,4726],{"class":46},"uptime",[40,4728,4729],{"class":232},"                            # 负载\n",[40,4731,4732,4734],{"class":42,"line":60},[40,4733,2137],{"class":46},[40,4735,4736],{"class":232},"                               # 实时\n",[40,4738,4739,4741,4743],{"class":42,"line":78},[40,4740,2886],{"class":46},[40,4742,2831],{"class":68},[40,4744,2891],{"class":232},[40,4746,4747,4749,4751,4753,4756,4758],{"class":42,"line":92},[40,4748,2828],{"class":46},[40,4750,2831],{"class":68},[40,4752,1380],{"class":50},[40,4754,4755],{"class":50}," df",[40,4757,69],{"class":68},[40,4759,4760],{"class":232},"                     # 磁盘 \u002F inode\n",[40,4762,4763,4765,4767,4769],{"class":42,"line":262},[40,4764,2904],{"class":46},[40,4766,2907],{"class":68},[40,4768,2910],{"class":68},[40,4770,4771],{"class":232},"                       # IO\n",[40,4773,4774,4777,4779,4781,4783],{"class":42,"line":284},[40,4775,4776],{"class":46},"sar",[40,4778,1712],{"class":68},[40,4780,2910],{"class":68},[40,4782,528],{"class":68},[40,4784,4785],{"class":232},"                        # CPU 历史\n",[13,4787,4788],{},"通用排查顺序：",[4790,4791,4792,4801,4807,4816,4822],"ol",{},[4793,4794,4795,4797,4798,4800],"li",{},[37,4796,4726],{}," + ",[37,4799,2137],{},"：负载高不高、哪个进程占用。",[4793,4802,4803,4806],{},[37,4804,4805],{},"free -h","：内存是否耗尽、是否 swap。",[4793,4808,4809,4797,4812,4815],{},[37,4810,4811],{},"df -h",[37,4813,4814],{},"df -i","：空间 \u002F inode 是否满。",[4793,4817,4818,4821],{},[37,4819,4820],{},"iostat -x 1","：IO 是否瓶颈。",[4793,4823,4824,4827],{},[37,4825,4826],{},"ss -s","：连接数是否异常。",[22,4829,4830],{"id":4830},"定位细节",[30,4832,4834],{"className":32,"code":4833,"language":34,"meta":35,"style":35},"lsof -p \u003Cpid>                     # 进程打开的文件\nlsof -i :8080                     # 端口占用\nlsof \u002Fvar\u002Flog\u002Fsyslog\n\ntop -H -p \u003Cpid>                   # 线程\nps -T -p \u003Cpid>\n\ntcpdump -i eth0 -n\ntcpdump -i eth0 port 80\ntcpdump -i eth0 host 1.2.3.4\ntcpdump -i eth0 -w cap.pcap       # 存盘（Wireshark 打开）\n",[37,4835,4836,4853,4864,4871,4875,4894,4910,4914,4927,4940,4954],{"__ignoreMap":35},[40,4837,4838,4840,4842,4844,4846,4848,4850],{"class":42,"line":43},[40,4839,2394],{"class":46},[40,4841,1053],{"class":68},[40,4843,639],{"class":638},[40,4845,2162],{"class":50},[40,4847,1329],{"class":412},[40,4849,648],{"class":638},[40,4851,4852],{"class":232},"                     # 进程打开的文件\n",[40,4854,4855,4857,4859,4861],{"class":42,"line":60},[40,4856,2394],{"class":46},[40,4858,69],{"class":68},[40,4860,2399],{"class":50},[40,4862,4863],{"class":232},"                     # 端口占用\n",[40,4865,4866,4868],{"class":42,"line":78},[40,4867,2394],{"class":46},[40,4869,4870],{"class":50}," \u002Fvar\u002Flog\u002Fsyslog\n",[40,4872,4873],{"class":42,"line":92},[40,4874,254],{"emptyLinePlaceholder":253},[40,4876,4877,4879,4881,4883,4885,4887,4889,4891],{"class":42,"line":262},[40,4878,2137],{"class":46},[40,4880,2548],{"class":68},[40,4882,1053],{"class":68},[40,4884,639],{"class":638},[40,4886,2162],{"class":50},[40,4888,1329],{"class":412},[40,4890,648],{"class":638},[40,4892,4893],{"class":232},"                   # 线程\n",[40,4895,4896,4898,4900,4902,4904,4906,4908],{"class":42,"line":284},[40,4897,2087],{"class":46},[40,4899,4548],{"class":68},[40,4901,1053],{"class":68},[40,4903,639],{"class":638},[40,4905,2162],{"class":50},[40,4907,1329],{"class":412},[40,4909,1180],{"class":638},[40,4911,4912],{"class":42,"line":298},[40,4913,254],{"emptyLinePlaceholder":253},[40,4915,4916,4919,4921,4924],{"class":42,"line":308},[40,4917,4918],{"class":46},"tcpdump",[40,4920,69],{"class":68},[40,4922,4923],{"class":50}," eth0",[40,4925,4926],{"class":68}," -n\n",[40,4928,4929,4931,4933,4935,4938],{"class":42,"line":313},[40,4930,4918],{"class":46},[40,4932,69],{"class":68},[40,4934,4923],{"class":50},[40,4936,4937],{"class":50}," port",[40,4939,2725],{"class":68},[40,4941,4942,4944,4946,4948,4951],{"class":42,"line":327},[40,4943,4918],{"class":46},[40,4945,69],{"class":68},[40,4947,4923],{"class":50},[40,4949,4950],{"class":50}," host",[40,4952,4953],{"class":68}," 1.2.3.4\n",[40,4955,4956,4958,4960,4962,4964,4967],{"class":42,"line":630},[40,4957,4918],{"class":46},[40,4959,69],{"class":68},[40,4961,4923],{"class":50},[40,4963,856],{"class":68},[40,4965,4966],{"class":50}," cap.pcap",[40,4968,4969],{"class":232},"       # 存盘（Wireshark 打开）\n",[17,4971,4973],{"id":4972},"十六定时任务","十六、定时任务",[30,4975,4977],{"className":32,"code":4976,"language":34,"meta":35,"style":35},"crontab -e                        # 编辑\ncrontab -l                        # 列出\ncrontab -r                        # 删除\n",[37,4978,4979,4989,4998],{"__ignoreMap":35},[40,4980,4981,4984,4986],{"class":42,"line":43},[40,4982,4983],{"class":46},"crontab",[40,4985,4340],{"class":68},[40,4987,4988],{"class":232},"                        # 编辑\n",[40,4990,4991,4993,4995],{"class":42,"line":60},[40,4992,4983],{"class":46},[40,4994,1744],{"class":68},[40,4996,4997],{"class":232},"                        # 列出\n",[40,4999,5000,5002,5004],{"class":42,"line":78},[40,5001,4983],{"class":46},[40,5003,242],{"class":68},[40,5005,5006],{"class":232},"                        # 删除\n",[13,5008,5009],{},"格式：",[30,5011,5014],{"className":5012,"code":5013,"language":486},[484],"* * * * * \u003Ccommand>\n│ │ │ │ │\n│ │ │ │ └─ 星期（0-7，0\u002F7 都是周日）\n│ │ │ └─── 月（1-12）\n│ │ └───── 日（1-31）\n│ └─────── 时（0-23）\n└───────── 分（0-59）\n",[37,5015,5013],{"__ignoreMap":35},[13,5017,1996],{},[30,5019,5022],{"className":5020,"code":5021,"language":486},[484],"0 3 * * * \u002Fopt\u002Fbackup.sh              # 每天 3:00\n*\u002F5 * * * * \u002Fusr\u002Fbin\u002Fcheck.sh         # 每 5 分钟\n0 9-18 * * 1-5 \u002Fopt\u002Fwork.sh           # 工作日 9-18 整点\n",[37,5023,5021],{"__ignoreMap":35},[13,5025,5026],{},"注意事项：",[5028,5029,5030,5033,5039],"ul",{},[4793,5031,5032],{},"PATH 与登录 shell 不同，用绝对路径。",[4793,5034,5035,5036,2011],{},"输出默认发邮件，重定向：",[37,5037,5038],{},">> \u002Fvar\u002Flog\u002Fjob.log 2>&1",[4793,5040,5041],{},"秒级任务用 systemd timer。",[17,5043,5045],{"id":5044},"十七实用技巧","十七、实用技巧",[30,5047,5049],{"className":32,"code":5048,"language":34,"meta":35,"style":35},"history\nhistory | grep \u003Ckw>\nCtrl+R                            # 反向搜索历史\n!!                                # 上一条\n!$                                # 上一条最后参数\n!123                              # 历史编号 123\n\npushd \u002Fpath \u002F popd \u002F dirs -v\n\nnohup \u003Ccmd> > out.log 2>&1 &\ndisown\n\nopenssl rand -base64 16           # 随机密码\nuuidgen\nmd5sum \u003Cfile>\nsha256sum \u003Cfile>\nxxd \u003Cfile>\ntime \u003Ccmd>\n\npython3 -m http.server 8000       # 快速 HTTP 服务\n",[37,5050,5051,5056,5073,5081,5089,5100,5110,5114,5119,5123,5148,5153,5157,5174,5179,5192,5205,5218,5230,5234],{"__ignoreMap":35},[40,5052,5053],{"class":42,"line":43},[40,5054,5055],{"class":1019},"history\n",[40,5057,5058,5061,5063,5065,5067,5069,5071],{"class":42,"line":60},[40,5059,5060],{"class":1019},"history",[40,5062,819],{"class":638},[40,5064,822],{"class":46},[40,5066,639],{"class":638},[40,5068,1159],{"class":50},[40,5070,4069],{"class":412},[40,5072,1180],{"class":638},[40,5074,5075,5078],{"class":42,"line":78},[40,5076,5077],{"class":46},"Ctrl+R",[40,5079,5080],{"class":232},"                            # 反向搜索历史\n",[40,5082,5083,5086],{"class":42,"line":92},[40,5084,5085],{"class":638},"!!",[40,5087,5088],{"class":232},"                                # 上一条\n",[40,5090,5091,5094,5097],{"class":42,"line":262},[40,5092,5093],{"class":638},"!",[40,5095,5096],{"class":46},"$",[40,5098,5099],{"class":232},"                                # 上一条最后参数\n",[40,5101,5102,5104,5107],{"class":42,"line":284},[40,5103,5093],{"class":638},[40,5105,5106],{"class":46},"123",[40,5108,5109],{"class":232},"                              # 历史编号 123\n",[40,5111,5112],{"class":42,"line":298},[40,5113,254],{"emptyLinePlaceholder":253},[40,5115,5116],{"class":42,"line":308},[40,5117,5118],{"class":412},"pushd \u002Fpath \u002F popd \u002F dirs -v\n",[40,5120,5121],{"class":42,"line":313},[40,5122,254],{"emptyLinePlaceholder":253},[40,5124,5125,5128,5130,5132,5134,5136,5139,5142,5145],{"class":42,"line":327},[40,5126,5127],{"class":46},"nohup",[40,5129,639],{"class":638},[40,5131,1326],{"class":50},[40,5133,1329],{"class":412},[40,5135,648],{"class":638},[40,5137,5138],{"class":638}," >",[40,5140,5141],{"class":50}," out.log",[40,5143,5144],{"class":638}," 2>&1",[40,5146,5147],{"class":412}," &\n",[40,5149,5150],{"class":42,"line":630},[40,5151,5152],{"class":1019},"disown\n",[40,5154,5155],{"class":42,"line":1558},[40,5156,254],{"emptyLinePlaceholder":253},[40,5158,5159,5162,5165,5168,5171],{"class":42,"line":1578},[40,5160,5161],{"class":46},"openssl",[40,5163,5164],{"class":50}," rand",[40,5166,5167],{"class":68}," -base64",[40,5169,5170],{"class":68}," 16",[40,5172,5173],{"class":232},"           # 随机密码\n",[40,5175,5176],{"class":42,"line":1599},[40,5177,5178],{"class":46},"uuidgen\n",[40,5180,5181,5184,5186,5188,5190],{"class":42,"line":1620},[40,5182,5183],{"class":46},"md5sum",[40,5185,639],{"class":638},[40,5187,1174],{"class":50},[40,5189,1177],{"class":412},[40,5191,1180],{"class":638},[40,5193,5194,5197,5199,5201,5203],{"class":42,"line":1625},[40,5195,5196],{"class":46},"sha256sum",[40,5198,639],{"class":638},[40,5200,1174],{"class":50},[40,5202,1177],{"class":412},[40,5204,1180],{"class":638},[40,5206,5207,5210,5212,5214,5216],{"class":42,"line":1645},[40,5208,5209],{"class":46},"xxd",[40,5211,639],{"class":638},[40,5213,1174],{"class":50},[40,5215,1177],{"class":412},[40,5217,1180],{"class":638},[40,5219,5220,5223,5225,5228],{"class":42,"line":1658},[40,5221,5222],{"class":638},"time",[40,5224,639],{"class":638},[40,5226,5227],{"class":412},"cmd",[40,5229,1180],{"class":638},[40,5231,5232],{"class":42,"line":1674},[40,5233,254],{"emptyLinePlaceholder":253},[40,5235,5236,5239,5241,5244,5247],{"class":42,"line":1679},[40,5237,5238],{"class":46},"python3",[40,5240,3233],{"class":68},[40,5242,5243],{"class":50}," http.server",[40,5245,5246],{"class":68}," 8000",[40,5248,5249],{"class":232},"       # 快速 HTTP 服务\n",[22,5251,5252],{"id":5252},"命令组合",[30,5254,5256],{"className":32,"code":5255,"language":34,"meta":35,"style":35},"cmd1 && cmd2                      # 成功才继续\ncmd1 || cmd2                      # 失败才继续\ncmd1 ; cmd2                       # 顺序\ncmd1 &                            # 后台\n(cmd1; cmd2)                      # 子 shell\n",[37,5257,5258,5271,5284,5296,5306],{"__ignoreMap":35},[40,5259,5260,5263,5265,5268],{"class":42,"line":43},[40,5261,5262],{"class":46},"cmd1",[40,5264,413],{"class":412},[40,5266,5267],{"class":46},"cmd2",[40,5269,5270],{"class":232},"                      # 成功才继续\n",[40,5272,5273,5275,5278,5281],{"class":42,"line":60},[40,5274,5262],{"class":46},[40,5276,5277],{"class":638}," ||",[40,5279,5280],{"class":46}," cmd2",[40,5282,5283],{"class":232},"                      # 失败才继续\n",[40,5285,5286,5288,5291,5293],{"class":42,"line":78},[40,5287,5262],{"class":46},[40,5289,5290],{"class":412}," ; ",[40,5292,5267],{"class":46},[40,5294,5295],{"class":232},"                       # 顺序\n",[40,5297,5298,5300,5303],{"class":42,"line":92},[40,5299,5262],{"class":46},[40,5301,5302],{"class":412}," &                            ",[40,5304,5305],{"class":232},"# 后台\n",[40,5307,5308,5311,5313,5316,5318,5321],{"class":42,"line":262},[40,5309,5310],{"class":412},"(",[40,5312,5262],{"class":46},[40,5314,5315],{"class":412},"; ",[40,5317,5267],{"class":46},[40,5319,5320],{"class":412},")                      ",[40,5322,5323],{"class":232},"# 子 shell\n",[22,5325,5326],{"id":5326},"变量",[30,5328,5330],{"className":32,"code":5329,"language":34,"meta":35,"style":35},"name=\"world\"\necho \"$name\"\necho \"${name}\"\necho \"$(date)\"\necho '$name'                      # 不替换\n\n: ${VAR:=default}                 # 默认值\n\nstr=\"hello.txt\"\n\n{% raw %}\necho ${str%.txt}                  # hello\necho ${str#hello.}                # txt\necho ${str\u002Ftxt\u002Fmd}                # hello.md\necho ${#str}                      # 9\n{% endraw %}\n\n",[37,5331,5332,5342,5355,5367,5380,5390,5394,5411,5415,5425,5429,5443,5458,5473,5492,5507],{"__ignoreMap":35},[40,5333,5334,5337,5339],{"class":42,"line":43},[40,5335,5336],{"class":412},"name",[40,5338,4594],{"class":638},[40,5340,5341],{"class":50},"\"world\"\n",[40,5343,5344,5346,5349,5352],{"class":42,"line":60},[40,5345,4580],{"class":1019},[40,5347,5348],{"class":50}," \"",[40,5350,5351],{"class":412},"$name",[40,5353,5354],{"class":50},"\"\n",[40,5356,5357,5359,5362,5364],{"class":42,"line":78},[40,5358,4580],{"class":1019},[40,5360,5361],{"class":50}," \"${",[40,5363,5336],{"class":412},[40,5365,5366],{"class":50},"}\"\n",[40,5368,5369,5371,5374,5377],{"class":42,"line":92},[40,5370,4580],{"class":1019},[40,5372,5373],{"class":50}," \"$(",[40,5375,5376],{"class":46},"date",[40,5378,5379],{"class":50},")\"\n",[40,5381,5382,5384,5387],{"class":42,"line":262},[40,5383,4580],{"class":1019},[40,5385,5386],{"class":50}," '$name'",[40,5388,5389],{"class":232},"                      # 不替换\n",[40,5391,5392],{"class":42,"line":284},[40,5393,254],{"emptyLinePlaceholder":253},[40,5395,5396,5399,5402,5405,5408],{"class":42,"line":298},[40,5397,5398],{"class":1019},":",[40,5400,5401],{"class":412}," ${VAR",[40,5403,5404],{"class":638},":=",[40,5406,5407],{"class":412},"default}                 ",[40,5409,5410],{"class":232},"# 默认值\n",[40,5412,5413],{"class":42,"line":308},[40,5414,254],{"emptyLinePlaceholder":253},[40,5416,5417,5420,5422],{"class":42,"line":313},[40,5418,5419],{"class":412},"str",[40,5421,4594],{"class":638},[40,5423,5424],{"class":50},"\"hello.txt\"\n",[40,5426,5427],{"class":42,"line":327},[40,5428,254],{"emptyLinePlaceholder":253},[40,5430,5431,5434,5437,5440],{"class":42,"line":630},[40,5432,5433],{"class":412},"{",[40,5435,5436],{"class":46},"%",[40,5438,5439],{"class":50}," raw",[40,5441,5442],{"class":50}," %}\n",[40,5444,5445,5447,5450,5452,5455],{"class":42,"line":1558},[40,5446,4580],{"class":1019},[40,5448,5449],{"class":412}," ${str",[40,5451,5436],{"class":638},[40,5453,5454],{"class":412},".txt}                  ",[40,5456,5457],{"class":232},"# hello\n",[40,5459,5460,5462,5464,5467,5470],{"class":42,"line":1578},[40,5461,4580],{"class":1019},[40,5463,5449],{"class":412},[40,5465,5466],{"class":638},"#",[40,5468,5469],{"class":412},"hello.}                ",[40,5471,5472],{"class":232},"# txt\n",[40,5474,5475,5477,5479,5481,5484,5486,5489],{"class":42,"line":1599},[40,5476,4580],{"class":1019},[40,5478,5449],{"class":412},[40,5480,1820],{"class":638},[40,5482,5483],{"class":412},"txt",[40,5485,1820],{"class":638},[40,5487,5488],{"class":412},"md}                ",[40,5490,5491],{"class":232},"# hello.md\n",[40,5493,5494,5496,5499,5501,5504],{"class":42,"line":1620},[40,5495,4580],{"class":1019},[40,5497,5498],{"class":412}," ${",[40,5500,5466],{"class":638},[40,5502,5503],{"class":412},"str}                      ",[40,5505,5506],{"class":232},"# 9\n",[40,5508,5509,5511,5513,5516],{"class":42,"line":1625},[40,5510,5433],{"class":412},[40,5512,5436],{"class":46},[40,5514,5515],{"class":50}," endraw",[40,5517,5442],{"class":50},[17,5519,5521],{"id":5520},"十八快捷键","十八、快捷键",[150,5523,5524,5534],{},[153,5525,5526],{},[156,5527,5528,5531],{},[159,5529,5530],{},"快捷键",[159,5532,5533],{},"作用",[166,5535,5536,5545,5555,5565,5579,5592,5602,5611,5620],{},[156,5537,5538,5542],{},[171,5539,5540],{},[37,5541,2319],{},[171,5543,5544],{},"中断",[156,5546,5547,5552],{},[171,5548,5549],{},[37,5550,5551],{},"Ctrl+D",[171,5553,5554],{},"退出 shell",[156,5556,5557,5562],{},[171,5558,5559],{},[37,5560,5561],{},"Ctrl+L",[171,5563,5564],{},"清屏",[156,5566,5567,5576],{},[171,5568,5569,5572,5573],{},[37,5570,5571],{},"Ctrl+A"," \u002F ",[37,5574,5575],{},"Ctrl+E",[171,5577,5578],{},"行首 \u002F 行尾",[156,5580,5581,5589],{},[171,5582,5583,5572,5586],{},[37,5584,5585],{},"Ctrl+U",[37,5587,5588],{},"Ctrl+K",[171,5590,5591],{},"删光标前 \u002F 后",[156,5593,5594,5599],{},[171,5595,5596],{},[37,5597,5598],{},"Ctrl+W",[171,5600,5601],{},"删前一个单词",[156,5603,5604,5608],{},[171,5605,5606],{},[37,5607,5077],{},[171,5609,5610],{},"搜索历史",[156,5612,5613,5617],{},[171,5614,5615],{},[37,5616,2259],{},[171,5618,5619],{},"挂起",[156,5621,5622,5630],{},[171,5623,5624,5572,5627],{},[37,5625,5626],{},"Tab",[37,5628,5629],{},"Tab Tab",[171,5631,5632],{},"补全 \u002F 列候选",[5634,5635],"hr",{},[17,5637,5638],{"id":5638},"参考",[5028,5640,5641,5653,5660,5667,5674,5680],{},[4793,5642,5643,5644],{},"清华镜像站：",[5645,5646,5647],"a",{"href":5647,"rel":5648,"target":5652},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002F",[5649,5650,5651],"nofollow","noopener","noreferrer","_blank",[4793,5654,5655,5656],{},"中科大镜像站：",[5645,5657,5658],{"href":5658,"rel":5659,"target":5652},"https:\u002F\u002Fmirrors.ustc.edu.cn\u002F",[5649,5650,5651],[4793,5661,5662,5663],{},"阿里云镜像站：",[5645,5664,5665],{"href":5665,"rel":5666,"target":5652},"https:\u002F\u002Fdeveloper.aliyun.com\u002Fmirror\u002F",[5649,5650,5651],[4793,5668,5669,5670],{},"npmmirror：",[5645,5671,5672],{"href":5672,"rel":5673,"target":5652},"https:\u002F\u002Fnpmmirror.com\u002F",[5649,5650,5651],[4793,5675,5676,5677],{},"man 手册：",[37,5678,5679],{},"man \u003Ccommand>",[4793,5681,5682,5683,5686],{},"tldr：",[37,5684,5685],{},"tldr \u003Ccommand>","（需安装）",[5688,5689,5690],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sHkqI, html code.shiki .sHkqI{--shiki-default:#A6E22E}html pre.shiki code .s_Ekj, html code.shiki .s_Ekj{--shiki-default:#E6DB74}html pre.shiki code .s7s5_, html code.shiki .s7s5_{--shiki-default:#AE81FF}html pre.shiki code .snpHw, html code.shiki .snpHw{--shiki-default:#88846F}html pre.shiki code .szGx7, html code.shiki .szGx7{--shiki-default:#FD971F}html pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}html pre.shiki code .s8I7P, html code.shiki .s8I7P{--shiki-default:#F92672}html pre.shiki code .sOx1s, html code.shiki .sOx1s{--shiki-default:#66D9EF;--shiki-default-font-style:italic}html pre.shiki code .susgL, html code.shiki .susgL{--shiki-default:#CFCFC2}html pre.shiki code .sYf5A, html code.shiki .sYf5A{--shiki-default:#66D9EF}",{"title":35,"searchDepth":60,"depth":60,"links":5692},[5693,5704,5707,5710,5711,5712,5715,5716,5717,5718,5719,5722,5727,5728,5729,5732,5733,5737,5738],{"id":19,"depth":60,"text":20,"children":5694},[5695,5696,5697,5698,5699,5700,5701,5702,5703],{"id":24,"depth":78,"text":25},{"id":147,"depth":78,"text":148},{"id":221,"depth":78,"text":222},{"id":472,"depth":78,"text":473},{"id":552,"depth":78,"text":553},{"id":716,"depth":78,"text":717},{"id":839,"depth":78,"text":840},{"id":873,"depth":78,"text":874},{"id":924,"depth":78,"text":925},{"id":1008,"depth":60,"text":1009,"children":5705},[5706],{"id":1209,"depth":78,"text":1209},{"id":1366,"depth":60,"text":1367,"children":5708},[5709],{"id":1766,"depth":78,"text":1766},{"id":1836,"depth":60,"text":1837},{"id":2076,"depth":60,"text":2077},{"id":2344,"depth":60,"text":2345,"children":5713},[5714],{"id":2676,"depth":78,"text":2676},{"id":2817,"depth":60,"text":2818},{"id":3002,"depth":60,"text":3003},{"id":3190,"depth":60,"text":3191},{"id":3408,"depth":60,"text":3409},{"id":3685,"depth":60,"text":3686,"children":5720},[5721],{"id":3816,"depth":78,"text":3816},{"id":3939,"depth":60,"text":3940,"children":5723},[5724,5725,5726],{"id":3943,"depth":78,"text":3944},{"id":4145,"depth":78,"text":4146},{"id":4351,"depth":78,"text":4352},{"id":4439,"depth":60,"text":4440},{"id":4564,"depth":60,"text":4565},{"id":4715,"depth":60,"text":4716,"children":5730},[5731],{"id":4830,"depth":78,"text":4830},{"id":4972,"depth":60,"text":4973},{"id":5044,"depth":60,"text":5045,"children":5734},[5735,5736],{"id":5252,"depth":78,"text":5252},{"id":5326,"depth":78,"text":5326},{"id":5520,"depth":60,"text":5521},{"id":5638,"depth":60,"text":5638},"2026-09-25","md",{},"\u002Flinux-memo-2026-09-25",{"title":7,"description":15},"linux-memo-2026-09-25",[5746,5747,5748],"linux","运维","备忘录","iSEC1Y6u5VxuDGnkptYIp294v_f2HDDTd_aIwN64dAg",1794733996687]