diff --git "a/\345\274\240\346\262\273\346\235\203/20240605-\346\235\203\351\231\220.md" "b/\345\274\240\346\262\273\346\235\203/20240605-\346\235\203\351\231\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..8d1c821528d937beeb159ea1ee93858155932311 --- /dev/null +++ "b/\345\274\240\346\262\273\346\235\203/20240605-\346\235\203\351\231\220.md" @@ -0,0 +1,21 @@ +在Linux系统中,su和su -是切换用户账户的命令,它们的主要区别在于环境切换和是否需要输入密码。 + +su命令: su命令可以让你切换到其他用户账户,包括root用户和其他普通用户。 当你从普通用户账户切换到root用户时,通常需要输入root用户的密码。 当你从root用户切换到其他普通用户时,不需要输入目标用户的密码。 使用su命令时,默认不会切换用户的环境变量,比如PATH环境变量,这意味着你切换用户后,可能无法直接使用某些命令,除非这些命令已经被添加到当前用户的环境中。 + +su -命令: su -命令也用于用户切换,但它与su命令的区别在于它会在切换用户的同时,切换环境变量配置,使得新用户的环境与root用户的环境一样。 使用su -命令切换到root用户时,同样需要输入root用户的密码。 从root用户切换到其他普通用户时,不需要输入目标用户的密码。 su -命令中的-代表"login shell",意味着它会执行一个完整的登录shell环境切换,包括环境变量的更新。 总结: + +su主要用于快速切换用户,不关心环境变量配置。 su -用于需要完整环境变量配置的切换,特别是在执行需要特定环境变量才能运行的命令时。 + +在Linux系统中,权限管理是操作系统安全的核心部分,它控制着用户对文件和目录的访问。 + +用户和用户组 用户(User):每个文件和目录都有一个所有者,即创建它的用户。 用户组(Group):除了所有者,文件和目录还属于一个用户组。用户组是一组用户的集合,可以简化权限管理。 其他用户(Others):既不是文件所有者,也不属于文件所属用户组的用户。 + +权限类型 Linux系统中的权限分为三种类型: 读(Read):用字母r表示,允许用户查看文件内容或目录列表。 写(Write):用字母w表示,允许用户修改文件内容或目录中的文件。 执行(Execute):用字母x表示,允许用户运行文件(如果是程序或脚本)或进入目录。 + +权限表示 每个文件或目录的权限由10个字符表示,例如-rwxr-xr-x。这10个字符的含义如下: 第一个字符表示文件类型(-表示普通文件,d表示目录,l表示链接等)。 接下来的三个字符rwx表示文件所有者的权限。 再接下来的三个字符r-x表示文件所属用户组的权限。 最后三个字符r-x表示其他用户的权限。 + +修改权限 可以使用chmod命令来修改文件或目录的权限。例如: chmod u+x file:给文件所有者添加执行权限。 chmod g-w file:从文件所属用户组中移除写权限。 chmod o=r file:设置其他用户只有读权限。 + +修改所有者和用户组 可以使用chown和chgrp命令来修改文件或目录的所有者和用户组。例如: chown user file:将文件的所有者更改为user。 chgrp group file:将文件的用户组更改为group。 + +特殊权限 除了基本的读、写、执行权限外,Linux还支持一些特殊权限: Setuid:当设置在可执行文件上时,允许用户以文件所有者的权限运行该程序。 Setgid:当设置在目录上时,新创建的文件会继承该目录的用户组。 Sticky Bit:当设置在目录上时,只有文件所有者、目录所有者或超级用户可以删除或重命名该目录中的文件。 这些特殊权限分别用s(Setuid或Setgid)和t(Sticky Bit)表示,出现在执行权限的位置。 \ No newline at end of file diff --git "a/\345\274\240\346\262\273\346\235\203/20240606\346\235\203\351\231\220.png" "b/\345\274\240\346\262\273\346\235\203/20240606\346\235\203\351\231\220.png" new file mode 100644 index 0000000000000000000000000000000000000000..e19eb5c122fb7a5cbf935f752f55d748281c9e7a Binary files /dev/null and "b/\345\274\240\346\262\273\346\235\203/20240606\346\235\203\351\231\220.png" differ diff --git "a/\345\274\240\346\262\273\346\235\203/20240607-\351\232\220\350\227\217\346\235\203\351\231\220.md" "b/\345\274\240\346\262\273\346\235\203/20240607-\351\232\220\350\227\217\346\235\203\351\231\220.md" new file mode 100644 index 0000000000000000000000000000000000000000..1b205424515154c2f743872ea569b3b34563ee80 --- /dev/null +++ "b/\345\274\240\346\262\273\346\235\203/20240607-\351\232\220\350\227\217\346\235\203\351\231\220.md" @@ -0,0 +1,13 @@ +除了常规的文件权限(读、写、执行),还存在一种称为“隐藏权限”的特殊权限,这通常指的是使用chattr命令设置的属性,这些属性可以防止文件被删除或修改,即使是对root用户也是如此。 + +设置隐藏权限(chattr) +chattr命令用于设置文件的特殊属性。以下是一些常用的属性设置: i:不可变属性,使得文件不能被修改、删除或重命名。 a:只追加属性,使得只能向文件追加数据,不能删除或修改已有数据。 s:压缩属性,文件内容在磁盘上以压缩形式存储。 u:不可删除属性,即使文件被删除,其数据仍然保存在磁盘上,可以通过undelete命令恢复。 示例: chattr +i important_file.txt 上面的命令将important_file.txt文件设置为不可变。 + +查看隐藏权限(lsattr) +lsattr命令用于查看文件的隐藏权限。它会显示文件的所有特殊属性。 示例: lsattr important_file.txt 显示important_file.txt文件的属性。如果文件设置了不可变属性,i属性被列出。 + +移除隐藏权限 移除之前设置的隐藏权限,可以使用chattr命令,并使用减号-来去除特定的属性。 + +示例: chattr -i important_file.txt 上面的命令会移除important_file.txt文件的不可变属性。 + +注意事项 只有root用户或具有适当权限的用户才能设置和移除这些特殊属性。 这些隐藏权限并不影响文件的标准权限位(读、写、执行),它们是独立的。 在某些Linux发行版中,chattr和lsattr可能不是默认安装的,可能需要从包管理器安装。 \ No newline at end of file diff --git "a/\345\274\240\346\262\273\346\235\203/20240612-\345\221\250\346\234\237\344\273\273\345\212\241.md" "b/\345\274\240\346\262\273\346\235\203/20240612-\345\221\250\346\234\237\344\273\273\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..2cd2cfd80bda4c278b1aa27fcd160416f5f8ab0a --- /dev/null +++ "b/\345\274\240\346\262\273\346\235\203/20240612-\345\221\250\346\234\237\344\273\273\345\212\241.md" @@ -0,0 +1,55 @@ +`cron` 是一个在 Unix 系统和类 Unix 系统中用于执行预定任务的守护进程。它允许用户在指定的时间间隔内自动执行命令或脚本。下面是关于 `cron` 的一些详细信息: + +### `cron` 和 `crontab` + +- `cron` 是一个守护进程,它会在预定的时间执行由用户定义的任务。 +- `crontab` 是用于安排任务的命令,它允许用户创建、编辑、查看和删除任务列表。 + +### `crontab` 文件格式 + +`crontab` 文件中的每一行都表示一个要执行的任务。每行的格式为: + +```plaintext +* * * * * command_to_execute +``` + +其中,`* * * * *` 表示分别表示分钟、小时、日期、月份、星期几,而 `command_to_execute` 是要执行的命令。 + +### `crontab` 文件的字段含义 + +1. **分钟 (0-59)**:表示一小时中的哪一分钟执行任务。 +2. **小时 (0-23)**:表示一天中的哪个小时执行任务。 +3. **日期 (1-31)**:表示一个月中的哪一天执行任务。 +4. **月份 (1-12)**:表示一年中的哪个月执行任务。 +5. **星期几 (0-7)**:0 和 7 都代表星期日,1 代表星期一,依此类推。 + +### 特殊字符 + +- `*`:代表匹配所有可能的值。 +- `-`:表示范围,比如 `1-5` 表示 1 到 5。 +- `,`:用于列出多个数值,比如 `1,3,5` 表示 1、3 和 5。 +- `/`:用于指定步长,比如 `*/5` 表示每隔 5。 + +### 用户的 `crontab` 文件 + +每个用户都可以有自己的 `crontab` 文件,通过 `crontab -e` 命令可以编辑当前用户的 `crontab` 文件。 + +### 系统的 `crontab` 文件 + +系统也有一个全局的 `crontab` 文件,通常位于 `/etc/crontab`,它允许系统管理员安排系统级任务。 + +### 日志 + +`cron` 会记录任务执行的日志,通常存储在 `/var/log/syslog` 或 `/var/log/cron` 中。 + +### 示例 + +以下是一个示例 `crontab` 条目,表示每天凌晨 1 点执行一个脚本: + +```plaintext +0 1 * * * /path/to/your/script.sh +``` + +这表示在每天的凌晨 1 点执行 `/path/to/your/script.sh` 脚本。 + +通过这些详细信息,你可以更好地理解 `cron` 和如何使用 `crontab` 来安排周期性任务。 \ No newline at end of file diff --git "a/\345\274\240\346\262\273\346\235\203/20240613-\347\216\257\345\242\203\345\217\230\351\207\217.md" "b/\345\274\240\346\262\273\346\235\203/20240613-\347\216\257\345\242\203\345\217\230\351\207\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..348205cd68dedd68048b7ff9fa805b06719011b5 --- /dev/null +++ "b/\345\274\240\346\262\273\346\235\203/20240613-\347\216\257\345\242\203\345\217\230\351\207\217.md" @@ -0,0 +1,95 @@ +环境变量的基本概念 +定义:环境变量是一对键值对,键是变量的名称,值是变量的内容。例如,HOME 是一个环境变量,它的值通常是当前用户的主目录路径。 + +作用范围:环境变量可以是全局的(对所有进程可见)或局部的(仅对当前进程及其子进程可见)。 + +常见的环境变量 +PATH:指定了系统用来搜索可执行文件的目录列表。当你在终端输入命令时,系统会按照 PATH 中列出的目录顺序搜索可执行文件。 + +HOME:当前用户的主目录。 + +USER:当前用户的用户名。 + +SHELL:当前用户的默认shell程序。 + +PWD:当前工作目录。 + +LANG:指定系统的语言和区域设置。 + +查看和管理环境变量 +查看环境变量: + +使用 printenv 或 env 命令可以查看所有环境变量: +bash +复制代码 +printenv +env +使用 echo 命令查看特定环境变量的值: +bash +复制代码 +echo $PATH +设置环境变量: + +临时设置环境变量(仅对当前shell会话有效): +bash +复制代码 +export VAR_NAME=value +永久设置环境变量(对所有会话有效):需要编辑shell的配置文件,如 ~/.bashrc,~/.bash_profile,~/.profile 等,添加如下行: +bash +复制代码 +export VAR_NAME=value +删除环境变量: + +使用 unset 命令删除环境变量: +bash +复制代码 +unset VAR_NAME +示例 +添加一个目录到 PATH: +假设你有一个目录 /opt/myprogram/bin,你想添加到 PATH 中,可以编辑 ~/.bashrc 文件: + +bash +复制代码 +export PATH=$PATH:/opt/myprogram/bin +保存并退出后,使更改生效: + +bash +复制代码 +source ~/.bashrc +设置自定义环境变量: +在 ~/.bashrc 文件中添加: + +bash +复制代码 +export MY_VAR="Hello World" +保存并退出后,使更改生效: + +bash +复制代码 +source ~/.bashrc +临时设置变量: +你可以在当前终端会话中设置一个变量,它不会影响其他会话: + +bash +复制代码 +export TEMP_VAR="Temporary Value" +echo $TEMP_VAR +环境变量的继承 +在Linux中,环境变量可以从父进程继承到子进程。比如,当你从shell启动一个新进程时,该进程会继承shell的环境变量。但这种继承是单向的,子进程对环境变量的修改不会影响父进程。 + +环境变量文件 +不同的shell有不同的启动文件,用来设置环境变量: + +Bash: +~/.bashrc:交互式非登录shell会读取此文件。 +~/.bash_profile:登录shell会读取此文件。 +~/.profile:所有sh兼容shell会读取此文件。 +Zsh: +~/.zshrc:交互式shell会读取此文件。 +~/.zprofile:登录shell会读取此文件。 +实际应用中的最佳实践 +尽量避免在系统级别的配置文件(如 /etc/profile)中设置用户特定的环境变量。 +使用脚本设置环境变量:对于需要复杂初始化的程序,可以编写一个脚本来设置所需的环境变量。 +注意环境变量的安全性:避免在环境变量中存储敏感信息,或者确保这些变量不被意外泄露。 +通过理解和有效管理环境变量,可以显著提高在Linux系统上的工作效率和灵活性。 + diff --git "a/\345\274\240\346\262\273\346\235\203/20240614-\350\277\233\347\250\213\347\256\241\347\220\206.md" "b/\345\274\240\346\262\273\346\235\203/20240614-\350\277\233\347\250\213\347\256\241\347\220\206.md" new file mode 100644 index 0000000000000000000000000000000000000000..3ff6c62baa625776034d00be624036e8d9cabd89 --- /dev/null +++ "b/\345\274\240\346\262\273\346\235\203/20240614-\350\277\233\347\250\213\347\256\241\347\220\206.md" @@ -0,0 +1,141 @@ +在Linux系统中,进程管理是系统管理员和用户必须掌握的一项基本技能。进程是正在运行的程序的实例,每个进程都有一个唯一的进程ID(PID)。以下是关于Linux进程管理的详细介绍: + +查看进程 +ps命令: +ps 命令用于列出当前会话中的进程信息。常用选项包括: + +bash +复制代码 +ps -e # 显示所有进程 +ps -f # 全格式显示 +ps -u username # 显示指定用户的进程 +ps aux # 显示所有进程详细信息 +top命令: +top 命令实时显示系统中进程的动态信息,包括CPU和内存使用情况。按下特定键可以执行操作,例如: + +q 退出 +h 显示帮助 +k 终止进程 +htop命令: +htop 是 top 命令的增强版,提供了更友好的界面和更多功能。它通常需要单独安装: + +bash +复制代码 +sudo apt install htop # Debian/Ubuntu +sudo yum install htop # CentOS/RHEL +pgrep命令: +pgrep 命令根据名称或其他属性搜索进程: + +bash +复制代码 +pgrep -u username processname # 查找特定用户运行的进程 +控制进程 +kill命令: +kill 命令用于向进程发送信号,最常用的是终止信号 (SIGTERM 和 SIGKILL): + +bash +复制代码 +kill PID # 发送SIGTERM信号,要求进程正常退出 +kill -9 PID # 发送SIGKILL信号,强制终止进程 +killall processname # 终止所有指定名称的进程 +pkill命令: +pkill 命令根据进程名称或属性向匹配的进程发送信号: + +bash +复制代码 +pkill processname # 向匹配的进程发送SIGTERM信号 +pkill -9 processname # 向匹配的进程发送SIGKILL信号 +killall命令: +killall 命令用于终止所有指定名称的进程: + +bash +复制代码 +killall processname # 终止所有匹配的进程 +进程优先级 +nice命令: +nice 命令用于以指定的优先级启动新进程。优先级范围从 -20(最高优先级)到 19(最低优先级): + +bash +复制代码 +nice -n 10 command # 以优先级10运行命令 +renice命令: +renice 命令用于改变正在运行的进程的优先级: + +bash +复制代码 +renice 10 -p PID # 将PID对应的进程优先级设置为10 +后台运行和作业控制 +&符号: +在命令后加 & 符号可以将命令放到后台运行: + +bash +复制代码 +command & +jobs命令: +jobs 命令列出当前shell会话中的后台作业: + +bash +复制代码 +jobs +fg和bg命令: +fg 命令将后台作业带到前台,bg 命令在后台继续运行停止的作业: + +bash +复制代码 +fg %1 # 将作业号为1的作业带到前台 +bg %1 # 在后台继续运行作业号为1的作业 +nohup命令: +nohup 命令用于让命令在退出终端后继续运行: + +bash +复制代码 +nohup command & +进程间通信 +信号: +信号是一种进程间通信的基本机制,用于通知进程发生了某个事件。例如,SIGINT 是中断信号(通常由 Ctrl+C 触发),SIGTERM 是终止信号。 + +管道: +管道用于将一个命令的输出作为另一个命令的输入: + +bash +复制代码 +command1 | command2 +命名管道(FIFO): +命名管道是一种特殊类型的文件,用于在无关的进程间传递数据: + +bash +复制代码 +mkfifo mypipe +echo "data" > mypipe +cat mypipe +示例 +列出所有进程: + +bash +复制代码 +ps -ef +终止一个进程: + +bash +复制代码 +kill -9 12345 # 强制终止PID为12345的进程 +后台运行命令: + +bash +复制代码 +sleep 60 & +修改进程优先级: + +bash +复制代码 +renice 10 -p 12345 # 将PID为12345的进程优先级设置为10 +使用 nohup 命令: + +bash +复制代码 +nohup long_running_command & +监控工具 +top/htop:实时监控系统资源和进程。 +atop:高级系统和进程监控工具。 +nmon:性能监控工具。 +通过掌握这些命令和概念,您可以高效地管理和控制Linux系统中的进程,确保系统的稳定性和性能。