目录
一 用户
1.1 介绍
1.2 登录过程
1.3 配置文件
1.4 命令
1.4.1 useradd
1.4.2 userdel
1.4.3 passwd
1.4.4 chsh
二 top
2.1 字段含义
2.2 快捷键
三 时间
3.1 date
3.2 hwclock
3.2 时区
四 计划任务
4.1 cron
4.1.1 系统cron任务
4.1.2 用户cron任务
4.2 anacron
4.3 at
五 其他
5.1 nohup
5.2 time
注意
一 用户
1.1 介绍
linux是一个多用户的系统,有用户、组的概念。不同的用户、组对于不同的文件(夹)有着不同的访问权限(在文件inode中定义),见linux入门 2.10小结。一个用户有一个primary group,用户也可以加入其它组。每个用户、组都有对应的ID,内核中只使用ID,用户名只在用户空间中使用。
运行的进程会记录用户ID,但有很多中ID,常见的如下:
有效用户ID(euid):它给与了进程对应的访问权限;如passwd运行时将euid换成root,因此可以访问/etc/shadow,修改密码。
真实用户ID(ruid):指定了可以操作进程的用户;passwd即使修改了euid,用户也可以kill它,如果sudo运行命令,非root用户不能kill它,因为sudo同时修改了euid和ruid。
1.2 登录过程
注意,这块内容并不一定对,纯属个人猜想
在主机前登录,getty会连接终端,启动login程序进行用户验证,成功后为你打开shell。
远程ssh登录,终端连接、用户验证都由ssh server完成,然后打开shell。
桌面环境登录,由其他软件(不知道啥子)进行用户验证,然后就如桌面系统(可看做为GUI shell)。
1.3 配置文件
/etc/passwd中每一行存储了一个用户的账号,每个字段如下:
其中
Password:现在密码存在/etc/shadow中,因此填入x表示加密过的密码在shadow文件中;*则阻止用户认证(即不能登录)
Group ID:primary group的id,必须在/etc/group中存在
GECOS:就是注释,额外的信息
Shell:登录成功后运行的程序。通常是shell,默认使用/bin/sh,nologin表示不能登录,见/etc/shells
在/etc/shadow的第二个字段是真正存储加密密码的地方,!,*表示不用密码登录,空表示登录不需要密码。详细见man 5 shadow
注意!!不能登录并不意味着进程的uid不能为该用户,反而使用不能登录的用户运行程序更安全。一般在使用服务进程,systemd unit中可以配置运行用户。
/etc/group中每一条每一个组,组的用户除了passwd对应的用户,还有最后一个字段指定的所有用户。
1.4 命令
1.4.1 useradd
用户添加用户(通过修改和用户相关的配置文件实现)。默认行为:创建用户的同时创建对应的组,默认bash shell,没有过期时间,无密码且不能登录,需要使用passwd修改密码。
useradd [options] LOGIN
因为默认行为很好的满足了需求,因此没有给出完整选项
-c:passwd中的注释
-s:登录的shell,默认bash
-p:设置密码,不建议使用,因为没有加密。建议使用passwd命令。
默认欣慰在/etc/default/useradd和/etc/login.defs中配置。
1.4.2 userdel
删除用户(实现同上)
userdel [options] LOGIN
默认仅删除账户和用户组
-r:同时删除家目录的文件和邮件。其他地方的文件需要手动删除
-f:同上,但强制删除,即使该用户在登录状态。
1.4.3 passwd
修改密码
1.4.4 chsh
修改shell
二 top
top能够动态显示系统总的cpu、内存使用状态和各个进程的资源使用情况。
2.1 字段含义
第一行分别表示目前的时钟、系统已运行时间、用户个数和分别为1、5、15分钟的平均负载。
平均负载是对运行队列的长度的一种度量。单核下,0.5表示cpu一半时间是空闲的,1表示cpu是时刻负载的,1.5表示1/3进程在等待cpu;假设4核,则4表示所有的核刚好负载。当负载很高时,很有可能内存不足,导致时刻发生对内存的置换(swap)。load average
第二行表示当前进程总个数、运行进程个数、睡眠进程个数、停止进程个数等等。按H可以看到线程的个数。
第三行表示cpu使用情况,各个单位如下:
us(userspace):程序在用户空间执行所需时间
sy(system call):系统调用所需时间,不包含内核自己花掉的时间
ni(nice):不知道
id(idle):cpu空闲时间,没有进程运行
wa(wait):cpu花在等待io上的时间
…
这里显示的是CPU总的使用情况,按1可以看到各个CPU的使用情况。
第四、五行分别表示内存、置换内存的使用情况。按m可以看到图形表示。
下面一部分是进程的一些信息和对资源的使用情况。每个字段如下:
PID:进程id
USER:有效用户(euid)。
PR:进程的优先级。值从-20到20,越低优先级越低。会随时间而改变。
NI:进程的nice值,是给与内核调度器该进程优先级的暗示,进程优先级下次改变时会考虑到该值。
VIRT:虚拟内存大小(KB)。包含内存与置换内存中进程的所有页。
RES:驻留内存大小(KB),被使用的物理内存大小。
SHR:共享内存大小(KB)。
S:进程状态。R:运行;S:睡眠;T:被job控制信号中断;t:被调试器中断;D:不可中断睡眠;Z:僵死。
%CPU:cpu使用率。是进程的所有线程的cpu使用率综合,且每个核心最大100%,因此此项可能会超过100%。使用H显示线程使用率而不是进程,或者按I关闭Irix模式(默认模式),此时cpu总使用率为100%。
%MEM:物理内存使用率
TIME+:进程已运行时间
COMMAND:运行该进程使用的命令
2.2 快捷键
h:最常用!!!内容必看
L,&:L查找进程,&搜索下一个
<,>:切换排序字段
导航:方向键都可以用,如up,down,left,right,home,end
k:与kill命令一致,给出PID和信号(可数字或信号名)。停止进程建议term,后kill。
d或s:设置刷新间隔,默认3秒
x,y:x排序列高亮,y运行进程行高亮
颜色:z设置颜色,b设置粗体。Z全局设置颜色
f:重新设置显示的字段、排序字段等
W:设置好后,按W保存设置到配置文件中。有用!!!
q:离开。
三 时间
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟;系统时钟则是指kernel中 的时钟;所有Linux相关指令与函数都是读取系统时钟的设定。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
至于网络时间,以后补充
3.1 date
查看或设置系统时钟
date 查看本时区当前时钟
date -s “2018-11-2 22:30” 设置系统时钟,但重启后失效
date -u 显示UTC时区的时钟
3.2 hwclock
查询或者设置硬件时钟
hwclock 查询硬件时钟
hwclock -w 将系统时间写入硬件时间
3.2 时区
默认时区由/etc/localtime给出,它是一个指向/usr/share/zoneinfo中文件的一个符号链接。可以通过拷贝其他文件,来永久修改时区。或者修改环境变量TZ为当前shell会话设置临时时区,如:
[root@localhost Desktop]# date
Sat Mar 16 11:00:47 CST 2019
[root@localhost Desktop]# export TZ=US/Central
[root@localhost Desktop]# date
Fri Mar 15 22:00:54 CDT 2019
如果不知道时区名字,可以参考
/usr/share/zoneinfo目录或执行
tzselect命令
四 计划任务
计划任务有望被init进程(如systemd)取代,但目前远没有那么强大。
4.1 cron
cron是一个守护进程,用于在规定时间点上执行任务(job)。任务在配置文件中配置,一行为一条任务。cron每分钟都会被唤醒,检查配置文件是否被更新。任务的标准输出会以邮件的形式记录,可以被修改。cron任务分为两类:
系统cron任务:以root用户执行,常用于执行系统维护。需在
/etc/crontab中配置。
/etc/cron.d/呢?不太懂
用户cron任务:普通用户创建的任务,配置位于
/var/spool/cron目录下。建议使用命令
crontab创建任务,而不是直接操作配置文件。
为什么系统cron任务不用crontab命令创建?因为格式稍有不同,且anacron更适合系统cron任务,见下。
4.1.1 系统cron任务
直接在
/etc/crontab中添加一行,格式如下:
每个字段空格分隔。
*表示匹配所有可能的值;
,分隔的项表示匹配已列的值;
-匹配范围内的值
如
00 21 * * * root rm /home/bob/trash/*
表示每天21点清空bob用户的垃圾。
参考:Schedule jobs with cron
4.1.2 用户cron任务
crontab命令用户安装、展示、删除对应用户的cron任务。使用命令安装而不是直接修改对应配置文件的好处在于,在任意地点建立自己配置文件后,使用crontab安装的同时会检测语法是否正确,然后提示修改或安装到
/var/spool/cron中。
可以看出,用户配置少了user-name
crontab [-u user] file:安装自己的配置文件,默认当前用户
crontab -e:拷贝配置文件到临时文件中,用户编辑后,直接安装(覆盖)。如果配置文件不存在,则新建。推荐
crontab -l:显示所有该用户的cron任务
crontab -r:删除用户cron配置文件
参考:User cron jobs
4.2 anacron
与cron不同,如果任务自从上次更新时间超过了某个时间间隔,则执行任务。任务只在
/etc/anacrontab中配置,每个字段如下:
period:命令执行的频率,单位:天。
delay:执行命令前的延时
job-identifier:任务标识,必须有
command:任务执行的命令。
anacron运行过程
anacron通过启动脚本或cron任务启动,anacron检查每个任务,判断距离上次执行是否已经超过(或等于)周期(period),如果是则执行命令,然后记录更新日期(不记录小时),当今天没有任务执行时,anacron结束。
参考:Schedule jobs with anacron
4.3 at
在某个时间点只执行一次。
at time:从标准输入中获得要执行的命令,按
ctrl+d退出。表示在time时执行命令。
at -f file time:同上,不过此时命令通过文件给出
atq:列出所有的用户悬停的任务
atrm job_num:删除对应job num的任务
注意,时间可以为两种形式:
HH:MM [YY-MM-DD]:如果只给出HH:MM并且过期,则认作明天
now + count time-units:time-units可以是minutes,hours,days 或weeks。例子:
at now +2 hours
五 其他
5.1 nohup
运行指定的命令,并让该命令忽略掉停止信号,以至于后台应用能够在用户登出时继续运行
nohup COMMAND:标准输入流重定向到
/dev/null,标准输出流重定向到nohup.out,标准错误流重定向到标准输出。
nohup COMMAND > FILE:标准输出流重定向到文件。
一些进程能够自我守护进程化,即自动后台运行并与控制终端脱离,因此当前会话结束不会关闭守护进程。如果进程不能自我守护进程化,则需要nohup的帮助,如:
nohup COMMAND &
5.2 time
测试命令所花掉的时间
time command
其中
user为进程在用户空间执行的时间
sys为系统调用在内核空间执行的时间(不包括上下文切换的时间)
real为总共花掉的时间。
real-sys-user为进程等待内核的时间。
如
[root@localhost Desktop]# time ls
nohup.out RunLongSecond.class RunLongSecond.java test