diff --git "a/36\351\203\221\347\216\256\351\224\213/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" "b/36\351\203\221\347\216\256\351\224\213/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" new file mode 100644 index 0000000000000000000000000000000000000000..6822f7611c389a0e2f8a4de6285fbc25ca90697f --- /dev/null +++ "b/36\351\203\221\347\216\256\351\224\213/20240613 \351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223\347\254\246.md" @@ -0,0 +1,47 @@ +重定向和管道 + +在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: + +- `0`:标准输入(stdin): 键盘输入 +- `1`:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +- `2`:标准错误(stderr): 只包含错误信息 + +使用形式: + +- 定向符前直接用数字,如 1> 1.txt 、 2> 2.txt +- 定向符后紧跟定向符并加&号如 >&1 + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` &>等。 + +#### 输出重定向 + +1. **标准输出覆盖重定向 `>`**将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 ls > filelist.txt 这个命令将 `ls` 命令的输出保存到 `filelist.txt` 文件中,如果文件已存在,则会被覆盖。 +2. **追加输出重定向 `>>`**将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 echo "Hello, World!" >> greetings.txt 这个命令会将 "Hello, World!" 追加到 `greetings.txt` 文件中。 +3. 注意: + 1. **标准输出不含错误信息** + +#### 输入重定向 + +1. **输入重定向 `<`**将文件的内容作为命令的输入。 sort < unsorted_list.txt + + # 原文件 + + apple orange banana + + # 这个命令将 `unsorted_list.txt` 文件的内容作为 `sort` 命令的输入进行排序。 + +场景:你需要从一个SQL脚本文件中读取命令并在数据库中执行。 # 示例: mysql -u root -p mydatabase < script.sql #该命令将 script.sql 文件中的SQL命令导入到 mydatabase 数据库中。 # 还原数据库常用的命令 + +#### 错误重定向 + +``` + 参考:find / -name '*.conf' +``` + +1. **错误输出重定向 `2>`**将命令的错误输出重定向到一个文件。 reboot 2> error_log.txt 这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。 +2. **错误输出追加重定向 `2>>`**将命令的错误输出追加到一个文件。 ls non_existent_file 2>> error_log.txt 这个命令会将 `ls` 命令的错误信息追加到 `error_log.txt` 文件中。 +3. **同时重定向标准输出和标准错误输出**使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 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` 文件中。 \ No newline at end of file diff --git "a/36\351\203\221\347\216\256\351\224\213/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/36\351\203\221\347\216\256\351\224\213/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 0000000000000000000000000000000000000000..26254cd9642fe1f4ebb67333d063e68115126077 --- /dev/null +++ "b/36\351\203\221\347\216\256\351\224\213/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,200 @@ +## 用户和用户组管理 + +- 用户管理 + + - 添加账户 useradd -m -s /bin/bash db2 + + ``` + -e 设置时间后失效 + ``` + + - 删除账户 userdel -r db2 + + - 修改账户 usermod [选项同添加账户] db2 + + - 查看帐户 getent passwd db2 + +- 用户组管理 + + - 添加用户组 groupadd stu1 + - 查看用户在那个组 groups stu1 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -aG stu1 db2 + +- 密码管理 + + - 设置密码 passwd + + ``` + -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用; + + -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用; + + -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用; + + --stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用; + + -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段; + + -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段; + + -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段; + + -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。 + ``` + +- sudo权限管理 + + - usermod -aG sudo xxx + - -a追加 + - 修改/etc/sudoers文件 + +- 登录权限管理 + +- 用户环境管理 + + - 用户配置文件 : .bashrc + + - 用户环境变量: PATH、𝑃𝐴𝑇𝐻、HOME、$SHELL + + - ### 权限管理练习 + + 1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ``` + mkdir guanli 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 obama + useradd tsengia + useradd -e 2024-12-30 kylin + ``` + + 4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ``` + gpasswd -a jerry zonghe + gpasswd -a kylin zonghe + gpasswd -a tsengia zonghe + gpasswd -a obama zonghe + -a 添加用户 + -d 删除用户 + ``` + + 5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ``` + usermod handy -s /sbin/nologin + -s 登录设置shell + ``` + + 6. 将handy、cucci等用户添加到jishu组内 + + ``` + gpasswd -a handy jishu + gpasswd -a cucci jishu + ``` + + 7. 将上述的所有用户均要求加入到guanli组内 + + 8. 将zonghe组内的obama用户删除 + + ``` + gpasswd -d obama zongle + ``` + + 9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ``` + usermod jerry + usermod cucci + ``` + + 10. 将jerry用户锁定,并查看锁定状态 + + ``` + passwd -l jerry l锁定 u解锁 + passwd -S jerry + ``` + + 11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + ``` + who + ``` + + 12. 查看cucci用户,属于那些组,并查看其详细信息 + + ``` + getent passwd cucci + ``` + + 13. 手工创建账号student(预留) + + ``` + useradd student + ``` + + 14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ``` + chgrp guanli guanli + chmod o-r guanli + o 代表其他用户 + ``` + + 15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ``` + mkdir ceshi + chgrp jishu ceshi + chmod o-rwx,g+rwx ceshi + g 代表组内用户 + ``` + + 16. 清除jerry用户密码 + + ``` + passwd -d jerry + d 删除 + ``` + + 17. 锁定cucci用户密码并查看状态 + + ``` + passwd -l cucci + l 锁定 + ``` + + 18. 修改obama用户的UID为8888 + + ``` + usermod -u 8888 obama + u 为uid + ``` + + 19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ``` + passwd -x 60 kylin + -x 设置用户密码期限 + ``` + + 20. 通过id groups等命令查看用户handy信息 + + ``` + id handy + groups handy + ``` \ No newline at end of file