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