Linux学习笔记(三):权限与进程
- 一、权限
- 读取,写入,执行
- Linux附加权限(SET位权限、粘滞位权限)
- 附加权限的八进制表示
- chmod
- chown
- su、sudo
- umask
- passwd
- 二、进程
- 创建一个进程
- ps
- top、jobs
- 对进程的操作
- kill、killall
- 进程相关命令
多用户多任务,Linux系统的核心,What should we do?
一、权限
各种关于权限的命令和相关特性因为Linux的多用户模式,需要限制不同的用户
当创建了一个用户账户之后,会给用户分配一个用户ID(uid),这个用户又会被分配一个组ID(gid),这个组名默认跟用户名是一样。
通过使用命令
id
查看用户的uid和gid,不同Linux系统中对于这些ID的排序不尽相同 (还存在着超级用户(uid 0)和其他系统用户(用于进程))
读取,写入,执行
文件调用权限分为三级 : 文件所有者(User)、用户组(Group)、其它用户(Other Users)
u: 文件所有者(user)
g: 文件所有者所在组 (group )
o: 所有其他用户(other users)
a/ugo: 所用用户(all)只有文件所有者和root用户可以修改文件或目录的权限。可以使用八进制数字模式或者符号模式(rwx) 指定文件的权限。
r - -(Read)读取: 八进制数字4、二进制为100
- w -(Write)写入: 八进制数字2、二进制为010
- - x(Execute)执行: 八进制数字1、二进制为001
Linux附加权限(SET位权限、粘滞位权限)
SET位权限(SUID、SGID): 执行文件被设置了SUID、SGID权限后,任何用户执行该文件时,将获得该文件创建者、组账号对应的权限。 一般用于给可执行的程序或脚本文件进行设置(passwd命令)
尽量避免使用SET位权限程序
如果文件除了设置suid和sgid之外还设置了x(执行权限),执行位表示为s(小写)。如果没有设置x位,执行位将表示为S(大写)。
粘滞位权限(sticky): 为目录设置特殊的附加权限,即便用户对该目录有写的权限,也不能删除该目录中其他用户的文件数据。
如果文件除了设置粘滞位权限还设置了x(执行权限),执行位表示为t(小写)。如果没有设置执行权限,执行位将表示为T(大写)。
附加权限的八进制表示
suid 的八进制数字是4
sgid 的八进制数字是 2
sticky位的八进制数字是1
在四位的八进制表示中最高的一位八进制数就是suid,sgdi,sticky的权值。
chmod
跟之前的chattr命令改变文件的属性相似,chmod设定的是文件的使用权限
+<属性> 开启属性。
-<属性> 关闭属性。
=<属性> 指定属性。
chmod 775 /chanwill/filename* //使用八进制表示赋予该文件夹下所有文件的读写执行权限
chmod -R 555 chanwill/ //-R递归的方式更改该文件下的所有权限
chmod u+s chanwill/filename //为User设置suid位
chmod g+s chanwill/filename //为Group设置sgid位
chmod u+t chanwill/filename //为User设置粘滞位
chmod g+t chanwill/filename //为Group设置粘滞位
chmod 4755 /chanwill/filname* //4755,拥有root权限
chown
chown命令用于设置文件的所有者和文件的关联组 (需要超级用户 root 的权限才能执行)
chown -f -v -R chanwill:chanwill * //-f忽略错误信息;-v显示详细的处理信息;-R递归处理
chown -c user:group //user为新的文件拥有者(UID),group为新的文件使用者组(GID)
su、sudo
su命令以其他用户身份或组的权限来执行指令
su username //切换到该用户,使用该用户的身份权限来执行命令,但并不会切换环境变量(不会改变工作目录)
su - username //上同,不过此命令可以切换环境变量(工作目录切换到username的家目录)
su -c command username //-c参数以username的权限执行一条命令然后回到原来的账户
sudo命令以root的权限执行指令
sudo -v //sudo在第一次执行时或在N分钟内没有执行(默认为五)会问密码。-v的作用是重新设定存活时间
sudo -u username/uid //-u参数的作用是指定一个用户username的身份执行
umask
umask命令指定在建立文件时预设的【权限掩码】
【权限掩码】是由3个八进制的数字所组成,将现有的权限减掉权限掩码后,即可产生建立文件时预设的权限。
umask -S //-S参数是将umask以文字的方式表示,默认为数字
umask所显示的是当前用户的权限掩码。要获取文件的权限只需要将777减去权限掩码就是文件的相应权限。
passwd
该命令用于修改账号的密码
如果在root用户下,该命令可以拥有对于其他用户账户密码管理的巨大权限
# passwd -S username //显示用户的密码信息
# passwd -d username //删除用户账户的密码
# passwd -f username //用户下次登陆时修改密码
二、进程
各种关于进程的命令因为Linux的多任务模式,来对任务进行管理
创建一个进程
当系统启动的时候,内核先把一些它自己的程序初始化为进程,然后运行一个叫做 init 的程序。init再运行一系列的称为 init 脚本的 shell 脚本,用以启动所有的系统服务。
许多系统服务以守护程序(daemon) 的形式实现,守护程序仅在后台运行(没有接口)
一个程序可以发动另一个程序(一个父进程创建了一个子进程)
系统分配给每个进程一个数字 (进程 ID(PID:PID 号按升序分配,init 进程的 PID 总是1)) 内核也对分配给每个进程的内存进行跟踪
ps
ps命令用于查看当前进程(类似于任务管理器)
ps -x //展示每个进程的信息
ps -ef | grep root //显示所有命令(命令行),还可以配合grep查找
ps -aux //显示每个用户的进程信息
输出格式 | 含义 |
USER | 进程所有者 |
PID | 进程ID |
PPID | 父进程ID |
%CPU | CPU占用率 |
%MEM | 内存占用率 |
VSZ | 当前任务占用的虚拟内存数 |
RSS | 当前任务占用的物理内存数(千字节) |
TTY | TTY (Teletype),指进程的控制终端。 |
STAT | 进程状态 |
START | 进程开始时间 |
TIME | 进程使用的CPU时间总计(秒) |
COMMAND | 所执行的指令 |
STAT状态:
R 进程正在运行或准备运行。
S 睡眠模式(没有运行)
D 不可中断的睡眠模式(如进程正在等待 I/O)
T 进程停止运行
Z 父进程没有把子进程从进程表中删除< 高优先级进程。这个进程会拥有更多重要的资源,会有更多的 CPU 时间(niceness)
N 低优先级进程。 低优先级进程只有等其它高优先级进程执行之后,才会得到处理器时间
top、jobs
实时显示 进程(process) 的动态
top -c -d 3 //-c显示详细信息,-d设定更新时间(秒)
top -p pid //显示指定的进程信息
Jobs命令用于查看后台运行的进程
对进程的操作
通过ctrl+c,有时候可以中断一个正在进行的程序(SIGINT 2)
通过在命令之后加上“&”,可以将程序放入后台运行 (使用jobs命令查看,工作序号(jobspec))
在后台运行的进程使用 fg 命令,让其返回前台执行
fg %1 //先使用jobs命令查看后台进程,使用fg命令后面跟百分号再加上工作序号(jobspec)
对于一个程序使用ctrl+z之后,该程序进入后台,我们使用bg命令来将其恢复到前台运行
bg %1 //同样使用jobs命令查看后台进程,再使用bg跟上百分号加上工作序号(jobspec)
kill、killall
kill命令将指定的信息(Signals) 送至程序,删除执行中的程序或工作。
指定信息可以用
kill -l
命令查看。预设的信息为SIGTERM(15),可将指定程序终止。SIGKILL(9) 信息尝试强制删除程序。SIGHUP(1) 重新加载进程。
kill -9 $(ps -ef | grep username) //过滤出用户并删除其进程
kill -9 pid //使用ps或者jobs命令来获取进程的pid再使用kill命令删除
kill 命令杀死指定进程 PID,killall命令直接对进程的名字进行操作
killall -e chanwill //进程需要跟输入的名字完全相符合
killall -l chanwill //忽略大小写
killall -u user chanwill //指定用户
进程相关命令
pstree: 输出树型结构的进程表(进程间父/子关系)
vmstat: 输出一个系统资源使用(内存,交换分区和磁盘 I/O) 可以在命令之后加上数字来设置刷新时间以查看实时效果
xload/tload: 图形界面程序。|