linux系统进阶命令实例

一 用户

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。
  • ds:设置刷新间隔,默认3秒
  • xy: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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值