Linux运维——系统管理

一、Linux系统管理要点

  • 查看 Linux 系统发行版本
    • 使用 lsb_release(此命令适用于所有的 Linux 发行版本)
    • 使用 cat /etc/redhat-release(此方法只适合 Redhat 系的 Linux)
  • 查看 CPU 信息 - 使用 cat /proc/cpuinfo
  • 重新启动 Linux 操作系统 - 使用 reboot
  • 退出 shell,并返回给定值 - 使用 exit
  • 关闭系统 - 使用 shutdown
  • 查看或设置系统时间与日期 - 使用 date
  • 挂载文件系统 - 使用 mount
  • 取消挂载文件系统 - 使用 umount
  • 查看系统当前进程状态 - 使用 ps
  • 删除当前正在运行的进程 - 使用kill
  • 启动、停止、重启、关闭、显示系统服务(Centos7),使用 systemctl
  • 启动、停止、重启、关闭、显示系统服务(Centos7 以前),使用 service
  • 管理需要周期性执行的任务,使用 crontab

二、命令常见用法

2.1、lsb_release

lsb_release 不是 bash 默认命令,如果要使用,需要先安装。

安装方法:

  • 执行 yum provides lsb_release,查看支持 lsb_release 命令的包。
  • 选择合适版本,执行类似这样的安装命令:yum install -y redhat-lsb-core-4.1-27.el7.centos.1.x86_64

2.2、reboot

reboot 命令用来重新启动正在运行的 Linux 操作系统。

reboot [选项]

常用选项:

  • -f:强制重启,不调用 shutdown 或 init 进程。
  • -n:重启前不执行同步操作(不推荐,可能导致数据丢失)。
  • -w:模拟重启,只写入重启记录到 /var/log/wtmp,而不实际重启系统。
  • -d:不写入重启记录到 /var/log/wtmp
  • -i:重启前关闭所有网络接口。

使用示例:
正常重启系统

sudo reboot

强制重启系统

sudo reboot -f

模拟重启(不实际重启)

sudo reboot -w

重启前关闭网络接口

sudo reboot -i

重启前不执行同步操作(不推荐)

sudo reboot -n

注意事项:

  • 权限要求:重启系统需要 root 权限,通常使用 sudo。
  • 数据安全:强制重启(-f)或跳过同步操作(-n)可能导致数据丢失,请谨慎使用。
  • 日志记录:默认情况下,重启操作会记录到 /var/log/wtmp 中。
  • 替代命令:也可以使用 shutdown -r now 或 init 6 来重启系统。

相关命令:
关机

sudo shutdown -h now

定时重启

sudo shutdown -r +10
# 10 分钟后重启。

取消计划的重启或关机

sudo shutdown -c

2.3、exit

exit 命令同于退出 shell,并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。

exit [状态码]
# 状态码:可选参数,用于指定退出状态。默认值为 0,表示成功。非零值通常表示错误或异常退出。

使用示例:
退出当前 shell 会话

exit
# 如果当前 shell 是登录 shell,退出后会返回到登录界面或关闭终端。

退出脚本并返回状态码

# 在脚本中使用 exit 可以终止脚本执行并返回指定的状态码。例如:

#!/bin/bash
if [ ! -f /path/to/file ]; then
    echo "文件不存在"
    exit 1
fi
echo "文件存在"
exit 0

退出子 shell

# 如果在子 shell 中执行 exit,只会退出当前子 shell,不会影响父 shell。例如:

(echo "进入子 shell"; exit; echo "这行不会执行")
echo "回到父 shell"

退出远程会话

# 在 SSH 远程登录时,输入 exit 可以断开连接并关闭会话:
exit

退出函数

# 在函数中使用 exit 会终止整个脚本,而不仅仅是函数。如果只想退出函数,可以使用 return。例如:

my_function() {
    echo "函数开始"
    if [ "$1" = "error" ]; then
        return 1
    fi
    echo "函数结束"
}
my_function "error"
echo "脚本继续执行"

状态码:

  • 0:表示成功。
  • 1-255:表示错误或异常退出。
    • 1:通用错误
    • 2:命令用法错误
    • 126:命令不可执行
    • 127:命令未找到
    • 128+N:脚本被信号 N 终止(例如,exit 130 表示被 Ctrl+C 终止)

注意事项:

  • 退出当前会话:
    • 在终端中执行 exit 会关闭当前 shell 会话。
    • 如果当前 shell 是唯一的登录 shell,退出后会关闭终端。
  • 脚本中的 exit:
    • 在脚本中使用 exit 会终止整个脚本的执行。
    • 如果只想退出函数或循环,可以使用 return 或 break。
  • 状态码的意义:
    • 状态码是脚本或命令执行结果的反馈,通常用于调试或自动化任务。

2.4、shutdown

shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。

shutdown [选项] [时间] [消息]
  • 时间:指定关机或重启的时间,可以是具体时间(如 22:00)或相对时间(如 +10 表示 10 分钟后)。
  • 消息:可选参数,向所有登录用户广播的消息。

常用选项:

  • -h:关机(halt)。
  • -r:重启(reboot)。
  • -c:取消计划的关机或重启。
  • -k:仅发送警告消息,不实际关机或重启。
  • -P:关机并关闭电源(默认行为)。
  • -H:关机但不关闭电源(系统进入 halt 状态)。
  • -f:强制关机或重启,不调用 init 进程。
  • -t:指定延迟时间(秒),默认为 60 秒。

使用示例:
立即关机

sudo shutdown -h now

10 分钟后关机

sudo shutdown -h +10

指定时间关机

sudo shutdown -h 22:00

立即重启

sudo shutdown -r now

5 分钟后重启,并发送消息

sudo shutdown -r +5 "系统将在 5 分钟后重启,请保存工作!"

取消计划的关机或重启

sudo shutdown -c

发送警告消息但不关机

sudo shutdown -k +5 "系统即将关闭,请保存工作!"

关机并关闭电源

sudo shutdown -P now

关机但不关闭电源

sudo shutdown -H now

强制关机

sudo shutdown -f -h now

注意事项:

  1. 权限要求:
    • 执行 shutdown 需要 root 权限,通常使用 sudo。
  2. 广播消息:
    • 使用 shutdown 时,可以广播消息给所有登录用户,提醒他们保存工作。
  3. 取消操作:
    • 如果计划了关机或重启,可以使用 shutdown -c 取消。
  4. 延迟时间:
    • 默认情况下,shutdown 会在执行前等待 60 秒。可以使用 -t 选项调整延迟时间。
  5. 替代命令:
    • 关机:halt、poweroff
    • 重启:reboot、init 6

相关命令:
查看计划中的关机或重启

cat /run/systemd/shutdown/scheduled

立即关机

sudo poweroff

立即重启

sudo reboot

2.5、date

date 命令是显示或设置系统时间与日期。

date [选项] [+格式]
# 如果不指定选项或格式,默认显示当前日期和时间。
# 使用 + 开头的格式字符串可以自定义输出格式。

常用选项:

  • -d--date:显示指定日期或时间的字符串(支持相对时间)。
  • -s--set:设置系统日期和时间。
  • -u:显示或设置 UTC 时间(协调世界时)。
  • -r:显示指定文件的最后修改时间。
  • -I:以 ISO 8601 格式显示日期和时间。

使用示例:
显示当前日期和时间

date
# 输出示例:
Mon Oct 30 14:45:22 UTC 2023

自定义输出格式

date "+%Y-%m-%d %H:%M:%S"
# 输出示例:
2023-10-30 14:45:22

显示 UTC 时间

date -u
# 输出示例:
Mon Oct 30 14:45:22 UTC 2023

显示指定日期或时间

date -d "2023-10-30"
# 输出示例:
Mon Oct 30 00:00:00 UTC 2023

显示相对时间

date -d "tomorrow"
date -d "yesterday"
date -d "next week"
date -d "2 days ago"

设置系统日期和时间

sudo date -s "2023-10-30 14:45:22"

显示文件的最后修改时间

date -r /path/to/file

以 ISO 8601 格式显示日期和时间

date -I
# 输出示例:
2023-10-30

常用格式符号:

符号说明示例
%Y年份(4 位)2023
%y年份(2 位)23
%m月份(01-12)10
%d日期(01-31)30
%H小时(00-23)14
%M分钟(00-59)45
%S秒数(00-59)22
%A星期全称Monday
%a星期缩写Mon
%B月份全称October
%b月份缩写Oct
%T时间(HH:MM:SS )14:45:22
%F日期(YYYY-MM-DD)2023-10-30
%Z时区UTC
%s时间戳(从 1970-01-01 起)1698672322
# 格式化输出
date +"%Y-%m-%d"
2009-12-07

# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19

# 2 秒后输出
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31

# 传说中的 1234567890 秒
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30

# 普通转格式
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00

# apache 格式转换
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37

# 格式转换后时间游走
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37

# 加减操作
date +%Y%m%d                   # 显示前天年月日
date -d "+1 day" +%Y%m%d       # 显示前一天的日期
date -d "-1 day" +%Y%m%d       # 显示后一天的日期
date -d "-1 month" +%Y%m%d     # 显示上一月的日期
date -d "+1 month" +%Y%m%d     # 显示下一月的日期
date -d "-1 year" +%Y%m%d      # 显示前一年的日期
date -d "+1 year" +%Y%m%d      # 显示下一年的日期

# 设定时间
date -s                        # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523               # 设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01               # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23"  # 这样可以设置全部时间
date -s "01:01:01 20120523"    # 这样可以设置全部时间
date -s "2012-05-23 01:01:01"  # 这样可以设置全部时间
date -s "20120523 01:01:01"    # 这样可以设置全部时间

# 有时需要检查一组命令花费的时间
#!/bin/bash

start=$(date +%s)
nmap man.linuxde.net &> /dev/null

end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.

注意事项:

  1. 权限要求:
    • 设置系统日期和时间需要 root 权限,通常使用 sudo。
  2. 时区设置:
    • 使用 timedatectl 命令可以查看或修改系统时区:
timedatectl set-timezone Asia/Shanghai
  1. 时间同步:
    • 使用 ntp 或 chrony 服务可以同步系统时间。

2.6、mount

mount 命令用于挂载文件系统到指定的挂载点。此命令的最常用于挂载 cdrom,使我们可以访问 cdrom 中的数据,因为你将光盘插入 cdrom 中,Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。

mount [选项] [设备] [挂载点]
# 设备:要挂载的设备(如 /dev/sda1)或远程文件系统(如 NFS)。
# 挂载点:文件系统挂载的目标目录。

常用选项:

  • -t:指定文件系统类型(如 ext4、ntfs、nfs 等)。
  • -o:指定挂载选项(如 ro 只读、rw 读写、remount 重新挂载等)。
  • -a:挂载 /etc/fstab 中定义的所有文件系统。
  • -l:显示已挂载的文件系统及其标签。
  • -v:显示详细信息。
  • -r:以只读模式挂载。
  • -w:以读写模式挂载(默认)。

使用示例:
挂载设备到目录

sudo mount /dev/sdb1 /mnt/data

指定文件系统类型

sudo mount -t ext4 /dev/sdb1 /mnt/data

挂载为只读模式

sudo mount -o ro /dev/sdb1 /mnt/data

重新挂载为读写模式

sudo mount -o remount,rw /mnt/data

挂载 NFS 文件系统

sudo mount -t nfs 192.168.1.100:/shared /mnt/nfs

挂载 ISO 文件

sudo mount -o loop /path/to/image.iso /mnt/iso

挂载 /etc/fstab 中定义的所有文件系统

sudo mount -a

显示已挂载的文件系统

mount
# 或
mount -l

卸载文件系统

sudo umount /mnt/data

挂载选项(-o):

选项说明
ro只读模式
rw读写模式(默认)
remount重新挂载文件系统
noexec禁止执行文件系统中的可执行文件
nosuid禁止设置 SUID 和 SGID 权限
nodev禁止使用设备文件
sync同步写入(性能较低,但数据更安全)
async异步写入(默认,性能较高)
defaults使用默认选项(rw, suid, dev, exec, auto, nouser, async)

配置文件 /etc/fstab:

/etc/fstab 文件用于定义系统启动时自动挂载的文件系统。每行格式如下:

设备      挂载点      文件系统类型  挂载选项  备份标志  检查顺序

挂载本地分区

/dev/sdb1  /mnt/data  ext4  defaults  0  2

挂载 NFS 文件系统

192.168.1.100:/shared  /mnt/nfs  nfs  defaults  0  0

挂载交换分区

/dev/sdb2  none  swap  sw  0  0

注意事项:

  • 权限要求:
    • 挂载和卸载文件系统需要 root 权限,通常使用 sudo。
      卸载文件系统:
  • 在卸载文件系统前,确保没有进程正在使用该文件系统,否则会报错。
    • 使用 lsof 或 fuser 命令可以查看正在使用文件系统的进程:
lsof /mnt/data
fuser -v /mnt/data
  • 文件系统类型:
    • 如果不指定文件系统类型,mount 会尝试自动检测。
  • 挂载点:
    • 挂载点必须是一个已存在的目录。

相关命令:
查看磁盘分区

lsblk

查看文件系统类型

blkid

查看挂载信息

df -h

强制卸载文件系统

sudo umount -l /mnt/data

2.8、ps

ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

ps [选项]
# 如果不指定选项,默认显示当前用户的进程

常用选项:

  • -e:显示所有进程。
  • -f:显示完整格式的进程信息。
  • -u:显示指定用户的进程。
  • -p:显示指定 PID 的进程。
  • -aux:显示所有用户的进程(BSD 风格)。
  • -ef:显示所有进程的完整信息(标准风格)。
  • --forest:以树状结构显示进程。
  • -o:自定义输出格式。

使用示例:
显示当前用户的进程

ps
#输出示例:
PID TTY          TIME CMD
1234 pts/0    00:00:00 bash
5678 pts/0    00:00:00 ps

显示所有进程

ps -e

显示完整格式的进程信息

ps -ef
# 输出示例:
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 14:30 ?        00:00:01 /sbin/init
user      1234  1233  0 14:35 pts/0    00:00:00 bash

显示指定用户的进程

ps -u username

显示指定 PID 的进程

ps -p 1234

显示所有用户的进程(BSD 风格)

ps aux
# 输出示例:
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  12345  6789 ?        Ss   14:30   0:01 /sbin/init
user      1234  0.0  0.2  23456  7890 pts/0    S+   14:35   0:00 bash

以树状结构显示进程

ps --forest

自定义输出格式

ps -eo pid,ppid,cmd
#输出示例:
PID  PPID CMD
1     0 /sbin/init
1234  1233 bash

常用输出字段:

字段说明
PID进程 ID
PPID父进程 ID
UID用户 ID
USER用户名
%CPUCPU 使用率
%MEM内存使用率
VSZ虚拟内存大小(KB)
RSS常驻内存大小(KB)
TTY终端设备
STAT进程状态
START进程启动时间
TIME进程占用 CPU 时间
CMD启动进程的命令

进程状态(STAT):

状态说明
R运行中
S睡眠中(可中断)
D不可中断的睡眠(通常为 I/O 操作)
Z僵尸进程
T停止或被跟踪
<高优先级
N低优先级
s会话领导者
l多线程
+前台进程组

相关命令:

  • 实时监控进程
top
  • 查找进程
pgrep nginx

杀死进程

pkill nginx

2.9、kill

kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。

kill [选项] [信号] [PID]
# 信号:可以是信号编号或信号名称(如 9 或 SIGKILL)。
# PID:目标进程的进程 ID。

常用信号:

信号编号信号名称说明
1SIGHUP挂起,通常用于重新加载配置
2SIGINT中断(等同于 Ctrl+C)
9SIGKILL强制终止进程
15SIGTERM正常终止进程(默认信号)
18SIGCONT恢复暂停的进程
19SIGSTOP暂停进程

使用示例:

终止进程(默认发送 SIGTERM)

kill 1234

强制终止进程(发送 SIGKILL)

kill -9 1234
# 或
kill -SIGKILL 1234

暂停进程(发送 SIGSTOP)

kill -19 1234

恢复暂停的进程(发送 SIGCONT)

kill -18 1234

重新加载进程配置(发送 SIGHUP)

kill -1 1234

终止所有同名进程

killall process_name

终止当前用户的指定进程

pkill process_name
# 列出所有信号名称
 kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

# 先用 ps 查找进程,然后用 kill 杀掉
ps -ef | grep vim
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim

kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程

注意事项:

  • 权限要求:
    • 普通用户只能终止自己拥有的进程。
    • 终止其他用户的进程需要 root 权限,通常使用 sudo。
  • 信号选择:
    • 优先使用 SIGTERM(15),允许进程正常退出。
    • 如果进程无法正常退出,再使用 SIGKILL(9)强制终止。
  • 僵尸进程:
    • SIGKILL 无法终止僵尸进程,需要终止其父进程。
  • 批量终止进程:
    • 使用 killall 或 pkill 可以批量终止同名进程。

相关命令:
查找进程

pgrep process_name

批量终止进程

pkill process_name

显示信号列表

kill -l

实时监控进程

top

2.10、systemctl

systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。

systemctl [选项] [命令] [服务名]

系统管理:

重启系统

sudo systemctl reboot

关闭系统

sudo systemctl poweroff

挂起系统

sudo systemctl suspend

进入休眠状态

sudo systemctl hibernate

查看系统状态

systemctl status

查看所有已启动的服务

systemctl list-units --type=service

查看所有服务(包括未启动的)

systemctl list-units --type=service --all

查看失败的服务

systemctl --failed

常用选项:

  • --no-pager:禁用分页显示。
  • --type=:指定单元类型(如 service、socket 等)。
  • --state=:指定单元状态(如 running、failed 等)。
  • -H:远程管理其他主机(需配置 SSH)。

使用示例:

# 1.启动 nfs 服务
systemctl start nfs-server.service

# 2.设置开机自启动
systemctl enable nfs-server.service

# 3.停止开机自启动
systemctl disable nfs-server.service

# 4.查看服务当前状态
systemctl status nfs-server.service

# 5.重新启动某服务
systemctl restart nfs-server.service

# 6.查看所有已启动的服务
systemctl list -units --type=service

# 7. 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept

# 8. 彻底关闭防火墙
sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service

启动 Apache 服务

sudo systemctl start apache2

停止 Nginx 服务

sudo systemctl stop nginx

重启 MySQL 服务

sudo systemctl restart mysql

查看 SSH 服务状态

systemctl status sshd

启用 Docker 服务开机自启

sudo systemctl enable docker

禁用防火墙开机自启

sudo systemctl disable ufw

查看所有正在运行的服务

systemctl list-units --type=service --state=running

查看系统日志

journalctl -xe

注意事项:

  • 权限要求:
    • 启动、停止、重启服务等操作需要 root 权限,通常使用 sudo。
  • 服务名称:
    • 服务名称通常以 .service 结尾,但使用 systemctl 时可以省略。
  • 日志查看:
    • 使用 journalctl 可以查看服务的详细日志。例如:
journalctl -u service_name
  • 服务依赖:
    • 某些服务可能依赖其他服务,启动或停止时需注意依赖关系。

相关命令:

查看系统日志

journalctl

查看服务日志

journalctl -u service_name

查看系统启动时间

systemctl show -p KernelTimestamp

查看服务依赖关系

systemctl list-dependencies service_name

2.11、service

service 命令是 Redhat Linux 兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

启动服务

sudo service <服务名> start
# 示例
sudo service apache2 start

停止服务

sudo service <服务名> stop
# 示例:
sudo service apache2 stop

.重启服务

sudo service <服务名> restart
# 示例:
sudo service apache2 restart

查看服务状态

sudo service <服务名> status
# 示例:
sudo service apache2 status

重新加载服务配置

sudo service <服务名> reload
# 示例:
sudo service apache2 reload

启用或禁用服务

service 命令不直接支持启用或禁用服务,通常使用 chkconfig 或 update-rc.d 来实现。

注意事项:

  • 服务名:需替换为实际的服务名称,如 apache2、nginx 等。
  • 权限:通常需要 sudo 权限。
  • 系统兼容性:service 命令适用于 System V init 系统,在 systemd 系统中建议使用 systemctl。

示例:

启动 Apache 服务:

sudo service apache2 start

查看 Apache 状态:

sudo service apache2 status

重启 Apache:

sudo service apache2 restart

2.12、crontab

crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

基本用法:
编辑当前用户的 cron 任务

crontab -e
# 这会打开默认文本编辑器(如 vi 或 nano),允许你添加或修改 cron 任务。
# 保存并退出后,任务会自动生效。

查看当前用户的 cron 任务

crontab -l
# 列出当前用户的所有 cron 任务。

删除当前用户的所有 cron 任务

crontab -r
#这会删除当前用户的所有 cron 任务,谨慎使用!

为其他用户管理 cron 任务(需要 root 权限)

sudo crontab -u <用户名> -e  # 编辑其他用户的 cron 任务
sudo crontab -u <用户名> -l  # 查看其他用户的 cron 任务
sudo crontab -u <用户名> -r  # 删除其他用户的 cron 任务

Cron任务格式:
每个 cron 任务由 6 个字段组成,格式如下:

* * * * * <要执行的命令>
字段含义取值范围
第1个字段分钟0-59
第2个字段小时0-23
第3个字段日期1-31
第4个字段月份1-12
第5个字段星期几0-7(0 和 7 都表示周日)
第6个字段要执行的命令可以是任何命令或脚本

特殊符号:

  • *:表示所有可能的值。
    • 例如,* * * * * 表示每分钟执行一次。
  • ,:用于分隔多个值。
    • 例如,0,15,30,45 * * * * 表示每小时的 0、15、30、45 分钟执行。
  • -:表示范围。
    • 例如,0 9-17 * * * 表示每天 9 点到 17 点之间,每小时的第 0 分钟执行。
  • /:表示间隔。
    • 例如,*/5 * * * * 表示每 5 分钟执行一次。

使用示例:*
每天凌晨 2 点执行脚本

0 2 * * * /path/to/script.sh

每 5 分钟执行一次命令

*/5 * * * * /path/to/command

每周一的上午 8 点执行任务

0 8 * * 1 /path/to/task

每月 1 号的凌晨 0 点执行备份

0 0 1 * * /path/to/backup.sh

每小时的第 30 分钟执行任务

30 * * * * /path/to/task
# 每 1 分钟执行一次 command
* * * * * command

# 每小时的第 3 和第 15 分钟执行
3,15 * * * * command

# 在上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * * command

# 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 */2 * * command

# 每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * 1 command

# 每晚的 21:30 重启 smb
30 21 * * * /etc/init.d/smb restart

# 每月 1、10、22 日的 4 : 45 重启 smb
45 4 1,10,22 * * /etc/init.d/smb restart

# 每周六、周日的 1:10 重启 smb
10 1 * * 6,0 /etc/init.d/smb restart

# 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
0,30 18-23 * * * /etc/init.d/smb restart

# 每星期六的晚上 11:00 pm 重启 smb
0 23 * * 6 /etc/init.d/smb restart

# 每一小时重启 smb
* */1 * * * /etc/init.d/smb restart

# 晚上 11 点到早上 7 点之间,每隔一小时重启 smb
* 23-7/1 * * * /etc/init.d/smb restart

# 每月的 4 号与每周一到周三的 11 点重启 smb
0 11 4 * mon-wed /etc/init.d/smb restart

# 一月一号的 4 点重启 smb
0 4 1 jan * /etc/init.d/smb restart

# 每小时执行`/etc/cron.hourly`目录内的脚本
01 * * * * root run-parts /etc/cron.hourly

注意事项:

  • 环境变量:cron 任务的环境变量可能与用户登录时的环境不同,建议在脚本中显式设置环境变量。
  • 路径问题:cron 任务的命令尽量使用绝对路径,避免因路径问题导致任务失败。
  • 日志记录:可以通过重定向输出记录日志,例如:
* * * * * /path/to/script.sh >> /path/to/logfile.log 2>&1
  • 权限问题:确保脚本具有可执行权限(chmod +x script.sh)。

2.13、top

top 是 Linux 中用于实时监控系统性能的命令行工具。它可以显示系统的 ​CPU 使用率、内存使用率、进程信息 等,并且会动态更新数据。

top [选项]

常用选项:

  • -d 秒数 设置刷新间隔时间(默认 3 秒)。
  • -p PID 监控指定进程 ID(可以指定多个 PID,用逗号分隔)。
  • -u 用户名 只显示指定用户的进程。
  • -n 次数 刷新指定次数后退出。
  • -b 以批处理模式运行,适合将输出重定向到文件。
  • -H 显示线程而不是进程。
  • -c 显示完整的命令行(默认只显示命令名称)。
  • -i 忽略空闲进程。

top界面说明:

顶部区域:

  • top 命令名称和刷新时间。
  • Tasks 总进程数、运行中进程数、睡眠进程数、停止进程数、僵尸进程数。
  • %CPU(s) CPU 使用率(用户空间、内核空间、空闲等)。
  • MiB Mem 内存使用情况(总内存、已用内存、空闲内存、缓存等)。
  • MiB Swap 交换分区使用情况(总交换分区、已用交换分区、空闲交换分区)。

进程列表:

  • PID 进程 ID。
  • USER 进程所属用户。
  • PR 进程优先级。
  • NI 进程的 nice 值(影响优先级)。
  • VIRT 进程使用的虚拟内存总量(KB 或 MB)。
  • RES 进程使用的物理内存总量(KB 或 MB)。
  • SHR 进程使用的共享内存量(KB 或 MB)。
  • S 进程状态(R=运行,S=睡眠,Z=僵尸,D=不可中断睡眠等)。
  • %CPU 进程占用的 CPU 使用率。
  • %MEM 进程占用的内存使用率。
  • TIME+ 进程占用的 CPU 时间(累计)。
  • COMMAND 进程的命令名称或完整命令行(取决于 -c 选项)。

常用快捷键:

  • k 终止一个进程(输入 PID 后回车)。
  • r 修改进程的 nice 值(输入 PID 和 nice 值后回车)。
  • P 按 CPU 使用率排序。
  • M 按内存使用率排序。
  • T 按运行时间排序。
  • N 按 PID 排序。
  • c 切换显示完整命令行。
  • H 显示线程而不是进程。
  • Z 切换彩色显示。
  • q 退出 top。

使用示例:

启动 top

top

设置刷新间隔为 1 秒

top -d 1

监控指定进程

#监控 PID 为 1234 的进程:
top -p 1234

监控指定用户的进程

#监控用户 john 的进程:
top -u john

显示完整命令行

top -c

显示线程信息

top -H

以批处理模式运行

#将输出保存到文件:
top -b -n 1 > top_output.txt

按 CPU 使用率排序

top 界面中按 P 键。

按内存使用率排序

top 界面中按 M 键。

终止进程

top 界面中按 k 键,输入 PID 后回车。

实际应用场景:

查找高 CPU 使用率的进程

运行 top 并按 P 键,查看占用 CPU 最多的进程。

查找高内存使用率的进程

运行 top 并按 M 键,查看占用内存最多的进程。

监控特定进程

top -p $(pgrep nginx)

​保存系统快照

top -b -n 1 > system_snapshot.txt

2.14、lsof

lsof(List Open Files)是一个强大的 Linux 命令,用于列出当前系统打开的文件。由于在 Linux 中 ​一切皆文件,lsof 不仅可以显示普通文件,还可以显示网络连接、设备文件、管道、套接字等。

lsof [选项] [文件或目录]

常用选项:

  • -a 逻辑与(AND),同时满足多个条件。
  • -c 进程名 显示指定进程名打开的文件。
  • -p PID 显示指定进程 ID 打开的文件。
  • -u 用户名 显示指定用户打开的文件。
  • -i 显示网络连接(如 TCP、UDP 端口)。
  • -i :端口号 显示指定端口的连接。
  • -i 协议 显示指定协议(如 TCP、UDP)的连接。
  • -i @IP地址 显示指定 IP 地址的连接。
  • -d 文件描述符 显示指定文件描述符(如 0=标准输入,1=标准输出,2=标准错误)。
  • +D 目录 递归显示指定目录下打开的文件。
  • -t 仅显示进程 ID(适合脚本中使用)。
  • -n 不解析主机名(显示 IP 地址)。
  • -P 不解析端口名(显示端口号)。
  • -r 秒数 每隔指定秒数刷新输出(类似 top)。

输出字段:

  • COMMAND 进程的命令名称。
  • PID 进程 ID。
  • USER 进程所属用户。
  • FD 文件描述符(如 cwd=当前目录,txt=程序代码,mem=内存映射文件等)。
  • TYPE 文件类型(如 REG=普通文件,DIR=目录,CHR=字符设备等)。
  • DEVICE 设备号。
  • SIZE/OFF 文件大小或偏移量。
  • NODE 文件的 inode 号。
  • NAME 文件名或路径。

使用示例:
列出所有打开的文件

lsof

列出指定用户打开的文件

#列出用户 root 打开的文件:
lsof -u root

列出指定进程打开的文件

#列出 PID 为 1234 的进程打开的文件:
lsof -p 1234

列出指定进程名打开的文件

#列出 nginx 进程打开的文件:
lsof -c nginx

列出网络连接

#列出所有 TCP 和 UDP 连接:
lsof -i

列出指定端口的连接

#列出端口 80 的连接:
lsof -i :80

列出指定协议(如 TCP)的连接

#列出所有 TCP 连接:
lsof -i TCP

列出指定 IP 地址的连接

#列出与 192.168.1.1 相关的连接:
lsof -i @192.168.1.1

列出指定目录下打开的文件

#递归列出 /var/log 目录下打开的文件:
lsof +D /var/log

列出指定文件描述符的文件

#列出标准输入(0)打开的文件:
lsof -d 0

列出被删除但仍被进程占用的文件

lsof | grep deleted

列出指定文件被哪些进程打开

#列出 /var/log/syslog 被哪些进程打开:
lsof /var/log/syslog

仅显示进程 ID

# 列出打开 /var/log/syslog 的进程 ID:
lsof -t /var/log/syslog

实时刷新输出

#每隔 5 秒刷新一次输出:
lsof -r 5

实际应用场景:

查找占用端口的进程

#查找哪个进程占用了端口 8080:
lsof -i :8080

查找被删除但仍被进程占用的文件

#查找已删除但仍被进程占用的文件:
lsof | grep deleted

查找指定用户打开的网络连接

#查找用户 www-data 打开的网络连接:
lsof -u www-data -i

查找指定进程打开的文件

#查找 nginx 进程打开的文件:
lsof -c nginx

查找指定目录下打开的文件

#查找 /tmp 目录下打开的文件:
lsof +D /tmp

2.15、kill

kill 命令用于向进程发送信号,以控制进程的行为(如终止、重启、暂停等)。

kill [选项] <PID>
# <PID>:进程 ID(Process ID),可以通过 ps 或 top 等命令查看。

常用信号:

信号编号信号名称描述
1SIGHUP挂起信号,通常用于重启进程(如重新加载配置文件)。
2SIGINT中断信号(等同于 Ctrl+C),通常用于终止前台进程。
3SIGQUIT退出信号,通常用于终止进程并生成核心转储文件。
9SIGKILL强制终止信号,立即终止进程(无法被捕获或忽略)。
15SIGTERM终止信号(默认),请求进程正常退出(可以被捕获或忽略)。
18SIGCONT继续信号,恢复被暂停的进程。
19SIGSTOP暂停信号,暂停进程的执行(不可被捕获或忽略)。

常用选项:

  • -s <信号名> 指定信号名称(如 SIGKILL)。
  • -<信号编号> 指定信号编号(如 9)。
  • -l 列出所有信号名称。
  • -p 显示进程的 PID,但不发送信号(用于测试)。

使用示例:
终止指定进程:

#终止 PID 为 1234 的进程:
kill 1234
#默认发送 SIGTERM 信号,请求进程正常退出。

强制终止进程:

#强制终止 PID 为 1234 的进程:
kill -9 1234
#或:
kill -SIGKILL 1234

重启进程:

#发送 SIGHUP 信号,重启 PID 为 1234 的进程:
kill -1 1234
#或:
kill -SIGHUP 1234

暂停进程:

#暂停 PID 为 1234 的进程:
kill -19 1234
#或:
kill -SIGSTOP 1234

恢复被暂停的进程:

#恢复 PID 为 1234 的进程:
kill -18 1234
#或:
kill -SIGCONT 1234

列出所有信号名称:

#列出所有信号名称及其编号:
kill -l

发送自定义信号:

#发送信号 3(SIGQUIT)给 PID 为 1234 的进程:
kill -3 1234

测试 PID:

#显示 PID 为 1234 的进程,但不发送信号:
kill -p 1234

实际应用场景:
终止占用端口的进程:

#假设端口 8080 被占用,可以通过以下步骤终止进程:
#查找占用端口的进程:
lsof -i :8080
#终止该进程
kill <PID>

强制终止无响应的进程:

#如果某个进程无响应,可以使用 SIGKILL 强制终止:
kill -9 <PID>

重启服务:

#重启 nginx 服务:
#查找 nginx 的 PID:
pgrep nginx
#发送 SIGHUP 信号:
kill -1 <PID>

暂停和恢复进程:

#暂停一个进程:
kill -19 <PID>
#恢复该进程:
kill -18 <PID>

2.16、nice

nice 命令用于调整进程的调度优先级(即 ​nice 值),从而影响进程获取 CPU 资源的顺序。nice 值的范围是 -20 到 19,数值越低,优先级越高。

nice [选项] <命令>
# <命令>:要运行的命令或程序。
# 默认情况下,nice 会将进程的 nice 值设置为 10(较低优先级)。

常用选项:

  • -n <nice值> 指定 nice 值(范围:-20 到 19)。
  • --adjustment=<值> 与 -n 相同,指定 nice 值。
  • --help 显示帮助信息。
  • --version 显示版本信息。

使用示例:
以默认 nice 值运行命令

#以默认 nice 值(10)运行 sleep 命令:
nice sleep 100

指定 nice 值运行命令

nice5 运行 sleep 命令:
nice -n 5 sleep 100

提高进程优先级(降低 nice 值)

#以更高的优先级(nice 值 -5)运行 sleep 命令:
nice -n -5 sleep 100
#注意:普通用户只能将 nice 值设置为 0 到 19,root 用户可以设置为 -20 到 19。

查看进程的 nice 值

#使用 ps 命令查看进程的 nice 值:
ps -o pid,ni,comm -p <PID>
#ni:nice 值。
#comm:命令名称。

调整已运行进程的 nice 值

#使用 renice 命令调整已运行进程的 nice 值:
renice -n <nice值> -p <PID>
#例如,将 PID 为 1234 的进程的 nice 值调整为 10:
renice -n 10 -p 1234

实际应用场景:

运行低优先级任务

#运行一个低优先级的 CPU 密集型任务(如压缩文件):
nice -n 19 tar -czf archive.tar.gz /path/to/data

提高后台任务的优先级

#以较高优先级运行后台任务:
nice -n -10 ./background_task.sh &

避免前台任务被抢占

#运行一个高优先级的任务,确保它不会被其他进程抢占:
nice -n -10 ./critical_task

调整已运行进程的优先级

#调整一个已运行进程的优先级:
#查找进程的 PID:
ps aux | grep <进程名>
#调整 nice 值:
renice -n 5 -p <PID>

注意事项:

  • 权限限制:普通用户只能提高 nice 值(降低优先级),root 用户可以降低 nice 值(提高优先级)。
  • 影响范围:nice 值仅影响 CPU 调度,不影响 I/O 或其他资源。
  • 实时优先级:如果需要更精确的控制,可以使用 chrt 命令设置实时优先级。

2.17、renice

renice 命令用于修改已经运行的进程的 ​nice 值,从而调整进程的调度优先级。nice 值的范围是 -20 到 19,数值越低,优先级越高。

renice [选项] <nice值> [-p <PID>] [-u <用户名>] [-g <组名>]
# <nice值>:要设置的新的 nice 值(范围:-20 到 19)。
# -p <PID>:指定要修改的进程 ID。
# -u <用户名>:修改指定用户的所有进程。
# -g <组名>:修改指定组的所有进程。

常用选项:

  • -n <nice值> 指定新的 nice 值(范围:-20 到 19)。
  • -p <PID> 指定要修改的进程 ID。
  • -u <用户名> 修改指定用户的所有进程。
  • -g <组名> 修改指定组的所有进程。
  • --help 显示帮助信息。
  • --version 显示版本信息。

使用示例:
修改单个进程的 nice 值

#将 PID 为 1234 的进程的 nice 值修改为 10:
renice -n 10 -p 1234

提高进程的优先级

#将 PID 为 5678 的进程的 nice 值修改为 -5(提高优先级):
renice -n -5 -p 5678
#注意:普通用户只能将 nice 值设置为 0 到 19,root 用户可以设置为 -20 到 19。

修改指定用户的所有进程

#将用户 john 的所有进程的 nice 值修改为 5:
renice -n 5 -u john

修改指定组的所有进程

#将组 developers 的所有进程的 nice 值修改为 15:
renice -n 15 -g developers

查看进程的 nice 值

#使用 ps 命令查看进程的 nice 值:
ps -o pid,ni,comm -p <PID>
#ni:nice 值。
#comm:命令名称。

实际应用场景:

降低 CPU 密集型任务的优先级

#降低一个 CPU 密集型任务的优先级,避免影响其他任务:
renice -n 19 -p 1234

提高关键任务的优先级

#提高一个关键任务的优先级,确保它获得更多 CPU 资源:
renice -n -10 -p 5678

调整用户的所有进程

#调整用户 www-data 的所有进程的优先级:
renice -n 5 -u www-data

​调整组的所有进程

#调整组 backup 的所有进程的优先级:
renice -n 10 -g backup

注意事项:

  • 权限限制:普通用户只能提高 nice 值(降低优先级),root 用户可以降低 nice 值(提高优先级)。
  • 影响范围:nice 值仅影响 CPU 调度,不影响 I/O 或其他资源。
  • 实时优先级:如果需要更精确的控制,可以使用 chrt 命令设置实时优先级。

2.18、/proc虚拟文件系统

Linux 中的 /proc 文件系统是一个 ​虚拟文件系统,它提供了内核和运行中进程的信息。与普通文件系统不同,/proc 中的文件并不是存储在磁盘上的,而是由内核动态生成的。

/proc 文件系统的作用:

  • ​提供内核和进程信息:通过 /proc 可以查看系统状态、硬件信息、进程状态等。
  • 动态生成内容:/proc 中的文件内容是由内核实时生成的,反映了当前系统的状态。
  • ​配置内核参数:某些文件可以用于动态调整内核参数(如 /proc/sys/ 下的文件)。

/proc 文件系统的结构:

/proc 包含以下主要目录和文件:

系统信息:

  • /proc/cpuinfo 显示 CPU 的详细信息(如型号、核心数、频率等)。
  • /proc/meminfo 显示内存使用情况(如总内存、空闲内存、缓存等)。
  • /proc/version 显示内核版本和编译信息。
  • /proc/uptime 显示系统启动时间和空闲时间(以秒为单位)。
  • /proc/loadavg 显示系统的平均负载(1 分钟、5 分钟、15 分钟的平均负载)。
  • /proc/filesystems 显示系统支持的文件系统类型。
  • /proc/modules 显示已加载的内核模块。
  • /proc/stat 显示系统的统计信息(如 CPU 使用率、中断次数等)。
  • /proc/partitions 显示磁盘分区信息。
  • /proc/mounts 显示当前挂载的文件系统。

进程信息:

  • /proc/PID/status 显示进程的状态信息(如进程名、PID、内存使用等)。
  • /proc/PID/cmdline 显示启动进程的命令行参数。
  • /proc/PID/environ 显示进程的环境变量。
  • /proc/PID/fd/ 显示进程打开的文件描述符(每个文件描述符是一个符号链接)。
  • /proc/PID/cwd 显示进程的当前工作目录(符号链接)。
  • /proc/PID/exe 显示进程的可执行文件路径(符号链接)。
  • /proc/PID/maps 显示进程的内存映射信息。
  • /proc/PID/stat 显示进程的详细状态信息(如 CPU 时间、状态等)。

内核参数配置:

  • /proc/sys/ 包含内核参数的配置文件,可以动态调整系统行为。
  • /proc/sys/kernel/ 包含内核相关的参数(如主机名、最大进程数等)。
  • /proc/sys/net/ 包含网络相关的参数(如 IP 转发、TCP 超时等)。
  • /proc/sys/vm/ 包含内存管理相关的参数(如交换分区行为、内存分配策略等)。

使用示例:
查看 CPU 信息

cat /proc/cpuinfo

查看内存信息

cat /proc/meminfo

查看系统负载

cat /proc/loadavg

查看进程信息

#查看 PID 为 1234 的进程的命令行参数:
cat /proc/1234/cmdline

查看进程打开的文件

#查看 PID 为 1234 的进程打开的文件描述符:
ls -l /proc/1234/fd/

修改内核参数

#启用 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward


查看系统启动时间

cat /proc/uptime

查看已加载的内核模块

cat /proc/modules

注意事项:

  • 动态内容:/proc 中的文件内容是动态生成的,每次读取可能不同。
  • 权限限制:某些文件或目录需要 root 权限才能访问或修改
  • ​不要直接删除文件:/proc 中的文件是虚拟的,删除或修改可能导致系统不稳定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值