From e2b2b3055aebae9692cbd9e31bfd1a354eb852a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9A=E5=B8=86?= <11827039+yao-fan666@user.noreply.gitee.com> Date: Sat, 22 Jun 2024 20:03:55 +0800 Subject: [PATCH] biji --- .../20240613\347\254\224\350\256\260.md" | 182 ++++++++++++++ .../20240616\347\254\224\350\256\260.md" | 182 ++++++++++++++ .../20240617\347\254\224\350\256\260.md" | 230 ++++++++++++++++++ .../20240619\347\254\224\350\256\260.md" | 137 +++++++++++ .../20240620\347\254\224\350\256\260.md" | 49 ++++ .../20240622\347\254\224\350\256\260.md" | 13 + 6 files changed, 793 insertions(+) create mode 100644 "\345\247\232\345\270\206/20240613\347\254\224\350\256\260.md" create mode 100644 "\345\247\232\345\270\206/20240616\347\254\224\350\256\260.md" create mode 100644 "\345\247\232\345\270\206/20240617\347\254\224\350\256\260.md" create mode 100644 "\345\247\232\345\270\206/20240619\347\254\224\350\256\260.md" create mode 100644 "\345\247\232\345\270\206/20240620\347\254\224\350\256\260.md" create mode 100644 "\345\247\232\345\270\206/20240622\347\254\224\350\256\260.md" diff --git "a/\345\247\232\345\270\206/20240613\347\254\224\350\256\260.md" "b/\345\247\232\345\270\206/20240613\347\254\224\350\256\260.md" new file mode 100644 index 0000000..ef12853 --- /dev/null +++ "b/\345\247\232\345\270\206/20240613\347\254\224\350\256\260.md" @@ -0,0 +1,182 @@ +重定向和管道 +在 Unix 和 Linux 系统中,文件描述符用于表示打开的文件或者输入/输出流。常用的文件描述符包括: + +0:标准输入(stdin): 键盘输入 +1:标准输出(stdout): 直接显示在屏幕,不包含错误信息 +2:标准错误(stderr): 只包含错误信息 +使用形式: + +定向符前直接用数字,如 1> 1.txt 、 2> 2.txt +定向符后紧跟定向符并加&号如 >&1 +重定向 +重定向允许将命令的输入或输出重定向到文件或其他命令。常用的重定向符号包括 >、>>、<、2> &>等。 + +输出重定向 +标准输出覆盖重定向 > + +将命令的标准输出重定向到一个文件,如果文件已经存在,则覆盖它。 + +ls > filelist.txt +这个命令将 ls 命令的输出保存到 filelist.txt 文件中,如果文件已存在,则会被覆盖。 + +追加输出重定向 >> + +将命令的标准输出追加到一个文件的末尾,如果文件不存在,则创建它。 + +echo "Hello, World!" >> greetings.txt +这个命令会将 "Hello, World!" 追加到 greetings.txt 文件中。 + +注意: + +标准输出不含错误信息 +输入重定向 +输入重定向 < + +将文件的内容作为命令的输入。 + +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' +错误输出重定向 2> + +将命令的错误输出重定向到一个文件。 + +reboot 2> error_log.txt +这个命令会将 ls 命令的错误信息保存到 error_log.txt 文件中。 + +错误输出追加重定向 2>> + +将命令的错误输出追加到一个文件。 + +ls non_existent_file 2>> error_log.txt +这个命令会将 ls 命令的错误信息追加到 error_log.txt 文件中。 + +同时重定向标准输出和标准错误输出 + +使用 &> 符号将标准输出和错误输出同时重定向到同一个文件。 + +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 文件中。 + +管道 | +管道符号 | 将一个命令的输出作为另一个命令的输入。管道是进行命令链式操作的重要工具。 + +使用场景 +将命令的输出传递给另一个命令 + +ls -l | grep "txt" +这个命令会将 ls -l 的输出传递给 grep "txt",只显示包含 "txt" 的行。 + +多命令链式操作 + +ps aux | grep "sshd" | awk '{print $2}' +这个命令链会列出所有进程 (ps aux),然后过滤包含 "sshd" 的行 (grep "sshd"),最后提取进程 ID (awk '{print $2}')。 + +示例解析 +使用管道和重定向的综合示例 +查找特定文件并将结果保存到文件 + +find / -name "*.conf" 2> errors.txt | sort > sorted_log_files.txt + +这个命令会在根目录下查找所有以 .log 结尾的文件,将错误信息重定向到 errors.txt,并将结果进行排序后保存到 sorted_log_files.txt。 + +总结 +重定向: + +>:将输出重定向到文件(覆盖)。 +`>>:将输出追加到文件。 +<:将文件内容作为输入。 +2>:将错误输出重定向到文件。 +2>>:将错误输出追加到文件。 +&>:将标准输出和错误输出同时重定向到文件。 +&>>:将标准输出和错误输出同时追加重定向到文件。 +管道 |: + +将一个命令的输出作为另一个命令的输入,用于链式操作。 +扩展: + +输入输出一起使用的情况 + +sort < a.txt > b.txt +重定向标准输出和错误输出到不同文件: + +若要将标准输出重定向到一个文件,将错误输出重定向到另一个文件,可以使用以下命令: + +command > output.txt > error.txt +这样,标准输出会被写入 output.txt文件,而错误输出则会被写入error.txt + +文件。 + +将错误输出追加到标准输出文件中: + +若要将错误输出追加到标准输出文件中,可以使用以下命令: + +command > output.txt 2>&1 +# 等效谁? +这会将标准输出写入output.txt文件,同时将错误输出追加到标准输出文件中。 + +将错误输出丢弃: + +若要忽略错误输出,可以将错误输出重定向到特殊设备 /dev/null + +,例如: + +command 2> /dev/null +这会将错误输出发送到 /dev/null ,从而丢弃错误输出而只保留标准输出 + +思考: +<< 是什么功能?here document +从标准输入中读入,直到遇见分界符才停止 +()把命令包括起来,是干什么功能? +用于函数调用:在编程中,圆括号用于调用函数,并传递参数。 +用于数学表达式:在数学中,圆括号用于改变运算的优先级。 +用于命令替换:在shell脚本中,圆括号可以用来执行命令并获取其输出。 +补充一个实用命令: + +tee 是一个在Unix和类Unix操作系统上非常有用的命令行实用程序。它的作用是从标准输入中读取数据,并同时将数据输出到标准输出和一个或多个文件中。 + +下面是 tee 命令的基本语法: + +tee [OPTION]... [FILE]... +[OPTION]: 一些选项,可以控制 tee 命令的行为。 +[FILE]: 一个或多个文件名,表示要将数据写入的目标文件。 +示例 1:简单的使用方式 +echo "Hello, world" | tee output.txt +在这个示例中,echo "Hello, world" 命令的输出被送到 tee 命令,然后 tee 将这个输出写入到 output.txt 文件,并同时将其输出到标准输出。 + +示例 2:同时写入多个文件 +echo "Hello, world" | tee file1.txt file2.txt +在这个示例中,tee 命令将 Hello, world 写入到 file1.txt 和 file2.txt 文件中,并同时将其输出到标准输出。 + +示例 3:追加写入文件 +echo "New data" | tee -a file1.txt +通过 -a 选项,tee 命令将数据追加写入到 file1.txt 文件中,而不是覆盖原有内容。 + +示例 4:结合重定向和管道 +command1 | tee >(command2) | command3 +在这个示例中,command1 的输出被送到 tee 命令,然后 tee 将输出传递给 command2,并且同时将输出发送到 command3。这种结构可以用于复杂的管道命令中。 + +选项 +-a:追加写入文件而不是覆盖。 +-i:忽略中断信号。 +--help:显示帮助信息和选项列表。 +--version:显示版本信息。 +总结 +tee 命令是一个灵活而强大的工具,可以用于在命令行中处理数据流,同时向多个文件写入数据。 \ No newline at end of file diff --git "a/\345\247\232\345\270\206/20240616\347\254\224\350\256\260.md" "b/\345\247\232\345\270\206/20240616\347\254\224\350\256\260.md" new file mode 100644 index 0000000..d5da2a4 --- /dev/null +++ "b/\345\247\232\345\270\206/20240616\347\254\224\350\256\260.md" @@ -0,0 +1,182 @@ +用户与文件权限的管理 +课后作业: + +​ 什么是linux 硬连接和软连接(快捷方式) +硬连接(Hard Link): + +硬连接是文件系统中两个或多个文件名指向同一个文件的inode(文件系统对象的元数据)。这意味着,只要有一个硬连接指向一个文件,即使原始文件被删除,只要至少有一个硬连接存在,该文件在系统中仍然可以被访问,直到所有的硬连接都被删除。 +特点: +硬连接创建时,会直接连接到目标文件的inode,所以多个硬连接的文件具有相同的权限、所有者和时间戳。 +硬连接不能链接到目录,也不能链接到同一个目录下的其他文件。 +使用ln -s命令创建硬链接时,需要明确指定-h或--hard选项,如ln -s source destination。 +软连接(Soft Link,也称为符号链接): + +软连接是文件系统中创建的一个指向其他文件或目录的特殊文件,它包含一个指向目标的路径。软链接可以是目录到目录、文件到文件或文件到目录。 +特点: +创建软连接时,会创建一个新的文件,包含一个指向目标文件或目录的路径信息,而不是目标的内容。 +软链接可以跨越不同的目录,甚至不同的文件系统。 +删除目标文件或目录后,软链接会失效,因为它指向的是一个已不存在的路径。 +创建软链接通常使用ln -s命令,如果没有指定类型,默认创建软链接。 +用户管理 + +分类 +超级用户 root ,最高权限,不受一般权限的限制,编号0 ,提示符是 # +内置用户 :由系统自动创建 ,编号1-999 +普通用户 :我们用root权限手动创建用户,受权限控制 ,编号从1000依次递增 +创建普通用户test会自动创建他的编号u ,他原生组g(和用户名同名test),附加组 G (test),初始化的时候一定是u 1000(test), 1000(test),1000(test) +普通不能创建普通用户,只有root +提示符是 $ +u user 用户 uid +group 组 gid +Group +用户 +添加 +useradd -m -d /home/YYY -s /bin/bash XXX +adduser +删除 +userdel XXX +userdel -r xxx 删除用户和相关的目录 +修改 +usermod -G 组号|组名 XXX : usermod -G stu u15 覆盖原来的附加组(扩展组) +usermod -aG 组号|组名 XXX : usermod -aG stu u15 保留原有附加组前提下,追加新的附加组 +usermod -s /bin/aaa u15 +密码 +passwd 用户名 root修改指定用户的密码 +passwd 修改当前登录用户的密码,即自己的密码 +查询 +id 用户名 指定用户 +/etc/passwd +切换 +su 仅仅切换了身份,不切换目录和shell等环境 +su - 完全切换,连环境变量和目录一起切换 +用户组:编号也是从1000开始 +添加 +groupadd student 添加一个组,编号自动的 +groupadd -g 8888 student2 添加一个组,编号自动的 +删除 groupdel 组号|名 +修改 groupmod +查询 +/etc/group +文件管理 + +文件属性:10个字符,连接数或子目录数,文件拥有者,文件所属的用户组,文件大小,修改时间,文件|目录名 +10个字符: +第1位 文件类型 +d 目录 +-普通文件 +l 连接文件 +b c s p 等其它文件 +后9位分别代表了:三种角色的权限,每3位一组 +2-4 拥有者权限 +5-7 用户组的权限 +8-10 其它人的权限 +基本权限 +读 r (read) : 打开并显示文件内容,查看目录基本信息 +写 w (write) : 文件,可以写入,修改,删除内容,目录:创建,修改,删除文件|目录 +执行 x (execute) :文件如果是二进制或脚本文件就可以执行,目录表示可以进入 +特殊权限 +SUID +GUID +隐藏权限 +lsattr 列出隐藏权限 +chattr 修改隐藏权限 ++i 增加,不得任意更动文件或目录的效果 +-i 消除 +权限表示 +字符 +数字 +r == 4 +w == 2 +x == 1 +身份表示 +u 拥有者 (user) +g 用户组(group) +o 其它人 (other) +a 所有人 (all) +修改权限 :root可以改任何文件,而拥有者可以改自己拥有文件 +chmod 要的权限 文件|目录 +chmod u+w,g-r,o=rw 1.txt +chmod 755 1.txt +修改拥有者 +chown 用户名 文件名 +修改文件所属的用户组 +chgrp 组名|号 文件|目录 +sudo +修改 /etc/sudoers 文件 +将 用户追加到sudo组 :sudo usermod -aG sudo u15 +Linux执行命令的过程 + +如果这个命令是绝对路径,就直接执行 +如果不是, +查一下是不是别名,是执行对应的命令 +从环境变量中找这个命令 $PATH中的路径依次查找这个命令 +本地也没有,就报错了。 +权限管理练习 +创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) +mkdir -p /guanli/zonghe /guanli/jishu +添加组帐号zonghe、caiwu、jishu,GID号分别设置为2001、2002、2003 +sudo groupadd -g 2001 zonghe +sudo groupadd -g 2002 caiwu +sudo groupadd -g 2003 jishu +创建jerry、kylin、tsengia、obama用户,其中的kylin用户帐号在2020年12月30日后失效 +sudo useradd jerry +sudo useradd kylin +sudo useradd tsengia +sudo useradd obama +sudo chage -E 2020-12-30 kylin +将jerry、kylin、tsengia、obama等用户添加到zonghe组内 +sudo usermod -aG zonghe jerry +sudo usermod -aG zonghe kylin +sudo usermod -aG zonghe tsengia +sudo usermod -aG zonghe obama +创建handy、cucci用户,其中cucci帐号的登录Shell设置为“/sbin/nologin” +sudo useradd handy +sudo useradd -s /sbin/nologin cucci +将handy、cucci等用户添加到jishu组内 +sudo usermod -aG jishu handy +sudo usermod -aG jishu cucci +将上述的所有用户均要求加入到guanli组内 +sudo groupadd guanli +sudo usermod -aG guanli jerry +sudo usermod -aG guanli kylin +sudo usermod -aG guanli tsengia +sudo usermod -aG guanli obama +sudo usermod -aG guanli handy +sudo usermod -aG guanli cucci +将zonghe组内的obama用户删除 +sudo gpasswd -d obama zonghe +为jerry用户设置密码为“123456”(使用普通方法)为cucci用户设置密码为“redhat” +echo "jerry:123456" | sudo chpasswd +echo "cucci:redhat" | sudo chpasswd +将jerry用户锁定,并查看锁定状态 +sudo passwd -l jerry +sudo passwd -S jerry +打开两个xshell窗口,通过(who 或者 w)命令查看连接状态,并通过fuser杀掉其中一个 +w +查看cucci用户,属于那些组,并查看其详细信息 +sudo id cucci +sudo getent passwd cucci +手工创建账号student(预留) +sudo useradd student +设置权限及归属:/guanli目录属组设为guanli, /guanli/zonghe目录的属组设为zonghe /guanli/jishu目录的属组设为jishu,设置3个目录都是禁止其他用户访问的权限 +chown -R :guanli /home/yan/guanli +chown -R :zonghe /home/yan/guanli/zonghe +chown -R :jishu /home/yan/guanli/jishu +chmod 770 guanli guanli/zonghe guanli/jishu +建立公共目录/ceshi允许技术组内的所有用户读取、写入、执行文件, 禁止其他用户读、写、执行 +cd / +sudo mkdir ceshi +sudo chown -R :jishu /ceshi +sudo chmod 770 /ceshi +清除jerry用户密码 +sudo passwd -d jerry +锁定cucci用户密码并查看状态 +sudo passwd -l cucci +sudo passwd -S cucci +修改obama用户的UID为8888 +sudo usermod -u 8888 obama +通过passwd命令修改kylin用户的最长密码使用期限为60天 +sudo chage -M 60 kylin +通过id groups等命令查看用户handy信息 +id handy +groups handy \ No newline at end of file diff --git "a/\345\247\232\345\270\206/20240617\347\254\224\350\256\260.md" "b/\345\247\232\345\270\206/20240617\347\254\224\350\256\260.md" new file mode 100644 index 0000000..77850d4 --- /dev/null +++ "b/\345\247\232\345\270\206/20240617\347\254\224\350\256\260.md" @@ -0,0 +1,230 @@ +1. 什么是Cron? +Cron是一种基于时间的任务调度程序,用于在特定时间或时间间隔自动执行任务。它是Unix类操作系统(包括Linux)中的一个守护进程,能够按照用户定义的时间表运行指定的脚本或命令。 + +“Cron” 的读音是 /krɒn/,“Cron”的读音在中文中可以表述为“克隆”(kè lóng)。 + +2. Cron的配置文件 +在Debian系统中,Cron任务的配置文件通常分为以下几类: + +用户级Cron任务:每个用户都有自己的Cron任务配置文件,位于/var/spool/cron/crontabs/username。 +系统级Cron任务:系统级的Cron任务配置文件位于/etc/crontab和/etc/cron.d/目录下。 +周期性任务目录:这些目录包含在特定时间间隔运行的脚本,例如: +/etc/cron.hourly/ +/etc/cron.daily/ +/etc/cron.weekly/ +/etc/cron.monthly/ +3. 编辑Cron任务 +3.1 使用crontab命令 +用户可以使用crontab命令来编辑、查看或删除自己的Cron任务【用户级】。 + +cron table 时间周期表,计划任务表 + +编辑Cron任务: + +crontab -e # edit +这将打开用户的Cron配置文件进行编辑。 + +查看Cron任务: + +crontab -l # list +这将列出用户当前的Cron任务。 + +删除Cron任务: + +crontab -r # remove +这将删除用户的所有Cron任务。 + +Cron任务语法 + +Cron任务的格式如下: + +* * * * * command_to_execute # command_to_execute 可以是命令也可以是包含命令的文件 +- - - - - +| | | | | +| | | | +----- 星期几 (0 - 7) (星期天 = 0 或 7) +| | | +------- 月份 (1 - 12) +| | +--------- 日期 (1 - 31) +| +----------- 小时 (0 - 23) ++------------- 分钟 (0 - 59) +例如,要每天凌晨3点执行一个备份脚本,可以添加以下条目: + +0 3 * * * /path/to/backup_script.sh +点击查看:cron表达式详细介绍以及常用的例子 + +3.2 使用/etc/crontab +系统级的Cron任务可以直接编辑/etc/crontab文件。该文件具有一个额外的字段用于指定运行任务的用户: + +# m h dom mon dow user command +17 * * * * root cd / && run-parts --report /etc/cron.hourly +25 6 * * 1 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) +47 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) +3.3 使用/etc/cron.d/ +在/etc/cron.d/目录下,可以创建单独的文件来定义Cron任务。每个文件的格式与/etc/crontab类似。 + +例如,可以在/etc/cron.d/mytasks中定义: + +30 2 * * * root /usr/local/bin/my_script.sh +3.4 特殊符号 +常用的如下: + +星号(*) + +含义:匹配任何值,,即每一。 +示例:在分钟字段中使用 * 表示每一分钟都运行一次任务。 +* * * * * /path/to/command +逗号(,) + +含义:指定一个列表值,列出所有指定值 a,b,c。 +示例:在小时字段中使用 0,6,12,18 表示任务将在每天的0点、6点、12点和18点运行。 +0 0,6,12,18 * * * /path/to/command +短横线(-) + +含义:指定一个范围值,开始-结尾。 +示例:在日期字段中使用 1-5 表示任务将在每个月的1号到5号之间运行。 +0 0 1-5 * * /path/to/command +斜杠(/) + +含义:指定步长值,即间隔。 +示例:在分钟字段中使用 */15 表示任务每15分钟运行一次。 +*/15 * * * * /path/to/command +L(Last) + +含义:表示最后一个。可以在月的天数或星期几中使用。 +示例:在日期字段中使用 L 表示每个月的最后一天。 +0 0 L * * /path/to/command +示例:在星期几字段中使用 5L 表示每个月的最后一个星期五。 +0 0 * * 5L /path/to/command +3.5 例子和应用 +每月的第一个工作日 + +0 9 1W * * /path/to/command +每月的最后一天 + +0 23 28-31 * * [ "$(date +\%d -d tomorrow)" == "01" ] && /path/to/command +每个月的最后一个星期五 + +0 23 * * 5L /path/to/command +每隔10分钟 + +*/10 * * * * /path/to/command +通过使用这些特殊符号,可以灵活地定义各种复杂的时间调度任务,使得cron更加强大和易用。 + +3.6 注意事项 +路径问题:Cron任务运行时使用的环境变量可能与用户的交互式Shell不同,确保在脚本中使用绝对路径。 +权限问题:确保脚本具有可执行权限,并且Cron任务的用户有权限执行该脚本。 +4. 系统级任务 +4.1 crontab 和 cron.d +在Debian和其他基于Unix的操作系统中,/etc/crontab 和 /etc/cron.d/ 目录用于管理系统级的计划任务。虽然它们的功能类似,但在使用场景和配置格式上有一些细微的区别。以下是它们的详细介绍和使用场景: + +4.1.1 /etc/crontab +特点: + +全局配置文件:/etc/crontab 是一个全局配置文件,用于定义系统级的定时任务。 + +文件格式:与用户级的 crontab 文件相比,/etc/crontab 多了一个字段,用于指定执行任务的用户。格式如下: + +m h dom mon dow user command +例如: + +30 2 * * * root /usr/local/bin/backup.sh +这行表示每天凌晨2:30以root用户的身份执行 /usr/local/bin/backup.sh。 + +使用场景: + +统一管理系统任务:适合定义一些系统级的任务,比如系统备份、日志轮替等。 +需要不同用户执行的任务:如果需要在同一文件中定义由不同用户执行的任务,可以使用 /etc/crontab。 +4.1.2 /etc/cron.d/ +特点: + +目录结构:/etc/cron.d/ 目录中可以包含多个文件,每个文件可以定义多个任务。 +文件格式:与 /etc/crontab 文件的格式相同,需要包含一个用户字段。格式如下: +m h dom mon dow user command +例如,在 /etc/cron.d/mytasks 文件中: +0 4 * * * root /usr/local/bin/daily_task.sh +15 14 1 * * user /usr/local/bin/monthly_report.sh +使用场景: + +模块化管理:适合将不同的任务分模块管理,每个模块一个文件。例如,可以为不同的应用程序或服务创建单独的文件。 +包管理系统的任务:一些软件包在安装时会自动在 /etc/cron.d/ 中创建任务文件,这是包管理系统用来添加特定任务的常见方法。 +4..13 选择使用场景 +统一和简洁管理: + +如果你希望在一个文件中集中管理所有系统级的Cron任务,可以使用 /etc/crontab。 +适合于系统管理员需要定期检查和修改所有任务的场景。 +分离和模块化管理: + +如果你希望将Cron任务按模块或应用分开管理,使用 /etc/cron.d/ 是更好的选择。 +适合于不同团队或不同软件包管理各自的定时任务,避免相互干扰。 +4.1.4 示例对比 +/etc/crontab 示例: + +# m h dom mon dow user command +30 2 * * * root /usr/local/bin/backup.sh +45 3 * * 7 user /usr/local/bin/cleanup.sh +/etc/cron.d/backup 示例: + +# m h dom mon dow user command +30 2 * * * root /usr/local/bin/backup.sh +/etc/cron.d/cleanup 示例: + +# m h dom mon dow user command +45 3 * * 7 user /usr/local/bin/cleanup.sh +通过这种方式,使用 /etc/cron.d/ 可以更加灵活地管理和组织不同的任务。 + +5. 周期性任务目录 +5.1 目录说明 +/etc/cron.hourly/:每小时运行一次目录中的所有脚本。 +/etc/cron.daily/:每天运行一次目录中的所有脚本。 +/etc/cron.weekly/:每周运行一次目录中的所有脚本。 +/etc/cron.monthly/:每月运行一次目录中的所有脚本。 +5.2 使用方法 +创建脚本:将要定期运行的脚本放置到相应的目录中。 +设置权限:确保脚本具有执行权限。可以使用以下命令设置: +chmod +x /etc/cron.daily/your_script.sh +5.3 示例案例 +每小时运行任务: + +用例:每小时检查系统资源使用情况并记录到日志文件。 +步骤: +创建脚本 /etc/cron.hourly/resource_check.sh: +#!/bin/bash +date >> /var/log/resource_usage.log +top -b -n1 | head -n 20 >> /var/log/resource_usage.log +设置脚本权限: +chmod +x /etc/cron.hourly/resource_check.sh +每日运行任务: + +用例:每天备份数据库。 +步骤: +创建脚本 /etc/cron.daily/db_backup.sh: +#!/bin/bash +mysqldump -u root -pYourPassword your_database > /backup/db_$(date +\%F).sql +# $(date +%F) 表示的是命令替换(command substitution),而不是简单的变量。 +# 在Shell中,命令替换的形式是 $(command),它会执行括号内的命令,并用其输出结果替换整个表达式。 +设置脚本权限: +chmod +x /etc/cron.daily/db_backup.sh +每周运行任务: + +用例:每周清理一次系统缓存。 +步骤: +创建脚本 /etc/cron.weekly/cache_cleanup.sh: +#!/bin/bash +apt-get clean +设置脚本权限: +chmod +x /etc/cron.weekly/cache_cleanup.sh +每月运行任务: + +用例:每月生成并发送系统报告。 +步骤: +创建脚本 /etc/cron.monthly/system_report.sh: +#!/bin/bash +report_date=$(date +\%Y-\%m-\%d) +df -h > /var/reports/system_report_$report_date.txt +mail -s "Monthly System Report" admin@example.com < /var/reports/system_report_$report_date.txt +设置脚本权限: +chmod +x /etc/cron.monthly/system_report.sh +5.4 注意事项 +脚本格式:确保脚本是可执行的,并且首行包含正确的shebang(例如 #!/bin/bash)。 +日志记录:为调试和审计目的,可以在脚本中添加日志记录功能,以便了解脚本的执行情况。 +测试脚本:在将脚本放入周期性任务目录之前,最好手动测试脚本,以确保其在预期环境下正常工作。 +通过将脚本放置到相应的周期性任务目录中,可以轻松实现定期自动化任务的管理,无需手动编辑cron表。这样不仅简化了管理任务的复杂性,还提高了系统的自动化和可靠性。 \ No newline at end of file diff --git "a/\345\247\232\345\270\206/20240619\347\254\224\350\256\260.md" "b/\345\247\232\345\270\206/20240619\347\254\224\350\256\260.md" new file mode 100644 index 0000000..9ed72d7 --- /dev/null +++ "b/\345\247\232\345\270\206/20240619\347\254\224\350\256\260.md" @@ -0,0 +1,137 @@ +环境变量 +理解和使用Linux环境变量对于管理和配置系统至关重要。以下是关键的知识点、常用场景以及示例的综合整理: + +1. 环境变量的类型和作用 +用户级别环境变量: + +存储在用户家目录的个人配置文件中,例如 ~/.bashrc、~/.profile。 +用于定义用户个性化的Shell设置,如别名、路径等。针对不同用户独立设置 +系统级别环境变量: + +存储在系统范围的配置文件中,如 /etc/environment、/etc/profile 。/etc/profile.d目录 +为所有用户和系统服务提供全局的环境设置。java_home、python +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 命令来临时设置一个环境变量,例如: + +export MY_VAR="value" # export 变量名=值 环境变量是全局的,整个环境有效 +MY_VAR="value" # 少了export 就是临时变量,不是全局的 +​ 这种设置只在当前Shell会话中有效,关闭Shell会话后会失效。 + +3.2 永久设置环境变量: +​ 用户级别的 : 编辑用户的 ~/.bashrc 或 ~/.profile 文件,并添加如下行: + +export MY_VAR="value" +​ 保存文件后,新的设置会在下次登录时生效。 + +​ 系统级别的: 编辑 /etc/environment 或 /etc/profile文件,并添加类似以下行: + +MY_VAR="value" +这里不需要使用 export 命令。保存文件后,变量会在系统启动时生效。 + +3.3 环境变量的设置和使用示例 +3.1 设置路径变量(PATH) + +# 在 ~/.bashrc 中添加 +export PATH=$PATH:/path/to/your/scripts +3.2 定义Java环境变量(JAVA_HOME) + +# 在 ~/.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) + +# 在 ~/.bashrc 中添加 +export HTTP_PROXY=http://proxy.example.com:8080 +export HTTPS_PROXY=http://proxy.example.com:8080 +3.4 配置编辑器(EDITOR) + +# 在 ~/.bashrc 中添加 +export EDITOR=/usr/bin/vim +3.5 设置语言和地区(LANG、LC_系列变量) + +# 在 ~/.bashrc 或 /etc/environment 中添加 +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +3.6 自定义命令别名(alias) + +# 在 ~/.bashrc 中添加 +alias ll='ls -alF' +alias grep='grep --color=auto' +3.7 设置临时环境变量 + +# 临时设置变量 +export MY_VAR="value" +4. 常用环境变量 +打印所有环境变量: + +printenv +#或 +env +系统级 + +PATH 可执行文件的搜索路径 +LANG 定义系统的语言环境和字符集, export LANG=zh_CN.utf8,编辑文件不乱码 +LANGUAGE 用于设置消息语言的优先级 ,提示语言为中文 +EDITOR 默认文本编辑器 editor +用户级 + +HOME :当前用户的主目录。 +USER:当前用户名。 +UID:当前用户的用户ID。 +SHELL:当前用户的默认Shell。 +5. 临时变量与环境变量 +定义一个变量时,在变量名前加了export关键字,就是环境变量,作用域是全局环境子子进程中也有效,否则就是临时变量,只在当前脚本文件或shell中有效。 + +命令行示例: + +MY_NAME="张三" # 临时变量(局部) +echo $MY_NAME +bash -c 'echo $MY_NAME' +# 什么结果?对比下面的效果 + +export MY_NAME="张三" # 临时变量(全局) +echo $MY_NAME +bash -c 'echo $MY_NAME' # 子进程 +# 看下效果 +脚本文件示例 : + +test1.sh + +#!/bin/bash +MY_NAME="张三" # 前面加上export再试一次 +echo "test:我的名字是:$MY_NAME" +./subscript.sh +test2.sh: + +#!/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 \ No newline at end of file diff --git "a/\345\247\232\345\270\206/20240620\347\254\224\350\256\260.md" "b/\345\247\232\345\270\206/20240620\347\254\224\350\256\260.md" new file mode 100644 index 0000000..fa21278 --- /dev/null +++ "b/\345\247\232\345\270\206/20240620\347\254\224\350\256\260.md" @@ -0,0 +1,49 @@ +进程管理与服务管理 +一、进程管理 +ps 命令 +ps aux 查看所有进程 + +pstree 命令 +以可视化方式显示进程 + +pidof 命令 +pidof 服务名 查看 该服务的进程号 + +eg:pidof nginx + +pgrep 命令 +查看进程号 + +pgrep -u 用户 服务 + +eg:pgrep -u root nginx + +top 命令:实时查看 +Htop 命令:实时查看,搜索、过滤,kill,排序,文字图形 +kill 命令:结束进程 +kill -9 强制删除进程 +kill -15 安全删除进程 +killall 命令:删除全部进程 +killall nginx + +pkill 命令:删除全部进程 +pkill -9 nginx + +fg,bg 切换前后台运行 +fg :切换后台 +要执行的命令 & +Ctrl+z +bg %编号 +jobs :查看后台运行状态 +bg:切换前台 +fg %编号 +Ctrl+C :终止该前台进程的执行 +二、服务管理 +启动:start +停止:stop +重启:restart +重加载配置:reload +开机自启用:enable +systemctl 命令 服务名 eg:systemctl start nginx 启动nginx + +service 服务名 命令 eg:service nginx start 启动nginx \ No newline at end of file diff --git "a/\345\247\232\345\270\206/20240622\347\254\224\350\256\260.md" "b/\345\247\232\345\270\206/20240622\347\254\224\350\256\260.md" new file mode 100644 index 0000000..4d639ed --- /dev/null +++ "b/\345\247\232\345\270\206/20240622\347\254\224\350\256\260.md" @@ -0,0 +1,13 @@ +# 服务管理 + +什么是服务:服务是程序,是后台运行的,响应用户或其他程序的请求 + +管理服务: + +```bash +systemctl start 服务名 #开启某服务名称 +systemctl stop 服务名 #关闭某服务名称 +systemctl restar 服务名 #重启某服务名称 +systemctl status 服务名 #查看服务状态 +systemctl enalbe 服务名 #开机自启动服务 +``` \ No newline at end of file -- Gitee