├── .github └── workflows │ └── deploy.yml ├── .gitignore ├── GUIDE.md ├── README.md ├── build.sh ├── docs ├── 404.html ├── Shell编程 │ ├── builtin-builtin.html │ ├── command-builtin.html │ ├── declare-builtin.html │ ├── echo.html │ ├── enable-builtin.html │ ├── eval-builtin.html │ ├── exec-builtin.html │ ├── exit-builtin.html │ ├── expect.html │ ├── expr.html │ ├── let-builtin.html │ ├── printf.html │ ├── read-builtin.html │ ├── readonly-builtin.html │ ├── set-builtin.html │ ├── sleep.html │ ├── test.html │ ├── unset-builtin.html │ └── wait-builtin.html ├── assets │ ├── css │ │ └── 0.styles.6608425b.css │ ├── img │ │ ├── logo.f2af9864.png │ │ └── search.83621669.svg │ └── js │ │ ├── 10.3fd50d48.js │ │ ├── 100.02726116.js │ │ ├── 101.c6b7074f.js │ │ ├── 102.8031f6b0.js │ │ ├── 103.6c07d552.js │ │ ├── 104.1a986619.js │ │ ├── 105.2128987a.js │ │ ├── 106.44336fd6.js │ │ ├── 107.d5033e25.js │ │ ├── 108.7cd1f2d6.js │ │ ├── 109.44ef34fa.js │ │ ├── 11.7412dbb5.js │ │ ├── 110.0d39f191.js │ │ ├── 111.450ab940.js │ │ ├── 112.bd474714.js │ │ ├── 113.7345d2a3.js │ │ ├── 114.b1ceea6e.js │ │ ├── 115.3ecd1d37.js │ │ ├── 116.f417ee15.js │ │ ├── 117.a4c174a7.js │ │ ├── 118.76493d64.js │ │ ├── 119.e0c81dde.js │ │ ├── 12.f3dc68e9.js │ │ ├── 120.4ccea9a8.js │ │ ├── 121.2c81105b.js │ │ ├── 122.cc695705.js │ │ ├── 123.585c0ef8.js │ │ ├── 124.15286044.js │ │ ├── 125.13093917.js │ │ ├── 126.25f9c22e.js │ │ ├── 127.f5733a3d.js │ │ ├── 128.784b2325.js │ │ ├── 129.bfe27bbf.js │ │ ├── 13.5b62a909.js │ │ ├── 130.afaa9dae.js │ │ ├── 131.725a079b.js │ │ ├── 132.be5d0df4.js │ │ ├── 133.bace3ca3.js │ │ ├── 134.d73fdef6.js │ │ ├── 135.92334e00.js │ │ ├── 136.4fade977.js │ │ ├── 137.5c4aa035.js │ │ ├── 138.5589ca34.js │ │ ├── 139.b59d345e.js │ │ ├── 14.bf4e6eee.js │ │ ├── 140.450f1cd5.js │ │ ├── 141.b15c1fd4.js │ │ ├── 142.946d2008.js │ │ ├── 143.72bd88d7.js │ │ ├── 144.2d847cd5.js │ │ ├── 145.0a365519.js │ │ ├── 146.5be02a31.js │ │ ├── 147.0f874d0f.js │ │ ├── 148.88d4453e.js │ │ ├── 149.15532e1a.js │ │ ├── 15.58042256.js │ │ ├── 150.f0ac16a7.js │ │ ├── 151.7aa8469c.js │ │ ├── 152.f19ea45a.js │ │ ├── 153.a27fed18.js │ │ ├── 154.c2515a70.js │ │ ├── 155.1cd4255d.js │ │ ├── 156.00fb9a39.js │ │ ├── 157.bcf56347.js │ │ ├── 158.6d091aaa.js │ │ ├── 159.b9444ff6.js │ │ ├── 16.1a7f30b3.js │ │ ├── 160.3405e15e.js │ │ ├── 161.fe04d002.js │ │ ├── 162.1d47e417.js │ │ ├── 163.a6cf2ffb.js │ │ ├── 164.542ecdf8.js │ │ ├── 165.f1433774.js │ │ ├── 166.c6f378e8.js │ │ ├── 167.8ba46445.js │ │ ├── 168.d25fa30e.js │ │ ├── 169.66b55264.js │ │ ├── 17.b04e2988.js │ │ ├── 170.111579b3.js │ │ ├── 171.45dd0fcc.js │ │ ├── 172.3d6c1f37.js │ │ ├── 173.b1e950ff.js │ │ ├── 174.6ae78b9a.js │ │ ├── 175.293ba445.js │ │ ├── 176.f97007a3.js │ │ ├── 177.35c4fd3a.js │ │ ├── 178.8d19d6a8.js │ │ ├── 179.f65d1b49.js │ │ ├── 18.bab17c91.js │ │ ├── 180.01aa6eec.js │ │ ├── 181.7b072e9b.js │ │ ├── 182.0ab6a548.js │ │ ├── 183.ee1e2897.js │ │ ├── 184.164eb2b6.js │ │ ├── 185.4df571ca.js │ │ ├── 186.35105d90.js │ │ ├── 187.c8dd825d.js │ │ ├── 188.ccccb488.js │ │ ├── 189.e319453e.js │ │ ├── 19.1aaace09.js │ │ ├── 190.feed02d3.js │ │ ├── 191.66cff3c5.js │ │ ├── 192.a079e9f9.js │ │ ├── 193.51604b88.js │ │ ├── 194.38142dd5.js │ │ ├── 195.25028f39.js │ │ ├── 196.822468b1.js │ │ ├── 197.205bb18a.js │ │ ├── 198.ff5f81ce.js │ │ ├── 199.f9dad282.js │ │ ├── 2.08ee4580.js │ │ ├── 20.23481c53.js │ │ ├── 200.ef7bb706.js │ │ ├── 201.327dbfc2.js │ │ ├── 202.7c1f3384.js │ │ ├── 203.631149d5.js │ │ ├── 204.5bac2afe.js │ │ ├── 205.fa3a83fd.js │ │ ├── 206.8d3c7795.js │ │ ├── 207.b362ab4b.js │ │ ├── 208.abbbc67c.js │ │ ├── 209.cf0fe9e0.js │ │ ├── 21.db33e191.js │ │ ├── 210.499c5e66.js │ │ ├── 211.6976686e.js │ │ ├── 212.45b95cb1.js │ │ ├── 213.2f7f1ac0.js │ │ ├── 214.5ed21ebc.js │ │ ├── 215.cb1b87ac.js │ │ ├── 216.8bd46e58.js │ │ ├── 217.deb58f51.js │ │ ├── 218.83765e29.js │ │ ├── 219.5a38941a.js │ │ ├── 22.9c1e2885.js │ │ ├── 220.b312715a.js │ │ ├── 221.556c1286.js │ │ ├── 222.6e8baa58.js │ │ ├── 223.77aaf750.js │ │ ├── 224.e0b03c9c.js │ │ ├── 225.3edf694e.js │ │ ├── 226.9a48828f.js │ │ ├── 227.a735bdab.js │ │ ├── 228.a01b83bf.js │ │ ├── 229.31c35d5d.js │ │ ├── 23.ae11168f.js │ │ ├── 230.2badede5.js │ │ ├── 231.74747c9e.js │ │ ├── 232.7df11f4c.js │ │ ├── 233.70b88376.js │ │ ├── 234.3fdadd17.js │ │ ├── 235.b05471d8.js │ │ ├── 236.d37df09b.js │ │ ├── 237.82867dcb.js │ │ ├── 238.86db13cd.js │ │ ├── 239.a2e05f32.js │ │ ├── 24.0ac25ca6.js │ │ ├── 240.318a6171.js │ │ ├── 241.118aa3b2.js │ │ ├── 242.bc11652c.js │ │ ├── 243.37caddbd.js │ │ ├── 244.7f4b0665.js │ │ ├── 245.b034d099.js │ │ ├── 246.a889ae09.js │ │ ├── 247.86f4938a.js │ │ ├── 248.14b6cf06.js │ │ ├── 249.dc5166dc.js │ │ ├── 25.6198c8c1.js │ │ ├── 250.748b14e4.js │ │ ├── 251.5b7aab2e.js │ │ ├── 252.2b338ff9.js │ │ ├── 253.88d04303.js │ │ ├── 254.0d15c428.js │ │ ├── 255.663a207b.js │ │ ├── 256.d4c3d697.js │ │ ├── 257.fa5525b7.js │ │ ├── 258.b82c7174.js │ │ ├── 259.ab3c5515.js │ │ ├── 26.58f95260.js │ │ ├── 260.d4417c47.js │ │ ├── 261.982d6215.js │ │ ├── 262.b3c20e9f.js │ │ ├── 263.44d245d5.js │ │ ├── 264.d6b722cd.js │ │ ├── 265.3867d04c.js │ │ ├── 266.ec6bcef0.js │ │ ├── 267.b5d30701.js │ │ ├── 268.96984b5e.js │ │ ├── 269.3c2c17ec.js │ │ ├── 27.a902bab7.js │ │ ├── 270.8c614d14.js │ │ ├── 271.e4c0ce7a.js │ │ ├── 28.bdaff028.js │ │ ├── 29.4e5c4127.js │ │ ├── 3.2919edb0.js │ │ ├── 30.df60f92d.js │ │ ├── 31.299655d9.js │ │ ├── 32.b2237e16.js │ │ ├── 33.c5b342ed.js │ │ ├── 34.d7496255.js │ │ ├── 35.f94fbb4a.js │ │ ├── 36.9771e079.js │ │ ├── 37.5abf735c.js │ │ ├── 38.b36109f6.js │ │ ├── 39.2cb1dd72.js │ │ ├── 4.572e4cdf.js │ │ ├── 40.9d7a6e69.js │ │ ├── 41.8784e392.js │ │ ├── 42.eba90ffa.js │ │ ├── 43.50f2bd1b.js │ │ ├── 44.21821da5.js │ │ ├── 45.187e7e97.js │ │ ├── 46.a3b08735.js │ │ ├── 47.abc5fa62.js │ │ ├── 48.ca6238e6.js │ │ ├── 49.018b7481.js │ │ ├── 5.56ae9307.js │ │ ├── 50.ba6f1f61.js │ │ ├── 51.7caf0e6a.js │ │ ├── 52.8ba0b88b.js │ │ ├── 53.093cf391.js │ │ ├── 54.efed8463.js │ │ ├── 55.a62573b2.js │ │ ├── 56.3e6f6d00.js │ │ ├── 57.888a1255.js │ │ ├── 58.96ed9197.js │ │ ├── 59.d7ed4539.js │ │ ├── 6.f78bc038.js │ │ ├── 60.98f10b81.js │ │ ├── 61.cb680b3e.js │ │ ├── 62.e3e0d9fb.js │ │ ├── 63.8729312f.js │ │ ├── 64.117c6ec8.js │ │ ├── 65.70fe6b66.js │ │ ├── 66.05ed3522.js │ │ ├── 67.ee4d8bcb.js │ │ ├── 68.1567c405.js │ │ ├── 69.2bbbb46b.js │ │ ├── 7.a6642a57.js │ │ ├── 70.0ba3dd6a.js │ │ ├── 71.7447693f.js │ │ ├── 72.d17d258e.js │ │ ├── 73.5991c526.js │ │ ├── 74.e3011a3d.js │ │ ├── 75.cb07ea91.js │ │ ├── 76.5b5dacce.js │ │ ├── 77.b09b9f2c.js │ │ ├── 78.692cbe69.js │ │ ├── 79.2bd9dc99.js │ │ ├── 8.4f7199ba.js │ │ ├── 80.e89bb783.js │ │ ├── 81.0b0c4edd.js │ │ ├── 82.4167bd77.js │ │ ├── 83.dc0d22be.js │ │ ├── 84.d3c6376f.js │ │ ├── 85.efc677c2.js │ │ ├── 86.945c5907.js │ │ ├── 87.d2b41d86.js │ │ ├── 88.2aa71ecb.js │ │ ├── 89.a32df441.js │ │ ├── 9.dd6b6182.js │ │ ├── 90.33b2557e.js │ │ ├── 91.1f8c8ac9.js │ │ ├── 92.9df8df57.js │ │ ├── 93.36da489b.js │ │ ├── 94.c36b6a4c.js │ │ ├── 95.e886e946.js │ │ ├── 96.ed0ca6a1.js │ │ ├── 97.2ce7ff96.js │ │ ├── 98.d0699989.js │ │ ├── 99.87ca4f74.js │ │ └── app.3cf40967.js ├── favicon.png ├── index.html ├── 二进制工具 │ ├── c++filt.html │ ├── hexdump.html │ ├── nm.html │ ├── objcopy.html │ ├── objdump.html │ ├── od.html │ ├── readelf.html │ ├── size.html │ ├── strings.html │ └── strip.html ├── 实用工具 │ ├── alias-builtin.html │ ├── bc.html │ ├── cal.html │ ├── date.html │ ├── fc-builtin.html │ ├── history-builtin.html │ ├── ln.html │ ├── seq.html │ ├── type-builtin.html │ ├── unalias-builtin.html │ └── yes.html ├── 帮助 │ ├── help-builtin.html │ ├── info.html │ ├── man.html │ └── whatis.html ├── 文件系统 │ ├── 打包与压缩 │ │ ├── bunzip2.html │ │ ├── bzip2.html │ │ ├── bzip2recover.html │ │ ├── gunzip.html │ │ ├── gzip.html │ │ ├── tar.html │ │ ├── unzip.html │ │ ├── zip.html │ │ └── zipinfo.html │ ├── 文件与目录查看 │ │ ├── basename.html │ │ ├── cksum.html │ │ ├── diff.html │ │ ├── dir.html │ │ ├── dirname.html │ │ ├── dirs-builtin.html │ │ ├── file.html │ │ ├── ls.html │ │ ├── md5sum.html │ │ ├── pwd.html │ │ ├── realpath.html │ │ ├── sha1sum.html │ │ ├── stat.html │ │ ├── sum.html │ │ └── tree.html │ ├── 文件与目录管理 │ │ ├── cd-builtin.html │ │ ├── cp.html │ │ ├── mkdir.html │ │ ├── mktemp.html │ │ ├── mv.html │ │ ├── rename.html │ │ ├── rm.html │ │ ├── rmdir.html │ │ ├── split.html │ │ ├── tee.html │ │ ├── touch.html │ │ └── truncate.html │ ├── 文件查找 │ │ ├── find.html │ │ ├── locate.html │ │ ├── whereis.html │ │ └── which.html │ ├── 文本查看 │ │ ├── cat.html │ │ ├── grep.html │ │ ├── head.html │ │ ├── less.html │ │ ├── more.html │ │ ├── nl.html │ │ ├── rev.html │ │ ├── tac.html │ │ ├── tail.html │ │ └── wc.html │ ├── 文本编辑 │ │ ├── awk.html │ │ ├── col.html │ │ ├── cut.html │ │ ├── expand.html │ │ ├── iconv.html │ │ ├── indent.html │ │ ├── join.html │ │ ├── paste.html │ │ ├── sed.html │ │ ├── sort.html │ │ ├── tr.html │ │ ├── uniq.html │ │ └── vim.html │ └── 磁盘管理 │ │ ├── df.html │ │ ├── du.html │ │ └── fdisk.html ├── 权限管理 │ ├── 权限控制 │ │ ├── chattr.html │ │ ├── chgrp.html │ │ ├── chmod.html │ │ ├── chown.html │ │ ├── getfacl.html │ │ ├── lsattr.html │ │ ├── setfacl.html │ │ ├── su.html │ │ ├── sudo.html │ │ ├── umask-builtin.html │ │ └── visudo.html │ ├── 用户管理 │ │ ├── ac.html │ │ ├── adduser.html │ │ ├── chage.html │ │ ├── id.html │ │ ├── last.html │ │ ├── lastb.html │ │ ├── lastlog.html │ │ ├── logname.html │ │ ├── passwd.html │ │ ├── useradd.html │ │ ├── userdel.html │ │ ├── usermod.html │ │ ├── users.html │ │ ├── w.html │ │ ├── who.html │ │ └── whoami.html │ └── 用户组管理 │ │ ├── gpasswd.html │ │ ├── groupadd.html │ │ ├── groupdel.html │ │ ├── groupmod.html │ │ ├── groups.html │ │ └── newgrp.html ├── 版本控制 │ ├── git.html │ └── svn.html ├── 系统管理 │ ├── 系统管理 │ │ ├── chkconfig.html │ │ ├── export-builtin.html │ │ ├── halt.html │ │ ├── init.html │ │ ├── ntsysv.html │ │ ├── poweroff.html │ │ ├── reboot.html │ │ ├── runlevel.html │ │ ├── service.html │ │ ├── shutdown.html │ │ └── systemctl.html │ ├── 系统观测 │ │ ├── dmesg.html │ │ ├── dnsdomainname.html │ │ ├── domainname.html │ │ ├── env.html │ │ ├── free.html │ │ ├── hostid.html │ │ ├── hostname.html │ │ ├── lscpu.html │ │ ├── printenv.html │ │ ├── uname.html │ │ └── uptime.html │ └── 索引维护 │ │ ├── mandb.html │ │ └── updatedb.html ├── 终端配置 │ ├── bind-builtin.html │ ├── consoletype.html │ ├── ctrlaltdel.html │ ├── reset.html │ ├── shopt-builtin.html │ ├── stty.html │ ├── tput.html │ └── tty.html ├── 编译调试 │ ├── ar.html │ ├── as.html │ ├── g++.html │ ├── gdb.html │ ├── ld.html │ ├── ldconfig.html │ └── ldd.html ├── 网络管理 │ ├── 网络传输 │ │ ├── curl.html │ │ ├── ftp.html │ │ ├── rz.html │ │ ├── scp.html │ │ ├── sz.html │ │ └── wget.html │ ├── 网络管理 │ │ ├── arp.html │ │ ├── arpd.html │ │ ├── arping.html │ │ ├── arpwatch.html │ │ ├── dhclient.html │ │ ├── dig.html │ │ ├── ethtool.html │ │ ├── host.html │ │ ├── ifcfg.html │ │ ├── ifconfig.html │ │ ├── ifdown.html │ │ ├── ifup.html │ │ ├── ip.html │ │ ├── ipcalc.html │ │ ├── iptables-restore.html │ │ ├── iptables-save.html │ │ ├── iptables.html │ │ ├── lnstat.html │ │ ├── mii-tool.html │ │ ├── ncat.html │ │ ├── netstat.html │ │ ├── nmap.html │ │ ├── nslookup.html │ │ ├── nstat.html │ │ ├── ping.html │ │ ├── route.html │ │ ├── ss.html │ │ ├── tcpdump.html │ │ ├── tracepath.html │ │ ├── traceroute.html │ │ └── usernetctl.html │ └── 远程登录 │ │ ├── ssh-add.html │ │ ├── ssh-agent.html │ │ ├── ssh-copy-id.html │ │ ├── ssh-keygen.html │ │ ├── ssh-keyscan.html │ │ ├── ssh.html │ │ ├── sshd.html │ │ └── telnet.html └── 进程管理 │ ├── 性能检测 │ ├── iostat.html │ ├── lsof.html │ ├── top.html │ ├── valgrind.html │ └── vmstat.html │ ├── 进程与作业管理 │ ├── at.html │ ├── atq.html │ ├── atrm.html │ ├── batch.html │ ├── bg-builtin.html │ ├── crontab.html │ ├── fg-builtin.html │ ├── ipcrm.html │ ├── ipcs.html │ ├── jobs-builtin.html │ ├── kill.html │ ├── killall.html │ ├── nice.html │ ├── nohup.html │ ├── pkill.html │ ├── renice.html │ ├── screen.html │ ├── skill.html │ ├── time.html │ ├── trap-builtin.html │ ├── ulimit-builtin.html │ ├── watch.html │ └── xargs.html │ └── 进程观测 │ ├── pgrep.html │ ├── pidof.html │ ├── pmap.html │ ├── ps.html │ ├── pstack.html │ ├── pstree.html │ └── strace.html ├── package-lock.json ├── package.json └── vuepress-docs ├── .vuepress ├── config.js └── public │ └── favicon.png ├── README.md ├── Shell编程 ├── builtin-builtin.md ├── command-builtin.md ├── declare-builtin.md ├── echo.md ├── enable-builtin.md ├── eval-builtin.md ├── exec-builtin.md ├── exit-builtin.md ├── expect.md ├── expr.md ├── let-builtin.md ├── printf.md ├── read-builtin.md ├── readonly-builtin.md ├── set-builtin.md ├── sleep.md ├── test.md ├── unset-builtin.md └── wait-builtin.md ├── assets └── imgs │ ├── expand │ ├── 1.png │ ├── 2.png │ ├── 3.png │ └── 4.png │ ├── logo.png │ └── logo.psd ├── 二进制工具 ├── c++filt.md ├── hexdump.md ├── nm.md ├── objcopy.md ├── objdump.md ├── od.md ├── readelf.md ├── size.md ├── strings.md └── strip.md ├── 实用工具 ├── alias-builtin.md ├── bc.md ├── cal.md ├── date.md ├── fc-builtin.md ├── history-builtin.md ├── ln.md ├── seq.md ├── type-builtin.md ├── unalias-builtin.md └── yes.md ├── 帮助 ├── help-builtin.md ├── info.md ├── man.md └── whatis.md ├── 文件系统 ├── 打包与压缩 │ ├── bunzip2.md │ ├── bzip2.md │ ├── bzip2recover.md │ ├── gunzip.md │ ├── gzip.md │ ├── tar.md │ ├── unzip.md │ ├── zip.md │ └── zipinfo.md ├── 文件与目录查看 │ ├── basename.md │ ├── cksum.md │ ├── diff.md │ ├── dir.md │ ├── dirname.md │ ├── dirs-builtin.md │ ├── file.md │ ├── ls.md │ ├── md5sum.md │ ├── pwd.md │ ├── realpath.md │ ├── sha1sum.md │ ├── stat.md │ ├── sum.md │ └── tree.md ├── 文件与目录管理 │ ├── cd-builtin.md │ ├── cp.md │ ├── mkdir.md │ ├── mktemp.md │ ├── mv.md │ ├── rename.md │ ├── rm.md │ ├── rmdir.md │ ├── split.md │ ├── tee.md │ ├── touch.md │ └── truncate.md ├── 文件查找 │ ├── find.md │ ├── locate.md │ ├── whereis.md │ └── which.md ├── 文本查看 │ ├── cat.md │ ├── grep.md │ ├── head.md │ ├── less.md │ ├── more.md │ ├── nl.md │ ├── rev.md │ ├── tac.md │ ├── tail.md │ └── wc.md ├── 文本编辑 │ ├── awk.md │ ├── col.md │ ├── cut.md │ ├── expand.md │ ├── iconv.md │ ├── indent.md │ ├── join.md │ ├── paste.md │ ├── sed.md │ ├── sort.md │ ├── tr.md │ ├── uniq.md │ └── vim.md └── 磁盘管理 │ ├── df.md │ ├── du.md │ └── fdisk.md ├── 权限管理 ├── 权限控制 │ ├── chattr.md │ ├── chgrp.md │ ├── chmod.md │ ├── chown.md │ ├── getfacl.md │ ├── lsattr.md │ ├── setfacl.md │ ├── su.md │ ├── sudo.md │ ├── umask-builtin.md │ └── visudo.md ├── 用户管理 │ ├── ac.md │ ├── adduser.md │ ├── chage.md │ ├── id.md │ ├── last.md │ ├── lastb.md │ ├── lastlog.md │ ├── logname.md │ ├── passwd.md │ ├── useradd.md │ ├── userdel.md │ ├── usermod.md │ ├── users.md │ ├── w.md │ ├── who.md │ └── whoami.md └── 用户组管理 │ ├── gpasswd.md │ ├── groupadd.md │ ├── groupdel.md │ ├── groupmod.md │ ├── groups.md │ └── newgrp.md ├── 版本控制 ├── git.md └── svn.md ├── 系统管理 ├── 系统管理 │ ├── chkconfig.md │ ├── export-builtin.md │ ├── halt.md │ ├── init.md │ ├── ntsysv.md │ ├── poweroff.md │ ├── reboot.md │ ├── runlevel.md │ ├── service.md │ ├── shutdown.md │ └── systemctl.md ├── 系统观测 │ ├── dmesg.md │ ├── dnsdomainname.md │ ├── domainname.md │ ├── env.md │ ├── free.md │ ├── hostid.md │ ├── hostname.md │ ├── lscpu.md │ ├── printenv.md │ ├── uname.md │ └── uptime.md └── 索引维护 │ ├── mandb.md │ └── updatedb.md ├── 终端配置 ├── bind-builtin.md ├── consoletype.md ├── ctrlaltdel.md ├── reset.md ├── shopt-builtin.md ├── stty.md ├── tput.md └── tty.md ├── 编译调试 ├── ar.md ├── as.md ├── g++.md ├── gdb.md ├── ld.md ├── ldconfig.md └── ldd.md ├── 网络管理 ├── 网络传输 │ ├── curl.md │ ├── ftp.md │ ├── rz.md │ ├── scp.md │ ├── sz.md │ └── wget.md ├── 网络管理 │ ├── arp.md │ ├── arpd.md │ ├── arping.md │ ├── arpwatch.md │ ├── dhclient.md │ ├── dig.md │ ├── ethtool.md │ ├── host.md │ ├── ifcfg.md │ ├── ifconfig.md │ ├── ifdown.md │ ├── ifup.md │ ├── ip.md │ ├── ipcalc.md │ ├── iptables-restore.md │ ├── iptables-save.md │ ├── iptables.md │ ├── lnstat.md │ ├── mii-tool.md │ ├── ncat.md │ ├── netstat.md │ ├── nmap.md │ ├── nslookup.md │ ├── nstat.md │ ├── ping.md │ ├── route.md │ ├── ss.md │ ├── tcpdump.md │ ├── tracepath.md │ ├── traceroute.md │ └── usernetctl.md └── 远程登录 │ ├── ssh-add.md │ ├── ssh-agent.md │ ├── ssh-copy-id.md │ ├── ssh-keygen.md │ ├── ssh-keyscan.md │ ├── ssh.md │ ├── sshd.md │ └── telnet.md └── 进程管理 ├── 性能检测 ├── iostat.md ├── lsof.md ├── top.md ├── valgrind.md └── vmstat.md ├── 进程与作业管理 ├── at.md ├── atq.md ├── atrm.md ├── batch.md ├── bg-builtin.md ├── crontab.md ├── fg-builtin.md ├── ipcrm.md ├── ipcs.md ├── jobs-builtin.md ├── kill.md ├── killall.md ├── nice.md ├── nohup.md ├── pkill.md ├── renice.md ├── screen.md ├── skill.md ├── time.md ├── trap-builtin.md ├── ulimit-builtin.md ├── watch.md └── xargs.md └── 进程观测 ├── pgrep.md ├── pidof.md ├── pmap.md ├── ps.md ├── pstack.md ├── pstree.md └── strace.md /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: deploy 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | pull_request: 7 | branches: [ "main" ] 8 | 9 | jobs: 10 | build-and-deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v3 15 | 16 | - name: Setup Node 17 | uses: actions/setup-node@v3 18 | with: 19 | node-version: 16 20 | 21 | - name: Install dependent node pkgs 22 | run: npm install 23 | 24 | - name: Build 25 | run: chmod +x ./build.sh && ./build.sh 26 | 27 | - name: Commit and push 28 | run: |- 29 | git config --global user.email "lovelvqingqing@gmail.com" 30 | git config --global user.name "Dable Lv" 31 | git add -A 32 | git commit -m "build:auto build and deploy" 33 | git push 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vscode 3 | node_modules -------------------------------------------------------------------------------- /GUIDE.md: -------------------------------------------------------------------------------- 1 | # 前置依赖 2 | ## 安装 Node.js 3 | 4 | vuepress 基于 Node.js,所以需要先安装 Node.js 环境。安装版本为 v16.x.x,比如 Node.js 16.20.0。 5 | 6 | 注意,如果安装过高的版本将报如下错误: 7 | ``` 8 | Error: error:0308010C:digital envelope routines::unsupported 9 | ``` 10 | 11 | ## 安装依赖包 12 | 13 | 如果本地未安装依赖的 node 包,需要先执行 npm install 安装依赖,会自动放到当前 node_modules 目录下。 14 | 15 | # 本地预览 16 | 17 | 执行 npm run docs:dev 进行本地预览。 18 | 19 | # 发布到 Github 20 | 21 | 执行 build.sh。 22 | 23 | 然后使用 git 将变更推送到远端仓库。 24 | 25 | 自动构建发布,请参见 Github Action 脚本 .github/workflows/deploy.yml。 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![这里写图片描述](vuepress-docs/assets/imgs/logo.png) 2 | 3 | ## 本书由来 4 | Linux 命令是用户与系统交互的主要手段之一,是 Linux 后台开发与运维从业者的必备技能。 5 | 6 | Linux 命令分两类,Shell 内建命令和 Linux 命令。学习掌握常用的 Linux 命令,在求职应聘和日常工作中,都会给我们带来很大的帮助。当然,熟练使用 Linux 命令,也有助于我们进一步理解 Linux 系统的方方面面,比如资源管理、文件系统、网络通信等。 7 | 8 | 本人根据自己多年的后台开发工作经验,记录了后台开发可能用到的命令,供同行参阅。 9 | 10 | 分享这些命令的初衷有两点: 11 | - 作为个人学习笔记,以备日常工作需要时查阅; 12 | - 网络和市面上已经有很多关于 Linux 命令的文章和书籍,但是因为命令选项介绍的不够齐全或者是示例不够丰富,所以自己整理记录下命令的选项说明和常见用例,以飨读者。 13 | 14 | 希望本书[《后台开发命令365》](https://dablelv.github.io/backend-cmd/)能够帮助到大家。 15 | 16 | ## 内容简介 17 | 18 | 本书是一个偏手册类的读物,但相对于原始的英文手册,表达更加直白,并且给出了很多原手册没有的实例,能够帮助大家更方便地掌握命令的使用。大家在阅读命令手册时,可将本书作为一个补充的学习资料。 19 | 20 | 因为工作性质的原因,本书主要收录后台开发工作中可能用到的命令,偏运维的命令可能不会涉及太多。本书仍在不断完善更新,若为常用,后续也会更新进来。 21 | 22 | 在命令表达形式上,遵守如下几个规则: 23 | ``` 24 | FILE:大写的内容为待替换内容(优先使用) 25 | :被尖括号括起的内容为待替换内容 26 | [-abc]:中括号内的选项或内容是可选的 27 | -a|-b:被 | 分隔的选项是多选一,不能一起使用 28 | ...:三个点号表示重复 29 | ``` 30 | 31 | 注意,所有命令示例均通过 [Bash](https://baike.baidu.com/item/bash/6367661?fr=aladdin)(Bourne Again Shell) 解释完成,其他版本的 Shell 在命令选项上可能会有出入,不过大同小异。 32 | 33 | ## 目标读者 34 | 35 | 本书虽然主要收录后台开发工作中可能用到的命令,但是作为 Linux 从业者、Linux 运维人员和 Linux 学习爱好者等都可能会用到其中的命令。所以本书适合但不限于如下读者: 36 | 37 | - Linux 后台开发人员 38 | - Linux 从业者 39 | - Linux 运维人员 40 | - Linux 学习爱好者 41 | 42 | ## 互动勘误 43 | 44 | 如果您对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。 45 | 46 | 本书为开源书籍,希望得到大家的协同共建,迭代丰富。如果有您的建议和 PR,它将会变得更好。 47 | 48 | --- 49 | 50 |

51 | CC BY-NC 4.0 Licensed | Copyright © 2023-present 恋喵大鲤鱼 52 |

53 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 请提前使用 npm install 安装依赖的包,会自动放到当前 node_modules 目录下。 4 | 5 | # 脚本出错立即退出 6 | set -e 7 | 8 | # 生成静态文件,目录为 vuepress-docs/.vuepress/dist 9 | npm run docs:build 10 | 11 | rm -rf docs 12 | 13 | mv vuepress-docs/.vuepress/dist docs -------------------------------------------------------------------------------- /docs/assets/img/logo.f2af9864.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/docs/assets/img/logo.f2af9864.png -------------------------------------------------------------------------------- /docs/assets/img/search.83621669.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/assets/js/136.4fade977.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[136],{470:function(a,t,s){"use strict";s.r(t);var e=s(12),r=Object(e.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h2",{attrs:{id:"_1-命令简介"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[a._v("#")]),a._v(" 1.命令简介")]),a._v(" "),t("p",[a._v("logname 打印当前用户的登录名。")]),a._v(" "),t("h2",{attrs:{id:"_2-命令格式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[a._v("#")]),a._v(" 2.命令格式")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("logname [OPTION]\n")])])]),t("h2",{attrs:{id:"_3-选项说明"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[a._v("#")]),a._v(" 3.选项说明")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("--help\n\t显示帮助信息然后退出。\n--version\n\t显示版本信息然后退出。\n")])])]),t("h2",{attrs:{id:"_4-常用示例"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[a._v("#")]),a._v(" 4.常用示例")]),a._v(" "),t("p",[a._v("显示当前用户登录名。")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("logname\nroot\n")])])]),t("hr"),a._v(" "),t("h2",{attrs:{id:"参考文献"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[a._v("#")]),a._v(" 参考文献")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://man7.org/linux/man-pages/man1/logname.1.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("logname(1) - Linux manual page - man7.org"),t("OutboundLink")],1)]),a._v(" "),t("Vssue",{attrs:{title:"logname"}})],1)}),[],!1,null,null,null);t.default=r.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/141.b15c1fd4.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[141],{475:function(t,s,a){"use strict";a.r(s);var r=a(12),e=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"_1-命令简介"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[t._v("#")]),t._v(" 1.命令简介")]),t._v(" "),s("p",[t._v("users 打印当前登录的用户名列表。")]),t._v(" "),s("p",[t._v("每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将重复显示对应的次数。")]),t._v(" "),s("h2",{attrs:{id:"_2-命令格式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[t._v("#")]),t._v(" 2.命令格式")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("users")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("OPTION"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v(". "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("FILE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("h2",{attrs:{id:"_3-选项说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[t._v("#")]),t._v(" 3.选项说明")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("--help\n\t显示此帮助信息并退出。\n--version\n\t显示版本信息并退出。\n")])])]),s("h2",{attrs:{id:"_4-常用示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[t._v("#")]),t._v(" 4.常用示例")]),t._v(" "),s("p",[t._v("显示系统当前登录的用户名。")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("users")]),t._v("\nroot root root\n")])])]),s("hr"),t._v(" "),s("h2",{attrs:{id:"参考文献"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[t._v("#")]),t._v(" 参考文献")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://man7.org/linux/man-pages/man1/users.1.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("users(1) — Linux manual page - man7.org"),s("OutboundLink")],1)]),t._v(" "),s("Vssue",{attrs:{title:"users"}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/147.0f874d0f.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[147],{481:function(t,a,e){"use strict";e.r(a);var s=e(12),r=Object(s.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"_1-命令简介"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[t._v("#")]),t._v(" 1.命令简介")]),t._v(" "),a("p",[t._v("groupdel(group delete)命令是系统管理员命令,用于删除一个组。")]),t._v(" "),a("p",[t._v("groupdel 命令用于删除指定的工作组,本命令要修改的系统文件包括 /ect/group 和 /ect/gshadow。")]),t._v(" "),a("h2",{attrs:{id:"_2-命令格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[t._v("#")]),t._v(" 2.命令格式")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("groupdel [OPTIONS] GROUP\n")])])]),a("h2",{attrs:{id:"_3-常用选项"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-常用选项"}},[t._v("#")]),t._v(" 3.常用选项")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("-h, --help\n \t显示此帮助信息并推出\n")])])]),a("h2",{attrs:{id:"_4-常用示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[t._v("#")]),t._v(" 4.常用示例")]),t._v(" "),a("p",[t._v("(1)删除用户组")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("groupdel g1\n")])])]),a("p",[t._v("(2)查看帮助信息。")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("groupdel -h\n")])])]),a("hr"),t._v(" "),a("h2",{attrs:{id:"参考文献"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[t._v("#")]),t._v(" 参考文献")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://linux.die.net/man/8/groupdel",target:"_blank",rel:"noopener noreferrer"}},[t._v("groupdel(8) manual"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("CSDN.【Linux】一步一步学Linux——groupdel命令(88)](https://blog.csdn.net/dengjin20104042056/article/details/98095658)")]),t._v(" "),a("Vssue",{attrs:{title:"groupdel"}})],1)}),[],!1,null,null,null);a.default=r.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/150.f0ac16a7.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[150],{483:function(t,a,s){"use strict";s.r(a);var e=s(12),r=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"_1-命令简介"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[t._v("#")]),t._v(" 1.命令简介")]),t._v(" "),a("p",[t._v("newgrp(new group)登录到一个新组。")]),t._v(" "),a("p",[t._v("newgrp 将当前的实际组 ID 更改为指定的组,如果没有给出组名,则更改为 /etc/passwd 中列出的默认组。")]),t._v(" "),a("p",[t._v("newgrp 类似 login 指令,但它是以相同的帐号,另一个组名,再次登入系统。欲使用 newgrp 切换群组,用户必须是该群组的用户,否则将无法登入指定的群组。")]),t._v(" "),a("h2",{attrs:{id:"_2-命令格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[t._v("#")]),t._v(" 2.命令格式")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("newgrp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("-"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("GROUP"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),a("h2",{attrs:{id:"_3-选项说明"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[t._v("#")]),t._v(" 3.选项说明")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("-\n\t如果给出该选项,则用户的环境将被重新初始化,就像用户已登录一样。否则,当前环境(包括当前工作目录)保持不变。\n")])])]),a("h2",{attrs:{id:"_4-常用示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[t._v("#")]),t._v(" 4.常用示例")]),t._v(" "),a("p",[t._v("将群组切换到 test 组。")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("newgrp test\n")])])]),a("hr"),t._v(" "),a("h2",{attrs:{id:"参考文献"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[t._v("#")]),t._v(" 参考文献")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://man7.org/linux/man-pages/man1/newgrp.1.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("newgrp(1) - Linux manual page - man7.org"),a("OutboundLink")],1)]),t._v(" "),a("Vssue",{attrs:{title:"newgrp"}})],1)}),[],!1,null,null,null);a.default=r.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/208.abbbc67c.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[208],{542:function(t,s,a){"use strict";a.r(s);var r=a(12),e=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"_1-命令简介"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[t._v("#")]),t._v(" 1.命令简介")]),t._v(" "),s("p",[t._v("ifdown 关闭网络接口。")]),t._v(" "),s("p",[t._v("该命令会去读取 /etc/sysconfig/network-scripts/ 目录下的相关网络接口的配置文件,并根据配置文件的内容来关闭该网络接口。")]),t._v(" "),s("p",[t._v("注意:网络接口名称必须是 /etc/sysconfig/network-scripts/ 目录配置文件中设置的才可以。如果使用 ifconfig 命令改变了网络接口后,ifdown 命令就不会识别了。因为 ifdown 命令会对比当前网络的参数与 /etc/sysconfig/network-scripts/ 中配置文件的内容是否相符。")]),t._v(" "),s("h2",{attrs:{id:"_2-命令格式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[t._v("#")]),t._v(" 2.命令格式")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifdown")]),t._v(" CONFIG\n")])])]),s("h2",{attrs:{id:"_3-选项说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[t._v("#")]),t._v(" 3.选项说明")]),t._v(" "),s("p",[t._v("无。")]),t._v(" "),s("h2",{attrs:{id:"_4-常用示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[t._v("#")]),t._v(" 4.常用示例")]),t._v(" "),s("p",[t._v("禁用网络接口 ens33。")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifdown")]),t._v(" ens33\n")])])]),s("hr"),t._v(" "),s("h2",{attrs:{id:"参考文献"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[t._v("#")]),t._v(" 参考文献")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://www.linux.org/docs/man8/ifdown.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("ifdown(8) manual - linux.org"),s("OutboundLink")],1)]),t._v(" "),s("Vssue",{attrs:{title:"ifdown"}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/209.cf0fe9e0.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[209],{543:function(t,s,a){"use strict";a.r(s);var r=a(12),e=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"_1-命令简介"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[t._v("#")]),t._v(" 1.命令简介")]),t._v(" "),s("p",[t._v("ifup 启动网络接口。")]),t._v(" "),s("p",[t._v("ifup 命令用于激活指定的网络接口。ifup 命令会去读取 /etc/sysconfig/network-scripts/ 目录下的相关网络接口的配置文件,并根据配置文件的内容来激活该网络接口。")]),t._v(" "),s("p",[t._v("注意:网络接口名称必须是 /etc/sysconfig/network-scripts/ 目录配置文件中设置的才可以。如果使用 ifconfig 命令改变了网络接口后,ifup 命令就不会识别了。因为 ifup 命令会对比当前网络的参数与 /etc/sysconfig/network-scripts/ 中配置文件的内容是否相符。")]),t._v(" "),s("h2",{attrs:{id:"_2-命令格式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[t._v("#")]),t._v(" 2.命令格式")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifup")]),t._v(" CONFIG "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("boot"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("p",[t._v("CONFIG 为网络接口名。如果后跟可选字符串 boot 表明系统启动时不激活该网卡。")]),t._v(" "),s("h2",{attrs:{id:"_3-选项说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[t._v("#")]),t._v(" 3.选项说明")]),t._v(" "),s("p",[t._v("无。")]),t._v(" "),s("h2",{attrs:{id:"_4-常用示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[t._v("#")]),t._v(" 4.常用示例")]),t._v(" "),s("p",[t._v("启动网卡 eth0。")]),t._v(" "),s("div",{staticClass:"language-shell extra-class"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifup")]),t._v(" eth0\n")])])]),s("hr"),t._v(" "),s("h2",{attrs:{id:"参考文献"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[t._v("#")]),t._v(" 参考文献")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://www.linux.org/docs/man8/ifup.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("ifup(8) manual - linux.org"),s("OutboundLink")],1)]),t._v(" "),s("Vssue",{attrs:{title:"ifup"}})],1)}),[],!1,null,null,null);s.default=e.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/228.a01b83bf.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[228],{561:function(t,a,s){"use strict";s.r(a);var e=s(12),r=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"_1-命令简介"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[t._v("#")]),t._v(" 1.命令简介")]),t._v(" "),a("p",[t._v("usernetctl 用于被允许时操作指定的网络接口。")]),t._v(" "),a("p",[t._v("在使用上和 ifup 、ifdown 命令有些类似。")]),t._v(" "),a("h2",{attrs:{id:"_2-命令格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[t._v("#")]),t._v(" 2.命令格式")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("usernetctl up|down|report\n")])])]),a("h2",{attrs:{id:"_3-选项说明"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[t._v("#")]),t._v(" 3.选项说明")]),t._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("up\n\t激活网络接口。\ndown\n\t禁用网络接口。\nreport\n\t报告用户是否可以打开或关闭网络接口。\n")])])]),a("h2",{attrs:{id:"_4-常用示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[t._v("#")]),t._v(" 4.常用示例")]),t._v(" "),a("p",[t._v("(1)激活网卡。")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("usernetctl ens33 up\n")])])]),a("p",[t._v("(2)禁用网卡。")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("usernetctl ens33 down\n")])])]),a("p",[t._v("(3)报告网卡状态。")]),t._v(" "),a("div",{staticClass:"language-shell extra-class"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[t._v("usernetctl ens33 report\n")])])]),a("hr"),t._v(" "),a("h2",{attrs:{id:"参考文献"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[t._v("#")]),t._v(" 参考文献")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://www.linux.org/docs/man8/usernetctl.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("usernetctl(8) manual - linux.org"),a("OutboundLink")],1)]),t._v(" "),a("Vssue",{attrs:{title:"usernetctl"}})],1)}),[],!1,null,null,null);a.default=r.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/4.572e4cdf.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[4],{310:function(t,e,n){},334:function(t,e,n){"use strict";n(310)},606:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(334),n(12)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/47.abc5fa62.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[47],{380:function(a,s,t){"use strict";t.r(s);var e=t(12),r=Object(e.a)({},(function(){var a=this,s=a._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[s("h2",{attrs:{id:"_1-命令简介"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-命令简介"}},[a._v("#")]),a._v(" 1.命令简介")]),a._v(" "),s("p",[a._v("unalias 为 Bash 内建命令,用来删除命令别名。")]),a._v(" "),s("h2",{attrs:{id:"_2-命令格式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-命令格式"}},[a._v("#")]),a._v(" 2.命令格式")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("alias [-a] [NAME...]\n")])])]),s("p",[a._v("如果使用 -a 选项,则表示取消所有已经存在的命令别名。如果需要取消任意一个命令别名,则使用该命令别名作为指令的参数即可。")]),a._v(" "),s("h2",{attrs:{id:"_3-选项说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-选项说明"}},[a._v("#")]),a._v(" 3.选项说明")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("-a 删除所有的别名定义\n")])])]),s("h2",{attrs:{id:"_4-常用示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-常用示例"}},[a._v("#")]),a._v(" 4.常用示例")]),a._v(" "),s("p",[a._v("(1)删除指定别名。")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("# 先查看别名 ls\nalias ls\nalias ls='ls --color=auto'\n\n# 删除别名 ls\nunalias ls\n\n# 再查看别名 ls,无法找到别名,表示删除成功\nalias ls\n-bash: alias: ls: not found\n")])])]),s("p",[a._v("(2)删除所有别名。")]),a._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[a._v("unalias -a\n")])])]),s("p",[a._v("删除后的别名将无法使用,请谨慎操作。")]),a._v(" "),s("hr"),a._v(" "),s("h2",{attrs:{id:"参考文献"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#参考文献"}},[a._v("#")]),a._v(" 参考文献")]),a._v(" "),s("p",[s("a",{attrs:{href:"https://www.man7.org/linux/man-pages/man1/bash.1.html",target:"_blank",rel:"noopener noreferrer"}},[a._v("bash(1) - Linux manual page - man7.org"),s("OutboundLink")],1)]),a._v(" "),s("Vssue",{attrs:{title:"unalias-builtin"}})],1)}),[],!1,null,null,null);s.default=r.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/5.56ae9307.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[5],{311:function(t,e,a){},335:function(t,e,a){"use strict";a(311)},339:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(335),a(12)),n=Object(i.a)(s,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=n.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/6.f78bc038.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[6],{312:function(e,t,a){},336:function(e,t,a){"use strict";a(312)},340:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(336),a(12)),c=Object(s.a)(o,(function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"deefee04",null);t.default=c.exports}}]); -------------------------------------------------------------------------------- /docs/assets/js/8.4f7199ba.js: -------------------------------------------------------------------------------- 1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[8],{338:function(t,e,s){"use strict";s.r(e);const o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."];var n={methods:{getMsg:()=>o[Math.floor(Math.random()*o.length)]}},h=s(12),i=Object(h.a)(n,(function(){var t=this._self._c;return t("div",{staticClass:"theme-container"},[t("div",{staticClass:"theme-default-content"},[t("h1",[this._v("404")]),this._v(" "),t("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),t("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=i.exports}}]); -------------------------------------------------------------------------------- /docs/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/docs/favicon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vuepress", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "docs:dev": "vuepress dev vuepress-docs", 8 | "docs:build": "vuepress build vuepress-docs" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "vuepress": "^1.9.9", 14 | "vuepress-plugin-right-anchor": "^0.5.5" 15 | }, 16 | "dependencies": { 17 | "@vssue/api-github-v3": "^1.4.7", 18 | "@vssue/vuepress-plugin-vssue": "^1.4.8" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vuepress-docs/.vuepress/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/.vuepress/public/favicon.png -------------------------------------------------------------------------------- /vuepress-docs/README.md: -------------------------------------------------------------------------------- 1 | ![这里写图片描述](./assets/imgs/logo.png) 2 | 3 | ## 本书由来 4 | Linux 命令是用户与系统交互的主要手段之一,是 Linux 后台开发与运维从业者的必备技能。 5 | 6 | Linux 命令分两类,Shell 内建命令和 Linux 命令。学习掌握常用的 Linux 命令,在求职应聘和日常工作中,都会给我们带来很大的帮助。当然,熟练使用 Linux 命令,也有助于我们进一步理解 Linux 系统的方方面面,比如资源管理、文件系统、网络通信等。 7 | 8 | 本人根据自己多年的后台开发工作经验,记录了后台开发可能用到的命令,供同行参阅。 9 | 10 | 分享这些命令的初衷有两点: 11 | - 作为个人学习笔记,以备日常工作需要时查阅; 12 | - 网络和市面上已经有很多关于 Linux 命令的文章和书籍,但是因为命令选项介绍的不够齐全或者是示例不够丰富,所以自己整理记录下命令的选项说明和常见用例,以飨读者。 13 | 14 | 希望本书[《后台开发命令365》](https://dablelv.github.io/backend-cmd/)能够帮助到大家。 15 | 16 | ## 内容简介 17 | 18 | 本书是一个偏手册类的读物,但相对于原始的英文手册,表达更加直白,并且给出了很多原手册没有的实例,能够帮助大家更方便地掌握命令的使用。大家在阅读命令手册时,可将本书作为一个补充的学习资料。 19 | 20 | 因为工作性质的原因,本书主要收录后台开发工作中可能用到的命令,偏运维的命令可能不会涉及太多。本书仍在不断完善更新,若为常用,后续也会更新进来。 21 | 22 | 在命令表达形式上,遵守如下几个规则: 23 | ``` 24 | FILE:大写的内容为待替换内容(优先使用) 25 | :被尖括号括起的内容为待替换内容 26 | [-abc]:中括号内的选项或内容是可选的 27 | -a|-b:被 | 分隔的选项是多选一,不能一起使用 28 | ...:三个点号表示重复 29 | ``` 30 | 31 | 注意,所有命令示例均通过 [Bash](https://baike.baidu.com/item/bash/6367661?fr=aladdin)(Bourne Again Shell) 解释完成,其他版本的 Shell 在命令选项上可能会有出入,不过大同小异。 32 | 33 | ## 目标读者 34 | 35 | 本书虽然主要收录后台开发工作中可能用到的命令,但是作为 Linux 从业者、Linux 运维人员和 Linux 学习爱好者等都可能会用到其中的命令。所以本书适合但不限于如下读者: 36 | 37 | - Linux 后台开发人员 38 | - Linux 从业者 39 | - Linux 运维人员 40 | - Linux 学习爱好者 41 | 42 | ## 互动勘误 43 | 44 | 如果您对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。 45 | 46 | 本书为开源书籍,希望得到大家的协同共建,迭代丰富。如果有您的建议和 PR,它将会变得更好。 47 | 48 | --- 49 | 50 |

51 | CC BY-NC 4.0 Licensed | Copyright © 2023-present 恋喵大鲤鱼 52 |

53 | 54 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/builtin-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | builtin 执行指定的 Shell 内置程序,传递参数,并返回其退出状态。 3 | 4 | 这在定义一个名称与 Shell 内置命令相同的函数时非常有用,可以在函数内通过 builtin 使用内置命令。 5 | 6 | builtin 命令用以执行 Shell 内建命令,既然是内建命令,为什么还要以这种方式执行呢? 7 | 8 | 这和 Shell 命令的搜索顺序有关: 9 | 1. 别名,使用 alias 创建的命令。 10 | 2. 关键字,如 if,for。 11 | 3. 函数 12 | 4. 内置命令,如cd,pwd等 13 | 5. 外部命令,在PATH路径中寻找 14 | 15 | 因为 Shell 命令执行时函数优先于内建命令,如果自定义了一个与内建命令同名的函数,那么会执行这个函数而非真正的内建命令。 16 | 17 | 虽然使用 builtin 可以显示执行内部命令而非同名函数,但是在编写 Shell 函数时,还是建议尽可能避免同名,提高代码可读性。 18 | 19 | ## 2.命令格式 20 | ```shell 21 | builtin shell-builtin [arguments] 22 | ``` 23 | ## 3.选项说明 24 | 无。 25 | 26 | ## 4.返回值 27 | 如果给定的命令不是 Shell 内置命令,则返回状态为 false。 28 | 29 | 其他情况返回内置命令的退出状态。 30 | 31 | ## 5.常用示例 32 | (1)执行 Shell 内部命令。 33 | 34 | ```shell 35 | builtin alias 36 | alias egrep='egrep --color=auto' 37 | alias fgrep='fgrep --color=auto' 38 | alias grep='grep --color=auto' 39 | alias l.='ls -d .* --color=auto' 40 | alias ll='ls -l --color=auto' 41 | alias ls='ls --color=auto' 42 | alias vi='vim' 43 | alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 44 | ``` 45 | 46 | (2)执行内建命令 echo。 47 | 48 | 先使用 type 命令看下 echo 有哪些类型。 49 | ```shell 50 | type -a echo 51 | echo is a shell builtin 52 | echo is /usr/bin/echo 53 | ``` 54 | 然后使用 builtin 执行内建命令 echo。 55 | 56 | ```shell 57 | builtin echo "hello world" 58 | hello world 59 | ``` 60 | 61 | (3)执行 Shell 内建命令,而不是与之同名的函数。 62 | 63 | 以 umask 命令为例。 64 | 65 | ```shell 66 | umask 67 | 0002 68 | 69 | function umask() { echo "This is umask function"; } 70 | umask 71 | This is umask function 72 | ``` 73 | 74 | 要想执行内置命令 umask,可以使用 builtin。 75 | 76 | ```shell 77 | builtin umask 78 | 0002 79 | ``` 80 | 81 | --- 82 | ## 参考文献 83 | [builtin(1) - Linux manual page - linux.org](https://www.linux.org/docs/man1/builtin.html) 84 | 85 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/command-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | command 用于运行指定命令,以抑制正常的 Shell 函数查找。仅执行内置命令或 PATH 中的命令。 3 | 4 | ## 2.命令格式 5 | ```shell 6 | command [-pVv] COMMAND [ARG ...] 7 | ``` 8 | ## 3.选项说明 9 | ```shell 10 | -p 使用 PATH 变量的一个默认值以确保所有的标准工具都能被找到。 11 | -v 打印最终调用的命令。如 command -v vim 打印 /usr/bin/vim。 12 | -V 打印每个 COMMAND 命令的详细描述,和 type 内置命令相似。如 command -V vim 打印 "vim is /usr/bin/vim"。 13 | ``` 14 | ## 4.返回值 15 | 成功返回 0。 16 | 17 | 提供了无效选项返回 2。 18 | 19 | 未找到命令返回 127。 20 | 21 | ## 5.常用示例 22 | (1)调用命令而不是同名的函数。 23 | 24 | 假设有一个与 echo 同名的函数。 25 | 26 | ```shell 27 | function echo() { builtin echo "This is echo function"; } 28 | 29 | echo 30 | This is echo function 31 | ``` 32 | 如果想调用 echo 命令而不是与之同名的 echo 函数,可以使用 command 来调用。 33 | 34 | ```shell 35 | command echo "hello world" 36 | hello world 37 | ``` 38 | 39 | (2)查看最终调用的是哪个命令。 40 | 41 | ```shell 42 | command -v pwd 43 | pwd 44 | ``` 45 | 46 | (3)查看命令的类型。 47 | 48 | ```shell 49 | command -V pwd 50 | pwd is a shell builtin 51 | ``` 52 | 53 | --- 54 | ## 参考文献 55 | [command(1) - Linux manual page - linux.org](https://www.linux.org/docs/man1/command.html) 56 | 57 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/declare-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.功能简介 2 | declare 设置变量值和属性。 3 | 4 | declare(别名 typeset)属 Shell 内建命令,用于申明 Shell 变量并设置变量属性,或查看已定义的 Shell 变量和函数。若不加上任何参数,只执行 declare/typeset 则会显示全部的 Shell 变量与函数(与执行 set 指令的效果相同)。 5 | 6 | ## 2.命令格式 7 | ``` 8 | declare [-aAfFgilrtux] [-p] [name[=value] ...] 9 | typeset [-aAfFgilrtux] [-p] [name[=value] ...] 10 | ``` 11 | 12 | ## 3.选项说明 13 | ``` 14 | -a 15 | 申明数组变量 16 | -A 17 | 申明关联数组,可以使用字符串作为数组索引 18 | -f 19 | 仅显示已定义的函数 20 | -F 21 | 不显示函数定义 22 | -g 23 | 指定变量为全局变量,即使在函数内定义变量 24 | -i 25 | 声明整型变量 26 | -l 27 | 将变量值的大写字母变为小写 28 | -r 29 | 设置只读属性 30 | -t 31 | 设置变量跟踪属性,用于跟踪函数进行调试,对于变量没有特殊意义 32 | -u 33 | 变量值的小写字母变为大写 34 | -x 35 | 将指定的Shell变量换成环境变量 36 | -p 37 | 显示变量定义的方式和值 38 | + 39 | 取消变量属性,但是 +a 和 +r 无效,无法删除数组和只读属性,可以使用unset删除数组,但是 unset 不能删除只读变量 40 | ``` 41 | 42 | ## 4.常用示例 43 | (1)定义关联数组并访问。 44 | ```shell 45 | declare -A assArray=([lucy]=beijing [yoona]=shanghai) 46 | 47 | #读取关联数组全部内容 48 | echo ${assArray[*]} 49 | #或 50 | echo ${assArray[@]} 51 | #输出 52 | beijing shanghai 53 | 54 | #读取指定索引的数组值 55 | echo ${assArray[lucy]} 56 | #输出 57 | beijing 58 | 59 | #列出数组索引列表 60 | echo ${!assArray[*]} 61 | #或 62 | echo ${!assArray[@]} 63 | #输出 64 | yoona lucy 65 | ``` 66 | (2)定义只读变量。 67 | ```shell 68 | declare -r name="foo" 69 | # 或 70 | typeset -r name="bar" 71 | # 或 72 | readonly name="baz" 73 | ``` 74 | Shell 规定,只读变量生命周期与当前 Shell 脚本进程相同,且不能消除只读属性和删除只读变量,除非 kill 当前 Shell 脚本进程。 75 | 76 | (3)使用`-p`选项显示变量 name1 和 name2 的定义方式和当前值。 77 | ```shell 78 | declare -p name1 name2 79 | # 输出 80 | declare -r name1="lvlv1" 81 | declare -r name2="lvlv2" 82 | ``` 83 | (4)使用`-x`选项将shell变量转换为临时环境变量,供当前Shell会话的其他shell进程使用,退出当前Shell会话则失效。 84 | ```shell 85 | declare -x name1; 86 | ``` 87 | (5)显示所有 Shell 环境变量。 88 | ```shell 89 | declare -x 90 | ``` 91 | (6)使用`+x`选项取消变量为环境变量。 92 | ```shell 93 | delcare +x name1 94 | ``` 95 | (7)申明整型变量,赋值浮点型数值将报错。 96 | ```shell 97 | declare -i integer=666 98 | ``` 99 | --- 100 | 101 | ## 参考文献 102 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 103 | 104 | [declare(1) manual - linux.org](https://www.linux.org/docs/man1/declare.html) 105 | 106 | [Shell数组与关联数组](http://blog.csdn.net/sunnyyoona/article/details/51526312) 107 | 108 | Linux指令范例速查手册.马玉军.北京:科学出版社,2008.P178-P183 109 | 110 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/echo.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | echo 显示一行文本。 3 | 4 | echo 可用于打印 Shell 变量的值或直接输出指定字符串。 5 | 6 | ## 2.命令格式 7 | ``` 8 | echo [SHORT-OPTION]... [STRING]... 9 | echo LONG-OPTION 10 | ``` 11 | 12 | ## 3.选项说明 13 | ``` 14 | -n 15 | 输出时不在行尾添加换行符。 16 | -e 17 | 使反斜杠的转义功能生效。 18 | -E 19 | 禁用反斜杠的转义功能,为默认选项。 20 | --help 21 | 显示帮助信息并退出。 22 | --version 23 | 显示版本信息并退出。 24 | ``` 25 | 使用 -e 选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出: 26 | ``` 27 | \\:反斜杠; 28 | \a:发出警告声; 29 | \b:删除前一个字符; 30 | \c:截断不输出\c后面的内容; 31 | \f:换行,但光标仍旧停留在原来的位置; 32 | \n:换行且光标移至行首; 33 | \r:光标移至行首,但不换行; 34 | \t:插入tab; 35 | \v:与\f相同; 36 | \nnn:插入nnn(八进制)所代表的ASCII字符; 37 | \xHH:插入HH(十六进制)所代表的ASCII字符; 38 | ``` 39 | 40 | ## 4.常用示例 41 | (1)不换行输出。 42 | 43 | echo 默认换行输出,使echo不换行输出有两种方法。 44 | 45 | **方法一:** 使用命令选项-n禁止输出换行符。 46 | ``` 47 | echo -n what you want to output 48 | ``` 49 | **方法二:** 使用命令选项 -e 让 echo 识别转义字符 \c,echo 默认是不识别转义字符的。转义字符 \c 使用 man echo 查看 echo 的使用手册,其意思是 produce no further output,表示截断不输出 \c 后面的内容。 50 | ```shell 51 | echo -e lalalala\cend # 输出:lalalala 52 | ``` 53 | (2)使用 echo 打印带有颜色的字体。 54 | 55 | Linux 终端下输出带颜色的文字只需在文字前面添加如下格式: 56 | ``` 57 | \033[显示方式;前景色;背景色m 58 | ``` 59 | 其中 \033 是 ESC 健的八进制,`\033[`即告诉终端后面是设置颜色的参数,显示方式,前景色,背景色均是数字。 60 | 61 | 数字含义如下: 62 | |显示方式|意义| 63 | |---|---| 64 | |0|终端默认设置| 65 | |1|高亮显示| 66 | |4|使用下划线| 67 | |5|闪烁| 68 | |7|反白显示| 69 | |8|不可见| 70 | 71 | 颜色数字代号如下: 72 | 73 | |前景色|背景色|颜色| 74 | |---|---|---| 75 | |30|40|黑色| 76 | |31|41|红色| 77 | |32|42|绿色| 78 | |33|43|黃色| 79 | |34|44|蓝色| 80 | |35|45|紫红色| 81 | |36|46|青蓝色| 82 | |37|47|白色| 83 | 84 | (a)显示红色字体: 85 | ``` 86 | echo -e "\e[1;31mThis is red text\e[0m" 87 | ``` 88 | 输出: 89 | 90 | This is red text 91 | 92 | 其中,`\e[0m`表示恢复终端默认设置。 93 | 94 | (b)显示绿色背景字体。 95 | ``` 96 | echo -e "\e[1;42mGreen Background\e[0m" 97 | ``` 98 | 输出: 99 | 100 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/c388a7859bd948c99866a94d209cfce5.png) 101 | 102 | (c)文字闪动。 103 | 104 | 使用前景色31(红色),背景色42(绿色)闪动: 105 | ``` 106 | echo -e "\033[5;31;42mMySQL Server Stop...\033[0m" 107 | ``` 108 | 109 | --- 110 | ## 参考文献 111 | [echo(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/echo.1.html) 112 | 113 | [echo命令 - Linux命令大全](http://man.linuxde.net/echo) 114 | 115 | [使用echo输出带颜色的字体](https://www.cnblogs.com/linusflow/p/7399761.html) 116 | 117 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/eval-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | eval(evaluate)连接参数构造命令并执行,为内建命令。 3 | 4 | 使用空格分隔每个参数,如果参数中含有变量,则替换为变量值,然后再将构造的命令交由 Shell 解释执行。它通常用于动态生成和执行命令,或者将字符串解释为可执行的 Shell 代码。 5 | 6 | ## 2.命令格式 7 | ```shell 8 | eval [ARG...] 9 | ``` 10 | eval 的返回值是其后面命令的退出状态。如果没有参数或只有空参数,eval 返回 0。 11 | 12 | ## 3.选项说明 13 | None。 14 | 15 | ## 4.常用示例 16 | (1)回显简单变量。 17 | ```shell 18 | NAME=foo 19 | echo $NAME 20 | foo 21 | 22 | # echo 前添加 eval 也可以 23 | eval echo $NAME 24 | foo 25 | ``` 26 | (2)先替换变量再执行命令。 27 | ```shell 28 | cat test.txt 29 | Hello World! 30 | 31 | command="cat test.txt"; echo $command 32 | cat test.txt 33 | 34 | eval $command 35 | Hello World! 36 | ``` 37 | (3)获取传给脚本或函数的最后一个参数。 38 | 39 | 使用特殊字符 `$#` 表示传递给脚本或函数的参数个数,使用`$n`获取参数,n 为数字,`$1` 表示第一个参数,`$2` 表示第二个参数,所以`$$#`表示最后一个参数。 40 | ```shell 41 | cat test.sh 42 | #!/usr/bin/bash 43 | echo \$$# 44 | eval echo \$$# 45 | 46 | ./test.sh firstarg lastarg 47 | $2 48 | lastarg 49 | ``` 50 | 51 | --- 52 | ## 参考文献 53 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 54 | 55 | [``和$()的区别及eval详解 - CSDN](https://blog.csdn.net/baidu_37964071/article/details/80930704) 56 | 57 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/exec-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | exec 执行指定命令,并替换当前 Shell 进程。 3 | 4 | exec 命令通常用在 Shell 脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。 5 | 6 | ## 2.命令格式 7 | ``` 8 | exec [-cl] [-a name] [command [arguments]] 9 | ``` 10 | 11 | ## 3.选项说明 12 | ```shell 13 | -a 14 | 作为第 0 个参数传递给 COMMAND 命令。 15 | -c 16 | 在一个空环境中执行 COMMAND 命令。 17 | -l 18 | 在 COMMAND 命令的第 0 个参数中加一个短线。 19 | ``` 20 | 21 | ## 4.常用示例 22 | 23 | (1)执行 Shell 命令。 24 | 25 | 命令执行完后,然后退出当前终端。 26 | 27 | ```shell 28 | exec ls 29 | ``` 30 | 31 | (2)在一个空环境中执行命令。 32 | 33 | 命令执行完后,然后退出当前终端。 34 | ```shell 35 | exec -c ls 36 | ``` 37 | 38 | (3)find 和 exec 综合使用。 39 | ```shell 40 | find ./ -name "test.txt" -exec ls -l {} \; 41 | -rw-rw-r--+ 1 root root 6 Nov 24 17:59 ./test/test.txt 42 | ``` 43 | 44 | --- 45 | 46 | ## 参考文献 47 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 48 | 49 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/exit-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | exit 是 Shell 内建命令,用于退出当前 Shell 进程。 3 | 4 | ## 2.命令格式 5 | ``` 6 | exit N 7 | ``` 8 | (1)状态码 N 的范围是 0-255,一般情况下,0 表示正常退出,非零表示异常退出。如果是 0-255 之外的数值,则会被强制转换为 uint8_t 类型的数值,比如 -1 会被转换为 255,256 会发生类型宽度截断,被转换为 0; 9 | 10 | (2)状态码 N 可以不指定,默认是上一条命令的退出状态码。 11 | 12 | ## 3.常用示例 13 | (1)退出终端。 14 | ```shell 15 | exit 16 | ``` 17 | (2)用于Shell脚本,退出当前Shell进程。 18 | ```shell 19 | #正常结果 20 | exit 0 21 | 22 | #异常退出 23 | exit 1 24 | ``` 25 | (3)使用 trap 内建命令,用于挂载 Shell 进程结束前需要执行的命令。格式为:trap "commands" EXIT。如脚本exit.sh: 26 | ```shell 27 | #!/bin/bash 28 | 29 | echo "start" 30 | trap "echo 'end'" EXIT 31 | echo "before exit" 32 | exit 0 33 | ``` 34 | 执行exit.sh输出: 35 | ``` 36 | start 37 | before exit 38 | end 39 | ``` 40 | ## 参考文献 41 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 42 | 43 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/let-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.功能简介 2 | let 命令是 Bash 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。 3 | 4 | ## 2.命令格式 5 | ```shell 6 | let arg [arg ...] 7 | ``` 8 | 每个参数都是要计算的算术表达式。 9 | 10 | ## 3.选项说明 11 | ```shell 12 | id++, id-- variable post-increment, post-decrement 13 | ++id, --id variable pre-increment, pre-decrement 14 | -, + unary minus, plus 15 | !, ~ logical and bitwise negation 16 | ** exponentiation 17 | *, /, % multiplication, division, remainder 18 | +, - addition, subtraction 19 | <<, >> left and right bitwise shifts 20 | <=, >=, <, > comparison 21 | ==, != equality, inequality 22 | & bitwise AND 23 | ^ bitwise XOR 24 | | bitwise OR 25 | && logical AND 26 | || logical OR 27 | expr ? expr : expr conditional operator 28 | =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= assignment 29 | ``` 30 | 31 | # 4.常用示例 32 | (1)加法运算。 33 | ```shell 34 | let a=1+1 35 | 36 | echo $a 37 | 2 38 | ``` 39 | (2)自增运算。 40 | ```shell 41 | let a++ 42 | 43 | echo $a 44 | 3 45 | ``` 46 | (3)减法运算。 47 | ```shell 48 | let a=2-1 49 | 50 | echo $a 51 | 1 52 | ``` 53 | 54 | (4)自减运算。 55 | ```shell 56 | let a-- 57 | 58 | echo $a 59 | 0 60 | ``` 61 | 62 | (5)幂运算。 63 | ```shell 64 | let a=2 65 | let a=a**10 66 | 67 | echo $a 68 | 1024 69 | ``` 70 | 71 | (6)逻辑运算。 72 | ```shell 73 | let a=1||0 74 | 75 | echo $a 76 | 1 77 | ``` 78 | 79 | --- 80 | ## 参考文献 81 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 82 | 83 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/printf.md: -------------------------------------------------------------------------------- 1 | ### 1.命令简介 2 | 3 | printf 格式化打印数据。 4 | 5 | printf 与 C printf(3) 控制格式类似,具体也可以参考 printf(3) 的格式化控制字符。 6 | 7 | ## 2.命令格式 8 | ``` 9 | printf FORMAT [ARGUMENT]... 10 | printf OPTION 11 | ``` 12 | 13 | ## 3.选项说明 14 | ```shell 15 | --help 16 | 显示帮助信息。 17 | --version 18 | 显示版本信息。 19 | ``` 20 | 21 | FORMAT 格式部分和 C printf(3) 一样。 22 | ```shell 23 | %b 相对应的参数被视为含有要被处理的转义序列之字符串。 24 | %c ASCII 字符。显示相对应参数的第一个字符 25 | %d, %i 十进制整数 26 | %e, %E, %f 浮点格式。 27 | %g %e或%f转换,看哪一个较短,则删除结尾的零。 28 | %G %E或%f转换,看哪一个较短,则删除结尾的零。 29 | %o 不带正负号的八进制值。 30 | %s 字符串。 31 | %u 不带正负号的十进制值。 32 | %x 不带正负号的十六进制值,使用a至f表示10至15。 33 | %X 不带正负号的十六进制值,使用A至F表示10至15。 34 | %% 字面意义的% 35 | ``` 36 | printf 支持的转义字符。 37 | ```shell 38 | \" 双引号。 39 | \a 警告字符,通常为 ASCII 的 BEL 字符。 40 | \b 后退。 41 | \c 不显示输出结果中任何结尾的换行字符,而且任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略。 42 | \f 换页。 43 | \n 换行。 44 | \r 回车。 45 | \t 水平制表符。 46 | \v 垂直制表符。 47 | \\ 反斜杠字符。 48 | ``` 49 | 50 | ## 4.常用示例 51 | 52 | (1)输出字符串。 53 | 54 | ```shell 55 | printf "hello world\n" 56 | hello world 57 | ``` 58 | 59 | (2)输出字符串不换行。 60 | ```shell 61 | printf "hello world" 62 | hello world 63 | ``` 64 | 65 | (3)格式控制输出。 66 | ```shell 67 | printf "hello %s\n" world 68 | hello world 69 | ``` 70 | 71 | (4)格式控制输出,并控制宽度。 72 | ```shell 73 | printf "%-10s %-8s %-4s\n" 姓名 性别 "体重(kg)" 74 | 姓名 性别 体重(kg) 75 | 76 | printf "%-10s %-8s %-4.2f\n" 杨过 男 68.6543 77 | 杨过 男 68.65 78 | ``` 79 | %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。 80 | 81 | %-4.2f 指格式化为小数,其中 .2 指保留 2 位小数。 82 | 83 | (5)格式控制字符串也可用单引号括住。 84 | ```shell 85 | printf '%d %s\n' 1 "hello world" 86 | 1 hello world 87 | ``` 88 | 89 | (6)输出数字。 90 | ```shell 91 | printf "%d %f %e\n" 1 1.000000001 1.000000001 92 | 1 1.000000 1.000000e+01 93 | ``` 94 | 小数位如果太长(数字总长度超过 8) 将被截断,我们可以指定小数位数。 95 | ```shell 96 | printf "%d %.10f %e\n" 1 1.000000001 1.000000001 97 | 1 1.0000000010 1.000000e+00 98 | ``` 99 | 100 | (7)输出百分比。对 % 进行转义即可。 101 | ```shell 102 | printf "%d%%\n" 80 103 | ``` 104 | 105 | --- 106 | 107 | ## 参考文献 108 | [printf(1) - Linux manual page - man7.org](https://man7.org/linux/man-pages/man1/printf.1.html) 109 | 110 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/readonly-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.功能简介 2 | readonly 命令用于定义只读 Shell 变量和函数。 3 | 4 | 单独执行 readonly 或使用选项 -p 可以输出显示系统中所有已定义的只读变量和函数。 5 | 6 | ## 2.命令格式 7 | ```shell 8 | readonly [-aAf] [-p] [name[=word] ...] 9 | ``` 10 | 11 | ## 3.选项说明 12 | ```shell 13 | -f 14 | 定义 Shell 函数。 15 | -a 16 | 定义索引数组变量。 17 | -A 18 | 定义关联数组变量。 19 | -p 20 | 显示系统中全部只读变量和函数列表。 21 | ``` 22 | 23 | ## 4.常用示例 24 | (1)显示所有只读变量和函数。 25 | ```shell 26 | readonly [-p] 27 | declare -ir BASHPID 28 | declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d" 29 | declare -ar BASH_REMATCH='()' 30 | ... 31 | ``` 32 | 33 | (2)定义只读变量并初始化。 34 | ```shell 35 | readonly FOO="foo" 36 | 37 | FOO="bar" 38 | -bash: FOO: readonly variable 39 | ``` 40 | 41 | --- 42 | ## 参考文献 43 | [bash(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/bash.1.html) 44 | 45 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/sleep.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | sleep 暂停指定的时间。 3 | 4 | ## 2.命令格式 5 | ```shell 6 | sleep NUMBER[SUFFIX]... 7 | sleep OPTION 8 | ``` 9 | SUFFIX 缺省是 s 秒数,此外 m 指分钟,h 指小时,d 指天数。 10 | 11 | 如果 NUMBER 是 infinity,表示暂停永久。 12 | 13 | ## 3.选项说明 14 | ```shell 15 | --help 显示帮助信息,然后结束。 16 | --version 显示版本信息,然后结束。 17 | ``` 18 | 19 | ## 4.常用示例 20 | (1)暂停 1 秒。 21 | 22 | ```shell 23 | sleep 1 24 | 25 | # 或 26 | sleep 1s 27 | ``` 28 | 29 | (2)暂停 1 分钟。 30 | 31 | ```shell 32 | sleep 1m 33 | ``` 34 | 35 | (3)暂停 1 小时。 36 | 37 | ```shell 38 | sleep 1h 39 | ``` 40 | 41 | (4)暂停 1 天。 42 | 43 | ```shell 44 | sleep 1d 45 | ``` 46 | 47 | (5)脚本中使用 sleep。 48 | 49 | 有时在写一些以循环方式运行的监控脚本,设置时间间隔是必不可少的,下面是一个Shell进度条的脚本演示在脚本中生成延时。 50 | 51 | ```shell 52 | #!/usr/bin/bash 53 | 54 | b='' 55 | for ((i=0;$i<=100;i++)); do 56 | printf "Progress:[%-100s]%d%%\r" $b $i 57 | sleep 0.1 58 | b=#$b 59 | done 60 | echo 61 | ``` 62 | 63 | 输出效果: 64 | 65 | ``` 66 | Progress:[####################################################################################################]100% 67 | ``` 68 | 69 | --- 70 | ## 参考文献 71 | [sleep(1) - Linux manual page - man7.org](https://man7.org/linux/man-pages/man1/sleep.1.html) 72 | 73 | [sleep(1p) - Linux manual page - man7.org](https://man7.org/linux/man-pages/man1/sleep.1p.html) 74 | 75 | [sleep - 将目前动作延迟一段时间- Linux 命令搜索引擎](https://wangchujiang.com/linux-command/c/sleep.html) 76 | 77 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/unset-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | unset 删除指定的 Shell 变量或函数。 3 | 4 | 注意,unset 不能删除具有只读属性的 Shell 变量和环境变量。 5 | 6 | ## 2.命令格式 7 | ```shell 8 | unset [-fv] [name ...] 9 | ``` 10 | 当不指定选项时,优先删除变量,如果失败则删除函数。 11 | 12 | ## 3.选项说明 13 | ```shell 14 | -f 将每个 name 当作函数。 15 | -v 将每个 name 当作变量。 16 | ``` 17 | 18 | ## 4.返回值 19 | 成功返回 0。 20 | 21 | 如果 name 为只读,则退出状态码为 1。 22 | 23 | 如果选项错误则退出状态码为 2。 24 | 25 | ## 5.常用示例 26 | (1)删除变量。 27 | 28 | ```shell 29 | hello="world" 30 | echo $hello 31 | world 32 | 33 | unset hello 34 | echo $hello 35 | 36 | ``` 37 | 38 | (2)删除函数。 39 | 40 | 下面是一个多行函数的例子,显示当前日期时间。 41 | 42 | ```shell 43 | function now(){ 44 | echo -n "Now date time is: " 45 | date +"%F %T" 46 | } 47 | ``` 48 | 调用函数,打印当前日期与时间。 49 | 50 | ```shell 51 | now 52 | Now date time is: 2023-01-26 20:41:40 53 | ``` 54 | 使用 unset 命令可以删除一个函数。 55 | 56 | ```shell 57 | unset -f now 58 | ``` 59 | 再次调用时,now 已找不定定义。 60 | 61 | ```shell 62 | now 63 | bash: now: command not found 64 | ``` 65 | 66 | (3)删除只读变量时将报错。 67 | 68 | 先定义一个只读变量 name。 69 | 70 | ```shell 71 | declare -r name="foo" 72 | $echo $name 73 | foo 74 | ``` 75 | 使用 unset 删除只读变量将报错并返回 1。 76 | 77 | ```shell 78 | unset name || echo $? 79 | bash: unset: name: cannot unset: readonly variable 80 | 1 81 | ``` 82 | 83 | --- 84 | ## 参考文献 85 | [bash(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/bash.1.html) 86 | 87 | -------------------------------------------------------------------------------- /vuepress-docs/Shell编程/wait-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | wait 等待每个指定的进程并返回其终止状态。 3 | 4 | 该指令常用于 Shell 脚本编程中,待指定的指令执行完成后,才会继续执行后面的任务。等待作业时,在作业号前须添加百分号"%"。 5 | 6 | ## 2.命令格式 7 | ```shell 8 | wait [n ...] 9 | ``` 10 | 每个 n 可以是进程 ID 或作业号;如果给定了作业号,则等待该作业管道中的所有进程。如果未给定 n,则等待所有当前活动的子进程,返回状态为零。 11 | 12 | ## 3.选项说明 13 | 无。 14 | 15 | ## 4.返回值 16 | 如果指定不存在的进程或作业,则返回状态为 127。 17 | 18 | 否则,返回状态是等待的最后一个进程或作业的退出状态。 19 | 20 | ## 5.常用示例 21 | (1)等待指定进程完成。 22 | 23 | ```shell 24 | sleep 10 & 25 | [1] 2875 26 | 27 | wait 2875 28 | [1]+ Done sleep 10 29 | ``` 30 | 31 | (2)等待指定作业完成。 32 | 33 | ```shell 34 | sleep 10 & 35 | [1] 3171 36 | 37 | wait %1 38 | [1]+ Done sleep 10 39 | ``` 40 | 41 | 输出当前存在作业号使用 jobs 命令。 42 | ```shell 43 | jobs 44 | [1]+ Running sleep 10 & 45 | ``` 46 | 47 | --- 48 | ## 参考文献 49 | [bash(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/bash.1.html) 50 | 51 | -------------------------------------------------------------------------------- /vuepress-docs/assets/imgs/expand/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/assets/imgs/expand/1.png -------------------------------------------------------------------------------- /vuepress-docs/assets/imgs/expand/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/assets/imgs/expand/2.png -------------------------------------------------------------------------------- /vuepress-docs/assets/imgs/expand/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/assets/imgs/expand/3.png -------------------------------------------------------------------------------- /vuepress-docs/assets/imgs/expand/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/assets/imgs/expand/4.png -------------------------------------------------------------------------------- /vuepress-docs/assets/imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/assets/imgs/logo.png -------------------------------------------------------------------------------- /vuepress-docs/assets/imgs/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dablelv/backend-cmd/50e5db6aa5d594436511cc0a18bacfddf9b37fea/vuepress-docs/assets/imgs/logo.psd -------------------------------------------------------------------------------- /vuepress-docs/实用工具/alias-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | alias 是 Shell 内建命令,用来设置命令的别名。 3 | 4 | 我们可以使用 alias 命令将一些较长的命令进行简化,建议使用单引号将原来的命令引起来,防止特殊字符导致错误。 5 | 6 | alias 命令的作用只局限于当前会话,若要每次登录都能够使用这些命令别名,则可将相应的 alias 命令放到 Bash 的初始化文件 /etc/bashrc(针对所有用户)或 ~/.bashrc(针对当前用户)中。 7 | 8 | ## 2.命令格式 9 | ``` 10 | alias [-p] [NAME[=VALUE] ...] 11 | ``` 12 | 不带参数或使用 -p 选项将在标准输出上以 "alias name=value" 的形式打印别名列表。对于参数列表中没有提供值的每个名称,将打印别名和对应的值,否则设置别名对应的值。 13 | 14 | ## 3.选项说明 15 | ``` 16 | -p 17 | 以可重用的格式 alias name=value 打印所有已定义的别名 18 | ``` 19 | 20 | ## 4.常用示例 21 | (1)以可重用的格式 alias name=value 打印所有已定义的别名。 22 | ``` 23 | alias 24 | # 或 25 | alias -p 26 | 27 | alias egrep='egrep --color=auto' 28 | alias fgrep='fgrep --color=auto' 29 | alias grep='grep --color=auto' 30 | alias l.='ls -d .* --color=auto' 31 | alias ll='ls -l --color=auto' 32 | alias ls='ls --color=auto' 33 | alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 34 | ``` 35 | (2)查看指定命令的别名。 36 | ``` 37 | alias ll 38 | alias ll='ls -l --color=auto' 39 | ``` 40 | (3)设置命令别名。 41 | ``` 42 | alias ll="ls -l --color=auto -h" 43 | ``` 44 | 45 | --- 46 | ## 参考文献 47 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 48 | 49 | -------------------------------------------------------------------------------- /vuepress-docs/实用工具/cal.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | cal(calendar)用于显示当前或指定日期的公历。 3 | 4 | ## 2.命令格式 5 | ```shell 6 | cal [OPTIONS] [[[DAY] MONTH] YEAR] 7 | ``` 8 | 可指定 YEAR(1-9999)、MONTH(1-12)和 DAY(1-31)。 9 | 10 | 不跟任何选项和参数单独执行 cal,显示当月月历。 11 | 12 | ## 3.选项说明 13 | ``` 14 | -1, --one 15 | 只显示当前月份(默认) 16 | -3, --three 17 | 显示前一个月、当前月和下一个月的月历 18 | -h, --help 19 | 显示帮助信息并退出 20 | -j, --julian 21 | 显示日期在当年中的第几天 22 | -m, --monday 23 | 显示星期一为一个星期的第一天 24 | -s, --sunday 25 | 显示星期天为一个星期的第一天(默认) 26 | -V, --version 27 | 显示版本信息并退出 28 | -y, --year 29 | 显示当年的日历 30 | ``` 31 | 32 | ## 4.常用示例 33 | (1)显示当前月份。 34 | ``` 35 | cal 36 | ``` 37 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200216190807146.png) 38 | 39 | (2)显示当前月份,星期一为一个星期的第一天。 40 | ``` 41 | cal -m 42 | ``` 43 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200216190737602.png) 44 | 45 | (3)显示当前月份,显示日期在当年中的第几天。 46 | ``` 47 | cal -j 48 | ``` 49 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200216191027558.png) 50 | 51 | (4)显示前一个月、当前月和下一个月的月历。 52 | ``` 53 | cal -3 54 | ``` 55 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200216191940342.png) 56 | 57 | (5)显示指定日期。 58 | ``` 59 | cal 24 6 2015 60 | ``` 61 | ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200216191637791.png) 62 | 63 | --- 64 | ## 参考文献 65 | [cal(1) - Linux manual page - man7.org](http://www.man7.org/linux/man-pages/man1/cal.1.html) 66 | 67 | -------------------------------------------------------------------------------- /vuepress-docs/实用工具/seq.md: -------------------------------------------------------------------------------- 1 | ## 1.功能简介 2 | seq(Sequence) 用于按照指定步长产生从起始数到结束数之间的所有整数。起始数和步长可使用默认值 1,结束数必须指定。 3 | 4 | ## 2.命令格式 5 | ``` 6 | seq [OPTION]... LAST 7 | seq [OPTION]... FIRST LAST 8 | seq [OPTION]... FIRST INCREMENT LAST 9 | ``` 10 | ## 3.选项说明 11 | 注意,长选项的强制性参数对于短选项也是强制的。 12 | ``` 13 | -f, --format=FORMAT 14 | 使用 printf 样式的浮点格式 15 | -s, --separator=STRING 16 | 使用指定字符串分隔数字(默认:\n) 17 | -w, --equal-width 18 | 在数字添加 0 使得宽度相同 19 | --help 20 | 显示帮助信息并退出 21 | --version 22 | 显示版本信息并退出 23 | ``` 24 | ## 4.常用示例 25 | (1)输出 1~5。 26 | ``` 27 | seq 5 28 | # 或 29 | seq 1 5 30 | # 或 31 | seq 1 1 5 32 | 1 33 | 2 34 | 3 35 | 4 36 | 5 37 | ``` 38 | (2)按照步长 10 生成从 10 到 50 的整数序列。 39 | ``` 40 | seq 10 10 50 41 | 10 42 | 20 43 | 30 44 | 40 45 | 50 46 | ``` 47 | (3)按照指定格式 num%03g 格式输出。num 为前置字符串,%03g 表示数字宽度为 3,不足前置补 0。 48 | ``` 49 | seq -f"num%03g" 3 50 | num001 51 | num002 52 | num003 53 | ``` 54 | (4)前置补 0 使得数字宽度相同。 55 | ``` 56 | seq -w 9 11 57 | 09 58 | 10 59 | 11 60 | ``` 61 | 注意,当输出等宽字符串时不能再指定格式字符串,即 -w 与 -f 不能一起用。 62 | 63 | (5)使用指定字符串分隔数字。 64 | ``` 65 | seq -w -s "," 9 11 66 | 09,10,11 67 | ``` 68 | (6)使用 Tab 分隔数字。 69 | ``` 70 | seq -s "`echo -e '\t'`" 9 11 71 | 9 10 11 72 | ``` 73 | 先用命令做成一个 Tab,然后再指定成分隔符。 74 | 75 | --- 76 | ## 参考文献 77 | [seq(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/seq.1.html) 78 | 79 | [【Linux】一步一步学Linux——seq命令(221)](https://blog.csdn.net/dengjin20104042056/article/details/100585527) 80 | 81 | -------------------------------------------------------------------------------- /vuepress-docs/实用工具/type-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | type 用来显示命令的类型。 3 | 4 | 一个命令的类型可以是: 5 | 6 | - alias:别名 7 | - keyword:Shell 保留关键字 8 | - function:Shell 函数 9 | - builtin:Shell 内建命令 10 | - file:磁盘文件,外部命令 11 | - unfound:没有找到 12 | 13 | type 是 Linux 系统的一种自省机制,知道了命令是那种类型,我们就可以针对性的获取帮助。比如内建命令可以用 help 命令来获取帮助,外部命令用 man 或 info 来获取帮助。 14 | 15 | ## 2.返回值 16 | 如果找到所有命令,则 type 返回成功(0);如果有任何一个命令找不到,则返回失败(1)。 17 | 18 | ## 3.命令格式 19 | 20 | ```shell 21 | type [-aftpP] name [name ...] 22 | ``` 23 | 24 | ## 4.选项说明 25 | 26 | ```shell 27 | -a 28 | 显示所有可能的类型,比如有些命令如 pwd 是 Shell 内建命令,也可以是外部命令。 29 | -f 30 | 排除对 Shell 函数的查找。 31 | -t 32 | 判断一个名字当前是否是 alias、keyword、function、builtin、file。如果找不到名称,则不打印任何内容。 33 | -p 34 | 如果 name 在执行"type -t name"返回的不是"file",那么什么也不返回;否则会在环境变量 PATH 中查找并返回可执行文件路径。 35 | -P 36 | 即使"type-t name"不返回"file",仍然会在环境变量 PATH 中查找并返回可执行文件路径。 37 | ``` 38 | ## 5.常用示例 39 | (1)查看命令的别名。 40 | 41 | ```shell 42 | type ls 43 | ls is aliased to `ls --color=auto' 44 | ``` 45 | 46 | (2)查看内建命令。 47 | 48 | ```shell 49 | type cd 50 | cd is a shell builtin 51 | ``` 52 | 53 | (3)查看 Shell 关键字。 54 | 55 | ```shell 56 | type if 57 | if is a shell keyword 58 | ``` 59 | (4)查看外部命令。 60 | 61 | ```shell 62 | type date 63 | date is /usr/bin/date 64 | ``` 65 | 66 | (5)命令没有找到。 67 | 68 | ```shell 69 | type notcmd 70 | bash: type: notcmd: not found 71 | ``` 72 | 73 | (6)显示命令所有可能的类型。 74 | 75 | ```shell 76 | type -a cd 77 | cd is a shell builtin 78 | cd is /usr/bin/cd 79 | ``` 80 | 81 | (7)查看 type 命令自身的类型。 82 | 83 | ```shell 84 | type type 85 | type is a shell builtin 86 | ``` 87 | 88 | --- 89 | ## 参考文献 90 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 91 | 92 | [Linux type 命令详解:显示指定命令的类型- Linux 命令搜索引擎](https://wangchujiang.com/linux-command/c/type.html) 93 | 94 | -------------------------------------------------------------------------------- /vuepress-docs/实用工具/unalias-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | unalias 为 Bash 内建命令,用来删除命令别名。 3 | 4 | ## 2.命令格式 5 | ``` 6 | alias [-a] [NAME...] 7 | ``` 8 | 如果使用 -a 选项,则表示取消所有已经存在的命令别名。如果需要取消任意一个命令别名,则使用该命令别名作为指令的参数即可。 9 | 10 | ## 3.选项说明 11 | ``` 12 | -a 删除所有的别名定义 13 | ``` 14 | 15 | ## 4.常用示例 16 | (1)删除指定别名。 17 | ``` 18 | # 先查看别名 ls 19 | alias ls 20 | alias ls='ls --color=auto' 21 | 22 | # 删除别名 ls 23 | unalias ls 24 | 25 | # 再查看别名 ls,无法找到别名,表示删除成功 26 | alias ls 27 | -bash: alias: ls: not found 28 | ``` 29 | (2)删除所有别名。 30 | ``` 31 | unalias -a 32 | ``` 33 | 删除后的别名将无法使用,请谨慎操作。 34 | 35 | --- 36 | ## 参考文献 37 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 38 | 39 | -------------------------------------------------------------------------------- /vuepress-docs/实用工具/yes.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | yes 重复输出一个字符串,直到被杀死。 3 | 4 | yes 不带任何参数运行时默认输出的字符串是 y。 5 | 6 | ## 2.命令格式 7 | ```shell 8 | yes [STRING]... 9 | yes OPTION 10 | ``` 11 | 12 | ## 3.选项说明 13 | ```shell 14 | --help 15 | 显示此帮助并退出。 16 | --version 17 | 输出版本信息并退出。 18 | ``` 19 | 20 | ## 4.常用示例 21 | 22 | (1)持续回复 y。 23 | 24 | 命令行或 Shell 脚本中,有时需要回复多次 yes 或 no,例如你要复制一個目录时,他会询问你是否覆盖目标文件,这个时候除了用 cp -f 以外,还可以用 yes 这个命令。 25 | 26 | ```shell 27 | yes | cp a.txt b.txt dir 28 | ``` 29 | 如果回复的次数不多且确定时,我们也可以 echo 来模拟 yes。 30 | ```shell 31 | echo -e "y\ny" | cp a.txt b.txt dir 32 | ``` 33 | 34 | 35 | (2)持续输出指定字符串,直至被杀死。 36 | ```shell 37 | yes no 38 | no 39 | no 40 | no 41 | no 42 | no 43 | ... 44 | ^C 45 | ``` 46 | 命令行下使用 Ctrl + C 发送 SIGINT 信号中断程序。 47 | 48 | (3)查看帮助信息。 49 | 50 | ```shell 51 | Usage: yes [STRING]... 52 | or: yes OPTION 53 | Repeatedly output a line with all specified STRING(s), or 'y'. 54 | 55 | --help display this help and exit 56 | --version output version information and exit 57 | 58 | GNU coreutils online help: 59 | For complete documentation, run: info coreutils 'yes invocation' 60 | ``` 61 | 62 | --- 63 | ## 参考文献 64 | [yes(1) - Linux manual page - man7.org](https://man7.org/linux/man-pages/man1/yes.1.html) 65 | 66 | -------------------------------------------------------------------------------- /vuepress-docs/帮助/help-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | help 用于查看 Shell 内部命令的帮助信息。 3 | 4 | help 命令只能显示 Shell 内部命令的帮助信息,对于外部命令的帮助信息需要使用 [man](https://dablelv.blog.csdn.net/article/details/103110624)、[info](https://dablelv.blog.csdn.net/article/details/103115329) 或 whatis 命令查看。 5 | 6 | ## 2.命令格式 7 | ```shell 8 | help [-dms] [ ...] 9 | ``` 10 | PATTERN 用于匹配命令,如果有与模式匹配的命令,help 返回状态为 0,否则为非 0。 11 | 12 | # 3.选项说明 13 | ``` 14 | -d 15 | 输出每个命令的简短描述 16 | -m 17 | 以类似于 man 手册的格式描述命令 18 | -s 19 | 只显示命令使用格式 20 | ``` 21 | 22 | ## 4.常用示例 23 | 24 | (1)查看 help 自身的帮助信息。 25 | ``` 26 | help help 27 | ``` 28 | 29 | (2)以类似于 man 手册格式查看 help 命令的帮助信息。 30 | ``` 31 | help -m help 32 | ``` 33 | 34 | (3)查看 help 命令的简短描述。 35 | ``` 36 | help -d help 37 | help - Display information about builtin commands. 38 | ``` 39 | 40 | (4)查看 help 和 cd 命令使用格式。 41 | ``` 42 | help -s help cd 43 | help: help [-dms] [pattern ...] 44 | cd: cd [-L|[-P [-e]]] [dir] 45 | ``` 46 | 47 | --- 48 | 49 | ## 参考文献 50 | 51 | [bash(1) - Linux manual page - man7.org](https://www.linux.org/docs/man1/help.html) 52 | 53 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/打包与压缩/bunzip2.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | bunzip2 用于解压由 bzip2 指令创建的后缀为 .bz2 的压缩包。 3 | 4 | bunzip2 其实是 bzip2 的符号链接,即软链接,因此压缩解压都可以通过 bzip2 实现。 5 | 6 | bunzip2 等同于 bzip2 -d。 7 | ## 2.命令格式 8 | ```shell 9 | bunzip2 [ -fkvsVL ] [ ... ] 10 | ``` 11 | ## 3.选项说明 12 | ```shell 13 | -f, -force 14 | 强制覆盖输出文件。通常 bzip2 不会覆盖已经存在的文件。该选项还强制 bzip2 打破文件的硬连接,缺省情况下 bzip2 不会这么做。 15 | -k, --keep 16 | 在压缩或解压缩时保留输入文件(不删除这些文件)。 17 | -s, --small 18 | 在压缩、解压缩及检查时减少内存用量。 采用一种修正的算法进行压缩和测试, 每个数据块仅需要 2.5 个字节。 这意味着任何文件都可以在 2300K 的内存中进行解压缩, 尽管速度只有通常情况下的一半。在压缩时,-s 将选定 200K 的块长度,内存用量也限制在 200K 左右, 代价是压缩率会降低。 总之,如果机器的内存较少(8MB 或更少),可对所有操作都采用 -s 选项。 19 | -v, --verbose 20 | 详尽模式——显示每个被处理文件的压缩率。 命令行中更多的 -v 选项将增加详细的程度, 使 bzip2 显示出许多主要用于诊断目的信息。 21 | -L, --license, -V, --version 22 | 显示软件版本、许可证条款及分发条件。 23 | ``` 24 | ## 4.常用示例 25 | 我们先对 /etc/passwd 使用 bizp 进行压缩。 26 | ```shell 27 | bzip2 -c /etc/passwd > passwd.bz2 28 | ``` 29 | (1)解压文件。 30 | ```shell 31 | bunzip2 passwd.bz2 32 | ``` 33 | 34 | (2)保留原文件解压文件。 35 | ```shell 36 | bunzip2 -k passwd.bz2 37 | # 或 38 | bunzip2 -c passwd.bz2 > passwd 39 | ``` 40 | 41 | (3)解压时显示指令执行过程。 42 | ```shell 43 | bunzip2 -v passwd.bz2 44 | passwd.bz2: done 45 | ``` 46 | 47 | (4)检测文件的完整性(不解压)。 48 | ``` 49 | bunzip2 -tv passwd.bz2 50 | passwd.bz2: ok 51 | ``` 52 | 53 | --- 54 | ## 参考文献 55 | [bunzip(1) manual - linux.org](https://www.linux.org/docs/man1/bunzip2.html) 56 | 57 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/打包与压缩/bzip2recover.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | bzip2recover 从损坏的 bzip2 文件中恢复数据。 3 | 4 | bzip2 是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用bzip2recover,试着将文件中的区块隔开来,以便解压缩正常的区块。通常只适用在压缩文件很大的情况。 5 | ## 2.命令格式 6 | ```shell 7 | bzip2recover 8 | ``` 9 | ## 3.选项说明 10 | 无。 11 | ## 4.常用示例 12 | 修复 .bz2 文件。 13 | ```shell 14 | bzip2recover passwd.bz2 15 | bzip2recover 1.0.6: extracts blocks from damaged .bz2 files. 16 | bzip2recover: searching for block boundaries ... 17 | block 1 runs from 80 to 4798 18 | bzip2recover: splitting into blocks 19 | writing block 1 to `rec00001passwd.bz2' ... 20 | bzip2recover: finished 21 | ``` 22 | 23 | --- 24 | ## 参考文献 25 | [bzip2recover(1) manual - linux.org](https://www.linux.org/docs/man1/bzip2recover.html) 26 | 27 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/打包与压缩/gunzip.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | gunzip(GNU unzip)用来解压缩文件。 3 | 4 | gunzip 是使用广泛的解压缩程序,可以解压缩由 gzip、zip、compress、compress -H 或 pack 创建的文件。输入格式的检测是自动的。 5 | 6 | 如果是解压缩 gzip 创建的 .gz 压缩文件,也可通过 gzip 单独完成,即 gzip -d。 7 | 8 | 如果是解压缩 zip 创建的 .zip 压缩文件,也可通过 unzip 完成。 9 | 10 | 如果解压缩 compress 创建的 .Z 压缩文件,也可通过 uncompress 完成。事实上 uncompress 是 gunzip 的硬链接。 11 | 12 | ## 2.命令格式 13 | ```shell 14 | gunzip [ -acfhlLnNrtvV ] [-S ] [ ... ] 15 | ``` 16 | ## 3.选项说明 17 | ```shell 18 | -a, --ascii 19 | 使用 ASCII 文字模式。 20 | -c, --stdout, --to-stdout 21 | 把解压后的文件输出到标准输出设备。 22 | -f, -force 23 | 强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。 24 | -h, --help 25 | 在线帮助。 26 | -l, --list 27 | 列出压缩文件的相关信息。 28 | -L, --license 29 | 显示版本与版权信息。 30 | -n, --no-name 31 | 解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略不予处理。 32 | -N, ——name 33 | 解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。 34 | -q, --quiet 35 | 不显示警告信息。 36 | -r, --recursive 37 | 递归处理,将指定目录下的所有文件及子目录一并处理。 38 | -S, --suffix 39 | 更改压缩字尾字符串。 40 | -t, --test 41 | 测试压缩文件是否正确无误。 42 | -v, --verbose 43 | 显示指令执行过程。 44 | -V, ——version 45 | 显示版本信息。 46 | ``` 47 | ## 4.常用示例 48 | 我们先对 /etc/passwd 使用 gizp 进行压缩。 49 | ```shell 50 | gzip -c /etc/passwd > passwd.gz 51 | ``` 52 | (1)解压 gz 文件。 53 | ```shell 54 | gunzip passwd.gz 55 | ``` 56 | 57 | (2)解压 gz 文件,但不删除原文件。 58 | ```shell 59 | gunzip -c passwd.gz > passwd 60 | ``` 61 | 62 | (3)解压 gz 文件,显示指令执行过程。 63 | ```shell 64 | gunzip -v passwd.gz 65 | passwd.gz: 58.4% -- replaced with passwd 66 | ``` 67 | 68 | (4)指定后缀解压。 69 | 70 | 如果 gz 文件的后缀不是 gz,那么 gunzip 将报错。 71 | ```shell 72 | cp passwd.gz passwd.gz.unknown && gunzip passwd.gz.unknown 73 | ``` 74 | 此时,我们可以指定后面来解压。 75 | ```shell 76 | gunzip -S .unknown passwd.gz.unknown 77 | ``` 78 | 79 | (5)列出压缩文件的相关信息(不解压)。 80 | ```shell 81 | gunzip -l passwd.gz 82 | compressed uncompressed ratio uncompressed_name 83 | 579 1333 58.4% passwd 84 | ``` 85 | 86 | --- 87 | ## 参考文献 88 | [gunzip(1) manual - linux.org](https://www.linux.org/docs/man1/gunzip.html) 89 | 90 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/打包与压缩/gzip.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | gzip(GNU zip)命令用来压缩和解压文件。 3 | 4 | gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,采用 [Deflate](https://baike.baidu.com/item/DEFLATE/9650075?fr=aladdin)(LZ77 + 哈夫曼编码)无损压缩算法压缩为后缀为 .gz 的 gzip 文件。 5 | 6 | gzip 不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和 [tar](https://dablelv.blog.csdn.net/article/details/78568419) 命令一起构成 Linux 操作系统中比较流行的压缩文件格式。据统计,gzip 命令对文本文件有 60%~70% 的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。 7 | 8 | ## 2.命令格式 9 | ```shell 10 | gzip [ -acdfhlLnNrtvV19 ] [-S SUFFIX] [ NAME... ] 11 | ``` 12 | ## 3.选项说明 13 | ```shell 14 | -a --ascii 15 | 使用 ASCII 文字模式。在转换行末字符时使用本地约定。此选项仅在某些非 Unix 系统上支持。对于 MSDOS,压缩时将 CR LF 转换为 LF,解压缩时将 LF 转换为 CR LF 16 | -c, --stdout, --to-stdout 17 | 把压缩后的文件输出到标准输出,不去变更原始文件 18 | -d, --decompress, --uncompress 19 | 解压缩 20 | -f, --force 21 | 强制压缩或解压缩,即使文件具有多个链接或相应的文件已经存在,或者压缩数据是从终端读取或写入终端的 22 | -h, --help 23 | 显示帮助信息并退出 24 | -l, --list 25 | 列出压缩文件的相关信息 26 | -L, --license 27 | 显示版权信息并退出 28 | -n, --no-name 29 | 压缩文件时,不保存原来的文件名称及时间戳。解压缩时,即使原文件名和时间戳存在也不还原。该选项为解压缩时的默认选项 30 | -N, --name 31 | 压缩时,始终保存原始文件名和时间戳;这是默认的。解压缩时,如果存在,则恢复原始文件名和时间戳。此选项对于限制文件名长度的系统或在文件传输后丢失时间戳的系统非常有用 32 | -q, --quiet 33 | 不显示警告信息 34 | -r, --recursive 35 | 递归处理,将指定目录下的所有文件及子目录一并处理 36 | -S, --suffix=SUFFIX 37 | 更改压缩后解压缩后的文件的后缀名 38 | -t, --test 39 | 测试压缩文件是否正确无误 40 | -v, --verbose 41 | 显示指令执行过程 42 | -V, --version 43 | 显示版本信息并退出 44 | -#, --best, --fast 45 | 指定压缩效果。压缩率是一个介于 1~9 的数值,数值越大,压缩率越高,压缩速度越低,缺省为 6。--best 等同于 -9,--fast 等同于 -1 46 | ``` 47 | ## 4.常用示例 48 | (1)不保留原文件压缩。 49 | ``` 50 | gzip /etc/passwd 51 | ``` 52 | 压缩后的 /etc/passwd 将变为 /etc/passwd.gz。 53 | 54 | (2)保留原文件压缩。 55 | ``` 56 | gzip -c /etc/passwd > passwd.gz 57 | ``` 58 | (3)压缩时显示指令执行过程。 59 | ``` 60 | gzip -v /etc/passwd 61 | /etc/passwd: 57.9% -- replaced with /etc/passwd.gz 62 | ``` 63 | (4)解压 .gz 文件,不保留原文件。 64 | ``` 65 | gzip -dv /etc/passwd.gz 66 | /etc/passwd.gz: 57.9% -- replaced with /etc/passwd 67 | ``` 68 | (5)递归压缩指定目录下的所有文件。 69 | ``` 70 | ls dir 71 | file1 file2 file3 72 | 73 | gzip -rv dir 74 | dir/file3: -10.0% -- replaced with dir/file3.gz 75 | dir/file2: -25.0% -- replaced with dir/file2.gz 76 | dir/file1: -16.7% -- replaced with dir/file1.gz 77 | ``` 78 | 79 | --- 80 | ## 参考文献 81 | [gzip(1) manual - linux.org](https://www.linux.org/docs/man1/gzip.html) 82 | 83 | [Linux 命令大全.gzip 命令](https://man.linuxde.net/gzip) 84 | 85 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/文件与目录查看/basename.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | basename 从文件路径中剥离目录和后缀,以获取文件的基本名称。与 dirname 命令作用相反,dirname 用于获取目录部分。 3 | 4 | ## 2.命令格式 5 | ```shell 6 | basename NAME [SUFFIX] 7 | basename OPTION... NAME... 8 | ``` 9 | 10 | ## 3.选项说明 11 | 长选项的强制参数对于短选项也是强制的。 12 | ``` 13 | -a, --multiple 14 | 支持多个文件名称参数,将每一个参数当做文件名对待 15 | -s, --suffix=SUFFIX 16 | 移除后缀 17 | -z, --zero 18 | 以空字符 NUL 分隔输出而不是换行符 19 | --help 20 | 显示帮助并退出 21 | --version 22 | 显示版本并退出 23 | ``` 24 | 25 | ## 4.常用示例 26 | (1)获取文件名,不包含目录。 27 | ```shell 28 | basename /root/go/src/main.go 29 | main.go 30 | ``` 31 | 32 | (2)获取文件名,不包含目录与后缀。 33 | ```shell 34 | basename /root/go/src/main.go .go 35 | main 36 | ``` 37 | 38 | (3)同时获取多个文件名,不包含目录与后缀。 39 | ```shell 40 | basename -a -s .go /root/go/src/main.go /root/go/src/util.go 41 | main 42 | util 43 | ``` 44 | 45 | (4)如果路径最后一个是目录,那么急脾气最后一个目录的名字。 46 | ```shell 47 | basename /root/go/src/ 48 | src 49 | ``` 50 | 51 | --- 52 | ## 参考文献 53 | [basename(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/basename.1.html) 54 | 55 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/文件与目录查看/dirname.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | dirname 从文件路径中获取文件目录。 3 | 4 | dirname 作用与 basename 命令相反,basename 用于获取文件名。 5 | 6 | 如果文件路径中不包含 /,那么输出 . 表示当前目录。如果文件路径最后一个字符是 /,那么剥离倒数第二个 / 及其后的内容。 7 | 8 | ## 2.命令格式 9 | ``` 10 | dirname [OPTION] NAME... 11 | ``` 12 | 13 | ## 3.选项说明 14 | ``` 15 | -z, --zero 16 | 用空字符 NUL 而不是换行符分隔输出 17 | --help 18 | 显示帮助并退出 19 | --version 20 | 显示版本并退出 21 | ``` 22 | 23 | ## 4.常用示例 24 | (1)获取目录部分,剥掉文件名。 25 | ``` 26 | $ dirname /root/go/src/main.go 27 | /root/go/src 28 | ``` 29 | 30 | (2)获取目录部分,剥掉文件名,后跟多个文件路径。 31 | ``` 32 | $ dirname /root/go/src/main.go /root/go/src/util.go 33 | /root/go/src 34 | /root/go/src 35 | ``` 36 | 37 | (3)获取目录的目录。即如果文件路径最后一个字符是 /,那么剥离倒数第二个 / 及其后的内容。 38 | ``` 39 | $ dirname /usr/bin/ 40 | /usr 41 | ``` 42 | 43 | (4)如果文件路径中不包含 /,那么输出 . 表示当前目录。 44 | ``` 45 | $ dirname stdio.h 46 | . 47 | ``` 48 | 49 | (5)路径是根目录的特殊情况。不剥除任何内容,输出 /。 50 | ``` 51 | $ dirname / 52 | / 53 | ``` 54 | 55 | --- 56 | ## 参考文献 57 | [dirname(1) - Linux manual page - man7.org](http://man7.org/linux/man-pages/man1/dirname.1.html) 58 | 59 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/文件与目录查看/dirs-builtin.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | dirs(directory stack)命令,用于显示目录栈。 3 | 4 | 目录栈是最近访问的目录的列表。配套的两个内置命令,一个是 pushd,更改当前目录时将目录添加到栈中,另一个是 popd 从栈顶删除目录,然后将当前目录更改为栈顶目录。dirs 用于显示目录栈的内容。当前目录始终是目录栈的顶部。 5 | 6 | 目录栈的内容也可以从 Shell 变量 DIRSTACK 获取到。 7 | 8 | ## 2.命令格式 9 | ```shell 10 | dirs [+] [-] [-clpv] 11 | ``` 12 | dirs 不带选项执行时显示目录栈中的所有内容。 13 | ## 3.选项说明 14 | ```shell 15 | +N 16 | 从栈顶开始,显示第 N 个目录,下标从零开始。 17 | -N 18 | 从栈底开始,显示第 N 个目录,下标从零开始。 19 | -c 20 | 删除所有元素以清空目录栈。 21 | -l 22 | 替换掉家目录的波浪号,显示完整的更长的目录。 23 | -p 24 | 每行一个条目打印目录栈。 25 | -v 26 | 每行一个条目,以栈中位置为前缀打印目录栈。 27 | ``` 28 | ## 4.常用示例 29 | (1)显示当前目录栈。 30 | 31 | 当前目录栈默认只有一个元素,即当前的工作目录。如果使用 cd 改变当前工作目录,那么目录栈的目录也会随之改变。 32 | ```shell 33 | # dirs 34 | ~ 35 | ``` 36 | 切换一下当前的目录再看下。 37 | ```shell 38 | # cd cpp 39 | # dirs 40 | ~/cpp 41 | ``` 42 | (2)向目录栈添加目录。 43 | 44 | 可以使用 pushd 命令,向录栈添加目录,并同时改变当前工作目录。 45 | ```shell 46 | # pushd /root/cpp/txt0 47 | ~/cpp/txt0 ~/cpp 48 | 49 | # pushd /root/cpp/txt1 50 | ~/cpp/txt1 ~/cpp/txt0 ~/cpp 51 | ``` 52 | (3)使用长格式显示目录栈。 53 | ```shell 54 | # dirs -l 55 | /root/cpp/txt1 /root/cpp/txt0 /root/cpp 56 | ``` 57 | 58 | (4)每行一个目录并以在栈中的下标作为前缀。 59 | ```shell 60 | # dirs -v 61 | 0 ~/cpp/txt1 62 | 1 ~/cpp/txt0 63 | 2 ~/cpp 64 | ``` 65 | 66 | (5)从目录栈删除目录。 67 | 68 | 可以使用 popd 命令,删除目录栈栈顶目录,然后改变当前工作目录为栈顶目录。如我们将 ~/cpp/txt1 出栈,那么当前工作目录将变为 ~/cpp/txt0。 69 | ```shell 70 | # popd 71 | ~/cpp/txt0 ~/cpp 72 | 73 | # pwd 74 | /root/cpp/txt0 75 | ``` 76 | (6)清空目录栈,只保留栈顶元素。 77 | ```shell 78 | # dirs -c 79 | ``` 80 | 81 | --- 82 | ## 参考文献 83 | [bash(1) - Linux manual page - man7.org](https://www.man7.org/linux/man-pages/man1/bash.1.html) 84 | 85 | -------------------------------------------------------------------------------- /vuepress-docs/文件系统/文件与目录查看/pwd.md: -------------------------------------------------------------------------------- 1 | ## 1.命令简介 2 | pwd(print working directory)打印当前工作目录的绝对路径。 3 | 4 | ## 2.命令格式 5 | ```shell 6 | pwd [