Linux与C基础

    技术2022-07-10  139

    [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>缩进表示该行是命令
    Processed: 0.013, SQL: 9