Section1
- shell :命令解释器,解析命令,执行同名的解析文件;内嵌在终端中
- cat /etc/shells:查看支持的shell
- echo $SHELL:查看当前正在使用的shell
- sudo su:切换账户(默认不写切换root)
- history:历史命令
- ctrl+a/ctrl+e:行首、行尾
- ctrl+u:清除命令
类Unix系统目录
- date和./date:区别
- date是交个命令解释器解析后执行的
- ./date是自己直接执行命令文件
- bin:二进制mingl
- boot:开机加载的程序
- dev:设备文件(所见皆文件)
- etc:用户配置信息
- 比如passwd中的信息:用户名,用户id,组id,家目录地址,所使用的shell
- home:用户目录,如:python
- 对于root来说家目录是/root根目录
- 对于其他用户家目录在/home下
- media/mnt:挂载磁盘的,可以手动指定mnt,默认是media
- opt/proc:进程相关
- usr(unix software resource):用户的,比如c的头文件
目录和文件操作(温习)
- mkdir
- touch
- ~
-
- -a 隐藏文件
- -l 查看目录
- -a 人性化显示大小
- 权限
-
文件类型:
-
分别是:所有者,所有组,其他人的权限
-
which date:查看date命令的位置
-
vi .bashrc 中设置命令行路径提示取消 加上:PS1=$
-
ls -R :递归每一层
-
ll :详细显示文件夹
-
rm -r/-R
-
rm -f:强制删除,不提示
-
cp:拷贝目录的时候要加 -a(会把文件的创建时间等信息一起拷贝) 或者-r
-
cat /tac(倒着显示);
-
- more、less、head(显示前几行),tail(显示后几行)
- tree:这个命令不是自带的,是要安装的
软连接和硬链接
-
软连接:相当于快捷方式
-
硬链接(普通文件):
- 对任意的硬链接修改,其他的硬链接都会同步修改
- 原理:文件是有一个同一的inode,删除的时候硬链接计数会-1
创建修改用户和用户组
- whoami
- sudo -su
- chmod:rwx 421 自己 组 他人
- 添加用户
- 中间的两个数字分别是用户编号,用户组编号(给计算机看的):
- 修改文件所有者:sudo chown 新用户名 待修改的文件
- 新用户可以到/home文件夹下查看
- 创建用户组
- 修改文件的用户组:chgrp
- 一次性修改文件用户和用户组
- 删除用户 和 删除 用户组
find命令
- 查找某文件类型的文件
-按类型查找- 按名字查找
- 按大小查找
- man find:查找find命令的手册
- 块的大小:512b
- atime、mtime、ctime
- 按名字查找
- 命令分析
grep和xargs 找文件内容(find是找文件)
- grep
- ps -aux
- find 的结果集交个管道grep没有用,可以用xargs,原因是结果集太大了。但是xargs可以把结果集分片;
- xargs 默认吧结果集按照“ ”空格拆分,如果文件名本身带了空格会出错,可以用print0处理
软件包安装
在线安装
- 命令解释:sudo apt-get install tree:(安装工具apt-get,理解就是一个安装源;同理pip是python相关软件的安装源)
- 更新 :sudo apt-get update
- 软件是来自于ubuntu的服务器,比如14.04版本是14年的,支持5年,那么19年前可以在ubuntu的服务器上下载到所有的软件
- 卸载:sudo apt-get remove
离线安装
- centos属于redhat;ubuntu属于debian所有安装包是以.deb结尾 -
- 还有源码安装
压缩命令gzip和bzip2(本身命令只能针对单个文件压缩,还不支持文件夹类型,所以用tar)
-
tar -zcvf
- z :gzip压缩
- c:创建
- f:指定文件名
- v:显示进度
-
tar -jcvf
- z :bzip2压缩
-
tar -zxvf :x表示解压
-
tar -jxvf
rar压缩和zip压缩
- 要安装rar,unrar
其他命令
- who:带进程
- whoami
- jobs:查看当前用户的作业(ps查的是整个系统)
- echo :回显到屏幕
- echo $SHELL :“ $ ”表示取出环境变量,取出环境变量SHELL,显示到屏幕
- env:查看所有环境变量
- top:文字版进程管理器
- sudo passwd 用户名 :设置密码
- su 用户名 :切换用户
- man man(手册)
- alias :比如ls被alias起过别名,痴心结果和直接执行文件./ls不一样(同样还有ll)
- umask:指定掩码:操作系统会自动去除执行权限
- 快捷键:ctrl+alt+t/ctrl+shift+t:呼出终端
vim
- 三种模式:
- 命令
- 文本
- 末行
删除
复制粘贴
查找替换
其他
配置思路
gcc编译4步骤
动态库和静态库理论比对
静态库制作
静态库使用及头文件对应
- 报警分析:
- 有行号表名是编译阶段出问题(逐行扫描);
- collect(链接器):表名是链接问题
- 如果函数使用前没有看见定义,可以看见声明;如果声明和定义都没有,编译器会默认隐式声明,但是声明只针对int类型
- 所以要为静态库制作头文件,然后要在原码中导入头文件
动态库制作-生成与位置无关代码
- 静态的库函数,就是相当于写在代码里,都写死了地址(相对于main函数的),随时调用,比如下面的sub
- -fPIC:生成位置无关的地址(相对于main函数的地址)
- LD :链接器
- 动态链接器需要的动态库路径写入环境变量,但是命令下export的环境变量是属于进程的,当终端的进程关闭在打开,读取的是shell里面的默认的值,所以应该写进shell的配置文件.bashrc里。写完后要运行一下:如下图:
- 错误出现的原因和方法
- 链接器:完成数据合并,地址回填(根据main函数的实际地址回填内部函数的地址)
- 动态链接器:加载动态库(就是上面的@plt,等待动态时候获得真正的地址)
- 动态库加载查询
数据段合并
- 磁盘最新单位512kb
- 内存最小单位4kb
- 内存分区
gdb调试
-
基本指令
-
其他指令
-
需要注意的是:正常运行的文件,和调试用的文件,内容不一样,调试用的文件编译的时候加了选项 -g ,文件里有调试表;
-
makefile管理
-
相当于shell脚本,把命令放在脚本里执行;
-
makefile:每次编译都只会处理源文件被修改的部分,其他没有修改的不动,只是最后统一做一下链接,然后生成可执行程序;当中省去拉大量的编译时间提高了效率;原理是看的修改时间(检查目标是否需要更新)
-
其中* 和 %的区别是 都是通配符,但是%出现在同一行必须一样(有锁定的作用,前一个%提取的字符,后一个必须一样)
-
两个重要的函数:wildcard,patsubst
-
makefile脚本文件
-
Makefile 项目管理总结
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181102124602732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1a
291NjMzNTQ5MA==,size_16,color_FFFFFF,t_70)
系统编程
- 印象
Section2
open函数(系统函数)
- 区别fopen(库函数),open是系统函数
- 返回一个整数的文件描述符
-
read和write
-
copy操作
-
Makefile重申 其中* 和 %的区别是 都是通配符,但是%出现在同一行必须一样(有锁定的作用,前一个%提取的字符,后一个必须一样)
-
系统调用和库函数比较—预读入缓输出
-
文件描述符
-
阻塞和非阻塞
- 在读取设备文件和 网络文件的时候,不应该采用轮询的模式,而应该采用epoll这种响应的模式
- 在读取设备文件和 网络文件的时候,不应该采用轮询的模式,而应该采用epoll这种响应的模式
-
fcntl改文件属性