linux是一个多用户的系统,有用户、组的概念。不同的用户、组对于不同的文件(夹)有着不同的访问权限(在文件inode中定义),见linux入门 2.10小结。一个用户有一个primary group,用户也可以加入其它组。每个用户、组都有对应的ID,内核中只使用ID,用户名只在用户空间中使用。
运行的进程会记录用户ID,但有很多中ID,常见的如下:
passwd
运行时将euid换成root,因此可以访问/etc/shadow
,修改密码。passwd
即使修改了euid,用户也可以kill
它,如果sudo
运行命令,非root用户不能kill
它,因为sudo同时修改了euid和ruid。注意,这块内容并不一定对,纯属个人猜想
/etc/passwd
中每一行存储了一个用户的账号,每个字段如下:
其中
/etc/shadow
中,因此填入x
表示加密过的密码在shadow文件中;*
则阻止用户认证(即不能登录)/etc/group
中存在/bin/sh
,nologin表示不能登录,见/etc/shells
在
/etc/shadow
的第二个字段是真正存储加密密码的地方,!
,*
表示不用密码登录,空表示登录不需要密码。详细见man 5 shadow
注意!!不能登录并不意味着进程的uid不能为该用户,反而使用不能登录的用户运行程序更安全。一般在使用服务进程,systemd unit中可以配置运行用户。
/etc/group
中每一条每一个组,组的用户除了passwd对应的用户,还有最后一个字段指定的所有用户。
用户添加用户(通过修改和用户相关的配置文件实现)。默认行为:创建用户的同时创建对应的组,默认bash shell,没有过期时间,无密码且不能登录,需要使用passwd
修改密码。
useradd [options] LOGIN
因为默认行为很好的满足了需求,因此没有给出完整选项
-c
:passwd中的注释-s
:登录的shell,默认bash-p
:设置密码,不建议使用,因为没有加密。建议使用passwd
命令。
默认欣慰在
/etc/default/useradd
和/etc/login.defs
中配置。
删除用户(实现同上)
userdel [options] LOGIN
默认仅删除账户和用户组
-r
:同时删除家目录的文件和邮件。其他地方的文件需要手动删除-f
:同上,但强制删除,即使该用户在登录状态。
修改密码
修改shell
top能够动态显示系统总的cpu、内存使用状态和各个进程的资源使用情况。
第一行分别表示目前的时钟、系统已运行时间、用户个数和分别为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
:进程idUSER
:有效用户(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
:运行该进程使用的命令h
:最常用!!!内容必看L
,&
:L查找进程,&搜索下一个<
,>
:切换排序字段k
:与kill命令一致,给出PID和信号(可数字或信号名)。停止进程建议term,后kill。d
或s
:设置刷新间隔,默认3秒x
,y
:x排序列高亮,y运行进程行高亮f
:重新设置显示的字段、排序字段等W
:设置好后,按W保存设置到配置文件中。有用!!!q
:离开。在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟;系统时钟则是指kernel中 的时钟;所有Linux相关指令与函数都是读取系统时钟的设定。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
至于网络时间,以后补充
查看或设置系统时钟
date
查看本时区当前时钟
date -s "2018-11-2 22:30"
设置系统时钟,但重启后失效
date -u
显示UTC时区的时钟
查询或者设置硬件时钟
hwclock
查询硬件时钟
hwclock -w
将系统时间写入硬件时间
默认时区由/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)取代,但目前远没有那么强大。
cron是一个守护进程,用于在规定时间点上执行任务(job)。任务在配置文件中配置,一行为一条任务。cron每分钟都会被唤醒,检查配置文件是否被更新。任务的标准输出会以邮件的形式记录,可以被修改。cron任务分为两类:
/etc/crontab
中配置。
/etc/cron.d/
呢?不太懂
/var/spool/cron
目录下。建议使用命令crontab
创建任务,而不是直接操作配置文件。
为什么系统cron任务不用crontab命令创建?因为格式稍有不同,且anacron更适合系统cron任务,见下。
直接在/etc/crontab
中添加一行,格式如下:
每个字段空格分隔。*
表示匹配所有可能的值;,
分隔的项表示匹配已列的值;-
匹配范围内的值
如
00 21 * * * root rm /home/bob/trash/*
表示每天21点清空bob用户的垃圾。
参考:Schedule jobs with cron
crontab
命令用户安装、展示、删除对应用户的cron任务。使用命令安装而不是直接修改对应配置文件的好处在于,在任意地点建立自己配置文件后,使用crontab安装的同时会检测语法是否正确,然后提示修改或安装到/var/spool/cron
中。
可以看出,用户配置少了user-name
crontab [-u user] file
:安装自己的配置文件,默认当前用户crontab -e
:拷贝配置文件到临时文件中,用户编辑后,直接安装(覆盖)。如果配置文件不存在,则新建。推荐crontab -l
:显示所有该用户的cron任务crontab -r
:删除用户cron配置文件
参考:User cron jobs
与cron不同,如果任务自从上次更新时间超过了某个时间间隔,则执行任务。任务只在/etc/anacrontab
中配置,每个字段如下:
period
:命令执行的频率,单位:天。delay
:执行命令前的延时job-identifier
:任务标识,必须有command
:任务执行的命令。anacron运行过程
anacron通过启动脚本或cron任务启动,anacron检查每个任务,判断距离上次执行是否已经超过(或等于)周期(period),如果是则执行命令,然后记录更新日期(不记录小时),当今天没有任务执行时,anacron结束。
参考:Schedule jobs with anacron
在某个时间点只执行一次。
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
运行指定的命令,并让该命令忽略掉停止信号,以至于后台应用能够在用户登出时继续运行
nohup COMMAND
:标准输入流重定向到/dev/null
,标准输出流重定向到nohup.out,标准错误流重定向到标准输出。nohup COMMAND > FILE
:标准输出流重定向到文件。
一些进程能够自我守护进程化,即自动后台运行并与控制终端脱离,因此当前会话结束不会关闭守护进程。如果进程不能自我守护进程化,则需要nohup的帮助,如:nohup COMMAND &
测试命令所花掉的时间
time command
其中
user
为进程在用户空间执行的时间sys
为系统调用在内核空间执行的时间(不包括上下文切换的时间)real
为总共花掉的时间。real-sys-user
为进程等待内核的时间。
如
[root@localhost Desktop]# time ls
nohup.out RunLongSecond.class RunLongSecond.java test
real 0m0.004s
user 0m0.000s
sys 0m0.004s
完整内容见linux入门–未完成,会不定期更新。