diff --git "a/26 \351\231\210\347\202\263\351\221\253/202406011 Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/26 \351\231\210\347\202\263\351\221\253/202406011 Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 0000000000000000000000000000000000000000..4ef64770f719eee987fb099fd18764dc648e9f07 --- /dev/null +++ "b/26 \351\231\210\347\202\263\351\221\253/202406011 Linux\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,379 @@ +## 刚安装完Deiban系统 7步走: + +1. 设置国内软件源镜像 /etc/apt/sources.list +2. 更新软件包列表:apt update +3. 更新系统:apt upgrade -y +4. 安装vim:apt install vim -y locate 数据库 find 实时 +5. 编辑网卡配置,设置静态IP: + +```bash +vim /etc/network/interfaces + +# 按如下设置 +# The primary network interface +allow-hotplug ens192 +iface ens192 inet static +address 172.16.90.71 +netmask 255.255.255.0 +gateway 172.16.90.1 + +#重新启动网络服务 +sudo systemctl restart networking +``` + +5. 修改SSHD配置,允许root用户远程登录 + +```bash +vim /etc/ssh/sshd_config + +# 取消如下代码的注释,并且将其值设置为yes,以允许root用户的远程登录 +PermitRootLogin yes + +``` + +6. 配置环境变量,简单化ls的用法 + + +/etc/profile.d /etc/nginx/conf.d/ + +```bash + export LS_OPTIONS='--color=auto' + alias ls='ls $LS_OPTIONS' + alias ll='ls $LS_OPTIONS -l' + alias l='ls $LS_OPTIONS -lA' + +``` +7. 配置环境变量,设置当前系统字符集,以接受中文 + +/etc/profile.d/lang.sh +```bash +export LC_ALL=C.utf8 +``` + +要确保设置生效,可以重新加载该文件并检查环境变量 + +```sh +source /etc/profile.d/lang.sh +echo $LC_ALL +``` + + + +几个常用命令 + +### 1. `time` + +用于测量命令的执行时间。 + +**示例**: + +```bash +time ls +``` + +输出: + +```plaintext +real 0m0.003s +user 0m0.001s +sys 0m0.002s +``` + +### 2. `date` + +- **%Y**:四位数的年份。 +- **%m**:两位数的月份。 +- **%d**:两位数的日期。 + +**示例**: + +```bash +date "+%Y-%m-%d %H:%M:%S" +``` + +输出: + +```plaintext +2024-06-10 15:30:00 +``` + +### 3. `timedatectl` + +**示例**: + +```bash +timedatectl status +``` + +输出: + +```plaintext +Local time: Mon 2024-06-10 15:30:00 UTC +Universal time: Mon 2024-06-10 15:30:00 UTC +RTC time: Mon 2024-06-10 15:30:00 +Time zone: Etc/UTC (UTC, +0000) +System clock synchronized: yes +NTP service: active +``` + +### 4. `reboot` + +重新启动系统。 + +**核心术语**: +- **systemd**:系统和服务管理器。 + +**示例**: + +```bash +sudo reboot +``` + +### 5. `poweroff` + +关闭系统电源。 + +**halt**:停止系统所有的 CPU 功能。 + +### 6. `wget` + +从网络上下载文件 + +**示例**: + +```bash +wget https://example.com/file.txt +``` + +### 7. `curl` + +从网络上获取或发送数据。 + +**示例**: + +```bash +curl -O https://example.com/file.txt +``` + +### 8. `ps` + +查看当前运行的进程。 + +**示例**: + +```bash +ps aux # 显示所有用户的所有进程 一般会结合。grep,awk等过滤数据 +``` + +### 9. `kill` + +向进程发送信号(通常用于终止进程)。 + +**示例**: + +```bash +kill 1234 # 用pidof 进程名。来查看具体的进程的进程号 +``` + +### 10. `killall` + +向指定名称的所有进程发送信号。 + +`先安装psmisc` + +安装psmisc 后,就会有pstree和killall + +**示例**: + +```bash +killall firefox +``` + +### 11. `ip` + +显示和操作网络接口和路由。 + +- **address**:IP 地址。 +- **route**:路由信息。 + +**示例**: + +```bash +ip addr show +``` + +### 12. `ss` + +**使用场景**:显示套接字统计信息。旧版是netstat + +- **TCP**:传输控制协议。 +- **UDP**:用户数据报协议。 + +**示例**: + +```bash +ss -tuln # 可以查看哪些端口开放着 +``` + +### 13. `uname` + +显示系统信息。 + +- **kernel**:操作系统内核。 +- **OS**:操作系统。 + +**示例**: + +```bash +uname -a +``` + +### 14. `uptime` + +显示系统运行时间和负载。 + +- **load average**:系统平均负载。 + +**示例**: + +```bash +uptime +``` + +### 15. `who` + +显示当前登录用户信息。 + +- **login**:用户登录信息。 +- **TTY**:终端类型。 + +**示例**: + +```bash +who +``` + +### 16. `last` + +显示系统上最近的登录信息。 + +- **wtmp**:记录登录和注销事件的文件。 + +**示例**: + +```bash +last +``` + +### 17. `ping` + +测试网络连通性。 + +- **ICMP**:互联网控制消息协议。 +- **echo request**:回显请求。 + +**示例**: + +```bash +ping example.com +``` + +### 18. `traceroute` + +**使用场景**:显示到达网络主机的路径。 + +**核心术语**: +- **hop**:从一个网络节点到另一个的跳转。 +- **TTL**:生存时间。 + +**示例**: + +```bash +traceroute example.com +``` + +### 19. `history` + +显示命令历史记录。 + +- **bash history**:记录用户输入的命令历史。 + +**示例**: + +```bash +history +``` + +1. **`free`**:该命令用于显示系统内存的使用情况 +- `total`: 总内存量 + - `used`: 已使用的内存量 + - `free`: 空闲的内存量 + - `shared`: 用于共享的内存量 + - `buff/cache`: 用于缓存的内存量 + - `available`: 可用的内存量 + +2. **`df -h`**:该命令用于显示文件系统的磁盘空间利用情况。 +- `Filesystem`: 文件系统设备 + - `Size`: 文件系统总容量 + - `Used`: 已使用的空间 + - `Avail`: 可用空间 + - `Use%`: 使用百分比 + - `Mounted on`: 挂载点 + + + +`du` 命令用于估算文件或目录的磁盘使用情况。 + +1. **查看当前目录的磁盘使用情况**: + + ``` + 复制代码 + du -h + ``` + +2. **查看特定目录的磁盘使用情况**: + + ``` + du -h /目录名 + ``` + +3. **显示文件或目录的总磁盘使用量**: + + ``` + du -sh /path/to/file_or_directory + ``` + + 这将显示指定文件或目录的总磁盘使用量, `-s` 参数表示仅显示总和, `-h` 表示以人类可读的格式显示。 + +4. **显示目录中每个文件的磁盘使用量**: + + ``` + 复制代码 + du -ah /path/to/directory + ``` + + 这将显示指定目录中每个文件的磁盘使用量, `-a` 参数表示包括所有文件。 + +5. **按照磁盘使用量排序显示目录**: + + ``` + du -h | sort -h + ``` + + 这将按照磁盘使用量从小到大排序显示当前目录及其所有子目录的磁盘使用情况。 + +6. **限制显示的深度**: + + ``` + du -h --max-depth=1 /path/to/directory + ``` + + 这将仅显示指定目录的直接子目录的磁盘使用情况, `--max-depth` 参数用于指定显示的深度。 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>>`:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 diff --git "a/26 \351\231\210\347\202\263\351\221\253/202406013 \347\256\241\351\201\223\347\254\246\345\222\214\351\207\215\345\256\232\345\220\221.md" "b/26 \351\231\210\347\202\263\351\221\253/202406013 \347\256\241\351\201\223\347\254\246\345\222\214\351\207\215\345\256\232\345\220\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..a4d074028eb1a33e24b41364bf4ad29c4b991bcf --- /dev/null +++ "b/26 \351\231\210\347\202\263\351\221\253/202406013 \347\256\241\351\201\223\347\254\246\345\222\214\351\207\215\345\256\232\345\220\221.md" @@ -0,0 +1,217 @@ +# 笔记 + +进程(Process)是计算机中**正在运行的一个程序**的实例。一个进程包括了**程序代码**和其当前**活动状态**。它可以看作是操作系统分配资源和调度工作的基本单位。 + +在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: + +- `0`:标准输入(stdin): 键盘输入 +- `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +- `2`:标准错误(stderr): 只包含错误信息 + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` &>等。 + +#### 输出重定向 + +1. **标准输出覆盖重定向 `>`**只会将标准输出放在文件当中 +2. **追加输出重定向 `>>`**将标准输出追加到文件当中 + + +#### 输入重定向 + +1. **输入重定向 `<`** + +#### 错误重定向 + +1. **错误输出重定向 `2>`** + +2. **错误输出追加重定向 `2>>`** + +3. **同时重定向标准输出和标准错误输出** + + 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + + +### 管道 `|` + +管道符号 `|` 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。 + +### 总结 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>>:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + - `&>>`:将标准输出和错误输出同时追加重定向到文件。 +- **管道 `|`**: + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + +- **将错误输出丢弃:** + + - 若要忽略错误输出,可以将错误输出重定向到特殊设备 `/dev/null + ` + + - 例如: + + ```bash + command 2> /dev/null + ``` + + 这会将错误输出发送到 `/dev/null + `,从而丢弃错误输出而只保留标准输出 + +## tee命令 + +`tee` 是一个在Unix和类Unix操作系统上非常有用的命令行实用程序。它的作用是从标准输入中读取数据,并同时将数据输出到标准输出和一个或多个文件中。 + +下面是 `tee` 命令的基本语法: + +```bash +tee [OPTION]... [FILE]... +``` + +- `[OPTION]`: 一些选项,可以控制 `tee` 命令的行为。 +- `[FILE]`: 一个或多个文件名,表示要将数据写入的目标文件。 + +### 示例 1:简单的使用方式 + +```bash +echo "Hello, world" | tee output.txt +``` + +在这个示例中,`echo "Hello, world"` 命令的输出被送到 `tee` 命令,然后 `tee` 将这个输出写入到 `output.txt` 文件,并同时将其输出到标准输出。 + +### 示例 2:同时写入多个文件 + +```bash +echo "Hello, world" | tee file1.txt file2.txt +``` + +在这个示例中,`tee` 命令将 `Hello, world` 写入到 `file1.txt` 和 `file2.txt` 文件中,并同时将其输出到标准输出。 + +### 示例 3:追加写入文件 + +```bash +echo "New data" | tee -a file1.txt +``` + +通过 `-a` 选项,`tee` 命令将数据追加写入到 `file1.txt` 文件中,而不是覆盖原有内容。 + +### 示例 4:结合重定向和管道 + +```bash +command1 | tee >(command2) | command3 +``` + +在这个示例中,`command1` 的输出被送到 `tee` 命令,然后 `tee` 将输出传递给 `command2`,并且同时将输出发送到 `command3`。这种结构可以用于复杂的管道命令中。 + +### 选项 + +- `-a`:追加写入文件而不是覆盖。 +- `-i`:忽略中断信号。 +- `--help`:显示帮助信息和选项列表。 +- `--version`:显示版本信息。 + +# 作业 + +## << 是什么功能? + +简述:在Linux和其他类Unix操作系统中,`<<` 是一种被称为“Here Document”(此处文档)的重定向符号。它**用于将多行输入直接传递给命令**,通常用于脚本编写中。基本格式如下: + +```sh +command << EOF +multi-line content +EOF +``` + +这里是一个简单的例子来说明如何使用 `<<`: + +```sh +Copy Codecat << EOF +This is a line of text. +This is another line of text. +EOF +``` + +在这个例子中,`cat` 命令会读取从 `<< EOF` 到 `EOF` 之间的所有文本,并将这些文本输出到标准输出(通常是终端)。 + +### 详细解释 + +1. **起始标记**:`<<` 后面的词(在上面的例子中是 `EOF`)是一个标记,这个标记可以是任何你喜欢的字符串。常用的是 `EOF` 但也可以用其他不冲突的标记。 +2. **结束标记**:所有在起始标记之后出现的文本将被认为是多行输入,直到遇到结束标记(在上面的例子中也是 `EOF`)。结束标记必须单独占据一行,并且前后没有空格或其他字符。 +3. **应用场景**: + - **编写脚本**:可以在脚本中嵌入多行文本,如内联配置文件、SQL查询、多行消息等。 + - **自动化任务**:在自动化任务中传递多行输入给某些命令而无需外部文件。 + +### 注意事项 + +- **结束标记**必须在行的开头,没有前导空格或其他字符,否则会被视为多行文本的一部分。 +- **标记名**可以是除了常见的 `EOF` 之外的任意字符串,只要起始和结束标记一致即可。 + +通过使用 `<<` 符号,可以方便地在脚本中处理多行文本,而不需要依赖外部文件,提高了脚本的可读性和维护性。 + + + +## ()把命令包括起来,是干什么功能? + +在 Linux 中,将命令包含在括号 `()` 中,表示在一个子 shell 中执行这些命令。子 shell 是一个单独的进程,它从当前 shell 派生出来,但与当前 shell 环境隔离。这种机制提供了一些有用的特性和功能。 + +### 主要功能和用途 + +1. **创建子 shell**: + - 在子 shell 中执行命令,不会影响父 shell 的环境。子 shell 有自己的变量、工作目录等环境设置。 +2. **命令分组**: + - 将一组命令放在一起,在同一个子 shell 中执行,可以将它们视为一个整体。例如,可以重定向整组命令的输出。 +3. **临时环境变量**: + - 可以在子 shell 中设置临时环境变量,而不会影响到父 shell。 + +### 示例 + +1. **子 shell 环境**: + + ```sh + Copy Code(cd /tmp; ls) + # 在 /tmp 目录下列出文件,但不会改变父 shell 的当前工作目录 + ``` + + 在这个例子中,`cd /tmp` 和 `ls` 命令在子 shell 中执行。当这组命令执行完毕后,父 shell 的当前工作目录不会改变。 + +2. **命令分组和输出重定向**: + + ```sh + Copy Code( + echo "This is line 1" + echo "This is line 2" + ) > output.txt + # 将两行文本的输出重定向到 output.txt 文件 + ``` + + 这里,两个 `echo` 命令在子 shell 中作为一个整体执行,其输出被重定向到 `output.txt` 文件。 + +3. **临时环境变量**: + + ```sh + Copy Code(export VAR="temp value"; echo $VAR) + # 只在子 shell 中有效的环境变量 + echo $VAR + # 在父 shell 中,VAR 不存在或没有被修改 + ``` + + 在子 shell 中,`VAR` 被设置为 `"temp value"` 并且可以被访问。但在子 shell 之外,父 shell 中的 `VAR` 不会受到影响。 + +4. **组合命令**: + + ```sh + Copy Code(command1; command2; command3) + # 依次执行 command1, command2 和 command3,所有命令在同一个子 shell 中 + ``` + + 这种方式可以确保一组相关命令在同一个环境中执行,例如为了共享某些设置或变量。 + +### 总结 + +括号 `()` 在 Linux shell 中用于在子 shell 中执行命令,有助于隔离环境、分组命令及管理临时变量等。这种功能在编写脚本和处理复杂任务时非常有用,可以帮助开发者更好地控制命令的执行环境和输出。 \ No newline at end of file