Linux
2019-06-25 15:52:42 0 举报
AI智能生成
Linux系统学习笔记,关于一些基本常识和命令,适合初级入门者使用,持续更新中
作者其他创作
大纲/内容
帮助命令
内外命令
内建命令:shell的一部分,不需要创建子进程,执行速度比外部命令快,例如history、cd、exit
外部命令:linux中的实用程序部分,不随系统一起被加载到内存中,需要时才将其调用内存。例如ls、vi
type [命令] #builtins 内建命令,/usr/bin or /usr/sbin 外部命令,alias 命令别名所设定的名称
help
只能用于内建命令
外部命令中通常都有 --help 参数
man
没有内建和外部之分
内容比help更多更详细,显示系统手册页中的内容
系统手册章节
1. standard commands 标准命令
2. system calls 系统调用
3. library functions 库函数
4. special devices 设备说明
5. file formats 文件格式
6. games and toys 游戏和娱乐
7. miscellaneous 杂项
8. administrative commands 管理员命令
9. 其他,用来存放内核例行程序的文档
info
信息比man 更全,来自GNU项目
软件安装(CentOS)
rpm
rpm -i packagename.rpm
查询 -q
-q
查询一个包是否被安装
-qi
查询被安装的包的信息
-qa
列出所有被安装的rpm package
-c
--configfiles 列出所有配置文件
-d
--docfiles 列出所有文档文件
-L
--licensefiles
-ql
--list 列出包中的文件
-s
--state 显示所列文件的状态
安装/更新
-i
--install
-h
--hash 安装时列出标记
-v
--verbose 显示指令执行过程
-e <packagefile>
--erase <包> 删除指定包(不用列版本号)
-U <packagefile>
--update 更新
--force
强制安装,即使覆盖属于其他包的文件也强制安装
yum
yum install packagename
编译源码
tar -xvf xxxx.tgz
./configure --prefix=/opt/xxxx #prefix手动指定安装路径,卸载直接删除/opt下子目录
make
sudo make install
需要手动将软件的bin目录加入到PATH中,还有可能需要修改LD_LIBRARY_PATH
crontab
周期性执行命令
crontab -e #进入crontab 往文档最后输入命令
格式: *(m) *(h) *(dom) *(mon) * (dow) [命令]
crontab -l #查看crontab
命令执行顺序控制与管道
顺序
;
简单顺序执行命令用“;”完成
&&
选择性执行(前面执行成功,返回0,才执行后面,否则不执行)
||
选择性执行(前面之前不成功,返回1,才执行后面)
管道
将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)
|
cut 选取命令
-b 以字节bytes为单位进行分割。
-n 不分割多字节字符
-c 以字符characters为单位进行分割
-num 前num个(包括第num个)
num- 后num个(包括第num个)
num 第num个
n1-n2 n1到n2之间的(包括n2不包括n1)
-d 自定义分隔符,默认为制表符
-f 指定显示哪个区域fields
grep
在文本中或stdin中查找匹配字符串
grep [命令选项]... 用于匹配表达式[文件]...
-r 递归搜索子目录中的文件
-n 打印匹配项行号
-I 忽略二进制文件
wc
小型记数工具
-l #line,行数
-w #words,单词数
-c #bytes,字节数
-m #字符数
-L #最长一行的字节数
sort
默认按字典排序
-r 倒序
-t ‘ ‘’’按特定字段排序
-k 字段号 #对指定字段排序
-n 按照数字排序
uniq
删除连续重复的行(不是全文去重)
文本处理
tr
删除或转换一段文本信息中的某些文字
tr [option]...SET1[SET2] (字符要加'')
-d 删除和set1匹配的字符,不是全词匹配也不是按字符顺序匹配
-s 取出set1指定的再输入文本中连续并重复的字符
col
将文本中的tab换成对等数量的空格键,或反转这个操作
-x 将Tab(^I)转换为空格
-h 将空格转换为Tab(默认选项)
join
将两个文件中包含相同内容的那一行合并在一起(行属性一致)
join [option]... file1 file2
-t 指定分隔符,默认为空格
-i 忽略大小写的差异
-1、-2 指明第一/二个文件要用哪个字段来对比,默认对比第一个字段
paste
在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开
paste [option] file...
-d 指定合并的分隔符,默认为Tab
-s 不合并到一行,每个文件为一行
数据流重定向
重定向:将原本输出到标准输出的数据重定向到一个文件中
> 赋值, >> 追加
输出输入
文件描述符-设备文件-说明
0-/dev/stdin-标准输入(对应在终端的输入)
1-/dev/stdout-标准输出(对应于终端的输出)
2-/dev/stderr-标准错误(对应于终端的输出)
标准错误重定向 &> or 2>&1
默认情况下标准错误指向终端,不进行重定向
2>&1 (将标准错误重定向到标准输出,再将标准输出重定向到文件)
&> (将标准错误和标准输出同时重定向)
tee 同时重定向到文件和终端
exec 永久重定向
只能用文件描述符
文件描述符3-8 可以通过重定向自定义 echo “” >& 3~8
关闭3-8文件描述符: exec 3>&-
正则表达式基础
基本语法
选择
A|B, 可以匹配“A”或“B”
数量限定
*
表示前面的字符出现0次或多次(>=0次)
+
表示前面的字符必须出现至少1次(>=1次)
?
表示前面的字符最多出现0次或1次
范围
()
将括号内的模式串作为一个整体
限定范围
部分语法
\
将下一个字符标记为一个特殊字符、或一个原义字符
^
匹配输入字符串的开始位置(行首)
放到中括号内为排除字符
$
匹配输入字符串的结束位置
{n}
n(非负整数)匹配确定的n次
{n,}
n(非负整数)至少匹配n次
{n,m}
n,m(非负整数 n<=m)至少匹配n次且最多匹配m次
.
匹配除"\n"之外的任何单个字符
(pattern)
匹配pattern并获取这一匹配的子字符串,用于向后引用
[xyz]
匹配所包含的任意一个字符
连字符‘-’出现在字符中间表示字符范围描述,出现在首位作为普通字符
[^xyz]
匹配未列出的任意字符(排除型)
特殊符号
[:digit:]
所有数字 0-9
[:xdigit:]
16进位的数字类型 0-9,A-F, a-f
[:lower:]
所有小写字母 a-z
[:upper:]
所有大写字母 A-Z
[:alnum:]
所有字母和数字 0-9,a-z,A-Z
[:alpha:]
所有字母 a-z,A-Z
[:blank:]
空白键与Tab
[:cntrl:]
键盘上的控制按键,即包括CR,LF,Tab,Del等等
[:graph:]
除了空白字节(空格与Tab)外的其他所有按键
[:print:]
任何可以被列印出来的字节
[:punct:]
标点符号 punctuation symbol
[:space:]
任何会产生空白的字节
优先级
从上到下,从左到右,依次降低
\ 转义符
(), (?:), (?=), [] - 括号和中括号
*, +, {n}, {n,}, {n,m} - 限定符
^, $, \任何元字符 - 定位点和序列
|-选择
grep
用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件
grep [options] file
支持三种正则表达式引擎
grep -E or egrep
-E #POSIX扩展正则表达式,ERE
-G
-G #POSIX基本正则表达式,BRE
-P
-P #Perl正则表达式,PCRE
-b
-b #将二进制文件作为文本来进行匹配
-c
-c #统计以模式匹配的数目
-i
-i #忽略大小写
-n
-n #显示匹配文本所在行的行号
-v
-v #反选,输出不匹配行的内容
-r
-r #递归匹配查找
-A n
-A n #n为正整数,表示after的意思,除了列出匹配行之外,还列出后面的n行
-B n
-B n #n为正整数,表示before的意思,除了列出匹配行之外,还列出前面的n行
--color=auto
--color=auto #将输出中的匹配项设置为自动颜色显示
(通常是默认设置了grep 颜色,可以通过参数指定或修改GREP_COLOR变量)
sed
用于过滤和转换文本的流编辑器(非交互式)
非交互式
只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出
流编辑器
每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕
即,一次只处理一行内容
pattern space 模式空间
把当前处理的行为存储在临时缓冲区(pattern space)
接着sed命令处理pattern space中的内容
处理完成后,把pattern space的内容送往屏幕。
接着清空pattern space,处理下一行
hold space 保留空间
处理完成的数据存储在hold space(每次一行)
最开始为空
常用参数
-n
安静模式,只打印受影响行,默认打印输入数据的全部内容
-e
用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要加该参数
-f filename
指定执行filename文件中的命令
-r
使用扩展正则表达式,默认为标准正则表达式
-i
将直接修改输入文件内容,而不是打印到标准输出设备
执行命令
sed [option] 'command/[n1]/[,n2]/command' filename
[n1][~step]command
n1,n2表示输入内容的行号,逗号分割则表示从n1行到n2行。如果~则表示从n1开始以step为步长的所有行(step为正整数)
command为执行动作
s
行内替换
c
整行替换
a
插入到指定行的后面
i
插入到指定行的前面
p
打印制定行,通常与-n配合使用
d
删除指定行
g
全局范围
awk
用于处理文本的编程语言工具,Linux和Unix环境中现有功能最强大的数据处理引擎之一
pattern {action}
pattern通常是表示用于匹配输入的文本的“关系式”或“正则表达式”,action则是表示匹配后将执行的动作
如果没有pattern则默认匹配输入的全部文本,如果没有action则默认为打印匹配内容到屏幕
命令
awk [-F fs] [-v var=value] [-f prog-file | 'program text'] [file...]
-F
预先指定字段分隔符
-v
预先指定变量
-f
指定要执行的程序文件
或者不加-f直接将程序语句放在这里
[file...]
awk需要处理的文本输入,且可以同时输入多个文本文件
内置变量
FILENAME
当前输入第一个文件的文件名。如果输入是来自标准输入,则为空字符串
$0
当前记录内容
$N
N表示字段号,最导致为NF变量的值
FS
字段分隔符,由正则表达式表示,默认为空格
RS
输入记录分隔符,默认为“\n”,即一行为一个记录
NF
当前记录字段数
NR
已经读入的记录数
FNR
当前输入文件的记录数
OFS
输出字段分隔符,默认为空格
ORS
输出记录分隔符,默认为“\n”
目录及文件基本操作
路径
cd 切换
. 当前目录; .. 上一级目录; - 上次所在目录; ~ 当前用户home目录
pwd 获取当前所在(绝对)路径
新建
空白文件: touch <file>
目录: mkdir <path><directory> #make directories
多级目录: mkdir -p father/son/grandson
复制
cp [file] <path>
-r -R: 递归复制,即复制目录下的所有文件
删除
rm [file]
-f 强制删除
-r -R 删除目录所有文件
移动
mv [源目录文件] [目的目录]; mv [旧的文件名] [新的文件名]
批量重命名 rename
查看
cat 顺序打印文件内容到标准输出(终端)
-A 显示不可见特殊字符
tac 倒序打印文件内容到标准输出(终端)
nl 添加行号并打印
more 分页查看文件,不能回溯
不可以解压缩
less 分页查看文件,可以回溯
可以解压缩
head 查看文件头几行,默认10
-n 行数
tail 查看文件尾几行,默认10
-f 不停读取文件某个内容并显示
file 查看文件类型
编辑
emacs
vim
nano
cat
cat filename
一次显示整个文件
cat > filename
从键盘创建一个文件(不能编辑已有文件)
cat file1 file2 > file
合并文件
cat <<EOF > file
将键盘输入写入到文件中,直到输入EOF结束。(EOF可以替换为其他任意字符组合)
非脚本中,ctrl+D可以替代<<EOF的功能
用户
伪终端
当在图形界面使用/dev/tty7时每打开一个终端就会产生一个伪终端
真终端
七个使用[ctrl]+[alt]+[F1]~[F7]进行切换/dev/tty设备
查看用户
who am i #打开伪终端用户名
whoami #查看当前登录用户名
who
-a 打印能打印的全部
-d 打印死掉的过程
-m 同am i,mom likes
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级
创建用户
su <user> 切换用户
sudo <cmd> 以特权级别运行cmd命令
sudo adduser xxx
su - <user> 切换用户,同时环境变量也变
groups <user> 查看用户所属的用户组
#<user>:<group>
sudo usermod -G sudo <user> 在sudo组添加用户
修改用户
chown [user]:[group] file
文件权限
drwxrwxrwx 2 user group 4096 11月 13 15:27 Documents
drwxrwxrwx
rwx用户权限
第一个rwx:拥有者权限 user
第二个rwx:所属用户组权限 group
第三个rwx:用户权限 other
r 读; w 写; x 执行
第一个字母:文件类型
d 目录
l 软链接(等同于快捷方式)
b 块设备
子主题
s socket 网络套接字
p 管道
- 普通文件
2 链接数
链接数:链接到该文件所在的inode结点的文件名数目
user 文件所有者;group 所属用户组
4096文件大小
以inode结点大小为单位来表示文件大小
ls -lh #更直观查看文件大小
读文件
cat <file name>
修改文件权限 chmod
二进制表示
---: 0
--x: 2^0=1
-w-: 2^1=2
r--: 2^2=4
r-x: 5
rwx: 2^2+2^1+2^0=7
chomod 700 <file> #file的权限为rwx------
加减赋值
u: user; g: group; o: other
+: add; -: remove
chmod go-rw <file> #file的group和other的rw权限被删去
环境变量与文件查找
环境变量
定义 declare 或 直接赋值
打印环境变量信息
set
显示当前shell所有变量,包括其内建环境变量,用户自定义变量及导出的环境变量
env
显示当前用户相关的环境变量,还可以让命令在指定环境中运行
export
显示从shell中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量‘
只在当前的session中有效
export [-fnp] [变量名称]=[变量设置值]
-f 代表[变量名称]中为函数名称
-n 删除指定变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
常见环境变量
PATH
决定了shell将到哪些目录中寻找命令或程序
LD_LIBRARY_PATH
动态库的目录
HOME
当前用户主目录
SHELL
指当前用户用的是哪种shell
HISTSIZE
保存历史命令记录的条数
LOGNAME
当前用户的的登录名
HOSTNAME
主机的名称
LANG/LANGUGE
和语言相关的环境变量,使用多语言用户可以修改此环境变量
startup文件
/etc/bashrc
存放shell变量
/etc/profile
存放shell环境变量
对所有用户永久生效
~/.bash_profile
只对当前用户永久生效
用于“登录shell”的环境加载,这个“登录shell”(远程登录)既可以是“交互式”的,也可以是“非交互式”的.
会显式调用~/.bashrc
即,~/.bashrc先与~/.bash_profile
~/.bashrc
每次启动shell都会默认执行的配置脚本,以初始化环境,包括添加一些用户兹定于环境变量等
用于“交互式非登录shell”(从图形界面打开终端)的环境加载。
会显式调用/etc/bashrc
总结
如果想对bash的功能进行设置或定义一些别名,推荐修改~/.bashrc
这样无论以何种方式打开shell,配置都会生效。
这样无论以何种方式打开shell,配置都会生效。
如果要更改一些环境变量,推荐修改~/.bash_profile,
因为考虑到shell的继承特性,这些更改确实只应该被执行一次(而不是多次)。
因为考虑到shell的继承特性,这些更改确实只应该被执行一次(而不是多次)。
针对所有用户进行全局设置,推荐在/etc/profile.d目录下添加以.sh结尾的文件,
而不是去修改全局startup文件
而不是去修改全局startup文件
命令的查找路径与顺序
echo $PATH
PATH保存了shell中执行的命令的搜索路径
输出所有搜索路径,以冒号区分
将环境变量添加到PATH中
echo "PATH=$PATH:/home/user/mybin" >> .bashrc
让环境变量立即生效
source .bashrc
搜索文件
whereis
速度最快。二进制文件(-b), man帮助文件(-m), 源代码文件(-s)
locate
快而全。(需updatedb 更加刚添加的文件)
-c 统计数目
-i 忽略大小写
-b -m -s 同whereis
which
小而精。
find
精而细。find [path] [option] [action]
例如: find /wenjianjia/ -name mingzi
压缩与解压
压缩文件
*.zip
zip程序打包压缩
*.rar
rar程序压缩
*.7z
7zip程序压缩
*.tar
tar程序打包,未压缩
*.gz
gzip程序(GNU zip)压缩
gzip *.gz -d [path]
gunzip
*.xz
xz程序压缩
*.bz2
bzip2程序压缩
*.tar.gz
tar打包,gzip程序压缩
*.tar.xz
tar打包,xz程序压缩
*.tar.bz2
tar打包,bzip2程序压缩
*.tar.7z
tar打包,7z程序压缩
压缩命令
zip
-r 递归打包包含子目录的全部内容
-d 制定路径
-q 安静模式,不向屏幕输出屏幕
-o 输出文件,需在其后紧跟打包输出文件名
压缩级别 -[1~9] 默认9
-x 排除文件
-e 加密
-l 将LF(换行)转换为CR+LF(回车+换行)
unzip
-d 解压到指定目录
-l 只查看不解压
unzip -O GBK 中文压缩文件.zip (linux默认UTF-8解码,中文默认GBK编码)
rar
不用“-”
a 添加一个目录到一个归档文件中,如果文件不存在则自动创建
d 从指定压缩包文件中删除某个文件
l 查看不解压文件
unrar 解压
x 全路径解压
e 去掉路径解压
tar
只是一个打包工具,但同时实现对7z,gzip,xz,bzip2等工具的支持
-z 使用gzip压缩 *.tar.gz
解压 tar -zxvf xx.tar.gz
-J 使用xz压缩 *.tar.xz
-j 使用bzip2压缩 *.tar.bz2
解压 tar -jxvf xx.tar.bz2
-c 创建一个tar包文件
-C 指定路径
-f 指定创建文件名,必须紧跟其后,后面不能再加参数
-v 以可视的方式输出到打包的文件
-P 保留绝对路径符 (默认自动去掉表示绝对路径的/)
-x 解压缩一个文件到制定路径的已存在的目录{-C}
-t 只查看不解包文件
-p 备份保留文件的属性
-h 备份链接指向的源文件而不是链接本身
-z 是否同时具有 gzip 的属性
-j 是否同时具有bz2属性
常用命令
zip
打包:zip sth.zip sth (目录请加-r)
解包:unzip sth
指定路径: -d
tar
打包:tar -zcvf sth.tar sth
解包:tar -xvf sth.tar
指定路径:-C
文件系统操作与磁盘管理
挂载: Linux中是指将一个设备(通常是存储设备)挂接到一个已存在的目录上。Windows通常是指给磁盘分区分配一个盘符
df 查看磁盘和目录的容量
(report file system disk space usage)
(report file system disk space usage)
/dev/sda2 主机硬盘的分区
rootfs: Root File System,是ramfs或tmpfs的一个特殊实例,作为系统启动时内核载入内存后,在挂载真正的磁盘之前的一个临时文件系统。
ramfs: Ramfs是一个非常简单的linux文件系统用于实现磁盘缓存机制作为动态可调整大小的基于ram的文件系统
1k-blocks: 表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量
-h 人性化展示
du 查看目录的容量
(estimate file space usage)
(estimate file space usage)
-h #更易读的方式(以K,M,G为单位)展示
-d 0 ~ #只看1级目录的信息
-d 1 ~ #只看2级目录的信息
-a #同--all,显示目录中所有文件的大小
-s #同--summarize,仅显示总计,只列出最后加总的值
dd 转换和复制文件,同时处理数据
命令行选项格式:选项=值
默认从标准输入中读取,并写入到标准输出中
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
只读取总共 10 个字节的数据,多余输入将被截取并保留在标准输入
bs: block size (默认Byte为单位) count: 指定块数量
创建虚拟镜像文件
dd if=/dev/zero of=virtual.img bs=1M count=256
从/dev/zero设备创建了一个容量为256M的空文件
mkfs 格式化
格式化成所需的文件格式
mount 挂载
mount [options] [source] [directory]
mount [-o [操作选项]] [-t 文件系统类型] [-w | --rw | --ro] [文件系统源] [挂载点]
umount 卸载已挂载
fdisk 磁盘分区
-l 查看磁盘信息
w 将修改写入磁盘
进程概念
程序 procedure
执行一系列有逻辑,有顺序结构的指令,为我们提供所需要的服务
进程 process
程序在一个数据集合上的一次执行过程 (运行中的程序)
根据功能与服务对象分类
用户进程
通过执行用户程序、应用程序等内核之外的系统程序,可以在用户的控制下运行或关闭
系统进程
通过执行系统内核程序而产生的进程,比如内存资源分配和进程切换等相对底层的工作,且运行不受用户的干预,即使root用户也不行。
根据应用程序的服务类型分类
交互进程
由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以在前台和后台运行
批处理运行
是一个进程集合,负责按顺序启动其他的进程
守护进程
一直运行的一中进程,在linux系统启动时启动,系统关闭时关闭。独立于控制终端并且周期性执行某种任务或等待处理某些发生的事情。例如httpd进程,一直处于运行状态等待用户的访问。
fork()
是一个系统调用(system call),主要作用是为当前进程穿件一个新的进程(子进程),子进程除了父进程的返回值和PID以外其他一模一样,如执行代码段,内存信息,文件描述,寄存器状态等
exec()
系统调用,作用是切换子进程汇总的执行程序也就是替换其从父进程复制过来的代码段与数据段
子进程
子进程结束时它的主函数main()会执行exit(n);或者return n, 这里的返回值n是一个信号,系统会把这个SIGCHLD信号转给其父进程
僵尸进程 Zombie
正常情况下,父进程会受到两个返回值-exit code(SIGCHLD信号)和reason for termination后,使用wait(&status)系统调用以获取子进程的退出状态,然后内核从内存中释放已结束子进程的PCB;若父进程没这么做,子进程的PCB会一直驻留在内存中,称为僵尸进程(Zombie)
(PCB是进程存在的唯一标志,里面有PID等信息)
僵持进程放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,在进程列表中保留一个位置,记在该进程的退出状态等信息供其父进程收集,从而释放它。但Linux系统中PID是有限的,如果存在大量僵尸进程,系统会因为没有可用的PID从而不能产生新的进程
孤儿进程
父进程非正常结束,未能及时回收子进程,仍在运行的子进程称为孤儿进程
Linux系统中,一般会成为init的子进程,有init来做善后处理,所以不会像僵尸进程那样大量存在会有危害。
进程0
内核初始化,是系统引导时创建的一个特殊进程
其最后一个动作是调用fork()创建出一个子进程运行/sbin/init可执行文件,也就是PID=1的进程1,init进程
而进程0就转为交换进程(空闲进程)
进程1
init进程
第一个普通用户状态的进程,再由它不断调用fork()来创建系统里的其他进程,所有进程的父/祖先进程。
同时也是守护进程,知道计算机关机才会停止
进程组
PGID(process group ID)
一般情况下等同于进程组第一个成员的PID,且这种进程成为领导进程
每一个进程都是一个进程组的成员,且进程组是唯一的。
getpgrp()
系统调用来寻找其所在组的PGID
Session
当每一个进程被创建时,便会成为其父进程所在Session中的一员,每个进程组都会在一个Session中,并且这个Session是唯一的
Session主要是针对一个tty建立,Session中每个进程都成为一个工作(job)
每个回话可以连接一个终端(control terminal),当有输入输出时,都传递给该回话的前台进程组。
Session意义在于将多个job囊括在一个终端,并取其中一个job作为前台,来直接接受该终端的输入输出以及终端信号。其他job在后台运行。
tty=terminal=文本的输入输出环境
tty-代表terminal的文件
a shell is a special program that interacts with a user through a controlling tty and offers, to the user, the way of launching other programs (e.g. bash, csh, tcsh).
工作管理
bash支持job control, sh不支持
每个终端(或bash)只能管理当前终端中的job。
ctrl+c 终止前台进程
& 让程序在后台进行
ctrl+z 使当前工作停止并丢到后台去
jobs
查看被暂停然后丢到后台的进程
bg [job number]
让后台的进程运行
此时断开ssh程序会停止
exit
断开ssh也可以继续运行
fg [job number] 将后台的工作拿到前台来
kill -signal [jobnumber/pid]
删除一个工作
-1
重新读取参数运行,类似restart
-2
如同ctrl+c的操作退出
-9
强制终止该任务
-15
正常的方式终止该任务
线程 thread
操作系统能够进行运算调度的最小单位(包含在进程之中,是进程中的实际运作单位)。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
进程管理
进程查看
top
定义:是一个前台执行的程序,执行后进入交互界面,实时获取系统与进程信息。可通过指令来操作和筛选。
好好利用top能够很有效的帮助我们观察到系统的瓶颈或问题所在。
第一行
系统情况简介
top [] 表示当前程序的名称
xx:xx:xx 表示当前的系统时间
up x days, xx:xx 表示该机器已经启动了多长时间
1 user 表示当前系统中只有一个用户
load average: x, x, x 分别对应1/5/15分钟内cpu的平均负载
the system load is a measure of the amount of work that a computer system is doing
当前CPU工作量的度量:运行队列的平均长度/等待CPU的平均进程数相关的一个计算值
(一段时间内CPU正在处理以及等待CPU处理的进程数情况统计信息)
1
load=0
没有任务
load<1
任务不多,资源充足
通常将临界值定为0.7
load=1
cpu全力工作,所有资源被用完,但仍在能力范围之内,只是有点慢
load>1
cpu全力工作,系统资源用完,但仍有大量的进程在请求、等待。
load>5
超负荷运作
查看cpu核数
cat /proc/cpuinfo |grep "physical id" |grep "0" |wc -l
第二行
进程的情况统计
Tasks: xx total
进程总数
running
正在运行
sleeping
睡眠进程
stopped
停止进程
zombie
僵尸进程
第三行
占用CPU的百分比(CPU利用率)
us
用户空间
sy
系统空间
ni
用户进程空间内改变过优先级的进程
id
空闲CPU百分比
wa
等待输入输出的CPU时间百分比
应为0
hi
硬中断(Hardware IRQ)
应为0
si
软中断(Software IRG)
应为0
st
(Steal time)是hypervisor等虚拟服务中,虚拟CPU等待实际CPU的时间 百分比
应为0
第四行
内存(MEM)的使用情况统计
total
物理内存总量
used
free
空闲
buffers
用作内核缓存的内存量
第五行
交换区(SWAP)的使用情况统计
total、used、free
cached
缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖。
以下
进程情况
PID
进程ID
USER
所属用户
PR
该进程执行的优先级priority值
动态优先级。进程在内核中实际的优先级值,取值范围是通过一个MAX_PRIO宏定义的,值为140,范围0~139。值越小,优先级越高。0~99是实时进程的值,100~139是用户的值。
100~139部分有一个对应PR120+(-20 to +19) (即nice值)
与nice值有关系,但值和作用范围不同
NI
nice值
静态优先级。用户空间的一个优先级值,取值范围-20~19。值越小,优先级越高。默认为0
VIRT
virtual 所使用虚拟内存的总数
包括所有的代码,数据,共享库和被换出swap空间的页面等所占据空间的总数
RES
resident memory usage 所使用的物理内存数,也称为驻留内存数
SHR
share 共享内存的大小
S
进程状态:S=sleep可中断的睡眠状态 R=running Z=zombie D=disk sleep 不可中断的睡眠状态
%CPU
CPU利用率
%MEM
memory 内存利用率
TIME+
活跃的总时间
COMMAND
程序运行的名字
命令
q
退出
u
user
l
切换显示平均负载和启动时间的信息
P
根据CPU使用百分比大小进行排序
M
根据驻留内存(RES)大小进行排序
i
忽略限制和僵尸的进程,这是一个开关式命令
k
终止一个进程,系统显示输入PID及发送的信号值。一般终止进程用15信号,不能正常结束则使用9信号。安全模式下该命令被屏蔽
ps
Linux内建的查看当前进程的工具(非实时)。可以结合grep等
内容
PID
运行着的命令(CMD)的进程编号
PPID: parent PID
SID: session ID
TPGID: 前台进程组的ID
-1 没有控制终端的进程,即守护进程
TTY
命令所运行的位置(终端)
TIME
运行着的该命令所占用的CPU处理时间
CMD
该进程所运行的命令
命令
a
all 所有当前进程
x
加上没有控制终端的进程
结合less和管道方便查看
ps ax | less
u
查看特定用户进程的详情
ps u [CMD]
f
查看格式化的信息列表
C [进程名字/PID]
通过进程名或PID过滤
-l
显示这次登录的bash相关的进程信息
j
呈树状显示
o
output 自定义输出显示
ps -axfo user,ppid,pid,pgid,command
内容
F
process flags
1: 此子程序只是fork但没有执行exec
4: 此程序使用root权限
VSZ
virtual size 使用虚拟内存的大小
RSS
resident set size, 占用内存RES页的数量
S or STAT
进程状态
R: running
S: Interruptible Sleep 睡眠等待调用
D: Uninterruptible Sleep 不可中断睡眠
无法使用kill结束进程
可能是进程I/O时出问题
T: Stoped 暂停或者跟踪状态
X: Dead 即将被撤销
Z: Zombie 僵尸进程
W: Paging 内存交换
N: 优先级低的进程
<: 优先级高的进程
s: 进程的领导者
L: 锁定状态
|: 多线程状态
+: 前台进程
WCHAN
正在等待的进程资源
pstree
直接看到相同的进程数量,以及所有进程之间的相关性
-A
各程序树之间以ASCII字元来连接
-p
同时列出每个process的PID
-u
同时列出每个process的所属账户名称
进程管理
kill 结束程序
kill -9 [gid]
用9这个信号强制结束进程
进程的执行顺序
nice 或 renice 修改nice值(-20~19)
root 既可调整自己的进程也可以调整其他用户的程序,且所有值可用
普通用户只可以调整属于自己的进程
普通用户进程的nice值:0~19
子主题
日志系统
一般内置使用syslog系统日志,存放在/var/log
系统日志
alternatives.log
系统的一些更新替代信息记录
apport.log
应用程序崩溃信息记录
apt/history.log
使用apt-get 安装卸载软件的信息记录
apt/term.log
使用apt-get时的具体操作,如package的下载、打开等细节
auth.log
登录认证的信息记录
boot.log
系统启动时的程序服务的日志信息
btmp
错误登录的信息记录
Consolekit/history
控制台的信息记录
dist-upgrade
dist-upgrade这种更新方式的信息记录
dmesg
启动时,显示屏幕上内核缓冲信息,与硬件有关的信息
dpkg.log
dpkg命令管理包的日志
faillog
用户登录失败详细信息记录
fontconfig.log
与字体配置有关的信息记录
kern.log
内核产生的信息记录,在自己修改内核时有很大帮助
lastlog(二进制文件)
用户的最近信息记录
二进制文件用last或lastlog工具来提取其中的信息
wtmp(二进制文件)
登录信息的记录。可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
syslog
系统信息记录
应用日志
rsyslog
rocket-fast system for log
syslog的升级版,实时收集日志信息
守护进程 rsyslogd
开启rsyslog
sudo service rsyslog start
配置文件
/etc/rsyslog.conf
配置的环境,即加载的模块、文件的所属者等
/etc/rsyslog.d/50-default.conf
配置的filter conditions
转储日志
logrotate
日志文件管理工具。基于CRON。脚本是/etc/cron.daily/logrotate
用于删除旧日志文件,创建新日志文件。可以根据日志文件大小、天数来切割、管理日志。这个过程就叫“转储”
配置文件 /etc/logrotate
bash
简介
Bash (GNU Bourne-Again Shell)
一个为GNU计划编写的Unix shell
一个命令解释器,介于操作系统内核与用户之间的一个绝缘层
能力很强的计算机语言,被称为解释性语言或脚本语言
可以通过将系统调用、公共程序、工具和编译过的二进制程序“粘合”在一起来建立应用,也称为“胶水语言”
程序(公司)
进程1(技术部)
线程3(前段开发部)
线程2(后端开发部)
线程3(运维部)
进程2(财务部)
线程1(项目财务)
线程2(人事财务)
线程3(投资财务)
进程3(销售部)
线程1(硬件销售部)
线程2(软件销售部)
线程3(广告宣传部)
进程4(人事部)
线程1(职员管理)
线程2(xxxx)
线程3(xxxx)
0 条评论
下一页