Compare commits

..

No commits in common. "main" and "develop" have entirely different histories.

139 changed files with 2663 additions and 11995 deletions

View File

@ -1,69 +0,0 @@
name: Build and Publish
run-name: Build and Publish book (${{ gitea.actor }})
on: [push]
jobs:
Run:
runs-on: ubuntu-latest
steps:
- name: Info
run: echo "OS=${{ runner.os }} NAME=${{ gitea.event_name }} REPO=${{ gitea.repository }} BRANCH=${{ gitea.ref }} ST=${{ job.status }} RUNID=${{ gitea.run_id }}"
- name: Prepare Source
run: |
echo "--- write source ---"
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free">/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free">>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free">>/etc/apt/sources.list
cat /etc/apt/sources.list
rm -rf /etc/apt/sources.list.d/*
echo "--- update source ---"
apt-get update
- name: Prepare Lftp
run: |
apt-get install lftp -y
- name: Checkout
uses: https://git.hmtsai.cn/actions/checkout@v4
- name: Cache mdbook
uses: https://git.hmtsai.cn/actions/cache@v4
id: cache-mdbook
env:
cache-name: cache-mdbook
with:
key: ${{ runner.os }}-mdbook
path: |
study-area-action-deps
- name: Get file
if: ${{ steps.cache-mdbook.outputs.cache-hit != 'true' }}
run: |
git clone https://git.hmtsai.cn/cxykevin/study-area-action-deps
echo "Check..."
ls study-area-action-deps
- name: Add permission
run: chmod +x study-area-action-deps/mdbook-linux-$(uname -m)
- name: Build mdbook
run: study-area-action-deps/mdbook-linux-$(uname -m) build
- name: Cache mapbook
uses: https://git.hmtsai.cn/actions/cache@v4
id: cache-mapbook
env:
cache-name: cache-mapbook
with:
key: mapbook
path: |
mapbook
- name: Get mapbook
if: ${{ steps.cache-mapbook.outputs.cache-hit != 'true' }}
run: |
git clone https://git.hmtsai.cn/cxykevin/mapbook
echo "Check..."
ls mapbook
- name: Build sitemap
run: |
python3 mapbook/build.py
- name: Check book
run: ls book
- name: Upload
run: |
mv book index
lftp ${{ secrets.FTP_SITE }} -u ${{ secrets.FTP_USERNAME }},${{ secrets.FTP_PWD }} -e "mirror -R index index"

3
.gitignore vendored Executable file → Normal file
View File

@ -1,4 +1 @@
book
node
study-area-home-action-deps
study-area-action-deps

View File

@ -1,6 +0,0 @@
{
"rules":{
"no-empty-code": 1,
"no-long-code": 0
}
}

View File

@ -1,201 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -1,4 +0,0 @@
Copyright (C) 2024 Study Area Team
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

21
README.md Executable file → Normal file
View File

@ -1,11 +1,4 @@
# Study Area CN
### URL : [learn.study-area.org.cn](https://learn.study-area.org.cn)
![stars](https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fgit.hmtsai.cn%2Fapi%2Fv1%2Frepos%2Fstudy-area-cn%2Fstudy-area-cn&query=%24.stars_count&style=for-the-badge&logo=gitea&label=stars&labelColor=%23F0F0F0&color=%231080FF&cacheSeconds=120&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn)
![forks](https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fgit.hmtsai.cn%2Fapi%2Fv1%2Frepos%2Fstudy-area-cn%2Fstudy-area-cn&query=%24.forks_count&style=for-the-badge&logo=git&logoColor=%23303030&label=forks&labelColor=%23F0F0F0&color=%2350B250&cacheSeconds=120&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn)
![CI](https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.study-area.org.cn%2Fbadgeapi%2Factions%3Furl%3Dhttp%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn%2Factions%26label%3DCI&style=for-the-badge&cacheSeconds=0&labelColor=%23F0F0F0)
## 概述
这里是www.study-area.org的半克隆
采用mdbook开发编译请预先安装Rust环境。
@ -13,15 +6,15 @@
## 进度
- [X] 前言
- [X] 学习电脑
- [ ] 学习Linux
- [ ] 学习电脑
- [ ] 学习网络
- [ ] 学习Linux
## 如何帮助开发?
如果您想要协助我们的开发,请参阅[百科](https://git.hmtsai.cn/study-area-cn/study-area-cn/wiki)
如果你对本项目做出了贡献,就请在`/src/contributors.md`中写上你的名字吧!
1. fork本项目。
2. 新建feat_xxx分支。
3. 修改。
4. 新建feat_xxx分支到主仓库develop分支的PR。
5. 等待合并。

23
book.toml Executable file → Normal file
View File

@ -1,25 +1,6 @@
[book]
authors = ["Study Area CN Team"]
language = "zh-cn"
authors = ["hmtsai"]
language = "en"
multilingual = false
src = "src"
title = "Study Area CN"
[output.html]
additional-css = [
"theme/css/icons.css",
"theme/css/mdui.css",
"theme/css/highlight.min.css",
"theme/css/page.css",
"theme/css/font.css",
"theme/font/icons.woff2",
"theme/font/noto.otf",
"theme/font/sourcecodepro.woff2",
]
additional-js = [
"theme/js/mdui.global.js",
"theme/js/highlight.min.js",
"theme/js/mathjax.js",
"theme/js/tocrender.js",
"theme/js/page.js",
]

64
src/SUMMARY.md Executable file → Normal file
View File

@ -2,69 +2,5 @@
[前言](./intro.md)
[贡献者名单](./contributors.md)
[协议与约定](./conventions.md)
[如何使用学习环境](./how_to_use_studyenv.md)
[1. Licenses/MIT License](./licenses/LICENSE-MIT.md)
[2. Licenses/Apache License](./licenses/LICENSE-APACHE.md)
# 学习电脑
- [何为电脑](./learn_computer_basic/what_is_computer.md)
- [输入 & 输出](./learn_computer_basic/input_and_output.md)
- [中央处理器(CPU)](./learn_computer_basic/cpu.md)
- [内存](./learn_computer_basic/memory.md)
- [存储设备](./learn_computer_basic/storage_device.md)
- [主板](./learn_computer_basic/motherboard.md)
- [操作系统](./learn_computer_basic/operating_system.md)
# 学习 Linux 基础
- [初识 Linux](./learn_linux_basic/the_linux_learning_path.md)
- [漫谈 Linux 学习之路](./learn_linux_basic/the_linux_learning_path.md)
- [Linux 的发展历程](./learn_linux_basic/the_history_of_linux.md)
- [Linux 发行版](./learn_linux_basic/linux_distro.md)
- [Rocky Linux 安装](./learn_linux_basic/install_rocky_linux/install_rocky_linux_intro.md)
- [在 VMWare Workstation 上安装](./learn_linux_basic/install_rocky_linux/install_in_vmware.md)
- [在 VirtualBox 上安装](./learn_linux_basic/install_rocky_linux/install_in_vbox.md)
- [在你的电脑(实体机)上安装](./learn_linux_basic/install_rocky_linux/install_in_your_pc.md)
- [安装 Rocky Linux](./learn_linux_basic/install_rocky_linux/install_rocky_linux.md)
- [Linux 常识](./learn_linux_basic/linux_common_sense.md)
- [文件与路径](./learn_linux_basic/file_and_path/file_and_path.md)
- [文件权限管理](./learn_linux_basic/file_and_path/manage_file_premissons.md)
- [磁盘分区以及文件系统](./learn_linux_basic/file_and_path/diskpart_and_filesystem.md)
- [在 VMWare Workstation 上创建虚拟磁盘](./learn_linux_basic/file_and_path/diskpart_and_filesystem/create_disk_on_vmware.md)
- [在 VirtualBox 上创建虚拟磁盘](./learn_linux_basic/file_and_path/diskpart_and_filesystem/create_disk_on_vbox.md)
- [tar打包软件](./learn_linux_basic/file_and_path/tar_command.md)
- [gzip与xz](./learn_linux_basic/file_and_path/gzip_and_xz.md)
- [备份](./learn_linux_basic/file_and_path/backup.md)
- [Shell与Shell Script](./learn_linux_basic/shell_and_shell_script/shell_and_shell_script.md)
- [学习Shell](./learn_linux_basic/shell_and_shell_script/learn_shell.md)
- [Job]()
- [Vim编辑器](./learn_linux_basic/shell_and_shell_script/vim_editor.md)
- [Shell Script基本语法]()
- [条件判断语句]()
- [循环]()
- [函数]()
- [at与corntab]()
- [at]()
- [corntab]()
- [实战:文件自动备份]()
- [程序、线程和进程]()
- [什么是程序]()
- [线程和进程]()
- [进程与线程的管理]()
- [特殊的进程和文件]()
- [SELinux]()
- [SELinux初识]()
- [SELinux的工作原理]()
- [DAC和MAC]()
- [SELinux错误的处理]()
- [系统服务的管理]()
- [Systemd与init]()
- [service和target]()
- [systemctl的使用]()

View File

@ -1,21 +0,0 @@
# 贡献者名单
## 原站作者
- netman
## 团队成员
- [hmtsai](https://blog.hmtsai.cn)
- cxykevin
- undefined域名贡献者
- [路人甲](https://en.lurenapp.uk)
## 第一章:学习电脑
- 东北大学 张送柱(@Hmtsai 的计算机老师)
- ZXL-Q
## 第二章Linux 基础
> 每个子名单排名不分先后

View File

@ -1,27 +0,0 @@
# 约定
## 内容
章节之间可能会出现「笔者」的部分类似于配置的信息不一致的问题,这是因为「笔者」不是一个人,而是指代整个贡献这列表中的所有直接编辑过本书的人,所以会出现该问题,敬请谅解。
在本教程中,快捷键使用以下格式表示:
`Ctrl`键使用`^`(如 `^C`)或者`C`表示,`Alt`键使用`M`表示,`Super`(即`Windows`键)使用`S`表示。
它们的排列顺序是这样的:`C-M-S-<Other Key>`。
你可能会看到这种内容:`<Esc>:q!<Enter>`,其中 `<按键名>` 表示按下对应的按键(包括上面的快捷键)。
例如上面的内容,就表示:
1. 按一下键盘上的 `[Esc]`
2. 输入 `:q!`
3. 再按一下 `[Enter]`
## 授权
本文中如有转载文章,均已与原站取得授权,如有疑问请联系 “<rarmicrozip@outlook.com>
且转载文章会在末尾处注明作者与出处。
本站对一些文章进行了适当的修改和删减,以适合当下的环境。
本站原创文章若无特别说明均在 [MIT](./licenses/LICENSE-MIT.md) 与 [Apache2](./licenses/LICENSE-APACHE.md) 的双重许可下发布,转载请遵守相关规定。

View File

@ -1,29 +0,0 @@
# 如何使用学习环境?
本站提供了一个在线学习 linux 的环境,可以执行一些简单的命令,甚至可以编译一些程序。
本环境带宽有限,加载可能需要 5 到 10 分钟。
本环境基于 jslinux 搭建。所有程序运行在您的浏览器上。
学习环境使用 Fedora 33 系统,命令可能会和 rockyLinux 略有不同。
## 如何启动?
在页面上方可以找到“学习环境”按钮,也可以点击按钮:
<button onclick="stbtn()">实验环境</button>
系统内所有内容都会在刷新或切换页面时清除。
## 友情链接
如果本站服务无法访问,您还可以去下面的链接:
- [JSLinux](https://bellard.org/jslinux/vm.html?cpu=riscv64&url=fedora33-riscv.cfg&mem=256)
- [mxt.cn](https://mxt.cn/lxojres/jslinux/index.html)
> mxt 使用的操作系统略微不同
---
> study-area-cn

20
src/intro.md Executable file → Normal file
View File

@ -1,27 +1,15 @@
# 前言
## study-area-cn
[![stars](https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fgit.hmtsai.cn%2Fapi%2Fv1%2Frepos%2Fstudy-area-cn%2Fstudy-area-cn&query=%24.stars_count&style=for-the-badge&logo=gitea&label=stars&labelColor=%23F0F0F0&color=%231080FF&cacheSeconds=120&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn)](https://git.hmtsai.cn/study-area-cn/study-area-cn)
[![forks](https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fgit.hmtsai.cn%2Fapi%2Fv1%2Frepos%2Fstudy-area-cn%2Fstudy-area-cn&query=%24.forks_count&style=for-the-badge&logo=git&logoColor=%23303030&label=forks&labelColor=%23F0F0F0&color=%2350B250&cacheSeconds=120&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn&link=http%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn)](https://git.hmtsai.cn/study-area-cn/study-area-cn)
[![CI](https://img.shields.io/endpoint?url=https%3A%2F%2Fapi.study-area.org.cn%2Fbadgeapi%2Factions%3Furl%3Dhttp%3A%2F%2Fgit.hmtsai.cn%2Fstudy-area-cn%2Fstudy-area-cn%2Factions%26label%3DCI&style=for-the-badge&cacheSeconds=0&labelColor=%23F0F0F0)](https://git.hmtsai.cn/study-area-cn/study-area-cn/actions)
## 缘起
可能你对 study-area(酷学园)有所耳闻,本站就是对酷学园的“半克隆”,针对过时部分进行了一些修改,并更适合当下的情况。
可能你对study-area(酷学园)有所耳闻,本站就是对酷学园的“半克隆”,针对过时部分进行了一些修改,并更适合当下的情况。
## 愿景
本站旨在为想要学习 Linux 的朋友们提供一个安全的软着陆,从基础开始,深入浅出的讲解关于 Linux、计算机的知识。让读者自己思考和创造。
本站旨在为想要学习Linux的朋友们提供一个安全的软着陆从基础开始深入浅出的讲解关于Linux、计算机的知识。让读者自己思考和创造。
> 在这里您将看不见八卦看不见争吵没有新闻也没娱乐。本站仅能为阁下提供的就是您要学习的技术文件与心得经验的交流。本站的角色是一个网上的学习园地Study Area
这是原 study-area 的愿景,也是我们的愿景。
这是原study-area的愿景也是我们的愿景。
## 源文件
本站所有源码均托管在 [git.hmtsai.cn](https://git.hmtsai.cn/study-area-cn/study-area-cn) 上,欢迎查阅和提出修改意见。
本项目在 [Github](https://github.com/Study-Area-CN/study-area-cn) 和 [Gitee](https://gitee.com/study-area-cn/study-area-cn) 均有镜像。由 Gitea 定期单向同步。
本项目使用 Gitea Actions 自动构建。
本站所有引用的资料均已与原站取得授权,如有疑问请联系 “rarmicrozip@outlook.com”

View File

@ -1,74 +0,0 @@
# 中央处理单元(CPU)
## CPU 的功能
好了﹐这里要说的是电脑的大脑。
`Central Processing Unit`(CPU) 我们翻译成中央处理器。一些专业的大型电脑,其 CPU 可以很大(不过绝大多数以计算机集群为主)﹐但在 PC 上面的 CPU 只是比饼干还要小的一片陶瓷片。只要打开电脑﹐把风扇拿掉,就可以一睹 CPU 的庐山真面目了。我们常问“您的机器是什么型号的啊?”﹐其实问的多指 CPU 的型号。或许您听过什么 Intel I3,I5,I9 等 CPU﹐他们所代表的可以说是不同型号的 CPU。事实上除了 Intel 的 CPU 外,还有其它牌子的 CPU 可供选择。比方说AMD,龙芯等等。
> 译者注: mainframe、CPU 型号、品牌等为过时内容,已更改或删除
CPU 的功能如何呢?说来很复杂,主要为五个部分:
1. 输入单元
用来读取给电脑处理的数据或程序
2. 处理单元
用来执行计算、比较和判断等运算功能
3. 输出单元
将电脑的运算结果和处理好的数据输出
4. 记忆单元
用来储存数据或程序的地方
5. 控制单元
按作业程序指挥上述单元的运作及交换数据信道的传送
## 不同年代的 CPU
我们常追求最新最快的 CPU但是不同年代的 CPU 究竟不同在哪里呢?如果真要解释清楚,恐怕要写一本书出来。不过,下面的表格相信也可以帮助我们了解一下。
| 项目/类型 | [80486(1989)](https://baike.baidu.com/item/80486/7473784) | [Pentium(奔腾)4(2000)](https://baike.baidu.com/item/%E5%A5%94%E8%85%BE4/9113325) | [I5-6400(2010)](https://www.intel.cn/content/www/cn/zh/products/sku/88185/intel-core-i56400-processor-6m-cache-up-to-3-30-ghz/specifications.html) | [I5-10400(2019)](https://www.intel.cn/content/www/cn/zh/products/sku/199271/intel-core-i510400-processor-12m-cache-up-to-4-30-ghz/specifications.html) | [I5-14600(2023)](https://www.intel.cn/content/www/cn/zh/products/sku/199271/intel-core-i510400-processor-12m-cache-up-to-4-30-ghz/specifications.html) |
| :--------- | :-------------------------------------------------------: | :------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------: |
| 指令集架构 | x86 | x86 | x86-64 | x86-64 | x86-64 |
| 核心数 | 1 | 1 | 4 | 6 | 6P(大)+8E(小) |
| 计算速度 | 33-100 MHz | 1.3-3.8 GHz | 2.7(3.3) GHz | 2.9(4.3) GHz | P:2.7 Ghz E:2 Ghz |
| 制程 | 1000nm | 65-180nm | 14nm | 14nm | 7nm (Intel 7) |
> 以上 CPU 链接均摘自 Intel 官网和百度百科。</br>
> 最新数据请在 [Intel 官网](https://www.intel.cn) 查看。</br>
> 以上 CPU 均为 Intel CPUAMD CPU 请在 [AMD 官网](https://www.amd.com) 查看。</br>
> 说明1000 MHz = 1 GHz计算速度括号内为睿频频率。</br>
---
> 译者注: 过时内容,当前数据选自 2024 年 5 月
在 1980 年末﹐IBM 才开始大举进军个人电脑市场。在这之前﹐苹果在 1976 年就推出了 Apple I 个人电脑﹐之后 Apple II 也已经成功地拥有很大数量的用户了。IBM PC 使用的 CPU 厂商 Intel 其实早在 1976 年也推出了一款型号叫 8086 的 CPU其后不久的 8088 和它很相近﹐比起现代的 CPU 来说,它们可以说是慢得像蜗牛了:最快的只有 8MHzIntel 相继 8086 和 8088 之后还推出了 80186 和 80188但不是很成功。但是 Intel 打算将系统部件合并到 CPU 去的概念却对后来生产更快的 CPU如 80286/80386起到很重要的作用。从 80386 起人们就把 80 给去掉了,直接称为 x86 了。当 Intel 在推出 486 其后下一代的产品时,厂商将 CPU 型号命名为 Pentium从此PII、PIII、P4 等不同年代的 CPU 也都以 Pentium 命名。但在程序界中,仍有不少人继续称 Pentium CPU 为 586686 的,只是越来越少人坚持如此了。
AMD 在 2005 年 5 月推出了速龙 64 位处理器。这是首个消费级的 x86-64(可简称 x64)架构的处理器,在此之后的 CPU 大多都是 x64 架构的了。
所有年代的 CPU 都有一个特性向后兼容。也就是说486 的 CPU 可以跑 386 的程序但不能跑“专为”586 写的程序,甚至现在的 I5、I7 都可以运行为 386 编写的程序!故此,许多程序员在发布程序版本的时候,仍将 32 位的程序冠以`i386`的名字(其中的 i 就是 Intel 的意思)。由于 AMD 发明了 64 位架构,于是 64 位的程序就被叫做`amd64`(或`x86-64`)了。
> 译者注: 补充 x64 架构的内容
## 如何发挥 CPU 的效率?
要真正发挥 CPU 的效率,与其他配件的配合是密不可分的。因为他们要在同一速率上才能工作,时间上必须要配合默契。当 CPU 完成了一个运算之后I/O 也要同时将产生的运算结果传达出去,也同时传给 CPU 下一个运算数据。这情形就像接力赛那样如果时间不吻合接力棒就会丢了。不过CPU 处理数据往往要比单纯的数据交接更须时间。聪明的 CPU 设计工程师想出了一道绝招:就是将 CPU 运行于比总线BUS所有系统数据的运送信道快一定倍数的速度上。这样等周边反应过来的同时CPU 也率先完成运用了时至今日CPU 的速度远远快过周边,掉过来往往是 CPU 等它们了)。
据说CPU 在生产的时候都是一样的,之后厂家经过测试,按照尽可能稳定情况下的最高速度原则来定型号的。有些用家买了低速的 CPU 回来,然后经过改变 CPU 电压、频率以求更快的速度﹐这就是所谓的“超频”了。不过,阁下看到这里可别忙着去修改自己的电脑哦,否则要有什么元件损坏,作者可概不负责的哦~
现在的 CPU 一般会有睿频功能,相当于 CPU 自带的“超频”,可以智能调整电压和频率,不过睿频相比一般的超频是十分安全的,不会搞坏你的 CPU。
> 译者注: 删除过时的计算 CPU 速度的内容,并更改标题
---
> 原文: [netman](http://www.study-area.org/compu/compu_cpu.htm)</br>
> study-area-cn

View File

@ -1,42 +0,0 @@
# 输入&输出
## 输入输出有哪些设备?
电脑要对数据进行运算处理就必需要有所“输入”。键盘和鼠标是最基本的输入装置了,除了他们之外,当然还有很多其它输入设备,诸如:麦克风、摄像头、扫描仪、摇杆等等……凡此种种提供我们将数据入电脑的设备,都是输入设备。
所谓“输出”就是电脑经过运算之后产生的信息。 而显示这些信息的设备就是输出装置了。最常见到的输出设备就是屏幕、打印机、喇叭等等设备。通过输出设备我们可以“看”到电脑的运算结果了。
然而,从程序角度来看,一个电脑程序的输出,也可以作为其它程序的输入。
有时候我们在百货公司或其他公共场所,看到人们直接在屏幕上指指点点就可以和电脑交谈。这屏幕究竟是输入还是输出呢?哈哈,还是留待您自己去思考吧。
简单来说:离开了输入设备,电脑就是聋子兼瞎子;没有输出装置的话,电脑就成了哑巴。(不要跟我说您会手语哦~)
## 分辨设备类型
当我们买了电脑回家,第一件事情要做的不是插上电源然后按开关,而是先帮电脑装上输入输出设备。如果有机会,不妨看看电脑的背后,您就会发现有很多的接口,他们的规格是不一样的,所以也无需要担心接错了。不信您试试就知道了,当然不要硬来哦~
然而,有些设备的类型还是会有所不同的。 比如键盘的接口就有两种AT过时 和 PS/2现在还多了个 USB )。怎么分别呢?上面要是有标记当然好办,要不然数数那些孔的数目也可以知道。通常 AT 会是 5 孔PS/2 却有 6 孔(准确说是 7 孔,只不过那个方孔仅是用来作固定用的),且接口直径比 AT 要小很多。鼠标的接口也有分 SERIAL串口过时 和 PS/2 以及 USB 等型。 PS/2 的接口跟键盘的是一样的,如果没有标记的话,就要开机才知道了,如果您还在使用 PS/2 的设备,并且机器告诉您诸如 Keyboard Error 的信息,关机后把它们掉过来接就是了。
现在的电脑大部份都标识得非常清楚,而且还有颜色配合。 这样接起设备来就更轻松容易了。 万一还是不知到怎么接,千万别乱来,最好仔细看说明书或打电话请较厂商或朋友啰。
惯例上,我们把带针的接口叫做“公”,而把带孔的那端叫做“母”,相信这样很容易分辨吧?至于为什么要这样称呼?相信不用多解释吧! ^\_^
再看看电脑背后还有好多的接口,它们都是给输入输出设备用的(除了靠近风扇的那个(有些是两个)黑黑大大的是给电源用的)。
下面就简单介绍一下:
- 通常 PS/2 母插头都是一对的,很容易分辨。
- 另外有两个(可能不止两个)小小的扁扁的方孔,那就是 USB 接口。
- SERIAL串口 插头有时候是两个 9 针的公接口(但也有时候是一个 9 针,另外一个长长的 25 针的),现在在家用电脑上几乎见不到了。
- 在一些老电脑中,另外一个长长的 25 孔的母插头叫“并口”,通常较老的打印机就是接到那里的。
- 有一个 15 孔分三行排列的母插头,就是我们说的 VGA 接口,把屏幕接到这里就对了。
> 注:现在的大部分不算过于落后的电脑都拥有 HDMI(即下条所说的接口),从一般情况下来讲,应优先使用 HDMI 接口而并非 VGA
- 现在有了 HDMI扁长左上右上两个缺口 和 DP右上一个缺口 接口,在一些较新的电脑上可能会有,也是连接屏幕的。
- 要是还有网络卡的话,您会看到一个比 MODEM俗称“猫”连接电话线上网拨号上网已经过时接头稍大一点的 RJ45 母接头。 通常网线就是接到那上面的。接上之后就可以联网了呢。
假如您还加了些其他的插卡的话,您还会看到更多的接口,但已经很难在这里指出了。不过有用一种比较旧的 SCSI 接口跟并行都是 25 孔母接口的,那就要非常小心了,不然接错了有可能会损坏装置呢。不过,现在要找到这么旧的 SCSI 卡还真不容易呢!
---
> 原文: [netman](http://www.study-area.org/compu/compu_io.htm)</br>
> study-area-cn

View File

@ -1,85 +0,0 @@
# 内存
在选购电脑的时候,有一项信息是一定要知道的,就是内存有多大?
## 内存的作用
为什么内存这么重要呢?其实,电脑真正工作的场所是在内存上面,包括所有系统的驱动程序、操作系统、工作数据、成品/半成品等等,都必须先加载到内存上面才能给 CPU 读取。尤其对 Windows 或比较大型的程序,要求的内存也越多。而且,内存永远都只会嫌少不会嫌多的,就像钱对于我来说 ^\_^
## 如何计算内存的容量?
内存的最小单位是位(bit),每个位可以代表 1 或 0开或关而 8 个 bit 则组成 1 字节(byte)。byte 可以说是电脑最基本的计算单位了,再往后则每乘以 1024 来增加单位。也就是说:
> | | | |
> | -------------: | :-: | :------- |
> | 1KB(Kilo Byte) | = | 1024Byte |
> | 1MB(Mage Byte) | = | 1024KB |
> | 1GB(Giga Byte) | = | 1024MB |
> | 以此类推…… | | |
很早就和大家说过了:电脑只认识 0 和 1任何程序语言要交由电脑运算最终的还要换成 0 和 1 才能够让电脑读得懂。我们在键盘上敲进一个字母 `A`,真正传给电脑的是`01000001`这个 byte(8bit),我们称这种字母对应方法为 ASCII(America Standard Code for Information Interchange美国标准信息交换码)。通常我们以纯文字(英文)所处理的文章,就是使用 ASCII 字母的了。
究竟内存的需求量是怎样计算出来的呢?如果以纯文字来算,一页 A4 纸大约能有 5000 多字节(包括标点和空白),即 5KB那么 1MB 就有超过二百页了。但如果要做出更漂亮的文字,每个字还需要更多的内存来储存其字形字体、特殊效果、行段格式等等,那么 1MB 也只能储存数十页,有时更少。总之,越漂亮越复杂的文件,所需的内存也越多。
下面再拿一个比较实际的例子来算算内存的使用量﹕
我们在选购显卡(Video Adapter)的时候,常常听说某卡有多少多少显存,究竟多少才够用呢﹖
先拿一个古老的单色显卡来说,假设它的分辨率是 640x480也就是说屏幕上横有 640 个显示点,竖则有 480 个点,而每个点只有两种变化:亮(白/黄/绿等单色)或不亮,这可用 1 个 bit($2^{1}$)的开关来表示。那么
`640x480x1` bit</br>
= `307200` bit</br>
= `38400` byte</br>
= `37.5` KB</br>
= `0.036621` MB
您看只需要很少的显存就够了。然而,用的如果是彩色显卡的话,如果要显示简单的 16 色,每个点就需要 4bit($2^{4}=16$)来显示了,那么就需要
`640x480x4` bit</br>
= `228800` bit</br>
= `153600` byte</br>
= `150` KB</br>
= `0.15` MB
如果要显示 256(8bit) 色,则需要 `840x480x8` bit = `0.29` MB 了。
假如您的显卡可以显示 1024x768 的分辨率和 32bit 颜色(目前市面上的最低水准)的话,您最少需要`1024x768x32` bit = `3` MB 的 RAM。而现在市面上的显卡还有自己的程序处理功能(如 3D 加速AI 计算加速),那么则需要更多的显存了。
不过,请您要分清楚的是:这里以显存为例子,并不是电脑系统上面的内存,而是显卡本身的(虽然某些核心或板载显卡会共享电脑的内存)。同时,这里虽然只作为一个计算例子而已,不过也适合计算一个 BMP 图像文件的大小
> 注bmp 图像和 png 等图像不同,没有经过压缩,文件大小就是实际的分辨率大小,而 png 图像通常小于同分辨率的 bmp。
## 内存的管理
不同的操作系统,对内存的管理也不相同,下面以传统的 DOS 来看看内存的分配情形。由于传统设计的限制和向后兼容的考虑DOS 主要运用的是内存的前 1MB。而且真正工作的区域也只是前面的 640K然而哪怕早期的 Windows 也已经打破了这个限制了)。
| 0-640KB | 640-</br>768KB | 768-</br>832KB | 832-</br>896KB | 896KB-</br>1MB | 1MB-</br>16MB/4G |
| -------------------------------------------- | -------------- | --------------- | -------------- | ------------------ | -------------------------------------------------------------------------------------------------------- |
| &ensp;&ensp;&ensp;基本内存&ensp;&ensp;&ensp; | 显存</br>预留 | 适配器</br>内存 | EMS</br>Window | 主板 BIOS</br>内存 | &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;扩展内存&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp; |
离开了内存,电脑一点东西都做不到,但如果 RAM 给扰乱了或是超出了范围,电脑也会不工作,通常电脑的宕机或蓝屏(out of memory)就是这样形成的。
一般来说,当一个程序被启动的时候,所有其必须运用的数据都会先加载到内存上面,当程序被关闭的时候,也将所占用的空间腾空出来好给其它程序使用。但有些被称为“驻留程序(后台程序)”的程序,即使是“关闭”了依然还会存留在 RAM 里面。不过,这种程序为数不多,且都是些经常要用到的一些程序(大部分系统程序)。另外,有些电脑病毒也是这样躲在 RAM 里面而将继续开启的文件感染。
好的操作系统有较完善的内存管理,能避免因内存错误而当机的能力也比较好。通常我们在 Windows尤其是 Windows95 一类的较老的操作系统)上面看到什么 `'Illegal operation'`(非法指令emm学习 C++的可能会遇到过)之类的信息,就多是因为内存错误而引起的。幸运的话,用 Ctrl+Alt+Del 打开任务管理器将受影响的程序结束掉,还可以继续工作;然而有时除了关机就别无它途,更糟糕的是连错误信息都没有就不动了。但相同的情形,如果在一个 Unix或 Linux系统上面它们对内存的管理非常棒。就算本机的键盘不能操作您还可以从另外的机器使用 telnet 或 ssh 进去然后将问题程序结束(kill)掉也还可以继续工作,未必一定要关机的。不过,现在的 Windows 也做到了这一点。
## 内存的分类
凡是能利用电子性能来作记录的元件都可以称为内存(Memory),也分为只读存储器即 ROM(Read Only Memory)和随机储存内存(这也就是上面大多数所提到的的内存)RAM(Random Access Memory)。
其实几乎所有的主板和扩展卡(包括显卡等)及其它设备都有它们的 ROM主要是记录一些控制程序和协议等也有各自的 RAM 来储存数据。
而我们通常说到的电脑内存就多指系统的 RAM早期的 RAM 都是直接焊接在主板上面的,而现在 RAM 已经模块化成为内存条,便于更换。不过,某些设备,例如某些型号的笔记本电脑和所有手机,内存还集成在主板上甚至 CPU 内部。假如您翻看前面 CPU 的叙述,不同年代的 CPU 其最大内存地址也是不同的。x86 的 CPU 的最大内存地址是大约 4GB但 x86-64 架构的 CPU 的最大内存地址是大约 64TB($2^{46}$Byte)。
RAM 的速度是以 ns纳秒nanoseconds`1000000ns = 1ms`)做单位,以数据的储存速度为标准,数值越低越快。以前的 SIMM 有些是 70ns十分古老的 DIMM 最快都可以到 10ns 了。而现在主流的 DDR4 的 RAM速度就更快了(没有找到确切的数据,但据说传输速度达到了 17-25GB/s)。同时,为配合 CPU 的外频速度,也需要不同外频速度的 RAM 才能发挥性能。
> 以目前写者现在使用的内存来说 2666MHz \* 128bit双通道 / 8位到字节单位转换 = 42.656GB/s。当然这只是理论速度实际发挥还要看内存控制器
ROM 虽然说是只读的,但现在的主板甚至显卡的 ROM 多数是可以重复刷写的,也就是通过程序可以对里面的内容进行更新。不过,如果自己升级固件就要非常小心了,尤其是在升级过程的一半断电的话可就难堪了。比如很久以前的 CIH 病毒,就可以进入到 ROM 里面去改写数据,以致机器打不开。如果拿去修理,有些奸商会趁机叫您将主板换掉,其实只要有适当设备,将数据重新写进 ROM 就可以救回的了,再不然,买一个新的 ROM 换掉也可以。
然而RAM 有一共同特性,就是有电才能维持记忆,如果电源关掉了,里面所有的数据都会回复到全部为正或负。如果打开台式机的机器盖子去看看主板的话,上面应该都有颗钮扣电池,它就是用来维持主板时钟和 CMOSComplementary Metal-Oxide Semiconductor用来储存和维护一些机器的基本设定数据的工作的。一旦机器很久没用重启的时候或许会显示警告或者开不起来可能就是 CMOS 的电池用完了,在重新插拔或更换电池后,以前的设定也就消失掉了,此时只能再进入 BIOSBasic Input Output System在厂家预设的基础上进行修改后才能让机器回复工作。有时候如果忘记了 BIOS 的密码,也可以通过取出电池或通过跳针将原有的设定清除掉,再重新设定。不过现在的 CMOS 大部分已经采用了非易失性存储器,断电不会丢失数据。所以主板上的电池只剩下了维持时钟工作的功能。不过为了保留传统,大部分厂商的主板也保留了扣下电池清除 BIOS 配置的功能,只是已经不能清除密码了。
---
> 原文: [netman](http://www.study-area.org/compu/compu_mem.htm)</br>
> study-area-cn

View File

@ -1,72 +0,0 @@
# 主板
主板Main Board英文也有写作 Mother Board意思就好像母亲一样所有的部件有如是她的孩子离开了她就根本就不会出世。 这比喻足见主板是何等重要的了。 上面所介绍的输入/输出设备、CPU、内存、储存设备、等等其实都不能离开主板而工作
如果您有机会打开机箱,您会发现里面密密麻麻的电子零件都镶嵌在一块很大的电路板上面,那电路板就是主板了。
## 主板的芯片组
如果您留意到电脑广告上的主板Intel 的通常都是以 XBC 等字母开头的。 究竟这型号怎么来的呢?其实这型号是主板上面的一块芯片我们通常称为桥片的型号,就好像我们称呼 CPU 型号为电脑型号一样。 同样的,桥片通常都是由 CPU 的厂家生产的,比如英特尔的 CPU 就组搭配英特尔的桥片...
> 译者注:
> 其实这桥片的名字很形象,它实际上就是整个系统硬件的“桥”,要想深入了解,就请继续往下看吧!
这桥片的功能可大了,它几乎就是整个系统的信息交通指挥官。 它负责将 I/O 和 RAM 的要求和数据传送给 CPU也负责将 CPU 的命令和数据传给它们。 比如 CPU 要将信息传给, 就负责该把这信息送到正确地址了。 注意,其实每一个设备都有自己地址的,比如打印口 LPT1 通常是 0x378;通讯口 COM1 通常是 0x3F8 等等。 CPU 只是给出地址,但怎么传达却是桥片负责。
## 如何挑选主板﹖
除了桥片,在选择主板的时候,有几点是我们要考虑的:
### 1.处理器
当然是指这主板支持的 CPU 类型了。 比如此主板是给 E5 还是 14th Core 用的?而且不同类型的 CPU 使用的电压也不同,比如有些是 2.8v,有些则是 3.3v 或 3.5v 等等的分别。 有些主板可以通过调整 跳线 来适合不同的 CPU 电压要求。
### 2.处理器插槽
不同的处理器有不同的插槽规格,比如 E5v4 所使用的是 LGA201114th Core 使用的是 LGA1700也有其他的插槽,您购买时可要注意一下。
### 3.内存支持
如今主流的内存类型也就 DDR3DDR4DDR5 这些了。DDR3 在一些比较老旧的平台上还看得到,新的电脑基本都是 DDR5 了。DDR4 因为市场保有量很大,所以目前市面上还有得卖。这些插槽和协议可是互不兼容的,您挑选的时候要注意。
> 注原来还有叫「DDR3L」的它使用的电压要低一些在笔记本上有时候会见到如果插到了标准 DDR3 槽位,可能会把内存连主板一起送走,还是要小心为好。
### 4.总线类型
emm...恐怕这东西也不是个容易说清楚的问题。简单来说一般电脑常见的总线有两种类型PCI 和 PCIe。这些东西都是用来插一些扩展设备的如网卡、RAID 卡、显卡等等。这俩玩意儿长得一样,基本上只是协议不同,现在用的最多的还是 PCIePCI 都已经少见了
PCIe 分为好几个版本,还有 x1x4 等通道之分,一般来说,版本越新,通道越多,速度越快。
| 版本 | PCIe 1.0 | PCIe 2.0 | PCIe 3.0 | PCIe 4.0 | PCIe 5.0 |
| ---- | -------- | -------- | ---------- | ---------- | ---------- |
| x1 | 250MB/s | 500MB/s | 984.6MB/s | 1.969GB/s | 3.9GB/s |
| x4 | 1GB/s | 2GB/s | 3.938GB/s | 7.877GB/s | 15.8GB/s |
| x8 | 2GB/s | 4GB/s | 7.877GB/s | 15.754GB/s | 31.508GB/s |
| x16 | 4GB/s | 8GB/s | 15.754GB/s | 31.508GB/s | 63GB/s |
> 其实Nvme 本质上就是 PCIe x4最新的 PCIe 5.0 x4 速度已经达到将近 16GB 每秒了,实在是太快了
### 5.BIOS (Basic Input Output System)
在电脑刚刚启动的时候BIOS 一定比操作系统先工作起来顾名思义BIOS 管理的就是电脑最基本的 IO 设备了。包括系统日期、显示模式、硬盘类型、系统启动顺序,以及一些内存的设置。如果这些东西设置不正确的话你的电脑极有可能没办法启动操作系统或者十分不稳定。BIOS 的作用就是将不标准的硬件设备整合,提供一个标准的接口给系统使用。
现在的 BIOS 还多了一些 Nvme、APM (Advanced Power Management高级电源管理),以及 PCIe 拆分等较新的功能。
今天我们的 BIOS 基本都是主板厂商深度定制的产品了,而且还有了 UEFI 的支持,以前传统的 BIOS 现在叫做 Legacy BIOS现在的基本都是 UEFI BIOS 了。
### 6.内置设备
在很久以前,一张主板的功能很少,实际上也就刚刚符合主板的定义而已。但今时不同往日,一张主板的功能已经很多了,网卡 ,声卡,都已经包括在主板上了,而且如果需求不是很极限的话,完全够用。甚至有些主板都已经包含无线网卡了。这些东西虽然方便,但是肯定对价格有影响,您是否需要就见仁见智了。
### 7.文件手冊
谨记一点:千万不要购买用户基数小而且手册、文档等不够清楚详细的主板!
要是买了刚才提到的那种主板,除了一点点小问题都要耗费半天力气。所以这种主板可千万不要买!
好了,现在您应该也对主板有了一个大致的了解了,接下来就让我们来学习 **操作系统** 的知识吧!
---
> 原文: [netman](http://www.study-area.org/compu/compu_mb.htm)</br>
> study-area-cn

View File

@ -1,77 +0,0 @@
# 操作系统Operating SystemOS
哇!终于来到我们平时最常接触的部分——操作系统了!以前使用的 DOS、Windows 98、XP和现在的 Windows 7、Windows 10 及 Windows 11都属于操作系统Opereating System。不过却不要误会操作系统就只有微软Microsoft其实有很多其它系统都比 Microsoft 的操作系统更强大、更稳定,只是由于他们的功能和行应用场合不同,一般人较少接触到而已。或许您听说过 Unix、Linux、FreeBSD、MacOS 等名字,其实它们也是操作系统哦~
## 操作系统的角色
首先让我们看看操作系统是做什么用的。虽然我们可以从键盘输入和从屏幕看到输出,还可以在网上看到这篇文章。但如果离开了操作系统,这些东西都不可能实现。
在写这网页的我和在看网页的您对电脑来说都是用户User。操作系统可以说是在用户和电脑之间担当了翻译让我们彼此能够交谈。简而言之操作系统是人机之间的界面。当您对电脑下达命令command的时候都是被一个非常特殊的系统软件操作系统所接收﹔然后操作系统将命转换成硬件所能理解的动作再交给硬件去执行﹔最后操作系统还要将执行完的结果显示在屏幕上面给用户看。
从用户的角度看,可以从下面的图简单了解系统的结构:
```text
[ 用户 ]
[ 一般软件 ]
[ 高级语言 ]
[ 低级语言 ]
[ 系统驱动 ]
[======操作系统======]
[ 硬件内固件 ]
[ 硬件 ]
```
如前文所述,[电脑是台笨机器](./what_is_computer.md)。它的智慧都是来自人们编写的程序。从上图我们看出,使用者如果要和电脑沟通,先通过一堆程序语言然后到达操作系统,然后操作系统再通过硬件的固件指挥硬件设备……过程似乎非常复杂。不过如果我们不理会那些程序是用什么语言写和怎么写的话,其实在我们和电脑之间可以简化为:
> 用户程序 --> 操作系统 --> 硬件
操作系统本身就是一个大型程序它就负责直接和硬件沟通。而我们通常指的程序大多指应用程序applications简称 APP手机上的 APP 就是这个意思),比如 Word、Excel、Chrome、微信等等。程序是必须安装在操作系统上面的而且是可以卸载或移除的就好像是买了台汽车回来您可以把里面的音响都拿掉换新的进去一样。以前 Microsoft 被美国政府状告法庭,说其违反商业公平原则,罪状之一就是将 IE 加进 Windows98 里面,有强迫使用者使用 IE 之嫌,而对其它的浏览器不公平。因为您不能把 IE 从 Windows98 中拿走:总不成我把 CD 音响拿掉,汽车就开不起来的道理吧?(不过即使是到了 Windows11 的时候微软也只是屏蔽了 IE 的入口,不能完全移除,因为 IE 还被很多软件调用着)不过这是题外话了。
## 揭开操作系统的神秘面纱
不知道大家有没有听过 DOSDisk Operating System。它可以说是 Windows 的前身也是由微软开发的。DOS 系统没有我们现在常用的图形界面,就是一个黑底的上面有着许多文字的界面。你不能使用鼠标,只能通过键盘敲击命令复杂的进行操作。不过 DOS 非常的小,只有 5M 左右。不过现在的 Windows动辄几个 GBWindows11 多版本安装映像甚至大于 5GB相比以前的 DOS 真的非常大了。
我们在安装任何软件游戏,包括操作系统前最好了解一下系统要求(System Requirement)
DOS 6.22
- 512KB RAM
- 8088早于前文提到的 80286或更先进的处理器
- 至少 5MB 的硬盘空间 (推荐 5-10MB)
- 软盘
- EGA/VGA 显示器/显卡
- 鼠标(可选)
> 相信各位几乎找不到不支持 DOS 的系统要求的电脑了吧
Windows 11:
- 4GB RAM
- 1 GHz 以上的处理器
- 64GB 的硬盘空间 &ensp;&ensp;&ensp;&ensp;&ensp;~~_吐槽实际 15G 足够_~~
- 支持 UEFI 安全启动的主板 &ensp;&ensp;&ensp;~~_吐槽可以绕过_~~
- TPM 2.0 支持 &ensp;&ensp;&ensp;&ensp;&ensp;~~_吐槽也可以绕过满足 Windows10 要求即可_~~
- 720P 以上的显示器DX12 以上支持的显卡
- 网络连接 &ensp;&ensp;&ensp;~~_吐槽家庭版必须用来激活可以绕过_~~
我们称 Windows 的界面为 GUIGrahpic User Interface其功能也是充当翻译罢了又一层界面真正操作系统需要的还是命令行command line。GUI 让那些不会或懒得用命令行的使用者可以对操作系统进行指令输入其作用一如操作系统为我们和硬件之间担当翻译一样。比如您用鼠标按“此电脑我的电脑”和您在命令提示符cmd.exe下打“explorer”并回车的结果是一样的。不过时至今日的 Windows 系统,也很难分清楚命令行和 GUI 输入的界限了。
无可否认的是GUI 的确是非常好用的东西,比如用鼠标一拖一放来复制档案,比起用 DOS 的 copy 加一堆路径和选项方便多和进步多了。个人电脑能有今天这么快的普及GUI 的确是功不可没。GUI 已经将操作系统包装的漂漂亮亮方便用户使用。
## 操作系统和应用程序的关系
我们平时想要用 Word 打打报告、玩电脑游戏、还要连上网和朋友们聊天,这些可以说是应用程序的功能。
不过现在的操作系统功能都会包含了越来越多的应用功能,它们之间的界定也更加模糊,所以现在的操作系统可以说是一个包而非单纯的 OS 了。
应用程序一定要在先装好了操作系统之后才可以安装而且也有不同的版本给不同的平台platform即操作系统的构架。很明显﹕给 Windws98 用的 Office2000 就硬是不可能装在 Window3.1 上面,更不要说装在 Linux 上面使用了。而且,应用程序只能在操作系统准备妥当之后才能使用,在开机的过程之中,操作系统先必须先于应用程序被加载启动。
## 选择操作系统
不同的操作系统其管理和操作方式都很不相同,也很难说哪一个最好。主要还是看使用者的用途,而且每个操作系统都有其优缺点,也要看使用者的习惯和个人喜好。最好是对不同的系统使用过一段日子了,才好下判断和选择适合自己的系统。在选择系统的时候,除了自身用途和价格考虑之外,还要看系统的支持程度,比如常用软件的获取,硬件支持,技术支持等等条件。
在学习操作系统的时候,应该抱着开放的态度,不要墨守成规和先入为主。不要站在一个操作系统的角度去看另外的操作系统,这样是不公平的。别忘记一点,就是:不管何种操作系统,都是服务我们的工具而已。工若善其用,必先利其器。请好好了解您的操作系统吧。
不过我们在“学习 Linux”章节会谈到一个 Linux 发行版在后面会解释简单来说就是对操作系统的一个小的封装Rocky Linux。
---
> 原文: [netman](http://www.study-area.org/compu/compu_os.htm)</br>
> study-area-cn

View File

@ -1,140 +0,0 @@
# 存储设备
好了到这里相信我们都知道电脑是怎样运作的了它会吃会拉输入和输出它还有脑子CPU才能工作若是没有记忆Memory就等于白痴
但是,其中的 RAM 要没电就什么都打回原形。虽然我们可以在屏幕或是打印机上看到结果,不过,我们还希望把这些结果给储存起来供以后需要再提取,又或者将程序和其他数据储存起来,就不用每次输入都要忙着敲键盘或动用其他的输入设备了…… OK这里要说的储存设备就是这么用的了。
## 定义
凡是能够反映数据特征的无须靠电源维持的方法来储存电脑数据的媒介,我们一律可以称之为储存设备。最常见的储存设备是 U 盘,移动硬盘等等。然而,最经常用到的却是藏在机器里面的硬盘。我们一般看不到它,而且也最好别去碰它,因为硬盘可以说是最容易坏的电脑零件之一了(天啊﹗我们竟将数据放在上面?!)。不过到现在,硬盘的故障率已经大大降低了。但是,数据丢失的风险还是有的。所以 **“数据备份”** 这种意识,是作为一个信息人的最基本的素养。
## 如何安装?
一旦我们要动手升级自己的电脑的时候,硬盘恐怕是最经常被考虑到的物件。
现在的硬盘通常分为以下两种:
1. 机械硬盘HDD
从实物上看,硬盘只是一个丑丑的金属块。在其肚子下面有密密麻麻的一大堆电子元件(这些东西都不要碰哦),现在通常使用 SATA 接口。
2. 固态硬盘SSD
固态硬盘通常比机械硬盘要小的多,形式也多样。通常有 条型的电子元件裸露 M.2 硬盘(裸露的电子元器件不要碰哦) 和 方形的一般拥有规整外壳 SATA 硬盘。
硬盘接口分为以下几种:
1. SATA
这是我们最常见的接口,我们见到的绝大部分的机械硬盘和一部分的固态硬盘都是这种接口。这种硬盘体型一般比较大,通常为 3.5 寸或 2.5 寸。您会看到一排金手指,中间有一个**两边向上突起,中间分开的凹槽**,把金手指分为左右两个部分,短的是数据线,长的部分就是电源了。
再看看硬盘的侧面(没有螺丝孔的其中一面),在 SATA 接口上,长的部分就是电源。那些从电源箱引出来的电源线就是接到这里的,不用担心您会接错正负极,因为安反了是插不进去的(记住,防呆设计不犯傻!不要大力出奇迹!)。
然后在另外一端,短的接头就是数据排线接口了。排线的接头有个凹进去的方块,那样的话要是掉反了方向是插不进去的(又是防呆!)。
> 对于部分光驱来说安装方式和 SATA 硬盘相同。
2. M.2
M.2 的接口相比 SATA 很短,因此硬盘的体积也很小。您会在一排金手指上看见一个或两个缺口,有的在左,有的在右。不同协议的硬盘有着不同的缺口,选购时请参考您的电脑主板。
你只需要斜着把硬盘(有贴纸的面朝上)插进主板上的接口,不需要数据线,然后压下去(不用担心压坏了),如果有盖子把盖子装上。拧上螺丝(不用拧到头,有的有快拆设计,不需要拧螺丝,只需要轻轻一压就好了,还有另一种需要旋转一下螺丝位上的小手柄的)。
3. SAS SAS 属于企业级硬盘接口,我们基本见不到。此处不再说明。
4. PCIE 同上。
5. IDE IDE 是老式硬盘接口,此处不再说明。[原链接](http://www.study-area.org/compu/compu_storage.htm)
老式的 IDE 硬盘在电源接口和数据线接口之间还会有一些跳针,但在新电脑上已经消失了。这里不再说明。
## 如何计算容量?
一般我们买硬盘首先是注重它的容量,其次看它的速度,缓存大小等数据。那么我们怎么才知道容量呢﹖最简单的是看硬盘的标签和厂商的数据,但却是通过非技术途径得到。下面我就教您如何去计算硬盘的容量。不过,在进行计算之前,首先我们还是了解一下硬盘的构造。
- 机械硬盘
如果你将机械硬盘打开(千万别在您自己的硬盘上这样做﹗因为硬盘是密封的,并且盘片需要在无尘环境下运作,一旦打开你的数据就会变成一面读不出来数据的镜子!)您会发现里面有一堆同轴的金属碟,所有的数据都是记录在这些光滑的金属碟表面之上。磁盘通常都有两面,每一面都有其一个各自的磁头。
然后将金属磁盘旋转磁头不移动的在表面相对所画出来的一圈可以说是一个磁道Track。那么从圆心向外以一定距离进行测量将所有表面上的相同圆周的磁道从上到下叠起来抽象地看就是一个磁柱Cylinder了。
然后也是由圆心开始在同一表面上分别画出无数条半径然后每两条半径所分割的磁道我们称为扇区Sector。每一扇区通常可携带 512byte(0.5KB)的数据。
现今制造技术的不断提高,机械硬盘的磁盘越来越薄,磁头也越来越小,那么磁盘就可以越装越多(相对的是可擦写表面越来越多),甚至一块硬盘能够达到 10T而且表面的密度也不断提高和读写精度越来越高相对的是 Track 和 Sector 也越来越多),所以硬盘容量也越来越大。
- 固态硬盘
如果你看见过 M.2 硬盘或者打开的 SATA 硬盘,你应该会看到上面密密麻麻的电子元器件。固态硬盘就是靠这些元器件进行存储的。
其中你应该能看见许多较大的黑色芯片。其中有一个正方形的那个是硬盘的主控负责管理整个硬盘。数量较多其他较大的长方形的的就是存储芯片闪存你的数据都被存放到了这里。U 盘通常也就是这种构造。
固态硬盘同样有扇区等等,只不过大多都是主控模拟出来的,不再具有实际意义了。
好了如果以上数据Cylinder/Heads/Sector都知道的话要求出硬盘容量就易如反掌了。公式是
```text
磁头数量 * 磁柱数量 * 扇区数量 = 硬盘容量
```
电脑的 BIOS 会自动获取硬盘的配置和容量,无需像很早以前一样手动填写了。
现今的制造技术的不断提高,机械硬盘的磁盘越来越薄,磁头也越来越小,那么磁盘就可以越装越多,而且表面的密度也不断提高和读写精度越来越高(相对的是 Track 和 Sector 也越来越多),所以硬盘容量也越来越大。
而固态硬盘由最开始的 SLC发展出了 MLC、TLC、QLC 等技术。这些技术可以让一个存储单元存下更多 Bit 的数据SLC 是 1 位MLC 是 2 位TLC 是 3 位QLC 是 4 位。这些技术使用存储寿命和读写速度换来了固态硬盘价格的降低和容量的提高。
## 格式化和分区
任何磁盘都要先经过格式化才可以使用因为不同的文件系统使用的格式也不同。但一块硬盘在刚生产出来的时候磁盘的表面可以说是空白一片要进行低级格式化简称低格Low Level Format机械硬盘需要写上 track 和 sector固态硬盘需要写上固件之后才可以使用通常厂家在出厂的时候已经为我们做好了但是进行低格通常需要专业的工具/软件才可以。
平时我们常说的格式化多指高级格式化High Level Format只是给已经初始化的硬盘上再建构一些供文件系统使用的逻辑块同时还会建立文件系统如`FAT`/`NTFS`/`exFAT`/`ext`、引导(开机)扇区、以及每个逻辑磁盘的根目录等等。
不过在硬盘的低格和高格之间我们还不能少了一个工序﹕分区Partition建立磁盘分区表Disk Partition Table。常用的分区表有 MBR 和 GPT。不用担心选择好分区表以后是可以转换的
分区表就是在一个完整的磁盘上,分割开数个逻辑区域。就算您只想将整个磁盘拿来做单一的分区,也必须要有一个单一的分区需要建立。
- MBR 分区表是一种较老的分区表格式,被绝大部分电脑所支持(极少数过于新的电脑不支持 MBR 引导操作系统。MBR 最多允许分 4 个实分区。如果想要分更多的区怎么办?那答案就是使用逻辑分区。逻辑分区不限制数量。但是分区最大只能是 2TB在当时人们做梦都不会想到现在有 10TB 的硬盘。MBR 分区可以支持 Legacy 引导和 UEFI 引导。
- GPTGUID是一种新兴的分区格式。在大部分较新的电脑上被支持并作为首选项。但是在 Windows XP 及以前 Windows 的系统都无法读取 GPT 分区表。GPT 没有实分区和逻辑分区的区分,因为 GPT 最多支持 256 个分区但是谁会用那么多呢。GPT 分区只支持 UEFI 引导。
不过以小弟愚见,最好还是分割数个磁盘,自有其好处﹕
1. 方便管理,比如可以将磁盘分割为 bootsystemdata 等分区(Windows 基本别想了),这样相同种类的文件都可以集中在一起,整齐易理。(不过现在由于文件夹的优化,已经比分区方便多了)
2. 减少损失,要是因为系统故障(如升级失败)等原因并且必须重新格式化的话,将 system 或 boot 分区格式化就可以了,你的 data 还不至于跟着消失。PSlinux 确实方便很多,只要保留 home 目录Windows 的注册表和 system 也一起灰飞烟灭了)
3. 可安装多个操作系统。利用分区,我们可以在同一硬盘上面安装多个操作系统,比如 Windows 7、Windows 10、UbuntuLinux 的发行版之一等等。虽然有些系统可以安装在同一个分区里面但毕竟是不可取的。而且不同的操作系统使用不同的文件系统Windows 使用 NTFSLinux 使用 ext/xfs也不可能都使用同一分区。
然而大容量的硬盘也给分区带来不便,比如有些朋友在安装多系统的时候,由于将一些操作系统的开机目录安装在 1024 磁柱后面,就会碰到找不到那个系统的情形了。不过,新的 BIOS 已解决这个问题了。
当初 MS-DOS 在使用 FAT(16)文件系统的时候为了增加读写的速度引入了一个叫簇cluster的概念一个簇往往是有好几个 sector 来组成的。因为一般的文件大小都超过 0.5K(一个 sector 的容量),如果以簇作为最小分配单位的话,那么在读写的时候就可以顺着一次过读写多个连续的 sector比起逐个逐个的 sector 读写要快些。
在以前硬盘容量比较少的情况之下这样的方法的确比较见效不过在后来硬盘容量大幅度增加之后FAT16 由于自身的设计已经不能一次性分配超过 2G 容量了。而且由于簇空间也不是全部都利用尽,其浪费也很惊人,越是大容量越是厉害。在 Windows95 之后所推出的 FAT32 文件系统,可以提供更多的分配单位,也就能管理更大的容量了,不过还是因为自身缺陷,不能分配超过 4G 的容量。
再之后的 NTFSNT Files SystemWindowsNT 文件系统),将簇体积基本上降低到一定的 sector 单位(常见的单位是 4KB所以通常叫 4K 对齐所利用的空间也就更有效。NTFS 可以支持更大的文件,理论可达 2TB。
以下是一些常见文件系统的兼容表:
| 项目 | NTFS | exFat | ext2/3/4 | xfs |
| -------------- | ---- | ----- | -------- | ------- |
| Windows 兼容性 | 好 | 好 | 不支持 | 不支持 |
| Linux 兼容性 | 中 _i_| 中 _i_ | 好 | 好 |
| MacOS 兼容性 | 不支持 | 好 | 不支持 | 不支持 |
> _i_: Linux 内核仅支持读取,写入需要使用第三方软件包。但除了 Ubuntu 以外的大部分发行版已经自带 ntfs 和 ExFAT 的驱动。
---
> 无论如何,使用 UEFI 启动时,其 EFI 分区必须是 FAT(32)格式的。
## 虚拟内存/内存盘
储存设备,就好比是电脑的仓库。不过除了用来保存数据之外,还可以当 RAM 用哦~
或许您也听过什么“虚拟内存”Virtual Memory”这词了吧这究竟怎么样的东东呢理论上电脑工作的地方都在内存上面但有时候程序太大或同时开的程序太多就很容易超过了内存的容量了这样系统就无法工作就会导致“蓝屏死机”。
为解决这一问题,我们就在硬盘上面划出一个地盘,用来储存超出内存容量的部份,通常是那些暂时还不处于工作状态的数据。如果电脑需要处理那些数据的时候,然后再从硬盘上把数据抄到 RAM 里面,同时也将另外一些暂时不处理的数据搬到硬盘上面,这个动作叫做 SWAP。如果 RAM 的体积小,电脑就整天都忙着这样搬过来搬过去,效率就大打折扣了。这就是为什么增加 RAM 会提高电脑的整体表现的原因了。Windows 会把程序“申请”但还没有使用的内存放到 SWAP 中,等待程序使用时才拿出来。
和虚拟内存相反RAM Disk内存盘则是利用 RAM 模拟出一个虚拟磁盘。不仅读写速度快多了,而且在还没有划分磁盘但又需要一些空间临时储存程序的时候,就特别有用。在 Win98 的时候就有虚拟磁盘功能了。甚至整个操作系统RAM OS都可以被放进内存中比如说 Windows PE 和 Linux LiveCD
好了,关于硬盘,暂时说到这里,接下来要讲的是电脑的一个非常重要的部件——主板。
---
> 原文: [netman](http://www.study-area.org/compu/compu_storage.htm)</br>
> study-area-cn

17
src/learn_computer_basic/what_is_computer.md Executable file → Normal file
View File

@ -4,23 +4,22 @@
电脑是什么东西?
我还记得在我上第一堂电脑课的时候,老师也是问大家这个问题。但答案却出乎意料:电脑是一台非常非常蠢的机器!
我还记得上第一堂电脑课的时候,老师也是问大家这个问题。 但答案却出乎意料:电脑是一台非常非常蠢的机器!
有没有搞错?电脑比我们任何一个人都厉害多了,没有电脑恐世界怕会大乱呢!其实,老师说的没错。因为聪明的其实是我们人类罢了,电脑只是一个工具而已。电脑真正的威力,就是凝聚了人类智慧的一堆程序。程序是靠人写出来的,离开了它,电脑好比是一堆半导体,塑料,金属的混合体 —— 一具没有灵魂的躯壳。
有没有搞错?电脑比我们任何一个人都厉害多了,没有电脑恐怕会世界大乱呢!其实,老师说的没错。 因为聪明的其实是我们人类罢了,电脑只是一个工具而已。 电脑真正的威力,就是凝聚了人类智慧的一堆程序。 程序是靠人写出来的,离开了它,电脑好比是一堆半导体,塑料,金属的混合体 --- 一具没有灵魂的躯壳。
说白了,电脑其实只懂得 0 和 1 ,除此之外一窍不通。聪明的程序员帮我们在电脑逻辑和人类语言之间作了翻译,我们也就都可以用到这便利的工具了。
说白了,电脑其实只懂得 0 和 1 ,除此之外一窍不通。 聪明的程序员帮我们在电脑逻辑和人类语言之间作了翻译,我们也就都可以用到这便利的工具了。
## 定义
从定义来讲,凡是能够对输入进行运算,再产生输出的电子设备,大至占据整座大楼的超级计算机,小至微波炉里面的控制器,都可以说是电脑。但日常我们所接触的,大部分是个人计算机(x86-64),和手机(ARM)这两种了。
从定义来讲,凡是能够对输入进行运算,再产生输出的电子设备,大至占据整座大楼的超级计算机,小至微波炉里面的控制器,都可以说是电脑。 但日常我们所接触的,大部分是个人计算机x86-64,和手机(ARM)这两种了。
## 和电脑交个朋友
学习电脑就像交朋友一样,贵在相处了解和真诚付出。 如果有一天您发现电脑不跟您合作了,可不要生它的气哦。其实它也很想帮您解决问题(这是电脑的终身使命),只是,有时侯它不能了解您(或程序)所交给它的信息而已。 比方说您在键盘上输入1+1=? ,您很有可能得到 Bad command or file name 的回应。 呵,知道老师为什么说电脑是蠢东西了吧?^\_^ 更有甚者,若把它的思维绕了,它还会发呆呢,也就是我们说的'宕机'了(千年虫 —— Y2K bug就是最好的例子了
学习电脑就像交朋友一样,贵在相处了解和真诚付出。 如果有一天您发现电脑不跟您合作了,可不要生它的气哦。 其实它也很想帮您解决问题(电脑的终身使命),只是,有时侯它不能了解您(或程序)所交给它的讯息而已。 比方说您在键盘上输入1+1= ,您很有可能得到 Bad command or file name 的回应。 呵,知道老师为什么说电脑是蠢东西了吧? ^\_^ 更有甚者,若把它的思维绕了,它还会发呆呢,也就是我们说的'宕机'了(千年虫 --- Y2K bug就是最好的例子了
那么,我们要如何交这朋友呢?慢慢来,由基础开始。继续看下面的文章相信对您有所帮助。
那么,我们要如何交这朋友呢?慢慢来,由基础开始。 继续看下面的文章相信对您有所帮助....
---
编写netman
> 原文: [netman](http://www.study-area.org/compu/compu_defi.htm)</br>
> study-area-cn
翻译&修改Hmtsai

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 526 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

View File

@ -1,79 +0,0 @@
# 备份
## 概念
备份是计算机使用中非常重要的操作。原则上来说,进行任何重大修改(比如更新系统、更新生产环境中的软件。)之前都需要备份。
按照备份的范围来分,常用的备份方式有以下几种:
- 全量备份:指把硬盘等存储介质中的所有文件**一次性完整复制**到其他介质上。
- 增量备份:对上一次备份后的数据后修改的数据进行备份。
- 差异备份:在完整备份之后,修改备份中与当前数据有差别的数据。
- 选择性备份:仅对系统中的一部分进行备份。
按照备份的时间来分,常用的备份方式分为以下两种:
- 计划性备份:比如一周一备份、一天一备份等。
- 操作前备份:在重大操作前备份,以便在操作后出现问题时可以快速回滚,减少损失。
> 有的人可能会说:“我们自己用电脑,备份有什么意义呢?” 2017年勒索病毒WannaCry的肆虐为我们敲响了警钟。这个病毒用AES加密用户电脑上的所有文件以勒索钱财。没有人知道下一个被勒索的究竟是不是自己我们只能通过备份将损失降到最低。
## 备份软件
Linux下常用的备份工具有以下几种
- dd直接克隆整个分区。
- tar将需要备份的文件打包压缩。
- rsync可以进行增量备份、全量备份以及可以将备份传输到远程。
### `dd`命令
> 这个小节的内容,了解即可。
备份整块`sda`硬盘到`sdb`只需要以下命令。
```sh
dd if=/dev/sda of=/dev/sda
```
> 注意这里的sdb物理容量必须大于sda并且sdb上所有的文件都会被覆盖**无法找回!**
### `tar`命令
Linux中可以直接使用`tar`打包需要的文件,比如备份`/etc`
```sh
cd /
sudo tar -zcvf etc_backup.gz etc
```
## `rsync`命令
在之前的章节中,我们创建了一个新的虚拟磁盘。现在,让我们挂载它到`/mnt/backup`进行备份。
> 如果你完成了之前的课后作业那么sdb上应该有唯一的一个xfs分区占满了整个磁盘。如果你已经持久挂载了磁盘本步骤可以跳过。
```sh
sudo mkdir /mnt/backup
sudo mount /dev/sdb1 /mnt/backup
sudo mkdir /mnt/backup/etc
```
现在,我们使用`rsync`命令,将虚拟磁盘中的文件复制到新的虚拟磁盘上。
```sh
sudo rsync -avz /etc /mnt/backup/etc
```
`rsync`命令的参数如下:
- `-a`:递归模式,表示以递归方式传输文件,并保持所有文件属性。
- `-v`:显示详细输出。
- `-z`:压缩传输的数据。
- `/etc`:源文件。
- `/mnt/backup/etc`:目标文件。
`rsync`命令会自动判断源文件和目标文件是否相同,如果相同,则不会进行复制。如果不同,则会复制不同的文件。
> `rsync`命令是一个非常强大的命令,它不仅可以进行文件复制,还可以联网进行文件的同步、文件的删除等操作。如果你需要备份大量的文件,那么`rsync`命令是一个非常好的选择。

View File

@ -1,473 +0,0 @@
# 磁盘分区以及文件系统
我们之前学习了关于硬盘的知识,并且知道了在硬盘上还有着文件系统。那么就让我们来学习在 Linux 上的硬盘分区以及文件系统的知识吧!
> 本章东西较多,请做好心理准备,建议学一部分练一部分,边看边练。
## 基本知识
### 磁盘设备
我们前文提到了 Linux 上的 `/dev` 是大部分设备对应的文件,当然也包括磁盘设备。
> 在 Linux 上,不仅磁盘本身是文件,磁盘的每一个分区也都对应着一个文件。
在 Linux 上常见的磁盘设备有以下几种:
> 在下面的内容中:
>
> - `X`: 表示 `a` - `z` 的小写字母
> - `@`: 表示从 0 开始的自然数
- `/dev/sdX`: 最常见的一种磁盘类型,你通常见到的也是这种,例如 `/dev/sda`
- `/dev/sdX@` 表示这个磁盘的每一个分区。
- `/dev/nvme@n@`: 表示 NVME 上的磁盘,第一个数字表示设备名,第二个是命名空间,通常是 1例如 `/dev/nvme0n1`
- `/dev/nvme@n@p@` 表示这个磁盘的每一个分区。
- `/dev/loop@`: 被称为回环设备,为模拟出来的,通常作为 `img` 等镜像文件的挂载点,可以是一个硬盘也可以仅仅是一个分区,例如 `/dev/loop0`
- `/dev/loop@p@` 表示作为整个磁盘时的每一个分区。
- `/dev/mmblk@`: 为嵌入式的存储,这种比较少见,我们一般不会遇到。
### 文件系统
Linux 兼容大部分的文件系统(前面有提到一个表格):
| 项目 | NTFS | exFat | ext2/3/4 | xfs |
| -------------- | ---- | ----- | -------- | ------- |
| Windows 兼容性 | 好 | 好 | 不支持 | 不支持 |
| Linux 兼容性 | 中 | 中 | 好 | 好 |
| MacOS 兼容性 | 不支持 | 好 | 不支持 | 不支持 |
通常可以被 Linux 用作系统磁盘的文件系统格式的是:
- `ext2/3/4`
扩展日志文件系统,是最常见的系统磁盘的文件系统,也可以用作数据磁盘。现在 ext2/3 已经用的比较少了。
- `xfs`
一种高性能的文件系统,被 RockyLinux 等新的 Linux 发行版用作默认文件系统。
- `btrfs`
新兴的文件系统,自带了快照和压缩等十分方便的功能,不过目前还不太稳定。
还有一些其它的被 Linux 支持的格式:
- `ntfs`
是 Windows 上的默认文件系统,可以使用 `ntfs-3g` 包实现读取和写入。但是在 Linux 下有权限问题,并且不太稳定。
- `exfat/fat32`
比较老的文件系统,在 Linux 上也需要额外的包才可以写入。
还有一些特殊用途的文件系统:
- `swap`
交换分区,不可被用于存储数据,前面提到过。
## 在虚拟机上创建硬盘
我们要学习如何分区,那么就肯定要有一个硬盘。如果你按照上文的方法创建了虚拟机,请按照你使用的虚拟机软件,选择下面的文章完成创建虚拟磁盘的操作,然后再回到本篇继续学习。
1. [在 VirtualBox 上创建虚拟磁盘](./diskpart_and_filesystem/create_disk_on_vbox.md)
2. [在 VMWare Workstation 上创建虚拟磁盘](./diskpart_and_filesystem/create_disk_on_vmware.md)
## 使用命令行工具进行分区
进行分区需要具有 `root` 权限!
分区是一个非常危险的操作!进行操作前最好备份!如果你要调整系统磁盘分区,可以使用一个恢复镜像,例如一个 Linux 的安装磁盘或是 LiveCD。所以最好不要删除你安装系统的ISO文件或者是U盘
> 除了下文的 `parted``fdisk` 等工具,还有 `gdisk`(命令行)、`cfdisk`(命令行,方向键交互)、`gparted` 等工具,本文在此不过多介绍。
>
> `parted``fdisk` 已经被绝大多数 Linux 发行版包含,你通常无需额外安装。但是可能会有少部分发行版缺少其中任何一个软件包。
### parted 和 fdisk 的基本命令格式
> 下面标注有 parted 和 fdisk 的命令,表示这个命令需要在对应工具的命令行模式下执行
#### parted
parted 有两种使用模式,一种是参数模式,一种是命令行模式。这两种模式区别不大,执行的命令都是相同的。下文均以命令行模式(非交互式)下的命令为展示。
```bash
# 参数模式
parted [设备文件] [你要执行的命令]
# 命令行模式
parted [设备文件]
# 然后再输入你的命令,输入完成后和终端一样需要回车
# 可使用 'quit'('q') 命令退出
```
parted 的命令也有两种模式:交互模式和非交互模式。
- 交互模式就是输入一个命令,后面不带任何的参数,然后程序会要求你输入这个命令的每一个参数。
- 非交互模式就是把这个命令的参数都以空格的形式填写在这个命令后,你不需要填写任何内容。
#### fdisk
fdisk 只有一种模式:交互式命令行模式。
fdisk 的使用和 parted 的使用方式几乎差不多,除了命令不同。
fdisk 可以使用 `q` 退出。
注意fdisk 默认不会保存到磁盘,需要执行 `w` 命令才会真正写入磁盘。引用软件的提示: **使用写入命令前请三思**
下面的命令中 `<Enter>` 表示无需输入任何内容直接回车即可。
### 查看所有硬盘
当我们需要进行分区时,我们肯定要知道有哪些硬盘。下面的任意一个指令均可:
- `lsblk`
执行效果: ~~(个人最喜欢用的一种)~~
```text
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 800M 0 part
├─sda2 8:2 0 79.2G 0 part
└─sda3 8:3 0 845M 0 part
sdb 8:16 0 931.5G 0 disk
├─sdb1 8:17 0 500M 0 part /boot
├─sdb2 8:18 0 524M 0 part [SWAP]
├─sdb3 8:19 0 60G 0 part /
sdc 8:32 0 238.5G 0 disk
├─sdc1 8:33 0 174.4G 0 part
├─sdc2 8:34 0 32M 0 part
└─sdc3 8:35 0 60G 0 part
sr0 11:0 1 1024M 0 rom
```
最左侧一列是设备名称,第三列是大小,第五列是设备的类型,第六列是挂载点(下面会说到)。
- `fdisk -l`
执行效果:
```text
...
Disk /dev/sdb931.51 GiB1000204886016 字节1953525168 个扇区
磁盘型号WDC WD10EZEX-22M
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理)512 字节 / 4096 字节
I/O 大小(最小/最佳)4096 字节 / 4096 字节
磁盘标签类型gpt
磁盘标识符7690BA4B-E69F-4431-B4E6-XXXXXXXXXXXX
设备 起点 末尾 扇区 大小 类型
/dev/sdb1 2048 1026047 1024000 500M EFI 系统
/dev/sdb2 1026048 2099199 1073152 524M Linux swap
/dev/sdb3 2099200 127928319 125829120 60G Linux 文件系统
/dev/sdb4 127928320 1282436494 1154508175 550.5G Microsoft 基本数据
/dev/sdb5 1282437120 1953523711 671086592 320G Linux 文件系统
...
```
每一个磁盘都会有这么一些内容,第一行有磁盘的设备文件和大小,下面是磁盘的其它信息,可以清晰看到磁盘的每一个分区的大小和类型。
- `df -h`
执行效果:
```text
文件系统 大小 已用 可用 已用% 挂载点
dev 5.7G 0 5.7G 0% /dev
run 5.7G 1.7M 5.7G 1% /run
efivarfs 128K 89K 35K 73% /sys/firmware/efi/efivars
/dev/sdb3 59G 33G 24G 59% /
tmpfs 5.7G 258M 5.5G 5% /dev/shm
...
tmpfs 5.7G 39M 5.7G 1% /tmp
/dev/sdb5 320G 35G 285G 11% /mnt/xdata
/dev/sdb1 499M 174M 326M 35% /boot
/dev/sdb4 551G 90G 461G 17% /mnt/data
```
### 创建分区表
如前面所说,我们刚刚添加了一块硬盘,需要创建一个分区表才能进行分区。创建分区表需要使用 `parted``fdisk` 命令。
parted
```bash
mklabel [gpt/mbr]
```
fdisk
```bash
g # 创建 GPT 分区表
# 或者
o # 创建 MBR 分区表
```
如果没有特殊需求建议选择 GPT 分区表。
### 创建新分区
有了分区表,我们可以开始分区了。
parted
```bash
mkpart primary [文件系统] [起始位置] [结束位置]
```
> 这里的 primary 表示分区类型一般GPT分区表下无需修改。
>
> 文件系统可以是 ext4、ext3、ext2、xfs、fat32、ntfs 等等,也可不填。
>
> 起始位置和结束位置可以写数字,表示扇区数,也可以写单位,如 1G 表示 1GB
> 也可以写百分比,如 100% 表示使用剩余的所有空间
fdisk
```bash
n # 创建新分区
p # 设置为主分区
<Enter>
<Enter> # 起始扇区号,默认会接在上一个分区后面
+[大小] # 分区大小,可以是数字,也可以是单位,如 +1G 表示 1GB
```
### 格式化分区
创建完分区后我们需要对分区进行格式化才能使用。Linux 并不像 Windows 那么贴心,会主动提示你格式化,但是也给了你更多的控制能力。
格式化要使用 `mkfs` 命令,但是格式是:
```bash
mkfs.[文件系统] [设备文件] [更多可选参数]
# 等价于
mkfs -t [文件系统] [设备文件] [更多可选参数]
```
注意文件系统和 mkfs 中间的 **“.”** ,如 `mkfs.ext4`等。
不同文件系统可以使用的参数也有些许不同。下面是一个列表:
- `mkfs.ext4`
- `-L` 可以设置卷标,可以看作磁盘的名字。
- `-N` 可以设置 inode 的大小。inode 可以看作存储文件或目录的基本信息的东西。这个参数就决定了你的最大文件的数量。
- `-F` 强制格式化,不过只有部分版本需要。
- `mkfs.vfat`
> VFat 可以看作是 `fat16`、`fat32` 等数据类型的总和,默认会自动选择格式。
- `-n` 设置卷标
- `-F [版本]` 可以设置格式化的 `fat` 文件系统的版本,如 `16`、`32` 等。
- `mkfs.exfat` 格式化成 `exfat`
- `-n` 设置卷标
- `mkfs.xfs`
- `-L` 设置卷标
- `-f` 强制格式化,会清空原有的分区
- `mkfs.btrfs`
- `-L` 设置卷标
- `-f` 强制格式化
> btrfs 可用的参数很多,许多参数是为 raid(一种可以将多块硬盘模拟成一块的方法) 准备的,这里就不一一列举了。
### 查看分区列表
分区完成后,我们可以使用 `parted``fdisk` 命令查看分区列表。
parted
```bash
print
```
fdisk
```bash
p
```
在这里我们就可以看到每个分区对应的设备文件了,一会我们要用到。
### 删除分区
如果我们不再需要一个分区,或者分区方案有误,我们可以使用 `parted``fdisk` 命令删除分区。
parted
```bash
rm [分区号]
```
fdisk
```bash
d [分区号]
```
这里的分区号可以使用上一条查看分区列表的方式查看,其实就是 `/dev/sdX@``@` 所对应的数字(在其它类型的磁盘中是 `p` 后面的数字)。
### 其它技巧
`parted``fdisk` 还有一些其它的技巧,下面列举了一小部分:
parted
```bash
resizepart [分区号] [起始位置] [结束位置] # 可以修改分区的大小
rescue [起始位置] [结束位置] # 可以查找丢失的分区
```
更多的技巧这里就不一一列举了。
## 挂载分区
创建了分区,我们该如何访问呢?答案就是挂载。
> 事实上Windows 中的C盘、D盘等盘符也是挂载的只不过 Windows 会自动为我们完成。Windows 也同样支持挂载到一个目录。
在下面,我们称挂载的目标路径为“挂载点”。挂载点通常约定俗称使用 `/mnt` 目录下的子目录(挂载整个系统时除外)
### `mount``umount` 命令
Linux 中挂载分区可以使用 `mount` 命令,卸载分区使用 `umount` 命令。
> 事实上,在图形化的文件管理器中,我们可以直接点击磁盘进行挂载(需要输入 root 密码验证身份),右面向下的箭头上面还有条横线的就是卸载按钮。
`mount` 命令的格式如下:
```bash
mount -t [文件系统] [设备文件] [挂载点]
```
> `-t` 参数可以省略Linux 会自动识别文件系统。
>
> `-o [挂载参数]` 可以设置挂载参数,下面会列举出来。
然后我们就可以使用你设置的挂载点访问磁盘了。
可以指定 `--mkdir` 参数,会在挂载的时候自动创建对应的文件夹。
`umount` 命令的格式如下:
```bash
umount [挂载点/设备文件]
```
### 自动挂载
每次开机都要手动挂载分区是一件很麻烦的事情,我们可以使用 `/etc/fstab` 文件让系统自动挂载。
如果你查看这个文件,你会看到以下内容(不同系统默认的内容可能不同):
```text
# Static information about the filesystems.
# See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sda3
UUID=25236755-bc8f-4ee4-a733-fc71ed33c408 / ext4 rw,relatime 0 1
# /dev/sda1
UUID=D0EE-69A5 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
# /dev/sda2
UUID=94a6c32f-c2d2-4401-8749-689b005ac9f0 none swap defaults 0 0
```
每一行代表一个挂载点,每一列代表一个参数。每一列之间应该用 `<tab>` 和一个空格分隔。通常第一条就是你的系统。
整理起来就是这样:
| 分区的UUID | 挂载点 | 文件系统的类型 | 挂载选项 | 是否自动运行 dump | 是否自动运行 fsck |
| :-------- | :------- | :---------- | :------------ | :-------------- | :--------------- |
| UUID=XXXX | / | ext4 | rw,relatime | 0 | 1 |
| UUID=XXXX | /boot | vfat | rw,relatime...| 0 | 2 |
| UUID=XXXX | none | swap | defaults | 0 | 0 |
其中:
- `#` 开头的行是注释
- UUID 可以使用查看分区的方法查看
- 挂载点在处理 swap 的时候需要填 `none`
- 不同文件系统挂载选项不同,使用逗号分隔,以下是常见的选项:
- `defaults` 默认选项
- `ro` 只读模式
- `rw` 读写模式,默认的挂载模式
- `nofail` 忽略挂载时的错误,常用于可移动设备
- dump 是一个自动备份程序,后面会使用 crontab 实现自动备份
- fsck 是一个磁盘健康检查程序,可以自动修复错误,推荐开启,可以填写为 1
> 如果你在更改 fstab 文件的时候出现了问题,系统会卡死,稍等会陷入恢复模式,此时会提示你输入 root 密码,然后便可以使用 nano 或者 vim 命令编辑 fstab 文件,使用 `#` 临时注释掉出现问题的那一行再重启便可以正常进入系统了。
## dd 命令
在 Linux 中,有个非常好用的命令 `dd`,这个命令可以从一个文件或者磁盘复制到另一个文件或者磁盘。
基本用法如下:
```bash
dd if=[输入文件/设备] of=[输出文件/设备]
```
其中 `if``of` 后面可以填硬盘的设备文件,也可以填写一个 .img 文件的路径。`if` 后还可以填写 `/dev/zero`,这是一个特殊的设备文件,表示一直输出 0 (需要指定复制的大小,下面会说)。
> dd 命令默认不显示进度,可以通过添加 `status=progress` 参数显示进度。还可以切换到别的终端,使用 `kill -USR1 [pid]` 命令pid 可以使用 `ps -ef | grep "[你运行dd的具体命令]"` 获取,从左往右第二列就是),此时 dd 命令就会显示一个进度。`kill` 命令后面会讲到。
下面是 `dd` 命令其它常用的参数:
- `bs=[块大小]` 指定每次复制的大小,可使用单位如 `M` 等,常配合 count
- `count=[块个数]` 指定复制多少块,通常可设置 `bs=1M` 然后个数就是以 MB(MiB) 为单位的文件大小
## 回环设备
我们前面提到了像 `/dev/loop0` 这样的设备属于回环设备。
回环设备同样需要 root 才能操作。
回环设备通常指向一个镜像文件(如 img 格式)。要操作回环设备,我们需要使用 `losetup` 命令。
我们可以使用下面的命令查看空闲的loop设备这里其实还不存在对应的设备文件
```bash
losetup -f
```
会返回一个设备名,然后可以使用下面的方法进行关联:
```bash
losetup [设备文件] [你的img文件]
```
然后,我们可以使用上面的 `mount` 挂载回环设备。
要查看挂载的所有设备,可以使用
```bash
losetup -a
```
用完记得卸载(请先 `umount`
```bash
losetup -d [设备文件]
```
## 课后作业
由于这章长且十分重要,所以设置以下作业:
1. 在虚拟机中创建一个虚拟磁盘,大小大于等于系统磁盘
2. 给这个磁盘初始化分区表并且创建一个 xfs 分区,分区大小为整个磁盘的容量。
3. 尝试把这个磁盘挂载到 `/mnt/test`
4. 使用 dd 命令从 `/dev/zero` 读取,写入大小为 20MB 的空文件到 `/mnt/test/hello.img`
5. 卸载这个磁盘
6. 编辑 `/etc/fstab`,持久挂载这个磁盘到 `/mnt/backup` **(以后会用到)** 并重启
7. 使用 `losetup` 挂载刚刚创建的 `/mnt/backup/hello.img` 到一个回环设备
8. 格式化这个回环设备,并且往里写上一些留言
9. 可以把这个制作好的 img 文件发到论坛,让其它小伙伴看看你的成果
10. 你可以选择留下这个文件,也可以删除
---
> study-area-cn

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,55 +0,0 @@
# 在 VirtualBox 上创建虚拟磁盘
> 上级目录:[磁盘分区以及文件系统](../diskpart_and_filesystem.md)
按照上篇文件,我们接下来需要创建一个虚拟磁盘。
## 打开虚拟机
首先,打开你的 VirtualBox 并选择你的虚拟机。
![Open VM](./assets/2.2.2.vbox.1.png)
## 配置磁盘
我们打开设置
![Open Settings](./assets/2.2.2.vbox.2.png)
在左边找到 `存储`
![Choose Storage](./assets/2.2.2.vbox.3.png)
选择 `控制器: SATA`,如果你这里看不见这个选项,那么就选择 `xxx.vdi` 那一项所在的那一栏。
![Choose Item SATA](./assets/2.2.2.vbox.4.png)
然后我们点击右面添加磁盘的图标
![Add Disk](./assets/2.2.2.vbox.5.png)
选择创建
![Create Disk](./assets/2.2.2.vbox.6.png)
## 创建磁盘
我们就来到了创建磁盘的界面。
我们点击最下面的 `专家模式`
![Pro Mode](./assets/2.2.2.vbox.7.png)
然后我们设置磁盘大小,为了后面的学习,我们需要设置磁盘的大小 >= 原来的系统磁盘的大小。
![Set Size](./assets/2.2.2.vbox.8.png)
## 完成创建
我们点击 `完成`,然后会来到下面的界面。我们点击 `选择`,再点击一下 `确定`
![Finish Create](./assets/2.2.2.vbox.9.png)
恭喜你,磁盘创建完成!
---
请继续学习接下来的内容:[磁盘分区以及文件系统](../diskpart_and_filesystem.md)
---
> study-area-cn

View File

@ -1 +0,0 @@
# 在 VMWare Workstation 上创建虚拟磁盘

View File

@ -1,47 +0,0 @@
# 文件与路径
## Linux 的文件结构
按照前文,我们所说的 C 盘就是 `/` 了。那么,我们的 D 盘和 E 盘等等呢?它们则被系统放到了别的地方,你甚至可以自定义这些地方(其实 Windows 也可以,不过放得很深),不过一般被放在了 `/mnt``/run/mount` 或者 `/media/你的用户名` 下。(根据发行版和桌面环境的不同有所区别。如果你是安装上文安装的,那么应该在 `/media/你的用户名` 里面)
我们可以使用自带的文件管理器管理文件,就像 Windows 一样。
## 磁盘与挂载
你可能会发现一个东西:就是在根目录里,怎么还会有其它的磁盘呢?这是因为,在 Linux 系统下,所有的磁盘都需要挂载才能访问。而其它的磁盘必须挂载在根目录下。
之前我们说到了 Linux“一切皆文件”。我们的硬盘其实也是一个文件。其中通常 `/dev/sd+一个小写a-z字母`是你的硬盘(也有可能是 `/dev/nvmeX`X 是任意的数字) 或者 `/dev/mmcblkX`)。而分区是 `/dev/sd+一个小写a-z字母+X` nvme 比较不同),如 `/dev/sdc3`
我们可以使用 `lsblk` 命令查看所有的硬盘和分区。
但是,磁盘文件并不能直接访问,这时候我们需要挂载了。
如果你有一个桌面或者文件管理器,那么它就会自动帮你执行操作。点击一下你的磁盘就可以挂载了。
关于挂载的内容,这里就不过多讲述了,后面会提到。
### Linux 下的重要文件夹
刚装完 Linux你会看到根目录下面有一些目录都不要删
- `/boot` 存放系统启动信息
- `/dev` 大部分设备对应的文件,上文中提到了
- `/proc` 所有的进程信息(*nix 中“一切皆文件”的思想)
- `/lib` 存放所有的静态链接库和动态链接库。有时会有`lib64`
- `/etc` 存放软件配置文件(其实很乱,相当于杂项)
- `/opt` 扩展软件目录,少部分软件会装到这里
- `/tmp` 存放一些临时文件,通常被挂载到了内存
- `/usr` 包含系统核心文件,其中的`bin`目录包含的上述除`cd`外的所有命令,`sbin`也是(仅限 root 的命令),这两个文件夹还被映射到了根目录同名文件夹。
- `/var` 可变动的文件(variable)
- `/var/mail` (本地邮件信箱)
- `/var/spool/news` (新闻组)
- `/var/run` (程序相关文件)
- `/var/lock` (程序锁相關)
- `/sys` 也是一个重要的设备目录
- `/home` 用户目录,相当于 `C:\Users`MacOS`/Users`
到这里,相信你已经掌握了 Linux 文件系统的简单结构。
---
> study-area-cn

View File

@ -1,72 +0,0 @@
# GZip 与 XZ
上篇文章中,我们介绍了 `tar` 命令,它可以将多个文件打包成一个文件。但是,文件的总体积并没有改变。我们还提到了 `tar` 命令可以调用 `gzip``xz` 进一步压缩这个文件,使其占用更小的磁盘空间。现在我们就来看看 `gzip``xz` 命令本身吧。
> 这两个命令只能压缩单个文件,而不能压缩目录。
## GZip
> gzip是若干种文件压缩程序的简称通常指GNU计划的实现此处的gzip代表GNU zip。也经常用来表示gzip这种文件格式。gzip是一种在Linux系统中常见的命令行压缩工具。它使用DEFLATE压缩算法来减小文件的大小使文件更易于存储和传输。
>
> 事实上在许多软件中包括在你浏览互联网的过程中gzip已经被广泛使用。说不定你现在正在阅读的网页就是gzip压缩过的。
使用 `gzip` 命令压缩的文件的后缀和前面提到的 `.tar.gz` 一样,都是 `.gz` 结尾的压缩文件。
下面是 `gzip` 命令的一些常用选项:
- `-c`:将压缩后的数据输出到终端(但是你看不懂的乱码),而不是覆盖原始文件。通常配合后面会讲到的 `>``|` 使用。
- `-r`:递归压缩目录,包括子目录中的文件。注意:这里的递归是对每一个文件单独压缩,而不是对整个目录压缩成一个文件。
- `-v`:显示压缩或解压缩的详细信息。
- `-d`:解压缩文件。`gunzip` 命令等同于 `gzip -d`
- `-f`:强制压缩或解压缩,会覆盖原有的文件。
- `-k`:不删除原始文件。
- `-1``-9`:表示压缩等级,`-1` 表示最低压缩等级,速度快,`-9` 表示最高压缩等级,压缩率高。默认是 `-6`
> `gzip` 命令默认会删除原始文件,所以使用 `-f` 选项可以强制保留原始文件。
例如,我们可以使用以下命令来压缩一个文件:
```bash
gzip file.txt
```
这将会生成一个名为 `file.txt.gz` 的压缩文件,原始的 `file.txt` 文件将被删除。
要解压缩一个 `gzip` 压缩的文件,可以使用下面的命令:
```bash
gzip -d file.txt.gz
```
> 之前学习的 `tar` 命令的 `-z` 选项就等价于先用 tar 命令打包,再执行一遍 gzip 命令。
## XZ
> xz是一种压缩文件格式采用LZMA SDK压缩目标文件较gzip压缩文件(.gz或)小30%,较.bz2小15%。
>
> 前段时间 XZ 命令被爆出存在后门,差一点就进入了正式的发行版,这次漏洞如果成功会危害到数以万计的 Linux 设备,但成功被开源社区的人发现 ~~还是因为SSH程序启动慢了0.5秒)~~ 这也侧面体现出了XZ应用的广泛与 Linux 社区支持的安全性。
使用 `xz` 命令压缩的文件的后缀和前面提到的 `.tar.xz` 一样,都是 `.xz` 结尾的压缩文件。
`xz` 的基本选项和 `gzip` 基本一致,但是提供了以下几个提高性能的额外选项:
- `-T <线程数>` 可以使用多线程进行压缩,提高压缩速度。
- `-e` 可以使用更多的时间来提高压缩率
例如,我们可以使用以下命令来压缩一个文件:
```bash
xz file.txt
```
这将会生成一个名为 `file.txt.xz` 的压缩文件,原始的 `file.txt` 文件将被删除。
要解压缩一个 `xz` 压缩的文件,可以使用下面的命令:
```bash
xz -d file.txt.xz
```
---
> study-area-cn

View File

@ -1,271 +0,0 @@
# 文件权限管理
## 用户?用户组?
### 多用户操作系统的概念
不同于Windows这种基本上是单用户的操作系统而Linux这种Unix-like系统因为是集成了Unix概念的原因所以是实打实的多用户多任务分时操作系统。
Unix刚发明的时候电脑十分笨重且昂贵一台电脑不可能让一个用户独占必须同时分给多个用户使用。即便是最基本的电脑也能分出32个终端同时使用。这时候完善的用户与权限的管理就是十分必要的了。
Unix-like 系统的用户被组织成了一个类树状结构,看起来就像这样:
```text
All Users
|- root
| |- root
|
|- wheel
|- manager1
|- user1
```
### UID & GID
每个用户都有一个独一无二的编号,称作`UID`。每个用户组也有一个独一无二的编号,称为`GID`。
Unix-like使用UID而不是用户名区分用户如果你试着把两个账户的UID互相调换你会神奇的发现这两个用户的权限和所拥有的文件也被互换了。
UID的各个号段都已经被预先分配好了分配如下- 0 root权限最高的用户 - 1-999 系统服务保留UID下分两种 - 1-200 发行版自带软件所需帐号的UID - 201-999 用户自行创建的或用户所安装软件创建的账户的UID - 1000-60000 普通账户
除了root意外其他账户的权限基本没有区别。
GID基本就是用户组的ID此处不再赘述。
### `/etc/passwd`
所有用户的列表存储在`/etc/passwd`中这个文件在传统的Unix系统中同样存储所有用户的密码但是现在密码的存储已经分到了`/etc/shadow`中,让我们一起来看看这个两个文件的结构吧。
当你通过命令查看`/etc/passwd`的内容时,你应该会看到类似下面的内容:
```text
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
// ...
hmtsai:x:1000:1000:hmtsai:/home/hmtsai:/bin/bash
vboxadd:x:979:1::/var/run/vboxadd:/bin/false
```
> 注:查看文件更推荐使用`cat`命令,而不是各类编辑器,因为有些文件在被写入之后会出一些问题。
这个文件每行分为几个部分,格式如下:
```text
用户名:密码:UID:GID:其他信息:家目录位置:登录Shell
```
密码字段现在有三种可能性:- `x`表示密码在`/etc/shadow`中 - 留空表示密码为空,无需密码即可登录 - `!`表示该账户已经被禁用,无法登录
其他信息默认存储用户名,这个也可以存储其他信息,但是现在很少用到。
登录Shell指的是该账户登录后执行的程序默认为`/bin/bash`
你可能会发现有的用户的登录Shell是`/bin/nologin`或`/bin/false`,这代表这些用户不能登录。
> 你可以在终端里面执行`nologin`,会发现他会提示“该用户无法登录”,而`false`只是简单地返回一个错误返回值。
>
> 有关Shell的知识我们在后面会系统介绍简单来说Shell就是一个让用户交互来执行操作的程序。
### root用户
root顾名思义就是“根”它代表了Unix-like系统中的最高权限他的UID是0因为他是Unix-like系统中的第一个用户。
root有的时候也被称为“超级用户”这更表明了root在Unix-like系统中最高权限的地位。
> 虽然用root进行操作很方便但是我们还是更推荐使用其他的普通用户避免误操作导致系统GG。
## 所有者?同用户组?其他人?
### 所有者
文件的所有者默认是创建文件的人,一般来说也是对文件有最大权限的人。
所有者权限意义在于,你可以把像日记本这种较为隐私的信息设置为仅可自己读写,其他人只有读取的权限,这样就能达到防止篡改的目的。
### 同用户组
同用户组的权限设置在协同工作的时候比较有用,比如共同开发一个项目,我们就可以将这个项目文件夹的文件的权限设置为同用户组可以读写,这样就可以方便共同开发。
### 其他人
字面意思,不再赘述。
但是,由于`root`是系统的最高权限,所以`root`对所有文件都拥有读写的权限。
## 文件管理命令
### `ls`命令
之前对于`ls`只是简单介绍,接下来,我们将要仔细介绍`ls`的各个常用参数。
- `-a`参数a就是all的意思代表输出所有文件包括隐藏文件。
- `-l`参数l是long list的意思即长列表。
输出类似下面这样。
```text
总计 96
drwxr-xr-x 2 hmtsai hmtsai 4096 7月 4日 09:49 公共
drwxr-xr-x 2 hmtsai hmtsai 4096 7月 4日 09:49 模板
drwxr-xr-x 3 hmtsai hmtsai 4096 7月 9日 10:38 视频
drwxr-xr-x 3 hmtsai hmtsai 4096 7月15日 20:03 图片
drwxr-xr-x 4 hmtsai hmtsai 4096 7月10日 13:32 文档
drwxr-xr-x 2 hmtsai hmtsai 4096 7月16日 19:20 下载
drwxr-xr-x 2 hmtsai hmtsai 4096 7月 4日 09:49 音乐
drwxr-xr-x 2 hmtsai hmtsai 4096 7月 4日 09:49 桌面
```
- `-d`参数d表示direoctry表示仅列出目录不列出目录中的文件
### `less`命令
`less`用来分页查看文件内容,它从标准输入流或者指定的文件读入内容,然后分页在屏幕上显示。
> 什么是标准输入流呢?实际上就是`/dev/stdin`这个文件而已,与之对应的有标准输出和标准错误,分别是`/dev/stdout`和`/dev/stderr`.
### `chown`命令
chown命令光看名字就知道他是干什么的ch就是change嘛own自然就是owner所有者嘛。连起来就是修改所有者的意思啦
但是,光知道是干什么的可没有用,要想真正的用起来,还得知道这命令的格式之类的,接下来我们就来介绍一些常用的格式和参数吧!
```text
用法:/usr/bin/chown [选项]... [所有者][:[组]] 文件...
```
也就是如果我想要吧一个名叫`foo`的文件的所有者变为`wheel`组的`hmtsai`,我就得执行下面的命令:
```sh
chown hmtsai:wheel foo
```
如果你不想关心用户组的话,也可以直接执行:
```sh
chown hmtsai foo
```
`chown`这命令还有一些比较有意思的参数:
#### `-R`:递归操作文件或目录
> 首先,在主目录创建一些文件,来让我们继续学习这些命令。
>
> ```sh
> mkdir foo1
> cd foo1
> touch bar1
> mkdir test_chown
> cd test_chown
> touch bar2
> touch bar3
> ```
>
> 接下来,返回家目录:
>
> ```sh
> cd ~
> ```
指定`-R`选项后,将会遍历目录下的每一个文件(包括子目录下的文件),并执行指定的操作。
#### `-v`(`--verbose`)打印出更详细的信息
`-R`选项一般配合`-v`选项使用,毕竟递归操作属于较为危险的操作,最好保留详细的日志信息。
让我们观察一下这些选项会导致的结果,比如把这些文件和目录的所有者从`hmtsai`组的`hmtsai`改为`wheel`组的`hmtsai`用户试试?
```sh
chown -Rv hmtsai:wheel foo1
```
你将看见以下输出信息:
```text
'foo1/bar1' 的所有者已从 hmtsai:hmtsai 更改为 hmtsai:wheel
'foo1/test_chown/bar3' 的所有者已从 hmtsai:hmtsai 更改为 hmtsai:wheel
'foo1/test_chown/bar2' 的所有者已从 hmtsai:hmtsai 更改为 hmtsai:wheel
'foo1/test_chown' 的所有者已从 hmtsai:hmtsai 更改为 hmtsai:wheel
'foo1' 的所有者已从 hmtsai:hmtsai 更改为 hmtsai:wheel
```
> 与`chown`命令类似的还有`chgrp`命令,不过专门用于修改文件的用户组属性,这里不再赘述,可以通过`chgrp --help`来查看详细的用法。
### `chmod` 命令
`chmod`命令用于修改文件的“模式”(可以直接理解为权限)。主要有两种用法:
1. `chmod [选项]... 模式[,模式]... 文件...`
2. `chmod [选项]... 八进制模式 文件...`
#### 普通模式格式
第一种用法中的“模式”由三个部分组成,如下表:
|操作对象|操作|权限|
|--------|--------|--------|
|u,g,o|+,-|r,w,x|
这里面的u代表user所有者g代表group同用户组o代表others其他人。操作无非就是两种——增加和减少。权限三种读取写入执行。
> 文件的执行很好理解,但是目录的执行权限就比较特殊了,它代表的是“用户进入目录的权限”。但是不能进入目录不代表用户不能访问目录中的文件,用户仍然可以通过完整的路径访问文件就是了。
比如,我想要把`foo1`目录的权限设置为仅文件所有者可以执行、读取和写入,我们可以使用如下命令:
```sh
chmod go-rwx foo1
```
这时候再使用`ls -l`命令查看`foo1`目录的权限就可以看到g,o的所有权限都被取消了
```text
drwx------ 3 hmtsai wheel 4096 7月26日 18:33 foo1
```
接下来让我们考虑一个其他场景——如果我需要为不同的用户类别设置不同的权限怎么办?`chmod`的开发者们也考虑到了这个问题,于是我们可以通过逗号同时设置多个类别用户的权限。
比如,让`foo1`文件夹同用户组可以读写进入,其他人只可读取进入怎么样?
```sh
chmod g+rwx,o+rx foo1
```
再用`ls -l`命令去看,`foo1`目录的权限又变化了:
```text
drwxrwxr-x 3 hmtsai wheel 4096 7月26日 18:33 foo1
```
> 有些眼尖的同学可能会发现,目录的权限前面多了一个`d`,这是代表该权限所对应的是目录的象征,是`direoctry`的简写,很多软件也是这样区分目录和文件的!
#### 八进制模式格式
其实八进制模式也不是很难,只不过每个权限变成了三个数字相加的和,如下表所示:
|r|w|x|
|-|-|-|
|4|2|1|
八进制模式主要用于快速修改模式。比如我想让一个文件的模式变成rwxrwxrwx只需要`chmod 777 file`,而不是`chmod ugo+rwx file`。
> 为什么是421这三个数字呢这是因为他们的组合能够不重不信你试试看。
>
> 还有一个比较有意思的格式叫做“参考模式”,非常简单,格式就是`chmod [选项]... --reference=参考文件 文件...`。~~这个主要在懒得看模式的时候用(划掉)~~。因为比较简单,所以这里不再赘述。
#### 参数
`chmod`的参数与`chown`比较类似,于是在此不再赘述,详情可以通过`chmod --help`了解。
> 几乎所有命令都有一个`--help`参数,可以通过这个参数大概了解这个命令的用法。
## 课后任务
由于这篇的内容比较复杂,于是我们建议您完成以下任务进行练习:
- 将`foo1`文件夹的权限设置为`drwxrwxrwx`,并将完整日志打印到屏幕上。
- 将`test_chown`目录下的所有文件的权限设置为`755`,并且解释`755`在这里的含义,然后给出功能相同的使用字符模式的命令。
- 递归删除`foo1`文件夹,并且打印出`rm`命令每一步的操作。(可以参考`rm`命令的手册或者`rm --help`命令的输出)
---
> study-area-cn

View File

@ -1,176 +0,0 @@
# `tar` 打包软件
在使用Linux的过程中你可能会看见各种各样的压缩包文件比如`tar.gz`(最常见的 tar 压缩包格式)、`tar.bz2`、`tar.xz`、`tar`等等。这些文件都可以使用`tar`命令打包。
> 在linux上也有些常见的图形化压缩包管理器比如 `Ark`,但是它们远不及命令行工具的快速和稳定性。
tar压缩包都有一个显著的特征文件名中都带有一个 `.tar`tgz 等部分格式除外),但是后面的 `.gz` 等等又是什么呢其实tar 本身并不是一个压缩格式,它只是简单的把所有文件和文件夹打包到一起,而后面的 `.gz`、`.bz2`、`.xz` 等等才是压缩的格式。
> 关于其它格式的压缩包,比如`zip`、`rar`等,可以使用其它命令,比如`unzip`、`unrar`等。
绝大部分的linux发行版都预置了这个命令你通常无需额外安装直接使用便可。
## `tar` 命令
`tar`命令用于打包文件和目录,可以将多个文件和目录打包成一个文件,也可以将一个打包文件解压成多个文件和目录。
`tar`命令的基本语法如下:
```bash
tar [选项] [文件或目录]
```
下面是常见的选项:
- `-c`:创建新的压缩文件。
- `-x`:解压文件。
- `-t`:列出压缩文件中的所有文件。
- `-z`使用gzip压缩或解压 `.tar.gz` 格式)。
- `-j`使用bzip2压缩或解压 `.tar.bz2` 格式)。
- `-v`:显示操作的详细信息。
- `-f`:指定压缩包的文件名。
- `-C`:指定解压目录。
上面的内容看不懂也没关系,下面会一一介绍用法。
## 常见用法
### 打包文件为 .tar.gz
```bash
tar -zcvf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
上面的命令会将 `file_or_dir1`、`file_or_dir2` 等文件或者目录打包成一个名为 `archive.tar.gz` 的压缩包。
> 在 tar 中,是可以把多个 `-` 选项连用的,例如 `-z``-c` 可以写成 `-zc`(顺序无所谓),但是需要保证像 `-f` 这样带有参数的选项放在最后。除了 tar 命令很多linux的基本命令都可以这么用包括我们之前学习的 cp, ls 等命令。
### 解压 .tar.gz 文件
```bash
tar -zxvf archive.tar.gz
```
上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录。
> 这两个用法应该和是我们平时见得最多的用法了。熟练掌握这几个用法你就可以安装绝大部分的压缩包形式的linux软件了。
## 完整用法
接下来,我们来一起看看 tar 都有什么魔力吧。
> 下面会有一个常见的参数 `-v`,表示显示操作的详细信息。它会列出操作的所有文件。如果不加上这个参数,我们就看不到任何输出。当然,你也可以省略。
首先,我们进行压缩包操作,都要有个压缩包吧,所以下面的所有命令,都要加入 `-f 你的压缩包名字` 这个选项指定操作的压缩包文件。
### 压缩格式
我们前面提到了tar只是个打包的格式并不能压缩。但是tar可以调用其它的压缩工具比如gzip、bzip2、xz等来对打包的文件进行压缩。
下面是一些常用的参数:
- `-z`使用gzip压缩或解压 `.tar.gz` 格式)。
- `-j`使用bzip2压缩或解压 `.tar.bz2` 格式)。
- `-J`使用xz压缩或解压 `.tar.xz` 格式)。
> 若列出文件,可以省略压缩格式,后面会讲到。
### 创建压缩包
要创建压缩包,我们可以使用 `-c` 选项。
例如上文的
```bash
tar -zcvf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
就是创建一个名为 `archive.tar.gz` 的压缩包,使用 gzip 压缩格式。
### 列出压缩包中的文件
有了压缩包,我们该怎么验证,或者别人发来了一个压缩文件,我们怎么查看里面的内容呢?
我们可以使用 `-t` 选项。
```bash
tar -ztvf archive.tar.gz
```
上面的命令会列出 `archive.tar.gz` 压缩包中的所有文件。
### 解压压缩包
解压压缩包,我们可以使用 `-x` 选项。
例如上文的
```bash
tar -zxvf archive.tar.gz
```
上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录。
> 值得注意的是,这个操作不会新建一个文件夹。所以在解压之前,建议先看一看压缩包内是否有一层文件夹。尤其是当前目录文件比较多时,容易把文件解压到错误的位置。
### 指定解压目录
如果我们需要改变解压的位置,我们可以使用 `-C` 选项,例如解压到新建的文件夹。
例如上文的
```bash
tar -zxvf archive.tar.gz -C ./archive
```
上面的命令会将 `archive.tar.gz` 压缩包解压到当前目录下的 `archive` 文件夹中。
### 添加文件
如果我们需要向压缩包中添加文件,我们可以使用 `-r` 选项。
例如上文的
```bash
tar -rvf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
上面的命令会将 `file_or_dir1`、`file_or_dir2` 等文件或者目录添加到 `archive.tar.gz` 压缩包中。
### 删除文件
如果我们需要从压缩包中删除文件,我们可以使用 `--delete` 选项。
```bash
tar -vf archive.tar.gz --delete file_or_dir
```
上面的命令会从 `archive.tar.gz` 压缩包中删除 `file_or_dir`
### 更新文件
如果我们需要更新压缩包中的文件,我们可以使用 `-u` 选项。这个选项类似于 `-r`,只不过是替换。
```bash
tar -uf archive.tar.gz file_or_dir1 [file_or_dir2 ...]
```
> tar 的用法很多,但是常见的用法也就那么几种。多看,多用,你很快就能掌握。
## 课后作业
tar 是一个非常强大的工具。这个命令使用十分复杂,这里也难以介绍完全。下面的课后作业可以让你基本理解这个命令:
1. 使用前文提到的 `nano` 新建两三个个文件,文件名和内容都随意。
2. 使用 tar 命令以 gzip 格式压缩到一个压缩文件。
3. 把这个文件发给小伙伴,当然也可以发到论坛里。
4. 使用 tar 命令查看并且解压这个压缩包里的文件
5. 使用 cat 命令,看看文件里写的是什么
---
> study-area-cn

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 652 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1,162 +0,0 @@
# 在 VirtualBox 上安装 Rocky Linux
> 上级目录:[Rocky Linux 初见](../rocky_first_met.md)
在进行安装前我们需要去下载一份 Rocky Linux 的镜像,在[Rocky Linux 初见](../rocky_first_met.md)中有说明,此处不再赘述。
## 下载并安装 VirtualBox
我们要在虚拟机上安装 Linux首先我们得要有个虚拟机软件。本篇文章选择了一个免费并且十分好用的虚拟机——VirtualBox。
如果你已经安装过了,那么这一段可以直接跳过。
这里不过多介绍 VirtualBox只简单介绍一下 VirtualBox(下文可能会简称 vbox) 的安装和使用。
首先,我们需要使用你的浏览器去[VirtualBox 官网](https://www.virtualbox.org/)(`www.virtualbox.org`)下载一份安装包。
你应该会看见一个全是英文的页面,不过不要害怕,即使你的英文不好,你只要跟着下面的操作来就可以了。
看到下面巨大的蓝色的 `Download` 按钮了吗?点一下,你会被带到下载页面,然后我们可以看见 `VirtualBox 7.x.xx(这里是最新的版本号) platform packages` 字样,下面就是安装链接。
> 注:截至本篇文章编写时版本号是 `7.0.18`
在下面有包括 `Windows hosts``macOS / Intel hosts` 等字样。你只需要点击你的操作系统对应的链接,就可以把安装包下载下来了。
> 如果你是一个小白,不知道你用的是什么操作系统,那么你就选第一个
然后我们运行安装程序(应该会在下面或者右面的下载列表,点一下就可以),又会弹出一个界面。我们此时只需要忽略所有警告无脑 `下一步`(Next) 即可。
> 注:如果你已经在使用任何的 Linux 系统,请尽可能切换到 x11 桌面环境(小白可以不用管这一条)。
然后我们启动 vbox进行下一步安装。
## 新建虚拟机
软件我们有了,接下来我们要给虚拟机注入灵魂——操作系统了
不过在安装操作系统之前,我们要新建一个虚拟机。
启动软件后,我们会看到如下界面:
![Home Page](./assets/2.4.vbox.1.png)
> 注:本界面为 linux 下截图,可能会因操作系统和软件版本而有略微不同
然后我们选择 `新建` 一个虚拟机
![New VM](./assets/2.4.vbox.2.png)
我们会看到如下的界面:
![New VM Page](./assets/2.4.vbox.3.png)
我们点击下方标红按钮开启`专业模式`。不过虽然叫做`专业模式`,但是只要按着教程走,就没有什么难度。
开启专业模式后,界面发生了变化。不过万变不离其宗,我们还是要进行一些配置的。
首先,我们填写好虚拟机的名字(随便起,但最好不要有中文)。
![Set VM](./assets/2.4.vbox.4.png)
然后点击从上往下数第三项`虚拟光盘`右面的向下箭头,会弹出一个菜单。我们选择最后一项`其它...`,然后找到我们之前下载的 ISO 格式的镜像并点击确定。
![Choose ISO Img](./assets/2.4.vbox.5.png)
然后勾选`跳过自动安装`(自动安装并不利于学习,不过当你熟练操作后也可以自动安装。你就需要在`自动安装`选项卡中配置用户名和密码等)
然后我们选择第三个小蓝条`硬件`。
我们可以根据需要填写`内存大小`和`处理器`(处理器核心数)。如果你还不知道这两个是什么意思,请回看上一大章节。
以下是我推荐的计算方法:
```text
如果你的电脑内存 <= 2GB
很抱歉你的电脑不满足最低的硬件要求,不过你仍旧可以尝试在实体机上安装。
(不过我相信你也搞不到这么老的电脑了吧)
如果你的电脑内存是 4GB
那么你应该填写 `2048MB`(2GB) 为系统留出足够空间
如果你的电脑内存是 8GB
这时你填写 `6144MB`(6GB) 即可。如果你希望同时在主机干点别的的话,填`4096MB`(4GB) 即可
如果你的电脑内存 > 8GB
这时你填多少都可以,只不过最好各留出最少 4G(4096MB) 的内存
例如笔者的电脑是 12GB(49152MB),那么就可以填写 `8192MB`(8GB)
CPU数通常只需要填你的CPU核心数的一半就可以了。现在的电脑至少2核起步。
如果你在使用13代或以上的Intel酷睿那么你填写你的大核心(P核)的数量就行。
(截至本篇编写时Intel最新的酷睿还是13代2024.6)
```
然后勾选上`启用 EFI` (在 vbox6 可能会存在 bug使用 vbox6 的建议升级一下)
![Set VM Hardware](./assets/2.4.vbox.6.png)
接下来是创建虚拟机的最后一步——设置虚拟磁盘。选择最后一个小蓝条`虚拟硬盘`。
![Set Virtual Disk](./assets/2.4.vbox.7.png)
我们只需要关心画红框的磁盘大小。
如果你的磁盘空间足够,那么你开多少都行,一般开 40GB 就够了。
不过即使你的硬盘空间再紧张,这个数也不能低于 10GB。~~(不过 ISO 镜像都超过 10GB 了)~~
接下来点击`完成`就大功告成啦!
![Finish](./assets/2.4.vbox.8.png)
## 设置网络
先不要急性子启动虚拟机,这样启动的虚拟机是没有网络的。
不过相信我,这是启动前的最后一步了。
我们需要按照以下步骤设置网络:
首先点击`设置`按钮,会弹出来一个界面
![Open Settings](./assets/2.4.vbox.9.png)
然后我们点击左边的`网络`标签
![Network Settings](./assets/2.4.vbox.10.png)
然后我们点击`连接方式`右面的下拉框,选择`网络地址转换(NAT)`
![Set Network Mode](./assets/2.4.vbox.11.png)
然后点击保存
![Save Settings](./assets/2.4.vbox.12.png)
至此,我们终于可以启动虚拟机了!
## 启动虚拟机
然后我们点击绿色的`启动`按钮
![Start VM](./assets/2.4.vbox.13.png)
稍等片刻,会弹出一个新的窗口,你会看到一片黑,上面还有着文字,那就是 GRUB 了。
![GRUB](./assets/2.4.vbox.14.png)
---
接下来请继续阅读[安装 Rocky Linux](./install_rocky_linux.md)进行安装。
## 安装增强功能
> 注:请安装完系统再进行本段内容
### 增强功能有什么用?
增强功能可以提供包括便捷的文件拖拽传输和剪贴板互通,包括复制命令什么都很方便。
增强功能还能在一定程度上优化系统性能。
### 安装增强功能
首先我们找到窗口上方的菜单,点击`设备`,然后理所当然点击`安装增强功能`。
![Start Tools](./assets/2.4.vbox.15.png)
然后我们点击弹出窗口的`运行`
![Run Tools](./assets/2.4.vbox.16.png)
我们输入一下密码
![Input Password](./assets/2.4.vbox.17.png)
接下来稍等片刻,等待桌面上的“黑框框”终端自动关闭就是安装完成了。
然后重启虚拟机,大功告成
---
> study-area-cn

View File

@ -1,108 +0,0 @@
# 在 VMWare Workstation 上安装
> 上级目录:[Rocky Linux 初见](./install_rocky_linux_intro.md)
在进行安装前我们需要去下载一份 Rocky Linux 的镜像,在[Rocky Linux 初见](./install_rocky_linux_intro.md)中有说明,此处不再赘述。
## 下载并安装 VMWare Workstation Pro
假设说你要安装 Linux 的话,你需要一个虚拟机软件,本部分将使用 VMWare Workstation Pro一款十分优秀的跨平台虚拟机软件。
假如说你已经安装过了,你完全可以跳过这一段。
> 这里可能有朋友问VMWare Workstation Pro不是付费的吗?你这样难道想让我们去用盗版?
>
> 这点不用担心,因为在 VMware 被博通 Broadcom 收购了之后,博通就宣布 VMWare WorkStation Pro 的 17.5.2 版本对个人用户免费&ensp;~~(什么资本家大发慈悲)~~,所以盗版的事情各位大可不必担心。
原本你应该去注册一个博通的账号并且去到 Broadcom Support Portal 搞一大堆麻烦事情,但是我相信各位的精力是有限的,所以说这里直接贴出提取到的下载链接`https://softwareupdate.vmware.com/cds/vmw-desktop/ws/17.5.2/23775571/windows/core/VMware-workstation-17.5.2-23775571.exe.tar`
在你下载下来之后是一个 tar 文件,如果说你的电脑没有可以解压这种格式的软件,那请你去下载一个名为 7-Zip 的软件 `https://7-zip.org/a/7z2407.exe` 然后安装,记得关联格式。
在解压出来之后,我们就可以运行安装程序,先 Next同意完协议并 Next 后记得勾选一下 `安装键盘驱动`(如下图)
![Keybord Driver](./assets/2.4.vmware.1.png)
然后就可以一路 Next 下去了,安装完成后会有一次重启,在重启完毕后,我们该启动 VMWare WorkStation Pro进行下一步安装了。
> 假如说这里有朋友发现 VMWare WorkStation Pro 的页面是英文的,打开 VMWare WorkStation Pro 的`快捷方式`,在目标后面添加一个 ` --locale zh_CN`之后重启 VMWare WorkStation Pro 就好了。
## 新建虚拟机
软件我们有了,接下来我们要给虚拟机注入灵魂——操作系统了。
不过在开始安装系统前,我们需要新建一个 `虚拟机`
启动软件后,我们会看到像这样的页面:
![Home Page](./assets/2.4.vmware.2.png)
然后点击 `创建新的虚拟机`,你会看到这样的界面:
![New VM Page](./assets/2.4.vmware.3.png)
保持典型不变,点击下一步,点击 `安装程序光盘映像文件(iso)(M)`,然后点击浏览,找到你镜像下载到的位置,选中镜像,然后打开:
![Choose ISO Img](./assets/2.4.vmware.3.png)
接着点击下一步,填写 `虚拟机的名字` 还有 `虚拟机的安装位置`(这一步记得选一个剩余空间比较大的分区)
![Set VM](./assets/2.4.vmware.5.png)
现在开始设置 `虚拟磁盘`,这相当于你电脑的储存空间,这里直接引用隔壁 VBox 安装的话:
如果你的磁盘空间足够,那么你开多少都行,一般开 40GB 就够了。
不过即使你的硬盘空间再紧张,这个数也不能低于 10GB。~~(不过 ISO 镜像都超过 10GB 了)~~
![Set Virtual Disk](./assets/2.4.vmware.6.png)
然后我们就来到了配置设置页面,现在点击`自定义硬件`,还是引用 Vbox 安装的话:
我们可以根据需要填写`内存大小`和`处理器`(处理器核心数)。如果你还不知道这两个是什么意思,请回看上一大章节。
以下是我推荐的计算方法:
```text
如果你的电脑内存 <= 2GB
很抱歉你的电脑不满足最低的硬件要求,不过你仍旧可以尝试在实体机上安装。
(不过我相信你也搞不到这么老的电脑了吧)
如果你的电脑内存是 4GB
那么你应该填写 `2048MB`(2GB) 为系统留出足够空间
如果你的电脑内存是 8GB
这时你填写 `4096MB`(6GB) 即可。
一般来说,分配实体机内存的一半即可。
CPU数通常只需要填你的CPU核心数的一半就可以了。现在的电脑至少 2 核起步。
如果你在使用 13 代或以上的 Intel 酷睿,那么你填写你的大核心(P核)的数量就行。
(截至本篇编写时 Intel 最新的酷睿还是 13 代2024.6)
```
对于写者来说,设置完之后的页面如下:
![VM Settings](./assets/2.4.vmware.7.png)
最后关闭设置页面,点击`完成`,虚拟机就大功告成了!(如果你勾选了 `创建后启动此虚拟机` 那么则会自动启动)
## 启动虚拟机
假如说你在上一部勾选了 `创建后启动此虚拟机` 的话,你的虚拟机应该现在已经启动了,但是以防万一,这里还是讲解一下如何在 VMWare WorkStation Pro 里启动虚拟机:
第一步,选中`虚拟机`:
![Select VM](./assets/2.4.vmware.8.png)
第二步,点击`开启此虚拟机`:
![Start VM](./assets/2.4.vmware.9.png)
等一会后,会出现一个类似这样的页面,这里直接选中第一项然后回车就可以了:
![Boot](./assets/2.4.vmware.10.png)
---
接下来请继续阅读[安装 Rocky Linux](./install_rocky_linux.md)进行安装。
---
> study-area-cn

View File

@ -1 +0,0 @@
# 在实体机上安装

View File

@ -1,144 +0,0 @@
# 安装 Rocky Linux
按照上面的步骤,我相信你应该已经配置完了你的虚拟机/实体机,进入了 GRUB 界面。
![GRUB](./assets/2.4.install.1.png)
## 0x00 引导并进入安装页面
接下来,我们需要使用键盘的上下方向键选中 GRUB 菜单的第一项,才能进入安装。
![GRUB Choose](./assets/2.4.install.2.png)
记住选择完了不要在那里干等着GRUB 还没有那么智能,你得按一下 回车`[Enter]` 让 GRUB 明白你选择的是哪一项。
之后是一段启动过程了启动过程不会等很长时间2-3 分钟就能完成。
![System Starting](./assets/2.4.install.3.png)
然后是选择语言。如果你是在虚拟机安装的,语言一般都会自动选择。直接按右下角蓝色按钮继续即可。
![Choose Language](./assets/2.4.install.4.png)
如果默认语言是英文怎么办?你可以在左侧列下方输入`Chinese`,点击第一个蓝色项目,在右边也点击第一个(简体中文,在中国香港和中国台湾的小伙伴分别点第 3 个和第 2 个),此时你的语言应该就变成了中文。
接下来我们就来到了安装界面。
![Install Page](./assets/2.4.install.5.png)
我们在接下来的步骤需要填写以下项目:
- 软件选择
- 安装目标位置
- root 密码
- 创建用户
![Install Page Items](./assets/2.4.install.6.png)
## 0x01 软件选择
软件选择部分相对较简单。
如果你是虚拟机或者准备拿来当作主力电脑,那么就选`工作站`,如果你是用于搭建网页,就选`带 GUI 的服务器`(不推荐GUI 增加工作负荷)或`服务器`(命令操作,上手难度较大,不过可以配合 web 面板,并且要有两台电脑)
如果你选择了`工作站`,那么推荐把右面的`GNOME 应用程序`勾上,包含了文本编辑器等一大堆功能(非必选)。
选择完成后点击`完成`即可返回到上一页面
![Choose Software](./assets/2.4.install.7.png)
## 0x02 安装目标位置
这应该是本次安装中最难的一节了。
### 虚拟机/单系统
> 在安装前请确保格式化并删除了你硬盘的所有分区!(虚拟机不用管)
如果你不需要安装 Windows或者你在虚拟机里安装请参考下面的方案。
![Disk Page](./assets/2.4.install.8.png)
我们只需要在`本地标准磁盘`点击勾选我们的磁盘(已经钩了就不用再点),然后点`完成`即可。
![Choose Disk](./assets/2.4.install.9.png)
### 多硬盘多系统
多硬盘多系统也比较简单,和单系统差不多,但是在选择硬盘时请
**一定要核对硬盘大小!**</br>
**一定要核对硬盘大小!**</br>
**一定要核对硬盘大小!**
> PS:笔者因为选错盘丢过数据!
### 单硬盘多系统
> 新手请勿尝试!系统容易无法引导!请至少准备一个急救盘(WinPE推荐 WePE确保即使引导配置错误也能够修复)
这是三种里面最难的情况了。
//TODO: 待补充...
## 0x03 设置 root 密码/新建帐号
接下来我们设置用户名和密码。
首先设置 Root 密码。这个用户具有系统的最高权利,可以管理系统的一切事物,哪怕删除系统运行`rm -rf /*`(开个玩笑,请勿执行)都可以。
我们输入两次密码即可。如果你在你的服务器上使用,最好取消勾选`锁定Root账户`,然后点击确定返回。如果你发现确定点一次没有用,那么是你的密码过于简单,请再点一次确认或更改您的密码。
![Set Root Password](./assets/2.4.install.10.png)
然后我们可以使用同样的方法设置用户账户。
账户名不能有中文或者部分特殊符号。记得**一定一点**勾选`将此用户设为管理员`。
![Set New User](./assets/2.4.install.11.png)
## 0x04 开始安装
> 请一定在安装前核对配置选项!数据可能存在风险!作者概不负责!
我们再看一下配置完毕的页面:
![Before Install](./assets/2.4.install.12.png)
点击`开始安装`,开始你的 Linux 学习之路!
接下来,你可以去泡杯茶或去干点别的事情。安装过程会耗费大约 30 分钟到 1 小时。请耐心等待……
---
...... 一小时以后 ......
---
![Install Finish](./assets/2.4.install.13.png)
安装完成!
安装完成后,请在虚拟机的配置中卸载你的 ISO 文件,实体机请拔出你的 U 盘,然后点击重启。
## 0x05 首次登录
经过折腾,我们终于看到登录界面了!我们只需要点击你的用户头像,再输一遍密码,就能进入桌面了。
![Choose User](./assets/2.4.install.14.png)
![Input Password](./assets/2.4.install.15.png)
然后我们可以关掉桌面上“欢迎使用”的弹窗(看了,没有什么有用的内容)
![First Use Window](./assets/2.4.install.16.png)
## 0x06 如何关机
环顾桌面,我们并没有看到“开始菜单”,那么如何关机呢?
其实左上角的`活动`就相当于“开始菜单”,但是关机也不在这里。
我们点击右上角的电源按钮(其实是一整排一个按钮),依次选择`关机/注销--关机`,然后在弹出的窗口确认,稍等就可以关机了。
![Shutdown](./assets/2.4.install.17.png)
![Shutdown Dialog](./assets/2.4.install.18.png)
## 0x07 换源
//TODO:待补充...
---
> study-area-cn

View File

@ -1,94 +0,0 @@
# Rocky Linux 安装
既然我们要学习 Linux那么我们肯定要亲自动手安一遍系统。
不过安系统并不是一个难事,有了前面的铺垫,其实自己也是可以搞明白的。
> 开始安装前请确保你有着充足的时间1-2 个小时)并确保不会断电,安装系统比较耗费时间
---
下面是一个流程图,请跟着流程图的顺序进行阅读并实践。
```text
_ 在 VMWare WS 安装 ----—_
/ \
下载 ISO -- 在 VirtualBox 安装 -- 安装 Rocky Linux
\_ _/
在你的电脑安装 ---------
```
1. 下载 ISO
2. 以下三种安装方式任选其一
- [在 VMWare WS 上安装](./install_rocky_linux/install_in_vmware.md)
- [在 VirtualBox 安装](./install_rocky_linux/install_in_vbox.md)
- [在你的电脑(实体机)安装](./install_rocky_linux/install_in_your_pc.md)
3. [安装 Rocky Linux](./install_rocky_linux/install_rocky_linux.md)
## 下载 ISO
下面是 Rocky Linux 的官网:
> [rockylinux.org](https://rockylinux.org/zh_CN)
下面是几个可以直接下载 ISO 文件的链接:
> ISO 文件较大(`10GB`左右),建议使用专业的下载工具,如`IDM`(Windows 下收费软件)~~`迅雷`~~(有服务器加速,较快,但是有广告等问题)`Motrix`(跨平台开源,不过较慢)~~PCL(一个某游戏启动器,不过下载文件超级快)~~ 等
>
> [官方](https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.4-x86_64-dvd.iso) (国内不推荐,网速较慢,某雷可以忽略,但官方有提供[种子文件](https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.4-x86_64-dvd.torrent))
>
> [阿里源](https://mirrors.aliyun.com/rockylinux/9/isos/x86_64/Rocky-9-latest-x86_64-dvd.iso) (国内镜像,推荐)
>
> [南京大学源](https://mirror.nju.edu.cn/rocky/9.4/isos/x86_64/Rocky-x86_64-dvd.iso) (国内镜像,较冷门,提供[种子](https://mirror.nju.edu.cn/rocky/9.4/isos/x86_64/Rocky-9.4-x86_64-dvd.torrent))
>
> 清华源不提供 rocky linux 的镜像
---
接下来请继续 Rocky Linux 的安装。
## 如何选择适合自己的安装方式
如果你有一台闲置的老电脑,或者是一块空的硬盘,那么[实体机安装](./install_rocky_linux/install_in_your_pc.md)是再合适不过的了。
如果你平常不玩游戏,也没有办公的需求或是专业软件,平时就写一写代码,那么你或许也可以尝试一下实体机安装。
虚拟机安装比较灵活,但是需要一定的性能,不过性能损耗也是很小的。
笔者配置:
```text
CPU: Intel(R) Celeron(R) G1840 (2) @ 2.80 GHz
内存: 11.39 GiB
OS 1: Arch Linux x86_64
桌面: KDE Plasma 6.0.5
OS 2: Windows 11
```
都可以流畅在 VirtualBox 运行虚拟机。
我们现在常见的虚拟机软件有以下几款:
1. VMWare Workstation Pro
这是一款常见的企业级虚拟机软件。自从被博通收购后,产品对个人用户免费。
优点: 有完整的官方文档支持,新手教程多
缺点: 不开源,异常问题较难解决,被博通收购后下载链接很难找并且需要登录
2. VirtualBox
这是一款开源免费的虚拟机软件,由 Oracle 维护。
优点: 社区支持强大,开源,自定义程度高
缺点: 新手使用会略微有些难度(不过也很简单)
- **[在 VMWare WS 上安装](./install_rocky_linux/install_in_vmware.md)**
- **[在 VirtualBox 上安装](./install_rocky_linux/install_in_vbox.md)**
- **[在你的电脑(实体机)安装](./install_rocky_linux/install_in_your_pc.md)**
---
> study-area-cn

View File

@ -1,161 +0,0 @@
# Linux 常识
当你照着上面的教程,费尽千辛万苦,历经千难万险,终于安装上 Rocky Linux 后,你肯定会有一个问题:我 C 盘呢?
其实Linux 的很多逻辑以及文件的组织结构都是与 Windows 大不相同的,接下来,我们就一起了解一下。
> 注意以下操作若无特殊说明输入命令均在终端Terminal下操作可以按下 C-M-T 呼出。
## Linux 路径的格式
> 注文件夹Folder和目录Directory实际上是一个东西。只不过我们在图形界面下更习惯叫文件夹终端命令行下更喜欢叫目录。
Linux 中目录的分隔符是`/`,而非 Windows 中的`\\`。
Linux 中,每个文件夹下,都有两个特殊的目录,就是`.`和`..`
1. `.` 代表当前所在的文件夹
2. `..` 代表上一级文件夹,而 `/` 的上级文件夹就是它自己
> 这块似乎有一点不太好懂,我们通过实际的例子解释一下:
> 假设我们当现在目录`/foo/bar`下,那么`/foo/bar/.`就等同于`/foo/bar``/foo/bar/..`,就等同于`/foo`
如果一个路径以`/`开头,那代表这个目录是从根目录开始的,根目录就相当于 Windows 上的 C 盘,是存放系统的位置。
> 注:在 Windows 下也有一个隐藏的根目录,不过我们几乎访问不到也访问不了
而你所看到的主文件夹(或者是用户目录),位于 `/home/你的用户名`Linux 中 root 用户比较特殊,就是`/root`),相当于 `C:\Users\你的用户名`MacOS`/Users/你的用户名`)。在这里你可以放置你的个人文件和代码。
> 实际上,`/`只是一块硬盘的挂载点,后面会讲到
除了这些之外,还有一个路径,是永远指向你的家目录的,这就是`~`。
假设你的用户名是`hmtsai`,那么`~`是等同于`/home/hmtsai`的。
## 基本操作
### `ls` 列出文件
`ls`,顾名思义,就是 list列出当前目录下的文件他的基本使用方法也很简单
```bash
ls <目录>
```
这个命令就会列出那个目录下的文件。如果没有参数ls 默认列出当前目录下的文件。你应该还能看见颜色,不同颜色就代表了文件(夹)的不同类型。
`ls` 还有一些其它的参数,比如输入 `ls -al` 就可以看见纵向排列的文件详细信息了,输入文件名就可以筛选出那个文件夹内/文件本身。
### `pwd` 打印工作目录
`pwd`,名字拆解出来,就是 print work directory。也就是打印工作目录这个命令可以让我们快速了解到我们当前所在的目录。
> 工作目录work directory可以简单的理解为用户当前所在的目录在以后讲解 shell 的时候会进一步讲解这些概念。
使用方法也很简单:
```bash
pwd
```
这样就会输出当前的工作目录。
### `cd` 切换目录
cd更好理解了就是 change directory切换目录的意思。
使用方法更简单了:
```bash
cd <目录>
```
这样,就会把当前的工作目录切换到指定的目录了。
> 一般情况下,只执行`cd`是和`cd ~`等价的。
### `mkdir` 新建文件夹
我们刚学习使用 Windows 时,除了开机,第一件事应该就是新建文件夹了。
这个命令的意思就是字面上的make directory新建文件夹。
你可以使用下面的命令:
```bash
mkdir <目录名>
```
另外,如果你想一次性创建多层目录,那么可以使用 `mkdir -p <多层目录>`,例如 `mkdir -p learn/linux/study`
### `mv` 移动文件
那我们的重命名,剪切,复制,粘贴去哪了呢?在 Linux 命令行中,其实没有剪切。
```bash
mv <你想移动的目录> <目标或新的名字>
```
我们可以使用上面的命令移动或者重命名一个目录(是的,它们是一个命令)。
> 在同一磁盘内移动速度很快,但是跨磁盘就不一定了
### `cp` 复制文件
而复制也是一个道理:
```bash
cp <你想复制的文件或目录> <新文件或目录的名字>
```
### `rm` 删除文件
都有复制了,怎么能没有删除呢?
> 删除危险性较高,不要删除根目录或者其它重要目录!回车前再三确认!
```bash
rm <你想删除的文件>
```
另外,删除文件夹的操作有点不一样:
```bash
rm -r <你想删除的文件夹>
```
在`r`后面加上`f`就是强制删除了,而 `rm -rf /*` 就是强制删除根目录下所有的文件。以后看到这串命令不要被骗了!
> 如果你真的想尝试,那么请一定在虚拟机下!搞坏系统作者可不负责!
### `nano`简单的文档编辑器
![Nano 的界面](./assets/2.5.1.png)
`nano`实际上就是被誉为“神之编辑器”的 Emacs 编辑器的极限精简版,所有的基本操作都被标在了界面的下方
```text
^G 帮助 ^O 写入 ^F 搜索 ^K 剪切 ^T 执行命令 ^C 位置 M-U 撤销 M-A 设置标记 M-] 至括号 M-B 上一个
^◂ 向后 ^◂ 前一个字 ^X 离开 ^R 读档 ^\ 替换 ^U 粘贴 ^J 对齐 ^/ 跳行 M-E 重做 M-6 复制
^B 向前搜索 M-F 下一个 ▸ 向前 ^▸ 后一个字
```
> 以后,我们会学习一款使用更广泛的编辑器:`Vim`(被誉为“编辑器之神”)。
### `poweroff`关机
很多同学刚使用 Linux 的时候,最大的问题就是:怎么关机?
实际上关机很简单,只需要键入:
```shell
sudo poweroff
```
回车执行之后会提示你输入密码,直接输入就可以了,输入的时候是没有回显的,不用担心,输入完直接回车即可。
> 关于`sudo`是什么意思,这个在以后我们讲解权限的时候会提到,你现在就理解为是用来获取系统的最高权限的意思就 ok 了。
### `man`用户手册
man是 manual手册的意思你可以通过简单地输入 `man <命令>`来使用。

View File

@ -1,77 +0,0 @@
# Linux 发行版(distribution, distro)
## 什么是 Linux 发行版
> Linux 发行版是一个由 Linux 内核、GNU 工具、附加软件和软件包管理器组成的操作系统它也可能包括显示服务器和桌面环境以用作常规的桌面操作系统。1
如果你不是理解以上的内容,那么请跟随我往下看:
我们前文提到了`Linux Kernel`。Linux Kernel 只是一个操作系统的核心,甚至连一个能够操作的界面都没有。而我们常常提到的`Linux`通常指 Linux 发行版,而发行版就相当于在 Linux Kernel 外面添加了诸多软件,可以让 Linux“开箱即用”(我们有时说的`OOBE`就是“开箱即用体验”的意思)。
这些发行版附带了很多来自 GNU 的开源软件,所以这类发行版也被称为`GNU/Linux 发行版`。
Linux 基本命令中的极大部分都来自 GNU 项目中的 coreutils`cat`、`grep`、`awk`、`bash`,甚至最简单的`ls`、`cp`,都来自于 GNU。
> 当然 GNU 工具并不是唯一的选择,常见的还有嵌入式的`busybox`等。
如果没有这些工具,你甚至连一个只能敲命令的黑框框(tty)都见不到。
> 目前唯一常用的的非 GNU/Linux 发行版是 Android AOSP就是我们平常用的安卓手机(准确来说 AOSP 只是个基础)。
>
> AOSP 使用了非常复杂的方法把内核独立出来,包括 glibc 等东西都重写了一遍,从而无需遵守内核和 GNU 各个组件的 GPL 开源协议。(不过这事一直都有争议)
用我们前面的比喻:内核就是一辆汽车的引擎,而软件就是汽车的其它部分,这两者缺一不可。而发行版就是直接给你了一辆完整的汽车,你可以直接开走。
甚至绝大多数的发行版的内核都是可以手动更换的,并且也不会太麻烦。
## 有哪些 Linux 发行版
说到 Linux 发行版,那可真的是成千上万了。有一个项目 [Linux Distribution Time Line](https://github.com/FabioLolix/LinuxTimeline) 展示了大多数 Linux 发行版之间的关系。不过这里面的绝大多数我们听都没听说过。
完整的图片在[文章结尾](#linuxdistributiontimeline)
笔者在下面总结了一些常见发行版:
![Distros](./assets/2.3.2.png)
- `RedHat` 使用 rpm/yum 管理软件包的一款发行版,有良好的企业级支持,但是 Enterprise 需要付费(衍生无需)。
- `CentOS` 之前服务器最常用的 Linux 发行版(CentOS 7&8),不过现在已部分停止开发,使用人数较少
- `RockyLinux` 新兴的 RedHat 系发行版,可以作为 CentOS 的继任者在服务器端使用,也可用于桌面系统
- `Debian` 使用 dpkg/apt 管理软件包,操作简单,功能易学丰富,也适合作为服务器系统
- `Ubuntu` 最受欢迎的桌面 Linux 发行版,笔者初入 Linux 选择的就是本系统。Ubuntu 还有 Server 服务器版本,不过不是很好用
- `Deepin` 国产的一款 Linux 系统,使用独有的 DDE 桌面,开箱即用界面美观,但是 bug 较多,且性能要求较高
- `ArchLinux` 使用独有的 pacman 管理软件包,有庞大的 AUR 支持。新手上手难度极高,默认只有命令行界面,但定制性也极高,但是系统为滚动更新,较不稳定,容易“滚挂”(指更新软件包导致系统无法启动等问题),被网友戏称为“邪教”
- `Manjaro` 一款基于 ArchLinux 的带有图形界面的发行版,新手较为友好
- `SteamOS` 一款默认被用在 SteamDeck 上的专为游戏设计的操作系统,对游戏的兼容性较好
还有一些比较小众的发行版,如`NixOS`、`Alpine Linux`,这里不一一说明了。
## 如何选择适合的发行版
选择发行版没有一个完美的答案,真正还要根据你自身来选择。不同发行版有不同优势。
搭建网页可以选 RockyLinux 或是 Debian安全稳定文档多。
如果你在为一家企业搭建服务并有充足预算,可以使用 RedHatEnterprise。
长期使用可以优先选 Ubuntu小白可以尝试 Deepin软件包格式方便好找自带应用商店。
如果你有足够的基础和一定英文能力(其实大学四六级应该就够了),喜欢折腾,那么 ArchLinux 是你的不二之选占用小可定制性极强。无论如何Archlinux 不应被安装在追求稳定的服务器上。
如果你不打算安装在实体机上,那么还是推荐 `RockyLinux`
> 记住:发行版上的软件一般仅提供了源码级的兼容性,如果你使用的发行版的软件源没有该软件,最好自已编译一下。二进制文件在不同的发行版上,行为有可能不同
## 注释
1摘自 linux.cn
## 附录
### LinuxDistributionTimeLine
> (2024.6.6 构建)
![Linux Distribution Time Line](./assets/2.3.1.svg)
---
> study-area-cn

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

View File

@ -1,179 +0,0 @@
# 学习 Shell。
## 概念
Shell也称为壳在计算机中指“为用户提供用户界面”的软件通常指的是命令行界面的解析器。一般来说这个词是指操作系统中提供访问内核所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序也就是程序和用户交互的层面。因此与之相对的是内核英语Kernel内核不提供和用户的交互功能。[1]
但是,在 Linux 中,我们通常所讲的 Shell 是指命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序来实现自动化的功能。
Shell 也指代一种命令语言,由这种语言编写的脚本称为 Shell Script。
Shell 命令语言的标准为参考 AT&T 的 ksh 和 GNU 计划的 Bourne Again Shell (bash) 制定的 The Open Group Base Specifications Issue 6 中的 [2.Shell Command Language](https://pubs.opengroup.org/onlinepubs/9690949599/utilities/xcu_chap02.html)。
本章我们将学习 Shell 的基本使用。
## 快捷键
Shell 也有快捷键?是的。大多数 Shell 都支持以下的快捷键:
- `C-C`:终止当前进程。
- `C-Z`:暂停当前进程。
- `C-D`退出当前Shell实际上是发送一个 `EOF` 文件结束字符)。
- `C-L`:清屏。
> 其中 `C-C``C-D` 是十分重要的两个快捷键,十分常用。
在 Bash 中,还有一些特殊的快捷键,它们继承自 GNU Emacs 编辑器,用于快速移动光标以及编辑文本:
- `C-A`:移动光标到行首。
- `C-E`:移动光标到行尾。
- `C-B`:向左移动光标。
- `C-F`:向右移动光标。
- `C-K`:删除从光标位置到行尾的文本。
- `C-U`:删除从光标位置到行首的文本。
- `C-W`:删除光标左侧的单词。
- `C-Y`:粘贴之前删除的文本。
> 这部分只需要了解即可
## 命令
命令分为内部命令和外部命令,内部命令是 Shell 自带的命令,外部命令是 Shell 外部的可执行程序。
一条 Shell 的指令的标准格式为:
```bash
command [options] [arguments]
```
其中,`command` 是命令的名称,`options` 是命令的选项,`arguments` 是命令的参数。
它的格式不一定必须遵守,但是通常遵守这个格式会带来更好的可读性(用什么工具采用什么方式对什么文件做什么)。
但是,有一个例外,就是指定输出,这时,我们推荐將指定输出的选项以及参数放在文件明后面。
例如,`ls` 命令用于列出当前目录下的文件和文件夹,它的选项可以是 `-l`、`-a` 等,参数可以是文件名或目录名。
## 变量
Shell 中的变量分为环境变量和用户变量环境变量是Shell启动时自动设置的变量用户变量是用户自定义的变量。
用户变量可以通过 `export` 命令设置为临时环境变量,例如:
```bash
export GREET="Hello, World!"
```
然后我们在这个 Shell 里启动一个新的 Shell仍然可以在环境中找到这个变量。
```bash
bash -c 'echo $GREET'
```
> `export` 声明的变量只在当前环境下有效,如果你开启了个新的终端或者重启,那么这个环境就无效了
用户变量可以通过 `declare` 命令声明,例如:
```bash
declare USER_GREET="Hello, Shell"
```
变量可以通过 `${}``$` 符号来引用,例如:
```bash
echo ${GREET}
echo $USER_GREET
```
> 当变量的前后有别的内容紧挨着,那么只能使用 `${}`
## 特殊的环境变量
Shell 中有一些特殊的环境变量,它们在 Shell 启动时自动设置,例如:
- `$HOME`:当前用户的主目录。
- `$PATH`:可执行文件的搜索路径。
- `$SHELL`当前Shell的名称。
- `$PWD`:当前工作目录。
- `$USER`:当前用户的用户名。
其中最重要也是最常用的就是 PATH它决定了Shell在执行命令时搜索可执行文件的路径。当我们发现明明安装了某个软件但是找不到可执行文件的时候应该首先检查 PATH 的设置。如果你熟悉 Windows你会发现 Windows 的 PATH 是一串由分号分隔的路径。而 Linux 下的路径使用的是 `:` 冒号分隔。
> 在 Windows 中的 PATH 中有一条路径是 `.` 就是当前目录,而 Linux 中默认是不会搜索当前目录的。如果你在当前目录有一个 `run.sh`,那么你必须要使用 `./run.sh` 才能执行。
## 管道
Shell 中的管道是链接两个命令的方式,管道遵守下面的格式。
```bash
command1 | command2
```
`command1` 的输出将会作为 `command2` 的输入提供,例如:
```bash
ls -a | grep "test"
```
这个命令将会列出当前目录下的所有文件,然后使用 `grep` 命令过滤出文件名包含"test"的文件。
## 输出重定向
Shell 中的重定向是改变命令的输出地点的方式,重定向遵守下面的格式。
```bash
command > file
```
`command` 的输出将会被重定向到 `file` 中,例如:
```bash
ls -a > files.txt
```
这个命令将会列出当前目录下的所有文件,然后使用 `>` 符号将输出重定向到 `files.txt` 中。
## 输入重定向
Shell 中的输入重定向是改变命令的输入地点的方式,输入重定向遵守下面的格式。
```bash
command < file
```
`command` 的输入将会被重定向到 `file` 中,例如:
```bash
cat < files.txt
```
这个命令将会读取 `files.txt` 中的内容,然后使用 `cat` 命令输出到标准输出中。
## 将命令的输出作为参数
让我们想像这个场景:有一个文件有一个文件名列表,我们想要获取这些文件的详细信息,这怎么实现呢?
运算符 `$()` 可以将命令的输出作为参数,它的标准格式如下:
```bash
command1 $(command2)
```
`command2` 的输出将会作为 `command1` 的参数。
实现前文的场景所需的命令如下:
```bash
ls -l $(cat files.txt)
```
这个命令将会读取 `files.txt` 中的文件名列表,然后使用 `ls -l` 命令获取这些文件的详细信息。
## 课后作业
1. 使用 Shell 的输出重定向功能,在主目录中创建一个保存了主目录中所有文件列表的文件,命名为 `files.txt`
2. 使用 `cat` 读取所有文件的内容。
## 参考
- [Shell - 维基百科,自由的百科全书](https://zh.wikipedia.org/wiki/Shell)

View File

@ -1 +0,0 @@
# Shell 与 Shell Script

View File

@ -1,198 +0,0 @@
# Vim 编辑器
> 在 Vim 中所有的键位注意区分大小写,所有大写的命令都需要按下 `Shift` 键,例如 `V` 表示为 `S-v`
不知道你有没有听说过 Bram 发明的 Vim 编辑器,有这么一个梗,就是:
> 如何产生一串随机字符串?答:让新手退出 Vim。
你应该能看出 Vim 的操作是多么“反人类”了吧。事实上,在 Vim 发明的时候,电脑上还没有鼠标,所有的操作只能靠命令完成的(可以想一想 tty。所以Vim 的设计理念就是让用户通过键盘完成所有的操作。
但是,我们如果要通过终端远程管理一台 Linux 服务器,那么必须使用像 Vim 这样的终端编辑器。Vim 的功能比前文的 Nano 强大许多,如果你熟悉了 Vim那么你的速度可能远远超过那些使用其它编辑器的人。
> Vim 的前身是 Vi本文的绝大部分命令同样适用于 Vi。几乎所有的 Linux 发行版都自带 Vi 或是 Vim 其中之一,不用担心是否安装了 Vim。其实 Windows 上也可以安装 Vim。
>
> 如果你在 Vim 中困住了,只需要按下 `<Esc>:q!<Enter>` 就可以退出 Vim 了
## 启动 Vim
Vim 的启动十分简单,只需要在终端输入 `vim` 即可。
```bash
vim [文件名]
```
文件名是可选的。如果文件存在Vim 就会打开这个文件如果文件不存在Vim 就会创建这个文件。
然后你会看到如下界面:
![Vim](./assets/2.3.2.1.png)
## Vim 的使用
首先,我们进入 Vim会发现我们并不能像 Nano 一样直接打字。这是因为 Vim 默认处于“命令模式”,我们需要按下对应的按键可以进入到不同的模式。记住:无论在任何时候,按下 `Esc` 键都可以回到命令模式。
下面是一张 Vim 的键位图:
![Vim Keymap](./assets/2.3.2.2.png)
如果看不懂也没关系,下面我们会讲解其中常用的一些功能。
### Vim 的“模式”
Vim 有一个最基本的东西“模式”在不同模式下快捷键的功能会有所不同。Vim 会在左下角提示你所在的模式。
以下是常见的模式:
- `命令模式` 这个是 Vim 启动所在的模式,以下的所有内容均在这个模式内进行。其它模式均可以使用 `Esc` 退出到命令模式。
- `编辑模式` 使用 `i` 进入,底部会提示 `-- INSERT --`(`-- 插入 --`),在这个模式下,你可以正常编辑文档,和一般的文本编辑器无异。
- `替换模式` 底部会提示 `-- REPLACE --`(`-- 替换 --`),使用 `R` 进入,这个模式与编辑模式差别不大,但是你输入的所有内容都会替换光标后的内容。
- `选择模式` 原名是“可视模式”,使用 `v` 进入,底部会提示 `-- VISUAL --`(`-- 可视 --`),你可以选择一段文本进行操作。
- `选择行模式` 使用 `V` 进入,底部会提示 `-- VISUAL LINE --`(`-- 可视 行 --`),此时所有的选择都变成了整行选择。操作没有任何区别。
- `底部命令行模式` 使用 `:`、`/`、`?` 进入(功能不同),此时整个底部都会变成命令行,以 `:``/` 等字符开头,此时可以输入命令,按下 `Enter` 就可以执行并退出。
### 移动光标
在命令模式下,我们可以使用键盘上的方向键来移动光标。但是,我们也可以使用 Vim 提供的命令来移动光标:
```text
^
k
< h l >
j
v
```
> 当你熟悉了 `hjkl` 的使用后,你会发现使用这几个命令比使用方向键快多了
### 命令行
我们输入 `:` 就可以进入命令行(和上面的底部命令行模式有点区别)了。在 Vim 中,命令行负责了许多复杂的工作。
下面是最常见的命令组合:
- `:w` 保存文件
- `:wq` 保存并退出 Vim
- `:q!` 强制退出 Vim文件未保存的情况下
> `!` 接在命令后表示强制执行一个命令
>
> 另外,在 `w` 命令后面可以接上文件保存的路径,实现另存为的功能,例如 `:w 1.txt`
其中命令行模式的其它功能我们在下面还会讲到。
### 删除与剪切
假如有一大段文字,在 Vim 中又不能像图形化一样鼠标一拖一删,那么如何快速删除呢?
在 Vim 中,我们可以单独使用 `x``d` 命令,也可以在“可视模式”(待会会讲到)下编辑。
`x` 命令可以删除光标所指的当前字符,而 `d` 命令的功能就比较复杂了。`d` 命令是一个“多字符命令”,需要在 `d` 后面输入其它的东西搭配使用。
> `d` 命令实际上是剪切,后面会说如何粘贴
下面是一些例子(均包括开头的 `d`
- `dd` 删除整行
- `dw` 删除当前单词(以空格分割)
- `d0` 删除这行从光标的位置到最前
- `d$` 删除这行从光标的位置到最后
> 在 Vim 中,很多命令例如 `x`、`d` 和后文的 `y`、`G`、`gg` 等前面都可以加一个数字,表示重复这个命令多少次,例如 `5dd` 就是删除5行包括 `hjkl` 也可以。
### 复制
前面我们说到了 `d` 的本质是剪切,那么我们如何复制呢?`y` 命令便可以复制。
> 注意Vim 的剪贴板是独立的,和系统使用的不同
`y` 命令和 `d` 命令的用法如出一辙,例如 `yy` 就是复制整行,`yw` 就是复制单词。
### 粘贴
`p` 命令代表 `parse`,就是粘贴。可以粘贴使用 `y` 复制或者 `d` 剪切的内容。
### 跳转
如果我们想要快速在文件中跳转,那么`gg` 命令和 `G` 命令是不可或缺的。
`gg` 命令可以让你快速来到文件的开头,而 `G` 命令单独使用可以来到文件尾部,
这个两个命令前面加上数字,就可以快速跳转到指定的行(`G` 命令也是从头开始数的)。
使用也非常简单,按一下就可以,前面也可以加数字。
另外,可以使用 `0` 跳转到行首和 `$` 跳转到行尾。
`d``y` 命令后面也可以接 `gg`、`G`、`0`、`$` 命令,效果就是从指定的位置选择到当前光标所在处。
### 重复上一个命令
这个命令是 `.`,没错,就是点。可以重复你的上一个命令。
### 选择模式(可视模式)
可视模式,这个名字其实有点误导人。事实上,这个模式就是选择一段文字。(事实上你如果在终端中直接使用鼠标进入的就是这个模式)
下面是在可视模式中的操作:
- 使用 `hjkl` 移动(当然方向键也可以)
- `y` 复制
- `d` 剪切
- `x` 删除
- `p` 覆盖粘贴
- `gg`、`G`、`0`、`$` 移动光标
### 查找内容
在 Vim 中,我们可以使用 `/` 进行查找,输入 `/` 然后再输入关键词。
在查找过程中,我们可以使用 `n` 查找下一个,`N` 查找上一个。
### 小技巧:使用 `:!` 快速调试 Shell 脚本
在使用 Vim 的过程中,假如我们需要调试一个 Shell那么我们就需要退出 Vim启动脚本再打开 Vim十分的麻烦。不过 Vim 提供了一个命令 `:!` 来让我们快速运行一行命令。
```text
:! [要执行的命令]
```
然后我们会跳出 Vim并看到这个命令的执行结果。如果想要回到 Vim只需要在程序结束后敲一下 `<Enter>` 便可以回到 Vim 了。
另外,我们可以单独使用 `:!` 查看执行的历史记录。
## Vim 的配置
在 Vim 中,我们可以使用 `:set (no)[配置名]` 去开关某些配置。
对于有参数的配置,可以使用 `:set [配置名]=[值]`
下面是一些常用配置:
```text
:set number "启用行号
:set autoindent "自动缩进
:set autoread "如果文件有更改自动更新文件
:set wrap "自动折行
:set encoding=utf-8 "设置显示格式,文件显示乱码可尝试调整
:set fileencoding=utf-8 "设置写入格式
:set hlsearch "高亮搜索结果
```
这些配置都是临时启用,如果每次启动时都要手动配置,属实有点麻烦。那么该怎么办呢?我们可以将配置文件写入 `~/.vimrc` 文件实现永久配置。(注意所有配置不要带冒号)
> 其实 Vim 的功能远不止如此,感兴趣的可自行了解 VimScript 相关内容。
## 课后作业
Vim 的功能十分强大,并且在维护时十分常用。下面的练习可以帮你更好掌握 Vim
> 试试看在下面的过程中,全程不使用方向键吧!
1. 使用 `touch` 新建一份 `.sh` 文件,文件名随意
2. 使用 Vim 编辑这个文件,使用 `echo` 输出一个 `helloworld`
3. 保存这个文件
4. 使用 `:!` 运行这个文件
5. 退出 Vim
6. 使用 Vim 定制你的 `~/.vimrc` 配置文件
7. 你也可以将这个配置文件发到论坛上与小伙伴交流

View File

@ -1,45 +0,0 @@
# Linux 的发展历程
## 一个伟大的梦想——Multics
很久以前,电脑是个昂贵的东西。那是一个电脑动不动要占用一整层写字楼的时代。
这么昂贵的电脑,一般人自然用不起,所以就有了一个叫做批处理操作系统的东西。每个人都可以提交自己的任务到队列里,然后等待自己的程序运行后的结果。
但是批处理操作系统也不完美,这玩意根本就没有交互性,而且很长一段时间都是只能运行一个程序。所以在 1965 年BellGEMIT 提出了一个叫做“Multics”的分时操作系统。
什么是分时操作系统呢?简单来说,这玩意就是给每个程序一片很小的时间,让它们来回切换。程序切换的间隔很小,看起来就像是在同时运行一样。
但是由于 Multics 开发途中加入的功能越来越多,最后形成了一个几乎无法填满的大坑,于是 Bell 退出了开发。
> 不过,最终 Multics 还是成功的开发出了它们的产品,您可以通过访问它们的[官方网站](https://www.multicians.org/)
## Linux 之前Unix 的往事
Bell 推出 Multics 的开发之后有两个人用回原来的系统越来越不习惯于是它们就以“研究新一代文本编辑器”为借口开始研究一个新的操作系统——Unix。
这两个人就是在计算机界有着重要影响的 Ken Thompson 和 Dennis Ritchie。
Unix 本来只是 Ken 的一个想法,他本来是没有时间来完成这个操作系统的。
但是一天Ken 的妻子要带着孩子去美国的西部探亲Ken 就空出来有将近一个月的时间来编写 Unix。最终他使用汇编语言完成了一个小小的内核与一些工具。这个内核最初没有名字但因为这个系统的简单实验室的人们就这个戏称这个系统为 Unics。于是最后的名字就便成了 Unix。
Dennis Ritchie 得知了这个这个计划后,就开始和 Ken 一起将 Unix 使用 B 语言重写,但是不知为何 B 语言编译出来的内核性能就是不好于是Dennis 搞了一种全新的编程语言,叫做 C 语言(名称取自 BCPL 的第二个字母)。他们用 C 语言重写了 Unix 内核。最终 Unix 称为了现象级的产品。
## AT&T 收回版权Minix 与 Linux 出现
到了 Unix 发布第七版的时候(即 System v7AT&T 收回了 Unix 的版权,第七版影响力最大的修改就是不允许将 Unix 的代码提供给学生。
这个修改可愁坏了一名叫做 Android 的教授,他在大学里教授操作系统的课程。但因为不能向学生提供 Unix 的代码,他的课程也几乎无法继续。“自己动手,丰衣足食”,于是这位教授自己写了一个叫做 Minix 的操作系统。用于教学工作。
> Minix 是什么意思呢?就是 Mini Unix 啦!很小的 Unix。
后来 Minix 也很受欢迎,但是 Android 教授认为这个系统置用于教学用途,迟迟没有增加新功能,并且不允许商业用途。所以一个叫做 Torvalds Linus 的芬兰人也是自己写了一个“小小的”内核Linux Kernel遵循 POSIX 规范(为了尽可能兼容 Unix并与 GNU 计划的开源软件结合,最终发展成了 GNU/Linux并且 Linux 内核使用了 GPLv2 许可证。
> 因为篇幅限制,所以本文省略了很多东西,如果想要看看更完整的资料可以查阅[Linux 考古笔记](https://tinylab-1.gitbook.io/lad-book/zh-cn/background/history)
现在的 Linux 发行版(就是 linux 内核与软件包的结合,下一篇文章会详细讲述)包含着很多其它 GNU 中的软件。你如今可以在 [kernel.org](kernel.org) 下载 Linux 内核,也可以在 GNU 官网找到其它 GNU 软件并安装在 Linux
---
> study-area-cn

View File

@ -1,66 +0,0 @@
# 漫谈 Linux 学习之路
哈哈,终于到了学习 Linux 的时候了,各位同学是不是很激动呢?
但是在正式实操之前,我们先来补一些理论知识,也给大家鼓鼓劲。
## 怎么学 Linux
说白了Linux 也就是一个在普通不过的[操作系统](../learn_computer_basic/operating_system.md).
要想学好 Linux就不能害怕 Linux。
实际上现在的 Linux 已经很人性化了,更何况现在的 KDE 和 GNOME 等桌面环境都已经很完善了。界面也非常好看。比如这张图片就是笔者在撰写这篇文章时的截图。
![2.1.1](./assets/2.1.1.png)
是不是也很漂亮?没错,现在 Linux 已经很漂亮,日常使用一点问题都没有。您要做的,只是打消自己的疑虑,好好的迎接 Linux让它融入你的生活。
## 命令太多我记不住,怎么办?
实际上我们没有人会特意记命令。有个人开玩笑就说
> 直接用 Linux 就好了啊没有人用 Windows 是先看"Windows 使用理论与实践"的。
虽然这只是一句玩笑,但是也挺有道理的。
每天用 Linux,所以总结成一句话就是:多看,多练。
## Windows 这么好用,为什么要 Linux
四点:稳定性,可修改性,完全控制性和系统占用
### 1.稳定性
如果你试着把 Windows 连续开着几天做高强度的运算任务不关机的话,你很有可能会发现系统出了很多奇奇怪怪的问题:比如开始菜单无法正常加载啊,窗口移动时会撕裂啊。
而 Linux 就没有这些问题,无论多长时间都几乎不用关机维护。长时间的运算任务也不会影响到系统的使用。
### 2.可修改性
Linux 内核本身,和在 Linux 上使用的大部分软件都是开源软件。开源的好处就是源代码开放,你可以自由修改。比如自己适配一个新硬件啊,修改系统的调度策略啊,精简一下内核啊。这些在 Windows 这种闭源操作系统上都是做不到的。
### 3.完全控制性
在 Linux 里root 是完全自由的,是可以控制整个系统的,它是系统里面的最高权限。
不像 WindowsWindows 即便你是 admin系统也会控制你的行为比如删除系统文件这种操作就是完全做不到的。
有的同学可能会问:那不是代表 Linux 不安全吗?
其实这个看法也对,也不对:因为把系统完整的权限交给用户,确实可能会造成一些不安全的行为。但是 Windows 是把系统的完全控制权交给微软,你不知道这个系统里面有没有什么后门。所以相比把权限交给其他人,还是把权限牢牢的攥在自己手里更安心。
而且由于 SELinux 和用户组这些东西Linux 一般用户的权限都是受到限制的,正常使用没有什么不安全的问题。
> SELinux 这东西极大的提高了 Linux 的安全,我们后文也会讲到。
### 4.系统占用
系统占用这个没什么好解释的,给你几个数据你就明白了:
这是我的电脑在两个系统下的占用刚刚开机Windows 自带 GUILinuxKDE
| 系统 | CPU | 内存 |
| ------- | ----- | ------ |
| Linux | 0.8% | 2G/16G |
| Windows | 12.1% | 6G/16G |
看出来了吧Linux 对于系统占用是很小的。同样的钱购买硬件Linux 可以让更多的性能分配给你的应用。
这些东西,应该也解释清楚你的问题了吧?
那么接下来我们就开始正式的学习吧!
---
> study-area-cn

View File

@ -1,203 +0,0 @@
# Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2024 The Study Area CN Team
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at:
[www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0)
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Some files were not shown because too many files have changed in this diff Show More