香甜可口草莓蛋糕

香甜可口草莓蛋糕

一、进程管理命令

1.1 service

1.1.1 介绍

service 是一个在大多数 Linux 发行版中用于管理系统服务的命令

1.1.2 使用方法

sudo service 服务名 [start|stop|restart|status|...]

1.1.3 常见使用案例

1.1.3.1 启动服务
sudo service apache2 start

这将启动名为 apache2 的服务(例如 Apache HTTP 服务器)

1.1.3.2 停止服务
sudo service nginx stop

这将停止名为 nginx 的服务

1.1.3.3 重启服务
sudo service sshd restart

这将重启名为 sshd 的服务(SSH 服务器)

1.1.3.4 检查服务状态
sudo service postgresql status

这将显示名为 postgresql 的服务的状态

1.1.4 注意事项

  • 不是所有的 Linux 发行版都使用 service 命令。一些发行版(如 systemd 系统的发行版)可能使用 systemctl 来管理服务。
  • 在使用 service 命令时,你需要知道服务的精确名称。你可以通过查看 /etc/init.d/ 目录或使用其他工具(如 chkconfig 或 systemctl list-units --type=service)来找到服务的名称。
  • 对于需要长时间运行的服务,你应该确保它们在系统启动时自动启动。这通常可以通过将服务添加到系统的启动服务列表中来实现。

1.2 runlevel

1.2.1 介绍

runlevel 是一个在 Unix 和类 Unix 系统(包括 Linux)中用于显示系统当前运行级别的命令

1.2.2 使用方法

runlevel 命令通常不带任何参数运行,它会显示当前和之前的运行级别。输出通常是两个字符,第一个字符表示之前的运行级别,第二个字符表示当前的运行级别。

$ runlevel  
N 3

在这个例子中,N 表示没有之前的运行级别(系统刚刚启动),3 表示当前的运行级别是一个多用户模式,但没有图形界面。

1.2.3 运行级别

  • 0:关机。
  • 1:单用户模式。通常用于系统维护,只有 root 用户可以登录。
  • 2:多用户模式,但没有网络。
  • 3:完全的多用户模式,有网络功能,但没有图形界面。
  • 4:未定义,有时被用作用户自定义的运行级别。
  • 5:多用户模式,带有图形界面。这是大多数桌面系统默认的运行级别。
  • 6:重启。

1.2.4 注意事项

  • 并非所有的系统都使用 runlevel 命令。例如,在使用 systemd 的系统中,runlevel 可能不是获取当前运行级别的首选方法。在这些系统中,可以使用 systemctl get-default 命令来获取默认目标(相当于运行级别)。
  • 在某些情况下,runlevel 命令可能无法正确显示之前的运行级别,特别是当系统异常关闭或启动时。

1.3 pgrep

1.3.1 介绍

pgrep 是一个在 Unix 和类 Unix 系统(包括 Linux)中用于查找与给定名称匹配的进程的命令

1.3.2 使用方法

pgrep [选项] 模式

1.3.3 参数详解

  • 选项pgrep 支持多种选项,用于控制搜索的行为,例如 -l 显示进程名和 PID,-f 使用完整命令行进行匹配等。
  • 模式:这是你想要搜索的进程名或正则表达式模式。

1.3.4 常见使用案例

1.3.4.1 查找特定进程的 PID
pgrep sshd

这将返回所有名为 sshd 的进程的 PID 

1.3.4.2 显示进程名和 PID
pgrep -l sshd

除了返回 PID,还会显示进程名 sshd 

1.3.4.3 使用正则表达式查找进程
pgrep '^ss'

这将返回所有以 ss 开头的进程的 PID

1.3.4.4 查找多个进程的 PID
pgrep -f 'sshd|apache2'

这将返回所有完整命令行包含 sshd 或 apache2 的进程的 PID

1.3.5 注意事项

  • pgrep 只返回与给定模式匹配的进程的 PID,而不会提供其他详细信息(如父进程 ID、CPU 使用率等)。如果你需要更多信息,可能需要结合 ps 命令使用。
  • pgrep 在搜索时区分大小写。如果你想要进行不区分大小写的搜索,可以使用正则表达式和适当的选项。
  • 在某些情况下,进程名可能不是唯一的,因此 pgrep 可能会返回多个 PID。 

1.4 nohup

1.4.1 介绍

nohup 是 Unix 和类 Unix 系统(包括 Linux)中的一个命令,用于运行命令,使其在您退出账户/终端会话之后继续运行

1.4.2 使用方法

nohup command [arg1] [arg2] ... [&]

其中 command 是您想要运行的命令,arg1arg2, ... 是该命令的参数。末尾的 & 符号是可选的,它用于将命令放到后台执行

1.4.3 常见使用案例

1.4.3.1 运行一个长时间运行的命令

假设您有一个名为 long_running_process 的命令或脚本,您希望即使关闭终端后它也能继续运行。您可以使用 nohup 来实现这一点

nohup long_running_process &
1.4.3.2 将输出重定向到文件

默认情况下,nohup 命令会将输出重定向到一个名为 nohup.out 的文件中,除非您明确指定了输出文件。例如

nohup long_running_process > output.log 2>&1 &

在这个例子中,标准输出(stdout)被重定向到 output.log 文件,标准错误(stderr)也被重定向到相同的文件(通过 2>&1

1.4.4 注意事项

  • 当您使用 nohup 运行命令时,它会忽略所有挂起(HUP)信号。这意味着即使您关闭了启动该命令的终端会话,命令也会继续运行。
  • nohup 命令默认会输出一条消息到终端,告诉您它已经将命令的输出重定向到哪里。如果您不希望看到这条消息,可以将输出重定向到 /dev/null,例如:nohup command > /dev/null 2>&1 &
  • 使用 nohup 时,您可能还需要考虑如何管理和监控长时间运行的进程。您可以使用 pstophtop 或其他系统监控工具来查看这些进程的状态。

1.5 nice/renice

1.5.1 介绍

nice 和 renice 是 Unix 和类 Unix 系统(如 Linux)中用于调整进程优先级的命令

1.5.2 使用方法

nice [OPTION] [command [arg...]]
renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]

 1.5.3 常见使用案例

1.5.3.1 假设您想要以较低的优先级运行一个名为 long_task 的程序,可以使用以下命令
nice long_task

默认情况下,nice 会增加进程的优先级值(nice 值)10,这表示降低其优先级。您也可以指定一个特定的 nice 值,使用 -n 选项

nice -n 15 long_task

在这个例子中,long_task 会以 nice 值为 15 运行,这是一个相对较低的优先级 

1.5.3.2 假设您知道某个进程的 PID(进程 ID),并且想要调整其优先级。您可以使用 renice 来实现这一点 
renice +5 -p 1234

这个命令会将 PID 为 1234 的进程的 nice 值增加 5,从而降低其优先级 

您也可以使用其他选项来根据进程组 ID(-g)、用户(-u)等来指定进程 

1.5.4 注意事项

  • 只有超级用户(root)才能为进程设置较低的优先级(更负的 nice 值),或者提高已经运行的进程的优先级。普通用户只能设置较高的优先级(更正的 nice 值)。
  • 进程优先级只是操作系统调度进程时考虑的一个因素,实际的 CPU 时间分配还取决于许多其他因素,如系统负载、进程状态等。
  • 调整进程优先级可能会对系统性能和响应性产生显著影响,因此应该谨慎使用这些命令。

1.6 pstree

1.6.1 介绍

pstree 是一个在 Unix 和类 Unix 系统(包括 Linux)中用于显示进程树状结构的命令

1.6.2 使用方法

pstree [选项]

不加任何选项时,pstree 会显示整个进程树,以树状结构的形式展示所有运行中的进程

1.6.3 参数详解

  • -a:显示 ASCII 字符格式的树状结构。
  • -p:显示每个进程的 PID。
  • -u:显示每个进程的用户名。
  • -n:按 PID 对进程进行排序,而不是按名称。
  • --help:显示帮助信息。
  • --version:显示版本信息。

1.6.4 常见使用案例

1.6.4.1 显示整个进程树
pstree

这将显示从 init(或现代系统上的 systemd)开始的整个进程树

1.6.4.2 显示特定进程的子进程树

如果您只对某个特定进程及其子进程感兴趣,可以使用 -p 选项并指定该进程的 PID

pstree -p 1234

这将显示 PID 为 1234 的进程及其所有子进程的树状结构 

1.6.4.3 以 ASCII 字符显示进程树

默认情况下,pstree 使用垂直和水平线来绘制树状结构。如果您希望只使用 ASCII 字符(这在某些终端或输出格式受限的环境中可能很有用),可以使用 -a 选项

pstree -a

1.6.5 注意事项

  • pstree 命令通常依赖于 /proc 文件系统来获取进程信息,因此它可能不适用于不支持 /proc 的系统或环境中。
  • 由于进程树可能非常庞大和复杂,特别是在大型系统上,因此 pstree 的输出可能会很长。使用过滤器或管道可以将输出限制为您感兴趣的特定部分。

1.7 ps

1.7.1 介绍

ps 是 Unix 和类 Unix 系统(包括 Linux)中用于报告当前系统的进程状态的命令

1.7.2 使用方法

ps [options]

1.7.3 参数详解

  • -e:显示所有进程。
  • -f:显示完整格式的信息,包括 UID、PID、PPID、C、STIME、TTY、TIME 和 CMD。
  • -l:使用长格式显示信息。
  • -u user:显示指定用户的进程。
  • -p pid:通过进程 ID 显示进程信息。
  • -o format:用户自定义输出格式。

1.7.4 常见使用案例

1.7.4.1 显示所有进程的完整信息
ps -ef

这个命令会显示系统上所有进程的详细信息,包括用户 ID(UID)、进程 ID(PID)、父进程 ID(PPID)、CPU 使用率(C)、启动时间(STIME)、控制终端(TTY)、CPU 时间(TIME)和命令行(CMD) 

1.7.4.2 显示指定用户的进程 
ps -u username

将 username 替换为您想要查看其进程的用户名。这个命令将显示该用户运行的所有进程

1.7.4.3 通过进程 ID 显示进程信息
ps -p 1234

将 1234 替换为您想要查看的进程的 PID。这个命令将显示该进程的详细信息 

1.7.5 注意事项

  • ps 命令的输出可能会因为系统和安装的软件的不同而有所差异。一些系统可能支持额外的选项或格式。
  • 在处理大量进程时,ps 命令的输出可能会很长。您可以使用管道和过滤器(如 grep)来限制或搜索特定的进程。
  • ps 命令提供的是进程的快照,而不是实时更新的信息。如果您需要实时监视进程状态,可以考虑使用 top 或 htop 这样的工具。

1.8 pkill

1.8.1 介绍

pkill 是一个在 Unix 和类 Unix 系统(包括 Linux)中用于向进程发送信号的命令,特别地,它可以根据进程名或正则表达式模式来查找并发送信号给匹配的进程

1.8.2 使用方法

pkill [选项] 模式

1.8.3 参数详解

  • -SIGNAL:指定要发送的信号。例如,-9 发送 KILL 信号,强制终止进程。
  • -f:完整匹配进程名,而不仅仅是进程名的开始部分。
  • -u user:只匹配指定用户的进程。
  • -P parent:只匹配指定父进程的子进程。

1.8.4 常见使用案例

1.8.4.1 终止所有名为 "firefox" 的进程
pkill firefox

这个命令会发送 TERM 信号给所有名为 "firefox" 的进程,尝试优雅地终止它们

1.8.4.2 强制终止所有名为 "chrome" 的进程
pkill -9 chrome

使用 -9 选项发送 KILL 信号,这会强制终止进程,不给它们机会进行清理操作

1.8.4.3 终止特定用户的所有进程

假设您想要终止用户名为 "john" 的所有进程,您可以使用

pkill -u john

这会发送 TERM 信号给所有属于用户 "john" 的进程 

1.8.5 注意事项

  • 使用 pkill 发送 KILL 信号时要特别小心,因为这会立即终止进程,不给它们机会进行正常的终止处理。这可能导致数据丢失或其他不可预期的行为。
  • 在使用 pkill 之前,最好先使用 pgrep 命令来查找匹配特定模式的进程 ID(PID),以确保您不会误杀其他不相关的进程。
  • pkill 命令发送的信号可以被进程捕获并处理。不是所有的进程都会对 TERM 信号做出响应,因此有时需要使用更强制的信号,如 KILL

1.9 killall

1.9.1 介绍

killall 是另一个在 Unix 和类 Unix 系统(包括 Linux)中用于向进程发送信号的命令

1.9.2 使用方法

killall [选项] 进程名

1.9.3 与 pkill 区别

pkill 和 killall 的主要区别在于它们如何解释进程名:

  • pkill 使用正则表达式来匹配进程名,因此你可以使用更复杂的模式来查找进程。
  • killall 则直接匹配完整的进程名。这意味着它通常更精确,但不如 pkill 灵活。

1.9.4 参数详解

  • -SIGNAL:指定要发送的信号。例如,-9 发送 KILL 信号。
  • -u user:只匹配指定用户的进程。
  • -i 或 --interactive:在发送信号之前询问用户确认。
  • -q 或 --quiet:不输出任何信息,静默模式。

1.9.5 常见使用案例

1.9.5.1 终止所有名为 "httpd" 的进程
killall httpd

这个命令会发送 TERM 信号给所有名为 "httpd" 的进程

1.9.5.2 强制终止所有名为 "mysqld" 的进程
killall -9 mysqld

使用 -9 选项发送 KILL 信号,强制终止所有 "mysqld" 进程

1.9.5.3 在发送信号前询问用户

如果你想在发送信号之前得到确认,可以使用 -i 选项

killall -i httpd

这个命令会列出所有匹配的 "httpd" 进程,并询问你是否要终止它们

1.9.6 注意事项

  • 和 pkill 一样,使用 killall 发送 KILL 信号时要特别小心,因为这会导致进程立即终止,不给它们机会进行正常的终止处理。
  • 确保你了解你正在终止的进程的作用,以免意外中断系统的重要服务。
  • 在发送信号之前,最好先确认进程是否真的需要被终止,避免不必要的服务中断。

1.10 kill

1.10.1 介绍

kill 是 Unix 和类 Unix 系统(包括 Linux)中的一个基础命令,用于向进程发送信号

1.10.2 使用方法

kill [选项] 信号 进程ID

或者简写为:

kill -信号 进程ID

其中,信号 是你想要发送给进程的信号,进程ID 是你想要管理的进程的唯一标识符

1.10.3 参数详解

  • TERM 或 15:这是默认的信号,请求进程优雅地终止。进程在接收到这个信号后,通常会进行清理工作并正常退出。
  • KILL 或 9:强制终止进程,不给进程任何机会进行清理。这通常用于那些无法响应 TERM 信号的进程。
  • HUP 或 1:挂起信号,常用于让进程重新读取其配置文件。
  • INT 或 2:与在终端上按下 Ctrl+C 产生的信号相同,通常用于中断进程。

1.10.4 常见使用案例

1.10.4.1 优雅地终止一个进程

假设你有一个进程 ID 为 1234 的进程,你想要优雅地终止它,可以这样做

kill 1234

或者:

kill -TERM 1234
1.10.4.2 强制终止一个进程

如果进程没有响应 TERM 信号,你可以使用 KILL 信号强制终止它

kill -KILL 1234
或者简写为:
kill -9 1234

1.10.5 注意事项 

  • 只有具有适当权限的用户才能发送信号给进程。通常,只有进程的所有者或 root 用户才能发送 KILL 信号来强制终止进程。
  • 使用 KILL 信号时要特别小心,因为它会立即终止进程,可能导致数据丢失或其他不可预期的行为。
  • 在发送信号之前,最好先确认进程是否真的需要被终止,并了解你正在发送的信号的作用。

二、系统权限及用户授权相关命令

2.1 chmod

2.1.1 介绍

chmod 是 Unix 和类 Unix 系统(包括 Linux)中的一个命令,用于改变文件或目录的权限

2.1.2 使用方法

chmod [选项] 模式 文件/目录

或者,使用符号模式:

chmod [选项] 操作符 权限 用户/组 文件/目录

2.1.3 权限表示

权限通常使用三个字符来表示,每个字符对应一个用户类别:文件所有者、文件所属组和其他用户。每个字符可以是 r(读)、w(写)或 x(执行),或者 -(无权限)。

例如,权限 rwxr-xr-- 表示:

  • 文件所有者有读、写和执行权限
  • 文件所属组有读和执行权限
  • 其他用户只有读权限
2.1.3.1 数字表示法

除了字符表示法,权限还可以使用数字表示。每个权限(读、写、执行)对应一个数字:

  • 读(r) = 4
  • 写(w) = 2
  • 执行(x) = 1

因此,rwxr-xr-- 可以转换为数字 755,因为:

  • 所有者权限 rwx = 4 + 2 + 1 = 7
  • 组权限 r-x = 4 + 1 = 5
  • 其他用户权限 r-- = 4
2.1.3.2 符号表示法

符号表示法允许你使用 u(用户)、g(组)和 o(其他)来指定权限的更改应用于哪些用户类别,以及使用 +(添加权限)、-(删除权限)和 =(设置权限)来指定权限的更改。

例如,要给文件所有者添加执行权限,你可以使用:

chmod u+x 文件名

2.1.4 常见使用案例

2.1.4.1 使用数字表示法设置权限

将文件 example.txt 的权限设置为所有者有全部权限,组有读和执行权限,其他用户只有读权限

chmod 755 example.txt
2.1.4.2 使用符号表示法添加权限

给文件 script.sh 的所有用户添加执行权限

chmod a+x script.sh
2.1.4.3 使用符号表示法删除权限

从目录 mydir 中删除组和其他用户的写权限

chmod go-w mydir

2.1.5 注意事项

  • 修改文件或目录的权限时,要确保你理解这些更改的影响,因为不当的权限设置可能会导致安全风险或系统不稳定。
  • 通常,只有文件的所有者或 root 用户才能使用 chmod 来更改文件或目录的权限。
  • 使用 ls -l 命令可以查看文件或目录的当前权限。

2.2 chown

2.2.1 介绍

chown 是 Unix 和类 Unix 系统(包括 Linux)中的一个命令,用于更改文件或目录的所有者和所属组

2.2.2 使用方法

chown [选项] 所有者[:组] 文件/目录

2.2.3 常见使用案例

2.2.3.1 更改文件的所有者

将文件 example.txt 的所有者更改为 newuser

chown newuser example.txt
2.2.3.2 同时更改文件的所有者和所属组

将文件 report.pdf 的所有者更改为 john,所属组更改为 staff

chown john:staff report.pdf
2.2.3.3 递归地更改目录及其内容的所有者和所属组

如果你想要更改一个目录及其所有子目录和文件的所有者和所属组,可以使用 -R 选项

chown -R newuser:newgroup directoryname/

这会将 directoryname/ 及其所有内容的所有者更改为 newuser,所属组更改为 newgroup

2.2.4 注意事项

  • 只有 root 用户或具有适当权限的用户才能更改文件或目录的所有者和所属组。
  • 更改文件或目录的所有权可能会影响系统的安全性和稳定性,因此在进行此类更改时应谨慎行事。
  • 使用 ls -l 命令可以查看文件或目录的当前所有者和所属组。

2.3 chgrp

2.3.1 介绍

chgrp 是 Unix 和类 Unix 系统(如 Linux)中的一个命令,用于更改文件或目录的所属组

2.3.2 使用方法

chgrp [选项] 组 文件/目录

2.3.3 常见使用案例

2.3.3.1 更改文件的所属组

将文件 report.txt 的所属组更改为 editors 组

chgrp editors report.txt
2.3.3.2 更改目录及其内容的所属组

如果你想要递归地更改一个目录及其所有子目录和文件的所属组,可以使用 -R 选项

chgrp -R webdev project_directory/

这会将 project_directory/ 及其所有内容的所属组更改为 webdev

2.3.4 注意事项

  • 只有文件的所有者或 root 用户才能使用 chgrp 命令更改文件或目录的所属组。
  • 在更改文件或目录的所属组之前,应确保目标组已经存在于系统中。
  • 更改文件或目录的所属组可能会影响系统的安全性和访问控制策略,因此在进行此类更改时应谨慎行事。
  • 使用 ls -l 命令可以查看文件或目录的当前所属组。

2.4 umask

2.4.1 介绍

umask [选项] [掩码]

2.4.2 使用方法

umask [选项] [掩码]

2.4.3 掩码表示法

umask 的掩码是一个三位或四位的八进制数。每一位对应一种用户类别(文件所有者、文件所属组、其他用户)的权限。

  • 第一位(从左到右)对应文件所有者的权限
  • 第二位对应文件所属组的权限
  • 第三位对应其他用户的权限
  • 第四位(如果存在)在某些系统上用于设置特殊权限(如 SELinux 上下文)

每个数字可以是 0 到 7 之间的任意值,代表不同的权限组合。每个数字实际上是由三个二进制位组成,分别代表读(r)、写(w)和执行(x)权限。

  • 4 代表读权限
  • 2 代表写权限
  • 1 代表执行权限

因此,数字 7 表示读、写和执行权限都有(4 + 2 + 1 = 7),而数字 0 表示没有任何权限。

2.4.4 常见使用案例

2.4.4.1 查看当前掩码
umask

假设输出为 0022,这意味着新创建的文件默认不会有组和其他用户的写权限 

2.4.4.2 设置新的掩码 

将掩码设置为 0002,以便新创建的文件默认只有文件所有者有写权限 

umask 0002

2.4.5 注意事项

  • umask 设置的是默认权限掩码,它不会改变已经存在的文件或目录的权限。
  • umask 的设置通常会在用户的 shell 配置文件(如 .bashrc 或 .bash_profile)中定义,以便在用户登录时自动应用。
  • 系统管理员可能会为整个系统或特定用户设置默认的 umask 值,以控制新文件和目录的默认权限。 
03-28 22:08