diff --git "a/source/_posts/myblog/\346\212\200\346\234\257\345\210\206\344\272\253/12.17 Linux\344\275\277\347\224\250\345\210\206\344\272\253.md" "b/source/_posts/myblog/\346\212\200\346\234\257\345\210\206\344\272\253/12.17 Linux\344\275\277\347\224\250\345\210\206\344\272\253.md" new file mode 100644 index 000000000..60242297e --- /dev/null +++ "b/source/_posts/myblog/\346\212\200\346\234\257\345\210\206\344\272\253/12.17 Linux\344\275\277\347\224\250\345\210\206\344\272\253.md" @@ -0,0 +1,334 @@ +--- +aliases: +tags: +categories: +sticky: +thumbnail: +cover: +excerpt: false +mathjax: true +comment: true +title: 12.17 Linux使用分享 +date: Sunday,December 17th 2023 +modified: Sunday,December 17th 2023 +--- + +# 1. Linux概述 + +## 1.1. 发展历史 + +**Linux**是一种[自由和开放源码](https://zh.wikipedia.org/wiki/%E8%87%AA%E7%94%B1%E5%8F%8A%E5%BC%80%E6%94%BE%E6%BA%90%E4%BB%A3%E7%A0%81%E8%BD%AF%E4%BB%B6)的[类UNIX](https://zh.wikipedia.org/wiki/%E7%B1%BBUnix%E7%B3%BB%E7%BB%9F)[操作系统](https://zh.wikipedia.org/wiki/%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1)。该操作系统的[内核](https://zh.wikipedia.org/wiki/%E5%86%85%E6%A0%B8)由Linus_Torvalds在1991年10月5日首次发布,再加上[用户空间](https://zh.wikipedia.org/wiki/%E4%BD%BF%E7%94%A8%E8%80%85%E7%A9%BA%E9%96%93)的[应用程序](https://zh.wikipedia.org/wiki/%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F)之后,就成为了Linux操作系统。除了 Windows,基本上世界上大多数操作系统都被叫做 Unix-like。 + +只要遵循[GNU 通用公共许可证](https://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81)(GPL),任何个人和机构都可以自由地使用Linux的所有底层[源代码](https://zh.wikipedia.org/wiki/%E6%BA%90%E4%BB%A3%E7%A0%81),也可以自由地修改和再发布。 + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZTNkMzIyODMyYzlhZDk3MGU0OWU0MzQwYzU3ZGQ0ZDhfMlNPT1JIRElacXFjT2FrV0ljS24zSWowR3lXQjFZMjBfVG9rZW46SDkwS2JRZnB5b0RrUG54cGlKdGNlQVFRblBnXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA)![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZmZiMjdiMjYyYmNjNzA0OWI3NWNhNjc0ZThkNWE2ODZfM014QkZ6NHRKeG5oa01LNDZMbkVJU2wwYTdyODkyd2FfVG9rZW46QWV6YmJuRW9ObzYzSld4TWtSamNxNUtZbnRlXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +## 1.2. 不同发行版 + +**Linux 发行版**,为一般用户预先集成好的[Linux](https://zh.wikipedia.org/wiki/Linux)[操作系统](https://zh.wikipedia.org/wiki/%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1)及各种应用软件。一般用户不需要重新[编译](https://zh.wikipedia.org/wiki/%E7%BC%96%E8%AF%91),在直接安装之后,只需要小幅度更改设置就可以使用,通常以[软件包管理系统](https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F)来进行应用软件的管理。还有很多发行版是基于其他发行版再次修改的。 + +- 常见的发行版包括: + - Debian系 + - Red Hat系 + - Arch系:简洁、自定义和滚动更新 + - ~~WSL~~ + +你可以在这个网站查看各个发行版的排名:https://distrowatch.com/ ( 标准为**HPD:Hits Per Day)** + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZTE4Y2U1ZTRmOTk0MjQwMGQ0OTc1MDM2ZTZlNTU4ZGZfaFF4R2pxUlpmcU9EYUxQN2N6ZTRjaklVeTFPa3BVVFFfVG9rZW46RVNyTmJNaVljb0VpTkN4aXdPMWN0d2dVbk1mXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA)![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZTBhNGE4YmJmN2NkZGNhODQwOGJkZGI1YzVkMGZkZTZfQWtOZU5qdlBQVmN0ek1sM0NSWUVrR0JHc25aYUJCMEFfVG9rZW46RWs4aWJVUnh3b3ZzY0d4SmJxQWNuekp3bmJqXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +## 1.3. 为什么要用linux + +自己平时Ubuntu用的多,下面就按Ubuntu为准( + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZGU4M2JlOGUzNjAyMTg2NDIwZDlmMzc0Y2Q3NTI1YzJfSDV4Qk9mN083NmZsbmFMSGV3cGc2dnRhUnNzMHAyeTBfVG9rZW46STZNMWJ2U0hpb0VWM0N4RHFRZWNMeDA2blVlXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +### 1.3.1. 增加就业竞争力 + +优秀程序员必备技能。 + +### 1.3.2. 提高coding的效率 + +1. 更适合程序员体质的工具链 +2. 更简单的环境配置(显卡驱动除外) + +#### 1.3.2.1. 例子:配置gcc + +在windows下配置gcc:下载MinGW,在藏得很深的系统菜单里找到环境变量,写一堆复杂的环境变量。 + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=NWM1NzhlZGIyMTljNDE1OTBjMDNlY2RhZDk2OGQ1N2Jfd1Y5WlVFbFM2NHpyTjV2UFh4YlMzSzY0aUp2TGtQRUhfVG9rZW46QjF3T2JGSDhobzQ2c0F4d3dqUmNGejhubmpoXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +在ubuntu下配置gcc:`sudo apt install build-essential`。 +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=Yjc5N2RmNzZiY2IzZTNjNmU5NjkwYWM0ZDI0NWI4NGVfQTRERzV3VXFUdWVjblJ3TDFxaEdocHVMVlNnc2FKMEJfVG9rZW46WTRwb2IwRzN3bzFCQU54TUR5emNtckRXbk9nXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +### 1.3.3. 生态丰富 + +- 数据库 MySQL、PostgreSQL +- 消息队列 RabbitMQ、Kafka +- 大数据 Hadoop、Spark +- 虚拟化 KVM、Openvswitch +- 容器 Kubernetes、Docker + +这些软件都会默认提供 Linux 下的安装、使用、运维手册,都会默认先适配 Linux。 + +## 1.4. Linux上除了写代码可以干什么 + +1. 专业领域相关:写代码, gnu-toolchain, docker... +2. 游戏:Steamdeck、Proton + - 如何在Steam上运行艾尔登法环? + - 左上角帧数显示工具:[GitHub - benjamimgois/goverlay: GOverlay is an opensource project that aims to create a Graphical UI to help manage Linux overlays.](https://github.com/benjamimgois/goverlay) + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=MmRjMDU1ODk4YjMyMTk1MzUwYjFhNTAzNjQyOWVlZjFfbXhUTDlyaFlsVlZMV2JWeXZlRUZyVXBLM2p0SExNT09fVG9rZW46R3kyOGJOU3Bwb09oRG94Q21QaGM5WTNIbnNiXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA)![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=Mjk3MTM5Y2FhYWI5ODMyNzkyMTJhZDhmMDFhYzJjODhfV3NFN3R5MWNxUExaZGJqeUw4NnJzeENCRmx4a3NsUXZfVG9rZW46SlRaZmJLTERDb0VKTG54SXhZRGNQUlYwbjNlXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +# 2. 安装Linux + +为什么推荐使用实机而非虚拟机? + +1. 稳定性会比虚拟机相对高一些 +2. 性能会比虚拟机相对高一些 + +## 2.1. 一些教程 + +1. [Install Ubuntu desktop | Ubuntu](https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview) +2. [Ubuntu安装步骤(图文)_安装ubuntu-CSDN博客](https://blog.csdn.net/weixin_70137390/article/details/124724957) +3. [如何在戴尔计算机上安装 Ubuntu Linux | Dell 中国](https://www.dell.com/support/kbdoc/zh-cn/000131655/%E5%A6%82%E4%BD%95-%E5%9C%A8-%E6%88%B4%E5%B0%94-pc-%E4%B8%8A-%E5%AE%89%E8%A3%85-ubuntu-linux) + +## 2.2. 注意事项 + +1. 记得备份数据 + - 就算你安装系统的操作看上去是正确的, 也有可能因为硬件兼容问题导致操作系统无法启动等后果 +2. 关闭Bitlocker +3. 可能还需要关闭Secure Boot + - 微软要求原始设备制造商(OEM) 强制启用,可能导致你无法安装其他OS + - 不能打瓦罗兰特 + +# 3. 中文输入法:fcitx + google pinyin + +1. `sudo apt install fcitx fcitx-pinyin fcitx-googlepinyin` +2. 在设置里把输入法改成fcitx + +[开心的使用fcitx5进行输入](https://zhuanlan.zhihu.com/p/341637818) +[mrzhubin.wordpress.com](https://mrzhubin.wordpress.com/2019/09/20/install-google-pinyin-input-method-on-debian/) + +# 4. **Google + ChatGPT** + +只要你能把问题描述清楚,多半能找到解决方法。 + +# 5. 命令行环境 + +## 5.1. tldr:man的省流版 + +**TL;DR(Too Long; Didn't Read)** 是一个开源项目,旨在**提供简化和精简的命令行工具文档**。它是一个命令行工具,供开发人员和系统管理员快速查找和了解各种命令的用法和示例。 +TL;DR的设计初衷是**解决传统的命令行手册文档过于冗长和复杂的问题**,所以它会用简明扼要的方式来解释和演示常用命令的基本功能和用法。每个命令都有一个简短的描述,然后是一些常用的示例,展示了如何在实际场景中使用该命令。 + +[tldr pages](https://tldr.sh/) + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZjQ0OTk2NjQzOTk3ODhhZjJhYjA3NDk4MmJhMjNlZjhfY0xKNXgwZnRjT2dlSmk3cWtPTzlPN25hbDZPMUU5MExfVG9rZW46UWltMGJVTEFyb3VkNDZ4cFVja2NXR3JubnZmXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +## 5.2. 文件重定向和管道 + +https://www.redhat.com/sysadmin/linux-shell-redirection-pipelining + +- 文件描述符: + - Stdin + - Stdout + - Stderr + +你可以利用重定向和管道来操作和更改这三种基本文件描述符的默认行为。例如,你可以将键盘输入改为文件输入。你可以将信息重定向到文件,而不是在终端上获取信息,甚至丢弃错误信息,而不是在显示器上看到它们。你还可以同时将输出重定向到终端和文件。你甚至可以将一条命令的输出作为另一条命令的输入来处理。 + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ODhjOTJmYjlkMTRlNGVmN2NiNzNjNzdhNDA2ZjMzOTVfdVliM01ZTDB0Q2x4R2NYTTh6QmpPU1RGRkxlU0JGclFfVG9rZW46RmVkT2JQQ1JOb0daQ2x4elpvZWNibUk1bjViXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +特殊用法 cat << EOF + +### 5.2.1. 重定向 + +例子: + +将指定命令的标准输出重定向到文件: + +```Bash +echo "Enable Sysadmin" > myfile +``` + +将给定命令的错误输出重定向到文件: + +```Bash +ls /root 2> myfile +``` + +将给定命令的错误输出重定向到标准输出,即终端: + +```Bash +ls /root 2>&1 +``` + +将指定命令的标准输出和错误输出重定向到文件: + +```Bash +find /usr -name ls > myfile 2>&1 +find /usr -name ls &> myfile +``` + +将给定命令的错误输出重定向到标准输出、终端,并将同一命令的标准输出重定向到文件: + +```Bash +find /usr -name ls 2>&1 > myfile +``` + +将给定命令的标准输出追加到现有文件中(如果文件不存在,它会创建该文件,就像 > 操作符所做的那样): + +```Bash +echo "Enable Sysadmin" >> myfile +``` + +将给定命令的错误输出附加到现有文件中: + +```Bash +ls /root 2>> myfile +``` + +为命令输入非标准输入,这里是指文件: + +```Bash +sort < myfile +``` + +为命令提供非标准动态输入,在本例中,输入是需要标记分隔符的字符串列表,同时将结果重定向到文件: + +```Bash +cat << EOF +``` + +### 5.2.2. 管道 + +**管道**:多个程序可以一起运行,一个程序可以直接将另外一个程序的输出作为其输入,并且不需要借助中间文件. + +在 Linux 中,管道是一种允许两个或多个进程合并或并发执行的机制。这意味着进程的输出将作为下一个进程的输入来处理,以此类推。管道并不是白叫的:它指的是进程流通过管道从源头流向目的地的概念。 + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=MmYxZDE5ZDVlZTkxNDFjZmY0YmU5MGM5MzcyNTNlYzdfaDNPTERZUkxDV2tPc3ppWHI1OEl6UnpiTHhycnpkZDdfVG9rZW46TmhmTGJ3UXUyb2IxbVN4QlRxYmNyOEh5bnZlXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +例子: + +将 cat 命令的输出结果输入 grep 输入命令: + +```Bash +cat /etc/passwd | grep localuser +``` + +将 printf 命令的标准输出重定向到文件中,然后将排序命令和新创建的相同内容输入到文件中 + +```Bash +printf "Sysadmin\nEnable\n" > myfile | sort myfile +``` + +使用 free 命令检查可用内存,使用 grep 命令过滤结果中的交换信息,然后使用 awk 命令从输出中只剪切出 "总计 "列,以便展示: + +```Bash +free -h | grep Swap | awk '{print $2}' +``` + +## 5.3. Shell + 框架 + +- Bash + + - Bourne Again SHell + + - 大多数Linux发行版的默认shell + +- Zsh + + - `bash` 的超集并提供了一些方便的功能 + + - `Oh my zsh`:zsh的插件 + +- Fish + + - 不完全遵守posix + + - 但是提供了更强大的命令补全和提示 + +为什么windows的shell不好用?因为它不完全遵守POSIX协议。 + +**POSIX(Portable Operating System Interface)**是一个定义了操作系统接口标准的协议。它是由IEEE(Institute of Electrical and Electronics Engineers)组织制定的,旨在提供可移植性和互操作性,使得在不同的UNIX-like操作系统上编写的应用程序能够在其他兼容POSIX的系统上运行。Linux、macOS和FreeBSD等UNIX-like都遵守该协议。 + +1. **Shell**:POSIX标准中定义了一种命令行解释器的接口,称为Shell。Shell是一个用于解释和执行命令的程序,用户可以在Shell中输入命令来与操作系统进行交互。POSIX要求操作系统提供符合Shell接口规范的默认Shell,例如Bourne Shell(/bin/sh)或C Shell(/bin/csh)。 + +2. **命令行工具**:POSIX标准中定义了一些常用的命令行工具,如文件操作工具(例如cp、mv、rm)、文本处理工具(例如grep、sed、awk)、进程管理工具(例如ps、kill)等。这些工具提供了在命令行下执行各种操作的功能。 + +3. **环境变量**:POSIX标准中定义了一些与环境变量相关的接口和规范。环境变量是一种在操作系统中存储配置信息的机制,可以通过命令行访问和设置环境变量,以影响程序的行为和运行环境。 + +4. **I/O重定向**:POSIX标准中定义了I/O重定向的机制,允许将命令的输入和输出重定向到文件或其他设备。例如,使用">"符号将命令的输出重定向到文件,或使用"<"符号将文件内容作为命令的输入。 + +5. **通配符**:POSIX标准中定义了通配符的规范,允许在命令行中使用通配符来匹配文件名。常见的通配符包括"*"(匹配任意字符序列)和"?"(匹配任意单个字符)等。 + +## 5.4. 任务控制 + +### 5.4.1. 结束进程 + +`CTRL-C` + +`Ctrl-\` + +### 5.4.2. 暂停进程 + +`CTRL-Z`/`nohup` + +`jobs`:列出当前终端会话中尚未完成的全部任务 + +`bg`: 恢复任务,在后台继续 + +`fg`: 恢复任务,在前台继续 + +`kill %job_id` + +### 5.4.3. 查看有哪些进程在运行 + +`ps aux` + +`glances` + +`htop` + +### 5.4.4. 例:在后台运行一个任务并把日志实时输出到文件? + +我为什么不直接运行这个任务? + +1. 连接服务器(一般是ssh连接)的时候,如果直接在终端里run,把终端关掉之后任务就会结束。如果任务的运行时间特别长,难道我要一直把终端开着吗? + 1. _可以连个虚拟机演示一下_ + 2. 例子:`python count.py > output.txt 2>&1 &` +2. 直接运行任务,直接在终端输出,无法记录记录日志内容。 + +## 5.5. 终端复用 + +1. **Tmux** +2. Screen +3. 直接开多个窗口 + +## 5.6. ~~History~~ + +Histoy: 列出最近使用的命令 + +![](https://yizviqvxjz.feishu.cn/space/api/box/stream/download/asynccode/?code=ZDM2ZWZiNzVjYTFmMmE1YmU0YTQ4MDdjYmYyZmNjMjNfbm1zdEdYaXFCeXdLbGNnY2RSUXYwQ0QyVUpyQkVLTDNfVG9rZW46UVBPbWJYVlFwbzhoVjF4ZHNnWWNnRWVDbnNmXzE3MDI4MjU0ODc6MTcwMjgyOTA4N19WNA) + +## 5.7. ~~配置文件(Dotfiles)~~ + +很多工具的配置文件都是`.xxx` + +```Bash +.bashrc +.zshrc +``` + +## 5.8. ~~远程连接~~ + +除了远程连接服务器,也可以远程连接虚拟机 + +`ssh` + +# 6. 推荐资源 + +https://missing-semester-cn.github.io/ + +https://developers.redhat.com/blog?source=sso + +https://www.redhat.com/sysadmin/linux-shell-redirection-pipelining \ No newline at end of file