Linux与C基础

[1] >> 提问:什么是虚拟内存?
<>-->>虚拟内存是一种内存管理技术,让程序视作认为若干零碎的内存块为连续的内存块

[2] >> 提问:常用shell命令
<>-->>命令 [option] ... [file] ... [解释:1[]表示可写可不写 2option表示功能 3...表示可以多个 4file表示目录 5<>表示必选选]
<>-->>ls [-l -R -i] [path]
<>-->>pwd
<>-->>date [date -s 10:00:00]
<>-->>cd
<>-->>uname -a [-a,--all 输出所有信息,内核名称,网络节点的主机名,内核发型号,架构,操作系统名称] 
<>-->>cp   [cp -R/-r file/ ../] [cp text1.c text2.c ../] [r = recursive 递归]
<>-->>mv  [rm -R file/]
-->>cat [cat -n --number 对输出的所有行编号] 
<>-->>head [head -10]
<>-->>tail [tail -10]
<>-->>mkdir  [mkdir -p d2/d22]
<>-->>[useradd user1]  [cat /ect/passwd/] [userdel  user1] 
<>-->>[groupadd group1]  [cat  /etc/group]  [groupdel group1]
<>-->>chmod 777 text.c [ 所有者权限--同组权限--所有的人权限 ]
<>-->>命令一行写不完 --> 行尾+\
<>-->>shutdown  
[
	用法: shutdown [OPTION]... 时间 [信息]
	使系统关闭。
	Options:
	  -r                          reboot after shutdown
	  -h                          halt(停止) or power off(关闭电源) after shutdown
} 
<>-->>whoami  [查看当前操作用户]
<>-->>hostname 
<>-->>su <用户名>
<>-->>history
<>-->>? [代笔一个字符] [ls -text?.c]
<>-->>[] [ls text[1,2,3].c]
<>-->>[-] [ls text[1-5].c]
<>-->>[^] [ls text[^456].c]
<>-->> > [输出重定向] [cat text.c > text1.c]
<>-->>'' [提取命令] ['pwd' > text1.c]
<>-->>passwd [1:passwd <用户名>]
<>-->>echo
<>-->>usermod [修改用户属性]
<>-->>file <file_name>
<>-->>ln [硬链接]
<>-->>ln -s [乱连接/符号连接]
<>-->>gzip <文件名>
<>-->>gunzip <文件名>
<>-->>tar <目录> [解释:归档]
<>-->>tar -vxf <文件名>
<>-->>ifconfig [1:ifconfig eth0 192.168.1.1 netmask 255,255,255,0] ★★★

[3] >> 提问:常用Linux快捷键
<>-->>ctrl+alt+t  
<>-->>ctrl+shift+N
<>-->>ctrl+L
<>-->>ctrl+shift+c / ctrl+shift+v

[5] >> 根文件系统的一些目录的作用
<>-->>FHS=Filesystem Hierarchy Standard [文件系统层次结构标准 -- 不同linux发行机构必须遵守]
<>-->>/bin [shell指令]
<>-->>/boot [启动Linux时所需文件]
<>-->>/dev [存放外设 -- 举例U盘,TF卡]
<>-->>/etc [配置文件]
<>-->>/mnt  [挂载其他文件系统]
<>-->>/root [管理员目录]
<>-->>/sbin [管理员程序]
<>-->>/tmp:[存放临时文件]
<>-->>/usr  [多个用户共享的目录]
<>-->>/usr/src [内核源代码]
<>-->>/run  [存储系统启动信息]
<>-->>/var   [存放经常被修改的文件]

[6] >> vim? 
<>-->>vi <文件名> +行数
<>-->>vi file1 file2 file3 
<>-->>:vi file1
<>-->>w [下一个单词]
<>-->>B [上一个单词]
<>-->q: [查看历史命令] 
<>-->>dd  [2 dd]
<>-->>yy  [2 yy]
<>-->>p
<>-->>esc = CTRL+c   
<>-->>u
<x>-->>ctrl + r [r = revocation撤销] 
<>-->> { [段首] 
<>-->> } [段尾]
<>-->>T/t
<>-->> d$ dw db d0
<>-->> y$ y0 yw yb
<>-->> x [删除一个] s[删除一个并进入插入模式]  
<x>-->>a(后一位插入) / A(行尾插入) / i(当前插入) / I(行首插入) / o(下方插入) / O(上方插入)   
<>-->> G [文件尾]
<>-->> H [文件头]
<>-->> J [两行合并]
<>-->> K [查看帮助]
<>-->> 0 [行首]
<>-->> $ [行尾]
<>-->> << [缩退]
<>-->> >> [缩进]
<>-->> ZZ [退出]
<>-->>:w copy1 [备份为copy1]
<>-->>:r main.c [复制main.c到该文件]
<>-->>:n file1 
<>-->>:pwd
<>-->>:8
<>-->>v / V / ctrl + v  
<>-->>:set number 
<>-->>:set nonumber
<>-->>:/ [查询]
<>-->>:s/str1/str2/gc [视图模式选择区域所有str1-->str2,并提示替换] 
<>-->>:%s/str1/str2/gc 
<>-->>ctrl + P [智能补全]
<>-->>set paste //vim的粘贴模式
<>-->>:n = ctrl+6
<>-->>:N = ctrl+6
<>-->>:sp         //水平切分窗口
<>-->>:vsp    //垂直切分窗口
<>-->>ctrl+w+w    //切换窗口
<>-->>:close

[7] >> GNU的GGC?
<>-->>.i = 预处理文件
<>-->>.s = 汇编文件
<>-->>.o = 目标文件 = 二进制机器码文件 
<>-->>.out = 二进制文件
<>-->>.a  [静态库文件:lib+库名.a]
<>-->>.so [动态库文件:lib+库名.so]


<>-->>[.c .h] --预处理-->  [.i] --编译处理--> [.s] --汇编处理--> [.o] --链接处理--> [.out(linux) /.exe(window)]
		  ⇳          		  ⇳			         ⇳			        ⇳				             ⇳					  
		  ⇳=======gcc -E======⇳                  ⇳			        ⇳                            ⇳
	  	  ⇳================gcc -S================⇳ 			        ⇳                            ⇳
	  	  ⇳==========================gcc -c=========================⇳                            ⇳
	      ⇳=========================================gcc==========================================<>-->>gcc -o [制定目标名称] [1:gcc -E text1.c -o text1.i] [1:gcc -S text1.c -o text1.s]
<>-->>gcc -g [调试]
<>-->>gcc a.o b.o c.o -o.text [a.o,b.o,c.o链接为text]
[
	<>-->>l/list [列出10行代码]
	<>-->>l/list 行号 [列出改行的代码]
	<>-->>l/list 函数名 [显示“函数名”所在函数的源代码,如:list main]
	<>-->>b/break <行号> [设置断点]
	<>-->>del 1 [删除第一个断点]
	<>-->>info b/break [查看断点情况]
	<>-->>r 运行
	<>-->>p/print  <变量值>
	<>-->>n/next [下一步]
	<>-->>s/step [单步]
	<>-->>bt full[查看函数堆栈,并查看里面变量值]  
	<>-->>finish [退出函数]  
	<>-->>delete breakpoints:清除所有断点:
	<>-->>info locals: [显示当前堆栈页的所有变量]
	<>-->>display 表达式:[在每次单步进行指令后,紧接着输出被设置的表达式及值。如: display a] 
	<>-->>layout asm [显示反汇编窗口,layout = 布局]
	<>-->>layout src [显示源代码窗口]
	<>-->>layout regs:[显示CPU寄存器窗口]
]
<>-->>gcc -L <库名地址> //地址都是大写,比如I,L
<>-->>gcc -l <库名> 
<>-->>gcc -I <用户头文件路径>
<>-->>__FILE__ __FUNCTION__ __LINE__

[8] >> c语言bool类型的使用?
<>-->>#include <stdbool.h> [bool a = true; //1] [bool a = false; //0]

[9] >> linux常识?
<>-->>unix [1970,汇编实现,C语言优化,能移植其他平台]
<>-->>linux [1990,类似unix]
<>-->> [用户空间]     -->    [内核空间]
			 ⇳                     ⇳
			 ⇳                     ⇳
	[程序,shell命令,脚本]  [系统调用ststem calls]

[10] >> Linux 软件包管理
<>-->> .deb (Debian软件包) [Linux平台的安装包,类似于window的.exe文件]
<>-->>         .deb软件包
		  	  /                \
    		deb 		     deb-src
 (编译好的二进制文件) (未编译的源码文件)
<>-->>dpkg [安装,移除deb软件包]

[11] >> 进程?
<>-->>ps -aux [process show]
<>-->>top 
<>-->>pstree
<>-->>kill <进程号>
<>-->>进程的6种状态 
[
								  [可中断的睡眠状态 = S = sleep]   [不可中断的睡眠状态 = D =don not ]
									 					↖				↗
											  		         [睡眠态]   [停止态 = T]
																↑          ↑		 
											[就绪态] -->      [R = runing状态] [< = 小于符号 = 高优先级进程] [N = 低优先级进程]
																↓		   ↓																						 			
															[X-退出状态]  [僵尸态 = Z]  
]

[12] >> 文件系统?
<>-->>磁盘文件系统:硬盘,U盘,ROM,ext3,ext4(linux端),fat,fat32(window端)
<>-->>网络文件系统:可以远程访问的文件系统,这种文件系统在服务器端仍然是本地磁盘文件系统.客户机通过网络远程访问数据 [NFS,samba]
<>-->>hd [代表ide硬盘是传统的并口硬盘]  [1:/dev/hda1 --第一个并口硬盘的第一个分区] [2:/dev/hdc2 --第三个并口硬盘的第2个分区]
<>-->>sd [代表SATA硬盘即流行的串口硬盘] [1:/dev/sda1 --第一个串口硬盘的第一个分区] [2:/dev/sdc2 --第三个串口硬盘的第2个分区]

[13] >> 网络?
<>-->>有线网:eth0,eth1,eth2
<>-->>无线网:wlan0,wlan1,wlan2


[14] >> main传参?
<>int main(int argc,char *argv[])   [argc = 所传参数个数; argv[] = 记录传参]

[15] >> 串口编程? ★★★
<>-->>注意:attr=attribute=属性;tc=translate control
<>-->>1:获取串口属性 -- tcgetattr() 
<>-->>2:提取波特率 -- cfgetospeed()
<>-->>3:设置输入波特率 -- cfsetispeed()
<>-->>4:设置输入波特率 -- cfsetospeed()
<>-->>5:清空串口缓冲区 -- tcflush()
<>-->>6:设置串口属性 -- tcsetattr()
<>-->>7:从串口文件读取 -- read()
<>-->>8:先窗口文件发送 -- write()

[16] >> make ?
<>-->>1:Make会检测文件时间戳发现更新过的文件,从而减少编译工作量
<>-->>2:Makefile是Make的唯一配置文件
<>-->>3:Make创建的目标体通常是目标文件霍可执行文件
<>-->>-Wall [允许gcc发出警告进行]
<>-->>-O [编译优化]
<>-->>目标:依赖文件  [目标就是生成文件]
<>-->>.PHONY:伪目标名 [伪目标 = 假文件,在文件没有更新,make每次都会执行该目标下的命令]
<>-->>变量名 = 变量值 [递归展开]
<>-->>预定义变量
[
	<>CC [编译器名称,默认cc,注意gcc == cc ,gcc main.c == cc main.c]
	<>RM [默认 rm -f]
	<>CFLAGS [C编译器选项,无默认值]
	<>CPPFLAGS [c预编译,无默认值]
	<>AR [库文件维护程序,默认值为ar]
	<>ARFLAGS [库文件维护程序选项,无默认值]
	<>OBJS [项目objs文件,无默认值]

	//以下自动变量只是面向目标,不面向变量
	<>$* [目标名,不含扩展名]
	<>$+ [所有依赖文件]
	<>$< [第一个依赖文件]
	<>$? [所有时间戳比目标文件晚的依赖文件]
	<>$@ [目标完整名]
	<>$^ [所有不重复的目标依赖文件]
	<>$% [目标归档成员]
]
<>-->>变量名:=变量值 [非递归展开]
[
	flag:=abcd
	echo $(flag)  
]
<>-->>make -C <路径> [执行指定目录的Makefile]
<>-->>make -f <文件> [将该文件视为Makefile运行]
<x>-->>make -n [打印Makefile中的命令]
<x>-->>make -w [Makefile执行过程如果改变目录,将目录打印]
<>-->>VPATH  虚路径[如果没有指定VPATH变量,Make只会在当前目录寻找依赖文件与目标文件,如果定义了该变量,make还会额外在虚路径寻找,虚路径之间用:隔开] VPATH =/home:/src:/include #将这三个路径设置为虚路径

Makefile例1:
OBJS?=f1.o  #如果OBJS未定义,就赋值f1.o 
OBJS+=f2.o  #变量拼接
OBJS+=f3.o

text:f1.o f2.o f3.o #生成文件text,需要依赖文件f1.o,f2.o,f3.o
	gcc $(OBJS) -O -o text  #<tab>缩进表示该行是命令
f1.o:f1.c  #生成文件f1.o,需要依赖文件f1.c
	gcc -c -Wall -O f1.c -o f1.o  #<tab>缩进表示该行是命令
f2.o:f2.c  #生成文件f2.o,需要依赖文件f2.c
	gcc -c -Wall -O f2.c -o f2.o  #<tab>缩进表示该行是命令
f3.o:f3.c  #生成文件f3.o,需要依赖文件f3.c
	gcc -c -Wall -O f3.c -o f3.o  #<tab>缩进表示该行是命令

.PHONY:clean  #创建伪目标
clean:  #伪目标,不需要依赖
	rm -rf *.o text #<tab>缩进表示该行是命令




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值