Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
cxykevin | d3f1681c66 |
|
@ -14,7 +14,6 @@ additional-css = [
|
||||||
"theme/css/font.css",
|
"theme/css/font.css",
|
||||||
"theme/font/icons.woff2",
|
"theme/font/icons.woff2",
|
||||||
"theme/font/noto.otf",
|
"theme/font/noto.otf",
|
||||||
"theme/font/sourcecodepro.woff2",
|
|
||||||
]
|
]
|
||||||
additional-js = [
|
additional-js = [
|
||||||
"theme/js/mdui.global.js",
|
"theme/js/mdui.global.js",
|
||||||
|
|
|
@ -41,10 +41,9 @@
|
||||||
- [在 VirtualBox 上创建虚拟磁盘](./learn_linux_basic/file_and_path/diskpart_and_filesystem/create_disk_on_vbox.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)
|
- [tar打包软件](./learn_linux_basic/file_and_path/tar_command.md)
|
||||||
- [gzip与xz](./learn_linux_basic/file_and_path/gzip_and_xz.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与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)
|
- [学习Shell](./learn_linux_basic/shell_and_shell_script/learn_shell.md)
|
||||||
- [Job]()
|
|
||||||
- [Vim编辑器](./learn_linux_basic/shell_and_shell_script/vim_editor.md)
|
- [Vim编辑器](./learn_linux_basic/shell_and_shell_script/vim_editor.md)
|
||||||
- [Shell Script基本语法]()
|
- [Shell Script基本语法]()
|
||||||
- [条件判断语句]()
|
- [条件判断语句]()
|
||||||
|
@ -57,6 +56,7 @@
|
||||||
- [程序、线程和进程]()
|
- [程序、线程和进程]()
|
||||||
- [什么是程序]()
|
- [什么是程序]()
|
||||||
- [线程和进程]()
|
- [线程和进程]()
|
||||||
|
- [Job]()
|
||||||
- [进程与线程的管理]()
|
- [进程与线程的管理]()
|
||||||
- [特殊的进程和文件]()
|
- [特殊的进程和文件]()
|
||||||
- [SELinux]()
|
- [SELinux]()
|
||||||
|
|
|
@ -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`命令是一个非常好的选择。
|
|
||||||
|
|
|
@ -455,10 +455,10 @@ losetup -d [设备文件]
|
||||||
|
|
||||||
## 课后作业
|
## 课后作业
|
||||||
|
|
||||||
由于这章长且十分重要,所以设置以下作业:
|
由于本节课非常长并且十分重要,所以设置了以下作业:
|
||||||
|
|
||||||
1. 在虚拟机中创建一个虚拟磁盘,大小大于等于系统磁盘
|
1. 在虚拟机中创建一个虚拟磁盘,大小大于等于系统磁盘
|
||||||
2. 给这个磁盘初始化分区表并且创建一个 xfs 分区,分区大小为整个磁盘的容量。
|
2. 给这个磁盘初始化分区表并且创建一个 xfs 分区,填满整个磁盘
|
||||||
3. 尝试把这个磁盘挂载到 `/mnt/test`
|
3. 尝试把这个磁盘挂载到 `/mnt/test`
|
||||||
4. 使用 dd 命令从 `/dev/zero` 读取,写入大小为 20MB 的空文件到 `/mnt/test/hello.img`
|
4. 使用 dd 命令从 `/dev/zero` 读取,写入大小为 20MB 的空文件到 `/mnt/test/hello.img`
|
||||||
5. 卸载这个磁盘
|
5. 卸载这个磁盘
|
||||||
|
|
|
@ -1,54 +1,54 @@
|
||||||
# 在 VMWare Workstation 上安装
|
# 在 VMWare Workstation 上安装
|
||||||
|
|
||||||
> 上级目录:[Rocky Linux 初见](./install_rocky_linux_intro.md)
|
> 上级目录:[Rocky Linux 初见](../rocky_first_met.md)
|
||||||
|
|
||||||
在进行安装前我们需要去下载一份 Rocky Linux 的镜像,在[Rocky Linux 初见](./install_rocky_linux_intro.md)中有说明,此处不再赘述。
|
在进行安装前我们需要去下载一份 Rocky Linux 的镜像,在[Rocky Linux 初见](./install_rocky_linux_intro.md)中有说明,此处不再赘述。
|
||||||
|
|
||||||
## 下载并安装 VMWare Workstation Pro
|
## 下载并安装 VMWare Workstation Pro
|
||||||
|
|
||||||
假设说你要安装 Linux 的话,你需要一个虚拟机软件,本部分将使用 VMWare Workstation Pro,一款十分优秀的跨平台虚拟机软件。
|
假设说你要安装 Linux 的话,你需要一个虚拟机软件,本部分将使用 VMWare Workstation Pro,一款十分优秀的跨平台虚拟机软件.
|
||||||
|
|
||||||
假如说你已经安装过了,你完全可以跳过这一段。
|
假如说你已经安装过了,你完全可以跳过这一段.
|
||||||
|
|
||||||
> 这里可能有朋友问,VMWare Workstation Pro不是付费的吗?你这样难道想让我们去用盗版?
|
> 这里可能有朋友问,VMWare Workstation Pro不是付费的吗?你这样难道想让我们去用盗版?
|
||||||
>
|
>
|
||||||
> 这点不用担心,因为在 VMware 被博通 Broadcom 收购了之后,博通就宣布 VMWare WorkStation Pro 的 17.5.2 版本对个人用户免费 ~~(什么资本家大发慈悲)~~,所以盗版的事情各位大可不必担心。
|
> 这点不用担心,因为在 VMware 被博通 Broadcom 收购了之后,博通就宣布 VMWare WorkStation Pro 的 17.5.2 版本对个人用户免费 ~~(什么资本家大发慈悲)~~,所以盗版的事情各位大可不必担心.
|
||||||
|
|
||||||
原本你应该去注册一个博通的账号并且去到 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`
|
原本你应该去注册一个博通的账号并且去到 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` 然后安装,记得关联格式。
|
在您下载下来之后是一个 tar 文件,如果说您的电脑没有可以解压这种格式的软件,那请您去下载一个名为 7-Zip 的软件`https://7-zip.org/a/7z2407.exe`然后安装,记得关联格式.
|
||||||
|
|
||||||
在解压出来之后,我们就可以运行安装程序,先 Next,同意完协议并 Next 后记得勾选一下 `安装键盘驱动`(如下图)
|
在解压出来之后,我们就可以运行安装程序,先 Next,同意完协议并 Next 后记得勾选一下`安装键盘驱动`(如下图)
|
||||||
|
|
||||||
![Keybord Driver](./assets/2.4.vmware.1.png)
|
![Keybord Driver](./assets/2.4.vmware.1.png)
|
||||||
|
|
||||||
然后就可以一路 Next 下去了,安装完成后会有一次重启,在重启完毕后,我们该启动 VMWare WorkStation Pro,进行下一步安装了。
|
然后就可以一路 Next 下去了,安装完成后会有一次重启,在重启完毕后,我们该启动 VMWare WorkStation Pro,进行下一步安装了.
|
||||||
|
|
||||||
> 假如说这里有朋友发现 VMWare WorkStation Pro 的页面是英文的,打开 VMWare WorkStation Pro 的`快捷方式`,在目标后面添加一个 ` --locale zh_CN`之后重启 VMWare WorkStation Pro 就好了。
|
> 假如说这里有朋友发现 VMWare WorkStation Pro 的页面是英文的,打开 VMWare WorkStation Pro 的`快捷方式`,在目标后面添加一个" --locale zh_CN"之后重启 VMWare WorkStation Pro 就好了.
|
||||||
|
|
||||||
## 新建虚拟机
|
## 新建虚拟机
|
||||||
|
|
||||||
软件我们有了,接下来我们要给虚拟机注入灵魂——操作系统了。
|
很好,现在您已经拥有了一个趁手的工具,那就该干点什么,也就是注入灵魂——操作系统了
|
||||||
|
|
||||||
不过在开始安装系统前,我们需要新建一个 `虚拟机`。
|
不过在开始安装系统前,我们需要新建一个`虚拟机`.
|
||||||
|
|
||||||
启动软件后,我们会看到像这样的页面:
|
启动软件后,我们会看到像这样的页面:
|
||||||
|
|
||||||
![Home Page](./assets/2.4.vmware.2.png)
|
![Home Page](./assets/2.4.vmware.2.png)
|
||||||
|
|
||||||
然后点击 `创建新的虚拟机`,你会看到这样的界面:
|
然后点击 `创建新的虚拟机` ,您会看到这样的界面:
|
||||||
|
|
||||||
![New VM Page](./assets/2.4.vmware.3.png)
|
![New VM Page](./assets/2.4.vmware.3.png)
|
||||||
|
|
||||||
保持典型不变,点击下一步,点击 `安装程序光盘映像文件(iso)(M)`,然后点击浏览,找到你镜像下载到的位置,选中镜像,然后打开:
|
保持典型不变,点击下一步,点击`安装程序光盘映像文件(iso)(M)`,然后点击浏览,找到你镜像下载到的位置,选中镜像,然后打开:
|
||||||
|
|
||||||
![Choose ISO Img](./assets/2.4.vmware.3.png)
|
![Choose ISO Img](./assets/2.4.vmware.3.png)
|
||||||
|
|
||||||
接着点击下一步,填写 `虚拟机的名字` 还有 `虚拟机的安装位置`(这一步记得选一个剩余空间比较大的分区)
|
接着点击下一步,填写`虚拟机的名字`还有`虚拟机的安装位置`(这一步记得选一个剩余空间比较大的分区)
|
||||||
|
|
||||||
![Set VM](./assets/2.4.vmware.5.png)
|
![Set VM](./assets/2.4.vmware.5.png)
|
||||||
|
|
||||||
现在开始设置 `虚拟磁盘`,这相当于你电脑的储存空间,这里直接引用隔壁 VBox 安装的话:
|
现在开始设置`虚拟磁盘`,这相当于您电脑的储存空间,这里直接引用隔壁 VBox 安装的话:
|
||||||
|
|
||||||
如果你的磁盘空间足够,那么你开多少都行,一般开 40GB 就够了。
|
如果你的磁盘空间足够,那么你开多少都行,一般开 40GB 就够了。
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
|
|
||||||
![Set Virtual Disk](./assets/2.4.vmware.6.png)
|
![Set Virtual Disk](./assets/2.4.vmware.6.png)
|
||||||
|
|
||||||
然后我们就来到了配置设置页面,现在点击`自定义硬件`,还是引用 Vbox 安装的话:
|
然后我们就来到了配置设置页面,现在点击`自定义硬件`,还是引用 Vbox 安装的话:
|
||||||
|
|
||||||
我们可以根据需要填写`内存大小`和`处理器`(处理器核心数)。如果你还不知道这两个是什么意思,请回看上一大章节。
|
我们可以根据需要填写`内存大小`和`处理器`(处理器核心数)。如果你还不知道这两个是什么意思,请回看上一大章节。
|
||||||
|
|
||||||
|
@ -72,36 +72,36 @@
|
||||||
这时你填写 `4096MB`(6GB) 即可。
|
这时你填写 `4096MB`(6GB) 即可。
|
||||||
一般来说,分配实体机内存的一半即可。
|
一般来说,分配实体机内存的一半即可。
|
||||||
|
|
||||||
CPU数通常只需要填你的CPU核心数的一半就可以了。现在的电脑至少 2 核起步。
|
CPU数通常只需要填你的CPU核心数的一半就可以了。现在的电脑至少2核起步。
|
||||||
如果你在使用 13 代或以上的 Intel 酷睿,那么你填写你的大核心(P核)的数量就行。
|
如果你在使用13代或以上的Intel酷睿,那么你填写你的大核心(P核)的数量就行。
|
||||||
(截至本篇编写时 Intel 最新的酷睿还是 13 代,2024.6)
|
(截至本篇编写时Intel最新的酷睿还是13代,2024.6)
|
||||||
```
|
```
|
||||||
|
|
||||||
对于写者来说,设置完之后的页面如下:
|
对于写者来说,设置完之后的页面如下:
|
||||||
|
|
||||||
![VM Settings](./assets/2.4.vmware.7.png)
|
![VM Settings](./assets/2.4.vmware.7.png)
|
||||||
|
|
||||||
最后关闭设置页面,点击`完成`,虚拟机就大功告成了!(如果你勾选了 `创建后启动此虚拟机` 那么则会自动启动)
|
最后关闭设置页面,点击`完成`,虚拟机就大功告成了!(如果你勾选了`创建后启动此虚拟机`那么则会自动启动)
|
||||||
|
|
||||||
## 启动虚拟机
|
## 启动虚拟机
|
||||||
|
|
||||||
假如说你在上一部勾选了 `创建后启动此虚拟机` 的话,你的虚拟机应该现在已经启动了,但是以防万一,这里还是讲解一下如何在 VMWare WorkStation Pro 里启动虚拟机:
|
假如说您在上一部勾选了`创建后启动此虚拟机`的话,您的虚拟机应该现在已经启动了,但是以防万一,这里还是讲解一下如何在 VMWare WorkStation Pro 里启动虚拟机:
|
||||||
|
|
||||||
第一步,选中`虚拟机`:
|
第一步,选中`虚拟机`:
|
||||||
|
|
||||||
![Select VM](./assets/2.4.vmware.8.png)
|
![Select VM](./assets/2.4.vmware.8.png)
|
||||||
|
|
||||||
第二步,点击`开启此虚拟机`:
|
第二步,点击`开启此虚拟机`:
|
||||||
|
|
||||||
![Start VM](./assets/2.4.vmware.9.png)
|
![Start VM](./assets/2.4.vmware.9.png)
|
||||||
|
|
||||||
等一会后,会出现一个类似这样的页面,这里直接选中第一项然后回车就可以了:
|
等一会后,会出现一个类似这样的页面,这里直接选中第一项然后回车就可以了:
|
||||||
|
|
||||||
![Boot](./assets/2.4.vmware.10.png)
|
![Boot](./assets/2.4.vmware.10.png)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
接下来请继续阅读[安装 Rocky Linux](./install_rocky_linux.md)进行安装。
|
接下来请继续阅读[安装 Rocky Linux](./install_rocky_linux.md)进行安装.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,179 +1 @@
|
||||||
# 学习 Shell。
|
# 学习 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)
|
|
||||||
|
|
Reference in New Issue