概述:
Linux是一种自由和开放源码的类UNIX操作系统。它能运行主要的Unix工具软件、应用程序和网络协议,支持32位和64位硬件。该操作系统的内核由林纳斯·托瓦兹于1991年10月5日首次发布。
Linux最初是作为支持英特尔x86架构的个人计算机的一个自由操作系统,现可运行在服务器和其他大型平台之上,如大型计算机和超级计算机。Linux也广泛应用在嵌入式系统上,如手机(Mobile Phone)、平板电脑(Tablet)、路由器(Router)、电视(TV)和电子游戏机等。
Linux中的基本指令:
1.rm指令:rm是删除指令,但是在删除文件夹的时候要加-r(递归删除)选项,-f表示的是强制删除,要慎用。
2.cp和mv指令:我个人喜欢把这两个指令放在一起记忆,cp是拷贝,mv是移动,他们的使用规则都是在指令后+【选项】【源文件】【目标文件】,所以当然也支持文件夹的操作啦,只需要加-r选项就可以啦。
3.压缩和解压:
①tar:
tar有两种方式,分别是gzip(常用)和bzip2
gzip:
压缩: tar -zcvf /tmp/etc.tar.gz /etc-->将etc文件夹下的内容压缩到/tmp/目录下,并命名为etc.tar.gz
解压缩:tar -zxvf etc.tar.gz
②zip和unzip
4.find指令:使用方法:find【路径】 -name(要查找的名字) 注:这里的名字可以使用通配符(*)。
Linux权限:
linux下有两种用户分别是普通用户和超级用户(root)
有两种从普通用户切换到超级用户的方式:su和su -,但是这两个方式是有区别的,使用su指令进入root后的路径依然是home/当前用户,也就是说虽然拥有超级用户的权利但实际上并不是真正的超级用户,而使用su -指令进入超级用户后的路径是/root这个时候就是真正的超级用户了。
1.文件访问者的分类:文件所有者、文件所有者所在的用户组、其他
2.文件类型和访问权限:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
基本权限:
i.读(4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
通过chmod命令可以修改文件的权限。
文本编辑器vim:
普通模式、插入模式、底行模式
在普通模式下的一些重要命令:(七种类型:移删复替撤更跳)
1.$移动到行尾、^移动到行首、gg移动到文本的开头、G移动到文本的末尾
2.x删除光标位置的字符、dd删除整行
3.yy和p
4.r替换光标所在位置的字符、R替换光标所到之处的字符(sec停止)
5.u撤销、【ctrl+r】撤销的恢复
6.cw更改光标所在处到字尾处(不常用)
7.【ctrl+g】显示行号、【#G】跳到#行
Linux编译器中gcc/g++
首先要知道的是代码生成的四个阶段以及每个阶段所完成的任务:
1.预处理:宏替换和头文件的展开以及去掉注释
gcc -E test.c -o test.i
2.编译:检查语法并生成汇编代码
gcc -S test.i -o test.s
3.汇编:生成机器可识别的代码
gcc -c test.s -o test.o
4.链接:生成可执行文件(test)
gcc test.o -o test
当然,最常用的还是gcc test.c -o test直接将源代码生成可执行文件
注意:系统将大部分库函数的实现都放在libc.so.6的库文件中,在没有特别指明的情况下系统将在路径“user/lib”下查找就会链接到相应的库函数中,这也就是链接的作用,而库函数又分为静态库和动态库,这个我们后面再详细说明。
关于静态链接和动态链接
1.静态链接是指将所依赖的动态库链接到可执行程序中,所以会比较大,但是在不同的平台可以正常执行。
2.动态链接是指将所依赖的动态库中的函数加载到符号表中,在运行程序时动态链接动态库去执行动态库中的代码,所以在不同电脑上使用时必须将所依赖的动态库也给出否则找不到动态库是没法运行的。
3.编译器默认的链接方式是动态链接,如果想使用静态链接的话要在编译选项中加-static选项
关于Makefile:
使用make一键式编译,Makefile文件中的关键是根据依赖目标完成对生成目标的编译,但是写在最前面的依赖文件一旦被生成后面的就没用了(永远只为了生成第一个目标),一般想要通过一个makefile文件编译生成多个文件时就要用伪目标来确定,伪目标后的依赖文件则是要生成的文件,这样就解决了这个问题。
预定义变量:$^:所有的依赖对象
$@:所有的目标对象
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。