[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
<√>-->>: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 <库名地址>
<√>-->>gcc -l <库名>
<√>-->>gcc -I <用户头文件路径>
<√>-->>__FILE__ __FUNCTION__ __LINE__
[8] >> c语言bool类型的使用?
<√>-->>#include <stdbool.h> [bool a = true;
[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>缩进表示该行是命令