Linux常用命令及知识点汇总(三)

目录

1.计划任务

1.1单一计划任务

1.2周期性计划任务

2.系统进程管理

2.1任务管理

2.2脱机管理问题 

2.3进程管理

2.4查看系统资源

3.系统服务(daemon)

3.1systemd相关知识点

3.2管理服务

3.3timer定时任务


1.计划任务

1.1单一计划任务

使用at命令,前提是atd服务启动,任务存在于/var/spool/at目录下,如果有/etc/at.allow文件,则只有文件中的用户才能使用at,如果只有/etc/at.deny文件,那么文件中的用户不能使用at,其余的用户可以,如果两个文件都没有则只有root才能使用at命令。

  • at [-mld] 时间
    • -m:任务执行完毕,发送邮件给用户
    • -l:列出所有用户的at计划,相当于atq
    • -d:取消一个在at计划中的任务,后面接任务号码,相当于atrm
    • -c:接任务号码,查看该命令的内容
    • -f:执行具体的shell脚本

时间格式

HH:MM:在今天的某个时间执行,如果超过该时间则明天执行

HH:MM YYYY:MM:DD:在某一个的时刻执行

HH:MM + number [minutes|hours|days|weeks]:在某个时间点在加几个时间后执行,如now +5minutes,5分钟后执行,类似的还有hours、days、weeks、month……

建议使用绝对路径。

任务的执行与终端环境无关,所以标准输入输出不会打印到当前屏幕,只会发送到用户的邮箱,可以使用echo "hello" >/etc/tty1类似的方法得到输出结果

batch:cpu空闲时才会执行该任务,默认负载少于0.8,不能指定特定的时间

1.2周期性计划任务

  • crontab:同at,有/etc/cron.allow和/etc/cron.deny其中之一的限制文件,依靠crond这个服务,该任务会被记录到/var/spool/cron目录中
    • -u username:只有root可以使用,帮其他用户建立一个计划任务
    • -e:编辑crontab的任务内容
    • -l:查看任务内容
    • -r:删除所有crontab任务,若要删除一项,使用-e去编辑

每个用户都有自己的/var/spool/cron/用户名文件,用于存储定时任务(除非该用户在deny文件中),我们只需要使用crontab -e编辑内容即可,该文件的格式如:

  0  12  *   *    *        mail -s "title" < /home/lxc/.bashrc

#分 时 日 月  周      ===========命令串=========

特殊字符:

*表示任何时候都接受
, (逗号)代表分隔时段,如3:00和6:00都执行使用 0 3,6 * * * command
-代表一段时间范围内,如8点到12点的20分都执行使用20 8-12 * * * command
/数字每隔一段时间执行,如没5分钟执行一次使用 */5 * * * * command

系统级别的任务,如关机什么的,都需要配置主配置文件/etc/crontab,格式和上面的相同,仅能通过root定义。

  • anacron:定期去执行任务,即如果系统关机了导致一些定期任务未执行,crontab不会执行了,而anacron会在开机时自动检测并执行补上。
    • -f:强制执行相关工作,忽略时间戳。
    • -u:更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的时间戳为当前日期,但不执行任何工作。
    • -s:依据 /etc/anacrontab 文件中设定的延迟时间顺序执行工作,在前一个工作未完成前,不会开始下一个工作。
    • -n:立即执行 /etc/anacrontab 中所有的工作,忽略所有的延迟时间。
    • -q:禁止将信息输出到标准错误,常和 -d 选项合用

2.系统进程管理

进程图

2.1任务管理

当我们登录系统获取到bash shell之后执行的名令就是任务,每个任务其实就是目前bash进程的子进程。

  • &:将任务放在后台执行,而不是默认的前台执行,如find / -name man >/dev/record &
    • 在后台的任务不怕ctrl+c中断执行
  • ctrl+z:将当前任务丢到后台中暂停
  • jobs:查看后台任务状态
    • -l:同时列出该任务的PID号
    • -r:只列出正在后台运行的任务 run
    • -s:只列出正在后台暂停的任务 stop
[root@com ~]# jobs
[1]   已停止               mail
[2]-  已停止               vim initial-setup-ks.cfg
[3]+  已停止               find / -name aaa > /etc/null

第一栏表示任务的任务号,其中括号外面的+表示最近第一个被丢到后台的任务(也是默认任务),-表示最近第二个被丢到后台的任务;第二栏表示任务的状态,第三栏表示该任务所执行的命令

  • fg [%任务号]:将任务拿到前台处理,如果不加%任务号,默认将+号的任务放到前台处理,fg -是倒数第二个任务
  • bg:让后台暂停的任务在后台运行,stopping状态->running状态,和&运行的任务一样
  • kill -signal %任务号:管理后台当中的任务,给予该任务一个信号量。
    • kill -l:查看目前kill能使用的信号(signal)有哪些
    • signal :可以写信号的数字和英文,使用man 7 signal查看各种信号的作用
      • 1:重新读取一次参数的配置文件,类似reload
      • 2:和ctrl+c同样的功能,中断程序的运行
      • 9:立刻强制删除一个任务,比较暴力
      • 15:以正常的进程方式终止一项任务,并删除该任务
      • 19:相当于ctrl+z暂停一个进程的运行

kill后面默认接pid号码,如果是任务号不要忘记加%了

2.2脱机管理问题 

前面所说的后台是bash的后台,而不是系统后台,如果我们以远程方式连接到系统上,且使用&提交了一个任务到后台,当我们脱机后该任务就不会在执行了。如果想让该任务任然执行可以使用at命令提交任务或者是nohup命令。

  • nohup [命令与参数]  [&]:把任务提交到系统任务中,当前用户注销后任然继续执行。

执行的结果会重定向到~/nohup.out文件里。

2.3进程管理

  • ps:将当前时间点的进程运行情况摘取下来,静态
    • -A:显示所有的进程
    • -a:不显示与终端有关的所有进程
    • -u:显示有效使用者有关的所有进程
    • x:列出比较完整的信息,通常和a一起使用
    • l:较长、较详细的将该pid的信息列出
    • j:任务的格式
    • -f:做一个较为完整的输出

一般用【ps -l】只查看自己bash的进程、【ps aux】查看所有系统运行的进程。

ps -l显示本bash的进程的详细信息如下:

[root@com ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  12678  12669  0  80   0 - 29299 do_wai pts/0    00:00:00 bash
4 T     0  27172  12678  0  80   0 - 37991 do_sig pts/0    00:00:00 mail
4 T     0  27331  12678  0  80   0 - 37446 do_sig pts/0    00:00:00 vim
0 R     0  30960  12678  0  80   0 - 38331 -      pts/0    00:00:00 ps
  • F:进程标志FLAG,说明进程的权限,4表示权限为root,1表示子进程没有执行
  • S进程的状态STAT,主要状态有:
    • R(Running):该进程正在运行,可调度的状态
    • S(Sleep):该进程正在睡眠(sleep)状态可以被唤醒(signal)
    • D不可被唤醒的睡眠状态,通常这个进程是在等待IO的情况,kill -9杀不死
    • T(Stop):停止状态,可能在后台暂停
    • Z(Zombie):僵尸状态,该进程已经终止但却无法在内存中完全删除,空壳子
  • UID:该进程的调用者用户id
  • PID:进程的id号
  • PPID:进程的父进程PID号码,如上bash进程是其他进程的父进程
  • C:代表cpu使用率,单位百分比
  • PRI:进程的优先级,数值越小该进程越快被cpu执行
  • NI:nice值,也是优先级值,只不过PRI由系统决定不能更改,而NI可以由用户更改,最终的进程优先级=PRI+NI,
  • ADDR/SZ/WCHAN:ADDR表示kernel function,指出该进程在内存的哪个部分;SZ表示进程用掉多少内存;WCHAN表示目前进程是否运行,-表示是
  • TTY:登陆者的终端位置,若为远程登录则为pts/n,若为?表示和终端无关,一般为内核的态进程
  • TIME:进程实际使用的cpu时间
  • CMD:触发此进程的命令,如果进程为僵尸状态,命令后面多了个<defunct>

ps aux显示的不详细信息如下:

[root@com ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.7 193936  7128 ?        Ss   2月04   0:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    2月04   0:00 [kthreadd]
lxc       30765  0.0  0.3 117028  3364 pts/1    S+   18:01   0:00 bash -l
rtkit       760  0.0  0.1 198784  1760 ?        SNsl 2月04   0:03 /usr/libexec/rtkit-daemon
root        726  0.0  0.0  84556   816 ?        S<sl 2月04   0:00 /sbin/audispd
……

其中未讲到的字段有:VSZ:该进程使用的虚拟内存量(KB);RSS:该进程占用的固定内存量;STAT:进程目前的状态;START:进程启动的时间。

其中STAT在基本的RSTDZ状态后面可以加上额外的字符,其中的含义如下:

  1. <:表示进程运行在高优先级上,高优先级获得的时间片更长
  2. N:表示进程运行在低优先级上
  3. L:表示进程有页面锁定在内存中
  4. s:表示进程是控制进程
  5. l:表示进程是多线程
  6. +:表示当前进程运行在前台

  • top动态查看进程的变化
    • -d:进程界面更新的秒数,默认5秒一更新
    • -p:指定某个pid进行查看、检测对应的进程

top过程中可以指定的按键或操作:

  • ?:显示在top当中可以输入的按键命令
  • 排序
    • P:以CPU的使用率排序显示,默认值
    • M:以Mermory的使用排序显示
    • N:以PID来排序
    • T:由CPU的使用时间排序
  • k:给某个pid一个信号,同kill -signal pid
  • r:给某个pid重新定制nice值,root的修改范围为-20~19,普通用户只能修改0~19
  • q:退出top按键
  • 空格:立即刷新
  • u:查看指定用户的进程

top界面如下:

[root@com ~]# top
top - 19:40:25 up 20:08,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 203 total,   2 running, 197 sleeping,   4 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995704 total,    74204 free,   546000 used,   375500 buff/cache
KiB Swap:  1953788 total,  1953788 free,        0 used.   248824 avail Mem 
<==如果按k或r会在这提示先输入进程的pid,再需要输入修改的值
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                           
  1783 gdm       20   0 3383752 133208  60636 S   0.0 13.4   0:22.98 gnome-shell                                                                                       
   885 root      20   0  359108  29796   7224 S   0.0  3.0   0:00.78 firewalld                                                                                         
  1622 root      20   0  296084  24340  15692 S   0.0  2.4   0:00.86 X       
    ……                    
  1. 第一行有:当前时间、开机到现在经过的时间、当前登录用户人数、1,5,15分钟内的平均任务负载
  2. 第二行有:进程总量、和一些进程的运行状态
  3. 第三行有:CPU整体负载 ,如wa表示IO-wait ,等待io的时间,其他的可以man  top,搜索关键字。输入1可以查看其他核的负载率。
  4. 第四、五行:物理内存和虚拟内存的使用量

  • pstree:以树状结构显示,父进程和子进程结构分明
    • -p:同时列出pid
    • -u:同时列出uid

所有进程的父进程都是systemd进程,该进程pid是1.

  • 同样的进程也是使用信号(signal)互相管理,使用kill传递信号:kill -signal PID。注意没有%

  •  killall -signal 命令名称:根据【执行命令的名称】(command)来给予信号量,省去了查找pid
    • -i:出现提示字符给使用者,删除前询问
    • -I(大写i):忽略大小写
  • nice [-n  数字]  command:执行命令前,可以先指定对应的nice值,值越小优先级越高
  • renice [数字]  PID:设置已经启动的进程的nice值

进程的信息可以在/proc/进程号 下找到进程对应的目录和文件

2.4查看系统资源

  • free:查看内存使用情况
    • -b、-k、-m、g:指定显示单位,默认显示的是k(KB)
    • -h:让系统指定合适的单位
    • -s:动态刷新,类似top,需要指定刷新间隔秒数
    • -c:与-s合用,表示动态刷新几次后自动退出
  • uptime:查看系统启动时间与任务负载,和top的第一行差不多
  • netstat:追踪网络或socket文件
    • -a:所有信息都打印出来
    • -p:列出网络服务的进程pid
    • -u、-t:显示udp或tcp封包信息
    • -n:不以进程的服务名称,以端口号来显示
  • dmesg:分析内核产生的信息,即开机时内核检测硬件的一些信息,显示在屏幕上一闪而过
  • vmstat:检测系统资源变化。
    • vmstat  [seconds]  [次数]:动态刷新,每几秒刷新,一共刷新多少次,次数省略则是无限
    • -f:开机到现在,系统复制(fork)的进程数,即建立的进程数
    • -s:将一些事件导致的内存变化情况列表说明
    • -S:后面接显示单位,K/M替换默认的Bytes
    • -d:列出磁盘的读写总量统计表
    • -p:后面列出分区,可显示该分区的读写总量统计表

vmstat基本说明如下

[root@com ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us sy id wa st
 1  0      0  74272    116 376120    0    0     3     1   25   44  0  0 100  0  0

进程字段(procs)分别为:

  • r:表示等待运行中的进程数量
  • b:不可被唤醒的进程数量。这两个项目越多代表系统越忙碌

内存字段(memory)为:

  • swapd:虚拟内存被使用的容量
  • free:未被使用的内存容量
  • buff:缓冲存储器的容量
  • cache:高速缓存的容量。这部分和free命令的相同

内存交换区(swap):

  • si:从磁盘中将进程取出来的容量
  • so:将内存中的进程写入到磁盘你的容量。这两个越大,系统系统越差

磁盘读写(io):

  • bi:由磁盘读入的区块数量
  • bo:写入到磁盘的区块数量

系统(system):

  • in:每秒被中断的进程次数
  • cs:每秒执行的事件切换次数。这两个值越大,代表系统与外接设备沟通的越频繁

CPU(和top命令显示的一样):

  • us:非内核层的CPU使用状态,即用户启动的进程使用CPU的百分比
  • sy:内核层CPU使用状态
  • id:闲置CPU的状态
  • wa:等待io所耗费的CPU状态
  • st:被虚拟机所使用的CPU状态

3.系统服务(daemon)

3.1systemd相关知识点

作用:系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。
systemd定义它所管理的服务都为一个服务单元unit,unit分为多种不同的类型,如系统服务、数据监听与交换的socket文件服务、提供不同运行级别分类的操作系统环境(target)等。

配置文件

  • /usr/lib/systemd/system:每个服务最主要的启动脚本设置;
  • /run/systemd/system:系统执行过程中所产生的服务脚本,比上面目录优先运行;
  • /etc/systemd/system:管理员根据主机系统的需求建立的执行脚本,比上面的优先级高;

unit类型

通过查看扩展名识别,通过命令systemctl -t help可以查看所有的类型

  • .service:用于定义系统服务,包括服务器本身所需的本地服务以及网络服务等
  • .target:一群unit的集合,用于模拟实现运行级别
  • .socket:用于标志进程间通信用的socket文件
  • .device:用于定义内核识别的设备
  • .mount:用于定义系统挂载点
  • .timer:定时器,循环执行的服务,用于取代crontab命令,更精确
  • .path:用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务

unit配置文件

如/usr/lib/systemd/system/sshd.service文件 

 分为三部分:

  • [Unit]:unit本身的说明,行为以及依赖关系等,常用设置参数如下
    • Description:描述信息,查看系统服务时显示给用户看的信息
    • After:说明此unit在哪个unit启动之后才启动的意思,并不强制,功能和before相反
    • Requires:说明此unit必须在哪个unit启动之后才启动,强制性的,强依赖
    • Wants:弱依赖,这个unit之后最好还要启动什么服务比较好
    • Conflicts:定义unit之间的冲突,如果有冲突的服务在启动,当前unit就不能启动
  • [Service]:不同的unit类型对应不同的便签,如[Socket]……,常用参数如下
    • EnvironmentFile:环境配置文件,如sshd.service配置文件在/etc/sysconfig/sshd
    • ExecStart:实际执行此服务的命令或脚本程序。绝对路径
    • ExecStartPre,ExecStartPost:分别在ExecStart之前和之后运行
    • ExecStop:停止stop unit要运行的命令或脚本程序,一般都是kill命令
    • Restart:当设定为1时,当该服务意外终止时,可以自己重新启动
    • Type:说明这个服务的启动方式
      • simple:默认值,这个服务由ExecStart启动,启动后常驻于内存
      • forking:fork一个子进程运行该服务,再将父进程删除
      • oneshot:与simple的区别是,不会常驻于内存,运行完就关闭
      • notify:启动完成后发送一个消息
      • dbus:这个daemon必须要在取得一个D-Bus的名称后,才会继续运作
      • idle:通常是开机或者关机运行
  • [Install]:将此unit安装到哪一个target里面去
    • Alias:别名,可使用sstemctl  command Alias.service
    • WantedBy:依附于哪一个target unit,大部分服务依附于multi-user.target,命令行默认
    • Also:安装本服务的时候还需要安装别的相关服务

在unit文件中,以#开头的行后面的内容会被认为是注释,相关布尔值,1、yes、on、true都是开启0、no、off、false都是关闭,时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明

对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启
systemctl  daemon-reload

可以通过systemctl cat unit直接查看该服务的配置文件。

3.2管理服务

格式为:systemctl  [command]  [unit]

command主要有:

  • start:立即启动unit
  • stop:关闭unit
  • restart:重启unit
  • reload:不关闭unit,重新加载配置文件,EnvironmentFile
  • enable:设置unit下次开机自启动
  • disable:开机不自动启动
  • status:unit的状态
  • mask:禁止自动和手动启动
  • unmask:取消禁止
  • is-active:目前有没有在运行
  • is-enable:是否开机自启

[root@com ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 六 2022-02-12 12:11:56 CST; 3h 54min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1274 (sshd)
    Tasks: 1
   CGroup: /system.slice/sshd.service
           └─1274 /usr/sbin/sshd -D

如上第二行的enable表示开机自启动,第三行的active表示正在运行,常见状态有:

  • active(running):正有该服务的一个进程或多个进程正在系统中运行
  • active(exited):仅执行一次就正常结束的服务,目前没有任何进程在系统中执行
  • active(waiting):正在运行当中,不过还需要等待其它事件发生才能继续运行
  • inactive:该服务没有运行

除了enable/disable外还有:

  • enable:该服务开机自启动
  • disable:开机不启动
  • static:该服务不可以自己启动,只能被其他服务唤醒
  • mask:该服务无论如何都不能启动,使用systemctl mask unit设置的

查看系统上所以的服务:systemctl  [command]  [--type=TYPE] [--all]

  • systemctl:列出系统上所有启动的服务,同systemctl list-units,加上--all也列出未启动的
  • systemctl list-unit-files:依据/usr/lib/systemd/system内的文件,列出所有已经安装的服务

通过systemctl管理不同的操作环境:systemctl  [command]  [unit.target]

command有:

  • get-default:取得目前的target
  • set-default:设置后面的target为默认的操作环境
  • isolate立即切换到后面的环境

其中target常用的有:

  • multi-user.target:纯命令行模式
  • graphical.target:图形界面,包含了命令行界面
  • rescue.target:紧急救援模式
  • emergency.target:紧急模式
  • shutdown.target:关机模式

为了方便起见,systemd提供了几个简单的命令用于切换模式:

  • systemctl poweroff:关机模式
  • systemctl reboot:重启模式
  • systemctl suspend:进入挂起模式,将数据保存在内存中,关闭大部分的硬件,唤醒的速度快
  • systemctl hibernate:进入休眠模式,系统的状态保存到硬盘中,唤醒速度慢
  • systemctl rescue:进入紧急救援模式
  • systemctl emergency:进入紧急模式

分析各服务之间的依赖性:systemctl list-dependencies [unit] [--revers]

 

我们可以编写自己的shell脚本,在配置文件那三个目录中的随便一个写入我们自己的配置文件,用来管理我们的脚本,即可实现自定义服务

3.3timer定时任务

CentOS7的新特性timer,也是交给systemd服务来管理。

首先需要满足如下条件:

  1. 系统服务timers.target一定要启动
  2. 我们自定义的服务my_service.service,该服务的内容就是执行我们的定时任务
  3. 要有一个my_service.service的时间启动服务,名字是和要执行的服务一样

只需要把配置文件中的[Service]改为[Timer],常用选项如下:

1.单调定时器

  • OnActiveSec:相当于本时间单元被启用的时间点,如当前的mytime.timer启动后20分钟开始执行
  • OnBootSec:相对于服务器被启动的时间点
  • OnStartupSec:表示相对于systemd服务被启动的时间点
  • OnUnitActiveSec:最后一次启动再隔多久再启动一次
  • OnUnitInactiveSec:最后一次启动停止后再隔多久再启动一次

2.日历定时器

  • OnCalendar时间单位,和crontab -e文件中类似

时间格式为:星期 年-月-日 时:分:秒

如:

Thu,Fri 2022-*-1,5 11:12:13 表示2022年任意月份的1号5号如果为星期四或星期五的话则在11:12:13执行

*-*-* *:*:00 表示每分钟

*-*-* *:*:00 表示每天

*-01,07-01 00:00:00表示每半年

*:0/15 表示每15分钟,/表示每隔,0/15表示从0开始每15分钟隔一次

还可以使用now、daily、tomorrow、hourly、today、weekly、monthly来表示时间

  • Unit:要执行的单元,通常不用,一般使用my_service.service+my_service.timer的方式
  • Persistent:当使用OnCalendar的设置时,指定该功能要不要持续进行的意思,设置为yes的话就是类似anacron的功能

  • systemctl list-timers:查看所有的timer单元
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值