核心工具集(二)
权限管理
细节
一个文件主要包含下列属性,ls -l
1
2
- rwx①rwx②rwx③ user④ group⑤ date⑥ filename⑦
  111  101  101
① 归属用户的权限
② 归属群组的权限
③ 其他用户的权限
④ 归属用户
⑤ 归属群组
⑥ 日期信息
⑦ 文件名称
- 对于文件夹,必须拥有它的可执行权限,才能够使用cd命令进入该文件夹;拥有可读权限,才能够使用ls命令查看该文件夹的文件列表
 - root用户 拥有最高权限
 
可以使用3位的二进制数字来描述一组权限,某一权限对应的数字为1,则表示具有该种权限,为0,则不具有该种权限。
使用二进制数字来描述一组权限,虽然非常直观,但是3组权限需要用9位数来表示,不够方便。因此我门将三组权限使用3位8进制数字来表示
每种权限对应的数字:
| 权限 | r | w | x | 
|---|---|---|---|
| 二进制 | 100 | 010 | 001 | 
| 八进制 | 4 | 2 | 1 | 
将这3位8进制数字相加的结果,就可以表示该组权限的具体内容,例如:
还可以使用a、u、g、o表示归属关系,使用=、+、-表示权限变化,使用r、w、x表示权限内容
a 所有用户 u 归属用户 g 归属群组 o 其他用户
= 具有权限 + 增加权限 - 去除权限
r 可读权限 w 可写权限 x 可执行权限
例如:
1
2
3
a+x 给所有用户增加可执行权限
go-wx 将归属群组和其他用户的可写、可执行权限去掉
u=rwx 归属用户 具有可读、可写、可执行权限
chmod 权限表达式 文件|目录
更改文件的权限。权限的表达式可以使用3位8进制数字表示,或者使用augo +-=rxw-s 来表示
| 参数 | 含义 | 
|---|---|
| -R | 递归 | 
| -v | 显示过程 | 
| -c | 类似“-v”,仅显示更改部分 | 
| –reference=参照文件或目录 | 以指定文件为参照更改权限 | 
示例:
1
2
chmod -R a+x path 
chmod -Rv 755 path
chown 归属[:归属群组] 文件|目录
更改文件的归属用户。可以使用用户名或者用户编号
| 参数 | 含义 | 
|---|---|
| -R | 递归 | 
| -v | 显示过程 | 
| -c | 类似“-v”,仅显示更改部分 | 
| –reference=参照文件或目录 | 以指定文件为参照更改权限 | 
示例:
1
2
3
chown user:admin path 
chown -R user.admin path 
chown user path
chgrp 归属群组 文件|目录
更改文件的归属群组。可以使用群组名或者群组编号,选项同上
SUID、SGID、Sticky bit
某些情况下,需要以可执行文件归属用户的身份执行该文件,可以为该文件设置SUID。同样,设置SGID能够以该文件归属群组的身份执行它。
例如:用户自行设定密码。出于安全方面的考虑,/etc/shadow 只能由root用户直接修改
1
-rw------- root root /etc/shadow
这个时候,可以为程序 /usr/bin/passwd 设置SUID,当普通用户执行passwd命令时,便能够以该程序归属用户root的身份修改 /etc/shadow文件,而 passwd程序自身带有身份验证机制,不能通过验证时拒绝执行,从而保证了安全。
1
2
ls -l /usr/bin/passwd 
-r-s--x--x root root /usr/bin/passwd
我们发现,归属用户的可执行权限位使用 s表示SUID。同样,归属群组的可执行权限位使用s,表示SGID。任何用户或群组都拥有“其他用户”的权限,所以不需要以其他用户身份执行文件,其他用户的可执行权限位便不会出现s。该权限位可能出现的属性为t。也就是粘着位Sticky bit。
1
2
ls -ld /tmp
drwxrwxrwt root root /tmp
粘着位表示任何用户都可能具有写权限,但只有该归属用户或root用户才能够删除。
SUID、SGID、Sticky bit也可以像权限一样使用一个八进制数表示,如下
| 八进制数 | 含义 | 
|---|---|
| 4 | SUID | 
| 2 | SGID | 
| 1 | Sticky bit | 
通过在chmod命令中使用4个八进制数的表达式,如4755,用第一位表示SUID、SGID或Sticky bit,便能够为文件设置这些特殊权限。示例:
1
chmod -R 4755 path
lsattr [路径]
查看文件的特殊属性
| 参数 | 含义 | 
|---|---|
| -a | 全部显示 | 
| -d | 只显示目录 | 
| -R | 递归 | 
特殊属性包括:
| 参数 | 含义 | 
|---|---|
| a | 仅供附加用途 | 
| b | 不更新最后存取世界 | 
| c | 压缩后存放 | 
| d | 排除在转储操作之外 | 
| i | 不得任意更动文件或目录 | 
| s | 保密性删除文件或目录 | 
| S | 即时更新文件或目录 | 
| u | 预防意外删除 | 
| **chattr + | - | =属性 路径** | 
更改文件特殊属性
| 参数 | 含义 | 
|---|---|
| -R | 递归 | 
| -V | 显示过程 | 
用户管理
细节
root用户为根用户,也就是系统管理员,拥有全部权限。
一个用户只能拥有一个群组编号,但是还可以归属于其他附加群组
用户管理的重要配置文件:
| 文件 | 内容 | 
|---|---|
| /etc/passwd | 用户名 密码位 用户编号 归属群组编号 姓名$HOME目录 登录shell | 
| /etc/shadow | 用户名 已加密密码 密码改动信息 密码策略 | 
| /etc/group | 群组名 密码位 群组编号 组内用户 | 
| /etc/gshadow | 群组密码相关文件 | 
| /etc/sudoers | 用户名 权限定义 权限 | 
- 请使用
visudo命令修改/etc/sudoers,而不是直接编辑 - 可以使用
pwconv命令创建影子密码,将/etc/passwd文件中的密码转换到/etc/shadow文件 
su [用户名]
切换到其他用户,默认切换到root用户。提示密码为目标用户密码
| 参数 | 含义 | 
|---|---|
| -f | 快速切换,忽略配置文件 | 
| - | -l | 重新登录 | 
| -m | -p | 不更改环境变量 | 
| -c 命令 | 切换后执行命令,并退出切换 | 
sudo命令
以其他用户的身份执行命令,默认以root的身份执行。提示密码为当前用户密码
| 参数 | 含义 | 
|---|---|
| -s | 切换为root shell | 
| -i | 切换为root shell,并初始化 | 
| -u 用户名|用户编号 | 执行命令的身份 | 
| -l | 显示自己的权限 | 
passwd [用户名]
设定用户密码
| 参数 | 含义 | 
|---|---|
| -d | 清除密码 | 
| -l | 锁定账户 | 
| -e | 使密码过期,在下次登录时更改密码 | 
| -S | 显示密码认证信息 | 
| -x 天数 | 密码过期,最大使用时间 | 
| -n 天数 | 冻结密码,最小使用时间 | 
| -s | 更改 登录shell | 
| -f | 更改用户信息 | 
示例:
1
2
3
4
5
passwd 
Changing password for user 
(current) UNIX password: #原密码
Enter new UNIX password: #新密码
Retype new UNIX password: #确认新密码
gpasswd 群组名
更改群组
| 参数 | 含义 | 
|---|---|
| -a 用户名 | 将用户加入群组 | 
| -d 用户名 | 将用户从群组中删除 | 
| -r | 删除密码 | 
| -A 用户名 | 将用户设置为群组管理员(群组管理员或root用户才可以使用) | 
| -M 用户1,用户2…… | 批量设置群组成员 | 
chsh -s Shell [用户名]
更改登录shell
usermod 用户名
修改用户账户
| 命令 | 含义 | 
|---|---|
| -d 目录 | 设定 $HOME 目录 | 
| -m | 设定 $HOME 目录时自动建立该目录 | 
| -s Shell | 修改用户 登录Shell | 
| -l 新登录名 | 修改为新登录名 | 
| -u 用户编号 | 修改用户编号 | 
| -g 群组名 | 修改用户归属群组 | 
| -G 群组名 | 修改用户归属辅组 | 
| -L | 锁定账户 | 
| -U | 解除锁定 | 
| -e 过期时间 | 设定用户账号过期时间 | 
| -f 缓冲天数 | 设定密码过期后多长时间关闭账号 | 
| -c 字符串 | 修改用户备注 | 
useradd 用户名
新建用户
| 参数 | 含义 | 
|---|---|
| -d 目录 | 设定 $HOME 目录 | 
| -m | 自动建立 $HOME目录 | 
| -M | 不自动建立 $HOME 目录 | 
| -s Shell | 设定用户登录Shell | 
| -u 用户编号 | 设定用户编号 | 
| -g 群组名 | 设定用户归属群组 | 
| -G 群组名 | 设定用户归属附加群组 | 
| -n | 不建立以用户名为名称的群组 | 
| -e 过期时间 | 设定用户账号过期时间 | 
| -f 缓冲天数 | 设定密码过期后多长时间关闭账号 | 
| -c 字符串 | 设定用户备注 | 
| -D [表达式] | 更改预设值(预设值保存在/etc/default/useradd 文件中) | 
- 新建用户规则保存于/etc/login.defs 文件中
 - 新建用户默认文件保存于/etc/skel/目录中。新建用户时,系统自动拷贝此目录下的文件至新建用户的 $HOME 目录
 
userdel 用户名
删除用户, -r 删除用户相关文件和目录
id [用户名]
显示用户 用户编号 群组编号 归属附加群组
进程管理
细节
进程一般分为批处理进程、交互进程和守护进程三类。
守护进程总是活跃,在系统启动时通过脚本自动启动,或由root启动,通常在后台运行。
一个进程可以拥有子进程。当父进程终止时,它的子进程也随之终止;而子进程终止时,父进程通常可以继续运行。
init进程为根进程,所有进程都是它的子进程。
ps
显示进程信息,选项可省略“-”
| 参数 | 含义 | 
|---|---|
| aux | 以BSD风格显示进程常用 | 
| -efH | 以SystemV风格 显示进程 | 
| -e | -A | 显示所有进程 | 
| a | 显示终端上所有用户的进程 | 
| x | 显示无终端进程 | 
| u | 显示详细信息 | 
| f | 树状显示 | 
| w | 完整显示信息 | 
| l | 显示长列表 | 
输出字段
| 字段 | 含义 | 
|---|---|
| USER | 进程所有者 | 
| PID | 进程编号 | 
| PPID | 父进程编号 | 
| %CPU | CPU占用率 | 
| %MEM | 内存占用率 | 
| NI | 进程优先级。数值越大,占用CPU时间越少 | 
| VSZ | 进程虚拟大小 | 
| RSS | 页面文件占用 | 
| TTY | 终端编号 | 
| STAT | 进程状态 | 
| D 不可终端 | |
| R 正在运行,或在队列中的进程 | |
| S 处于休眠状态 | |
| T 停止或被追踪 | |
| Z 僵尸进程 | |
| X 死掉的进程 | |
| < 高优先级 | |
| N 低优先级 | |
| L 有些页被锁进内存 | |
| s 包含子进程 | |
| + 位于后台的进程组 | |
| l 多线程,克隆线程 | 
pstree [ 进程编号 |用户 ]
树状显示进程信息。可选择显示某用户的进程或从某进程编号开始的进程。
| 参数 | 含义 | 
|---|---|
| -a | 显示完整命令及选项 | 
| -c | 完成显示重复进程 | 
| -p | 显示进程编号,隐含-c | 
| -n | 按进程编号排列进程 | 
| -u | 显示进程所有者 | 
| -h | |
| -H 进程编号 | 高亮显示进程表好指定的进程及其祖先 | 
pgrep 进程名
显示进程编号
| 参数 | 含义 | 
|---|---|
| -l | 显示进程名和进程编号 | 
| -o | 进程起始编号 | 
| -n | 进程终止编号 | 
kill [信号代码] 进程编号
根据进程编号向进程发送信号,常用来结束进程,默认信号为-9
| 参数 | 含义 | 
|---|---|
| -l [信号代码] | 显示、翻译信号代码 | 
| -9 | -KILL | 发送kill信号,退出 | 
| -6 | -ABRT | 发送abort信号,退出 | 
| -15 | -TERM | 发送Termination信号 | 
| -1 | -HUP | 挂起 | 
| -2 | -INT | 从键盘中断,相当于Ctrl+c | 
| -3 | -QUIT | 从键盘退出,相当于Ctrl+D | 
| -4 | -ILL | 非法指令 | 
| -11 | -SEGV | 内存错误 | 
| -13 | -PIPE | 破坏管道 | 
| -14 | -ALRM | |
| -STOP | 停止进程,但不结束 | 
| -CONT | 继续运行已停止的进程 | 
| -9 | -1 | 结束当前用户的所有进程 | 
pkill [信号代码] 进程名称
结束进程族。如果结束单个进程,请用kill
xkill
在图形界面中点杀进程。执行此命令后,鼠标指针变为骷髅图案。在窗口中点击左键杀死进程,右键取消
top
动态、交互式进程管理器
| 启动选项 | 含义 | 
|---|---|
| -b | |
| -c | 显示进程启动状态,包括选项、参数、操作对象等;而不只是进程名 | 
| -d 秒 | 刷新频率。 -d 5 表示5秒刷新一次 | 
| -n 次 | 刷新次数,然后退出。 -n 5 表示刷新5次后退出 | 
| -i | 禁止显示空闲进程或僵尸进程 | 
| -p 进程编号 | 仅监视指定进程的编号 | 
| -s | 安全模式运行,禁用一些交互指令 | 
| -S | 累积模式,输出每个进程的总的CPU时间,包括已死的子进程 | 
| 交互命令 | 含义 | 
|---|---|
| space | 立即刷新 | 
| k | 交互式杀死进程,提示输入进程编号(默认发送信号15) | 
| r | 设定renice,提示输入进程编号和renice值 | 
| s | 改变两次刷新时间间隔,以秒为单位 | 
| n | 设定显示进程数,0为不作限制 | 
| i | 隐藏空闲进程和僵尸进程 | 
| S | 切换到累积时间模式 | 
| l | 开关,在顶部显示uptime信息 | 
| t | 开关,在顶部显示进程和CPU状态 | 
| m | 开关,在顶部显示free信息 | 
| c | 显示方式切换:进程名/进程启动状态 | 
| A | 按进程启动顺序进行排序。由新到旧 | 
| M | 按内存占用排序。由大到小 | 
| N | 以进程编号排序。由大到小 | 
| P | 按CPU占用排序。由大到小 | 
| T | 按时间/累积时间排序 | 
| f|F | 设定显示字段。设定完成后空格退出 | 
| o|O | 设定显示字段的排序。大写向前移动,小写向后移动,空格退出 | 
| h|? | 显示有关安全模式和累积模式的帮助信息 | 
| W | 把当前的配置写到~/.toprc中 | 
renice 优先级 进程
重新设定进程优先级(通常无此必要)
| 优先级表达式 | 含义 | 
|---|---|
| +|-| = nice值 | |
| nice取值范围 | -20~19 | 
| 进程表达式 | 含义 | 
|---|---|
| -p 进程编号 | 通过进程编号进行设定 | 
| -g 进程群组编号 | 通过进程群组编号进行设定 | 
| -u 用户编号 | 
nohup 命令 [选项]
将任务提交到后台,输出附加到~/nohup.out 文件。即便用户退出登录,提交到命令仍继续执行。
命令 &
背景执行此命令,如果用户退出登录,则命令停止执行
命令1;命令;……
命令队列,从左到右,依次执行以;分隔的命令
命令1&&命令2&&……
命令队列,从左向右,依次执行以&&分隔的命令。前一个命令执行成功,后一个命令才能执行。
Ctrl + z
挂起当前任务
jobs
显示背景任务,-l 显示完整信息
bg [任务编号]
将挂起的任务背景执行
fg [任务编号]
将背景任务调到前台执行
参考资料: