-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
123 lines (61 loc) · 196 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Frank Lee's Blog</title>
<subtitle>Chase Excellence</subtitle>
<link href="https://forest-lee.github.io/atom.xml" rel="self"/>
<link href="https://forest-lee.github.io/"/>
<updated>2022-02-22T09:56:08.982Z</updated>
<id>https://forest-lee.github.io/</id>
<author>
<name>Frank Lee</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>Hexo从Github Pages到阿里云</title>
<link href="https://forest-lee.github.io/2021/10/22/hexo-from-GithubPages-2-aliyun/"/>
<id>https://forest-lee.github.io/2021/10/22/hexo-from-GithubPages-2-aliyun/</id>
<published>2021-10-22T10:00:00.000Z</published>
<updated>2022-02-22T09:56:08.982Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p>Reference:<a href="http://wu.run/2018/12/20/hexo-from-github-2-aliyun/">http://wu.run/2018/12/20/hexo-from-github-2-aliyun/</a></p></blockquote><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>本次迁移,实质是将个人站点部署到阿里云内地节点服务器,以符合阿里云备案要求。</p><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/image.png" class="" title="阿里云备案核查通知"><p>附:<a href="https://help.aliyun.com/noticelist/articleid/1060895544.html?spm=a2c4g.788314815.n2.6.5f3c4c07Vmay0j">关于阿里云用户ICP备案情况自查的通知</a>,<a href="https://beian.aliyun.com/pcContainer/domainCheck">备案接入准确性检查链接</a></p><h1 id="环境搭建"><a href="#环境搭建" class="headerlink" title="环境搭建"></a>环境搭建</h1><h2 id="ssh连接"><a href="#ssh连接" class="headerlink" title="ssh连接"></a>ssh连接</h2><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">ssh root@公网IP<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="安装nginx"><a href="#安装nginx" class="headerlink" title="安装nginx"></a>安装nginx</h2><ul><li>更新package</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">sudo apt updatesudo apt upgrade<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><ul><li>安装nginx</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">sudo apt-get install nginx <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ul><li>测试安装是否成功</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">nginx -v<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ul><li>nginx相关目录</li></ul><p>    - <code>/usr/sbin/nginx</code> — nginx主程序</p><p>    - <code>/etc/nginx</code> — 存放nginx相关配置</p><p>    - <code>/var/log/nginx</code> — 存放nginx日志 </p><h2 id="安装git"><a href="#安装git" class="headerlink" title="安装git"></a>安装git</h2><ul><li>安装并配置本地用户信息</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">sudo apt-get install gitgit config --global user.name "your name"git config --global user.email "your email"<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h2 id="首次clone,配置环境"><a href="#首次clone,配置环境" class="headerlink" title="首次clone,配置环境"></a>首次clone,配置环境</h2><ul><li>生成本地公钥/私钥,直接三次回车,不推荐设置密码</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">ssh-keygen -t rsa<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/image_1.png" class=""><ul><li>查看并添加ssh key信息到github</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">cat ~/.ssh/id_rsa.pub<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h1 id="测试环境"><a href="#测试环境" class="headerlink" title="测试环境"></a>测试环境</h1><ul><li>进入<code>/var/www/html</code>,clone博客源代码</li></ul><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/image_2.png" class=""><ul><li>修改<code>/etc/nginx/sites-available/default</code>文件中server下的root字段值为clone的博客目录路径</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html/forest/forest-lee.github.io; ... #省略,未复制}<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><ul><li>重新运行nginx</li></ul><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">nginx -s reload<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>这时,就可以通过访问阿里云服务器的公网IP查看个人博客(这里个人发生了一点小插曲:修改后访问ip显示404页面,一直以为是配置问题,结果是路径打错了QAQ)</p><h2 id="绑定域名"><a href="#绑定域名" class="headerlink" title="绑定域名"></a>绑定域名</h2><p>使用已购买并备案的域名,解析至阿里云服务器的公网IP。</p><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/image_3.png" class=""><h1 id="自动同步"><a href="#自动同步" class="headerlink" title="自动同步"></a>自动同步</h1><h2 id="问题提出"><a href="#问题提出" class="headerlink" title="问题提出"></a>问题提出</h2><p>经过上述操作,我们实质是将博客源代码git clone到路径<code>/var/www/html/forest-lee.github.io</code>,如果需要对博客进行修改或发布新文章,运行<code>hexo d</code>还是只能将新源码pull到github及gitee上,而无法自动上传到服务器上。要想同步修改,还是需要在服务器上的博客路径删除源码并重新git clone,非常麻烦。</p><h2 id="问题解决"><a href="#问题解决" class="headerlink" title="问题解决"></a>问题解决</h2><p>解决方法很简单,只需要在阿里云服务器上搭建一个Git远程仓库,每次通过<code>hexo d</code>更新源码时,也同步更新至服务器仓库中,并自动同步到<code>/var/www/html/forest-lee.github.io</code>中。</p><p>具体做法:</p><ol><li>创建git用户</li></ol><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">adduser git<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ol start="2"><li>创建git裸仓hexo.git</li></ol><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">cd /home/gitgit init --bare hexo.git<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><ol start="3"><li>修改权限</li></ol><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">chown -R git:git hexo.git<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><ol start="4"><li><p>写入信息</p><p> 获取并复制本地SSH公钥并写入服务器<code>/home/git/.ssh/authorized_keys</code>(没有则创建)文件</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> ~/.ssh/id_rsa.pub<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> 在<code>/home/git/hexo.git/hooks/post-receive</code>(没有则创建)文件中写入:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token shebang important">#!/bin/sh</span><span class="token function">git</span> --work-tree<span class="token operator">=</span>/var/www/html/forest-lee.github.io --git-dir<span class="token operator">=</span>/home/git/hexo.git checkout <span class="token parameter variable">-f</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li></ol><ol start="5"><li>修改本地_config.yml文件</li></ol><pre class="line-numbers language-Bash" data-language="Bash"><code class="language-Bash">deploy: type: git repo: gitee: https://gitee.com/frank-f-lee/frank-lee.git # HTTPS github: [email protected]:Forest-Lee/forest-lee.github.io.git # SSH hexo: [email protected]:/home/git/hexo.git brach: master message: blog<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="小插曲"><a href="#小插曲" class="headerlink" title="小插曲"></a>小插曲</h2><h3 id="域名无法正常访问"><a href="#域名无法正常访问" class="headerlink" title="域名无法正常访问"></a>域名无法正常访问</h3><p>将域名正确解析到公网ip后,发现直接访问域名<code>forestlee.top</code>被拒绝<code>ERR_CONNECTION_CLOSED</code>,而<code>www.forestlee.top</code>可以正常访问;咨询阿里云客服,最终找到原因——<strong>浏览器的缓存导致访问域名时直接添加了https</strong>,而没有进行SSL申请,不能访问https页面。</p><blockquote><p>服务器443端口无法访问,所以https页面无法打开,目前应该是浏览器的缓存使直接访问域名添加了https,这边浏览器没有自动添加https,所以这边可以访问的。您可以清理缓存后直接访问<a href="http://forestlee.top/?spm=5176.smartservice_service_robot-chat.0.0.59b1709acVejCS">http://forestlee.top</a>。</p><p>需要申请过SSL证书,并在服务器上配置了SSL证书后才能通过443端口访问https页面。</p></blockquote><h3 id="伪自动同步"><a href="#伪自动同步" class="headerlink" title="伪自动同步"></a>伪自动同步</h3><p>本人在初次完成以上步骤后,发现<code>hexo d</code>提交时,博客源码并没有自动同步到服务器上。</p><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/image_4.png" class=""><blockquote><p>其实从上图中的”hint: The ‘hooks/post-receive’ hook was ignored because it’s not set as executable.”就可以略窥一二了。</p></blockquote><p>为此,我尝试了多次(重建服务器git仓库…),最后在和<a href="https://npfs06.top/">npfs</a>的交流中找到了问题所在——**<code>post-receive</code>文件的权限问题**</p><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/chmod.png" class="" title="更改post-receive权限"><blockquote><p> 由此足见Linux文件权限的重要性,学习指路:<a href="https://www.runoob.com/linux/linux-comm-chmod.html">Linux chmod 命令</a></p></blockquote><p>至此,你已经可以通过<code>hexo d</code>直接将博客源码上传到gitee、github并自动同步到服务器。</p><h2 id="效果展示"><a href="#效果展示" class="headerlink" title="效果展示"></a>效果展示</h2><img src="/2021/10/22/hexo-from-GithubPages-2-aliyun/final.png" class="" title="博客源码上传效果图">]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla</summary>
<category term="Blog" scheme="https://forest-lee.github.io/categories/Blog/"/>
<category term="hexo" scheme="https://forest-lee.github.io/tags/hexo/"/>
<category term="github" scheme="https://forest-lee.github.io/tags/github/"/>
<category term="aliyun" scheme="https://forest-lee.github.io/tags/aliyun/"/>
</entry>
<entry>
<title>步入Linux的现代方法</title>
<link href="https://forest-lee.github.io/2021/08/13/Linux/"/>
<id>https://forest-lee.github.io/2021/08/13/Linux/</id>
<published>2021-08-13T08:16:00.000Z</published>
<updated>2022-02-22T10:50:36.628Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><img src="/2021/08/13/Linux/logo(1).png" class=""><blockquote><p> @Copyright: <a href="https://space.bilibili.com/19658621/">https://space.bilibili.com/19658621/</a>, <a href="https://wangchujiang.com/linux-command/">https://wangchujiang.com/linux-command/</a></p><p> Course links: <a href="https://www.bilibili.com/video/BV18U4y1W7av">https://www.bilibili.com/video/BV18U4y1W7av</a>, full edition: <a href="https://www.yuque.com/frank-93a7b/fuck/raruzp">https://www.yuque.com/frank-93a7b/fuck/raruzp</a></p></blockquote><h1 id="零:Linux的初步认识"><a href="#零:Linux的初步认识" class="headerlink" title="零:Linux的初步认识"></a>零:Linux的初步认识</h1><h2 id="1-系统的认识"><a href="#1-系统的认识" class="headerlink" title="1.系统的认识"></a>1.系统的认识</h2><ul><li><p> 系统 —— 操作系统</p></li><li><p> 人机交互</p></li></ul><h2 id="2-Linux操作系统认识,以及开源的提出:Linux的千奇百怪的版本"><a href="#2-Linux操作系统认识,以及开源的提出:Linux的千奇百怪的版本" class="headerlink" title="2.Linux操作系统认识,以及开源的提出:Linux的千奇百怪的版本"></a>2.Linux操作系统认识,以及开源的提出:Linux的千奇百怪的版本</h2><ul><li>系统:<ul><li> Windows —— Microsoft</li><li> Linux —— Linus Torvalds 林纳斯-托瓦兹</li><li> Unix(Linux的baba),纯C写的</li><li> MacOS —— Apple</li></ul></li></ul><h2 id="3-开源的含义"><a href="#3-开源的含义" class="headerlink" title="3.开源的含义"></a>3.开源的含义</h2><ul><li> <strong>开放源代码(开源)</strong>:我写的源代码公诸于世</li><li><strong>开源不一定免费</strong><ul><li> eg: RedHat —— 个人免费,企业收费(福特汽车,xx银行)</li></ul></li><li> Google Pixel -> XIAOMI OPPO VIVO HUAWEI</li><li> Linux -> Ubuntu CentOS RedHat Kali</li></ul><h2 id="4-Linux的用途,各类发行版本"><a href="#4-Linux的用途,各类发行版本" class="headerlink" title="4.Linux的用途,各类发行版本"></a>4.Linux的用途,各类发行版本</h2><ul><li><p>Linux —— 一种自由和开放源码的类 Unix 系统</p><blockquote><p> <a href="https://www.wiki-wiki.top/wiki/Linux">https://www.wiki-wiki.top/wiki/Linux</a></p></blockquote></li><li><p>Linux 严格来说单指操作系统的<strong>内核</strong>,没有图形界面。</p><p> 如今 Linux 常用来指基于 Linux 的完整操作系统。</p></li><li><p>Linux -> Ubuntu CentOS RedHat Kali</p><ul><li> Ubuntu 面向个人用户</li><li> CentOS 公司服务器使用</li><li> RedHat 金融公司</li><li> …… 公司定制 Unix 系统</li></ul></li><li><p>大部分人使用的是 Linux 发行版,Linux 可以运行在个人 PC、服务器、嵌入式系统上。</p><p> <strong>Linux 发行版</strong>:</p><ul><li> Debian –> <strong>Ubuntu</strong> 、Linux Mint (相当于 XIAOMI –> Redmi)</li><li> Fedora –> Red Hat Enterprise Linux、 <strong>CentOS</strong></li><li> openSUSE </li></ul></li></ul><hr><h1 id="一:VMware虚拟机的使用"><a href="#一:VMware虚拟机的使用" class="headerlink" title="一:VMware虚拟机的使用"></a>一:VMware虚拟机的使用</h1><h2 id="1-VMware虚拟机"><a href="#1-VMware虚拟机" class="headerlink" title="1.VMware虚拟机"></a>1.VMware虚拟机</h2><ul><li><p>学习指路☛</p><blockquote><p> <a href="https://www.bilibili.com/video/BV1t741167UB">https://www.bilibili.com/video/BV1t741167UB</a></p></blockquote><ul><li> 1.虚拟、安全性 —— 与本机独立,虚拟化的一个系统</li><li> 2.随意性 —— 可以把软件拖来拖去</li><li> 3.快捷快照 —— 快速恢复到原来状态</li></ul></li><li><p>3种选择:</p><ul><li> 实体机 硬件不支持 X</li><li> 双系统 别折腾 X</li><li> VM虚拟机 </li></ul></li><li><p>关于软件版本:</p><ul><li> 追求新? No,just 体验 企业 –> 稳定</li></ul></li></ul><h2 id="2-VMware-Workstation-16"><a href="#2-VMware-Workstation-16" class="headerlink" title="2.VMware Workstation 16"></a>2.VMware Workstation 16</h2><blockquote><p><a href="https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html">https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html</a></p></blockquote><p><strong>win10官方镜像网站</strong></p><blockquote><p><a href="https://www.microsoft.com/zh-cn/software-download/windows10/">https://www.microsoft.com/zh-cn/software-download/windows10/</a></p></blockquote><p><strong>Ctrl + Alt 释放鼠标,回到真实机</strong></p><h2 id="3-关于从15更新到16的说法"><a href="#3-关于从15更新到16的说法" class="headerlink" title="3.关于从15更新到16的说法"></a>3.关于从15更新到16的说法</h2><ul><li><p> 建议:卸载15,再安装16,防止某些服务不支持。</p></li><li><p> 自己操作:直接覆盖更新至 VMware 16,未出现问题。</p></li></ul><hr><h1 id="二:发行版本安装演示"><a href="#二:发行版本安装演示" class="headerlink" title="二:发行版本安装演示"></a>二:发行版本安装演示</h1><h2 id="1-Ubuntu-20-04的安装"><a href="#1-Ubuntu-20-04的安装" class="headerlink" title="1.Ubuntu 20.04的安装"></a>1.Ubuntu 20.04的安装</h2><ul><li><p>下载官方 .iso 镜像</p><blockquote><p> <a href="https://ubuntu.com/#download">https://ubuntu.com/#download</a></p></blockquote></li><li><p>在VMware Workstation 中新建虚拟机,选用已下载的 .iso 镜像文件,自定义相关配置如下</p> <pre class="line-numbers language-none"><code class="language-none">Ubuntu 64位8G内存2*2处理器将虚拟磁盘存储为单个性能(可提升性能)移除打印机命名:Ubuntu2004x64<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>Ubuntu 安装设置</p> <pre class="line-numbers language-none"><code class="language-none">EnglishMinimal Installtion(无多余软件)默认格式化磁盘选择位置:Xi'an用户名:Lee密码:123456跳过Install更新过程。后续可以更新阿里镜像源后再update<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="2-VMware-Tools"><a href="#2-VMware-Tools" class="headerlink" title="2.VMware Tools"></a>2.VMware Tools</h2><ul><li><p>更新阿里镜像源:</p><p> 打开第一个 Software… -> Ubuntu Software -> download from -> other: mirrors.aliyun.com -> 点击 close</p></li><li><p>更新系统:</p><p> 打开第二个 Software -> update -> restart</p></li><li><p>安装 vmware tools:</p> <pre class="line-numbers language-none"><code class="language-none">将 vm.tar.gz 复制到 Desktop打开 terminal命令:ls查找,发现.tar文件命令:tar zxvf VM + Tab键解压缩命令:cd vmare-tools-dirstri进入解压缩文件夹命令:ls查找,发现vmware-install.pl文件命令:sudo ./vmware-install.pl执行安装命令输入密码一路回车安装成功,删除.tar文件<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="3-Ubuntu-20-04设置"><a href="#3-Ubuntu-20-04设置" class="headerlink" title="3.Ubuntu 20.04设置"></a>3.Ubuntu 20.04设置</h2><ul><li><p>Settings</p><p> 自定义</p></li></ul><h2 id="4-其他发行版本的安装指导"><a href="#4-其他发行版本的安装指导" class="headerlink" title="4.其他发行版本的安装指导"></a>4.其他发行版本的安装指导</h2><ul><li> 某些 Linux 发行版(如 Kali)未在 VMware Workstation 中提供,可以找到其相关版本(Debian)。</li><li> 多尝试,找异同。</li></ul><h2 id="5-下载指导"><a href="#5-下载指导" class="headerlink" title="5.下载指导"></a>5.下载指导</h2><blockquote><p> CentOS:<a href="https://www.centos.org/download/">https://www.centos.org/download/</a></p><p> Kali Linux: <a href="https://www.kali.org/downloads/">https://www.kali.org/downloads/</a></p><p> Ubuntu: <a href="https://ubuntu.com/#download">https://ubuntu.com/#download</a></p><p> …… 自己找官网,download 即可</p></blockquote><hr><h1 id="三:步入Linux的世界"><a href="#三:步入Linux的世界" class="headerlink" title="三:步入Linux的世界"></a>三:步入Linux的世界</h1><h2 id="1-Linux究竟需要我们学习什么?——-Linux四大组成部分"><a href="#1-Linux究竟需要我们学习什么?——-Linux四大组成部分" class="headerlink" title="1.Linux究竟需要我们学习什么?—— Linux四大组成部分"></a>1.Linux究竟需要我们学习什么?—— Linux四大组成部分</h2><ul><li><p>Linux 入门不是学 “Linux”</p><ol><li><p> 体验:比较与其他系统的异同点</p></li><li><p> Linux -> <strong>Shell</strong></p></li></ol></li><li><p>Linux 四大组成部分:</p><ol><li><p> <strong>Linux Kernel 内核</strong></p></li><li><p><strong>GNU 工具</strong></p><p> <strong>GNU</strong>(/ɡəˈnuː/)是一个自由的操作系统,其内容软件完全以 GPL 方式发布。这个操作系统是 GNU计划的主要目标,名称来自GNU’s Not Unix!的递归缩写,因为 GNU 的设计类似 Unix,但它不包含具著作权的 Unix 代码。</p><p> GNU 的创始人,理查德·马修·斯托曼,将 GNU 视为“达成社会目的技术方法”。</p></li><li><p> <strong>GUI Desktop 环境</strong></p></li><li><p> <strong>Application 应用</strong></p></li></ol></li></ul><h2 id="2-Linux-是命令还是图形界面?——-GUI-amp-GNU"><a href="#2-Linux-是命令还是图形界面?——-GUI-amp-GNU" class="headerlink" title="2.Linux 是命令还是图形界面?—— GUI & GNU"></a>2.Linux 是命令还是图形界面?—— GUI & GNU</h2><ul><li><p>Linux 真正的名字 —— <strong>GNU / Linux</strong></p><p> Linux 操作系统包涵了 Linux 内核与其他自由软件项目中的GNU组件和软件,可以被称为 GNU/Linux。</p></li><li><p>GUI & GNU <– Linux 内核 <– 硬件(鼠标、键盘)</p><ul><li> GUI —— 图形界面</li><li> GNU —— 命令窗口</li></ul></li></ul><h2 id="3-Linux-内核组成部分"><a href="#3-Linux-内核组成部分" class="headerlink" title="3.Linux 内核组成部分"></a>3.Linux 内核组成部分</h2><ol><li> 硬件设备 管理和使用</li><li> 软件程序(系统) -> 操作进程</li><li> 系统内存(可参考阅读《现代操作系统》)</li><li> 文件管理 —— 增、删、改、查……</li></ol><h2 id="4-文件系统-——-开车警告"><a href="#4-文件系统-——-开车警告" class="headerlink" title="4.文件系统 —— 开车警告"></a>4.文件系统 —— 开车警告</h2><ul><li><p><a href="https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F">文件系统</a>:读、写的标准</p><p> eg:win10 — NTFS Linux — ext, ext2, ext3, ext4…</p></li></ul><h2 id="5-GNU-核心:-coreutils-and-shell"><a href="#5-GNU-核心:-coreutils-and-shell" class="headerlink" title="5.GNU 核心: coreutils and shell"></a>5.GNU 核心: coreutils and shell</h2><p>GNU的来源:Unix上的一些软件,Linux内核本身没有,所以GNU模仿Unix,为Linux写了一些必要的软件。</p><ol><li><p>供 Linux 使用的开发出来的这套工具:<a href="https://zh.wikipedia.org/wiki/GNU%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%88%97%E8%A1%A8">coreutils 软件包</a></p><ul><li> 用来处理文件的工具</li><li> 用来操作文本的工具 eg:vim</li><li> 用来管理进程的工具 eg:System Monitor</li></ul></li><li><p><a href="https://zh.wikipedia.org/wiki/%E6%AE%BC%E5%B1%A4">shell</a></p><p> 一般来说,Shell是指操作系统中提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的层面。</p></li></ol><h2 id="6-Shell:CLI-和-GUI"><a href="#6-Shell:CLI-和-GUI" class="headerlink" title="6.Shell:CLI 和 GUI"></a>6.Shell:CLI 和 GUI</h2><ul><li><p>通常将 shell 分为两类:<strong>命令行与图形界面</strong>,即CLI 和 GUI</p><ul><li> 命令行壳层提供一个<strong>命令行界面(CLI,Command -Line Interface)</strong></li><li> 图形壳层提供一个<strong>图形用户界面(GUI,Graphical User Interface)</strong></li></ul></li><li><p>通常 Linux shell 指:CLI shell</p><ul><li> Bash—— 基础、默认 shell</li><li> Zsh,Z shell —— 自2019年起,macOS 的默认Shell已从 Bash 改为 Zsh。</li><li> Ash,A shell </li></ul></li></ul><h2 id="7-GUI-Desktop-——-XW-KDE-GNOME-Unity-:探究-Linux-那些年的桌面"><a href="#7-GUI-Desktop-——-XW-KDE-GNOME-Unity-:探究-Linux-那些年的桌面" class="headerlink" title="7.GUI Desktop —— XW KDE GNOME Unity :探究 Linux 那些年的桌面"></a>7.GUI Desktop —— XW KDE GNOME Unity :探究 Linux 那些年的桌面</h2><ul><li>GNU 计划 —> 开发 Desktop 版本(满足鼠标等外设的多样使用)<ul><li> X Windows —— 一种以位图方式显示的软件窗口系统,是下面这些的基础</li><li> KDE —— 可看做一种桌面设计风格(有开始菜单,任务栏,最大最小化…)</li><li> GNOME —— 面向目标:Linux</li><li> Unity —— 用于 Ubuntu 的 GNOME</li></ul></li></ul><h2 id="8-结束语:经验介绍"><a href="#8-结束语:经验介绍" class="headerlink" title="8.结束语:经验介绍"></a>8.结束语:经验介绍</h2><ol><li><p>学了什么?</p><ul><li><p> 概念认知,熟悉了解 Linux 及其发展史</p></li><li><p> 学习核心:Linux 内核 和 shell 命令</p></li></ul></li><li><p> 绘制思维导图,理清各概念关系(自由笔记,学会为重)</p></li></ol><hr><h1 id="四:★Bash-shell命令"><a href="#四:★Bash-shell命令" class="headerlink" title="四:★Bash shell命令"></a>四:★Bash shell命令</h1><h2 id="1-CLI-Terminal"><a href="#1-CLI-Terminal" class="headerlink" title="1.CLI Terminal"></a>1.CLI Terminal</h2><ul><li><p> F11 —— 全屏 terminal</p></li><li><p>自己调、看 Preference</p></li><li><p>Text 字体不要随便调,要使用等宽字体</p></li><li><p>认识</p> <pre class="line-numbers language-none"><code class="language-none">lee@lee-virtual-machine:~$userName@deviceName:~ 用户home目录 $ 等待用户输入<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="2-ls初使用"><a href="#2-ls初使用" class="headerlink" title="2.ls初使用"></a>2.ls初使用</h2><blockquote><p> 搞定Linux命令参数,得心应手使用各类命令 —— 授之以渔 先拿ls开张</p></blockquote><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ls</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>ls - list directory contents 展示当前目录下的所有目录</p><p>ls -a -l … 可以多选项,但需要空格间隔开;或直接 ls -al。</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">man</span> <span class="token function">ls</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>进入 User Commands, 并为你展示该命令的详细内容</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ls</span> <span class="token parameter variable">-l</span> -a<span class="token punctuation">(</span>可用 ll 直接代替<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>展示当前目录下的所有文件(包括隐藏文件) PS:隐藏文件以“.”开头</p><h2 id="3-Linux-根目录"><a href="#3-Linux-根目录" class="headerlink" title="3.Linux 根目录"></a>3.Linux 根目录</h2><ul><li><p>Windows 分盘,盘符:D: E: F: …</p><p> 盘符: 路径 eg:E:\DevTools\IDEA\IntelliJ IDEA 2020.3.2\bin </p></li><li><p><strong>Linux 一切皆文件</strong></p><p> /home/lee/Documents/1.txt</p><p> 所以 Linux 尽量不显示隐藏文件,防止误操作。</p></li><li><p> <strong>/ —— Linux 的根目录</strong></p></li></ul><h2 id="4-Linux-根目录解析"><a href="#4-Linux-根目录解析" class="headerlink" title="4.Linux 根目录解析"></a>4.Linux 根目录解析</h2><ul><li><p>目录解析:</p><ul><li><p> / —— 根目录</p></li><li><p> /bin —— GNU工具、ls等系统自带命令</p></li><li><p> /cdrom —— 光驱</p></li><li><p> /etc —— 系统配置文件目录</p></li><li><p> /home —— 主目录,显示所有用户目录</p></li><li><p> /lib —— 库目录</p></li><li><p> /lost+found —— 意外情况(如停电)中有文件存在这</p></li><li><p> /mnt —— 挂载目录(挂载:外在设备与主机连接)</p></li><li><p> proc —— 伪文件系统</p></li><li><p> /run —— 运行目录</p></li><li><p> /tmp —— 临时目录</p></li><li><p> /var —— 可变目录(eg:存放log日志文件)</p></li><li><p> /boot —— 启动目录</p></li><li><p> /dev —— 设备目录</p></li><li><p> /media —— 媒体目录</p></li><li><p> /opt —— 可选目录(第三方软件一般在这)</p></li><li><p> /root —— root用户(管理员)的主目录</p></li><li><p> /sbin —— 系统二进制目录,GNU高级管理员使用的命令工具</p></li><li><p> /srv —— 服务目录(本地服务)</p></li><li><p> /usr —— 用户二进制目录</p></li></ul></li><li><p>FHS —— 文件系统层级标准</p><blockquote><p> pathname.com/fhs(上面目录解析的升级、专业版)</p><p> F:\07.Linux\资料\fhs-2.3.pdf(本地文件所在地)</p></blockquote></li></ul><h2 id="5-Linux-上的路径与Windows-上的路径"><a href="#5-Linux-上的路径与Windows-上的路径" class="headerlink" title="5.Linux 上的路径与Windows 上的路径"></a>5.Linux 上的路径与Windows 上的路径</h2><ul><li><p><strong>绝对路径:文件的完整路径</strong></p><p> 盘符:\文件夹\…\文件名.文件后缀名(Win) ~/文件夹/…/文件名.文件后缀名(Linux)</p><p> eg:G:\Game\Epic\Epic Games\Launcher\Engine\Binaries\Win64\EpicGamesLauncher.exe</p><p> /home/lee/Documents/doc/1.txt</p></li><li><p><strong>相对路径:相对于当前目录的路径</strong></p><p> eg:G:\Game (.)\Epic\Epic Games\Launcher\Engine\Binaries\Win64\EpicGamesLauncher.exe</p></li><li><p>单点符与双点符</p> <pre class="line-numbers language-none"><code class="language-none">单点符.当前目录双点符..当前目录的父目录<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p>注意区分</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">lee@lee-virtual-machine:~$ gedit <span class="token punctuation">(</span>./<span class="token punctuation">)</span>Documents/doc/1.txt <span class="token comment"># 不加/表示相对路径</span>lee@lee-virtual-machine:~$ gedit /Documents/doc/1.txt <span class="token comment"># 加/表示绝对路径</span><span class="token comment"># 等效路径</span>lee@lee-virtual-machine:~$ gedit Documents/doc/1.txtlee@lee-virtual-machine:~$ gedit ./Documents/doc/1.txtlee@lee-virtual-machine:~$ gedit ~/Documents/doc/1.txt<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="6-cd命令"><a href="#6-cd命令" class="headerlink" title="6.cd命令"></a>6.cd命令</h2><p><code>cd</code> — change directory</p><p>切换用户当前工作目录</p><pre class="line-numbers language-none"><code class="language-none">cd [-L|[-P [-e]]] [dir]<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="主要用途"><a href="#主要用途" class="headerlink" title="主要用途"></a>主要用途</h3><ul><li> 切换工作目录至<code>dir</code>。其中<code>dir</code>的表示法可以是绝对路径或相对路径。</li><li> 若参数<code>dir</code>省略,则默认为使用者的shell变量<code>HOME</code>。</li><li> 如果<code>dir</code>指定为<code>~</code>时表示为使用者的shell变量<code>HOME</code>,<code>.</code>表示当前目录,<code>..</code>表示当前目录的上一级目录。</li><li> 环境变量<code>CDPATH</code>是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到<code>CDPATH</code>以便方便访问它们;如果<code>dir</code>以<code>/</code>开头那么<code>CDPATH</code>不会被使用。</li><li> 当<code>shopt</code>选项<code>cdable_vars</code>打开时,如果<code>dir</code>在<code>CDPATH</code>及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。</li></ul><h3 id="选项"><a href="#选项" class="headerlink" title="选项"></a>选项</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token parameter variable">-L</span> (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。<span class="token parameter variable">-P</span> 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。- 当前工作目录将被切换到环境变量<span class="token environment constant">OLDPWD</span>所表示的目录,也就是前一个工作目录。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><h3 id="例子"><a href="#例子" class="headerlink" title="例子"></a>例子</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">cd</span> <span class="token comment"># 进入用户主目录;</span><span class="token builtin class-name">cd</span> / <span class="token comment"># 进入根目录</span><span class="token builtin class-name">cd</span> ~ <span class="token comment"># 进入用户主目录;</span><span class="token builtin class-name">cd</span> <span class="token punctuation">..</span> <span class="token comment"># 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);</span><span class="token builtin class-name">cd</span> <span class="token punctuation">..</span>/<span class="token punctuation">..</span> <span class="token comment"># 返回上两级目录;</span><span class="token builtin class-name">cd</span> <span class="token operator">!</span>$ <span class="token comment"># 把上个命令的参数作为cd参数使用。</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">cd</span> -<span class="token comment"># 命令会首先显示要切换到的目标目录,然后再进入。</span><span class="token builtin class-name">cd</span> <span class="token variable">${<span class="token environment constant">OLDPWD</span>}</span><span class="token comment"># 命令会直接切换到上一个工作目录。</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><h2 id="7-Ctrl-C"><a href="#7-Ctrl-C" class="headerlink" title="7.Ctrl + C"></a>7.Ctrl + C</h2><ul><li><p><code>Ctrl + C</code> —— 强制终止当前命令</p><p> 显示状态:<code>^C</code></p></li><li><p>如何复制、粘贴?</p> <pre class="line-numbers language-none"><code class="language-none">Ctrl + Shift + CCtrl + Shift + V<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p> Linux 终端内无法撤销”Ctrl+Z”</p></li></ul><h2 id="8-ls进阶用法:文件夹下各种匹配过滤符号"><a href="#8-ls进阶用法:文件夹下各种匹配过滤符号" class="headerlink" title="8.ls进阶用法:文件夹下各种匹配过滤符号"></a>8.ls进阶用法:文件夹下各种匹配过滤符号</h2><ul><li><p>ls 命令补充</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># ls + 路径</span><span class="token function">ls</span> <span class="token builtin class-name">.</span><span class="token comment"># 查找当前目录</span><span class="token function">ls</span> ~<span class="token comment"># 查找用户目录</span><span class="token function">ls</span> /<span class="token comment"># 查找根目录</span><span class="token function">ls</span> ./Documents/doc<span class="token comment"># 查找路径对应的目录</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><ul><li><p><strong>文件夹下各种匹配过滤符号</strong></p><p> 直接上例子</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 文件扩展通配符</span>lee@lee-virtual-machine:~$ <span class="token function">ls</span> <span class="token parameter variable">-l</span> fhs-2.3_*.pdf <span class="token comment"># '*'用于多个字符</span>lee@lee-virtual-machine:~$ <span class="token function">ls</span> <span class="token parameter variable">-l</span> fhs-2.3_copy?.pdf <span class="token comment"># '?'用于单个字符</span>lee@lee-virtual-machine:~$ <span class="token function">ls</span> <span class="token parameter variable">-l</span> *.pdf <span class="token comment"># 查找指定文件类型的文件</span><span class="token comment"># 元字符通配符</span>lee@lee-virtual-machine:~$ <span class="token function">ls</span> <span class="token parameter variable">-l</span> f<span class="token punctuation">[</span>a-x<span class="token punctuation">]</span>ck.txt <span class="token comment"># '[]'指定该字符范围</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> <img src="/2021/08/13/Linux/image-20210703081930187.png" class=""><blockquote><p> 自己找的:<a href="https://cloud.tencent.com/developer/article/1114732?from=information.detail.linux">https://cloud.tencent.com/developer/article/1114732?from=information.detail.linux</a></p></blockquote></li><li><p>ls 命令详解</p><blockquote><p> From: <a href="https://wangchujiang.com/linux-command/c/ls.html">https://wangchujiang.com/linux-command/c/ls.html</a></p></blockquote><h4 id="ls"><a href="#ls" class="headerlink" title="ls"></a>ls</h4><p> 显示目录内容列表</p><h4 id="补充说明"><a href="#补充说明" class="headerlink" title="补充说明"></a>补充说明</h4><p> <strong>ls命令</strong> 就是list的缩写,用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。</p><h4 id="语法"><a href="#语法" class="headerlink" title="语法"></a>语法</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ls</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span> <span class="token punctuation">[</span>文件名<span class="token punctuation">..</span>.<span class="token punctuation">]</span> <span class="token punctuation">[</span>-1abcdfgiklmnopqrstuxABCDFGLNQRSUX<span class="token punctuation">]</span> <span class="token punctuation">[</span>-w cols<span class="token punctuation">]</span> <span class="token punctuation">[</span>-T cols<span class="token punctuation">]</span> <span class="token punctuation">[</span>-I pattern<span class="token punctuation">]</span> <span class="token punctuation">[</span>--full-time<span class="token punctuation">]</span> <span class="token punctuation">[</span>--format<span class="token operator">=</span><span class="token punctuation">{</span>long,verbose,commas,across,vertical,single-col‐umn<span class="token punctuation">}</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>--sort<span class="token operator">=</span><span class="token punctuation">{</span>none,time,size,extension<span class="token punctuation">}</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>--time<span class="token operator">=</span><span class="token punctuation">{</span>atime,access,use,ctime,status<span class="token punctuation">}</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>--color<span class="token punctuation">[</span><span class="token operator">=</span><span class="token punctuation">{</span>none,auto,always<span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>--help<span class="token punctuation">]</span> <span class="token punctuation">[</span>--version<span class="token punctuation">]</span> <span class="token punctuation">[</span>--<span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h4 id="选项-1"><a href="#选项-1" class="headerlink" title="选项"></a>选项</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token parameter variable">-C</span> <span class="token comment"># 多列输出,纵向排序。</span><span class="token parameter variable">-F</span> <span class="token comment"># 每个目录名加 "/" 后缀,每个 FIFO 名加 "|" 后缀, 每个可运行名加“ * ”后缀。</span><span class="token parameter variable">-R</span> <span class="token comment"># 递归列出遇到的子目录。</span><span class="token parameter variable">-a</span> <span class="token comment"># 列出所有文件,包括以 "." 开头的隐含文件。</span><span class="token parameter variable">-d</span> <span class="token comment"># 将目录名像其它文件一样列出,而不是列出它们的内容。</span><span class="token parameter variable">-r</span> <span class="token comment"># 逆序排列。</span><span class="token parameter variable">-t</span> <span class="token comment"># 按时间信息排序。</span> -a, <span class="token parameter variable">--all</span> <span class="token comment"># 列出目录中所有文件,包括以“.”开头的文件。</span>-b, <span class="token parameter variable">--escape</span> <span class="token comment"># 把文件名中不可输出的字符用反斜杠加字符编号(就像在 C 语言里一样)的形式列出。</span>-d, <span class="token parameter variable">--directory</span> <span class="token comment"># 将目录名像其它文件一样列出,而不是列出它们的内容。</span> -l, <span class="token parameter variable">--format</span><span class="token operator">=</span>long, <span class="token parameter variable">--format</span><span class="token operator">=</span>verbose <span class="token comment"># 输出的信息从左到右依次包括文件名、文件类型、权限、硬链接数、所有者名、组名、大小(byte)</span> <span class="token comment"># 、及时间信息(如未指明是其它时间即指修改时间)。对于6个月以上的文件或超出未来</span> <span class="token comment"># 1小时的文件,时间信息中的时分将被年代取代。</span> <span class="token comment"># 每个目录列出前,有一行“总块数”显示目录下全部文件所占的磁盘空间。块默认是1024字节;</span> <span class="token comment"># 如果设置了 POSIXLY_CORRECT 的环境变量,除非用“-k”选项,则默认块大小是 512 字节。</span> <span class="token comment"># 每一个硬链接都计入总块数(因此可能重复计数),这无 疑是个缺点。</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h4 id="实例"><a href="#实例" class="headerlink" title="实例"></a>实例</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">$ <span class="token function">ls</span> <span class="token comment"># 仅列出当前目录可见文件</span>$ <span class="token function">ls</span> <span class="token parameter variable">-l</span> <span class="token comment"># 列出当前目录可见文件详细信息</span>$ <span class="token function">ls</span> <span class="token parameter variable">-hl</span> <span class="token comment"># 列出详细信息并以可读大小显示文件大小</span>$ <span class="token function">ls</span> <span class="token parameter variable">-al</span> <span class="token comment"># 列出所有文件(包括隐藏)的详细信息</span>$ <span class="token function">ls</span> --human-readable <span class="token parameter variable">--size</span> <span class="token parameter variable">-1</span> <span class="token parameter variable">-S</span> <span class="token parameter variable">--classify</span> <span class="token comment"># 按文件大小排序</span>$ <span class="token function">du</span> <span class="token parameter variable">-sh</span> * <span class="token operator">|</span> <span class="token function">sort</span> <span class="token parameter variable">-h</span> <span class="token comment"># 按文件大小排序(同上)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p> 显示当前目录下包括影藏文件在内的所有文件列表</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>root@localhost ~<span class="token punctuation">]</span><span class="token comment"># ls -a</span><span class="token builtin class-name">.</span> anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history satools .tcshrc .vimrc<span class="token punctuation">..</span> .bash_history .bash_profile .cshrc install.log.syslog .rnd .ssh .viminfo<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="9-touch命令"><a href="#9-touch命令" class="headerlink" title="9.touch命令"></a>9.touch命令</h2><h3 id="组合命令"><a href="#组合命令" class="headerlink" title="组合命令"></a>组合命令</h3><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">lee@fuck:~/Documents$ <span class="token builtin class-name">cd</span> <span class="token punctuation">..</span>/doc <span class="token variable">$$</span> <span class="token function">ls</span> <span class="token parameter variable">-alF</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>&&: 进行命令的组合</p><h3 id="touch-命令"><a href="#touch-命令" class="headerlink" title="touch 命令"></a>touch 命令</h3><ul><li> <strong>更新文件写入时间</strong></li><li> <strong>创建一个空文件</strong></li></ul><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">lee@fuck:~/Documents$ <span class="token function">touch</span> <span class="token number">2</span>.txt<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h3 id="touch-命令详解"><a href="#touch-命令详解" class="headerlink" title="touch 命令详解"></a>touch 命令详解</h3><p><strong>touch</strong></p><p>创建新的空文件</p><h4 id="补充说明-1"><a href="#补充说明-1" class="headerlink" title="补充说明"></a>补充说明</h4><p><strong>touch命令</strong> 有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。</p><h4 id="选项-2"><a href="#选项-2" class="headerlink" title="选项"></a>选项</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-a:或--time<span class="token operator">=</span>atime或--time<span class="token operator">=</span>access或--time<span class="token operator">=</span>use 只更改存取时间;-c:或--no-create 不建立任何文件;-d:<span class="token operator"><</span>时间日期<span class="token operator">></span> 使用指定的日期时间,而非现在的时间;-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;-m:或--time<span class="token operator">=</span>mtime或--time<span class="token operator">=</span>modify 只更该变动时间;-r:<span class="token operator"><</span>参考文件或目录<span class="token operator">></span> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;-t:<span class="token operator"><</span>日期时间<span class="token operator">></span> 使用指定的日期时间,而非现在的时间;--help:在线帮助;--version:显示版本信息。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="10-cp命令"><a href="#10-cp命令" class="headerlink" title="10.cp命令"></a>10.cp命令</h2><h3 id="cp-命令"><a href="#cp-命令" class="headerlink" title="cp 命令"></a>cp 命令</h3><ul><li><p> <code>cp 源文件 目标文件</code></p></li><li><p> <strong>使用源文件覆盖目标文件</strong>,没有目标文件则创建并覆盖</p></li><li><p>因此,先询问用户是否overwrite:添加参数<code>-i</code>,即<code>cp -i 源文件 目标文件</code>,此时需要回答<code>y/n</code></p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">lee@fuck:~/Documents$ <span class="token function">cp</span> <span class="token number">1</span>.txt <span class="token number">2</span>.txtlee@fuck:~/Documents$ <span class="token function">cp</span> <span class="token parameter variable">-i</span> <span class="token number">1</span>.txt <span class="token number">2</span>.txt<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p>复制目录及文件</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">lee@fuck:~/Documents$ <span class="token function">cp</span> ~/Documents/doc/* ~/Downloads <span class="token comment"># 仅复制指定目录下的所有文件</span>lee@fuck:~/Documents$ <span class="token function">cp</span> <span class="token parameter variable">-r</span> ~/Documents/doc ~/Downloads <span class="token comment"># 递归处理指定目录下的所有文件与子目录</span>lee@fuck:~/Documents$ <span class="token function">cp</span> <span class="token number">1</span>.txt ~/Downloads lee@fuck:~/Documents$ <span class="token function">cp</span> <span class="token parameter variable">-i</span> <span class="token number">1</span>.txt <span class="token punctuation">..</span>/ <span class="token comment"># 使用相对路径,复制到上一层目录 </span>lee@fuck:~/Documents$ <span class="token function">cp</span> <span class="token punctuation">..</span>/pdf/* <span class="token builtin class-name">.</span> <span class="token comment"># .代表当前目录</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><p> <strong>练习</strong></p> <img src="/2021/08/13/Linux/image-20210703110308742.png" class=""> <img src="/2021/08/13/Linux/image-20210703111028125.png" class=""><p> 注:<code>cd -</code> 可以切换当刚才的目录</p></li></ul><h3 id="cp-命令详解"><a href="#cp-命令详解" class="headerlink" title="cp 命令详解"></a>cp 命令详解</h3><p><strong>cp</strong></p><p>将源文件或目录复制到目标文件或目录中</p><h4 id="补充说明-2"><a href="#补充说明-2" class="headerlink" title="补充说明"></a>补充说明</h4><p><strong>cp命令</strong> 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。</p><h4 id="语法-1"><a href="#语法-1" class="headerlink" title="语法"></a>语法</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">cp<span class="token punctuation">(</span>选项<span class="token punctuation">)</span><span class="token punctuation">(</span>参数<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h4 id="选项-3"><a href="#选项-3" class="headerlink" title="选项"></a>选项</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-a:此参数的效果和同时指定<span class="token string">"-dpR"</span>参数相同;-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;-f:强行复制文件或目录,不论目标文件或目录是否已存在;-i:覆盖既有文件之前先询问用户;-l:对源文件建立硬连接,而非复制文件;-p:保留源文件或目录的属性;-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;-s:对源文件建立符号连接,而非复制文件;-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;-b:覆盖已存在的文件目标前将目标文件备份;-v:详细显示命令执行的操作。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h4 id="参数"><a href="#参数" class="headerlink" title="参数"></a>参数</h4><ul><li> 源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用<code>-R</code>选项;</li><li> 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。</li></ul><h2 id="11-Linux终端光标移动技巧"><a href="#11-Linux终端光标移动技巧" class="headerlink" title="11.Linux终端光标移动技巧"></a>11.Linux终端光标移动技巧</h2><ul><li><p> <code>Tab</code> 键补全路径名</p></li><li><p> <code>Ctrl</code> 键加左右键,便于跳转单词(下划线命名法的用处)</p></li><li><p> <code>Ctrl + L</code> 清屏,实际是将terminal中已有内容全部上移</p></li><li><p> <code>Ctrl + A</code> 跳到命令头部,<code>Ctrl + E</code> 跳到命令尾部</p></li><li><p> <code>Ctrl + H</code> 将当前光标的前一个字母删除,<code>Ctrl + T</code> 将当前光标的前一个字母向后移(有空格不影响,跳过)</p></li><li><p>没有左右方向键(买了HHKB键盘无刻版),可以用 <code>Ctrl + B</code> 和 <code>Ctrl + F</code> 代替(装13)</p><p> 上下键 —— <code>Ctrl + P</code> <code>Ctrl + U</code></p></li><li><p> <code>Ctrl + U</code> 删除当前光标前的内容,<code>Ctrl + K</code> 删除当前光标的后续命令</p></li><li><p> <code>Ctrl + R</code> 搜索已使用过的命令</p></li></ul><h2 id="12-lnk链接文件"><a href="#12-lnk链接文件" class="headerlink" title="12.lnk链接文件"></a>12.lnk链接文件</h2><blockquote><p> 其他学习参考:<a href="https://blog.csdn.net/stupid56862/article/details/90785420">https://blog.csdn.net/stupid56862/article/details/90785420</a></p></blockquote><h3 id="引入:windows中的快捷方式-lnk"><a href="#引入:windows中的快捷方式-lnk" class="headerlink" title="引入:windows中的快捷方式(.lnk)"></a>引入:windows中的快捷方式(.lnk)</h3><p>Linux?</p><ol><li><p>符号链接(软链接), symbolic link —— 快捷方式</p><p> 源文件(夹)必须存在;软链接实际是一种”指向“作用,是一个独立的新文件</p></li><li><p>硬链接, hard link</p><p> 源文件(夹)必须存在;以文件副本的形式存在,但不占用实际空间(Linux中)</p><p> 与windows区分:win中副本就是一个新的文件,而Linux中副本(硬链接)与源文件关联</p></li></ol><h3 id="ln-命令简介"><a href="#ln-命令简介" class="headerlink" title="ln 命令简介"></a>ln 命令简介</h3><p><strong>ln</strong></p><p>用来为文件创建链接</p><h4 id="语法-2"><a href="#语法-2" class="headerlink" title="语法"></a>语法</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ln</span> <span class="token punctuation">[</span>选项<span class="token punctuation">]</span><span class="token punctuation">..</span>. <span class="token punctuation">[</span>-T<span class="token punctuation">]</span> 目标 链接名 <span class="token punctuation">(</span>第一种格式<span class="token punctuation">)</span> 或:ln <span class="token punctuation">[</span>选项<span class="token punctuation">]</span><span class="token punctuation">..</span>. 目标 <span class="token punctuation">(</span>第二种格式<span class="token punctuation">)</span> 或:ln <span class="token punctuation">[</span>选项<span class="token punctuation">]</span><span class="token punctuation">..</span>. 目标<span class="token punctuation">..</span>. 目录 <span class="token punctuation">(</span>第三种格式<span class="token punctuation">)</span> 或:ln <span class="token punctuation">[</span>选项<span class="token punctuation">]</span><span class="token punctuation">..</span>. <span class="token parameter variable">-t</span> 目录 目标<span class="token punctuation">..</span>. <span class="token punctuation">(</span>第四种格式<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><h4 id="选项-4"><a href="#选项-4" class="headerlink" title="选项"></a>选项</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"> --backup<span class="token punctuation">[</span><span class="token operator">=</span>CONTROL<span class="token punctuation">]</span> 为每个已存在的目标文件创建备份文件<span class="token parameter variable">-b</span> 类似--backup,但不接受任何参数-d, -F, <span class="token parameter variable">--directory</span> 创建指向目录的硬链接<span class="token punctuation">(</span>只适用于超级用户<span class="token punctuation">)</span>-f, <span class="token parameter variable">--force</span> 强行删除任何已存在的目标文件-i, <span class="token parameter variable">--interactive</span> 覆盖既有文件之前先询问用户;-L, <span class="token parameter variable">--logical</span> 取消引用作为符号链接的目标-n, --no-dereference 把符号链接的目的目录视为一般文件;-P, <span class="token parameter variable">--physical</span> 直接将硬链接到符号链接-r, <span class="token parameter variable">--relative</span> 创建相对于链接位置的符号链接-s, <span class="token parameter variable">--symbolic</span> 对源文件建立符号链接,而非硬链接;-S, <span class="token parameter variable">--suffix</span><span class="token operator">=</span>SUFFIX 用<span class="token string">"-b"</span>参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;-t, --target-directory<span class="token operator">=</span>DIRECTORY 指定要在其中创建链接的DIRECTORY-T, --no-target-directory 将“LINK_NAME”视为常规文件-v, <span class="token parameter variable">--verbose</span> 打印每个链接文件的名称 <span class="token parameter variable">--help</span> 显示此帮助信息并退出 <span class="token parameter variable">--version</span> 显示版本信息并退出<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="实战"><a href="#实战" class="headerlink" title="实战"></a>实战</h3><img src="/2021/08/13/Linux/image-20210703223745034.png" class=""><p>思考:cp 一个软链接文件,会如何? —— 相当于把快捷方式发送给别人,没用</p><h2 id="13-mv命令"><a href="#13-mv命令" class="headerlink" title="13.mv命令"></a>13.mv命令</h2><ul><li><p><code>mv</code> —— move(rename) files</p><blockquote><p> mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。</p></blockquote><ul><li> <code>mv 文件名 新的文件名</code></li><li><code>mv 文件 目标目录</code></li></ul></li><li><p>骚操作:</p> <img src="/2021/08/13/Linux/image-20210703231401714-16288406782401.png" class=""><p> 注:<code>cd !$</code> 表示进入上一个命令的最后一个路径</p></li></ul><h2 id="14-rm——最佳年度删库跑路"><a href="#14-rm——最佳年度删库跑路" class="headerlink" title="14.rm——最佳年度删库跑路"></a>14.rm——最佳年度删库跑路</h2><ul><li><p><strong>警告</strong>:非常危险,直接进局</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">rm</span> <span class="token parameter variable">-rf</span> /*<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> 直接删除,无法恢复 </p></li><li><p> <code>rm</code> —— remove files </p></li><li><p> 提醒用户,使用 <code>rm -i 文件(目录)</code> </p></li><li><h4 id="rm"><a href="#rm" class="headerlink" title="rm"></a>rm</h4><p> 用于删除给定的文件和目录</p><h4 id="语法-3"><a href="#语法-3" class="headerlink" title="语法"></a>语法</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">rm</span> <span class="token punctuation">(</span>选项<span class="token punctuation">)</span><span class="token punctuation">(</span>参数<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h4 id="选项-5"><a href="#选项-5" class="headerlink" title="选项"></a>选项</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;-f:强制删除文件或目录;-i:删除已有文件或目录之前先询问用户;-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;--preserve-root:不对根目录进行递归操作;-v:显示指令的详细执行过程。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h4 id="参数-1"><a href="#参数-1" class="headerlink" title="参数"></a>参数</h4><p> 文件:指定被删除的文件列表,如果参数中含有目录,则必须加上<code>-r</code>或者<code>-R</code>选项。</p></li></ul><h2 id="15-文件(夹)"><a href="#15-文件(夹)" class="headerlink" title="15.文件(夹)"></a>15.文件(夹)</h2><h3 id="创建及删除"><a href="#创建及删除" class="headerlink" title="创建及删除"></a>创建及删除</h3><ul><li><p> 创建文件:<code>touch</code></p></li><li><p>创建文件夹:<code>mkdir </code> (make directory)</p><p> eg:</p> <img src="/2021/08/13/Linux/image-20210710120110213-16288407801242.png" class=""></li><li><p>创建多级目录:<code>mkdir -p 目录名</code></p><p> eg:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">lee@fuck:~/Project/java$ <span class="token function">mkdir</span> <span class="token parameter variable">-p</span> js/src/util<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>删除目录:</p><ul><li> <code>rmdir</code> 只能删除空目录,不好用</li><li> <code>rm</code> 注意加 <code>-i</code> !</li></ul></li></ul><h3 id="文件类型"><a href="#文件类型" class="headerlink" title="文件类型"></a>文件类型</h3><ul><li><p> 查看文件类型:<code>file 1.txt</code> </p></li><li><h4 id="file"><a href="#file" class="headerlink" title="file"></a>file</h4><p> 用来探测给定文件的类型</p><h4 id="补充说明-3"><a href="#补充说明-3" class="headerlink" title="补充说明"></a>补充说明</h4><p> <strong>file命令</strong> 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。</p><h4 id="选项-6"><a href="#选项-6" class="headerlink" title="选项"></a>选项</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-b:列出辨识结果时,不显示文件名称;-c:详细显示指令执行过程,便于排错或分析程序执行的情形;-f<span class="token operator"><</span>名称文件<span class="token operator">></span>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称;-L:直接显示符号连接所指向的文件类别;-m<span class="token operator"><</span>魔法数字文件<span class="token operator">></span>:指定魔法数字文件;-v:显示版本信息;-z:尝试去解读压缩文件的内容。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h4 id="参数-2"><a href="#参数-2" class="headerlink" title="参数"></a>参数</h4><p> 文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。</p></li></ul><h3 id="cat-more-less"><a href="#cat-more-less" class="headerlink" title="cat, more, less"></a>cat, more, less</h3><blockquote><p> 这三个命令实际上并不常用,只能查看文件(相当于win中的用记事本查看内容)</p></blockquote><ul><li><p><code>cat</code> —— 查看文件内容(无滚轮则很难翻页,适用短文件)</p><ul><li><h4 id="cat"><a href="#cat" class="headerlink" title="cat"></a>cat</h4><p> 连接多个文件并打印到标准输出。</p><h4 id="主要用途-1"><a href="#主要用途-1" class="headerlink" title="主要用途"></a>主要用途</h4><ul><li> 显示文件内容,如果没有文件或文件为<code>-</code>则读取标准输入。</li><li> 将多个文件的内容进行连接并打印到标准输出。</li><li> 显示文件内容中的不可见字符(控制字符、换行符、制表符等)。</li></ul><h4 id="选项-7"><a href="#选项-7" class="headerlink" title="选项"></a>选项</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">长选项与短选项等价-A, --show-all 等价于<span class="token string">"-vET"</span>组合选项。-b, --number-nonblank 只对非空行编号,从1开始编号,覆盖<span class="token string">"-n"</span>选项。<span class="token parameter variable">-e</span> 等价于<span class="token string">"-vE"</span>组合选项。-E, --show-ends 在每行的结尾显示<span class="token string">'$'</span>字符。-n, <span class="token parameter variable">--number</span> 对所有行编号,从1开始编号。-s, --squeeze-blank 压缩连续的空行到一行。<span class="token parameter variable">-t</span> 等价于<span class="token string">"-vT"</span>组合选项。-T, --show-tabs 使用<span class="token string">"^I"</span>表示TAB(制表符)。<span class="token parameter variable">-u</span> POSIX兼容性选项,无意义。-v, --show-nonprinting 使用<span class="token string">"^"</span>和<span class="token string">"M-"</span>符号显示控制字符,除了LFD(line feed,即换行符<span class="token string">'\n'</span>)和TAB(制表符)。<span class="token parameter variable">--help</span> 显示帮助信息并退出。<span class="token parameter variable">--version</span> 显示版本信息并退出。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul></li><li><p><code>more</code> —— 显示文件内容,每次一屏(也不常用)</p><ul><li><h4 id="more"><a href="#more" class="headerlink" title="more"></a>more</h4><p> 显示文件内容,每次显示一屏</p><h4 id="补充说明-4"><a href="#补充说明-4" class="headerlink" title="补充说明"></a>补充说明</h4><p> <strong>more命令</strong> 是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。</p><p> 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:</p><ul><li> 按 <code>Space</code> 键:显示文本的下一屏内容。</li><li> 按 <code>Enter</code> 键:只显示文本的下一行内容。</li><li> 按斜线符<code>|</code>:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。</li><li> 按H键:显示帮助屏,该屏上有相关的帮助信息。</li><li> 按B键:显示上一屏内容。</li><li> 按Q键:退出more命令。</li></ul></li></ul></li><li><p><code>less</code> —— (只查看,也不常用23333)</p><ul><li><h4 id="less"><a href="#less" class="headerlink" title="less"></a>less</h4><p> 分屏上下翻页浏览文件内容</p><h4 id="补充说明-5"><a href="#补充说明-5" class="headerlink" title="补充说明"></a>补充说明</h4><p> <strong>less命令</strong> 的作用与more十分相似,都可以用来浏览文字档案的内容,不同的是less命令允许用户向前或向后浏览文件,而more命令只能向前浏览。<strong>用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。</strong></p></li></ul></li></ul><h3 id="tail-和-head"><a href="#tail-和-head" class="headerlink" title="tail 和 head"></a>tail 和 head</h3><blockquote><p> 对于某些人查看log文件可能有用</p></blockquote><ul><li><p><code>tail</code> —— 在屏幕上显示指定文件的末尾若干行</p><p> 默认显示文件末尾10行,<code>-n</code> 可以指定末尾若干行</p></li><li><p><code>head</code> —— 显示文件的开头部分</p><p> 默认显示文件前10行,<code>-n</code> 可以指定前若干行</p></li></ul><blockquote><p> <strong>章节结束语和经验</strong>:基础命令,必须掌握,勤加练习</p></blockquote><hr><h1 id="五:Shell"><a href="#五:Shell" class="headerlink" title="五:Shell +"></a>五:Shell +</h1><blockquote><p> 主要内容:Linux中的任务管理器</p><p> GUI位置:menu -> Utilities -> System Monitor</p></blockquote><h2 id="1-ps和top命令"><a href="#1-ps和top命令" class="headerlink" title="1.ps和top命令"></a>1.ps和top命令</h2><ul><li><p>ps 命令</p><ul><li><p> ps — process status</p></li><li><p> <strong>报告当前系统的进程状态</strong></p></li><li><p>常用实例:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ps</span> axo pid,comm,pcpu <span class="token comment"># 查看进程的PID、名称以及CPU 占用率</span><span class="token function">ps</span> aux <span class="token operator">|</span> <span class="token function">sort</span> <span class="token parameter variable">-rnk</span> <span class="token number">4</span> <span class="token comment"># 按内存资源的使用量对进程进行排序</span><span class="token function">ps</span> aux <span class="token operator">|</span> <span class="token function">sort</span> <span class="token parameter variable">-nk</span> <span class="token number">3</span> <span class="token comment"># 按 CPU 资源的使用量对进程进行排序</span><span class="token function">ps</span> <span class="token parameter variable">-A</span> <span class="token comment"># 显示所有进程信息</span><span class="token function">ps</span> <span class="token parameter variable">-u</span> root <span class="token comment"># 显示指定用户信息</span><span class="token function">ps</span> <span class="token parameter variable">-efL</span> <span class="token comment"># 查看线程数</span><span class="token function">ps</span> <span class="token parameter variable">-e</span> <span class="token parameter variable">-o</span> <span class="token string">"%C : %p :%z : %a"</span><span class="token operator">|</span><span class="token function">sort</span> <span class="token parameter variable">-k5</span> <span class="token parameter variable">-nr</span> <span class="token comment"># 查看进程并按内存使用大小排列</span><span class="token function">ps</span> <span class="token parameter variable">-ef</span> <span class="token comment"># 显示所有进程信息,连同命令行</span><span class="token function">ps</span> <span class="token parameter variable">-ef</span> <span class="token operator">|</span> <span class="token function">grep</span> <span class="token function">ssh</span> <span class="token comment"># ps 与grep 常用组合用法,查找特定进程</span><span class="token function">ps</span> <span class="token parameter variable">-C</span> nginx <span class="token comment"># 通过名字或命令搜索进程</span><span class="token function">ps</span> aux <span class="token parameter variable">--sort</span><span class="token operator">=</span>-pcpu,+pmem <span class="token comment"># CPU或者内存进行排序,-降序,+升序</span><span class="token function">ps</span> <span class="token parameter variable">-f</span> <span class="token parameter variable">--forest</span> <span class="token parameter variable">-C</span> nginx <span class="token comment"># 用树的风格显示进程的层次关系</span><span class="token function">ps</span> <span class="token parameter variable">-o</span> pid,uname,comm <span class="token parameter variable">-C</span> nginx <span class="token comment"># 显示一个父进程的子进程</span><span class="token function">ps</span> <span class="token parameter variable">-e</span> <span class="token parameter variable">-o</span> pid,uname<span class="token operator">=</span>USERNAME,pcpu<span class="token operator">=</span>CPU_USAGE,pmem,comm <span class="token comment"># 重定义标签</span><span class="token function">ps</span> <span class="token parameter variable">-e</span> <span class="token parameter variable">-o</span> pid,comm,etime <span class="token comment"># 显示进程运行的时间</span><span class="token function">ps</span> <span class="token parameter variable">-aux</span> <span class="token operator">|</span> <span class="token function">grep</span> named <span class="token comment"># 查看named进程详细信息</span><span class="token function">ps</span> <span class="token parameter variable">-o</span> <span class="token builtin class-name">command</span> <span class="token parameter variable">-p</span> <span class="token number">91730</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-n</span> 2p <span class="token comment"># 通过进程id获取服务名称</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul></li><li><p>top 命令</p><ul><li> 显示或管理执行中的程序</li></ul></li></ul><h2 id="2-kill命令"><a href="#2-kill命令" class="headerlink" title="2.kill命令"></a>2.kill命令</h2><ul><li><p> 杀死进程:<code>kill PID</code></p></li><li><p>kill 详解</p><h4 id="kill"><a href="#kill" class="headerlink" title="kill"></a>kill</h4><p> 发送信号到进程。</p><h4 id="内建命令"><a href="#内建命令" class="headerlink" title="内建命令"></a>内建命令</h4><h5 id="概要"><a href="#概要" class="headerlink" title="概要"></a>概要</h5> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">kill</span> <span class="token punctuation">[</span>-s sigspec <span class="token operator">|</span> <span class="token parameter variable">-n</span> signum <span class="token operator">|</span> -sigspec<span class="token punctuation">]</span> pid <span class="token operator">|</span> jobspec <span class="token punctuation">..</span>.<span class="token function">kill</span> <span class="token parameter variable">-l</span> <span class="token punctuation">[</span>sigspec<span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><blockquote><p> 注:pid:进程ID,jobspec:作业标识符</p></blockquote><h5 id="主要用途-2"><a href="#主要用途-2" class="headerlink" title="主要用途"></a>主要用途</h5><ul><li> 发送信号到作业或进程(可以为多个)。</li><li> 列出信号。</li></ul><h5 id="选项-8"><a href="#选项-8" class="headerlink" title="选项"></a>选项</h5> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token parameter variable">-s</span> sig 信号名称。<span class="token parameter variable">-n</span> sig 信号名称对应的数字。<span class="token parameter variable">-l</span> 列出信号名称。如果在该选项后提供了数字那么假设它是信号名称对应的数字。<span class="token parameter variable">-L</span> 等价于-l选项。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><h5 id="实例-1"><a href="#实例-1" class="headerlink" title="实例"></a>实例</h5> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">[</span>user2@pc<span class="token punctuation">]</span> <span class="token function">kill</span> <span class="token parameter variable">-l</span> <span class="token number">9</span>KILL<span class="token comment"># 列出所有信号名称:</span><span class="token punctuation">[</span>user2@pc<span class="token punctuation">]</span> <span class="token function">kill</span> <span class="token parameter variable">-l</span> <span class="token number">1</span><span class="token punctuation">)</span> SIGHUP <span class="token number">2</span><span class="token punctuation">)</span> SIGINT <span class="token number">3</span><span class="token punctuation">)</span> SIGQUIT <span class="token number">4</span><span class="token punctuation">)</span> SIGILL <span class="token number">5</span><span class="token punctuation">)</span> SIGTRAP <span class="token number">6</span><span class="token punctuation">)</span> SIGABRT <span class="token number">7</span><span class="token punctuation">)</span> SIGBUS <span class="token number">8</span><span class="token punctuation">)</span> SIGFPE <span class="token number">9</span><span class="token punctuation">)</span> SIGKILL <span class="token number">10</span><span class="token punctuation">)</span> SIGUSR1 <span class="token number">11</span><span class="token punctuation">)</span> SIGSEGV <span class="token number">12</span><span class="token punctuation">)</span> SIGUSR2<span class="token number">13</span><span class="token punctuation">)</span> SIGPIPE <span class="token number">14</span><span class="token punctuation">)</span> SIGALRM <span class="token number">15</span><span class="token punctuation">)</span> SIGTERM <span class="token number">16</span><span class="token punctuation">)</span> SIGSTKFLT<span class="token number">17</span><span class="token punctuation">)</span> SIGCHLD <span class="token number">18</span><span class="token punctuation">)</span> SIGCONT <span class="token number">19</span><span class="token punctuation">)</span> SIGSTOP <span class="token number">20</span><span class="token punctuation">)</span> SIGTSTP<span class="token number">21</span><span class="token punctuation">)</span> SIGTTIN <span class="token number">22</span><span class="token punctuation">)</span> SIGTTOU <span class="token number">23</span><span class="token punctuation">)</span> SIGURG <span class="token number">24</span><span class="token punctuation">)</span> SIGXCPU<span class="token number">25</span><span class="token punctuation">)</span> SIGXFSZ <span class="token number">26</span><span class="token punctuation">)</span> SIGVTALRM <span class="token number">27</span><span class="token punctuation">)</span> SIGPROF <span class="token number">28</span><span class="token punctuation">)</span> SIGWINCH<span class="token number">29</span><span class="token punctuation">)</span> SIGIO <span class="token number">30</span><span class="token punctuation">)</span> SIGPWR <span class="token number">31</span><span class="token punctuation">)</span> SIGSYS <span class="token number">34</span><span class="token punctuation">)</span> SIGRTMIN<span class="token number">35</span><span class="token punctuation">)</span> SIGRTMIN+1 <span class="token number">36</span><span class="token punctuation">)</span> SIGRTMIN+2 <span class="token number">37</span><span class="token punctuation">)</span> SIGRTMIN+3 <span class="token number">38</span><span class="token punctuation">)</span> SIGRTMIN+4<span class="token number">39</span><span class="token punctuation">)</span> SIGRTMIN+5 <span class="token number">40</span><span class="token punctuation">)</span> SIGRTMIN+6 <span class="token number">41</span><span class="token punctuation">)</span> SIGRTMIN+7 <span class="token number">42</span><span class="token punctuation">)</span> SIGRTMIN+8<span class="token number">43</span><span class="token punctuation">)</span> SIGRTMIN+9 <span class="token number">44</span><span class="token punctuation">)</span> SIGRTMIN+10 <span class="token number">45</span><span class="token punctuation">)</span> SIGRTMIN+11 <span class="token number">46</span><span class="token punctuation">)</span> SIGRTMIN+12<span class="token number">47</span><span class="token punctuation">)</span> SIGRTMIN+13 <span class="token number">48</span><span class="token punctuation">)</span> SIGRTMIN+14 <span class="token number">49</span><span class="token punctuation">)</span> SIGRTMIN+15 <span class="token number">50</span><span class="token punctuation">)</span> SIGRTMAX-14<span class="token number">51</span><span class="token punctuation">)</span> SIGRTMAX-13 <span class="token number">52</span><span class="token punctuation">)</span> SIGRTMAX-12 <span class="token number">53</span><span class="token punctuation">)</span> SIGRTMAX-11 <span class="token number">54</span><span class="token punctuation">)</span> SIGRTMAX-10<span class="token number">55</span><span class="token punctuation">)</span> SIGRTMAX-9 <span class="token number">56</span><span class="token punctuation">)</span> SIGRTMAX-8 <span class="token number">57</span><span class="token punctuation">)</span> SIGRTMAX-7 <span class="token number">58</span><span class="token punctuation">)</span> SIGRTMAX-6<span class="token number">59</span><span class="token punctuation">)</span> SIGRTMAX-5 <span class="token number">60</span><span class="token punctuation">)</span> SIGRTMAX-4 <span class="token number">61</span><span class="token punctuation">)</span> SIGRTMAX-3 <span class="token number">62</span><span class="token punctuation">)</span> SIGRTMAX-2<span class="token number">63</span><span class="token punctuation">)</span> SIGRTMAX-1 <span class="token number">64</span><span class="token punctuation">)</span> SIGRTMAX<span class="token comment"># 下面是常用的信号。</span><span class="token comment"># 只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。</span>HUP <span class="token number">1</span> 终端挂断INT <span class="token number">2</span> 中断(同 Ctrl + C)QUIT <span class="token number">3</span> 退出(同 Ctrl + <span class="token punctuation">\</span>)KILL <span class="token number">9</span> 强制终止<span class="token environment constant">TERM</span> <span class="token number">15</span> 终止CONT <span class="token number">18</span> 继续(与STOP相反,fg/bg命令)STOP <span class="token number">19</span> 暂停(同 Ctrl + Z)<span class="token comment"># 以下发送KILL信号的形式等价。当然还有更多的等价形式,在此不一一列举了。</span><span class="token punctuation">[</span>user2@pc<span class="token punctuation">]</span> <span class="token function">kill</span> <span class="token parameter variable">-s</span> SIGKILL PID<span class="token punctuation">[</span>user2@pc<span class="token punctuation">]</span> <span class="token function">kill</span> <span class="token parameter variable">-s</span> KILL PID<span class="token punctuation">[</span>user2@pc<span class="token punctuation">]</span> <span class="token function">kill</span> <span class="token parameter variable">-n</span> <span class="token number">9</span> PID<span class="token punctuation">[</span>user2@pc<span class="token punctuation">]</span> <span class="token function">kill</span> <span class="token parameter variable">-9</span> PID<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h5 id="注意"><a href="#注意" class="headerlink" title="注意"></a>注意</h5><ol><li> <code>bash</code>的作业控制命令包括<code>bg fg kill wait disown suspend</code>。</li><li> 该命令是bash内建命令,相关的帮助信息请查看<code>help</code>命令。</li></ol><h4 id="外部命令"><a href="#外部命令" class="headerlink" title="外部命令"></a>外部命令</h4><h5 id="概要-1"><a href="#概要-1" class="headerlink" title="概要"></a>概要</h5> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">kill</span> <span class="token punctuation">[</span>-signal<span class="token operator">|</span>-s signal<span class="token operator">|</span>-p<span class="token punctuation">]</span> <span class="token punctuation">[</span>-q value<span class="token punctuation">]</span> <span class="token punctuation">[</span>-a<span class="token punctuation">]</span> <span class="token punctuation">[</span>--<span class="token punctuation">]</span> pid<span class="token operator">|</span>name<span class="token punctuation">..</span>.<span class="token function">kill</span> <span class="token parameter variable">-l</span> <span class="token punctuation">[</span>number<span class="token punctuation">]</span> <span class="token operator">|</span> <span class="token parameter variable">-L</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><h5 id="选项-9"><a href="#选项-9" class="headerlink" title="选项"></a>选项</h5> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-s, <span class="token parameter variable">--signal</span> signal 要发送的信号,可能是信号名称或信号对应的数字。-l, <span class="token parameter variable">--list</span> <span class="token punctuation">[</span>number<span class="token punctuation">]</span> 打印信号名称或转换给定数字到信号名称。信号名称可参考文件(/usr/include/linux/signal.h)。-L, <span class="token parameter variable">--table</span> 和<span class="token string">'-l'</span>选项类似,但是输出信号名称以及信号对应的数字。-a, <span class="token parameter variable">--all</span> 不要限制“命令名到pid”的转换为具有与当前进程相同的<span class="token environment constant">UID</span>的进程。-p, <span class="token parameter variable">--pid</span> 打印目标进程的PID而不发送信号。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h5 id="实例-2"><a href="#实例-2" class="headerlink" title="实例"></a>实例</h5> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token operator">></span> <span class="token function">sleep</span> <span class="token number">20</span> <span class="token operator">&</span><span class="token comment"># 列出对应的PID。</span><span class="token operator">></span> <span class="token function">kill</span> <span class="token parameter variable">-p</span> <span class="token function">sleep</span><span class="token number">23021</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre><h5 id="注意-1"><a href="#注意-1" class="headerlink" title="注意"></a>注意</h5><ol><li> 该命令是<code>GNU coreutils</code>包中的命令,相关的帮助信息请查看<code>man -s 1 kill</code>或<code>info coreutils 'kill invocation'</code>。</li><li> 启动或关闭内建命令请查看<code>enable</code>命令,关于同名优先级的问题请查看<code>builtin</code>命令的例子部分的相关讨论。</li><li> 与<code>kill</code>命令类似的有<code>xkill</code>,<code>pkill</code>,<code>killall</code>等,用于不同的目的和场景。</li></ol></li></ul><h2 id="3-挂载"><a href="#3-挂载" class="headerlink" title="3.挂载"></a>3.挂载</h2><h3 id="挂载的含义"><a href="#挂载的含义" class="headerlink" title="挂载的含义"></a>挂载的含义</h3><ul><li> 挂载 —— U盘等硬件介质连接到主机上,生成一个虚拟硬盘的过程</li><li> Linux中U盘的挂载目录:<code>/media/lee/USB/</code></li></ul><h3 id="挂载的意义"><a href="#挂载的意义" class="headerlink" title="挂载的意义"></a>挂载的意义</h3><ul><li> 如果没有自动挂载,需要手动为硬件介质选择挂载点</li><li> 有的目录没有写入权限(如<code>/mnt</code>),故需要更改挂载点</li><li> 避免自动播放(u盘自动运行病毒)</li></ul><h3 id="选听——安卓设备挂载"><a href="#选听——安卓设备挂载" class="headerlink" title="选听——安卓设备挂载"></a>选听——安卓设备挂载</h3><p>通过实验,挂载的实质是:将一个分区挂载到一个目录上</p><h2 id="4-mount命令"><a href="#4-mount命令" class="headerlink" title="4.mount命令"></a>4.mount命令</h2><ul><li><p><code>mount</code>:用于挂载Linux系统外的文件</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">mount</span> /dev/sdc1 /mnt<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p><code>umount</code>:用于卸载已经加载的文件系统</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">umount</span> /mnt<span class="token function">umount</span> /media/lee/USB<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><blockquote><p> 注:<code>/mnt</code> 是一个通用挂载点,但这里不允许写入</p></blockquote></li></ul><h2 id="5-df和du"><a href="#5-df和du" class="headerlink" title="5.df和du"></a>5.df和du</h2><h3 id="df"><a href="#df" class="headerlink" title="df"></a>df</h3><ul><li><p> 用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。</p></li><li><h4 id="选项-10"><a href="#选项-10" class="headerlink" title="选项"></a>选项</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-a或--all:包含全部的文件系统;--block-size<span class="token operator">=</span><span class="token operator"><</span>区块大小<span class="token operator">></span>:以指定的区块大小来显示区块数目;-h或--human-readable:以可读性较高的方式来显示信息;-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;-i或--inodes:显示inode的信息;-k或--kilobytes:指定区块大小为1024字节;-l或--local:仅显示本地端的文件系统;-m或--megabytes:指定区块大小为1048576字节;-P或--portability:使用POSIX的输出格式;-t<span class="token operator"><</span>文件系统类型<span class="token operator">></span>或--type<span class="token operator">=</span><span class="token operator"><</span>文件系统类型<span class="token operator">></span>:仅显示指定文件系统类型的磁盘信息;-T或--print-type:显示文件系统的类型;-x<span class="token operator"><</span>文件系统类型<span class="token operator">></span>或--exclude-type<span class="token operator">=</span><span class="token operator"><</span>文件系统类型<span class="token operator">></span>:不要显示指定文件系统类型的磁盘信息;<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li> <img src="/2021/08/13/Linux/image-20210731214322879.png" class=""></li></ul><h3 id="du"><a href="#du" class="headerlink" title="du"></a>du</h3><ul><li><p> 显示每个文件和目录的磁盘使用空间</p></li><li><h4 id="选项-11"><a href="#选项-11" class="headerlink" title="选项"></a>选项</h4> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-a, <span class="token parameter variable">--all</span> 显示目录中个别文件的大小。-B, --block-size<span class="token operator">=</span>大小 使用指定字节数的块-b, <span class="token parameter variable">--bytes</span> 显示目录或文件大小时,以byte为单位。-c, <span class="token parameter variable">--total</span> 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。-D, --dereference-args 显示指定符号链接的源文件大小。-H, <span class="token parameter variable">--si</span> 与-h参数相同,但是K,M,G是以1000为换算单位。-h, --human-readable 以K,M,G为单位,提高信息的可读性。-k, <span class="token parameter variable">--kilobytes</span> 以KB<span class="token punctuation">(</span>1024bytes<span class="token punctuation">)</span>为单位输出。-l, --count-links 重复计算硬件链接的文件。-m, <span class="token parameter variable">--megabytes</span> 以MB为单位输出。-L<span class="token operator"><</span>符号链接<span class="token operator">></span>, --dereference<span class="token operator"><</span>符号链接<span class="token operator">></span> 显示选项中所指定符号链接的源文件大小。-P, --no-dereference 不跟随任何符号链接<span class="token punctuation">(</span>默认<span class="token punctuation">)</span>-0, <span class="token parameter variable">--null</span> 将每个空行视作0 字节而非换行符-S, --separate-dirs 显示个别目录的大小时,并不含其子目录的大小。-s, <span class="token parameter variable">--summarize</span> 仅显示总计,只列出最后加总的值。-x, --one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。-X<span class="token operator"><</span>文件<span class="token operator">></span>, --exclude-from<span class="token operator">=</span><span class="token operator"><</span>文件<span class="token operator">></span> 在<span class="token operator"><</span>文件<span class="token operator">></span>指定目录或文件。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h4 id="实例-3"><a href="#实例-3" class="headerlink" title="实例"></a>实例</h4><p> 文件从大到小排序</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ <span class="token function">du</span> <span class="token parameter variable">-sh</span> * <span class="token operator">|</span><span class="token function">sort</span> <span class="token parameter variable">-rh</span><span class="token number">2</span>.9M <span class="token builtin class-name">command</span><span class="token number">1</span>.9M assets148K template72K package-lock.json52K dist28K build16K README.md<span class="token number">4</span>.0K renovate.json<span class="token number">4</span>.0K package.json<span class="token number">4</span>.0K LICENSE<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p> 只显示当前目录下子目录的大小。</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ubuntu@VM-0-14-ubuntu:~/git-work/linux-command$ <span class="token function">du</span> <span class="token parameter variable">-sh</span> ./*/<span class="token number">1</span>.9M ./assets/28K ./build/<span class="token number">2</span>.9M ./command/52K ./dist/148K ./template/<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p> 查看指定目录下文件所占的空间:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ <span class="token function">du</span> ./*<span class="token number">144</span> ./alfred.png<span class="token number">452</span> ./chrome-extensions.gif<span class="token number">4</span> ./dash-icon.png<span class="token number">1312</span> ./Linux.gif<span class="token number">16</span> ./qr.png<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p> 只显示总和的大小:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ <span class="token function">du</span> <span class="token parameter variable">-s</span> <span class="token builtin class-name">.</span><span class="token number">1932</span> <span class="token builtin class-name">.</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre><p> 显示总和的大小且易读:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">ubuntu@VM-0-14-ubuntu:~/git-work/linux-command/assets$ <span class="token function">du</span> <span class="token parameter variable">-sh</span> <span class="token builtin class-name">.</span><span class="token number">1</span>.9M <span class="token builtin class-name">.</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li></ul><h2 id="6-sort命令"><a href="#6-sort命令" class="headerlink" title="6.sort命令"></a>6.sort命令</h2><ul><li><p>对文本文件中所有行进行排序。</p><ul><li> 将所有输入文件的内容排序后并输出</li><li> 当没有文件或文件为<code>-</code>时,读取标准输入</li></ul></li><li><p>排序选项:</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-b, --ignore-leading-blanks 忽略开头的空白。-d, --dictionary-order 仅考虑空白、字母、数字。-f, --ignore-case 将小写字母作为大写字母考虑。-g, --general-numeric-sort 根据数字排序。-i, --ignore-nonprinting 排除不可打印字符。-M, --month-sort 按照非月份、一月、十二月的顺序排序。-h, --human-numeric-sort 根据存储容量排序<span class="token punctuation">(</span>注意使用大写字母,例如:2K 1G<span class="token punctuation">)</span>。-n, --numeric-sort 根据数字排序。-r, <span class="token parameter variable">--reverse</span> 将结果倒序排列。<span class="token parameter variable">--sort</span><span class="token operator">=</span>WORD 根据WORD排序,其中: general-numeric 等价于 -g,human-numeric 等价于 -h,month 等价于 -M,numeric 等价于 -n,random 等价于 -R,version 等价于 -V。-V, --version-sort 文本中<span class="token punctuation">(</span>版本<span class="token punctuation">)</span>数字的自然排序。<span class="token comment"># 其他</span>-k, <span class="token parameter variable">--key</span><span class="token operator">=</span>KEYDEF 通过一个key排序;KEYDEF给出位置和类型。-t, --field-separator<span class="token operator">=</span>SEP 使用SEP作为列的分隔符。-T, --temporary-directory<span class="token operator">=</span>DIR 使用DIR作为临时目录,而不是 <span class="token variable">$TMPDIR</span> 或 /tmp;多次使用该选项指定多个临时目录。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><blockquote><p> 注:关于<code>-g</code>和<code>-n</code>选项的区别:<a href="https://stackoverflow.com/questions/1255782/whats-the-difference-between-general-numeric-sort-and-numeric-sort-options">stackoverflow</a>,</p> <pre class="line-numbers language-none"><code class="language-none">‘-g’ ‘--general-numeric-sort’ ‘--sort=general-numeric’ Sort numerically, using the standard C function strtod to convert a prefix of each line to a double-precision floating point number. This allows floating point numbers to be specified in scientific notation, like 1.0e-34 and 10e100. The LC_NUMERIC locale determines the decimal-point character. Do not report overflow, underflow, or conversion errors. Use the following collating sequence: Lines that do not start with numbers (all considered to be equal). NaNs (“Not a Number” values, in IEEE floating point arithmetic) in a consistent but machine-dependent order. Minus infinity. Finite numbers in ascending numeric order (with -0 and +0 equal). Plus infinity.Use this option only if there is no alternative; it is much slower than --numeric-sort (-n) and it can lose information when converting to floating point.‘-n’ ‘--numeric-sort’ ‘--sort=numeric’ Sort numerically. The number begins each line and consists of optional blanks, an optional ‘-’ sign, and zero or more digits possibly separated by thousands separators, optionally followed by a decimal-point character and zero or more digits. An empty number is treated as ‘0’. The LC_NUMERIC locale specifies the decimal-point character and thousands separator. By default a blank is a space or a tab, but the LC_CTYPE locale can change this.Comparison is exact; there is no rounding error.Neither a leading ‘+’ nor exponential notation is recognized. To compare such strings numerically, use the --general-numeric-sort (-g) option.<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><p> 例子参考:<a href="https://www.cnblogs.com/z977690557/p/8945261.html">https://www.cnblogs.com/z977690557/p/8945261.html</a></p></blockquote></li><li><p>用处:</p><ul><li><p> <code>sort -M</code> 命令对time.log文件内容进行排序</p></li><li><p> 组合使用df、du和sort,见上节实例</p></li></ul></li></ul><h2 id="7-grep初识:搜索文件"><a href="#7-grep初识:搜索文件" class="headerlink" title="7.grep初识:搜索文件"></a>7.grep初识:搜索文件</h2><ul><li> <strong>grep</strong> (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。</li><li> nb!!!</li></ul><h2 id="8-打包、压缩、归档、解压缩"><a href="#8-打包、压缩、归档、解压缩" class="headerlink" title="8.打包、压缩、归档、解压缩"></a>8.打包、压缩、归档、解压缩</h2><ul><li><p>Linux中的压缩工具</p><ul><li> .Z(已过时)</li><li> gzip — .gz</li><li> zip — .zip</li><li> bzip2 — .bz2</li></ul></li><li><p><code>tar</code>:将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。</p><ul><li> 区分打包和压缩:打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。</li><li> why? —— Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。</li></ul></li><li><p>常用命令</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">tar</span> <span class="token parameter variable">-cvf</span> log.tar log2012.log 仅打包,不压缩!<span class="token function">tar</span> <span class="token parameter variable">-zcvf</span> log.tar.gz log2012.log 打包后,以 <span class="token function">gzip</span> 压缩<span class="token function">tar</span> <span class="token parameter variable">-jcvf</span> log.tar.bz2 log2012.log 打包后,以 <span class="token function">bzip2</span> 压缩压 缩:tar <span class="token parameter variable">-jcv</span> <span class="token parameter variable">-f</span> filename.tar.bz2 要被压缩的文件或目录名称查 询:tar <span class="token parameter variable">-jtv</span> <span class="token parameter variable">-f</span> filename.tar.bz2解压缩:tar <span class="token parameter variable">-jxv</span> <span class="token parameter variable">-f</span> filename.tar.bz2 <span class="token parameter variable">-C</span> 欲解压缩的目录<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><h2 id="9-实战:server上安装vmwaretools"><a href="#9-实战:server上安装vmwaretools" class="headerlink" title="9.实战:server上安装vmwaretools"></a>9.实战:server上安装vmwaretools</h2><img src="/2021/08/13/Linux/image-20210731224433011.png" class=""><img src="/2021/08/13/Linux/image-20210731224520911.png" class=""><img src="/2021/08/13/Linux/image-20210731224621874.png" class=""><img src="/2021/08/13/Linux/image-20210731225204682.png" class=""><blockquote><p> <strong>章节结束语与经验</strong>:掌握基本常用命令,根据需求查阅文档</p></blockquote><hr><h1 id="六:父子shell"><a href="#六:父子shell" class="headerlink" title="六:父子shell"></a>六:父子shell</h1><h2 id="父子shell的概念"><a href="#父子shell的概念" class="headerlink" title="父子shell的概念"></a>父子shell的概念</h2><h3 id="Unix-shell"><a href="#Unix-shell" class="headerlink" title="Unix shell"></a>Unix shell</h3><p>Bash(Bourne Again Shell),Dash(Debian Almquist shell),ash,zsh</p><h3 id="父子shell"><a href="#父子shell" class="headerlink" title="父子shell"></a>父子shell</h3><ul><li> 在Ubuntu中打开terminal,实际上就是打开了一个bash,而在窗口内还可以切换为其余shell,这样使用<code>ps</code>命令查看可以发现多个shell。</li><li> 使用<code>ps -f</code> 命令,不难发现各shell之间PID及PPID的对应关系,即父shell的PID是子shell的PPID。</li><li> 使用<code>ps --forest</code>命令可以更清楚看到各shell的层级关系。</li><li> 通过各级的<code>exit</code>,也能发现父子shell</li></ul><p>过程如下:</p><img src="/2021/08/13/Linux/image-20210804164631918.png" class=""><h2 id="分号在命令中有什么作用"><a href="#分号在命令中有什么作用" class="headerlink" title="分号在命令中有什么作用"></a>分号在命令中有什么作用</h2><p><strong>分隔命令,依次执行</strong> </p><img src="/2021/08/13/Linux/image-20210804170609884.png" class=""><blockquote><p> 注:echo —— 输出指定的字符串或者变量</p><p> 加上<code>()</code>后,会生成一个子shell运行命令,执行完后自动退出子shell。在上图中,我们使用<code>echo $BASH_SUBSHELL</code>查看子shell数量,使用<code>ps -f</code>发现子shell已退出。</p></blockquote><h2 id="sleep和jobs"><a href="#sleep和jobs" class="headerlink" title="sleep和jobs"></a>sleep和jobs</h2><h3 id="sleep和jobs-1"><a href="#sleep和jobs-1" class="headerlink" title="sleep和jobs"></a>sleep和jobs</h3><ul><li><p><code>sleep</code> —— delay for a specified amount of time(默认单位:s)</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sleep</span> <span class="token number">100</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sleep</span> <span class="token number">100</span><span class="token operator">&</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><blockquote><p> 注:’&’表示后台执行</p></blockquote></li><li><p><code>jobs</code> —— 显示作业的状态</p><blockquote><p> <code>-l</code>:在作业的信息中额外列出PID</p></blockquote></li></ul><img src="/2021/08/13/Linux/image-20210804171759000.png" class=""><h3 id="后台执行符-amp"><a href="#后台执行符-amp" class="headerlink" title="后台执行符&"></a>后台执行符<code>&</code></h3><p>后台解压文件并复制到指定目录:</p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token punctuation">(</span>tar <span class="token parameter variable">-zxvf</span> <span class="token punctuation">..</span>. <span class="token punctuation">;</span> <span class="token function">tar</span> <span class="token parameter variable">-zxvf</span> <span class="token punctuation">..</span>.<span class="token punctuation">;</span> <span class="token function">cp</span> <span class="token punctuation">..</span>.<span class="token punctuation">)</span><span class="token operator">&</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><blockquote><p> 注:’&’表示后台执行</p><p> 其他参考:<a href="https://stackoverflow.com/questions/13338870/what-does-at-the-end-of-a-linux-command-mean">https://stackoverflow.com/questions/13338870/what-does-at-the-end-of-a-linux-command-mean</a></p><p> If a command is terminated by the control operator <strong>&</strong>, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0.</p><p> 如果命令由控制运算符 & 终止,shell 将在子 shell 的后台执行该命令。 shell 不等待命令完成,返回状态为 0。</p></blockquote><h2 id="coproc协程"><a href="#coproc协程" class="headerlink" title="coproc协程"></a>coproc协程</h2><p>使用<code>coproc name { ; }</code>,用于子shell挂后台</p><blockquote><p> 注:<code>{}</code>之间使用<code>;</code>结尾,并且注意空格</p></blockquote><img src="/2021/08/13/Linux/image-20210804174220085.png" class=""><h2 id="外部命令和内建命令"><a href="#外部命令和内建命令" class="headerlink" title="外部命令和内建命令"></a>外部命令和内建命令</h2><blockquote><p> 引入:windows中<em>任务管理器</em> 也是一个进程,Linux中<code>ps -f</code>命令也是一个进程,why?</p><p> 外部命令的必要性 —— 上帝视角更清楚,单独创建一个进程</p></blockquote><h3 id="总结参考"><a href="#总结参考" class="headerlink" title="总结参考"></a>总结参考</h3><blockquote><p> From:<a href="https://blog.51cto.com/u_13340708/1970306">https://blog.51cto.com/u_13340708/1970306</a></p></blockquote><ul><li><p>内建命令,实际上是Shell程序的一部分,其中包含的是一些比较简单的Linux系统命令,这些命令由Shell程序识别并在Shell程序内部完成运行,通常在Linux系统加载运行时Shell就被加载并驻留在系统内存中。内部命令是写Bash源码里面的,其执行速度比外部命令快,因为解析内部命令Shell不需要创建子进程。</p><p> 详见:<a href="https://www.gnu.org/software/bash/manual/html_node/Builtin-Index.html#Builtin-Index%E3%80%82">https://www.gnu.org/software/bash/manual/html_node/Builtin-Index.html#Builtin-Index。</a></p></li><li><p> 外部命令,Linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在Shell中,但是其命令执行过程是由Shell程序控制的。Shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在Bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin……等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。</p></li><li><p> 可以通过<code>type</code>命令来识别内建命令还是外部命令。</p></li><li><p> 内建命令使用<code>help</code>查看帮助文档,外部命令使用<code>man</code>命令。</p></li></ul><h3 id="外部命令-1"><a href="#外部命令-1" class="headerlink" title="外部命令"></a>外部命令</h3><p>以<code>ps -f</code>命令为例,其PPID与bash的PID一致,为了查看整个shell中的进程,衍生出新的进程</p><img src="/2021/08/13/Linux/image-20210804175837475.png" class=""><p>如:ps, ls</p><h3 id="内建命令-1"><a href="#内建命令-1" class="headerlink" title="内建命令"></a>内建命令</h3><p>如:cd, exit, echo, history</p><h2 id="history与alias"><a href="#history与alias" class="headerlink" title="history与alias"></a>history与alias</h2><h3 id="history-——-显示或操作历史列表"><a href="#history-——-显示或操作历史列表" class="headerlink" title="history —— 显示或操作历史列表"></a>history —— 显示或操作历史列表</h3><blockquote><p> 使用符号<code>!</code>执行指定序号的历史命令:<code>!n</code></p></blockquote><ul><li><p>概要</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">history</span> <span class="token punctuation">[</span>-c<span class="token punctuation">]</span> <span class="token punctuation">[</span>-d offset<span class="token punctuation">]</span> <span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token function">history</span> <span class="token parameter variable">-anrw</span> <span class="token punctuation">[</span>filename<span class="token punctuation">]</span><span class="token function">history</span> <span class="token parameter variable">-ps</span> arg <span class="token punctuation">[</span>arg<span class="token punctuation">..</span>.<span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre></li><li><p>选项</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token parameter variable">-c</span> 清空历史列表。<span class="token parameter variable">-d</span> offset 根据offset删除记录。如果是正数则表示offset位置的记录,如果为负数则表示从结尾向前offset位置的记录。<span class="token parameter variable">-a</span> 将当前终端的历史记录行添加到历史记录文件。<span class="token parameter variable">-n</span> 将尚未从历史文件中读取的历史行追加到当前历史列表中。<span class="token parameter variable">-r</span> 读取历史文件,并将其内容附加到历史列表中。<span class="token parameter variable">-w</span> 将当前历史记录列表附加到历史记录文件中并且附加它们到历史列表中。<span class="token parameter variable">-p</span> 在每个arg上执行历史记录扩展并在标准输出上显示结果,而不将结果存储在历史记录列表中。<span class="token parameter variable">-s</span> 将每个arg作为单个条目附加到历史记录列表。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>参数</p><p> n:可选,只列出最近的n条记录。</p><p> filename:可选,表示历史文件;默认调用顺序为<code>filename</code>、环境变量<code>HISTFILE</code>、<code>~/.bash_history</code>。</p></li></ul><h3 id="alias-——-定义或显示别名"><a href="#alias-——-定义或显示别名" class="headerlink" title="alias —— 定义或显示别名"></a>alias —— 定义或显示别名</h3><ul><li><p>语法</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">alias</span> <span class="token punctuation">[</span>-p<span class="token punctuation">]</span> <span class="token punctuation">[</span>name<span class="token punctuation">[</span><span class="token operator">=</span>value<span class="token punctuation">]</span> <span class="token punctuation">..</span>.<span class="token punctuation">]</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><blockquote><p> -p:显示全部已定义的别名。</p><p> name(可选):指定要(定义、修改、显示)的别名。</p><p> value(可选):别名的值。</p></blockquote></li><li><p>实例</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 显示全部已定义的别名</span><span class="token builtin class-name">alias</span><span class="token builtin class-name">alias</span> <span class="token parameter variable">-p</span><span class="token comment"># 显示已定义的别名(假设当前环境存在以下别名)</span><span class="token builtin class-name">alias</span> <span class="token function">ls</span><span class="token builtin class-name">alias</span> <span class="token function">ls</span> <span class="token function">grep</span><span class="token comment"># 定义或修改别名的值</span><span class="token builtin class-name">alias</span> <span class="token assign-left variable">ls</span><span class="token operator">=</span><span class="token string">'ls --color=auto'</span><span class="token builtin class-name">alias</span> <span class="token assign-left variable">ls</span><span class="token operator">=</span><span class="token string">'ls --color=never'</span> <span class="token assign-left variable">grep</span><span class="token operator">=</span><span class="token string">'grep --color=never'</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul><blockquote><p> <strong>章节结束语与经验</strong>:key — 父子shell及相关命令</p></blockquote><hr><h1 id="七:环境变量"><a href="#七:环境变量" class="headerlink" title="七:环境变量"></a>七:环境变量</h1><h2 id="环境变量究竟是什么"><a href="#环境变量究竟是什么" class="headerlink" title="环境变量究竟是什么"></a>环境变量究竟是什么</h2><blockquote><p> 引入:windows中<code>win + R</code>或在cmd中可以快速运行calc,notepad,mspaint,cmd,why?</p></blockquote><ul><li><p> 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。如临时文件夹位置和系统文件夹位置等。[baike]</p></li><li><p>举例:windows和DOS操作系统中的<code>PATH</code>环境变量</p><p> 作用:当要求系统运行一个程序而没有告诉程序所在完整路径时,系统会在当前目录下和PATH中目录下寻找该程序。</p></li></ul><h2 id="全局变量和局部变量"><a href="#全局变量和局部变量" class="headerlink" title="全局变量和局部变量"></a>全局变量和局部变量</h2><ul><li><p>认识</p><ul><li><p> Windows:系统变量与用户变量</p></li><li><p> Linux:全局变量与局部变量</p></li></ul></li><li><p>命令</p><ul><li><p>使用<code>printenv</code>查看所有全局变量,<code>printenv USER</code>查看全局变量USER</p> <img src="/2021/08/13/Linux/image-20210805215618419.png" class=""><blockquote><p> 注:不同发行版全局变量不一定相同</p></blockquote></li><li><p>使用<code>$</code>引用全局变量</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">echo</span> <span class="token environment constant">$HOME</span><span class="token builtin class-name">cd</span> <span class="token environment constant">$HOME</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p> 使用<code>set</code>命令查看局部变量</p></li></ul></li></ul><h2 id="用户和局部变量的设定"><a href="#用户和局部变量的设定" class="headerlink" title="用户和局部变量的设定"></a>用户和局部变量的设定</h2><ul><li> 定义的局部变量只能在当前shell中使用,子shell或退出都不能继续使用</li><li> <strong>定义局部变量必须用小写!!!</strong></li><li> 全局变量大写,下划线命名法</li></ul><img src="/2021/08/13/Linux/image-20210805221658764.png" class=""><h2 id="定义全局变量"><a href="#定义全局变量" class="headerlink" title="定义全局变量"></a>定义全局变量</h2><ul><li><p> <code>export</code>:为shell变量或函数设置导出属性</p></li><li><p> <code>unset</code>:删除指定的shell变量或函数</p></li><li><p> 自己定义全局变量也推荐用小写(一般系统变量大写</p></li></ul><img src="/2021/08/13/Linux/image-20210805222531898.png" class=""><img src="/2021/08/13/Linux/image-20210805223244058.png" class=""><blockquote><p> 注:这里使用echo已经发现dir无效,但还能执行,不懂… </p><p> 更新:自己尝试退出子shell,发现父shell中dir并未删除(因为是父shell中定义的全局变量)。unset后无法查看,但仍可执行。退出后仍是无法查看可执行…</p></blockquote><h2 id="为啥要用环境变量"><a href="#为啥要用环境变量" class="headerlink" title="为啥要用环境变量"></a>为啥要用环境变量</h2><ul><li><p> 配置java等开发环境需要配置PATH</p></li><li><p>添加环境变量信息</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token environment constant">$PATH</span>:/home/lee/Project<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> <img src="/2021/08/13/Linux/image-20210805224731308.png" class=""><blockquote><p> 注:如此配置在退出后重新打开会失效</p></blockquote></li></ul><h2 id="永久配置环境变量"><a href="#永久配置环境变量" class="headerlink" title="永久配置环境变量"></a>永久配置环境变量</h2><ul><li><p>Linux打开shell时读取环境变量的机制</p><ul><li> 启动文件 —— 开机时默认执行环境变量</li><li>bash shell运行逻辑?<ol><li> 登录shell</li><li> 非登录就打开shell</li><li> 运行脚本非交互shell</li></ol></li></ul></li><li><p>查看文件</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> /etc/profile<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> <img src="/2021/08/13/Linux/image-20210805225615727.png" class=""></li><li><p>一个目录 —— 常见的不同发行版中用来配置永久环境变量的目录</p><ul><li><p> ~/.bashrc(Ubuntu) ~/.bash_profile ~/.profile ~/.bash_login</p></li><li><p>eg:<a href="https://wangchujiang.com/linux-command/c/alias.html">永久别名</a></p> <img src="/2021/08/13/Linux/image-20210805230652142.png" class="" title="image-20210805230652142"></li></ul><blockquote><p> 实际操作:需学习vim再上手</p></blockquote></li></ul><hr><h1 id="八:安装软件"><a href="#八:安装软件" class="headerlink" title="八:安装软件"></a>八:安装软件</h1><h2 id="PMS和软件安装的介绍"><a href="#PMS和软件安装的介绍" class="headerlink" title="PMS和软件安装的介绍"></a>PMS和软件安装的介绍</h2><ul><li><p><strong>PMS, Package Management System 包管理系统</strong></p><ul><li> 解决软件安装、更新、卸载,解决工具依赖问题(eg:QQ空间 QQ)</li><li> 不同发行版PMS可能不同</li></ul></li><li><p><strong>软件包管理工具</strong></p><ul><li> dpkg — Debian:<code>apt-get</code>, <code>apt-cache</code>, <code>aptitude</code>(已淘汰)</li><li>rpm — Red Hat</li></ul></li><li><p>软件安装</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token function">vim</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><h2 id="安装、更新、卸载"><a href="#安装、更新、卸载" class="headerlink" title="安装、更新、卸载"></a>安装、更新、卸载</h2><ul><li><p><code>apt - h</code>查看apt帮助文档</p> <img src="/2021/08/13/Linux/image-20210806132831519.png" class=""></li><li><p> 更新 <code>sudo apt update</code></p></li><li><p> 升级 <code>sudo apt upgrade</code></p></li><li><p> 卸载 <code>sudo apt remove</code></p></li></ul><h2 id="其他发行版本?"><a href="#其他发行版本?" class="headerlink" title="其他发行版本?"></a>其他发行版本?</h2><ul><li><p>server版配置镜像源</p><blockquote><p> 参考:<a href="https://cloud.tencent.com/developer/article/1726035">https://cloud.tencent.com/developer/article/1726035</a></p></blockquote><ul><li><p> 备份原软件源文件<code>/etc/apt/sources.list</code>,然后删除(因为要直接添加内容)</p></li><li><p>打开<code>/etc/apt/sources.list</code>并添加以下内容</p> <pre class="line-numbers language-none"><code class="language-none">deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p>刷新软件源信息</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> update<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>更新软件,速度明显变快</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> upgrade<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul></li><li><p>其他发行版本</p><p> 如:Red Hat — yum(常见), urpm, zypper</p></li></ul><h2 id="安装第三方软件"><a href="#安装第三方软件" class="headerlink" title="安装第三方软件"></a>安装第三方软件</h2><ul><li><p> key — 仔细阅读别人的<code>README.md</code>,需要依赖</p></li><li><p>例子:<a href="https://github.com/nvbn/thefuck">https://github.com/nvbn/thefuck</a></p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> update<span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> python3-dev python3-pip python3-setuptools<span class="token function">sudo</span> pip3 <span class="token function">install</span> thefuck<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><blockquote><p> 注:若pip下载慢,参考:<a href="https://developer.aliyun.com/article/652884">https://developer.aliyun.com/article/652884</a></p></blockquote></li></ul><hr><h1 id="九:用户和权限"><a href="#九:用户和权限" class="headerlink" title="九:用户和权限"></a>九:用户和权限</h1><h2 id="用户和权限的含义和作用"><a href="#用户和权限的含义和作用" class="headerlink" title="用户和权限的含义和作用"></a>用户和权限的含义和作用</h2><ul><li><p> 用户与权限 -> 安全</p></li><li><p>用户ID UID</p><ul><li> 系统账户 UID<500</li></ul></li><li><p>查看有关文件</p><ul><li><p>1.</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">cat</span> /etc/passwd<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> <code>lee:x:1000:1000:Lee,,,:/home/lee:/bin/bash</code></p><p> 用户名 密码 UID 组ID 备注 用户目录 默认shell</p></li><li><p>2.</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">cat</span> /etc/shadow<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> 密码存储地,仍加密,需root权限</p><p> <code>lee:$6$vBYkP36fj7.w2YQB$AVnJhuLMHOPFYspc3FCnoLf0r5S7RXVgQTl.1ZLI8zUovgU2yXF3xH/1Q7s/dLOLQmHev/lROJwvEAydaLbzF1:18709:0:99999:7:::</code></p><blockquote><p> 以下为参考:<a href="https://linuxize.com/post/etc-shadow-file/">https://linuxize.com/post/etc-shadow-file/</a></p></blockquote> <pre class="line-numbers language-none"><code class="language-none">mark:$6$.n.:17736:0:99999:7:::[--] [----] [---] - [---] ----| | | | | |||+-----------> 9. Unused| | | | | ||+------------> 8. Expiration date| | | | | |+-------------> 7. Inactivity period| | | | | +--------------> 6. Warning period| | | | +------------------> 5. Maximum password age| | | +----------------------> 4. Minimum password age| | +--------------------------> 3. Last password change(since 1,1,1970)| +---------------------------------> 2. Encrypted Password+----------------------------------------> 1. Username<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li></ul></li></ul><h2 id="创建、删除、更改用户"><a href="#创建、删除、更改用户" class="headerlink" title="创建、删除、更改用户"></a>创建、删除、更改用户</h2><ul><li><p> 创建 <code>sudo useradd usr1</code></p></li><li><p> 删除 <code>sudo useradd usr1</code></p></li><li><p> 更改密码 <code>sudo passwd usr1</code></p></li><li><p>自学</p><ul><li><p><code>chpasswd</code> 批量更改密码</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment">#先创建用户密码对应文件,格式为username:password,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令</span>chpasswd <span class="token operator"><</span> user.txt<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p> <code>chage</code> 修改帐号和密码的有效期限</p></li></ul></li></ul><h2 id="group组"><a href="#group组" class="headerlink" title="group组"></a>group组</h2><ul><li><p> Linux 组 groups –> 目的:共享资源的权限</p></li><li><p>查看group文件</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">tail</span> /etc/group<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> Ubuntu为每一个用户创建一个单独的组</p> <img src="/2021/08/13/Linux/image-20210808174845478.png" class=""><p> Groupname Password GID 属于该组的成员列表</p></li><li><p> 创建组 <code>sudo groupadd group_lee</code></p></li><li><p> 删除组 <code>sudo groupdel group_lee</code></p></li><li><p> 将用户加入组 —— <code>usermod</code> 命令</p></li></ul><h2 id="文件、文件夹权限"><a href="#文件、文件夹权限" class="headerlink" title="文件、文件夹权限"></a>文件、文件夹权限</h2><img src="/2021/08/13/Linux/image-20210808180322505.png" class="" title="image-20210808180322505"><ul><li>第一个字符 File Type<ul><li> d — 目录;- — 文件;l — link file;b — 装置文件里面的可供储存的接口设备(可随机存取装置);c — 装置文件里面的串行端口设备(如鼠标、键盘)</li></ul></li><li> <img src="/2021/08/13/Linux/image-20210808180751532.png" class=""></li></ul><h2 id="作业:自学chmod命令"><a href="#作业:自学chmod命令" class="headerlink" title="作业:自学chmod命令"></a>作业:自学chmod命令</h2><h3 id="chmod"><a href="#chmod" class="headerlink" title="chmod"></a>chmod</h3><p><code>chmod</code> — change mode</p><p>用来变更文件或目录的权限</p><h4 id="概要-2"><a href="#概要-2" class="headerlink" title="概要"></a>概要</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">chmod</span> <span class="token punctuation">[</span>OPTION<span class="token punctuation">]</span><span class="token punctuation">..</span>. MODE<span class="token punctuation">[</span>,MODE<span class="token punctuation">]</span><span class="token punctuation">..</span>. FILE<span class="token punctuation">..</span>.<span class="token function">chmod</span> <span class="token punctuation">[</span>OPTION<span class="token punctuation">]</span><span class="token punctuation">..</span>. OCTAL-MODE FILE<span class="token punctuation">..</span>.<span class="token function">chmod</span> <span class="token punctuation">[</span>OPTION<span class="token punctuation">]</span><span class="token punctuation">..</span>. <span class="token parameter variable">--reference</span><span class="token operator">=</span>RFILE FILE<span class="token punctuation">..</span>.<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre><blockquote><p> mode:八进制数或符号组合。</p><p> file:指定要更改权限的一到多个文件。</p></blockquote><h4 id="选项-12"><a href="#选项-12" class="headerlink" title="选项"></a>选项</h4><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">-c, --changes:当文件的权限更改时输出操作信息。-f, --silent, --quiet:抑制多数错误消息的输出。-v, --verbose:无论文件是否更改了权限,一律输出操作信息。-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><h4 id="例子-1"><a href="#例子-1" class="headerlink" title="例子"></a>例子</h4><blockquote><p> 参考<code>man chmod</code>文档的<code>DESCRIPTION</code>段落得知:</p><ul><li> <code>u</code>符号代表当前用户。</li><li> <code>g</code>符号代表和当前用户在同一个组的用户,以下简称组用户。</li><li> <code>o</code>符号代表其他用户。</li><li> <code>a</code>符号代表所有用户。</li><li> <code>r</code>符号代表读权限以及八进制数<code>4</code>。</li><li> <code>w</code>符号代表写权限以及八进制数<code>2</code>。</li><li> <code>x</code>符号代表执行权限以及八进制数<code>1</code>。</li><li> <code>X</code>符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。</li><li> <code>s</code>符号代表设置权限suid和sgid,使用权限组合<code>u+s</code>设定文件的用户的ID位,<code>g+s</code>设置组用户ID位。</li><li> <code>t</code>符号代表只有目录或文件的所有者才可以删除目录下的文件。</li><li> <code>+</code>符号代表添加目标用户相应的权限。</li><li> <code>-</code>符号代表删除目标用户相应的权限。</li><li> <code>=</code>符号代表添加目标用户相应的权限,删除未提到的权限。</li></ul></blockquote><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 添加组用户的写权限。</span><span class="token function">chmod</span> g+w ./test.log<span class="token comment"># 删除其他用户的所有权限。</span><span class="token function">chmod</span> <span class="token assign-left variable">o</span><span class="token operator">=</span> ./test.log<span class="token comment"># 使得所有用户都没有写权限。</span><span class="token function">chmod</span> a-w ./test.log<span class="token comment"># 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。</span><span class="token function">chmod</span> <span class="token assign-left variable">u</span><span class="token operator">=</span>rwx, <span class="token assign-left variable">g</span><span class="token operator">=</span>rw, <span class="token assign-left variable">o</span><span class="token operator">=</span>r ./test.log<span class="token comment"># 等价的八进制数表示:</span><span class="token function">chmod</span> <span class="token number">754</span> ./test.log<span class="token comment"># 将目录以及目录下的文件都设置为所有用户拥有读写权限。</span><span class="token comment"># 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!</span><span class="token function">chmod</span> <span class="token parameter variable">-R</span> <span class="token assign-left variable">a</span><span class="token operator">=</span>rw ./testdir/<span class="token comment"># 根据其他文件的权限设置文件权限。</span><span class="token function">chmod</span> <span class="token parameter variable">--reference</span><span class="token operator">=</span>./1.log ./test.log<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="两图熟记"><a href="#两图熟记" class="headerlink" title="两图熟记"></a>两图熟记</h3><ol><li> <img src="/2021/08/13/Linux/image-20210810184853875.png" class=""></li><li><img src="/2021/08/13/Linux/image-20210810185009852.png" class=""><blockquote><p> 详见:<a href="https://www.runoob.com/linux/linux-comm-chmod.html">Linux chmod命令</a></p></blockquote></li></ol><blockquote><p> <strong>章节结束语</strong>:边用边学,多看多练,自学,学无止境</p></blockquote><hr><h1 id="十:编辑器之神——Vim"><a href="#十:编辑器之神——Vim" class="headerlink" title="十:编辑器之神——Vim"></a>十:编辑器之神——Vim</h1><blockquote><p> My Other学习:<a href="http://billie66.github.io/TLCL/book/chap13.html">TLCL (billie66.github.io)</a> for vi,<a href="https://en.wikibooks.org/wiki/Learning_the_vi_Editor/Vim">Learning the vi Editor/Vim - Wikibooks, open books for an open world</a> for vim</p></blockquote><h2 id="附:vi-vim键盘图"><a href="#附:vi-vim键盘图" class="headerlink" title="附:vi/vim键盘图"></a>附:vi/vim键盘图</h2><ul><li><p>官网原图</p> <img src="/2021/08/13/Linux/vi-vim-cheat-sheet.gif" class="" title="vi-vim-cheat-sheet"></li><li><p>翻译版本</p> </li></ul><h2 id="编辑器简单介绍:vim编辑器之神,emac神之编辑器"><a href="#编辑器简单介绍:vim编辑器之神,emac神之编辑器" class="headerlink" title="编辑器简单介绍:vim编辑器之神,emac神之编辑器"></a>编辑器简单介绍:vim编辑器之神,emac神之编辑器</h2><ul><li><p> 命令版编辑器:vi,nano,emacs,vim</p></li><li><p> vim — 编辑器之神,emacs — 神之编辑器</p></li><li><p><a href="https://en.wikipedia.org/wiki/Vim_(text_editor)">Vim (text editor)</a> <em>from Wikipedia</em></p><blockquote><p> <strong>Vim</strong> (/vɪm/; a contraction of <strong>Vi IMproved</strong>) is a free and open-source, screen-based text editor program for Unix. It is a improved clone of Bill Joy’s <a href="https://en.wikipedia.org/wiki/Vi">vi</a>. Vim’s author, Bram Moolenaar, derived Vim from a port of the Stevie editor for Amiga and released a version to the public in 1991. Vim is designed for use both from a command-line interface and as a standalone application in a graphical user interface. Vim is released under the Vim license that includes some charityware clauses, encouraging users who enjoy the software to consider donating to children in Uganda.</p><p> PS: Vi — Visual Editor </p></blockquote></li><li><p> vim官网:<a href="https://www.vim.org/">https://www.vim.org/</a></p></li></ul><h2 id="vim的简单使用"><a href="#vim的简单使用" class="headerlink" title="vim的简单使用"></a>vim的简单使用</h2><ul><li><p>安装vim</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> update<span class="token function">sudo</span> <span class="token function">apt</span> upgrade<span class="token comment"># 推荐先执行前两步,进行更新</span><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> <span class="token function">vim</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre><blockquote><p> 安装时无法fetch阿里镜像源,检查网络,断开代理,重启,更新并安装</p></blockquote></li><li><p>vim工作模式</p><ul><li><p>国外一般认为是两种模式</p><ol><li><p> 普通模式(命令操作模式):操作文件</p></li><li><p> 插入模式:编辑内容</p></li></ol><ul><li> <code>I</code>键进入INSERT模式,<code>ESC</code>退回普通模式</li></ul></li><li><p>国内一般认为是三种模式</p><ol><li> 一般模式 —— 移动</li><li> 编辑模式 —— INSERT</li><li> 命令模式 —— :</li></ol></li></ul></li><li><p>vim退出</p><ul><li> <code>:q</code> — 不保存退出</li><li> <code>:wq</code> — 保存并退出</li><li> <code>:q!</code> — 强制退出,不保存</li></ul></li><li><p>实例</p> <img src="/2021/08/13/Linux/image-20210813114950874.png" class=""></li></ul><h2 id="vim操作"><a href="#vim操作" class="headerlink" title="vim操作"></a>vim操作</h2><h3 id="移动光标"><a href="#移动光标" class="headerlink" title="移动光标"></a>移动光标</h3><blockquote><p> my tip:记住HJKL,两端是左右,中间是上下</p></blockquote><table><thead><tr><th align="center">按键</th><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>K</code></td><td align="center">k</td><td align="center">上</td></tr><tr><td align="center"><code>J</code></td><td align="center">j</td><td align="center">下</td></tr><tr><td align="center"><code>H</code></td><td align="center">h</td><td align="center">左</td></tr><tr><td align="center"><code>L</code></td><td align="center">l</td><td align="center">右</td></tr></tbody></table><h3 id="翻页"><a href="#翻页" class="headerlink" title="翻页"></a>翻页</h3><table><thead><tr><th align="center">按键</th><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>Ctrl + F</code></td><td align="center"><code>Ctrl + F</code></td><td align="center">上一页</td></tr><tr><td align="center"><code>Ctrl + B</code></td><td align="center"><code>Ctrl + B</code></td><td align="center">下一页</td></tr><tr><td align="center"><code>Ctrl + E</code></td><td align="center"><code>Ctrl + E</code></td><td align="center">上滚</td></tr><tr><td align="center"><code>Ctrl + Y</code></td><td align="center"><code>Ctrl + Y</code></td><td align="center">下滚</td></tr><tr><td align="center"><code>Shift + G</code>,即G</td><td align="center">G</td><td align="center">末尾</td></tr><tr><td align="center"><code>G + G</code>,即gg</td><td align="center">gg</td><td align="center">首行</td></tr></tbody></table><h3 id="不同方式编辑文本、跳跃单词操作技巧"><a href="#不同方式编辑文本、跳跃单词操作技巧" class="headerlink" title="不同方式编辑文本、跳跃单词操作技巧"></a>不同方式编辑文本、跳跃单词操作技巧</h3><table><thead><tr><th align="center">按键</th><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>I</code></td><td align="center">i</td><td align="center">光标位置前插入</td></tr><tr><td align="center"><code>A</code></td><td align="center">a</td><td align="center">光标位置后插入</td></tr><tr><td align="center"><code>O</code></td><td align="center">o</td><td align="center">直接enter到下一行输入</td></tr><tr><td align="center"><code>X</code></td><td align="center">x</td><td align="center">删除光标所在字符</td></tr><tr><td align="center"><code>D + D</code>,即dd</td><td align="center">dd</td><td align="center">删除当前行</td></tr><tr><td align="center"><code>U</code></td><td align="center">u</td><td align="center">撤销</td></tr><tr><td align="center"><code>D + W</code>,即dw</td><td align="center">dw</td><td align="center">删除光标后的单词</td></tr><tr><td align="center"><code>B</code></td><td align="center">b</td><td align="center">向前跳跃单词首</td></tr><tr><td align="center"><code>E</code></td><td align="center">e</td><td align="center">向后跳跃单词尾</td></tr><tr><td align="center"><code>W</code>,即w</td><td align="center">w</td><td align="center">向后跳跃单词</td></tr><tr><td align="center"><code>Shift + W</code>,即W</td><td align="center">W</td><td align="center">向后大跳</td></tr><tr><td align="center"><code>Shift + B</code>,即B</td><td align="center">B</td><td align="center">向前大跳</td></tr></tbody></table><h3 id="跳跃行首行尾及替换"><a href="#跳跃行首行尾及替换" class="headerlink" title="跳跃行首行尾及替换"></a>跳跃行首行尾及替换</h3><table><thead><tr><th align="center">按键</th><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>Shift + 6</code>,即^</td><td align="center">^</td><td align="center">跳跃到本行开头</td></tr><tr><td align="center"><code>Shift + 4</code>,即$</td><td align="center">$</td><td align="center">跳跃到本行末尾</td></tr><tr><td align="center"><code>R</code>,即r</td><td align="center">r</td><td align="center">替换当前光标字符</td></tr><tr><td align="center"><code>Shift + R</code>,即R</td><td align="center">R</td><td align="center">向后一直替换,直到ESC退出</td></tr></tbody></table><h3 id="大括号跳跃函数段落技巧"><a href="#大括号跳跃函数段落技巧" class="headerlink" title="大括号跳跃函数段落技巧"></a>大括号跳跃函数段落技巧</h3><table><thead><tr><th align="center">按键</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>Shift + [或]</code>,即{}</td><td align="center">向前/后跳跃大括号</td></tr></tbody></table><h3 id="vim复制剪切粘贴"><a href="#vim复制剪切粘贴" class="headerlink" title="vim复制剪切粘贴"></a>vim复制剪切粘贴</h3><table><thead><tr><th align="center">按键</th><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>D + D</code>,即dd</td><td align="center">dd</td><td align="center">删除当前行,相当于剪切</td></tr><tr><td align="center"><code>P</code></td><td align="center">p</td><td align="center">粘贴</td></tr><tr><td align="center"><code>Y + W</code>,即yw</td><td align="center">yw</td><td align="center">复制一个单词</td></tr><tr><td align="center"><code>Y + Shift 4</code>,即y$</td><td align="center">y$</td><td align="center">复制文本,从当前到行末</td></tr></tbody></table><blockquote><p> 注:y$缺点,行末概念不清</p></blockquote><h3 id="Visual可视化模式"><a href="#Visual可视化模式" class="headerlink" title="Visual可视化模式"></a>Visual可视化模式</h3><ul><li> 作用:选择文本</li><li> 普通模式下按<code>V</code>键,进入Visual模式 -> HJKL选择文本</li></ul><table><thead><tr><th align="center">按键</th><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center"><code>V</code>,即v</td><td align="center">v</td><td align="center">选择文本</td></tr><tr><td align="center"><code>Shift + V</code>,即V</td><td align="center">V</td><td align="center">按行选择文本</td></tr><tr><td align="center"><code>Ctrl + V</code></td><td align="center">Ctrl + v</td><td align="center">矩阵选择</td></tr><tr><td align="center"><code>V + Shift G</code>,即vG</td><td align="center">vG</td><td align="center">选择当前行到文末</td></tr><tr><td align="center"><code>gg + V + Shift G</code>,即gg v G</td><td align="center">gg v G</td><td align="center">全选</td></tr><tr><td align="center"><code>O</code></td><td align="center">o</td><td align="center">切换已选择文本首尾(visual模式下)</td></tr><tr><td align="center"><code>0</code></td><td align="center">0</td><td align="center">补全角落(visual模式下)</td></tr><tr><td align="center"><code>V + A + W</code>,即vaw</td><td align="center">vaw</td><td align="center">快速选中一个单词</td></tr><tr><td align="center"><code>V + A + B</code>,即vab</td><td align="center">vab</td><td align="center">~~包括括号()</td></tr><tr><td align="center"><code>V + A + Shift B</code>,即vaB</td><td align="center">vaB</td><td align="center">~~包括大括号{}</td></tr><tr><td align="center"><code>V + A + <</code>,即va<</td><td align="center">va<</td><td align="center">~~包括尖括号<></td></tr></tbody></table><blockquote><p> 注:visual模式下,仍可用b,w,e等跳跃文本技巧</p></blockquote><h3 id="视图模式其他用法"><a href="#视图模式其他用法" class="headerlink" title="视图模式其他用法"></a>视图模式其他用法</h3><table><thead><tr><th align="center">命令</th><th align="center">功能</th></tr></thead><tbody><tr><td align="center">v<</td><td align="center">往左缩进</td></tr><tr><td align="center">v></td><td align="center">往右缩进</td></tr><tr><td align="center">v~</td><td align="center">大小写转换</td></tr><tr><td align="center">vu</td><td align="center">转换为大写</td></tr><tr><td align="center">vU</td><td align="center">转换为大写</td></tr></tbody></table><h3 id="查找和替换"><a href="#查找和替换" class="headerlink" title="查找和替换"></a>查找和替换</h3><ul><li>查找 — /<ul><li> <code>/int</code> — 查找int</li><li> <code>n</code> — 下一个</li></ul></li><li>替换 — :<ul><li> <code>:s /int/double/g</code> — 当前行的int都替换为double</li><li> <code>:%s /int/double/g</code> — 所有的int都替换为double</li><li> <code>:set number</code> — 临时显示行号</li><li> <code>:5,10s /int/double/g</code> — 5-10行的int替换为double</li><li> <code>:%s /int/double/gc</code> — 有提示的替换</li></ul></li></ul><h2 id="vim的基础配置"><a href="#vim的基础配置" class="headerlink" title="vim的基础配置"></a>vim的基础配置</h2><ul><li><p> 创建配置文件 —— <code>touch .vimrc</code></p></li><li><p>配置 —— <code>vim .vimrc</code></p><p> 写入以下代码(无需注释)</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token builtin class-name">set</span> <span class="token assign-left variable">syntax</span><span class="token operator">=</span>on<span class="token comment"># 高亮</span><span class="token builtin class-name">set</span> <span class="token assign-left variable">tabstop</span><span class="token operator">=</span><span class="token number">4</span><span class="token comment"># 设置缩进</span><span class="token builtin class-name">set</span> <span class="token assign-left variable">softtabstop</span><span class="token operator">=</span><span class="token number">4</span> <span class="token builtin class-name">set</span> number<span class="token comment"># 显示行号</span><span class="token builtin class-name">set</span> <span class="token assign-left variable">enc</span><span class="token operator">=</span>utf-8<span class="token builtin class-name">set</span> showmatch<span class="token comment"># 括号匹配</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre></li><li><p> 显示行号后,快速进入该行行首 — 命令:<code>number + gg</code></p></li><li><p><code>vim .</code> —— 通过vim查看当前目录所有文件</p> <img src="/2021/08/13/Linux/image-20210813151830423.png" class=""></li></ul><hr><h1 id="十一:server"><a href="#十一:server" class="headerlink" title="十一:server"></a>十一:server</h1><h2 id="Linux-Server"><a href="#Linux-Server" class="headerlink" title="Linux Server"></a>Linux Server</h2><p>安装Ubuntu Server,设置(更换镜像源<a href="http://mirrors.aliyun.com/ubuntu%EF%BC%8C%E5%85%B6%E4%BD%99%E5%9F%BA%E6%9C%AC%E7%9B%B4%E6%8E%A5Done%EF%BC%89%EF%BC%8C%E6%9B%B4%E6%96%B0">http://mirrors.aliyun.com/ubuntu,其余基本直接Done),更新</a></p><img src="/2021/08/13/Linux/image-20210808201237317.png" class=""><h2 id="SSH远程登录"><a href="#SSH远程登录" class="headerlink" title="SSH远程登录"></a>SSH远程登录</h2><p>安装<code>net-tools</code>和<code>ssh</code>,<code>ifconfig</code>查看ip,通过putty连接到server</p><blockquote><p> <a href="https://blog.csdn.net/TWJ88936543/article/details/103042009">解决putty连接Ubuntu超时 Network error:Connection timed out</a></p><p> 最后解决:ping发现不互通,然后通过 <code>网络设置->更改适配器选项->Vmware Network Adapter->诊断并修复</code> 解决</p></blockquote><h2 id="WSL"><a href="#WSL" class="headerlink" title="WSL"></a>WSL</h2><ul><li><p> WSL, Windows Subsystem for Linux</p></li><li><p> 控制面板->启用或关闭Windows功能->使用于Linux的Windows子系统,Msc Store安装Ubuntu18.04,使用Windows Terminal连接</p></li><li><p>使用Windows Terminal通过SSH连接虚拟机的Ubuntu(类putty)</p><p> 配置Windows Terminal的json文件:</p> <pre class="line-numbers language-none"><code class="language-none">{ "guid": "{9db309df-38f6-4ad2-8970-03718f686545}", "hidden": false,"name": "Ubuntu-20.04x64","commandline": "ssh [email protected]"}<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><blockquote><p> 注:guid通过guid生成工具产生:<a href="http://www.guidgen.com/">www.guidgen.com</a></p><p> 参考:<a href="https://blog.csdn.net/qq_46207024/article/details/116572048">https://blog.csdn.net/qq_46207024/article/details/116572048</a></p></blockquote></li></ul><blockquote><p> <strong>Linux最后的结束语</strong>:</p><p> 只有你不停地向前,才知道自己要做什么</p><p> 共享与开源,世界更美好</p></blockquote>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla</summary>
<category term="Linux" scheme="https://forest-lee.github.io/categories/Linux/"/>
<category term="Linux" scheme="https://forest-lee.github.io/tags/Linux/"/>
<category term="Shell" scheme="https://forest-lee.github.io/tags/Shell/"/>
</entry>
<entry>
<title>B/S笔记</title>
<link href="https://forest-lee.github.io/2021/04/18/BS-notes/"/>
<id>https://forest-lee.github.io/2021/04/18/BS-notes/</id>
<published>2021-04-18T11:43:52.000Z</published>
<updated>2022-02-22T09:50:34.237Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p> Course Link: <a href="https://www.yuque.com/books/share/ddbdba56-dc9f-4997-9e18-d9e69309d343/ii1eba">https://www.yuque.com/books/share/ddbdba56-dc9f-4997-9e18-d9e69309d343/ii1eba</a></p></blockquote><h1 id="1-软件架构"><a href="#1-软件架构" class="headerlink" title="1.软件架构"></a>1.软件架构</h1><p>B/S 架构软件 —— 我们所有的东西都希望通过网站的形式使用,而不依赖于任何其他第三方环境,且依赖于浏览器的应用</p><h2 id="系统软件"><a href="#系统软件" class="headerlink" title="系统软件"></a>系统软件</h2><ul><li><p> <strong>操作系统、驱动程序等</strong> </p></li><li><p> C/C++</p></li></ul><h2 id="C-S架构"><a href="#C-S架构" class="headerlink" title="C/S架构"></a>C/S架构</h2><ul><li><p> <strong>桌面应用</strong></p></li><li><p> client 客户端 server 服务端</p></li><li><p> C/C++ C# QT</p></li></ul><p> eg: WPS UWP软件(windows store) Adobe</p><h2 id="B-S架构"><a href="#B-S架构" class="headerlink" title="B/S架构"></a>B/S架构</h2><ul><li><p> <strong>开发网站</strong></p></li><li><p> browser 浏览器 server 服务端</p></li><li><p>分类</p><ul><li> <strong>1.前端</strong> HTML CSS JavaScript </li><li> <strong>2.后端</strong> Java Python PHP Node Golang </li></ul></li></ul><p> eg:Web程序(tb jd bilibili baidu… ) “小程序”(mini program)</p><h2 id="PS-移动端"><a href="#PS-移动端" class="headerlink" title="PS.移动端"></a>PS.移动端</h2><ul><li><p> Android Java–>Kotlin</p></li><li><p> IOS Object-c</p></li></ul><h1 id="2-开发B-S架构软件需要哪些人才?"><a href="#2-开发B-S架构软件需要哪些人才?" class="headerlink" title="2. 开发B/S架构软件需要哪些人才?"></a>2. 开发B/S架构软件需要哪些人才?</h1><p>前端</p><p>后端</p><p>测试</p><p>运维 —— 管服务器、管部署</p><p>产品经理(PM)</p><p>首席技术官CTO【技术岗最高职位】(可能没有)</p><p>架构师【技术岗次高职位】</p><h1 id="3-前端准备"><a href="#3-前端准备" class="headerlink" title="3. 前端准备"></a>3. 前端准备</h1><h2 id="VS-Code"><a href="#VS-Code" class="headerlink" title="VS Code"></a>VS Code</h2><h2 id="Google-Chrome"><a href="#Google-Chrome" class="headerlink" title="Google Chrome"></a>Google Chrome</h2><h2 id="Node-js"><a href="#Node-js" class="headerlink" title="Node.js"></a>Node.js</h2><p>设置淘宝镜像命令:</p><pre class="line-numbers language-none"><code class="language-none">npm install -g cnpm --registry=https://registry.npm.taobao.org<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h2 id="Yarn(可选)"><a href="#Yarn(可选)" class="headerlink" title="Yarn(可选)"></a>Yarn(可选)</h2><p>PS:如果你要安装它,前提是必须安装Node.js</p><p>运行以下命令安装Yarn(新版本)</p><pre class="line-numbers language-none"><code class="language-none">npm install --global yarn<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>查看当前镜像源</p><pre class="line-numbers language-none"><code class="language-none">yarn config get registry<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p>修改淘宝镜像</p><pre class="line-numbers language-none"><code class="language-none">yarn config set registry https://registry.npm.taobao.org/<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><h1 id="4-前端预备课"><a href="#4-前端预备课" class="headerlink" title="4. 前端预备课"></a>4. 前端预备课</h1><p>学习指路☛<a href="https://developer.mozilla.org/zh-CN/docs/Learn">MDN前端文档</a></p><h2 id="HTML-——-定义网页内容的含义和结构"><a href="#HTML-——-定义网页内容的含义和结构" class="headerlink" title="HTML —— 定义网页内容的含义和结构"></a>HTML —— 定义网页内容的含义和结构</h2><p><strong>HTML</strong>(超文本标记语言——Hyper Text Markup Language)是构成 Web 世界的一砖一瓦。它定义了网页内容的含义和结构。</p><h2 id="CSS-——-网页的表现与展示效果"><a href="#CSS-——-网页的表现与展示效果" class="headerlink" title="CSS —— 网页的表现与展示效果"></a>CSS —— 网页的表现与展示效果</h2><p><strong>层叠样式表</strong> (Cascading Style Sheets,缩写为 <strong>CSS</strong>),是一种样式表语言,用来描述 HTML 或 XML(包括如 SVG、MathML、XHTML) 之类的 XML 分支语言)文档的呈现。CSS 描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问题。</p><h2 id="JavaScript-JS-——-网页的功能与行为"><a href="#JavaScript-JS-——-网页的功能与行为" class="headerlink" title="JavaScript (JS) —— 网页的功能与行为"></a>JavaScript (JS) —— 网页的功能与行为</h2><p><strong>JavaScript (</strong> <strong>JS</strong> ) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web 页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,例如 Node.js、 Apache CouchDB 和 Adobe Acrobat)。JavaScript 是一种基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。</p><h2 id="JS-框架"><a href="#JS-框架" class="headerlink" title="JS 框架"></a>JS 框架</h2><p>jQuery Vue React</p><h2 id="CSS-框架"><a href="#CSS-框架" class="headerlink" title="CSS 框架"></a>CSS 框架</h2><p>Bootstrap Element UI</p><h1 id="5-后端预备课"><a href="#5-后端预备课" class="headerlink" title="5. 后端预备课"></a>5. 后端预备课</h1><h2 id="VMware-虚拟机"><a href="#VMware-虚拟机" class="headerlink" title="VMware 虚拟机"></a>VMware 虚拟机</h2><blockquote><p>学习指路☛<a href="https://www.bilibili.com/video/BV1t741167UB">https://www.bilibili.com/video/BV1t741167UB</a></p></blockquote><ol><li><p> 虚拟、安全性 —— 与本机独立,虚拟化的一个系统</p></li><li><p> 随意性 —— 可以把软件拖来拖去</p></li><li><p> 快捷快照 —— 快速恢复到原来状态</p></li></ol><p><strong>VMware Workstation</strong></p><blockquote><p><a href="https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html">https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html</a></p></blockquote><p><strong>win10官方镜像网站</strong></p><blockquote><p><a href="https://www.microsoft.com/zh-cn/software-download/windows10/">https://www.microsoft.com/zh-cn/software-download/windows10/</a></p></blockquote><p><strong>Ctrl + Alt 释放鼠标,回到真实机</strong></p><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token comment"># 备忘录——这台电脑用来学习的Ubuntu Server虚拟机</span><span class="token comment"># ip</span>~$ <span class="token function">ifconfig</span><span class="token comment"># login</span>login as:frankpswd:123456<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h2 id="Linux基础"><a href="#Linux基础" class="headerlink" title="Linux基础"></a>Linux基础</h2><p>vim shell </p><p>Android 小米 OPPO 华为 VIVO … 基于</p><p>Linux CentOS RedHat Ubuntu Kali …</p><h3 id="运维需要精通"><a href="#运维需要精通" class="headerlink" title="运维需要精通"></a>运维需要精通</h3><p>注:搜索Ubuntu 的问题一定要带上版本号 (eg.16.04/18.04)</p><blockquote><p>阿里镜像源:<a href="https://mirrors.aliyun.com/ubuntu/">https://mirrors.aliyun.com/ubuntu/</a></p></blockquote><ul><li><p>拿到系统先更新</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> update<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>设置root密码</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">passwd</span> root<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>小火车试运行:sl</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> slsl<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p>其他操作</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">Ctrl+L <span class="token comment"># 清屏</span>Ctrl+U <span class="token comment"># 清行</span><span class="token function">ls</span> <span class="token parameter variable">-a</span> <span class="token comment"># 查看隐藏文件</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre></li><li><p>安装必要软件</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> openssh-server<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><h3 id="SSH连接"><a href="#SSH连接" class="headerlink" title="SSH连接"></a>SSH连接</h3><ul><li><p>本质——传输命令</p><p> eg:在Putty中输入ls命令,通过SSH协议连接到ubuntu虚拟机,执行ls命令,然后返回结果给Putty</p></li><li><p>SSH连接</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ssh</span> [email protected]<span class="token punctuation">(</span>IP<span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p> 公司不会给你暴露IP地址,但会给你密钥,你离职时会删除</p></li><li><p> 推荐:XShell 功能更强,但是要钱;我们用的是Putty。</p></li></ul><h3 id="Linux中:粘贴-右键单击"><a href="#Linux中:粘贴-右键单击" class="headerlink" title="Linux中:粘贴 == 右键单击"></a>Linux中:粘贴 == 右键单击</h3><h3 id="代码怎么放到网站上?"><a href="#代码怎么放到网站上?" class="headerlink" title="代码怎么放到网站上?"></a>代码怎么放到网站上?</h3><ul><li><p>文件传输 基于FTP协议</p><ol><li> 部署到GitHub等代码管理上(如Git)【现在都用这个】</li><li> FTP传输</li></ol></li><li><p>查看IP</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">ifconfig</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>查看内存(-m 以MB为单位 ~代表用户目录)</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">free</span> <span class="token parameter variable">-m</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p> 补全命令 —— <code>tab</code>键</p></li><li><p>进入工程文件夹</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">vim</span> <span class="token builtin class-name">.</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><h3 id="Linux中安装软件举例"><a href="#Linux中安装软件举例" class="headerlink" title="Linux中安装软件举例"></a>Linux中安装软件举例</h3><ul><li><p>安装nodejs</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> nodejs<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>安装yarn —— <strong>“安全+可靠+快”的包管理器(基于npm)</strong></p><ol><li><p>第一步——配置仓库</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">curl</span> <span class="token parameter variable">-sS</span> https://dl.yarnpkg.com/debian/pubkey.gpg <span class="token operator">|</span> <span class="token function">sudo</span> apt-key <span class="token function">add</span> <span class="token parameter variable">-echo</span> <span class="token string">"deb https://dl.yarnpkg.com/debian/ stable main"</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /etc/apt/sources.list.d/yarn.list<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>第二步——安装</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">sudo</span> <span class="token function">apt-get</span> update <span class="token operator">&&</span> <span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> <span class="token function">yarn</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>第三步——检查</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">yarn</span> <span class="token parameter variable">-v</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>配置</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">yarn</span> config <span class="token builtin class-name">set</span> registry https://registry.yarnpkg.com<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ol></li><li><p>安装pm2</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">yarn</span> global <span class="token function">add</span> pm2<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><h2 id="后端语言:Java-Go-Nodejs-C-NET-Python-PHP"><a href="#后端语言:Java-Go-Nodejs-C-NET-Python-PHP" class="headerlink" title="后端语言:Java/Go/Nodejs/C#(.NET)/Python/PHP"></a>后端语言:Java/Go/Nodejs/C#(.NET)/Python/PHP</h2><blockquote><p>JSP –> 在html里面扩展java代码 eg: <%for…%></p><p>前后端兼有,不利于业务拓展</p></blockquote><ul><li>现在已经前后端分离</li></ul><h2 id="HTTP服务器搭建软件:Tomcat-Nginx-Apache"><a href="#HTTP服务器搭建软件:Tomcat-Nginx-Apache" class="headerlink" title="HTTP服务器搭建软件:Tomcat/Nginx/Apache"></a>HTTP服务器搭建软件:Tomcat/Nginx/Apache</h2><ul><li><p>比如Tomcat,给某个IP开放一个端口(8080)</p></li><li><p>下面两者都是3000!</p></li></ul><h3 id="Express的搭建"><a href="#Express的搭建" class="headerlink" title="Express的搭建"></a>Express的搭建</h3><ul><li>基于 <a href="https://nodejs.org/en/">Node.js</a> 平台,快速、开放、极简的 Web 开发框架</li></ul><pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">yarn</span> init<span class="token function">git</span> init<span class="token function">yarn</span> <span class="token function">add</span> express <span class="token comment"># 安装</span><span class="token function">touch</span> app.js <span class="token comment"># 复制helloworld代码</span><span class="token function">node</span> app.js <span class="token comment"># 启动服务</span><span class="token comment"># 在app.js中app.get()上添加:app.use(express.static('public'));</span><span class="token function">mkdir</span> public<span class="token builtin class-name">cd</span> public~$ <span class="token function">vim</span> hello.html <span class="token comment"># 随便写个静态网页~$ cd ..~$ node app.js # 启动服务,进入/public,就看的到了</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre><h3 id="PM2"><a href="#PM2" class="headerlink" title="PM2"></a>PM2</h3><ul><li><p>PM2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能</p> <pre class="line-numbers language-git" data-language="git"><code class="language-git">sudo yarn global add pm2# 进入目标工程文件夹下pm2 start app.js # 启动服务,可以在同个工程下页面间互相链接了<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre></li><li><p>区别</p><ul><li>node app.js 只是短暂开启服务,而且没有优化</li><li>pm2 start app.js 只要服务器不关,就一直开着,还有优化</li></ul></li><li><p> PS:买服务器–>公网IP: 网站所有人都能打开</p></li></ul><p> 备案+买域名–>DNS服务器解析(作用:将IP+port端口转化为域名:<a href="http://www.xxx.com)/">www.xxx.com)</a></p><h2 id="数据库:MySQL-Oracle-SQL-Server-SQLite-MongoDB-Redis"><a href="#数据库:MySQL-Oracle-SQL-Server-SQLite-MongoDB-Redis" class="headerlink" title="数据库:MySQL/Oracle/SQL Server/SQLite/MongoDB/Redis"></a>数据库:MySQL/Oracle/SQL Server/SQLite/MongoDB/Redis</h2><blockquote><p> T-SQL: MySQL/Oracle/SQL Server/SQLite,NO-SQL: MongoDB/Redis</p></blockquote><ul><li><p>背景:因为我们前面搭的都是<strong>静态页面</strong>——<strong>无数据交互</strong>!</p></li><li><p><strong>动态页面</strong> :和用户之间具有数据交互,即对数据的增删改查(CRUD,create read update delete)</p></li><li><p>How?</p><p> 将数据存到txt中,纯属扯淡!!!</p><p> 存到excel中,稍好一点…至少有“<strong>表</strong>”了!但是过于庞大…</p><p> 更好的就是数据库!它本身也是有单独数据类型的,小数计算没有偏差,本质也是个文件。一个库相当于好多个excel表。</p></li><li><p>Recommend</p><p> 初学者学一个T-SQL和一个NO-SQL: <strong>MySQL和Redis</strong></p><p> 版本推荐:MySQL 5.7</p><blockquote><p>下载链接:<a href="https://dev.mysql.com/downloads/mysql/5.7.html">https://dev.mysql.com/downloads/mysql/5.7.html</a></p></blockquote><blockquote><p>Linux下安装配置:<a href="https://blog.csdn.net/weixx3/article/details/80782479">https://blog.csdn.net/weixx3/article/details/80782479</a></p></blockquote><p> PS. 不懂的话,安装时按照Developer Default即可。</p><p> 切记!<strong>用后端语言去驱动!</strong></p><p> 推荐图形化界面:Navicat(windows远程连接linux中的mysql)<a href="https://www.navicat.com.cn/">https://www.navicat.com.cn/</a></p><p> 推荐框架:ORM(@注释搞定,不用写sql语句,帮你执行sql,)<a href="https://typeorm.io/#/">https://typeorm.io/#/</a> </p></li></ul><blockquote><p> 剩下的东西,水到渠成</p></blockquote><h2 id="MVC模式"><a href="#MVC模式" class="headerlink" title="MVC模式"></a>MVC模式</h2><p>model 模型</p><p>service 层</p><p>controller 控制器</p><h2 id="HTTP-API"><a href="#HTTP-API" class="headerlink" title="HTTP API"></a>HTTP API</h2><h2 id="TCP-UDP"><a href="#TCP-UDP" class="headerlink" title="TCP UDP"></a>TCP UDP</h2><h2 id="计算机网络"><a href="#计算机网络" class="headerlink" title="计算机网络"></a>计算机网络</h2><h1 id="6-Git"><a href="#6-Git" class="headerlink" title="6. Git"></a>6. Git</h1><p>开发人员:Linux作者(用C写的)</p><ol><li><p>版本控制 —— 保留了一切的历史 可以让代码迅速恢复到你想指定的commit位置</p><p> version1 2 3(比如3有bug,回滚回2)【时光穿梭】</p></li><li><p>协作开发 —— 需要网络</p><p> 在自己的电脑上使用git,那确实是有版本控制功能,没有协作开发功能</p><p> 大家把每次写的东西放到哪? 基于Git的一个平台—— GitHub,GitLab,码云(Gitee)</p></li><li><p>如何放在Linux上部署运行?网站是怎么运行的?</p><p> 过程:各自开发,git push上传——测试成功,git合并——架构师那跑成了,git pull更新</p></li></ol><h1 id="7-全栈"><a href="#7-全栈" class="headerlink" title="7. 全栈"></a>7. 全栈</h1><ul><li><strong>全栈工程师</strong>是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。[Baidu Wikipedia]</li></ul><h1 id="8-DevOps"><a href="#8-DevOps" class="headerlink" title="8. DevOps"></a>8. DevOps</h1><ul><li><strong>DevOps</strong>(<strong>Dev</strong>elopment和<strong>Op</strong>erations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。[Wikipedia]</li><li>开发+质量检测+技术运营</li></ul><h1 id="9-GitHub"><a href="#9-GitHub" class="headerlink" title="9. GitHub"></a>9. GitHub</h1><ul><li><p> 最好的程序猿网站</p></li><li><p>git克隆(尽量别直接Download)</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> clone url<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ul><h1 id="10-注意休息,-尽可能不要透支身体"><a href="#10-注意休息,-尽可能不要透支身体" class="headerlink" title="10. 注意休息, 尽可能不要透支身体"></a>10. 注意休息, 尽可能不要透支身体</h1><blockquote><p> 总结:本文是B/S预备方向课程笔记,偏向方向了解,由于记录时间较早,排版和格式较一般。</p><p> 如果对未来方向比较迷茫,想查看详细内容,可以点击文首课程链接了解。</p></blockquote>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla</summary>
<category term="计算机入门及方向" scheme="https://forest-lee.github.io/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%85%A5%E9%97%A8%E5%8F%8A%E6%96%B9%E5%90%91/"/>
<category term="BS" scheme="https://forest-lee.github.io/tags/BS/"/>
</entry>
<entry>
<title>My First Blog</title>
<link href="https://forest-lee.github.io/2021/04/17/Beginning/"/>
<id>https://forest-lee.github.io/2021/04/17/Beginning/</id>
<published>2021-04-17T08:19:00.000Z</published>
<updated>2022-02-22T09:43:00.816Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote><p> Reference: <a href="https://superior-leo.gitee.io/2021/01/29/da-jian-shu-yu-zi-ji-de-bo-ke/">https://superior-leo.gitee.io/2021/01/29/da-jian-shu-yu-zi-ji-de-bo-ke/</a></p></blockquote><h1 id="软件配置"><a href="#软件配置" class="headerlink" title="软件配置"></a>软件配置</h1><ol><li><p>安装node.js(14.16.1 LTS)</p><blockquote><p> <a href="https://nodejs.org/en/">https://nodejs.org/en/</a></p></blockquote></li><li><p>启动 Windows PowerShell</p><p> 查看node版本</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">node</span> <span class="token parameter variable">-v</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> 查看包管理器版本</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">npm</span> <span class="token parameter variable">-v</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>安装 git(2.30.0.2)</p><blockquote><p> <a href="https://git-scm.com/downloads">https://git-scm.com/downloads</a></p></blockquote></li></ol><h1 id="hexo框架安装"><a href="#hexo框架安装" class="headerlink" title="hexo框架安装"></a>hexo框架安装</h1><ol><li><p>利用镜像源下载安装cnpm</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-g</span> cnpm -- <span class="token assign-left variable">registry</span><span class="token operator">=</span>https://registry.npm.taobao.org<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>查看cnpm版本</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">cnpm <span class="token parameter variable">-v</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>安装hexo</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">cnpm <span class="token function">install</span> <span class="token parameter variable">-g</span> hexo-cli<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>验证是否成功</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo <span class="token parameter variable">-v</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>遇到问题:cnpm无法加载(系统禁止运行脚本)</p> <img src="/2021/04/17/Beginning/1.png" class=""><p> 解决办法:<a href="https://blog.csdn.net/l_x_cser/article/details/104956657">https://blog.csdn.net/l_x_cser/article/details/104956657</a></p> <img src="/2021/04/17/Beginning/2.png" class=""><p> 成功解决</p> <img src="/2021/04/17/Beginning/3.png" class=""></li></ol><h1 id="搭建个人博客"><a href="#搭建个人博客" class="headerlink" title="搭建个人博客"></a>搭建个人博客</h1><ol><li><p> 建立并进入文件夹blog:<code>E:\blog</code></p></li><li><p> 打开blog所在文件夹,右键git bash即可</p></li><li><p>生成博客-启动博客</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo inithexo s<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> <img src="/2021/04/17/Beginning/4.png" class=""> <img src="/2021/04/17/Beginning/5.png" class=""></li><li><p> 进入端口地址,可以看到自己的博客,切忌使用Ctrl+C</p></li><li><p>新建一个博客</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo n <span class="token string">"My first blog"</span><span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> <img src="/2021/04/17/Beginning/6.png" class=""></li><li><p> 进入 <code>blog\source\\_posts</code>,找到 <code>my-first-blog.md</code>,用 typora 打开,写入内容</p></li><li><p>编辑完成后回到 git bash 输入</p><p> 清理博客</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo clean <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> 生成博客</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo g<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre><p> 预览博客</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo s<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li></ol><h1 id="部署到gitee上"><a href="#部署到gitee上" class="headerlink" title="部署到gitee上"></a>部署到gitee上</h1><ol><li><p> 注册帐号,新建仓库(仓库名与昵称保持一致)</p></li><li><p> 安装git插件</p></li><li><p>修改 blog\_config.yml 文件(用VS Code打开)</p> <img src="/2021/04/17/Beginning/7.png" class=""></li><li><p> 进行远端部署</p></li><li><p> 刷新仓库</p></li><li><p> 进入gitee仓库,点击上方服务选择 Gitee Pages,下方强制https最好勾上。</p></li><li><p> 配置好后点击gitee pages弹出网址即可预览到你的博客。</p></li><li><p>遇到问题:</p><ul><li><p>hexo d 命令error</p> <img src="/2021/04/17/Beginning/8.png" class=""><p> 解决办法:<a href="https://blog.csdn.net/weixin_36401046/article/details/52940313">https://blog.csdn.net/weixin_36401046/article/details/52940313</a></p> <img src="/2021/04/17/Beginning/9.png" class=""><p> 仍无法使用此插件:<a href="https://blog.csdn.net/weixin_40161974/article/details/99441501">https://blog.csdn.net/weixin_40161974/article/details/99441501</a></p> <img src="/2021/04/17/Beginning/10.png" class=""> <img src="/2021/04/17/Beginning/11.png" class=""><p> 再次重新安装插件</p> <img src="/2021/04/17/Beginning/12.png" class=""><p> 成功解决:</p><p> 在 <code>E:\blog</code> 安装插件,即可正常使用 <code>hexo d</code> 命令</p></li></ul></li></ol><h1 id="主题设置"><a href="#主题设置" class="headerlink" title="主题设置"></a>主题设置</h1><ol><li><p>找到对应主题所在的地址</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash"><span class="token function">git</span> clone https://github.com/blinkfox/hexo-theme-matery.git<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p>将其克隆后,修改_config.yml文件里的theme为对应名字</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo cleanhexo ghexo shexo d<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre></li></ol><h1 id="注意点"><a href="#注意点" class="headerlink" title="注意点"></a>注意点</h1><ol><li><p> 在最后 <code>hexo s</code> 打开博客时,本地端口不能用ctrl+c复制网址,否则会停止该操作,导致端口打不开,直接在网页输入即可。</p></li><li><p>若配置好后出现error deployer not found:git的情况,可以尝试在后面添加一行</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">message: blog<span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre></li><li><p> 注意配置文件中的空格。</p></li><li><p> 同时github上步骤很详细,按照步骤完全没有问题,注意区分站点下的config文件与theme下的config文件修改是不一样的,链接如下:<a href="https://github.com/blinkfox/hexo-theme-matery">https://github.com/blinkfox/hexo-theme-matery</a></p></li><li><p>图片配置,我们采取将typora图片设置为自动添加到同名文件夹,最终一并复制到posts文件夹中</p><blockquote><p> 参考:<a href="https://blog.csdn.net/m0_43401436/article/details/107191688">https://blog.csdn.net/m0_43401436/article/details/107191688</a></p></blockquote></li></ol><h1 id="以后操作"><a href="#以后操作" class="headerlink" title="以后操作"></a>以后操作</h1><ol><li><p> 进入<code>E:/blog</code>目录,通过<code>git bash</code>打开</p></li><li><p>新建博客</p><ul><li><p> 直接<code>hexo n new_name</code>生成,自带文件夹</p></li><li><p>通过复制得到,需要在md文件首添加Front-matter,至少包括以下内容:</p> <pre class="line-numbers language-none"><code class="language-none">---title: 搭建个人第一篇blogdate: 2021-4-17 16:19:00---<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre></li></ul></li><li><p> 添加封面图到<code>/source/images/x.jpg</code>,并在Front-matter中添加img信息<code>/images/x.jpg</code></p></li><li><p>依次执行以下命令</p> <pre class="line-numbers language-bash" data-language="bash"><code class="language-bash">hexo cleanhexo ghexo d<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre></li><li><p>更新 Gitee Pages 服务,刷新博客,打开查看</p><p> 或更新 Github Pages 服务,并设置域名,刷新查看</p></li></ol>]]></content>
<summary type="html"><link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla</summary>
<category term="Blog" scheme="https://forest-lee.github.io/categories/Blog/"/>
<category term="hexo" scheme="https://forest-lee.github.io/tags/hexo/"/>
<category term="gitee" scheme="https://forest-lee.github.io/tags/gitee/"/>
</entry>
</feed>