From 12d3c0ec716a98ef010353bf9a0e8a79bb7479cd Mon Sep 17 00:00:00 2001 From: dzj1688 <166727657@qq.com> Date: Mon, 17 Jun 2024 00:23:14 +0800 Subject: [PATCH] =?UTF-8?q?linux=E7=9F=A5=E8=AF=86=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...06\347\273\203\344\271\240\351\242\230.md" | 245 ++++++++++++++++++ ...20\350\227\217\346\235\203\351\231\220.md" | 114 ++++++++ ...73\345\212\241\347\256\241\347\220\206.md" | 114 ++++++++ ...57\345\242\203\345\217\230\351\207\217.md" | 62 +++++ 4 files changed, 535 insertions(+) create mode 100644 "\351\222\237\345\207\244\350\213\261/20240606 \346\235\203\351\231\220\347\256\241\347\220\206\347\273\203\344\271\240\351\242\230.md" create mode 100644 "\351\222\237\345\207\244\350\213\261/20240607 Linux\347\232\204\351\232\220\350\227\217\346\235\203\351\231\220.md" create mode 100644 "\351\222\237\345\207\244\350\213\261/20240612 Linux\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" create mode 100644 "\351\222\237\345\207\244\350\213\261/20240613 Linux\347\216\257\345\242\203\345\217\230\351\207\217.md" diff --git "a/\351\222\237\345\207\244\350\213\261/20240606 \346\235\203\351\231\220\347\256\241\347\220\206\347\273\203\344\271\240\351\242\230.md" "b/\351\222\237\345\207\244\350\213\261/20240606 \346\235\203\351\231\220\347\256\241\347\220\206\347\273\203\344\271\240\351\242\230.md" new file mode 100644 index 0000000..614080d --- /dev/null +++ "b/\351\222\237\345\207\244\350\213\261/20240606 \346\235\203\351\231\220\347\256\241\347\220\206\347\273\203\344\271\240\351\242\230.md" @@ -0,0 +1,245 @@ +1. 创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) + + ```bash + mkdir -p /guanli/{zonghe,jishu} + 查看 + ls /guanli + + ls -a /guanli + 查看包括隐藏文件在内的所有内容 + + ls -d /guanli/* + 只想查看目录,不包括文件 + + ``` + + + +2. 添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、200300 + + ```bash + groupadd -g 2001 zonghe + groupadd -g 2002 caiwu + groupadd -g 2003 jishu + 查看 + groups 用户名 + + getent group 用户组 + getent命令可以用来从各种数据库中获取信息,包括组信息 + + grep 组名 /etc/group + 只想查看特定组的GID + + cat /etc/group + + + ``` + + + +3. 创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 + + ```bash + 修改账号的到期时间 + usermod -e “到期时间” 用户名 + + 取消时间 + usermod -e “” 用户名 + + 查看 + chage -l 用户 + passwd -S 用户 + + + 十二个月份的英文单词及缩写: + 1月January —— Jan + 2月February —— Feb + 3月March —— Mar + 4月April —— Apr + 5月May —— May + 6月June —— Jun + 7月July —— Jul + 8月August—— Aug + 9月September —— Sept + 10月October —— Oct + 11月November —— Nov + 12月December—— Dec + + ``` + + + +4. 将jerry、kylin、tsengia、obama等用户添加到zonghe组内 + + ```bash + 把用户添加到用户组 + sudo gpasswd -a 用户 用户组 + + 把用户添加到工作组 + usermod -aG 工作组 用户名 + ``` + + + +5. 创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” + + ```bash + sudo useradd -s /sbin/nologin 用户 + + 查看 + grep handy /etc/passwd + + ``` + + + +6. 将handy、cucci等用户添加到jishu组内 + + ```bash + 把用户添加到用户组 + sudo gpasswd -a 用户 用户组 + + 把用户添加到工作组 + usermod -aG 工作组 用户名 + ``` + + + +7. 将上述的所有用户均要求加入到guanli组内 + + ```bash + + ``` + + + +8. 将zonghe组内的obama用户删除 + + ```bash + sudo gpasswd -d obama zonghe + + sudo usermod -G "" obama + "" 表示将用户从所有组中删除,包括zonghe组 + ``` + + + +9. 为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” + + ```bash + sudo passwd 用户 + ``` + + + +10. 将jerry用户锁定,并查看锁定状态[root@localhost chen]# usermod -L jerry + + ```bash + sudo usermod -L 用户名 + 这条命令会在/etc/shadow文件中为指定用户的密码字段添加一个!前缀,这表示该账号已被锁定 + sudo passwd -l 用户名 + 条命令同样会修改/etc/shadow文件,为用户密码添加!前缀 + + 验证: + passwd -S 用户名 + 显示用户的密码状态,包括用户是否被锁定 + sudo grep '用户名' /etc/shadow + 如果用户被锁定,密码字段通常以!或*开头 + su - 用户名 + ssh 用户名@服务器地址 + 尝试使用该用户的账号登录系统,无论是通过SSH还是本地终端 + + 解锁用户 + sudo usermod -U 用户名 + sudo passwd -u 用户名 + ``` + + + +11. 打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 + +12. 查看cucci用户,属于那些组,并查看其详细信息 + + ```bash + 查看cucci用户,属于那些组 + groups cucci + id cucci + + 查看其详细信息 + getent passwd [用户名] + chfn -f cucci + ``` + + + +13. 手工创建账号student(预留) + + ```bash + sudo useradd student + sudo passwd student + sudo usermod -L student + ``` + + + +14. 设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 + + ```bash + sudo chown :guanli /guanli + sudo chmod 770 /guanli + + 查看 + ls -l /guanli + ls -l /guanli/zonghe + ls -l /guanli/jishu + ``` + + + +15. 建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 + + ```bash + sudo chown -R :技术组 /ceshi + sudo chmod 770 /ceshi + ``` + + + +16. 清除jerry用户密码 + + ```bash + sudo passwd -d 用户名 + + sudo chage -d 0 username + 使用chage命令强制用户下次登录时更改密码 + ``` + + + +17. 锁定cucci用户密码并查看状态 + + ```bash + sudo passwd -l cucci + sudo passwd -S cucci + ``` + + + +18. 修改obama用户的UID为8888 + + ```bash + sudo usermod -u 1001 obama + ``` + + + +19. 通过passwd命令修改kylin用户的最长密码使用期限为60天 + + ```bash + sudo passwd -x 60 kylin + sudo chage -M 60 kylin + ``` + + + +20. 通过id groups等命令查看用户handy信息 \ No newline at end of file diff --git "a/\351\222\237\345\207\244\350\213\261/20240607 Linux\347\232\204\351\232\220\350\227\217\346\235\203\351\231\220.md" "b/\351\222\237\345\207\244\350\213\261/20240607 Linux\347\232\204\351\232\220\350\227\217\346\235\203\351\231\220.md" new file mode 100644 index 0000000..57e97eb --- /dev/null +++ "b/\351\222\237\345\207\244\350\213\261/20240607 Linux\347\232\204\351\232\220\350\227\217\346\235\203\351\231\220.md" @@ -0,0 +1,114 @@ +# Linux 的隐藏权限 + + + +## 一、chattr + +## 命令格式 + +```bash + chattr [+-=] [属性] 文件或目录名 + + +表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性。 +``` + + + +## 属性 + +```bash +i: +如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; +如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件; + +a: +如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; +如果对目录设置 a属性,那么只允许在目录中建立和修改文件,但是不允许删除文件; + +u: +设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录 + +s: +和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复 +``` + + + +### 实验步骤 + +#### 步骤1:创建测试文件 + +首先,创建一个测试文件用于实验: + +```bash +touch testfile.txt +``` + +#### 步骤2:给文件添加不可更改属性(i属性) + +使用`chattr`命令给文件添加不可更改属性,使其无法被删除或修改: + +```bash +chattr +i testfile.txt +``` + +#### 步骤3:查看文件的隐藏权限 + +使用`lsattr`命令查看文件的隐藏权限: + +```bash +lsattr testfile.txt +``` + +你将看到`i`属性被添加到了文件上,表示文件不可更改。 + +#### 步骤4:尝试删除或修改文件 + +尝试删除或修改文件,你将发现无法进行这些操作: + +```bash +rm testfile.txt +``` + +或者: + +```bash +echo "test" >> testfile.txt + + +echo:是一个命令行工具,用于在终端上显示(打印)文本或变量的内容 + >>:重定向操作符,用于将命令的输出追加到文件的末尾。如果文件不存在,则会创建该文件 +``` + +或者 + +```bash +echo "test" > testfile.txt +>:重定向操作符,用于将命令的输出重定向到指定的文件中。如果文件不存在,它会创建文件;如果文件已存在,则会覆盖文件原有内容 +``` + +这三条命令都应该会失败,并显示错误消息。 + +#### 步骤5:移除文件的不可更改属性 + +使用`chattr`命令移除文件的不可更改属性: + +```bash +chattr -i testfile.txt +``` + +#### 步骤6:再次尝试删除或修改文件 + +现在文件已经不再有不可更改属性,你可以正常删除或修改它: + +```bash +rm testfile.txt +``` + +或者: + +```bash +echo "test" >> testfile.txt +``` + +这些命令现在应该能够成功执行。 \ No newline at end of file diff --git "a/\351\222\237\345\207\244\350\213\261/20240612 Linux\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" "b/\351\222\237\345\207\244\350\213\261/20240612 Linux\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" new file mode 100644 index 0000000..69812a6 --- /dev/null +++ "b/\351\222\237\345\207\244\350\213\261/20240612 Linux\345\221\250\346\234\237\344\273\273\345\212\241\347\256\241\347\220\206.md" @@ -0,0 +1,114 @@ +Linux周期任务管理主要依赖于cron系统,它允许用户在特定的时间间隔自动执行命令或脚本。cron系统由cron守护进程(crond)管理,该进程在后台运行,并按照用户定义的时间表执行任务。 + +### cron系统的主要组件: + +1. **cron守护进程(crond)**:负责在指定的时间执行任务。 +2. **crontab文件**:存储用户定义的周期性任务列表。 +3. **crontab命令**:用于编辑和管理用户的crontab文件。 + +### crontab文件的格式: + +crontab文件中的每一行代表一个任务,格式如下: + + 分钟 小时 日 月 星期 命令 + + +* **分钟**:0-59 +* **小时**:0-23 +* **日**:1-31 +* **月**:1-12 +* **星期**:0-7(0和7都代表星期日) + +例如,以下crontab条目会在每天凌晨1点执行`/usr/bin/example_script.sh`: + + 0 1 * * * /usr/bin/example_script.sh + + +### crontab命令的使用: + +* **编辑当前用户的crontab文件**:`crontab -e` +* **列出当前用户的crontab条目**:`crontab -l` +* **删除当前用户的crontab文件**:`crontab -r` + +### 系统级的cron任务: + +* **全局配置文件**:`/etc/crontab`,用于调度系统管理和维护任务。 +* **系统默认设置**:位于`/etc/cron.d/`目录下。 +* **用户定义的设置**:位于`/var/spool/cron/用户名`。 + +### 注意事项: + +* **环境变量**:crontab任务执行时,环境变量可能与登录shell不同,因此可能需要显式设置环境变量。 +* **日志记录**:crontab任务的输出默认会通过邮件发送给用户,也可以重定向到文件进行日志记录。 +* **权限**:只有root用户和授权的用户才能编辑系统级的crontab文件。 + +### 实例: + +假设您想每天晚上10点清理/tmp目录下的旧文件,可以创建一个脚本`clean_tmp.sh`,内容如下: + + #!/bin/bash + find /tmp -mtime +7 -exec rm {} \; + + +然后,将以下条目添加到您的crontab文件中: + + 0 22 * * * /path/to/clean_tmp.sh + +这样,每天晚上10点,`clean_tmp.sh`脚本就会被执行,删除/tmp目录下7天前的文件。 + + + +### 周期任务管理符号意义: + +在Linux中,周期任务管理通常使用`crontab`命令来设置。在`crontab`中,星号(`*`)是一个特殊的通配符,它代表所有可能的值 + +星号(`*`)可以出现在上述任何一列,表示该列的所有可能值。例如: + +```bash + `* * * * *` 表示每分钟执行一次。 + `0 * * * *` 表示每小时的第一分钟执行一次。 + `0 0 * * *` 表示每天的午夜执行一次。 + `0 0 * * 0` 表示每周日的午夜执行一次。 +``` + +使用星号可以非常灵活地设置任务的执行时间 + + + +除了星号(`*`)之外,`crontab`还支持其他几个特殊字符和符号,用于更精确地定义任务的执行时间: + +```bash +1. 逗号(`,`):用于分隔多个值。例如,`1,5,10 * * * *` 表示在每小时的第1分钟、第5分钟和第10分钟执行任务。 + +2. 连字符(`-`):用于定义一个范围。例如,`1-5 * * * *` 表示在每小时的第1分钟到第5分钟之间执行任务。 + +3. 斜杠(`/`):用于定义步长。例如,`*/5 * * * *` 表示每5分钟执行一次任务。在小时列中,`10-18/2` 表示从10点到18点,每隔2小时执行一次任务。 + +4. 分号(`;`):在同一行中分隔多个命令。例如,`* * * * * command1; command2` 表示在同一时间执行两个命令。 + +5. 井号(`#`):用于注释。在`crontab`文件中,`#`后面的内容会被视为注释,不会被执行 +``` + + + +这些特殊字符和符号使得`crontab`非常强大,可以满足各种复杂的定时任务需求。 + +例如: + +```bash +# 每小时的第3和第15分钟执行 +3,15 * * * * command + +# 每天的上午8点到11点的第3和第15分钟执行 +3,15 8-11 * * * command + +# 每周的星期五下午3点到5点的第3和第15分钟执行 +3,15 15-16 * * 5 command + +# 每月的第3和第15天,以及每月的最后一天的第3和第15分钟执行 +3,15 3,15,29,31 * * * command + +# 每年的1月1日的上午8点到11点的第3和第15分钟执行 +3,15 8-11 1 1 * command +``` + diff --git "a/\351\222\237\345\207\244\350\213\261/20240613 Linux\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/\351\222\237\345\207\244\350\213\261/20240613 Linux\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000..164891b --- /dev/null +++ "b/\351\222\237\345\207\244\350\213\261/20240613 Linux\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,62 @@ +## 环境变量 + +环境变量是指在操作系统中用于存储和管理环境信息的特殊变量。这些信息通常与当前登录用户及其运行环境相关,例如用户的搜索路径、用户名、主机名、 terminal 类型等。 + +在 Linux 系统中,环境变量可以被程序读取和修改,并可以在整个系统或当前用户生效。环境变量的值可以是字符串、路径或其他数据类型。 + +1. ### Linux 系统中常见的环境变量有: + +```bash +1. `PATH`:用于指定系统搜索命令的路径,格式为 `:` 分隔的路径列表,例如 `/usr/bin:/usr/local/bin:/bin`。 +2. `HOME`:用于指定当前用户的主目录,例如 `/home/username`。 +3. `SHELL`:用于指定当前用户使用的 shell,例如 `/bin/bash`。 +4. `USER`:用于指定当前用户的用户名,例如 `username`。 +5. `HOSTNAME`:用于指定当前主机的主机名,例如 `hostname.domain`。 +6. `TERM`:用于指定当前 terminal 的类型,例如 `xterm`。 +7. `PS1`:用于指定 shell 提示符,例如 `\\u@\\h:\\w\\$`。 + +``` + +### 2.查看环境变量: + +可以使用 `echo` 命令显示当前环境变量的值,例如 `echo $PATH` 可以显示当前搜索路径。 + +```bash +echo $PATH +``` + +### 3.修改环境变量 + +使用 `export` 命令设置或修改环境变量,例如 : + +```bash +export PATH=$PATH:/new/path //可以添加新路径到搜索路径中 +``` + +### 4.删除环境变量 + +使用`unset`命令可以删除环境变量: + +```bash +unset PATH //删除搜索路径变量 +``` + +#### 5.重新加载修改后的环境变量 + +可以使用 `source` 命令重新加载修改后的环境变量,例如 `source ~/.bashrc` 可以重新加载当前用户的 bash 配置文件。 + +```bash +source ~/.bashrc +``` + +### 6.永久配置环境变量 + +```bash +要永久配置环境变量,可以在`~/.bashrc`或`~/.bash_profile`(对于Bash shell)文件中添加或修改环境变量设置。 +``` + + + +##### 环境变量可以被程序读取和修改,因此在编程时需要注意对环境变量的使用和修改。 + +##### 需要注意的是,修改环境变量只在当前进程生效,如果需要在系统或当前用户生效,需要使用 `export` 命令。 \ No newline at end of file -- Gitee