linux学习笔记(2)

Ubuntu终端(terminal)

连接文件

Linux有两种连接文件:符号连接(软连接)和硬链接
符号连接类似Windows 系统里的快捷方式,如果删除了原有的文件,软连接出来的文件也就是快捷方式就会打不开
硬连接通过文件系统的inode连接来产生新的文件名,相当于备份了一个一模一样的文件唯一的区别只是名字不一样而已,连文件的ID都是一模一样的
inode相当于文件的ID,硬连接出来的文件的inode跟原文件的inode是一样的
我们可以通过键入ll -i来显示当前目录下的文件的索引编号(inode 号)

ln(Link files):为某一个文件在另外一个位置建立一个同步的链接的命令

ln:不添加参数默认为硬连接,格式如下:

ln "目标文件的文件名" "硬连接后生成新的文件的文件名"

假如我把原文件删除,只留下硬连接后的新文件,这个新文件依然可以打开,因为相当于给原文件备了个份
所以无论是原文件还是硬连接后的新文件,这两个实质上是一模一样的,仅仅名字不同,他们都指向同一个inode号,所以如果我更改了其中一个文件里的信息,那么另一个文件的信息会同步发生改变
注:系统不允许给目录创建硬链接且硬链接只有在同一个文件系统中才能创建(这跟inode有关系)
ln -s:对目标文件进行软连接操作,这里的-s中s就是symbol的简写,symbol也就是符号连接的意思
将原文件进行符号连接生成新文件后,新文件的inode不与原文件相同,这里的新文件类似于C语言里的指针,其指向着原文件,倘若原文件被删除,指针也就没有了指向,新文件也就打开不了了
注:在我们对文件进行软连接时,记得目标文件的文件名要输入绝对路径,这会给我们少了很多麻烦,比如现在对文件进行软连接时目标文件的文件名输入的是相对路径,那当我们要对软连接后的新文件进行复制时,复制后的新文件会出现指向不了原文件的问题存在,也就会导致复制后的新文件打不开的一系列问题

Vim编辑器

Vim编辑器是从vi编辑器发展出来的一个文本编辑器
Vim编辑器基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)
命令模式:一般模式,打开Vim编辑器后自动默认在此模式
我们可以通过键盘上的方向键进行光标的移动
当我们在命令模式下键入:
dd:删除当前光标所在行的所有内容
ndd:删除当前光标及以下n-1行的所有内容(即删除了n行内容)
yy:复制当前光标所在行的所有内容
nyy:复制当前光标及以下n-1行的所有内容(即复制了n行内容)
p:粘贴至当前光标的下一行
P:粘贴至当前光标的上一行
u:撤回,恢复至上一步
.:重复前一步操作
注:当我们要返回至命令模式即一般模式,只需按下键盘上的"Esc"键
输入模式:要想从命令模式切换到输入模式,需按下"i"或"a"等其他指令,这里只说当按下"a"的情况,当按下"a"后会让光标移向到当前光标所指向字符的后面,并进入输入模式,即可进行文本的编写
底线命令模式:我们只能从命令模式转切到底线命令模式,处在输入模式时,需先退出输入模式,之后键入":“或”/“或”?“即可进入底线命令模式,当然按下三个不同的符号他们的意义各不相同,这里只说最基本的操作也就是按下”:“后
:q:退出Vim编辑器
:q!:退出Vim编辑器且不保存文件
:w:保存文件
:x:退出Vim编辑器且保存文件,与键入”:wq"效果相同

GCC编译器

GCC(GNU Compiler Collection,GNU编译器套件)是一些主要编程语言的编译器的集合。它可编译的语言包含c、c++、objective-c、objective-c++、java等
gcc与g++分别是GNU的C与C++编译器,在执行gcc编译工作的时候,总共需要4步:
1、预处理:生成 .i 的文件[预处理器cpp]
2、编译:将预处理后的文件转换成汇编语言, 生成.s文件 [编译器egcs]
3、汇编:由汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
4、链接:连接目标代码,生成可执行程序 [链接器ld]
我们可以通过Vim编辑器编辑完.c文件后通过gcc命令对.c文件进行编译后生成linux系统下的.out可执行程序,比如我现在写好了一个文件名为main.c的文件,即可键入如下命令进行编译并生成名为a.out可执行文件:

gcc main.c

假如现在a.out文件在终端处在的工作路径下,我们可以通过键入如下命令来执行可执行文件:

./a.out

默认情况:通过gcc “输入文件的文件名”,输入文件最终会生成.out可执行文件,无论输入文件是.c、.i、.s还是.o文件,都将会生成链接后的可执行文件
-o:指定输出文件,在未加-o参数时候, gcc 默认编译出来的文件是a.out,我想让这个输出的文件的文件名由我来手动修改,可加上这个参数,它不仅能指定输出gcc默认编译后的.out可执行文件,还能指定输出.o、.s等文件,-o后面紧跟着输出文件的文件名,比如我要指定输出成一个名为mian的可执行文件:

gcc main.c -o main

亦可:

gcc -o main main.c

总之-o后面得紧跟着输出文件的文件名
-c:只执行预处理、编译和汇编步骤,不执行链接操作,当然如果输入文件不为.c文件,比如输出文件为.s文件,那么.s文件就只经过汇编步骤就生成了.o的输出文件,-c最终会生成.o(obj目标文件)文件,这个参数后面得紧跟着输入文件的文件名,因为编译器他得知道我要对哪个文件进行该操作,比如我要对main.c文件执行预处理、编译和汇编步骤,不执行链接操作,且输出文件的文件名叫main.o:

gcc -c main.c -o main.o

亦可:

gcc -o main.o -c main.c

总之-c后面得紧跟着输入文件的文件名
-S:只执行预处理和编译步骤,不执行汇编和链接操作,也就是他只把程序做为.s(汇编代码文件)文件,这个参数后面也是得紧跟着输入文件的文件名,操作与-c类似
-E:只执行预处理,不执行编译、汇编和链接操作,也就是他只把程序做为.i(预处理后生成的代码文件)文件,这个参数后面也是得紧跟着输入文件的文件名,操作与-c类似
总结一下:
gcc不带参数的话是四个步骤都执行最后生成.out可执行文件
带-c的话是只执行预处理、编译和汇编步骤,不执行链接操作
带-S的话是只执行预处理和编译步骤,不执行汇编和链接操作
带-E的话是只执行预处理步骤,不执行编译、汇编和链接操作
只要输入文件的执行步骤的数量小于输出文件的执行步骤的数量,那么就能由输入文件生成输出文件,也就是说比如输入文件.c的执行步骤数量是0,因为他没经过预处理、编译、汇编以及链接中的任何一个步骤,所以他可以生成.s或.o或.out文件,比如输出文件是.s文件,那么他执行步骤数量是2,也就是经过了预处理以及编译操作,0<2,所以输入文件能成功生成输出文件。同理,.s文件可以生成.o或.out文件,.o文件可以生成.out文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值