系统管理
- 系统安全
sudo以其他身份(超级用户)来执行命令
- 进程和作业
systemctl系统服务管理器指令service控制系统服务的实用工具w显示目前登入系统的用户信息watch周期性执行给定的指令pidof查找指定名称的进程的进程 ID 号ps报告当前系统的进程状态telint切换当前正在运行系统的运行等级init所有 Linux 进程的父进程at在指定时间执行一个任务crontab提交和管理用户的需要周期性执行的任务nohup将程序以忽略挂起信号的方式运行起来nice指定的进程调度优先级启动其他程序renice修改正在运行的进程的调度优先级kill删除执行中的程序或工作pkill可以按照进程名杀死进程skill向选定的进程发送信号冻结进程killall使用进程的名称来杀死一组进程
- 用户和工作组
useradd新建用户userdel删除用户passwod修改用户密码usermod修改用户属性chage修改用户属性change修改账号和密码的有效期限id显示用户的 ID 以及所属群组的 IDsu用于切换当前用户身份到其他用户身份logname打印执行该命令的用户名
- 系统关机和重启
shutdown执行系统关机命令
进程信息
- PID:进程 ID,进程的唯一标识
- USER:进程所有者的实际用户名
- PR:进程的调度优先级
- NI:进程的 nice 值(优先级)越小的值代表优先级越高
- VIRT:进程使用的虚拟内存
- RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。
- SHR:进程使用的共享内存。
- TTY:该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等
- S:进程的状态
- D = 不可中断的睡眠态
- R = 运行态
- S = 睡眠态
- T = 被跟踪或已停止
- Z = 僵尸态
- %CPU:自从上一次更新时到现在任务所使用的 CPU 时间百分比。
- %MEM:进程使用的可用物理内存百分比。
- TIME+:任务启动后到现在所使用的全部 CPU 时间,精确到百分之一秒。
- COMMAND:运行进程所使用的命令。
Systemd & systemctl
Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
systemctl 是 Systemd 的主命令,用于管理系统。
systemd-analyze 命令用于查看启动耗时。
hostnamectl 命令用于查看当前主机的信息。
...
Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。
Unit 一共分成 12 种。
Service unit:系统服务 Target unit:多个 Unit 构成的一个组 Device Unit:硬件设备 Mount Unit:文件系统的挂载点 Automount Unit:自动挂载点 Path Unit:文件或路径 Scope Unit:不是由 Systemd 启动的外部进程 Slice Unit:进程组 Snapshot Unit:Systemd 快照,可以切回某个快照 Socket Unit:进程间通信的 socket Swap Unit:swap 文件 Timer Unit:定时器
对于用户来说,最常用的是下面这些命令,用于启动和停止 Unit (主要是 service)。
# 立即启动一个服务
$ sudo systemctl start apache.service
# 立即停止一个服务
$ sudo systemctl stop apache.service
# 重启一个服务
$ sudo systemctl restart apache.service
# 杀死一个服务的所有子进程
$ sudo systemctl kill apache.service
# 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service
# 重载所有修改过的配置文件
$ sudo systemctl daemon-reload
# 显示某个 Unit 的所有底层参数
$ systemctl show httpd.service
# 显示某个 Unit 的指定属性的值
$ systemctl show -p CPUShares httpd.service
# 设置某个 Unit 的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500
ps
ps 命令用于报告当前系统的进程状态。
# 查看进程信息
ps <pid>
# 找到 java 进程
ps -ef | grep java
进程也是树形结构 进程和权限有着密不可分的关系
列出目前所有正在内存当中的程序:
ps aux
# Output
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# kenny 6155 21.3 1.7 7969944 284912 ?? S 二03下午 199:14.14 /Appl...OS/WeChat
# kenny 559 20.4 0.8 4963740 138176 ?? S 二03下午 33:28.27 /Appl...S/iTerm2
# _windowserver 187 18.0 0.6 7005748 95884 ?? Ss 二03下午 288:44.97 /Syst...Light.WindowServer -daemon
# kenny 1408 10.7 2.1 5838592 347348 ?? S 二03下午 138:51.63 /Appl...nts/MacOS/Google Chrome
# kenny 327 5.8 0.5 5771984 79452 ?? S 二03下午 2:51.58 /Syst...pp/Contents/MacOS/Finder
# 在所有程序中查找 nginx
# -a 显示所有终端机下执行的程序
# -u 列出该用户的程序的状况
# -v 同 -a
ps aux | grep nginx
# 列出类似程序树的程序显示
ps -axjf
s
pstree
# 以树状结构显示线程结构
pstree
at
基本格式:
at [-f filename] time
时间格式:
- 标准的消失和分钟格式,比如 10:15
- AM/PM 指示符,比如 10:15 PM
- 特定可命名时间,比如
now、noon、midnigh或者teatime(4 PM)
除了指定运行作业的时间,也可以通过不同功能的日期格式指定特定的日期。
- 标准日期格式,比如
MMDDYY、MM/DD/YY或DD.MM.YY - 文本日期,比如
Jul 4或Dec 25,加不加年份均可 - 你也可以指定时间增量
- 当前时间
+25min - 明天
10:15 PM 10:15+7天
- 当前时间
# -f 指明执行的脚本文件,now 指明 at 命令立即执行该脚本
at -f timer.sh now
# 如果不想在 at 命令中使用邮件或重定向,最好加上 -M 选项来屏蔽作业产生的输出信息
at -M -f timer.sh tomorrow
# 查询待执行作业列表
atq
# 删除作业
# 先通过 atq 查询待执行作业,删除作业号为 10 的作业
atrm 10
nice
nice 命令允许你设置命令启动时的调度优先级。要让命令以更低的优先级运行,只要用 nice 的 -n 命令来指定新的优先级级别。
# -n 选项并非必须的,只要在破折号后跟上优先级即可
nice -n 10 ./test.sh > test.out &
# 新建进程并设置优先级,将当前目录下的 documents 目录打包,但不希望 tar 占用太多 CPU
nice -10 tar zcf pack.tar.gz documents