嵌入式软件开发 day3

  • 一、守关将军
  • 1.umask
  • 1)改umask值
  • 2.拓展:
  • 二、软件包管理
  • 1.安装方式
  • 2.拓展:
  • 三、进程管理
  • 1.进程的基本概念
  • 2.查看进程
  • 1)ps
  • 2)top
  • 3.进程状态
  • 1.僵尸进程
  • 2.托孤进程
  • 3.杀死进程
  • 四、重定向/管道
  • 1.重定向
  • 1)重定向符号:
  • 2)输出重定向 (覆盖,追加)
  • 3)输入重定向
  • 2.管道
  • 1)排序命令
  • 2)裁剪内容命令
  • 3)去重命令
  • 五、文件的查找
  • 1.which命令
  • 2.find命令
  • 1)按文件名:
  • 2)按文件大小:
  • 3)指定查找的目录深度:
  • 4)按时间找(atime,mtime,ctime):
  • 5)按文件属主、属组找:
  • 6)按文件类型:
  • 7)根据inode查找:
  • 8)按文件权限:
  • 9)总结
  • 六、文件打包和压缩
  • 1.tar命令
  • 2.打包,压缩
  • 3.解包,解压
  • 3.链接文件
  • 1)ln命令
  • 2)硬链接
  • 3)符号链接


一、守关将军

1.umask

umask:可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

  • 决定新建文件的权限

公式:file 666 & ~umask

  • 决定新建目录的权限

公式:file 777 & ~umask

umask越大,权限越低

1)改umask值

$ umask 0022		//命令修改的umask值只是短暂生效

2.拓展:

让umask更改永久生效——百度

二、软件包管理

1.安装方式

交给管家安装

apt-get

自己找资源,自己安装程序

dpkg

2.拓展:

安装音乐播放器

mplayer mpg123 mpg321

makefile

三、进程管理

1.进程的基本概念

算法: 解决問題的方法(不讨论细节,不计成本)

程序: 文件,静态 (用某种语言把算法诠释成实际的代码)

进程: 是程序运行的过程,动态,有生命周期(程序能跑起来,最少产生一个进程,是活的东西了)

一个程序可能对应多个进程

父进程:程序运行时产生的第一个进程
子进程:由父进程衍生fork()出来的进程
注意:如果父进程终止,子进程会被init接管

2.查看进程

1)ps

ps:显示当前系统中由该用户运行的进程列表

$ pstree //以树状图形式显示各个进程之间的关系
$ ps -ef | more //让显示的内容以页显示
  • a:显示一个终端所有的进程
  • u:显示进程的归属用户及内存使用情况
  • x:显示没有关联控制终端的进程
  • j:显示进程归属的进程组id、会话id、父进程id
  • f:以ascii形式显示出进程的层次关系

参数

含义

-axf

查看进程和进程组之间的关系

-axm

-m=more查看所有进程及没有关联控制终端的进程

-axj

查看所有进程及没有关联控制终端的进程且显示id

-ef

查看所有进程及其PID(进程号),系统时间,命令的详细目录,执行者等

-aux

除可显示-ef所有内容外,还可以显示CPU及内存占用率,进程状态

-axjf

查看进程和进程组之间的关系显示id号等

-w

以加宽方式显示,这样可以显示较多的信息

参数

含义

user

进程是哪个用户产生的

PPID

表示进程的父进程id

PID

进程ID号

%cpu

表示进程占用了cpu计算能力的百分比

%mem

表示进程占用了系统内存的百分比

vsz

进程使用的虚拟内存大小

rss

进程使用的物理内存大小

PGID

进程组ID号

SID

会话ID(作用:管理进程组)

TTY

表示进程关联的终端

TPGID

值为-1,表示进程为守护进程

STAT

表示进程当前状态

UID

启动进程的用户id

TIME

记录进程的运行时间

command

表示进程的层次关系

使用场景

关注进程本身:ps aux

  • user:进程是哪个用户产生的
  • pid:进程的身份证号码
  • %cpu:表示进程占用了cpu计算能力的百分比
  • %mem:表示进程占用了系统内存的百分比
  • vsz:进程使用的虚拟内存大小
  • rss:进程使用的物理内存大小
  • tty:表示进程关联的终端
  • stat:表示进程当前状态
  • start:表示进程的启动时间
  • time:记录进程的运行时间
  • command:表示进程执行的具体程序

关注进程间的关系:ps axjf

  • ppid:表示进程的父进程id
  • pid:进程的身份证号码
  • pgid:进程所在进程组的id
  • sid:进程所在会话的id
  • tty:表示进程关联的终端
  • tpgid:值为-1,表示进程为守护进程
  • stat:表示进程当前状态
  • uid:启动进程的用户id
  • time:记录进程的运行时间
  • command:表示进程的层次关系

2)top

top:动态查看、管理进程

3.进程状态

嵌入式软件升级困难 docker_linux

stat:进程状态 man ps (/STATE)

  • TASK_RUNNING:就绪/运行状态
  • TASK_INTERRUPTIBLE:可中断睡眠状态
  • TASK_UNINTERRUPTIBLE:不可中断睡眠状态
  • TASK_TRACED:调试态
  • TASK_STOPPED:暂停状态
  • EXIT_ZOMBIE:僵死状态
  • EXIT_DEAD:死亡态

1号进程(虚拟的)——目前看到的所有进程的祖先进程

内核本来是一个程序在跑,虚拟出来了1号进程后,内核就变成了库在后台候着

参数

含义

R

运行

S

可中断睡眠 sleep

D

不可中断睡眠

T

停止的进程

Z

僵尸进程

X

kill

1.僵尸进程

子进程退出后,父进程没有调用wait()函数处理身后事,子进程变成僵尸进程

2.托孤进程

父进程比子进程先退出,子进程变为孤儿进程,Linux系统会把子进程托孤给1号进程(init进程)

3.杀死进程

kill:输出特定的信号给指定PID(进程号)的进程,并根据该信号完成指定的行为(进程挂起,进程等待,进程终止等)

常用来终止进程

kill [选项] 进程号(PID)

四、重定向/管道

1.重定向

编号含义默认0标准输入键盘1标准输出终端(显示器)2标准出错终端

1)重定向符号:

>       标准输出重定向(以覆盖的方式) == 1>         
>>      标准追加输出 == 1>>
2>      错误输出(以覆盖的方式)
2>>     错误追加输出
&>      合并重定向(合并1和2号数据) 1>  2>&1
<       输入重定向

2)输出重定向 (覆盖,追加)

正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>

示例

ldy@ldy:~$ grep ldy /etc/passwd /etc/shadow 1> ~/output 2> ~/errorput

嵌入式软件升级困难 docker_重定向_02

3)输入重定向

< 输入重定向

2.管道

作用:实现进程间通信

用法

[command1] | [command2] | [command3] | ...

示例

$ head /etc/passwd | tail -1

1)排序命令

sort

用法

sort [选项] [文件]

选项

含义

-t

指定字段分隔符(默认分隔符空格)

-k

指定列

-n

按数字排序

-r

反向排序

-u

去掉重复行

示例

sort aa.txt                     //默认按首字符排序
sort -n aa.txt                  //按整个数字排序
sort -n -u aa.txt               //-u 去掉重复行
sort -n -u -r aa.txt            //-r  逆序输出

2)裁剪内容命令

cut:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

用法

cut [选项] [文件]

选项

含义

-d

指定分隔符(只能一个字符)

-f

截取第几列

-c

按字符截取

示例:

cut -c 2-5          //截取每行的2~5个字符
cut -c 2-           //截取每行的2到最后
cut -d: -f 1 /etc/passwd
head /etc/passwd | cut -d: -f 1-5
head /etc/passwd | cut -d: -f 1,5
head /etc/passwd | cut -c 10   
head /etc/passwd | cut -c 1-10  
head /etc/passwd | cut -c 1,10

3)去重命令

uniq:命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

用法

uniq [选项] [文件]

选项

含义

-d

仅显示重复出现的行列

-c

在每列旁边显示该行重复出现的次数

示例

uniq aa.txt                 //默认去掉连续重复行
uniq -d aa.txt              //显示重复行
uniq -d -c aa.txt           //-c 显示重复次数

五、文件的查找

1.which命令

作用:查找命令的绝对路径

which会在PATH变量所对应的目录里找,找到了就把绝对路径显示出来.

示例

which cat

2.find命令

语法:

find [options] [path...] [expression]

1)按文件名:

find ~/ -name "filename"
find ~/ -iname "filename"	   //-i忽略大小写
find ~/ -iname "file*"         //file开头

2)按文件大小:

find ~/ -size +5M					//大于5M
find ~/ -size 5M					//等于5M
find ~/ -size -5M					//5M以内

3)指定查找的目录深度:

-maxdepth levels
find ~/ -maxdepth 3 -a  -name "linux*"     //家目录下三层以内找linux开头的文件

4)按时间找(atime,mtime,ctime):

find ~/ -mtime +5             //修改时间超过5天
find ~/ -mtime 5              //修改时间等于5天
find ~/ -mtime -5             //修改时间5天以内

5)按文件属主、属组找:

find /home -user jack				//属主是jack的文件
find /home -group hr				//属组是hr组的文件
find /home -user jack -group hr
find /home -user jack -a -group hr  //-a = and
find /home -user jack -o -group hr
find /home -nouser              	//找无主(所有者不存在)
find /home -nogroup             	//找无组(所有组不存在)
find /home -nouser -o -nogroup 	    //查找无主文件

6)按文件类型:

find ~/ -type f						//f普通
find ~/ -type d						//d目录
find ~/ -type l						//l链接
find ~/ -type b						//b块设备
find ~/ -type c						//c字符设备
find ~/ -type s						//s套接字
find ~/ -type p						//p管道文件

7)根据inode查找:

find -inum n

find ~/ -inum 31064284

8)按文件权限:

find . -perm  644        //不带“-”是指必须满足规定权限
find . -perm -644		 //带"-"表示查找大于等于规定权限的文件
find . -perm -600
find /sbin -perm -4000		//包含set uid
find /sbin -perm -2000		//包含set gid
find /sbin -perm -1000		//包含sticky

9)总结

选项

用途

-name

按文件名查找

-iname

按文件名忽略大小写查找

-size

按文件大小查找

-maxdepth

指定目录深度查找

-mtime

按修改时间查找

-atime

按访问时间查找

-ctime

按创建时间查找

-user

属主查找

-group

属组查找

-nouser

找无主

-nogroup

找无组

-type

按文件类型查找

-inum

按inode号查找

-perm

按文件权限查找

六、文件打包和压缩

1.tar命令

作用:归档及压缩

参数

含义

-t

查看

-c

创建

-C

指定释放位置

-x

释放

-z

gz格式

-j

bz2格式

-J

xz格式

-f

文件名

-v

可视化

2.打包,压缩

tar -czf etc1.tar.gz /etc					//-z 调用gzip
tar -cjf etc2.tar.bz2 /etc					//-j 调用bzip2
tar -cJf etc3.tar.xz /etc					//-J 调用xz

3.解包,解压

tar -xzvf etc1.tar.gz				
tar -xvf etc1.tar.gz	 		//无需指定解压工具,tar会自动判断
tar -xvf etc2.tar.bz2  -C /tmp
tar xf etc1.tar.gz

3.链接文件

1)ln命令

用法

ln [source] [dirct]

2)硬链接

类似给这个文件起别名

ln hello.c harklink.c

知识点

  • 硬链接的文件类型与原文件类型相同
  • 硬链接的文件inode号与原文件相同
  • 硬链接的文件大小与原文件相同

注意不能给目录做硬链接,不能跨分区做

3)符号链接

类似windows桌面快捷方式

ln -s hello.c symlink.c

知识点

  • 符号链接的文件类型是 l
  • 符号链接的文件inode与原文件不同
  • 符号链接的文件大小远远小于原文件大小
  • 当原文件被删除符号链接文件将无法打开