嵌入式软件开发 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.进程状态
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
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与原文件不同
- 符号链接的文件大小远远小于原文件大小
- 当原文件被删除符号链接文件将无法打开