diff --git "a/09 \345\272\204\347\217\212\347\217\212/20240614 \351\207\215\345\256\232\345\220\221.md" "b/09 \345\272\204\347\217\212\347\217\212/20240614 \351\207\215\345\256\232\345\220\221.md" new file mode 100644 index 0000000000000000000000000000000000000000..e0baad16960d5e6908ff765fe56ff7f6045ccf8d --- /dev/null +++ "b/09 \345\272\204\347\217\212\347\217\212/20240614 \351\207\215\345\256\232\345\220\221.md" @@ -0,0 +1,156 @@ +## 笔记 + + + +### 重定向 + +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 `>`、`>>`、`<`、`2>` 等。 + +#### 输出重定向 + +1. **覆盖输出重定向 `>`** + 将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 + + ```bash + ls > z.txt + ``` + + 这个命令将 `ls` 命令的输出保存到 `z.txt` 文件中,如果文件已存在,则会被覆盖。 + +2. **追加输出重定向 `>>`** + 将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 + + ```bash + echo "Hello, World!" >> z.txt + ``` + + 这个命令会将 "Hello, World!" 追加到 `z.txt` 文件中。 + +#### 输入重定向 + +1. **输入重定向 `<`** + 将文件的内容作为命令的输入。 + + ```bash + sort < z.txt + ``` + + 这个命令将 `z.txt` 文件的内容作为 `sort` 命令的输入进行排序。 + +#### 错误重定向 + +1. **错误输出重定向 `2>`** + 将命令的错误输出重定向到一个文件。 + + ```bash + ls k 2> z.txt + ``` + + 这个命令会将 `ls` 命令的错误信息保存到 `error_log.txt` 文件中。 + +2. **错误输出追加重定向 `2>>`** + 将命令的错误输出追加到一个文件。 + + ```bash + ls km 2>> z.txt + ``` + + 这个命令会将 `ls` 命令的错误信息追加到 `z.txt` 文件中。 + +3. **同时重定向标准输出和标准错误输出** + 使用 `&>` 符号将标准输出和错误输出同时重定向到同一个文件。 + + ```bash + (cd 99 || cat za.txt) &>z.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> z.txt | sort > as.txt + ``` + + 这个命令会在根目录下查找所有以 `.log` 结尾的文件,将错误信息重定向到 `z.txt`,并将结果进行排序后保存到 `as.txt`。 + +### 总结 + +- **重定向**: + + - `>`:将输出重定向到文件(覆盖)。 + - `>>`:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + +- **管道 `|`**: + + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + +## 思考: + +``` +<< 是什么功能? +从标准输入中读入,直到遇见分界符才停止。 +假设你有一个 Bash 脚本 process_text.sh,你可以使用 Here Document 传递输入给它: + +bash +./process_text.sh << END +Input line 1 +Input line 2 +Input line 3 +END +在这个例子中: + +./process_text.sh 是脚本。 +<< END 开始 Here Document,END 是分界符。 +从下一行开始,直到遇到 END,中间的所有内容都会被作为输入传递给 process_text.sh 脚本。 + + + + +()把命令包括起来,是干什么功能? +在Linux中,用圆括号 () 把命令包括起来,可以创建一个子Shell(subshell)来执行这些命令。子Shell是一个新的Shell进程,它会继承当前Shell的环境变量和其他设置,但它所做的任何更改(如修改环境变量或当前目录)都不会影响父Shell。 + +(cd /tmp && ls) +上述命令会在子Shell中切换到 /tmp 目录,然后列出该目录中的文件。当这个子Shell结束后,当前Shell的工作目录依然保持不变。 +() 创建一个新的子Shell运行括号内的命令,不影响父Shell的环境。 + +另一个类似的用法是使用花括号 {},但是与 () 不同的是,花括号不会创建子Shell,而是在当前Shell中执行命令。 + +{ cd /tmp && ls; } +这个命令会在当前Shell中执行,因此如果成功,当前Shell的工作目录将会改变。 + +{} 在当前Shell中运行括号内的命令,可能会影响当前Shell的环境。 + + +``` \ No newline at end of file diff --git "a/09 \345\272\204\347\217\212\347\217\212/20240615 \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/09 \345\272\204\347\217\212\347\217\212/20240615 \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..b20e36f9bb8dc0cc9944949bf08060cf125473f9 --- /dev/null +++ "b/09 \345\272\204\347\217\212\347\217\212/20240615 \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,259 @@ +## 用户和用户组管理 + +- 用户管理 + - 添加账户 useradd -m -s /bin/bash db2 + - 删除账户 userdel -r db2 + - 修改账户 usermod [选项同添加账户] db2 + - 查看帐户 getent passwd db2 +- 用户组管理 + - 添加用户组 groupadd stu1 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -aG stu1 db2 +- 密码管理 + - 设置密码 passwd [选项] 用户名 + - 用户锁定 passwd -l 用户名 + - 锁定(解锁后)查看用户状态 passwd -S 用户名 +- 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/{zonghe,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 -e 设置用户过期时间 -f 设置用户密码过期后禁用时间 + + 用户密码过期后的禁用时间 useradd -e YYYY-mm-dd -f 天数 用户名 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# sudo useradd -e 2020-12-30 kylin + root@iZf8z0fteup6jn2q17chm5Z:~# sudo useradd jerry + root@iZf8z0fteup6jn2q17chm5Z:~# sudo useradd tsengia + root@iZf8z0fteup6jn2q17chm5Z:~# sudo useradd obama + root@iZf8z0fteup6jn2q17chm5Z:~# cat /etc/passwd (查看所有用户) + ``` + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# useradd zonghe + + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG zonghe jerry + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG zonghe kylin + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG zonghe tsengia + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG zonghe obama + ``` + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# useradd -m -s /sbin/nologin cucci + root@iZf8z0fteup6jn2q17chm5Z:~# useradd -m handy + + root@iZf8z0fteup6jn2q17chm5Z:~# cat /etc/password + cucci:x:1005:1005::/home/cucci:/sbin/nologin + handy:x:1006:1006::/home/handy:/bin/sh + ``` + +6. 将handy、cucci等用户添加到jishu组内 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# groupadd jishu + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG jishu handy + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG jishu cucci + + root@iZf8z0fteup6jn2q17chm5Z:~# cat /etc/group + jishu:x:1007:handy,cucci + ``` + +7. 将上述的所有用户均要求加入到guanli组内(jerry、kylin、tsengia、obama、handy、cucci) + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# groupadd guanli + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG guanli jerry + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG guanli kylin + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG guanli tsengia + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG guanli obama + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG guanli handy + root@iZf8z0fteup6jn2q17chm5Z:~# usermod -aG guanli cucci + + root@iZf8z0fteup6jn2q17chm5Z:~# cat /etc/group + guanli:x:2003:jerry,kylin,tsengia,obama,handy,cucci + ``` + +8. 将zonghe组内的obama用户删除 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# userdel -r obama + ``` + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# passwd jerry + New password: 123456 + Retype new password: 123456 + passwd: password updated successfully + + root@iZf8z0fteup6jn2q17chm5Z:~# passwd cucci + New password: + Retype new password: + passwd: password updated successfully + ``` + +10. 将jerry用户锁定,并查看锁定状态 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# passwd -l jerry + passwd: password changed. + root@iZf8z0fteup6jn2q17chm5Z:~# passwd -S jerry + jerry L 2024-06-14 0 99999 7 -1 + ``` + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个(fuser -k 进程id) + + ``` + 两个进程打开 都输入who或w + fuser -k 进程id + ``` + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# groups cucci + cucci : cucci jishu guanli + root@iZf8z0fteup6jn2q17chm5Z:~# id cucci + uid=1005(cucci) gid=1005(cucci) groups=1005(cucci),1007(jishu),2003(guanli) + ``` + +13. 手工创建账号student(预留) (用户组 用户 用户密码) + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# sudo groupadd student_group + root@iZf8z0fteup6jn2q17chm5Z:~# sudo useradd -g student_group student + root@iZf8z0fteup6jn2q17chm5Z:~# sudo passwd student + New password: 666 + Retype new password: 666 + Sorry, passwords do not match. + passwd: Authentication token manipulation error + passwd: password unchanged + ``` + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 (权限修改 chown) + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chown :guanli /guanli + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chown :zonghe /guanli/zonghe + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chown :jishu /guanli/jishu + + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chmod o-rwx /guanli + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chmod o-rwx /guanli/zonghe + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chmod o-rwx /guanli/jishu + ``` + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chmod u=rwx /ceshi + root@iZf8z0fteup6jn2q17chm5Z:~# sudo chmod o-rwx /ceshi + ``` + +16. 清除jerry用户密码 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# sudo passwd -d jerry + ``` + +17. 锁定cucci用户密码并查看状态 + + ``` + root@iZf8z0fteup6jn2q17chm5Z:~# passwd -l cucci + root@iZf8z0fteup6jn2q17chm5Z:~# passwd -S cucci + cucci L 2024-06-14 0 99999 7 -1 + ``` + +18. 修改obama用户的UID为8888 + + ``` + sudo usermod -u 8888 obama + ``` + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ``` + sudo passwd -x 60 kylin + ``` + +20. 通过id groups等命令查看用户handy信息 + +``` +id groups +``` +