shell和进程管理
bash shell
Bash 是shell的类型之一
Shell的类型:csh、tsh、ksh、bash
历史记录history
history命令
-c 清空历史命令(缓存中的)
-w 将缓存中的历史命令写入历史命令保存文件
.bash_history 存放历史命令
通配符
通配符 | 解释 |
---|---|
* | 匹配0或多个字符 |
? | 匹配任意1个字符 |
[0-9] | 匹配0-9范围内的数字 |
[abc] | 匹配该列表内的任意字符 |
[^abc] | 不匹配列表内的任意字符 |
[:alpha:] | 匹配字母 |
[:lower:] [:upper:] | 小写、大写字母 |
[:digit:] | 数字 |
[:space:] | 空格 |
[:alnum:] | 任意字母或数字 |
[:punct:] | 除空格、字母、数字以外的任何可打印字符 |
变量
局部变量和全局变量
- set :当前shell中生效的所有变量,包括环境变量
- env: 当前shell中生效的所有环境变量
- unset: 取消变量,unset 变量名
别名alias
简化命令
cp -r /etc/ /tmp/etc-$(date + '%F-%T')
#定义别名
alias copy='cp -r /etc/ /tmp/etc-$(date + '%F-%T')'
#取消别名
unalias copy
alias 查看所有别名
引号和反斜杠
引号和反斜杠都可以用来转义
- 单引号:所有都转义
- 双引号:$, ``,,! 不能转义,其他都转义
环境变量和本地变量
-
本地变量:仅在当前shell中生效的变量,用户自定义变量
-
环境变量: 在当前shell和子shell中生效的变量,系统配置环境变量
定义环境变量:export 变量名
变量的配置文件
文件 | 定义 |
---|---|
/etc/profile | 定义全局环境变量,针对所有用户生效 |
~/.bash_profile | 定义用户环境 |
/etc/bashrc | 定义全局变量,所有用户生效 |
~/.bashrc | 定义用户的变量 |
~/.bash_logout | 退出触发,登出shell |
登录shell和非登录shell
- 登录shell
登录用户、su - 切换用户
读取上面四个文件
读取顺序:
/etc/profile
/etc/bashrc
~/.bashrc
~/.bash_profile
- 非登录shell
su bash,执行脚本,打开伪终端
读取/etc/bashrc ~/.bashrc
进程管理
进程id,PID,唯一,进程也要匹配权限
7版本以前 init管理 以后systemd管理
孤儿进程:父进程异常结束,被PID为1的管理
僵尸进程:子进程想要结束,但是父进程没有反馈,导致子进程仍保存在系统中
ps命令
-a 查看所有终端的进程
-u 打印进程的详细信息,包裹进程的拥有人,使用百分比
-x 打印不属于任何终端的进程
-e 所有进程 包括终端和非终端的
-f 额外信息 ef组合用
-o 指定输出信息格式 ps -axo pid,user,command
--sort 指定排序参数 支持升/降序+/- ps aux --sort=-%mem
ps 信息解释
第一列:进程的拥有人,一般情况谁运行该进程,拥有人就是谁
第二列:pid进程id,不是唯一,每重启一次pid重新分配
第三列和第四列:cpu和内存的使用百分比
第五列:VSZ 虚拟内存 ,应用程序申请的内存
第六列:RSS实际使用的内存 应用程序实际使用的内存
第七列:tty,进程运行的终端 ctrl+f123456 tty1 tty2 tty3
pts伪终端:图形界面打开的终端或者远程登录的终端
?: 不属于任何终端
终端:用户登录时才会分配终端,当终端关闭时,该终端上的任务也会随之关闭
第八列:STAT 进程的运行状态
第九列:进程开启的时间
第十列:进程上一次持续运行的时间
第十一列:进程的命令或者进程名
进程状态
top命令
选项
d 指定屏幕刷新时间间隔 top-d 4
p 通过指定监控进程id来监控某个进程的状态 -p pid
top命令支持一些交互命令
c 切换详细信息
M 按照内存占用情况进行排序
P 按照CPU百分比
T 安装累计时间进行排序
f 选择显示内容
k 杀死进程
r renice
pgrep过滤进程
pgrep 通过程序的名字来查询进程
选项
-U: 查找某个用户的进程id
-G: 查找某个组的进程id
-P: 根据父进程ID,查找所有子进程id
-l 打印进程名
-o 程序先启动的进程的pid,即父pid
-n 后启动的进程pid
-d 定义多个进程之间的分隔符,默认换行符
kill
进程的通信:通过信号......套接字
kill通过手动发送信号操作进程。
- kill -l 查看信号
15 正常结束,默认值,让进程自己结束
9 强制结束,终端或者内核将进程结束。
1 重新加载配置文件
19 将进程后台暂停
kill -15 pid
- killall 进程名
- pkill 和pgrep语法类似 过滤出进程并发送信号
nice值
nice值范围 -20-19 数值越大优先级越低
nice -n 19 vim 1.txt 启动时设置优先级
renice -n 5 pid 修改优先级
job任务控制
jobs查看当前终端的后台任务
vim 1.txt & 将任务放到后台运行
fg %jobnum 将后台进程放在前台运行
bg %jobnum (恢复)后台运行
kill -15 %jobnum
pidof
pstree