文章目录

  • linux下的常用工具
    • yum
    • lrzsz
    • vim
    • gcc 、g++
    • gdb
    • make,makefile
    • git
    • 琐碎的命令 或者 tips
    • 进度条程序

linux下的常用工具

yum

在linux下安装一个软件一般有几种方式,1,直接下载源码,但是这样我们需要在linux下自己编译,而且有可能有些依赖文件我们没有下载导致编译错误。2,我们下载软件包,有人已经将源码编译完成,压缩成了软件包,我们直接下载软件包即可。yum就是一款软件包管理器。就像华为手机的应用商店一样,在yum可以下载软件。
使用的方法就是指令下载,

sudo yum list | grep '软件名字' #过滤出要下载的软件
sudo yum install 软件名字 #下载软件,可以使用-y选项免交互
sudo yum remove 软件名字 # 卸载软件

可以看到软件的安装与卸载必须使用root用户的权限才能完成。而且要注意的是,yum的下载必须一个一个的下载,如果你下载一个软件下载到一半再去下载另外的软件,就会失败。

lrzsz

lrzsz是用于windows和linux之间的文件传输。可以之间拖拽,也可以使用指令

rz  #receive 从windows传文件到linux
sz  #send 从linux传文件到windows

vim

vim是linux下的编辑器,有些大佬甚至认为vim是世界上最好的编辑器。vim的操作全是命令,全是要记的,但是我们只要记住主要的就ok。首先我们需要进入vim,

在vim中我只介绍3种常用模式。普通模式,插入模式,命令行模式。我们第一次进入的就是普通模式,如果我们想输入内容,那么就需要转换成插入模式。转换方法多样,有i,a,o,不管大小写都是可以的,它们的区别就是光标的位置不同。具体可以大家下去实践。还有一点要注意的是,如果你想转换模式,只能先转换成普通模式,也就是说只能从普通模式装换成别的模式,再从别的模式转成普通模式。普通模式相当于一个中转站。别的模式转换成普通模式的方法就是esc键。普通模式转换成命令行模式的方法是shift+:,没错就是shift+冒号。
普通模式下的命令:
普通模式虽然不能想插入模式一样进行很自已的编辑,但是仍有很多快捷的命令。

  • 复制 && 删除

yy:复制光标所在行
n+yy:复制光标往下数n行的内容,(包括光标所在行共计n行)。
p:粘贴到光标所在行的下一行。
P:粘贴到光标所在行。
n+p或者n+P:粘贴n次。
dd:删除光标所在行。
n+dd:删除光标往下数n行的内容,(包括光标所在行共计n行)。

  • 光标定位

gg:光标定位到首行。
G:光标定位到尾行。
n+G:光标定位到第n行。
shift+4:光标定位到行尾。 锚点
shift+6:光标定位到行首。 锚点
w(word):光标向前移动一个单词的距离。
b(backword):向后移动一个单词的距离。
nb,nw :移动n个单词。

  • 别的操作

x or n+x:向后删除n个字符。
X or n+X:向前删除n个字符。
shift+~:将字符由大写变小写 or 由小写变大写。
h,j,k,l,左,下,上,右移动。(大佬都用这个。)
gg=G:代码自动对齐,(舒服啊这个功能)
u:撤销刚才的操作。
U or ctrl+r :反撤销。

当然,除了在普通模式下的命令,在命令行模式下,也有许多技巧。

  • 命令行模式下:
    输入 / 或者 ?,查找文本,按n或者N表示下一个。
    输入 set nu 表示调出行号。 set nonu,取消行号。
    输入 vs 文件名, 打开新文件,(多文件共页面)。
    多文件直接切换:ctrl+w, 然后 h or l
    或者直接 ctrl + 快速两次w。
  • 别的技巧 :

vim test.c +4 : #将光标直接定位到第四行。
!vim : 使用上一次的vim命令,(实际上大部分命令都可以使用感叹号+命令)
如果你的vim正在使用就退出而没有保存或者发生别的异常,那么系统可能会产生一个隐藏交换文件,你可以使用ls -a拿到交换文件,然后将其删除即可。

  • vim的配置

你可能会说vim不够人性化,不能进行补全或者自动对齐等,但是这也正是linux自由的体现!所有的功能都由你自己来配置。你只需再你的用户的工作目录下找到 .vimrc(root用户的在/etc/vimrc)这个隐藏文件,然后进行配置就行。具体的配置大家可以自行百度,找到适合自己的配置。最后的最后,贴上一个
vim从入门到精通。

gcc 、g++

gcc是linux下的c语言编译器。用gcc编译c程序也很简单,比如我们有一个test.c的源文件。

gcc test.c -o test

选项-o后面紧跟一个新的文件名,代表我们要将gcc生成的程序写入test这个文件中。比起VS编译器,gcc还可以帮助我们观察到c语言的翻译过程,即预处理,编译,汇编过程。

gcc -E test.c -o test.i # 执行到预处理
gcc -S test.i -o test.s # 执行到编译
gcc -c test.s -o test.o # 执行到汇编
  • 动,静态库

从编译到可执行程序,还有最后一步要走,就是链接。将各种库与源文件链接起来。通常的链接方式有两种,动态链接和静态链接,而它们对应的库也叫做动态库或者静态库。那么,这两者有什么区别呢?库名的后缀不同,静态库后缀是.a,动态库是.so。你的文件在引入动态库时,只会给个链接,而引入静态库时会将静态库中所有的内容copy一份。这就会导致引入静态库生成的代码大小远大于引入动态库生成的代码。下面给大家演示一下,

#linux下查看文件或者库的命令
file test  # 查看文件属性
ldd test   # 查看跟文件相关的库


可以看到这些库后缀都是.so,实际上linux的c程序默认引入的库都是动态库。我们可以使用选项-static引入静态库。

我们可以明显的看到它们的大小相差很大。
g++是编译C++的编译器,用法跟gcc一样,只是把上面命令的gcc改成g++即可。
当然,gcc/g++还有大量的选项,比如-o0,-o1,-o2,-o3,表示编译器对程序的优化程度,-o0表示不优化,数字越大优化程度越大。-w表示编译的时候不生成警告信息,可以让编译器对语法的检查松一些,而-Wall则生成所有的警告信息。

gdb

gdb是linux下的调试器。我们只需要gdb+需要调试的文件名就可以进入gdb,但可能会出现下面这个问题,

gdb提示你,没有发现调试符号。实际上我们的可执行程序分两个版本,dubug版本和release版本,debug版本的程序会在里面加上调试信息用来调试,而linux默认生成release的程序,而想要加上调试信息则需要在编译时加上-g选项。

gcc -g test.c -o test-d


你会发现dubug版本比release版本的程序大一点,没错,这就是调试信息。如果你还不确定,那么你可以用readelf命令去检查debug的信息。

test里面没有debug信息。gdb既然是linux下的程序,自然需要命令来操作。
q(quit):退出gdb。
list / list + 行号:列举出行号附近的所有行。按回车,会显示剩下的代码。可以缩写成l。

  • 断点相关

break+n(b + n):在第n行打上断点。
info b :查看所有断点。
delete breakpoint (d+编号):删除断点。(断点都会带上编号,删除要带上编号,否则就是删除所有断点。)
disable+编号:禁用断点。
enable+编号:启用断点。

  • 程序运行

run(r):运行程序到断点处,相当于VS下的F5,如果调试中途再run,那么从头开始调试。
start:运行程序,相当于在main函数处打断点+run。
step(s):逐语句,相当于VS下的F11.
next(n):逐过程,相当于VS下的F10.
continue(c):从一个断点调到另一个断点。
until+n:程序直接从当前行运行到第n行(如果第n行没有代码,那么往下寻找一行没有执行的代码停止)。
finish(f):跑完当前的函数然后停下来。
backtrace(bt):打开函数栈调用。

  • 监视变量
    p+变量:打印变量的值。
    display+变量/&变量:监视变量的值或者地址。
    undisplay+变量的编号:取消对应编号的变量监视。
    watch+变量:监视变量,如果变量发生变化则停下来。
    set var i = 100 :设置变量为特定的值。(没什么用)。

make,makefile

make是一条命令,而Makefile(makefile)是一个文件。这两者构成了我们的项目自动化构建工具。也许你对项目的自动化构建工具不太熟悉,因为我们平时使用的都是集成环境,比如在VS下创建项目,VS会自动帮助我们理清楚每个文件之间的关系,然后生成程序。而linux不行,你需要自己整合多个文件。下面是一个简单的Makefile文件:

想一想,生成一个程序需要什么呢?Makefile为我们总结出两点:依赖关系,和依赖方法。我们想要一个test的可执行文件,我们需要依赖test.c这个源文件。这里的test我们称之为目标文件,而后面的文件称之为依赖文件。而test.c怎样生成test呢?没错,第二行告诉了我们方法。**注意的是,依赖方法开头不是几个空格,是键盘上的tab键。**上面是一个最简单的Makefile,下面的例子可以让你更清晰Makefile的工作原理。

make后,它会首先去观察第一个依赖关系,发现没有test.o文件,于是它会向下寻找是否有目标文件为test.o的依赖关系,注意的是,如果没找到,那么Makefile就不会往下执行了。找到第三行,然后发现没有test.s文件,然后继续找,知道找到test.c,是可以执行的,然后执行最后一行的依赖关系,再依次向上执行。

在VS下,如果你有印象的话,有一个文件清理,那么在Makefile中,我们也可以实现文件的清理。

这里的clean是伪目标。什么意思呢?首先,clean没有依赖文件。其次,clean不会被变成一个文件。也就是说,当前目录下不会出现一个名字是clean的文件。.PHYON后面的目标有两个意思:1,常常是伪目标文件。2,目标总是被执行。这是什么意思呢?没错,.PHYON后面也可以跟我们的普通目标文件。

什么叫做目标总是被执行呢?如果你的test已经是最新的,你再运行make,那么你会收到提示:目标已经最新。但是clean这个目标可以总是被执行:

可以看到,make执行了一次后,就提示最新。但是make clean无论多少次都会被执行。

  • 多文件下的Makefile

Makefile的强大之处也体现在多文件上。

如图,上面是一个简单的多文件项目。Add函数的声明在Add.h头文件中,实现在Add.c文件中,而test.c则调用了Add函数。而我们的Makefile编写如下:

只是依赖文件变多了,其他的规则也是不变。但是这又抛出一个问题:如果依赖文件有几万个,那么我难道要一个一个写上去吗?no,不需要。下面看Makefile的2.0版本。

其中的$ ^表示所有的依赖文件,$@表示目标文件。所以第二行代码实际上就是
gcc test.o Add.o -o test。实际上2.0的Makefile还仍有优化空间,如果你对代码的复用信手拈来,那么你对第3,4行和第5,6行这样的代码会很敏感:完全相同的形式,可以复用。下面是3.0版本的Makefile。

其中的两个%表示将该目录下的所有.c文件生成.o文件,而 $<表示第一个依赖文件,也就是.c文件。下面的*是通配符,没错,通配符也可以在Makefile中使用,表示所有以.o结束的文件。实际上,上面的代码只是为了演示一下Makefile的功能,Makefile实际上一步到位。

所有的语法上面的版本已经讲过,不做讲解。Makefile还可以定义变量。下面的究极版本:

cc=test
files=test.c Add.c
$(cc)=$(files)gcc $^ -o $@
.PHYON:clean
clean:rm -rf $(cc)

这个版本的Makefile没有用到任何的文件名字,好处是如果下面的执行出问题,只需要改动上面的变量即可,这有点像c中的typedef。上面的$符号表示取出变量所代表的值。

git

git是一款分布式版本控制工具。这篇博客只讲几个命令。

git clone #克隆仓库到本地
git add   #预添加代码
git commit -m “message” #将代码添加到本地仓库,选项一定要带
git push  # 将代码推送到远程仓库

琐碎的命令 或者 tips

ctrl+r:可以搜索曾经使用过的指令。
在gdb或者类似gdb的交互界面,如果打错命令,无法删除,按住ctrl再删除。
小技巧:> file :清空file文件,相当于将空白内容写入file。

进度条程序

先看一个小问题:

int main(){printf("hello world");sleep(5);return 0;
}

上面的代码会发生什么现象呢?程序先睡5秒,然后再输出hello world。这与我们的设想相反,难道程序不是从上往下执行的吗?答案是,程序就是从上往下执行的,但是printf输出到的是缓冲区,而我们想在屏幕上看见输出,需要刷新缓冲区。常见的刷新方法有换行符号,程序结束,强制刷新。由于上面三者都不具备,所有程序先printf写到缓冲区,然后睡5秒,最后程序结束刷新缓冲区。就是我们看到的现象。
问题2:
换行和回车有什么区别?
换行是直接换到下一行,不会回到开始的位置。
回车是回到本行开始的位置。
所有我们c中的换行实际上是换行+回车。
最后贴上一个有意思的进度条程序。
运行的结果:
代码:

(全文完)

Linux-常用工具相关推荐

  1. linux常用工具命令

    linux常用工具命令 @(LINUX)[linux] linux常用工具命令 一dmidecode 1硬件平台 2内存 3cpu 二1sar 三iostat 1iostat -xk 1 四vmsta ...

  2. 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...

  3. Linux常用基础指令、Linux常用工具(软件包)使用带图详解

    目录 目录相关指令: 文件相关指令: 压缩解压缩指令: 匹配查找指令: 权限相关指令: Linux常用工具: 指令使用规则:指令 [该指令的详细操作选项] [操作对象(通常有路径)],后面两可不加. ...

  4. Linux常用工具大全

    Linux常用工具: yum:应用商店,管理安装,连接服务器,软件包管理工具 软件安装方法: 1.手动源码安装 2.使用工具安装 Yum list:查看可以安装什么 yum list|grep gcc ...

  5. Linux 常用工具(上)

    Linux常用工具 一.软件包管理工具 yum 二.编辑器 vim (一)定义 (二)模式分类 (三)模式切换 (四)不同模式下的常见操作 三.编译器 gcc\g++ (一)编译过程 (二)指令 四. ...

  6. linux常用工具及命令

    1.windows复制文件到linux可以使用工具winscp工具 2.建立软连接命令(将/software/run.log的文件指向/usr/local/logs/中): cd /usr/local ...

  7. Linux常用工具的使用

    推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 写这篇文章的主要目的是帮助大家理解以下几个问题: (1)掌握Linux RPM软件包管理器的使用: (2)掌握vi文本编辑器的使用. ...

  8. linux常用工具awk,linux中awk工具

    awk sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件.awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义, ...

  9. Linux常用工具之vim

    引言 如同windows装载记事本和画图等软件工具一样,Liunx操作系统下也具有功能类似的软件工具~ Linux编辑器-vim使用 Linux操作系统下常用的编辑器之一,类似的工具还有nano等~ ...

  10. Linux常用工具介绍

    Linux工具介绍

最新文章

  1. qt mysql now()_Qt + mysql 運用 (項目一)
  2. 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接
  3. javac、jar使用实录
  4. 安装phpcms时出现Warning: ob_start(): output handler \'ob_gzhandler\' conflicts with \'zlib
  5. Linux学习:文件描述符相关函数
  6. stl vector 函数_vector :: at()函数以及C ++ STL中的示例
  7. 【python】sys.stdout输出不换行
  8. 搜索引擎下拉食云速捷详细_详细解析关键词与搜索引擎之间的霸屏关系
  9. Test for open live write
  10. C++_CopyConstructor(副本构造器 防止指针重复释放)
  11. Linux里sra文件是什么,生信软件 | Sratools (操作SRA文件)
  12. 深入浅出统计学-第三章
  13. 2021 泰迪杯 A 题思路
  14. Cadence Allegro贴片封装
  15. 微信修改步数 Android,安卓微信怎么改步数
  16. windows命令查看无线网密码
  17. 新媒体广告摘录 形泰传媒 尹语堂®
  18. R语言伴随矩阵的计算
  19. web表格制作--11.27
  20. 读余华《活着》,你好,我叫福贵

热门文章

  1. 学计算机用苹果本,新手小白用苹果电脑搞科研,学会这些才不至于尴尬!
  2. 【自编教材】16万8千字的HTML+CSS基础 适合从0到1-可收藏
  3. 第十三届“华中杯”大学生数学建模挑战赛题目 A 题 马赛克瓷砖选色问题
  4. 列出5个python标准库_5个常用 Python 标准库
  5. jxls中自定义函数的使用
  6. VS社区版许可证过期更新
  7. Windows下测试算法在FDDB数据库的性能
  8. Nvidia 驱动的安装和卸载(Ubuntu20.04)
  9. 将EXCEL自定义时间格式转换为时间格式
  10. 拼多多sdk php,标签PHP拼多多SDK文章 - 零分博客 - 关注互联网且乱扯淡互联网的个人博客...