From 49f4cd1979965847963db0a000f800d878852564 Mon Sep 17 00:00:00 2001 From: liushilin <2251441389@qq.com> Date: Sat, 15 Jun 2024 17:03:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\345\222\214\347\256\241\351\201\223.md" | 124 ++++++++++++ ...07\344\273\266\346\235\203\351\231\220.md" | 179 ++++++++++++++++++ 2 files changed, 303 insertions(+) create mode 100644 "\345\210\230\350\257\227\347\220\263/15\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" create mode 100644 "\345\210\230\350\257\227\347\220\263/16.\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" diff --git "a/\345\210\230\350\257\227\347\220\263/15\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" "b/\345\210\230\350\257\227\347\220\263/15\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" new file mode 100644 index 0000000..0f0bffd --- /dev/null +++ "b/\345\210\230\350\257\227\347\220\263/15\351\207\215\345\256\232\345\220\221\345\222\214\347\256\241\351\201\223.md" @@ -0,0 +1,124 @@ +#### 重定向和管道 + +##### 0:标准输入(键盘输入) + +##### 1:标准输出(直接显示在屏幕,不包含错误信息) + +##### 2:标准错误 + +- **重定向**: + - `>`:将输出重定向到文件(覆盖)。 + - `>`:将输出追加到文件。 + - `<`:将文件内容作为输入。 + - `2>`:将错误输出重定向到文件。 + - `2>>`:将错误输出追加到文件。 + - `&>`:将标准输出和错误输出同时重定向到文件。 + - `&>>`:将标准输出和错误输出同时追加重定向到文件。 + +- **管道 `|`**: + - 将一个命令的输出作为另一个命令的输入,用于链式操作。 + + + +##### 1、覆盖输出重定向 > + +``` +ls > f1.txt +// 将ls命令的输出保存到f1.txt文件中,文件有则覆盖,无在创建 +``` + + + +##### 2、追加输出重定向 >> + +``` +echo "曾素萍是我的乖乖女儿" >> f1.txt +// 将内容追加到f1.txt里面 +``` + +##### 3、输入重定向 < + + + +``` +sort < f2.txt + //将f2.txt里面的内容进行排序 +``` + +##### 4、错误输出重定向 2> + +``` +find / -name '*.conf' 2> error.txt +//将错误输出重定向到error.txt文件中,之后显示的就全是标准输出(也就是对的,有权限的) +``` + + + +##### 5、错误输出追加重定向 2>> + +``` +ls fdafad 2>> error.txt +``` + + + +##### 6、分别保存错误的和正确的 > > + +``` +find / -name '*.conf' > right.txt 2> false.txt + +//要将错误的丢弃:find / -name '*.conf' > right.txt 2> /dev/null +``` + + + +##### 7、同时重定向标准输出和标准错误输出 &> + +``` +(1)find / -name '*.conf' &> all.txt (混合) + +(2)find / -name '*.conf' > all.txt 2>> all.txt (先对后错) +//也可以先将标准输出保存到all.txt,然后再将错误输出追加到all.txt中 + +(3(aaaa || bbbb || echo cccc) > 1.txt 2>&1 +//先将标准输出放进1.txt,然后再把错误输出放进和标准输出的文件中 +``` + + + +##### 8、 a和b是错误输出,c是标准输出 有多个命令要先执行用括号() + +``` +(aaaa || bbbb || echo cccc) > 1.txt 2>> 1.txt +``` + +##### 9、将错误的放进一个文件,正确的放进一个文件 + +``` +find / -name '*.conf' 2> false.txt | sort > true.txt + +// 前面的 2>false.txt 执行之后就剩下正确的,然后再排序放进一个文件中 +``` + +##### 10、输入和输出同时 + +``` +sort < number.txt >sort.txt + +//将数字先排序然后再保存 +``` + +#### + +#### tee + +`tee` 是一个在Unix和类Unix操作系统上非常有用的命令行实用程序。它的作用是从标准输入中读取数据,并同时将数据输出到标准输出和一个或多个文件中。 + +``` +(1)将内容保存到多个文件中 +echo www.liusl.top | tee one.txt two.txt + +(2)追加内容到文件中 +echo 域名 | tee -a one.txt +``` + diff --git "a/\345\210\230\350\257\227\347\220\263/16.\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" "b/\345\210\230\350\257\227\347\220\263/16.\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" new file mode 100644 index 0000000..662177e --- /dev/null +++ "b/\345\210\230\350\257\227\347\220\263/16.\347\224\250\346\210\267\344\270\216\346\226\207\344\273\266\346\235\203\351\231\220.md" @@ -0,0 +1,179 @@ +### 用户与权限 + +#### 一、用户与用户组 + +##### 1、用户管理 + +- 添加用户 useradd 原生底层命令 adduser加强版命令 +- 删除用户 userdel -r 删除用户和家目录、邮件目录 +- 修改用户 usermod + +##### 2、用户组管理 + +- 添加用户组 groupadd + +- 删除用户组 groupdel + +- 修改用户组 groupmod + + ``` + cat /etc/group //可以查看组账号 + id 用户名 //可以查看用户信息 + ``` + +##### 3、用户锁定 + +``` +usermod -L jerry // 锁定用户 +passwd -u jerry //解锁用户 +passwd -S jerry //查看用户状态 +``` + + + +##### 用户三个基本属性: + +用户 id (uid) + +主用户组 id (gid) + +附加用户组id (groups) + + + +#### 二、权限管理 + +##### 1、文件与目录的权限 + +##### 基本权限 + +- 读 read r 文件可以读取内容,目录可以浏览目录信息 +- 写 write w 文件可以修改内容,目录可以创建,删除文件或目录 +- 执行 execute 文件可执行,目录可以进入该目录 + +##### 2、权限的表达方式 + +字符:r w x + +数字:4 2 1 + +d 表示文件夹 + +— 表示普通文件 + +| 表示连接 + +##### 3、权限管理命令 + +修改权限的两种方法 + +``` +chmod 数字 文件名 + +chmod 字符 文件名 +``` + +“ + ” 追加权限 “ — ” 删除权限 ” = “ 覆盖权限 + +u 拥有者 g 拥有者所在的组 o 除以上两者外的其他人 a 所有人 + +``` +chown xxx 文件名 // 修改拥有者 +chgrp xxx 文件名 // 修改拥有者的组 +``` + + + +### 权限管理练习 + +``` +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 + + **groupadd zonghe -g 2001** + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + **useradd kylin** + + **usermod -e 2020-12-30 kylin** + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + **gpasswd -M tsengia,obama,kylin,jerry zonghe** + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + **useradd handy** + + **useradd -d /sbin/nologin cucci** + +6. 将handy、cucci等用户添加到jishu组内 + + **gpasswd -M handy,cucci jishu** + +7. 将上述的所有用户均要求加入到guanli组内 + + **gpasswd -M jerry,kylin,tsengia,obama,handy,cucci guanli** + +8. 将zonghe组内的obama用户删除 + + **gpasswd -d obama zonghe** + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + **passwd jerry** + +10. 将jerry用户锁定,并查看锁定状态 + + **usermod -L jerry** + + **passwd -S jerry** + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + 看不懂 + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + **id cucci** + +13. 手工创建账号student(预留) + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + **chgrp guanli guanli** + + **chgrp zonghe guanli/zonghe** + + **chgrp jishu guanli/jishu** + + **chmod -R 770 guanli** + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + **组修改拥有者:chgrp jishu ceshi** + + **chmod 770 ceshi** + +16. 清除jerry用户密码 + + **passwd -d jerry** + +17. 锁定cucci用户密码并查看状态 + + **passwd -S jerry** + +18. 修改obama用户的UID为8888 + + **passwd -d jerry** + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + **passwd -x 60 kylin** + +20. 通过id groups等命令查看用户handy信息 +groups handy +``` + -- Gitee From 374ceb94fc6a50a1a5b871895ff4988de53307c7 Mon Sep 17 00:00:00 2001 From: liushilin <2251441389@qq.com> Date: Wed, 19 Jun 2024 16:44:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...73\345\212\241\347\273\203\344\271\240.md" | 161 ++++++++++ ...57\345\242\203\345\217\230\351\207\217.md" | 299 ++++++++++++++++++ 2 files changed, 460 insertions(+) create mode 100644 "\345\210\230\350\257\227\347\220\263/17.\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" create mode 100644 "\345\210\230\350\257\227\347\220\263/18\347\216\257\345\242\203\345\217\230\351\207\217.md" diff --git "a/\345\210\230\350\257\227\347\220\263/17.\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" "b/\345\210\230\350\257\227\347\220\263/17.\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" new file mode 100644 index 0000000..d09ae29 --- /dev/null +++ "b/\345\210\230\350\257\227\347\220\263/17.\345\221\250\346\234\237\344\273\273\345\212\241\347\273\203\344\271\240.md" @@ -0,0 +1,161 @@ +#### 周期任务管理 crontab + +提交和管理用户的需要周期性执行的任务 + +- -e 编辑用户的计划表 +- -l 列出用户的计划表 +- -r 删除用户的计划表 + + + +“ * ” “ * ” “ * ” “ * ” “ * ” + + 分 时 天 月 星期(0代表星期天) + +/ 表示每个时间 + +— 表示几到几的范围 + +“ * ” 表示所有 + +“ ,” 表示指定的值 + +##### 系统级 + +系统级任务主要通过cron守护进程来管理。cron允许用户提供一个表来描述何时运行任务。表的格式对于每个字段的值有特定的约束。 + +``` +crontab -e +* * * * * 命令 +* * * * * 脚本文件 +``` + +##### 用户级 + +用户级任务可以通过at命令来管理。at命令允许用户安排任务在将来某个特定时间运行。 + + + +### 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 + + ``` + 00 3 * * * + ``` + +2. 每周六2:00执行 + + ``` + 00 2 * * 6 + ``` + +3. 每周六1:05执行 + + ``` + 05 1 * * 6 + ``` + +4. 每周六1:25执行 + + ``` + 25 1 * * 6 + ``` + +5. 每天8:40执行 + + ``` + 40 8 * * * + ``` + +6. 每天3:50执行 + + ``` + 50 3 * * * + ``` + +7. 每周一到周五的3:40执行 + + ``` + 40 3 * * 1-5 + ``` + +8. 每周一到周五的3:41开始,每10分钟执行一次 + + ``` + 41-59/10 3 * * 1-5 + ``` + +9. 每天的10:31开始,每2小时执行一次 + + ``` + 31 10/2 * * * + ``` + +10. 每周一到周三的9:30执行一次 + + ``` + 30 9 * * 1-3 + ``` + +11. 每周一到周五的8:00,每周一到周五的9:00执行一次 + + ``` + 00 8 * * 1-5 + 00 9 * * 1-5 + ``` + +12. 每天的23:45分执行一次 + + ``` + 45 23 * * * + ``` + +13. 每周三的23:45分执行一次 + + ``` + 45 23 * * 3 + ``` + +14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 + + ``` + 25,35,45,55 9 * * 1-5 + 5-59/10 10 * * 1-5 + 5,15,25,35 11 * * 1-5 + */10 13-15 * * 1-5 + ``` + +15. 每周一到周五的8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分别执行一次 + + ``` + 30,50 8 * * 1-5 + 30 9 * * 1-5 + */30 10-11 * * 1-5 + 30 13 * * 1-5 + */30 14 * * 1-5 + 00 5 * * 1-5 + ``` + +16. 每天16:00、10:00执行一次 + + ``` + 00 16,10 * * * + ``` + +17. 每天8:10、16:00、21:00分别执行一次 + + ``` + 10 8 * * * + 00 16,21 * * * + ``` + +18. 每天7:47、8:00分别执行一次 + +``` + 47 7 * * * + 00 8 * * * + +``` \ No newline at end of file diff --git "a/\345\210\230\350\257\227\347\220\263/18\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/\345\210\230\350\257\227\347\220\263/18\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000..9bad2ff --- /dev/null +++ "b/\345\210\230\350\257\227\347\220\263/18\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,299 @@ +## 环境变量 + +理解和使用Linux环境变量对于管理和配置系统至关重要。以下是关键的知识点、常用场景以及示例的综合整理: + +### 1. 环境变量的类型和作用 + +- **用户级别环境变量**: + - 存储在用户家目录的个人配置文件中,例如 `~/.bashrc`、`~/.profile`。 + - 用于定义**用户个性化**的Shell设置,如别名、路径等。 + +- **系统级别环境变量**: + - 存储在系统范围的配置文件中,如 `/etc/environment`、`/etc/profile` 。 + - 为**所有用户和系统服务**提供全局的环境设置。java_home + +### 2. 环境变量的加载顺序和文件 + +- **系统启动加载**:/etc/environment + +- **登录Shell加载顺序**: + - 首先加载 `/etc/profile`,然后根据用户登录方式加载 `~/.profile`(存在性依次加载)。 + - 非登录shell: su 切换用户 等 source + +- **交互式Shell加载顺序**: + - 加载 `~/.bashrc` 或类似文件,用于设置用户个性化的Shell环境。 + - 不同的shell加载不同的文件,bash才加载.bashrc,zsh加载.zshrc + - 交互式:提供命令行窗口,非交互式:直接写在脚本里 +- **总结来说** + - 配置文件的理论加载顺序通常是 `/etc/environment` > `/etc/profile` > `~/.profile` > `~/.bashrc`。【实验】 + +### 3. 设置环境变量的方法 + +​ 设置变量的位置:命令行(临时),脚本文件(永久) + +#### 3.1 临时设置环境变量:临时变量(局部),临时环境变量(全部) + +​ 可以使用 `export` 命令来临时设置一个环境变量,例如: + +```bash +export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 +MY_VAR="value" # 少了export 就是临时变量,不是全局的 +``` + +​ 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效。 + +#### 3.2 永久设置环境变量: + +​ **用户级别的** : 编辑用户的 `~/.bashrc` 或 `~/.profile` 文件,并添加如下行: + +```bash +export MY_VAR="value" +``` + +​ 保存文件后,新的设置会在下次登录时生效。 + +​ **系统级别的:** 编辑 `/etc/environment` 或 /etc/profile文件,并添加类似以下行: + +```plaintext +MY_VAR="value" +``` + +这里不需要使用 `export` 命令。保存文件后,变量会在系统启动时生效。 + +#### 3.3 环境变量的设置和使用示例 + +3.1 设置路径变量(PATH) + +```bash +# 在 ~/.bashrc 中添加 +export PATH=$PATH:/path/to/your/scripts +``` + +3.2 定义Java环境变量(JAVA_HOME) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +3.3 设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + +```bash +# 在 ~/.bashrc 中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 +``` + +3.4 配置编辑器(EDITOR) + +```bash +# 在 ~/.bashrc 中添加 +export EDITOR=/usr/bin/vim +``` + +3.5 设置语言和地区(LANG、LC_系列变量) + +```bash +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +``` + +3.6 自定义命令别名(alias) + +```bash +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +``` + +3.7 设置临时环境变量 + +```bash +# 临时设置变量 +export MY_VAR="value" +``` + +### 4. 常用环境变量 + +**系统级** + +* `PATH` 可执行文件的搜索路径 +* `LANG` 定义系统的语言环境和字符集, export LANG=zh_CN.utf8,编辑文件不乱码 +* `LANGUAGE` 用于设置消息语言的优先级 ,提示语言为中文 +* `EDITOR` 默认文本编辑器 editor + +**用户级** + +* **`HOME`** :当前用户的主目录。 +* **`USER`**:当前用户名。 +* **`UID`**:当前用户的用户ID。 +* **`SHELL`**:当前用户的默认Shell。 + +### 5. 临时变量与环境变量 + +定义一个变量时,在变量名前加了export关键字,就是环境变量,作用域是全局环境子子进程中也有效,否则就是临时变量,只在当前脚本文件或shell中有效。 + +命令行示例: + +```bash +MY_NAME="张三" # 临时变量(局部) +echo $MY_NAME +bash -c 'echo $MY_NAME' +# 什么结果?对比下面的效果 + +export MY_NAME="张三" # 临时变量(全局) +echo $MY_NAME +bash -c 'echo $MY_NAME' # 子进程 +# 看下效果 +``` + + + +脚本文件示例 : + +`test1.sh` + +```bash +#!/bin/bash +MY_NAME="张三" # 前面加上export再试一次 +echo "test:我的名字是:$MY_NAME" +./subscript.sh +``` + +`test2.sh`: + +```bash +#!/bin/bash +echo "test2:你的名字是: $MY_NAME" +``` + +**临时变量**:在脚本中定义但不导出的变量仅在脚本执行期间有效,不会影响其他 shell 会话或子进程。 + +**环境变量**:使用 `export` 导出的变量在当前 shell 会话和所有子进程中都有效。 + +### 6. 总结: + +### 4.1 分类 + +#### 按生命周期分 + +- 永久环境变量 写在指定类型的配置文件,永不失效 ~/.bashrc /etc/profile.d/xxx.sh +- 临时环境变量 临时使用export 命令设置的环境变量 退出终端即失效 + +#### 按作用域分 + +* 系统级环境变量 对所有用户生效 /etc/profile.d/xxx.sh +* 用户级环境变量 只对当前用户生效 ~/.bashrc + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash +env +``` +### 练习题 2: 显示`HOME`环境变量的值 + +* 使用`echo`命令和`$`符号来显示`HOME`环境变量的值。 + + +```bash +echo $HOME +``` +### 练习题 3: 临时设置一个新的环境变量 + +* 设置一个名为`MY_AGE`的环境变量,并将其值设置为`18`。 + + +```bash +export MY_AGE=18 +``` +### 练习题 4: 显示新设置的环境变量 + +* 使用`echo`命令来显示`MY_AGE`的值。 + + +```bash +echo $MY_VARIABLE +``` +### 练习题 5: 在新的shell会话中检查环境变量 + +* 打开一个新的终端窗口或标签页,并尝试显示`MY_AGE`的值。你会看到什么?为什么? + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +export PATH=$PATH:/root +``` +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +``` + +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash +echo $PATH +``` +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +export MY_NAME=恣意 +``` +如何让`MY_NAME`生效,并验证 + +``` +echo $MY_NAME +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash +unset MY_AGE +unset PATH +``` +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash + +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +``` +#language +LANG=zh_CN.UTF-8 +LANGUAGE=zh_CN.UTF-8 + +//.bashrc内 +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +``` +source .bashrc +``` + -- Gitee