什么是工具呢?
工具本质也是指令。同理,我们也可以把ls,pwd…指令称之为工具
我们前面已经接触过yum了,实际上就是已经见过猪跑了
·在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
·但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
·软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.
·yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.
这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件。安装完毕之后可以通过拖拽的方式将文件上传过去.
yum list | prep lrzsz(这里的lrzsz可以换成我们要下载的软件名,甚至是软件名的一部分,都会列举出来)
结果:
lrzsz.x86_64 0.12.20-36.el7 @base
注意事项:
软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
“x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
“el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.
最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
注意事项:
关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
可以通过 ping 指令验证
ping www.baidu.com
通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装
sudo yum install lrzsz
yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装。
出现 “complete” 字样, 说明安装完成.
注意事项:
1、安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
2、yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.
3、如果 yum 报错, 请自行百度.
仍然是一条命令:
sudo yum remove lrzsz
安装指令: yum install
删除指令: yum remove
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows
vi/vim 是 Linux 系统内置的不可或缺的文本编辑命令。VIM 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,以及许多方面的强化,极大方便了程序的设计和编辑性
这里可不是说vim只有三种模式。vim一共有12种模式(six BASIC modes和six ADDITIONAL modes.),只不过我们最常用的只有三种:
1、命令模式(Normal mode),也叫做正常/普通/默认模式
2、插入模式(Insert mode)
3、末行模式(last line mode),也叫做底行模式
当我们vim进入文件内部的时候,默认就是命令模式,这个模式我们是不能够进行敲代码操作的,只能进行命令操作。由于linux环境不支持鼠标操作,我们可以通过键盘上下左右方向键控制光标移动,
当然,还有其他移动光标方法,我们会讲到的
• 光标定位
• shift + 4(也就是$):直接将光标移动到行的最右边
• shift + 6(也就是^):直接将光标移动到行的最左边
• shift + g(也就是G):直接将光标移动到最底部
• gg(也就是按两下g):直接将光标移动到最顶部
• n+shift + g(也就是行号+G):直接将光标移动到指定行,n表示行号
• nl :光标移到该行的第n个位置,如:5l,56l
• 光标移动
除了我们熟知的上下左右键可以移动光标以外,还有一种方法也可以移动光标,这种方法我们以后可能会用到:
这是年代较为久远的键盘,这上面可以看到hjkl按键有着对应的箭头
• h :向左
• j :向下
• k :向上
• l :向右
• 文件复制相关操作
前提:光标所在行
yy :复制该行(n+yy : 一次性复制光标开始到第n行,n过大就从光标复制到最后一行内容截止)
p :粘贴(n+p : 对复制的内容进行n次粘贴)
dd :删除光标所在行内容(n+dd : 对光标开始到下面的n行进行整体删除)
n+dd + p : 剪切
• 文件编辑相关操作
• 文本行大小写转换:shift + ~ (切换之后光标会自动走向下一个字符)
• shift + r (也就是R) : 批量化替换
• r : 替换光标所在的每一个字符(可以n+r)
• x :每按一次,删除光标所在位置的一个字符
• X :大写的X,每按一次,删除光标所在位置的“前面”一个字符(同样支持nx和nX,支持p粘贴)
• cw :更改光标所在处的字到字尾处。例如,「c3w」表示更改3个字,同时切换到插入模式
• 撤销操作
• u :撤销到上一步
ctrl + r : 撤销所撤销的操作(撤销的恢复,取消u操作)
采用命令模式的意义就是:提高编辑效率
windows下如果内容大到几百万行,光光靠一个鼠标是很难解决的,采用命令更加简单方便
插入模式就是我们正常的文本编辑模式,就是我们写代码用的模式,我们可以正常在文件中输入信息
想要切换到插入模式,在命令模式下按:i (a,o)等操作都可以,前提是命令模式下
从插入模式切换回命令模式,按esc即可
也是在命令模式的前提下,按==shift + ;(即:)==就可以切换到底行模式了
底行模式也是有许多功能的,我们现在学几个简单好玩的:
• 行号的显示与取消
set nu : 显示行号
set nonu :取消显示行号
• 写入与退出
在底行模式前提下
保存文件内容 :w
退出vim :q
保存并退出 :wq
强制操作 :!
强制保存文件内容 :w!
强制退出vim :q!
强制保存文件内容并退出vim :wq!
• 分屏
vs + 文件名
vs + 文件名就可以分出我们想要的屏幕了,并且可以进行多次分屏操作(但是屏幕可以有很多,光标只有一个,光标在哪一个屏幕上面,我们的操作就对应在该屏幕上面)
我们只需要按下:ctrl + ww
就可以将光标移动到另一个屏幕上,光标在哪一个屏幕上面,我们的操作就对应在该屏幕上面
• 在底行模式执行替换命令
格式:%s/需要替换的/替换后的/g
将全部的cout转换成print
替换前
替换后
步骤1:切换到root用户,登陆我们的root账号
步骤2:查看是否有/etc/sudoers
(一定有)
步骤3:通过vim打开sudoers
在大概100行左右找到
root ALL=(ALL) ALL
我们复制,在这一行下面粘贴,任何把root改成我们的普通用户
root ALL=(ALL) ALL
我们的用户名 ALL=(ALL) ALL
这样就行了
我们之前在windows下面使用vs的时候提到过release
和debug
两个版本。
其中,debug版本是给程序员用的,包含调试信息,程序员可以根据调试结果进行修改完善代码
而release版本是给用户用的,不包含调试信息
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
测试代码:
#include
#include
void Print(int sum)
{
long long timestamp = time(NULL);
printf("result = %d, timestamp: %lld\n", sum, timestamp);
}
int AddToVal(int from, int to)
{
int sum = 0;
for(int i = from; i < to; i++)
{
sum += i;
}
return sum;
}
int main()
{
int sum = AddToVal(0, 100);
printf("hello a\n");
printf("hello b\n");
printf("hello c\n");
printf("hello d\n");
printf("hello e\n");
printf("hello f\n");
Print(sum);
return 0;
}
这里看到release版本没有调试信息
通过观察发现debug和release版本不管在哪里都是有区别的
gdb的安装:
sudo yum install -y gdb
gdb调试时常用的选项:
gdb binFile退出: ctrl + d 或 quit 调试命令
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb
样例:
l :显示源代码(可以+数字来表示从多少行代码开始显示)
r:运行程序
b+行号 :打断点
info+b :查看断点
d + 断点编号 : 删除断点
r:运行调试
n:逐过程调试
s:逐语句调试
c :运行到下一个断点
bt :查看堆栈
p + 变量 :查看变量值
display :跟踪查看变量
undisplay + 变量编号:取消跟踪
finish :直接运行完函数