From 6c505958ebb238790cd0331420fb16ef9ce6ea4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=AB=E9=9B=AA=E8=8E=B2?= <11785154+yan-xuelian@user.noreply.gitee.com> Date: Fri, 14 Jun 2024 05:13:24 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E9=97=AB=E9=9B=AA=E8=8E=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 闫雪莲 <11785154+yan-xuelian@user.noreply.gitee.com> --- .../20240613 \344\275\234\344\270\232.md" | 630 ++++++++++++++++++ 1 file changed, 630 insertions(+) create mode 100644 "25 \351\227\253\351\233\252\350\216\262/20240613 \344\275\234\344\270\232.md" diff --git "a/25 \351\227\253\351\233\252\350\216\262/20240613 \344\275\234\344\270\232.md" "b/25 \351\227\253\351\233\252\350\216\262/20240613 \344\275\234\344\270\232.md" new file mode 100644 index 0000000..e9512c0 --- /dev/null +++ "b/25 \351\227\253\351\233\252\350\216\262/20240613 \344\275\234\344\270\232.md" @@ -0,0 +1,630 @@ +## 刚安装完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 +``` + + + +几个常用命令 + +以下是一些常见的 Linux 命令,包括它们的使用场景、核心术语讲解以及示例: + +### 1. `time` + +**使用场景**:用于测量命令的执行时间。 + +**核心术语**: +- **real**:总的时间(墙上时钟时间)。 +- **user**:用户态 CPU 时间。 +- **sys**:内核态 CPU 时间。 + +**示例**: + +```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` + +**使用场景**:查看和设置系统时间和日期,时区和 NTP(网络时间协议)设置。 + +**核心术语**: +- **NTP**:网络时间协议,用于同步时间。 +- **RTC**:实时时钟。 + +**示例**: + +```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 功能。 + +**示例**: + +```bash +sudo poweroff +``` + +### 6. `wget` + +**使用场景**:从网络上下载文件。 + +**核心术语**: + +- **URL**:统一资源定位符。 +- **HTTP/HTTPS**:超文本传输协议。 + +**示例**: + +```bash +wget https://example.com/file.txt +``` + +### 7. `curl` + +**使用场景**:从网络上获取或发送数据。 + +**核心术语**: + +- **URL**:统一资源定位符。 +- **GET/POST**:HTTP 请求方法。 + +**示例**: + +```bash +curl -O https://example.com/file.txt +``` + +### 8. `ps` + +**使用场景**:查看当前运行的进程。 + +**核心术语**: + +- **PID**:进程标识符。 +- **TTY**:终端类型。 + +**示例**: + +```bash +ps aux # 显示所有用户的所有进程 一般会结合。grep,awk等过滤数据 +``` + +### 9. `kill` + +**使用场景**:向进程发送信号(通常用于终止进程)。 + +**核心术语**: + +- **SIGTERM**:请求中止进程。 +- **SIGKILL**:强制终止进程。 + +**示例**: + +```bash +kill 1234 # 用pidof 进程名。来查看具体的进程的进程号 +``` + +### 10. `killall` + +**使用场景**:向指定名称的所有进程发送信号。 + +`先安装psmisc` + +1. 安装psmisc 后,就会有pstree和killall + +**核心术语**: + +- **signal**:信号,通知进程执行某种操作。 + +**示例**: + +```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 +``` + +`top` 命令用于显示系统的运行进程信息,包括 CPU 占用情况、内存占用情况、进程列表等。通过 `top` 命令可以实时监控系统的运行状态,了解系统的负载情况。 + +`pidof` 命令用于根据进程名查找对应的进程ID(PID)。例如,如果你知道某个进程的名字,但不知道它的PID,你可以使用 `pidof` 命令来查找。语法通常是 `pidof <进程名>`,比如 `pidof python` 会返回所有名为 `python` 的进程的PID。 + + + +`free` 和 `df -h` 是两个用于查看系统资源利用情况的常用命令: + +1. **`free`**:该命令用于显示系统内存的使用情况,包括物理内存和交换空间(swap)。执行 `free` 命令时,会显示系统的内存信息,包括总内存、已使用内存、空闲内存以及缓冲区和缓存等情况。 + + 示例输出: + ``` + total used free shared buff/cache available + Mem: 8081256 2133468 3458604 430300 2488184 5261632 + Swap: 0 0 0 + ``` + + 输出中的字段含义如下: + - `total`: 总内存量 + - `used`: 已使用的内存量 + - `free`: 空闲的内存量 + - `shared`: 用于共享的内存量 + - `buff/cache`: 用于缓存的内存量 + - `available`: 可用的内存量 + +2. **`df -h`**:该命令用于显示文件系统的磁盘空间利用情况。执行 `df -h` 命令时,会显示系统中每个挂载的文件系统的磁盘使用情况,包括总容量、已使用空间、剩余空间以及挂载点等信息。 + + 示例输出: + ``` + Filesystem Size Used Avail Use% Mounted on + /dev/sda1 20G 15G 3.6G 81% / + /dev/sda2 30G 20G 8.8G 70% /home + ``` + + 输出中的字段含义如下: + - `Filesystem`: 文件系统设备 + - `Size`: 文件系统总容量 + - `Used`: 已使用的空间 + - `Avail`: 可用空间 + - `Use%`: 使用百分比 + - `Mounted on`: 挂载点 + +通过这两个命令,你可以快速了解系统的内存和磁盘空间使用情况,以便进行系统资源管理和监控。 + + + +`du` 命令用于估算文件或目录的磁盘使用情况。它可以显示指定文件或目录的磁盘使用量,以及每个子目录的磁盘使用量,帮助用户了解文件系统上的空间分布情况。以下是 `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` 参数用于指定显示的深度。 + + + + + + + + + +## 重定向和管道 + +在 Linux 和其他 Unix 系统中,重定向和管道是非常重要的功能,它们允许用户将命令的输出重定向到文件、其他命令或设备。以下是对重定向和管道符的详细解释、使用场景、核心术语以及示例。 + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` 等。 + +#### 输出重定向 + +1. **覆盖输出重定向 `>`** + + 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 + + ```bash + ls > filelist.txt + ``` + + 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。 + +2. **追加输出重定向 `>>`** + + 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 + + ```bash + echo "Hello, World!" >> greetings.txt + ``` + + 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。 + +#### 输入重定向 + +1. **输入重定向 `<`** + + 将文件的内容作为命令的输入。 + + ```bash + sort < unsorted_list.txt + ``` + + 这个命令将 `unsorted_list.txt` 文件的内容作为 `sort` 命令的输入进行排序。 + +#### 错误重定向 + +1. **错误输出重定向 `2>`** + + 将命令的错误输出重定向到一个文件。 + + ```bash + ls non_existent_file 2> error_log.txt + ``` + + 这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。 + +2. **错误输出追加重定向 `2>>`** + + 将命令的错误输出追加到一个文件。 + + ```bash + ls non_existent_file 2>> error_log.txt + ``` + + 这个命令会将 `ls` 命令的错误信息追加到 `error_log.txt` 文件中。 + +3. **同时重定向标准输出和标准错误输出** + + 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + + ```bash + command &> output_and_error_log.txt + ``` + + 这个命令会将 `command` 的标准输出和错误输出都保存到 `output_and_error_log.txt` 文件中。 + +### 管道 `|` + +管道符号 `|` 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。 + +#### 使用场景 + +1. **将命令的输出传递给另一个命令** + + ```bash + ls -l | grep "txt" + ``` + + 这个命令会将 `ls -l` 的输出传递给 `grep "txt"`,只显示包含 "txt" 的行。 + +2. **多命令链式操作** + + ```bash + ps aux | grep "sshd" | awk '{print $2}' + ``` + + 这个命令链会列出所有进程 (`ps aux`),然后过滤包含 "sshd" 的行 (`grep "sshd"`),最后提取进程 ID (`awk '{print $2}'`)。 + +### 示例解析 + +#### 使用管道和重定向的综合示例 + +1. **查找特定文件并将结果保存到文件** + + ```bash + find / -name "*.log" 2> errors.txt | sort > sorted_log_files.txt + ``` + + 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `errors.txt`,并将结果进行排序后保存到 `sorted_log_files.txt`。 + +### 总结 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>>`:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + +- **管道 `|`**: + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + +## 思考: + + + +``` +<< 是什么功能? + +<< 是一种称为"here document"(这里文档)的特殊输入重定向方法。它允许在命令行中直接提供多行输入,而无需手动输入或从文件中读 +取。这在编写脚本或在命令行中执行需要大段输入的命令时非常有用。 + +<< 语法 +command << DELIMITER自定义结束分隔符(例END) +text +text +... +END + +command 是要接收输入的命令或程序。 +DELIMITER 是一个自定义的分隔符,可以是任何您选择的不包含空格或特殊字符的字符串,用于标记文档的开始和结束。 +text 是您要传递给命令或程序的文本内容,可以是多行的。 + + +()把命令包括起来,是干什么功能? + + +创建子shell、环境隔离、命令组合、用命令控制上下文 + +创建一个子shell,用于在一个独立的环境中执行一系列命令。 + +1. 基本语法和用法 + 在Shell脚本中,使用圆括号 () 来表示一组命令应该在一个子shell中执行。子shell中的命令可以是任何有效的Shell命令和语句,包括变量赋值、条件语句、循环等。 + +2. 子shell的特点 + 环境隔离: 子shell运行在独立的进程中,因此其环境变量、工作目录以及其他状态与父Shell是隔离的。 + 变量不共享: 在子shell中定义的变量和状态不会传递到父Shell中,它们只存在于子shell的生命周期中。 + 命令组合: 圆括号还可以用来组合多个命令,特别是在管道和命令替换的上下文中,这也是使用圆括号的另一种常见方式。 +``` + -- Gitee From addc7cc16ec71fae1115082052068c835f2b0c88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=AB=E9=9B=AA=E8=8E=B2?= <11785154+yan-xuelian@user.noreply.gitee.com> Date: Sun, 16 Jun 2024 13:18:48 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E9=97=AB=E9=9B=AA=E8=8E=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 闫雪莲 <11785154+yan-xuelian@user.noreply.gitee.com> --- ...50\346\210\267\346\235\203\351\231\220.md" | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 "25 \351\227\253\351\233\252\350\216\262/20240614 \347\224\250\346\210\267\346\235\203\351\231\220.md" diff --git "a/25 \351\227\253\351\233\252\350\216\262/20240614 \347\224\250\346\210\267\346\235\203\351\231\220.md" "b/25 \351\227\253\351\233\252\350\216\262/20240614 \347\224\250\346\210\267\346\235\203\351\231\220.md" new file mode 100644 index 0000000..df6968d --- /dev/null +++ "b/25 \351\227\253\351\233\252\350\216\262/20240614 \347\224\250\346\210\267\346\235\203\351\231\220.md" @@ -0,0 +1,217 @@ +### 权限管理练习 + +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ``` + user@hecs-196642:~$ mkdir -p guanli/zonghe guanli/jishu + ``` + + + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 + + ``` + root@hecs-196642:~# groupadd -g 2001 zonghe + root@hecs-196642:~# groupadd -g 2002 caiwu + root@hecs-196642:~# groupadd -g 2003 jishu + ``` + + + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + ``` + user@hecs-196642:~$ sudo useradd jerry + user@hecs-196642:~$ sudo useradd kylin -e 2020-12-30 + user@hecs-196642:~$ sudo useradd tsengia + user@hecs-196642:~$ sudo useradd obama + ``` + + + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ``` + user@hecs-196642:~$ sudo usermod -aG zonghe jerry + user@hecs-196642:~$ sudo usermod -aG zonghe kylin + user@hecs-196642:~$ sudo usermod -aG zonghe tsengia + user@hecs-196642:~$ sudo usermod -aG zonghe obama + ``` + + + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ``` + user@hecs-196642:~$ sudo useradd handy + user@hecs-196642:~$ sudo useradd -s /sbin/nologin cucci + ``` + + + +6. 将handy、cucci等用户添加到jishu组内 + + ``` + user@hecs-196642:~$ sudo usermod -aG jishu handy + user@hecs-196642:~$ sudo usermod -aG jishu cucci + ``` + + + +7. 将上述的所有用户均要求加入到guanli组内 + + ``` + sudo usermod -aG handy guanli + sudo usermod -aG cucci guanli + sudo usermod -aG jerry guanli + sudo usermod -aG kylin guanli + sudo usermod -aG tsengia guanli + sudo usermod -aG obama guanli + + user@hecs-196642:~$ sudo groupadd -g 2000 guanli + user@hecs-196642:~$ sudo gpasswd -M jerry,kylin,tsengia,obama,handy,cucci guanli + + + ``` + + + +8. 将zonghe组内的obama用户删除 + + ``` + user@hecs-196642:~$ sudo gpasswd -d obama zonghe + ``` + + + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ``` + user@hecs-196642:~$ sudo passwd jerry + user@hecs-196642:~$ sudo passwd cucci + ``` + + + +10. 将jerry用户锁定,并查看锁定状态 + + ``` + passwd -l jerry + passwd -s jerry + + 常见的passwd命令选项包括: + -l:锁定账号,防止用户登录系统。 + -u:解锁账号,允许用户登录系统。 + -d:清除密码,使用户账号变为无密码状态。 + -e:强制用户在下次登录时修改密码。 + -S:显示密码的状态信息,如密码过期信息等。 + -a:用于系统管理员管理密码策略的选项,可以设置密码过期期限等。 + ``` + + + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + ``` + fuser -k -n tcp 22 + fuser: 一个用于查看哪些进程正在使用指定文件或目录的命令。 + -k: 表示杀死找到的进程。 + -n tcp: 表示指定查找使用TCP协议的进程。 + 22: 表示端口号,这里指的是端口号为22的TCP连接。 + ``` + + + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ``` + user@hecs-196642:~$ groups cucci + user@hecs-196642:~$ id cucci + ``` + + + +13. 手工创建账号student(预留) + + ``` + [root@localhost ~]# vi /etc/passwd + student:x:1014:1014::/home/student:/bin/bash + [root@localhost ~]# vi /etc/shadow + student::18107:0:99999:7::: + [root@localhost ~]# vi /etc/group + student:x:1014: + [root@localhost ~]# mkdir /home/student + [root@localhost ~]# cd /etc/skel/ + [root@localhost skel]# ls -a | cp .b* /home/student/ + ``` + + + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ``` + user@hecs-196642:~$ sudo chown :guanli /guanli + user@hecs-196642:~$ sudo chown :zonghe /guanli/zonghe + user@hecs-196642:~$ sudo chown :jishu /guanli/jishu + user@hecs-196642:~$ sudo chmod -R o-rwx /guanli/ + ``` + + + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ``` + user@hecs-196642:~$ sudo chgrp jishu ceshi + user@hecs-196642:~$ chmod g+w,o-x ceshi + ``` + + + +16. 清除jerry用户密码 + + ``` + user@hecs-196642:~$ sudo passwd -d jerry + # -d, --delete :将指定用户从密码组中删除 + ``` + + + +17. 锁定cucci用户密码并查看状态 + + ``` + user@hecs-196642:~$ sudo passwd -l cucci + user@hecs-196642:~$ sudo passwd -s cucci + + # -l:锁定账号,防止用户登录系统。 + # -S:显示密码的状态信息,如密码过期信息等。 + ``` + + + +18. 修改obama用户的UID为8888 + + ``` + user@hecs-196642:~$ sudo usermod -u 8888 obama + obama:x:8888:1019::/home/obama:/bin/sh + ``` + + + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ``` + user@hecs-196642:~$ sudo passwd -x 60 kylin + ``` + + + +20. 通过id groups等命令查看用户handy信息 + +``` +user@hecs-196642:~$ groups handy +handy : handy jishu guanli + +user@hecs-196642:~$ id handy +uid=1020(handy) gid=1020(handy) groups=1020(handy),2003(jishu),2000(guanli) +``` + -- Gitee