diff --git "a/29\351\203\221\347\216\211\347\216\262/14(\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/29\351\203\221\347\216\211\347\216\262/14(\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..72ac3819bc3371ef6b3719a17b11b82bd9e4ce0f --- /dev/null +++ "b/29\351\203\221\347\216\211\347\216\262/14(\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,277 @@ +## 用户和用户组管理 + +- 用户管理 + - 添加账户 useradd -m -s /bin/bash db2 + - 这里的-m选项表示创建用户的家目录, + - -s /bin/bash指定用户的默认shell为bash。 + - -e选项用于设置账号的失效时间,替换YYYY-MM-DD为您希望设置的具体日期。 + - 删除账户 userdel -r db2 + - 修改账户 usermod [选项同添加账户] db2 + - usermod -u uid 用户名 修改用户的uid + - 查看帐户 getent passwd db2 +- 用户组管理 + - 添加用户组 groupadd stu1 + - -g选项用于指定要分配给新组的GID(组标识符)号码 + - 删除用户组 groupdel stu1 + - 添加用户到用户组 usermod -a -G stu1 db2 + - 从用户组中删除某个用户 sudo gpasswd -d 用户名 用户组名 + - 查看存在的组以及组下的用户 cat /etc/group +- 密码管理 + - 设置密码 passwd + - passwd -x 时长 用户名 设置用户密码的使用期限 + - passwd -d 用户名 清除xx用户的密码 + - passwd -l 用户名 锁定xx用户 + - passwd -u 用户名 解除锁定 + - passwd -S 用户 查看用户状态 +- sudo权限管理 + - usermod -aG sudo xxx + - 修改/etc/sudoers文件 +- 登录权限管理 +- 用户环境管理 + - 用户配置文件 : .bashrc + - 用户环境变量: $PATH、$HOME、$SHELL + +## 文件与目录的权限管理 + +- 文件类型 + - -普通文件 + - d目录 + - l连接文件 + - b c s p 等其它文件 + +- 基本权限 + - r 读 + - w 写 + - x 执行 + +- 权限表示 + - 字符表示 + - 数字表示 + - 4 代表 r + - 2 代表 w + - 1 代表 x + - 权限修改 + - chmod 修改权限 + - chown 修改拥有者,设置文件归属 + - chown:目录属组 /目录/ + - chown root:root 修改权限的文件or目录 + - chgrp 修改所属组 + - 权限的继承 + - 目录权限下文件和目录的影响 + - umask + - 特权权限 + - SUID + - SGID + - SBIT + - 隐藏权限 + - i + - 用在文件上,无法对该文件进行任何修改 + - 用在目录上,无法在里面创建新文件,但可以修改已有文件 + - a + - 除了可追加内容外,无法进行其它修改 + - 隐藏权限的操作 + - 修改隐藏权限 chattr + - chattr +i XXX + - chattr -i XXX + - 查看隐藏权限 + - lsattr + + + +### 权限管理练习 + +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ```js + mkdir -p guanli/zonghe guanli/jishu + ``` + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 + + ```js + sudo groupadd -g 2001 zonghe + sudo groupadd -g 2002 caiwu + sudo groupadd -g 2003 jishu + (sudo groupadd -g 2001 zonghe ; sudo groupadd -g 2002 caiwu ; sudo groupadd -g 2003 jishu)//一条命令 + ``` + + + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + ```js + sudo useradd -m jerry (-m可以不要) + sudo useradd -m -e 2020-12-30 kylin + sudo useradd -m tsengia + sudo useradd -m obama + ``` + + + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ```js + sudo usermod -a -G zonghe jerry gpasswd -a jerry zonghe (也行)/ usermod -Ga zonghe jerry/ + sudo usermod -a -G zonghe kylin + sudo usermod -a -G zonghe tsengia + sudo usermod -a -G zonghe obama + sudo usermod -aG zonghe jerry kylin tsengia obama + ``` + + + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ```js + useradd -s/sbin/nologin cucci + useradd handy + ``` + + + +6. 将handy、cucci等用户添加到jishu组内 + + ```js + sudo usermod -a -G jishu handy + sudo usermod -a -G jishu cucci + ``` + + + +7. 将上述的所有用户均要求加入到guanli组内 + + ```js + sudo groupadd guanli + sudo usermod -a -G guanli cucci + sudo usermod -a -G guanli kylin + sudo usermod -a -G guanli jerry + sudo usermod -a -G guanli obama + sudo usermod -a -G guanli tsengia + sudo usermod -a -G guanli handy + tail -6 /etc/group查看guanli组内的用户 + ``` + + + +8. 将zonghe组内的obama用户删除 + + ```js + sudo gpasswd -d obama zonghe + ``` + + + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ```js + passwd jerry + passwd cucci + (使用stdin方法) + echo "redhat" | passwd --stdin cucci + ``` + + + +10. 将jerry用户锁定,并查看锁定状态 + + ```js + passwd -l jerry 锁定 + passwd -S jerry 查看状态,S大写 + ``` + + + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + + ```js + (如果显示command not found就说明没下载安装包,要下载apt install psmisc) + who + fuser -k /dev/pts/0 + who + ``` + + + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ```js + id cucci/groups cucci/finger cucci() + ``` + + + +13. 手工创建账号student(预留) + + + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ```js + chown:guanli/guanli + chown:zonghe /guanli/zonghe/ + chown:jishu /guanli/jishu/ + chmod o= guanli + chmod o= zonghe + chmod o= jishu + ``` + + + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ```js + mkdir ceshi + chmod u=rwx/ceshi + chmod g=rwx/ceshi + ls -ld /ceshi + chmod o=rwx/ceshi + ls -ld /ceshi/ + ``` + + + +16. 清除jerry用户密码 + + ```js + passwd -d jerry + ``` + + + +17. 锁定cucci用户密码并查看状态 + + ```js + passwd -l cucci + passwd -S cucci + ``` + + + +18. 修改obama用户的UID为8888 + + ```js + usermod -u 8888 obama + ``` + + + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ```js + passwd -x 60 kylin + ``` + + + +20. 通过id groups等命令查看用户handy信息 + + ```js + id handy + groups handy + ``` + + + +退出进程 ctrl+d + +或者输入exit后按回车键 diff --git "a/29\351\203\221\347\216\211\347\216\262/15(\345\221\250\346\234\237\346\200\247\344\273\273\345\212\241\347\256\241\347\220\206).md" "b/29\351\203\221\347\216\211\347\216\262/15(\345\221\250\346\234\237\346\200\247\344\273\273\345\212\241\347\256\241\347\220\206).md" new file mode 100644 index 0000000000000000000000000000000000000000..9f996cb0f93de8fc9b46229c327cce8feb71921f --- /dev/null +++ "b/29\351\203\221\347\216\211\347\216\262/15(\345\221\250\346\234\237\346\200\247\344\273\273\345\212\241\347\256\241\347\220\206).md" @@ -0,0 +1,194 @@ +# 周期性任务管理 + +#### 概念: + +#### 使用cron工具(执行周期性任务的工具)来设置和管理定期执行的任务,crontab文件存放cron指令 + +#### crond服务 + +crontab命令需要crond服务支持 + +```js +//安装cron软件包 +sudo apt update +sudo apt install cron +//安装完显示lines 1-21/21 (END)按q即可退出 +//查看cron服务的状态 +sudo systemctl status cron +//手动开启cron服务 +sudo systemctl enable cron +//验证cron服务已经启用并正在运行 +sudo systemctl is-enabled cron +sudo systemctl is-active cron +//关闭cron服务 +sudo service cron stop +``` + + + +#### cron的相关选项 + +- -u 查看用户下的定制任务,通常要在root权限下进行操作 +- -e 设置周期性任务 + - o在当前行的下一行输入,* * * * * echo 666 >> /tmp/access.log + - tail -f 文件 实时追踪命令 +- -l 查看当前任务 +- -r 删除任务 +- 查看当前任务 /etc/init.d/crond status +- 重启 /etc/init.d/crond/restart +- 每一项任务的执行在日志记录 /var/log/cron + +#### 设置规则 + +```js + * * * * * root 命令 + 分(m) 时(h) 日(dom) 月(mon) 星期(dow) 用户 命令 +* 星号是每的意思 +- 减号是连续一段时间,例如:0 17-19 * * * cmd #每天下午17点,18点,19点执行一次命令 +,逗号是多个时间段,例如:0 10,12 * * * cmd #每天上午10点,12点执行一次命令 +/n / 隔的意思,n代表数字,每隔n时间执行一次,例如:*/2 * * * * cmd #每隔2分钟执行一次命令 +``` + +执行周期设置说明 + +分钟 从0到59之间的数 + +小时 从0到23之间的数 + +日期 从1到31之间的数 + +月份 从1到13之间的数 + +星期 从0到7之间的数(0和7都代表7) + +#### 分隔命令内容 + +在 *command* 字段中,可以使用换行符、或者 % 字符来分隔命令内容。 + +在第一个 % 之前的内容会传递给 shell 来执行,这个 % 自身会被替换成换行符,在 % 之后、直到行末的内容都作为标准输入传递。 + +如果需要提供 % 字符自身,需要用 `\%` 进行转义 + +#### 周期任务练习 + +### 周期任务练习 + +执行在家目录touch a.txt + +1. 每天3:00执行一次 + + ```js + 0 3 * * * + ``` + +2. 每周六2:00执行 + + ```js + 0 2 * * 6 + ``` + +3. 每周六1:05执行 + + ```js + 5 1 * * 6 + ``` + +4. 每周六1:25执行 + + ```js + 25 1 * * 6 + ``` + +5. 每天8:40执行 + + ```js + 40 8 * * * + ``` + +6. 每天3:50执行 + + ```js + 50 3 * * * + ``` + +7. 每周一到周五的3:40执行 + + ```js + 40 3 * * 1-5 + ``` + +8. 每周一到周五的3:41开始,每10分钟执行一次 + + ```js + 41/10 3 * * 1-5 + ``` + +9. 每天的10:31开始,每2小时执行一次 + + ```js + 31 10/2 * * * + ``` + +10. 每周一到周三的9:30执行一次 + + ```js + 30 9 * * 1-3 + ``` + +11. 每周一到周五的8:00,每周一到周五的9:00执行一次 + + ```js + 0 8,9 * * 1-5 + ``` + +12. 每天的23:45分执行一次 + + ```js + 45 23 * * * + ``` + +13. 每周三的23:45分执行一次 + + ```js + 45 23 * * 3 + ``` + +14. 每周一到周五的9:25到11:35、13:00到15:00之间,每隔10分钟执行一次 + + ```js + 25-55/10 9 * * 1-5 + 5-55/10 10 * * 1-5 + 5-35/10 11 * * 1-5 + 0/10 13-14 * * 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分别执行一次 + + ```js + 30 8,9,10,11,13,14 * * 1-5 + 50 8 * * 1-5 + 0 10,11,14,5 * * 1-5 + ``` + +16. 每天16:00、10:00执行一次 + + ```js + 0 16,10 * * * + ``` + +17. 每天8:10、16:00、21:00分别执行一次 + + ```js + 10 8 * * * + 0 16,21 * * * + ``` + +18. 每天7:47、8:00分别执行一次 + + ```js + 47 7 * * * + 0 8 * * * + ``` + + + diff --git "a/29\351\203\221\347\216\211\347\216\262/16(\347\216\257\345\242\203\345\217\230\351\207\217).md" "b/29\351\203\221\347\216\211\347\216\262/16(\347\216\257\345\242\203\345\217\230\351\207\217).md" new file mode 100644 index 0000000000000000000000000000000000000000..fa982100ce4cf3cab56e7c6dd3dcef4040da7942 --- /dev/null +++ "b/29\351\203\221\347\216\211\347\216\262/16(\347\216\257\345\242\203\345\217\230\351\207\217).md" @@ -0,0 +1,307 @@ +# 环境变量 + +#### 系统启动: + +1、系统启动加载: /etc/environment 加载系统级别的环境变量,不管有没有登录 + +2、/etc/profile 系统被登录就加载,任何人登录 + +3、~/. profile 具体哪个人登录后,加载自己目录下的文件 + +4、加载对的shell配置文件,类似的有.zshrc .xshrc ~/.bashrc + + + +#### 用户级别的环境变量 + +- 存储在用户家目录的个人配置文件中,例如 ~/.bashrc ~/.profile + +- 用于定义用户个性化的shell配置 + +#### 系统级别的环境变量 + +- 存储在系统范围内的配置文件中,如/etc/environment /etc/profile +- 为所有用户和系统服务提供全局的环境配置 java_home + +#### 配置文件的加载顺序 + +/etc/environment > /etc/profile > ~/-profile > /.bashrc + +#### 一个命令被执行需要经过以下几步: + +- 先判断是不是绝对路径:是就直接执行,不是就下一步 +- 判断是不是别名,是别名就执行别名对应的命令,不是就下一步 +- 从环境变量PATH值对应的路径中找有没有这个命令,找到了就从那个路径去执行,找不到就下一步 +- 报错了,找不到该命令 + +查看当前所有的环境变量命令 + +env + +只有双引号才会解析变量,单引号不会 + +#### 临时设置环境变量:临时变量(局部),临时环境变量(全局) + +可以用export命令来临时设置一个环境变量,例如: + +```bash +export MY_VAR="value" #export 变量名=值 环境变量是全局的,整个环境有效 +MY_VAR="value" #少了export就是临时变量,不是全局的 +``` + +这种设置只有在当前shell会话中有效,关闭Shell会话后会失效 + +#### 永久设置环境变量: + +用户级别的:编辑用户的~/.bashrc 或 ~/.profile 文件,并添加如下行: + +```bash +export MY_VAR="value" +``` + +保存文件后,新的设置会在下次登录时生效 + +系统级别的:编辑/etc/environment或/etc/profile文件,并添加类似如下行: + +```bash +MY_VAR="value" +``` + +这里不需要使用export命令。保存文件后,变量会在系统启动时生效 + +#### 环境变量的设置和使用示例 + +设置路径变量(PATH) + +```BASH +# 在 ~/.bashrc中添加 +export PATH=$PATH:/path/to/your/scripts +``` + +定义java环境变量(JAVA_HOME) + +```BASH +# 在~/.bashrc 或 /etc、environment 中添加 +export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +export PATH=$JAVA_HOME/bin:$PATH +``` + +设置代理服务器(HTTP_PROXY、HTTPS_PROXY) + +```bash +# 在 ~/.bashrc中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTP_PROXY=http://proxy.example.com:8080 +``` + +配置编辑器(EDITOR) + +```js +# 在 ~/.bashrc中添加 +export EDITOR=/usr/bin/vim +``` + +设置语言和地区(LANG、LC_系列变量) + +```js +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +``` + +自定义命令别名(alias) + +```bash +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +``` + +设置临时环境变量 + +```bash +# 临时设置变量 +export MY_VAR="value" +``` + +常用环境变量 + +系统级 + +- PATH:可执行文件的搜索路径 +- LANG:定义系统的语言环境和字符集,export LANG=zh_CN.utf8,编辑文件不乱码 +- LANGUAGE:用于设置消息语言的优先级,提示语言为中文 +- EDITOR:默认文本编辑器editor + +用户级 + +- HOME:当前用户的主目录 +- USER:当前用户名 +- UID:当前用户的用户ID +- SHELL:当前用户的默认Shell + +#### 临时变量与环境变量 + +定义一个变量时,在变量名前加了export关键词,就是环境变量,作用域是全局环境子进程中也有效,否则就是临时变量,只在当前脚本文件或Shell中有效。 + +命令行实例: + +```bash +MY_NAME="张三" #临时变量(局部) +echo $MY_NAME +bash -c 'echo $MY_NAME' +# 什么结果?对比下面的效果 +export MY_NAME="张三" #临时变量(全局) +echo $MY_NAME +bash -c 'echo $MY_NAME' #子进程 +``` + +- 临时变量:在脚本中定义但不导出的变量,仅在脚本执行期间有效,不会影响其他shell会话或子进程。 + +- 环境变量:使用export导出的变量在当前shell会话和所有子进程中都有效 +- - 永久环境变量:写在指定类型的配置文件,永不失效~/.bashrc/etc/profile.d/xxx.sh + - 临时环境变量:临时使用export命令设置的环境 退出终端即失效 + - 系统级环境变量:对所有用户生效 /etc/profile.d/xxx.sh + - 用户级环境变量:只对当前用户生效~/.bash + +#### 环境变量练习 + +### 练习题 1: 显示当前所有的环境变量 + +* 使用`printenv`或`env`命令来显示所有的环境变量。 + + +```bash +printenv +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`的值。你会看到什么?为什么? + + ```bash + echo $MY_AGE + 看不到赋予的值,因为在新的会话中没有继承这个临时环境变量。 + 用export命令临时设置的,仅在当前会话有效 + ``` + + + +### 练习题 6: 修改`PATH`环境变量 + +* 将`你当前用户的家目录`添加到你的`PATH`环境变量的末尾位置 + + +```bash +export PATH="$HOME:$PATH" +``` + +将`/tmp`添加到你的`PATH`环境变量的开始位置,(注意:这可能会覆盖其他路径中的同名命令,所以请谨慎操作)。 + +``` +export PATH="/tmp:$PATH" +``` + +### 练习题 7: 验证`PATH`的修改 + +* 使用`echo`命令显示`PATH`的值,并确认`前面添加的目录`已经被添加到对应位置。 + + +```bash +echo $PATH +``` + +### 练习题 8: 永久设置环境变量 + +* 在你的shell配置文件中(如`~/.bashrc`、`~/.bash_profile`、`~/.zshrc`等,取决于你使用的shell和配置)添加一行来永久设置`MY_NAME`,值设置为`奥德彪`。 + +例如,对于bash shell,你可以使用: + + +```bash +echo 'export MY_NAME="奥德彪"' >> ~/.bashrc +``` + +如何让`MY_NAME`生效,并验证 + +``` +source ~/.bashrc +echo $MY_NAME +``` + +### 练习题 9: 清理 + +* 清除你之前设置的`MY_AGE`和`PATH`的修改(如果你不想永久保留它们)。 + + +```bash +sed -i '/MY_AGE/d' ~/.bashrc +sed -i '/^\/tmp/d' ~/.bashrc +sed -i '/MY_NAME/d' ~/.bashrc +source ~/.bashrc +``` + +### 练习题 10: 修改默认器 + +* 使用`EDITOR`变量,修改你默认的编辑器为nano。 + + +```bash +export EDITOR=nano +``` + +### 练习题 11: 修改语言 + +* 使用`LANG`变量,让你的文件支持中文和utf8编码来避免乱码。 + +``` + ls -l /etc/profile + 2021 /etc/profile + chmod +x /etc/profile + vim /etc/profile + export LANG=zh_CN.utf8 + source /etc/profile +``` + +- 使用`LANGUAGE`变量,让你的命令提示为中文 + +``` +ls -l /etc/profile +-rw-r--r-- 1 root root 769 Apr 11 2021 /etc/profile + chmod +x /etc/profile + vim /etc/profile + export LANGUAGE=zh_CN.utf8 + source /etc/profile + ls -W +ls: 不适用的选项 -- W +请尝试执行 "ls --help" 来获取更多信息。 +``` +