前言
仅供自己学习记录
简介
一、基础操作
1. 符号指令
1.1 特殊符号
!! 代表上一条命令
!$ 代表上一条命令中的最后一个参数
!str 代表历史命令中最近一条以str开头的命令
!?str? 代表历史命令中最近一条包含str的命令
!n和!-n 代表历史命令前n条命令,或者倒数第n条命令
cd ~ 进入当前表示当前账户的home目录
在 shell 中,担任"连续指令"功能的符号就是"分号"。譬如以下的例子:
cd ~/backup ; mkdir startup ;cp ~/.* startup/.
- ;; 连续分号(Command separator)
专用在 case 的选项,担任 Terminator 的角色。
case "$fop" inhelp) echo "Usage: Command -help -version filename";;version) echo "version 0.1" ;;esac
二、启动相关
- 进程概念
- 当前与终端交互的进程称为前台进程组. 其余进程组称为后台进程组.
![](https://img2020.cnblogs.com/blog/2407175/202109/2407175-20210915204730409-765747676.png)
PID = 进程ID (由内核根据延迟重用算法生成)
PPID = 父进程ID(只能由内核修改)
PGID = 进程组ID(子进程、父进程都能修改)
SID = 会话ID(进程自身可以修改,但有限制,详见下文)
TPGID= 控制终端进程组ID(由控制终端修改,用于指示当前前台进程组)
每次用户登录终端时会产生一个会话(session). 从用户登录开始到用户退出为止,这段时间内在该终端执行的进程都属于这一个会话
每个进程除了有一进程ID之外,还属于一个进程组(Process Group)。进程组是一个或多个进程的集合,每个进程组有一个唯一的进程组ID。多个进程属于进程组的情况是多个进程用管道“|”号连接进行执行。如果在命令行执行单个进程时这个进程组只有这一个进程.
当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)
如果会话期首进程终止,则该信号发送到该会话期前台进程组.
一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程.
- 结论:因此当网络断开或终端窗口关闭后,也就是SSH断开以后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出.
- 简而言之:就是ssh 打开以后,bash等都是他的子程序,一旦ssh关闭,系统将所有相关进程杀掉!! 导致一旦ssh关闭,执行中的任务就取消了.
2.1 前台启动
2.2 后台启动
用途:不挂断地运行命令。( no hang up)
语法:nohup Command [ Arg … ] [ & ]
该命令的一般形式为:nohup command &
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
也可以另外指定了输出文件:
nohup command > myout.file 2>&1 &
上述指令就是将运行产生的输出重定向到myouut.file文件
输出相关,操作系统里面有常用的三种流
0:标准输入流 stdin
1:标准输出流 stdout
2:标准错误流 stderr
一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。
下面举例说明:
nohup ./start-dishi.sh >output 2>&1 &
解释:
带&的命令行,即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上);
2>&1的意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 >output 2>output 文件output被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.
这就是为什么有人会写成: nohup ./command.sh >output 2>output出错的原因了
======================================================
最后谈一下/dev/null文件的作用,这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里
nohup ./command.sh >/dev/null 2>&1 &
三、状态相关
3.1 查看状态
用法:df [选项]... [文件]...
显示每个指定文件所在的文件系统的信息,默认是显示所有文件系统。
必选参数对长短选项同时适用。
-a, --all 包含虚拟、重复和无法访问的文件系统
-B, --block-size=大小 使用指定字节数的块。例如,'-BM' 将以
1,048,576 字节为单位显示大小。
参见 SIZE 格式。
-h, --human-readable 以 1024 为基底显示大小(例如:1023M)
-H, --si 以 1000 为基底显示大小(例如,1.1G)
-i, --inodes 显示inode 信息而非块使用量
-k 即--block-size=1K
-l, --local 只显示本机的文件系统
--no-sync 取得使用量数据前不进行同步动作(默认)
--output[=域列表] 使用给定域列表定义的输出格式,
或者在缺省情况下输出所有域。
-P, --portability 使用 POSIX 兼容的输出格式
--sync 取得使用量数据前先调用同步(sync)动作
--total 省略所有对可用空间无显著影响的项并生成总计值
-t, --type=类型 只显示指定文件系统为指定类型的信息
-T, --print-type 显示文件系统类型
-x, --exclude-type=类型 只显示文件系统不是指定类型的信息
-v (忽略)
--help 显示此帮助信息并退出
--version 显示版本信息并退出
PID:当前运行进程的ID
USER:进程属主
PR:每个进程的优先级别
NInice:反应一个进程“优先级”状态的值,其取值范围是-20至19,一
共40个级别。这个值越小,表示进程”优先级”越高,而值越
大“优先级”越低。一般会把nice值叫做静态优先级
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示
该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
total : 总计物理内存的大小。
used : 已使用多大。
free : 可用有多少。
Shared : 多个进程共享的内存总额。
Buffers/cached : 磁盘缓存的大小。
-/+ buffers/cached) :
used:已使用多大;
free:可用有多少。
四、运维相关