shell:命令行解释器统称:
常用的命令行解释器叫做bash
shell做什么事情?
1.将命令呈递给操作系统内核
2.将操作系统内核的结果展示给用户
权限:
管理员用户:root用户 其他都是:普通用户
1.linux操作系统当中权限分为三种,可读权限(r),可写权限(w),可执行权限(x);
2.linux操作系统当中一个文件或者一个文件夹的权限会针对三类用户
2.1当前文件的所属者 2.2当前所属组用户 2.3其他用户
- rw- rw- r–//第一个为文件类型,此文件可以被当前文件所属者可读可写,可以被所属组用户可读可写,被其他用户可读,-横杠代表不具备某一个权限
修改权限:
1.当前用户u(user),组内用户g(group),其他用户o(other)
2.
读权限
chmod u+r/u-r/g+r/g-r/o+r/o-r[filename]
写权限
chmod u+w/u-w/g+w/g-w/o+w/o-w[filename]
可执行权限
chmod u+x/u-x/g+x/g-x/o+x/o-x[filename]
3.数字的方式
chmod [数字] [filename]
rwx权限对普通文件的影响
r : 如果用户没有r权限,则无法查看文件内容
w:如果用户没有w权限,则无法向文件中写内容
x:如果没有x权限,则无法执行;如果有x权限,则不一定执行成功,取决于文件内容
编译出来的C或者C++要执行的时候,一定需要可执行权限
rwx对于文件夹的影响
r:如果用户没有r权限,则无法查看文件夹下的内容
w:如果用户没有w权限,则无法在文件夹下创建新的文件
x:如果没有一个x权限,则对应的用户无法进入到该文件夹下,没办法进行cd
软件安装
1.yum—包管理器
安装软件,卸载软件
yum的N板斧 —切换到root用户
1.yum install [软件名称]
2.yum remove[软件名称]
3.查看当前都有那些软件 yum list
yum list | grep [xxx] // 通过“ | ”管道过滤出xxx软件
yum install -y lrzsz
rz
可以将win本地文件上传到linux
sz[filename]
可以将linux的文件下发到win本地
注意:传递文件夹,先打包成安装包,上传后解压;
2.vim编辑器,用来编译文本
vim [filename]
vim的三种模式:
普通模式( NORMAL )
插入模式(INSERT)-【Esc】–》普通模式
底行模式(COMMAND )
大写 I 从光标所在行首插入,大写A从光标所在行尾插入,大写O在光标上一行另起一行插入,小写o从光标所在行的下一行另起一行插入,小写a将光标向后移动一位进行插入;
光标的移动:
普通模式下:
1.上下左右键
2.h(光标向左移动)j(光标向下移动)k(光标向上移动)l(光标向右移动)
插入模式:
上下左右键;
vim七字箴言:移 删 复 替 撤 更 跳;
移动:
gg:回到文本的首部;
G:移动到当前文本的尾部首行头部位置;
调整代码格式 gg = G
删除:
删除单个字符
x:删除光标当前所在字符;
[num]x:删除光标所在位置的后面(包括自己在内)的num个字符
X:删除光标前的一个字符;
[num]X:删除光标所在位置前面(不包括自己)的num个字符;
删除行:
dd:删除光标所在行的数据;
[num]dd:从光标所在行开始删除num行数据;
复制:
行数据
yy:复制光标所在行的数据
[num]yy:从光标所在行开始,复制num行数据
粘贴
p:向光标下一行粘贴
P:向光标上一行粘贴
替换:
r:替换光标所在字符
R:替换多个字符
先进入replace模式,然后替换光标所在字符,按Esc退出
撤销:
u:撤销上一次的动作;
ctrl + r:反撤销;
更改:
cw:更改光标当前所在字(当前单词),并且会进入到插入模式;
跳:
[num]G:跳跃到具体行
vim的底行模式命令
:set nu ===> 设置行号
:set nonu ===>取消行号
:%s/[待替换字符串]/[替换成为的字符串]/g ===> 全文替换**%**(全文)
:s/[待替换的字符串]/[替换成为的字符串]/g ===>替换光标当前行所有的目标字符串
:[num1,num2]s/[待替换的字符串]/[替换的字符串]/g ===>替换num1到num2当中的deststr成为srcstr
:vs[filename]
ctrl + ww 光标在不同的分页当中来回切换
3.gcc/g++:编译器
gcc —>编译C代码
g++ —>编译C++代码
预处理,编译,汇编,链接 esc —> iso
预处理:展开头文件,宏替换,去注释,条件编译
gcc/g++ -E[源码文件] -o [预处理之后的文件名称].i
编译:语法语义的检测,生成了汇编代码
gcc/g++ -S[源码文件] -o [编译之后的文件名称].s
汇编:将汇编代码翻译为机器代码
gcc/g++ -C[源码文件] -o [汇编完成之后的文件名称].o
链接:将生成程序需要的所有.o文件链接在一起,生成可执行程序;
gcc/g++ [xxx].o -o [可执行程序]
动态链接:链接方式默认就是动态链接
静态链接:需要增加命令行参数 -static
gcc/g++ [源码文件] -o [生成可执行可执行程序名称]
4.gdb
1.前提:编译的时候,需要执行 -g命令行参数,生成可执行程序为debug版本;(因为默认为release)
2.gdb [可执行程序]
r(run):让代码跑起来
l(list):查看源码文件
b(breakpoint):设置断点 eg:b [行号]
i(info) b(breakpoints):查看断点信息
disable [断点序号]:使当前断点不生效
enable[断点序号]:使当前断点生效
delete[断点序号]:删除当前断点
逐过程:n(next):对标到vs F10
逐语句:s(step):对标到vs F11
c(continue):继续执行:对标到vs F5
p(print):打印变量的值,可以打印临时变量,也可以打印结构体变量,也可以打印类的实例化对象,也可以C++当中的变量
q(quit):退出调试
3.程序崩溃会产生coredump文件
coredump文件叫做核心转储文件,保存的是,程序崩溃之前正在做的事情,以及各个变量之间的内容;
gdb[可执行程序][coredump文件]
bt:查看调用堆栈;
常见错误
段错误:11号信号—》访问内存越界,访问空指针
double free:6号信号 --》是否重复释放
5.make & makefile
5.1make是自动化解释工具,解释makefile文件内容;
5.2makefile编写原则
目标对象:想要生成的目标对象
依赖对象:生成目标对象的时候依赖那些文件,这些文件被称之为依赖对象
编译命令:使用依赖对象生成目标对象的方法
5.3肩负的使命就是生成可执行程序
5.4make解释makefile的规则
1.对比目标对象和依赖对象最后一次修改时间
1.1如果目标对象最后一次的修改时间距离现在比较近,则认为目标对象比较新,不需要重新生成目标对象
1.2反之,则重新生成
2.永远只为了生成第一个目标对象
可以定义伪目标:可执行程序A 可执行程序B
3.如果依赖对象不存在,则会在当前的makefile的编写规则当中查找生成依赖对象的方法;
预定义变量
$^:所有依赖对象
$@:目标对象
$<:第一个依赖对象
makefile进行清理
clean:rm [中间文件] ;
6.git版本管理工具—管理代码仓库
1.git的N板斧
git clone [url]
提交代码到远程仓库
1.git标记
git add[filename / foldername]
2.提交到本地仓库
git commit -m “本次提交的日志信息”
3.推送到远端仓库
git push origin master
删除远端仓库的内容
git rm [filename] —>删除了本地仓库
git commit -m “本次提交的日志信息”–>删除本地仓库的文件
git push origin master —>提交到远端仓库
git pull:从远端将内容拉到本地linux机仓库当中;