目录
5. 项目版本管理工具:git/svn(服务器集中管理工具)
1. 权限
a.文件
- 可读:可以读出文件中的内容
- 可写:可以修改文件中的内容
- 可执行:表示这个文件具有可执行权限,但是是否真的能执行,取决于文件的内容
b.文件夹
- 可读:缺失可读,不能查看文件夹下的内容
- 可写:缺失可写,不能再文件夹下创建文件或者文件夹
- 可执行:缺失可执行,不能进入到本文件夹
c.umask
- a. txt() = 系统默认的权限(0777) & (~umask) 0777 & 0002 -> 0775===>0775
- b. umask[八进制的数字]
d.粘滞位
- chmod +/ -t [flodername]
- root 用户可以删除/文件所有者可以删除/目录所有者可以删除
2. Linux环境基础开发工具
- 包管理器-- yum (centos/redhat)
- 编辑器--vim
- 编译器--gcc/g++
- 调试器--gdb
- 项目版本管理工具--git
1.yum
- a.包管理器相当于应用商店的概念
- b.安装 yum install [需要安装的名称]
- c.查看当前系统中有哪些包已经安装成功了 yum list
- d. 卸载/移除 yum remove [需要移除的名称]
- e. rzsz
- rz:将win机器上的文件上传到linux机器
- sz:将linux机器上的文件下载到win机器
- xftp 上传下载 适用于文件或者文件夹
2.vim 编辑器
进入插入模式
- i:从光标的前一个位置进行插入
- I:从当前行的行首的前面进行插入
- A:从当前行的行尾进行插入
- a:从光标的后一个位置进行插入
- O:从当前行的上一行另外新起一个空行进行插入
- o:从当前行的上一行另外新起一个空行进行插入
移动
- h:(光标向左移动)
- j(光标向下一行移动)
- k(光标向上一行移动)
- l(光标向右移动)
- 移动到最后一行 shift +g ==> G
- 移动到第一行 gg
- 跳到下一个字的首部 w
- 跳到上一个字的首部 b
- 跳到当前字的结尾 e
- 上下左右箭头可以移动光标
删除单个字符
- x:删除当前光标所在的位置的字符
- X:删除当前光标所在位置的前一个字符
- [num] x :从当前光标所在位置的字符开始删除num个字符
- [num] X:从当前光标所在位置的前一个字符开始删除num个字符
删除某一行
- dd:删除光标所在行的数据
- [num] dd :从当前光标所在位置的行开始删除num行
复制行
- yy:复制光标所在的当前行数据
- [num] yy:从光标所在位置的当前行开始复制num行
- yw:从光标所在位置复制一个字的长度数据到缓冲区
- [num] yw:从光标所在位置复制num个字的长度数据到缓冲区
- p:针对复制的是行数据,向当前行的下面去粘贴
- P:针对复制的是行数据,向当前行的上面去粘贴
R:replace模式下,可以替换多个字符,按esc结束,返回到普通模式
撤销 u
f:更改
- cw:从当前光标删除一个字
- c[num]w:从当前光标删除num字
普通模式跳行
- gg:回到文本的头部
- G(shift+g):回到文本的最后一行
- [num]+G(shift+g):跳到任意行 gg=G
命令行模式下的操作
- :set nu : 设置行号
- :set nonu:取消行号
- :vs [filename] 同时打开多个文件 ctrl +ww 切换不同的文件
xshell 也有分屏的功能
搜索
- /[要搜索的字符串]--> 按 enter , n(next): 向下去搜索
- ?[要搜索的字符串] :向上去搜索
- :%s/要替换谁/替换成啥/g(区分是否替换行内所有出现的需要替换的单词),加上%表示替换全文,不加表示替换光标所在的当前行
vim
- 普通用户的:用户的家目录下修改或者创建 .vimrc文件
- 系统的:/etc/vimrc
- "inoremap<expr><CR> pumvisible()?"\<C-y>":"\<CR>"注释掉
- set tabstop=4
- set softtabstop=4
- set shiftwidth=4
总结:
- 操作模式:12种,常用3种:插入模式/普通模式/底行模式
- 模式切换:切入到普通模式ESC, iaoIAO(进入插入模式),进入底行模式:
- 底行模式下的操作:w/q/wq/q!
普通模式下的操作:
- 光标移动操作:hjkl/wb/ ctrl+f/b /gg/G
- 文本内容操作:yy/nyy/p/P/ dd/ndd/ x/dw/D
- 其他操作:u撤销/ctrl+返回/ gg=G
3. gcc/g++
-
a.预处理:展开所有代码
- 宏替换,文件展开,去注释
- gcc - E [源代码文件] -o [name].i
-
b.编译:将高级语言代码解释成为汇编代码
- 语法语义的检测,并且生成汇编代码
- gcc -S [name].i -o [name].s
-
c.汇编:将高级汇编代码解释成为机器指令
- 把汇编代码生成机器可识别指令
- gcc -C [name].s -o [name].o
-
d.链接: 将所有的代码文件以及库文件打包生成可执行程序
- 静态链接:-static 将所有的代码包括标准库的实现全部链接到可执行文件当中去;缺点:冗余性大,编译出来的文件特别大
- 动态链接:在可执行文件当中只保存所需要使用的函数的符号,符号表。优点:可执行文件小,并且各个模块处于解耦状态。代码的复用性高。
- gcc默认的链接方式:动态链接
- file:查看文件属性
- ldd:查看可执行文件的动态链接属性
- 编译器:将高级语言代码解释成为机器指令
4. gdb 调试器
-
a.基础 (事前)
- 在编译命令后面加 -g 选项,生成一个debug版本的可执行程序
- b(break): b[行号]:在“行号”这一行打一个断点
- b[filename]:[行号] 在filename 这个文件的“行号”这一行去打一个断点
- i b(info breakpoint):查看断点信息
- disable[断点编号]:使当前编号的断点失效
- enable[断点编号]:使当前编号的断点生效
- r(run):让程序跑起来
- n(next):逐过程的单步调试(F10)
- s(step):逐语句的单步调试(F11)
- p(print):打印变量的值
- i locals:打印当前作用域中的临时变量的值
- c(continue):继续执行
- display [变量名称]:跟踪变量的值
- bt:查看调用堆栈
- where:查看调用堆栈
- delete breakpoints [num]:删除某个断点
- delete breakpoints :删除所有的断点
-
b. 如果程序运行起来的时候 (事中)
- ps aux | grep [可执行程序名称]===>进程号
- gdb -p [进程号] ==gdb attach [进程号]
-
c. 如果进行奔溃了 (事后)
- gdb 可执行程序 coredump 文件
- bt p i locals
Example
- 加载可执行程序: gdb./main gdb->file./main
- 单步调试:start/step(进入函数)/next/until file:line/continue/list
- 断点调试:run /break/watch varname变量监控,变量发生变化就停下来/info berak/delete/print
- 调用栈:backtrace快速定位程序奔溃的位置
5. 项目版本管理工具:git/svn(服务器集中管理工具)
- git clone 远程仓库地址
- git add./* 添加本地修改
- git commit -m "备注信息"提交本地版本仓库管理
- git push origin master 将当前本地版本上传到远程主分支
项目管理工具
- 项目的自动化构建工具:make/makefile
- makefile: 文本文件,记录项目的构建流程和规则
- make:解释程序,解释执行makefile中记录的规则,完成项目的构建
- makefile的编写规则:
- 目标对象(要生成的文件名称):依赖对象(用于判断目标对象是否最新是否需要重新生成.c比可执行晚重新生成)
- tab 执行命令(生成这个目标对象所要执行的命令,但是有时候这个命令也不一定要生成目标对象)
- 预定义变量:$^/$@/$<(依赖对象当中的第一个)
- 声明伪对象:.PHONY:$(target) 伪对象:每次都需要重新生成
- make的解释执行规则:
- 1、只生成第一个目标对象,
- 2、会查看依赖对象是否存在,先生成依赖对象(依赖对象不存在则查找依赖对象的生成规则)/通过两方时间关系,判断目标对象是否需要重新生成。
进度条程序:
- \r :回车符,让光标移动到行首
- \n:换行符,让光标移动到下一行,还有一个功能是刷新标准输出的缓冲区(数据并没有立即写入文件,而是先写入到了缓冲区中,等到刷新缓冲区的时候才会将数据写入文件)。