From dfffaa4cc1eea4f18bc8dfb01f7c23f707b9dc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=89=AF=E7=A1=BC?= <2242707601@qq.com> Date: Sun, 16 Jun 2024 14:41:58 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=E5=90=B4=E8=89=AF=E7=A1=BC=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 吴良硼 <2242707601@qq.com> --- ...67\347\273\204\347\256\241\347\220\206.md" | 281 ++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 "20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" diff --git "a/20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" "b/20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" new file mode 100644 index 0000000..317df56 --- /dev/null +++ "b/20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" @@ -0,0 +1,281 @@ +## 用户和用户组管理 + +- 用户管理 + - 添加账户 useradd -m -s /bin/bash db2 + - 删除账户 userdel -r db2 + - 修改账户 usermod [选项同添加账户] db2 + - 查看帐户 getent passwd db2 +- 用户组管理 + - 添加用户组 groupadd stu1 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -aG stu1 db2 +- 密码管理 + - 设置密码 passwd +- sudo权限管理 + - usermod -aG sudo xxx + - 修改/etc/sudoers文件 +- 登录权限管理 +- 用户环境管理 + - 用户配置文件 : .bashrc + - 用户环境变量: $PATH、$HOME、$SHELL + +## 文件与目录的权限管理 + +- https://www.runoob.com/linux/linux-file-attr-permission.html + + ![20240605092950](./assets/20240605092950.png) + +- 文件类型 + - -普通文件 + - d目录 + - l连接文件 + - b c s p 等其它文件 + +- 基本权限 + - r 读 + - w 写 + - x 执行 + +- 权限表示 + - 字符表示 + - 数字表示 + - 4 代表 r + - 2 代表 w + - 1 代表 x + - 权限修改 + - chmod 修改权限 + - chown 修改拥有者 + - chgrp 修改所属组 + - 权限的继承 + - 目录权限下文件和目录的影响 + - umask + - 特权权限 + - SUID + - SGID + - SBIT + - 隐藏权限 + - i + - 用在文件上,无法对该文件进行任何修改 + - 用在目录上,无法在里面创建新文件,但可以修改已有文件 + - a + - 除了可追加内容外,无法进行其它修改 + - 隐藏权限的操作 + - 修改隐藏权限 chattr + - chattr +i XXX + - chattr -i XXX + - 查看隐藏权限 + - lsattr + + + +### 权限管理练习 + +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ``` + mkdir -p guanli && mkdir ./guanli/zonghe ./guanli/jishu + + ``` + + + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 + + ``` + groupadd -g 2001 zonghe + groupadd -g 2002 caiwu + groupadd -g 2003 jishu + + ``` + + + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + ``` + useradd jerry + useradd kylin -e 2020-12-30 + useradd tsengia + useradd obama + + ``` + + + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ``` + usermod -aG zonghe jerry + usermod -aG zonghe kylin + usermod -aG zonghe tsengia + usermod -aG zonghe obama + + ``` + + + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ``` + useradd handy + + useradd -s /sbin/nologin cucci + + ``` + + + +6. 将handy、cucci等用户添加到jishu组内 + + ``` + usermod -aG jishu handy + usermod -aG jishu cucci + + ``` + + + +7. 将上述的所有用户均要求加入到guanli组内 + + ``` + sudo usermod -aG guanli jerry + sudo usermod -aG guanli kylin + sudo usermod -aG guanli tsengia + sudo usermod -aG guanli handy + sudo usermod -aG guanli cucci + + + ``` + + + +8. 将zonghe组内的obama用户删除 + + ``` + gpasswd -d obama zonghe + ``` + + + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ``` + passwd jerry + 输入新密码:123456 + 再次输入密码:123456 + + passwd cucci + 输入新密码:redhat + 再次输入密码:redhat + ``` + + + +10. 将jerry用户锁定,并查看锁定状态 + + ``` + passwd -l jerry + + ``` + + + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + ``` + who + w + fuser -k /dev/pts/5 + + ``` + + + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ``` + groups cucci + sudo id cucci + ``` + + + +13. 手工创建账号student(预留) + + ``` + useradd student + + ``` + + + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ``` + chown -R :guanli /guanli + chown -R :zonghe /guanli/zonghe + chown -R :jishu /guanli/jishu + chmod 770 /guanli + chmod 770 /guanli/zonghe + chmod 770 /guanli/jishu + ``` + + + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ``` + mkdir /ceshi + chown :jishu /ceshi + chmod 770 /ceshi + ``` + + + +16. 清除jerry用户密码 + + ``` + passwd -d jerry + ``` + + + +17. 锁定cucci用户密码并查看状态 + + ``` + passwd -l cucci + passwd -S cucci + # -l:锁定账号,防止用户登录系统。 + # -S:显示密码的状态信息,如密码过期信息等。 + ``` + + + +18. 修改obama用户的UID为8888 + + ``` + usermod -u 8888 obama + + ``` + + + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ``` + passwd -x 60 kylin + + ``` + + + +20. 通过id groups等命令查看用户handy信息 + + ``` + id handy + groups handy + + ``` + + + -- Gitee From d0d4fddebf129ecb3394dc5c0b3bec9ca810351b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=89=AF=E7=A1=BC?= <2242707601@qq.com> Date: Sun, 16 Jun 2024 14:44:02 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=202024?= =?UTF-8?q?0613=E9=87=8D=E5=AE=9A=E5=90=91=E5=92=8C=E7=AE=A1=E9=81=93?= =?UTF-8?q?=EF=BC=9A.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...14\347\256\241\351\201\223\357\274\232.md" | 768 ------------------ 1 file changed, 768 deletions(-) delete mode 100644 "20240613\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\232.md" diff --git "a/20240613\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\232.md" "b/20240613\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\232.md" deleted file mode 100644 index 7a87e93..0000000 --- "a/20240613\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\357\274\232.md" +++ /dev/null @@ -1,768 +0,0 @@ -## 刚安装完Deiban系统 7步走: - -1. 设置国内软件源镜像 /etc/apt/sources.list -2. 更新软件包列表:apt update -3. 更新系统:apt upgrade -y -4. 安装vim: - 1. apt install vim -y - 2. locate 从数据库中找, find实时从系统中找 - -5. 编辑网卡配置,设置静态IP: -6. 只在虚拟机上操作,不要在云服务器操作 - -```bash -vim /etc/network/interfaces - -# 按如下设置 -# The primary network interface -allow-hotplug ens192 -iface ens192 inet dhcp - -#重新启动网络服务 -sudo systemctl restart networking -``` - -5. 修改SSHD配置,允许root用户远程登录 - -```bash -vim /etc/ssh/sshd_config - -# 取消如下代码的注释,并且将其值设置为yes,以允许root用户的远程登录 -22 -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 # kill 进程号,用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` 参数用于指定显示的深度。 - - - - - - - - - -## 重定向和管道 - -在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: - -- `0`:标准输入(stdin): 键盘输入 -- `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 -- `2`:标准错误(stderr): 只包含错误信息 - -使用形式: - -- 定向符前直接用数字,如 1> 1.txt 、 2> 2.txt -- 定向符后紧跟定向符并加&号如 >&1 - -### 重定向 - -重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` &>等。 - -#### 输出重定向 - -1. **标准输出覆盖重定向 `>`** - - 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 - - ```bash - ls > filelist.txt - ``` - - 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。 - - - -2. **追加输出重定向 `>>`** - - 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 - - ```bash - echo "Hello, World!" >> greetings.txt - ``` - - 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。 - -3. 注意: - - 1. **标准输出不含错误信息** - - -#### 输入重定向 - -1. **输入重定向 `<`** - - 将文件的内容作为命令的输入。 - - ```bash - sort < unsorted_list.txt - - # 原文件 - apple - orange - banana - - # 这个命令将 `unsorted_list.txt` 文件的内容作为 `sort` 命令的输入进行排序。 - ``` - - - - - - 场景:你需要从一个SQL脚本文件中读取命令并在数据库中执行。 - - ```bash - # 示例: - mysql -u root -p mydatabase < script.sql - #该命令将 script.sql 文件中的SQL命令导入到 mydatabase 数据库中。 - # 还原数据库常用的命令 - ``` - - - -#### 错误重定向 - -``` - 参考:find / -name '*.conf' -``` - - - -1. **错误输出重定向 `2>`** - - 将命令的错误输出重定向到一个文件。 - - ```bash - reboot 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 > 1.txt 2>&1 # 正确和错误原版混搭,原封不动 - - command > 1.txt 2>> 1.txt # 先正确后错误 - command 2> 1.txt >> 1.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 "*.conf" 2> errors.txt | sort > sorted_log_files.txt - - - ``` - - 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `errors.txt`,并将结果进行排序后保存到 `sorted_log_files.txt`。 - -### 总结 - -- **重定向**: - - `>`:将输出重定向到文件(覆盖)。 - - `>>:将输出追加到文件。 - - `<`:将文件内容作为输入。 - - `2>`:将错误输出重定向到文件。 - - `2>>`:将错误输出追加到文件。 - - `&>`:将标准输出和错误输出同时重定向到文件。 - - `&>>`:将标准输出和错误输出同时追加重定向到文件。 - -- **管道 `|`**: - - 将一个命令的输出作为另一个命令的输入,用于链式操作。 - - - -**扩展:** - -- 输入输出一起使用的情况 - - ```basn - sort < a.txt > b.txt - ``` - -- - -- **重定向标准输出和错误输出到不同文件:** - - - 若要将标准输出重定向到一个文件,将错误输出重定向到另一个文件,可以使用以下命令: - - ```sh - command > output.txt > error.txt - ``` - - 这样,标准输出会被写入 `output.txt`文件,而错误输出则会被写入`error.txt` - - 文件。 - -- **将错误输出追加到标准输出文件中:** - - - 若要将错误输出追加到标准输出文件中,可以使用以下命令: - - ```bash - command > output.txt 2>&1 - # 等效谁? - ``` - - 这会将标准输出写入`output.txt`文件,同时将错误输出追加到标准输出文件中。 - -- **将错误输出丢弃:** - - - 若要忽略错误输出,可以将错误输出重定向到特殊设备 `/dev/null - ` - - ,例如: - - ```bash - command 2> /dev/null - ``` - 这会将错误输出发送到 `/dev/null - `,从而丢弃错误输出而只保留标准输出 - - - -## 思考: - -``` -<< 是什么功能? -<< 是Linux中的输入重定向符号,它用于将一个文件的内容输入到另一个命令或文件中。这样可以方便地将命令的输出重定向到文件中,或者将一个文件的内容作为另一个命令的输入。 - -用户可以在命令行中直接为命令提供多行输入数据 - -()把命令包括起来,是干什么功能? -命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。 -命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。 - - - -1. 创建子shell:括号内的命令会在一个子shell中执行,这意味着括号内的命令可以独立于父shell执行,并且不会影响父shell的环境变量和当前工作目录。 - -2. 控制命令的输入输出:可以使用括号来控制命令的输入和输出。例如,可以将括号内的命令的输出重定向到文件中,或者将另一个命令的输出作为括号内命令的输入。 - -3. 实现命令组合:括号内的命令可以与其他命令组合使用,例如使用管道将括号内命令的输出传递给另一个命令进行处理。 - -4. 实现命令序列:可以使用括号将多个命令组合在一起,形成一个命令序列。这样可以按照指定的顺序执行多个命令。 -``` - - - -补充一个实用命令: - -`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`:显示版本信息。 - -### 总结 -`tee` 命令是一个灵活而强大的工具,可以用于在命令行中处理数据流,同时向多个文件写入数据。 -- Gitee From 2751ea3ad20e7f14de52582db47586f2b99010c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=89=AF=E7=A1=BC?= <2242707601@qq.com> Date: Sun, 16 Jun 2024 14:44:09 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=202024?= =?UTF-8?q?0616=E7=94=A8=E6=88=B7=E5=92=8C=E7=94=A8=E6=88=B7=E7=BB=84?= =?UTF-8?q?=E7=AE=A1=E7=90=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...67\347\273\204\347\256\241\347\220\206.md" | 281 ------------------ 1 file changed, 281 deletions(-) delete mode 100644 "20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" diff --git "a/20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" "b/20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" deleted file mode 100644 index 317df56..0000000 --- "a/20240616\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" +++ /dev/null @@ -1,281 +0,0 @@ -## 用户和用户组管理 - -- 用户管理 - - 添加账户 useradd -m -s /bin/bash db2 - - 删除账户 userdel -r db2 - - 修改账户 usermod [选项同添加账户] db2 - - 查看帐户 getent passwd db2 -- 用户组管理 - - 添加用户组 groupadd stu1 - - 删除用户组 groupdel stu1 - - 添加用户到用户组 usermod -aG stu1 db2 -- 密码管理 - - 设置密码 passwd -- sudo权限管理 - - usermod -aG sudo xxx - - 修改/etc/sudoers文件 -- 登录权限管理 -- 用户环境管理 - - 用户配置文件 : .bashrc - - 用户环境变量: $PATH、$HOME、$SHELL - -## 文件与目录的权限管理 - -- https://www.runoob.com/linux/linux-file-attr-permission.html - - ![20240605092950](./assets/20240605092950.png) - -- 文件类型 - - -普通文件 - - d目录 - - l连接文件 - - b c s p 等其它文件 - -- 基本权限 - - r 读 - - w 写 - - x 执行 - -- 权限表示 - - 字符表示 - - 数字表示 - - 4 代表 r - - 2 代表 w - - 1 代表 x - - 权限修改 - - chmod 修改权限 - - chown 修改拥有者 - - chgrp 修改所属组 - - 权限的继承 - - 目录权限下文件和目录的影响 - - umask - - 特权权限 - - SUID - - SGID - - SBIT - - 隐藏权限 - - i - - 用在文件上,无法对该文件进行任何修改 - - 用在目录上,无法在里面创建新文件,但可以修改已有文件 - - a - - 除了可追加内容外,无法进行其它修改 - - 隐藏权限的操作 - - 修改隐藏权限 chattr - - chattr +i XXX - - chattr -i XXX - - 查看隐藏权限 - - lsattr - - - -### 权限管理练习 - -1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) - - ``` - mkdir -p guanli && mkdir ./guanli/zonghe ./guanli/jishu - - ``` - - - -2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 - - ``` - groupadd -g 2001 zonghe - groupadd -g 2002 caiwu - groupadd -g 2003 jishu - - ``` - - - -3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 - - ``` - useradd jerry - useradd kylin -e 2020-12-30 - useradd tsengia - useradd obama - - ``` - - - -4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 - - ``` - usermod -aG zonghe jerry - usermod -aG zonghe kylin - usermod -aG zonghe tsengia - usermod -aG zonghe obama - - ``` - - - -5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” - - ``` - useradd handy - - useradd -s /sbin/nologin cucci - - ``` - - - -6. 将handy、cucci等用户添加到jishu组内 - - ``` - usermod -aG jishu handy - usermod -aG jishu cucci - - ``` - - - -7. 将上述的所有用户均要求加入到guanli组内 - - ``` - sudo usermod -aG guanli jerry - sudo usermod -aG guanli kylin - sudo usermod -aG guanli tsengia - sudo usermod -aG guanli handy - sudo usermod -aG guanli cucci - - - ``` - - - -8. 将zonghe组内的obama用户删除 - - ``` - gpasswd -d obama zonghe - ``` - - - -9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” - - ``` - passwd jerry - 输入新密码:123456 - 再次输入密码:123456 - - passwd cucci - 输入新密码:redhat - 再次输入密码:redhat - ``` - - - -10. 将jerry用户锁定,并查看锁定状态 - - ``` - passwd -l jerry - - ``` - - - -11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 - - ``` - who - w - fuser -k /dev/pts/5 - - ``` - - - -12. 查看cucci用户,属于那些组,并查看其详细信息 - - ``` - groups cucci - sudo id cucci - ``` - - - -13. 手工创建账号student(预留) - - ``` - useradd student - - ``` - - - -14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 - - ``` - chown -R :guanli /guanli - chown -R :zonghe /guanli/zonghe - chown -R :jishu /guanli/jishu - chmod 770 /guanli - chmod 770 /guanli/zonghe - chmod 770 /guanli/jishu - ``` - - - -15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 - - ``` - mkdir /ceshi - chown :jishu /ceshi - chmod 770 /ceshi - ``` - - - -16. 清除jerry用户密码 - - ``` - passwd -d jerry - ``` - - - -17. 锁定cucci用户密码并查看状态 - - ``` - passwd -l cucci - passwd -S cucci - # -l:锁定账号,防止用户登录系统。 - # -S:显示密码的状态信息,如密码过期信息等。 - ``` - - - -18. 修改obama用户的UID为8888 - - ``` - usermod -u 8888 obama - - ``` - - - -19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 - - ``` - passwd -x 60 kylin - - ``` - - - -20. 通过id groups等命令查看用户handy信息 - - ``` - id handy - groups handy - - ``` - - - -- Gitee From 446e3e3d0364a0ac76fdc1c1539b5b86aca4a862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=89=AF=E7=A1=BC?= <2242707601@qq.com> Date: Sun, 16 Jun 2024 14:45:01 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=E5=90=B4=E8=89=AF=E7=A1=BC=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 吴良硼 <2242707601@qq.com> --- ... 7\346\255\245\350\265\260\357\274\232.md" | 768 ++++++++++++++++++ ...67\347\273\204\347\256\241\347\220\206.md" | 281 +++++++ 2 files changed, 1049 insertions(+) create mode 100644 "58\345\220\264\350\211\257\347\241\274/20240613\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260\357\274\232.md" create mode 100644 "58\345\220\264\350\211\257\347\241\274/20240614\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" diff --git "a/58\345\220\264\350\211\257\347\241\274/20240613\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260\357\274\232.md" "b/58\345\220\264\350\211\257\347\241\274/20240613\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260\357\274\232.md" new file mode 100644 index 0000000..7a87e93 --- /dev/null +++ "b/58\345\220\264\350\211\257\347\241\274/20240613\345\210\232\345\256\211\350\243\205\345\256\214Deiban\347\263\273\347\273\237 7\346\255\245\350\265\260\357\274\232.md" @@ -0,0 +1,768 @@ +## 刚安装完Deiban系统 7步走: + +1. 设置国内软件源镜像 /etc/apt/sources.list +2. 更新软件包列表:apt update +3. 更新系统:apt upgrade -y +4. 安装vim: + 1. apt install vim -y + 2. locate 从数据库中找, find实时从系统中找 + +5. 编辑网卡配置,设置静态IP: +6. 只在虚拟机上操作,不要在云服务器操作 + +```bash +vim /etc/network/interfaces + +# 按如下设置 +# The primary network interface +allow-hotplug ens192 +iface ens192 inet dhcp + +#重新启动网络服务 +sudo systemctl restart networking +``` + +5. 修改SSHD配置,允许root用户远程登录 + +```bash +vim /etc/ssh/sshd_config + +# 取消如下代码的注释,并且将其值设置为yes,以允许root用户的远程登录 +22 +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 # kill 进程号,用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` 参数用于指定显示的深度。 + + + + + + + + + +## 重定向和管道 + +在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: + +- `0`:标准输入(stdin): 键盘输入 +- `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +- `2`:标准错误(stderr): 只包含错误信息 + +使用形式: + +- 定向符前直接用数字,如 1> 1.txt 、 2> 2.txt +- 定向符后紧跟定向符并加&号如 >&1 + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` &>等。 + +#### 输出重定向 + +1. **标准输出覆盖重定向 `>`** + + 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 + + ```bash + ls > filelist.txt + ``` + + 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。 + + + +2. **追加输出重定向 `>>`** + + 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 + + ```bash + echo "Hello, World!" >> greetings.txt + ``` + + 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。 + +3. 注意: + + 1. **标准输出不含错误信息** + + +#### 输入重定向 + +1. **输入重定向 `<`** + + 将文件的内容作为命令的输入。 + + ```bash + sort < unsorted_list.txt + + # 原文件 + apple + orange + banana + + # 这个命令将 `unsorted_list.txt` 文件的内容作为 `sort` 命令的输入进行排序。 + ``` + + + + + + 场景:你需要从一个SQL脚本文件中读取命令并在数据库中执行。 + + ```bash + # 示例: + mysql -u root -p mydatabase < script.sql + #该命令将 script.sql 文件中的SQL命令导入到 mydatabase 数据库中。 + # 还原数据库常用的命令 + ``` + + + +#### 错误重定向 + +``` + 参考:find / -name '*.conf' +``` + + + +1. **错误输出重定向 `2>`** + + 将命令的错误输出重定向到一个文件。 + + ```bash + reboot 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 > 1.txt 2>&1 # 正确和错误原版混搭,原封不动 + + command > 1.txt 2>> 1.txt # 先正确后错误 + command 2> 1.txt >> 1.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 "*.conf" 2> errors.txt | sort > sorted_log_files.txt + + + ``` + + 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `errors.txt`,并将结果进行排序后保存到 `sorted_log_files.txt`。 + +### 总结 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>>:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + - `&>>`:将标准输出和错误输出同时追加重定向到文件。 + +- **管道 `|`**: + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + + + +**扩展:** + +- 输入输出一起使用的情况 + + ```basn + sort < a.txt > b.txt + ``` + +- + +- **重定向标准输出和错误输出到不同文件:** + + - 若要将标准输出重定向到一个文件,将错误输出重定向到另一个文件,可以使用以下命令: + + ```sh + command > output.txt > error.txt + ``` + + 这样,标准输出会被写入 `output.txt`文件,而错误输出则会被写入`error.txt` + + 文件。 + +- **将错误输出追加到标准输出文件中:** + + - 若要将错误输出追加到标准输出文件中,可以使用以下命令: + + ```bash + command > output.txt 2>&1 + # 等效谁? + ``` + + 这会将标准输出写入`output.txt`文件,同时将错误输出追加到标准输出文件中。 + +- **将错误输出丢弃:** + + - 若要忽略错误输出,可以将错误输出重定向到特殊设备 `/dev/null + ` + + ,例如: + + ```bash + command 2> /dev/null + ``` + 这会将错误输出发送到 `/dev/null + `,从而丢弃错误输出而只保留标准输出 + + + +## 思考: + +``` +<< 是什么功能? +<< 是Linux中的输入重定向符号,它用于将一个文件的内容输入到另一个命令或文件中。这样可以方便地将命令的输出重定向到文件中,或者将一个文件的内容作为另一个命令的输入。 + +用户可以在命令行中直接为命令提供多行输入数据 + +()把命令包括起来,是干什么功能? +命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。 +命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。 + + + +1. 创建子shell:括号内的命令会在一个子shell中执行,这意味着括号内的命令可以独立于父shell执行,并且不会影响父shell的环境变量和当前工作目录。 + +2. 控制命令的输入输出:可以使用括号来控制命令的输入和输出。例如,可以将括号内的命令的输出重定向到文件中,或者将另一个命令的输出作为括号内命令的输入。 + +3. 实现命令组合:括号内的命令可以与其他命令组合使用,例如使用管道将括号内命令的输出传递给另一个命令进行处理。 + +4. 实现命令序列:可以使用括号将多个命令组合在一起,形成一个命令序列。这样可以按照指定的顺序执行多个命令。 +``` + + + +补充一个实用命令: + +`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`:显示版本信息。 + +### 总结 +`tee` 命令是一个灵活而强大的工具,可以用于在命令行中处理数据流,同时向多个文件写入数据。 diff --git "a/58\345\220\264\350\211\257\347\241\274/20240614\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" "b/58\345\220\264\350\211\257\347\241\274/20240614\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" new file mode 100644 index 0000000..317df56 --- /dev/null +++ "b/58\345\220\264\350\211\257\347\241\274/20240614\347\224\250\346\210\267\345\222\214\347\224\250\346\210\267\347\273\204\347\256\241\347\220\206.md" @@ -0,0 +1,281 @@ +## 用户和用户组管理 + +- 用户管理 + - 添加账户 useradd -m -s /bin/bash db2 + - 删除账户 userdel -r db2 + - 修改账户 usermod [选项同添加账户] db2 + - 查看帐户 getent passwd db2 +- 用户组管理 + - 添加用户组 groupadd stu1 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -aG stu1 db2 +- 密码管理 + - 设置密码 passwd +- sudo权限管理 + - usermod -aG sudo xxx + - 修改/etc/sudoers文件 +- 登录权限管理 +- 用户环境管理 + - 用户配置文件 : .bashrc + - 用户环境变量: $PATH、$HOME、$SHELL + +## 文件与目录的权限管理 + +- https://www.runoob.com/linux/linux-file-attr-permission.html + + ![20240605092950](./assets/20240605092950.png) + +- 文件类型 + - -普通文件 + - d目录 + - l连接文件 + - b c s p 等其它文件 + +- 基本权限 + - r 读 + - w 写 + - x 执行 + +- 权限表示 + - 字符表示 + - 数字表示 + - 4 代表 r + - 2 代表 w + - 1 代表 x + - 权限修改 + - chmod 修改权限 + - chown 修改拥有者 + - chgrp 修改所属组 + - 权限的继承 + - 目录权限下文件和目录的影响 + - umask + - 特权权限 + - SUID + - SGID + - SBIT + - 隐藏权限 + - i + - 用在文件上,无法对该文件进行任何修改 + - 用在目录上,无法在里面创建新文件,但可以修改已有文件 + - a + - 除了可追加内容外,无法进行其它修改 + - 隐藏权限的操作 + - 修改隐藏权限 chattr + - chattr +i XXX + - chattr -i XXX + - 查看隐藏权限 + - lsattr + + + +### 权限管理练习 + +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ``` + mkdir -p guanli && mkdir ./guanli/zonghe ./guanli/jishu + + ``` + + + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 + + ``` + groupadd -g 2001 zonghe + groupadd -g 2002 caiwu + groupadd -g 2003 jishu + + ``` + + + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + ``` + useradd jerry + useradd kylin -e 2020-12-30 + useradd tsengia + useradd obama + + ``` + + + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ``` + usermod -aG zonghe jerry + usermod -aG zonghe kylin + usermod -aG zonghe tsengia + usermod -aG zonghe obama + + ``` + + + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ``` + useradd handy + + useradd -s /sbin/nologin cucci + + ``` + + + +6. 将handy、cucci等用户添加到jishu组内 + + ``` + usermod -aG jishu handy + usermod -aG jishu cucci + + ``` + + + +7. 将上述的所有用户均要求加入到guanli组内 + + ``` + sudo usermod -aG guanli jerry + sudo usermod -aG guanli kylin + sudo usermod -aG guanli tsengia + sudo usermod -aG guanli handy + sudo usermod -aG guanli cucci + + + ``` + + + +8. 将zonghe组内的obama用户删除 + + ``` + gpasswd -d obama zonghe + ``` + + + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ``` + passwd jerry + 输入新密码:123456 + 再次输入密码:123456 + + passwd cucci + 输入新密码:redhat + 再次输入密码:redhat + ``` + + + +10. 将jerry用户锁定,并查看锁定状态 + + ``` + passwd -l jerry + + ``` + + + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + ``` + who + w + fuser -k /dev/pts/5 + + ``` + + + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ``` + groups cucci + sudo id cucci + ``` + + + +13. 手工创建账号student(预留) + + ``` + useradd student + + ``` + + + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ``` + chown -R :guanli /guanli + chown -R :zonghe /guanli/zonghe + chown -R :jishu /guanli/jishu + chmod 770 /guanli + chmod 770 /guanli/zonghe + chmod 770 /guanli/jishu + ``` + + + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ``` + mkdir /ceshi + chown :jishu /ceshi + chmod 770 /ceshi + ``` + + + +16. 清除jerry用户密码 + + ``` + passwd -d jerry + ``` + + + +17. 锁定cucci用户密码并查看状态 + + ``` + passwd -l cucci + passwd -S cucci + # -l:锁定账号,防止用户登录系统。 + # -S:显示密码的状态信息,如密码过期信息等。 + ``` + + + +18. 修改obama用户的UID为8888 + + ``` + usermod -u 8888 obama + + ``` + + + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ``` + passwd -x 60 kylin + + ``` + + + +20. 通过id groups等命令查看用户handy信息 + + ``` + id handy + groups handy + + ``` + + + -- Gitee