基础知识
Linux和Windows区别
1、Linux 主要使用命令行操作系统,Windows 图形化界面
2、Linux 主要应用于服务器,Windows 是个人操作系统
3、Linux 属于开源项目,而 Windows 不开源
4、Linux 是多用户系统,多用户同时登录;Windows 是单用户系统
5、Linux可执行程序:ELF格式;Windows可执行程序:PE格式
用户表示及大致结构
普通用户 $ stu
管理员 # root
/:根目录(文件夹)
bin(存放命令或二进制可执行程序)、home(普通用户家目录)、lib(库文件)、etc(放配置文件)···
~:家目录:/home/stu 表示stu这个用户的家目录。stu用户可在stu这个文件夹中存放、删除、创建新文件夹;根目录下创建文件需要管理员权限
文件类型
-:普通文件
d:目录文件(文件夹)
|:链接文件
p:管道文件
调试版本与发行版本
Windows中:
debug:开发调试版本,含有调试信息
release:发行版本,给用户使用
Linux中:
调试版本:gcc -o main add.o max.o main.o -g
发行版本:gcc -o main add.o max.o main.o
主函数参数
一般含有三个参数:参数个数;参数内容(数组);环境变量
printf()输出缓冲区
内容会先存到缓冲区,printf("abc");没有换行符的话只会在程序结束的时候打印abc到屏幕上。
以下情况会刷新缓冲区:缓冲区满;强制退出缓冲区:\n、fflush(stdout);程序结束后刷新缓冲区
命令
基本命令
普通用户转管理员:sudo su
管理员转普通用户:exit
切换路径:cd
在最近的两个位置之间切换:cd -
进入文件夹:cd 文件夹名
返回上一层:cd ..
家目录转根目录:cd /
根目录转家目录:cd home,cd stu
创建普通文件:touch
创建文件夹,即目录(只能在家目录下):mkdir 文件夹名
删除普通文件:rm
删除目录(文件夹):rm -r 目录名
拷贝文件:cp 文件夹1 (到) 文件夹2
拷贝文件夹:cp -r 文件夹1 (到) 文件夹2
移动文件:mv 文件名(到)目录名
重命名文件:mv 文件名1(到)文件名2
移动文件并重命名:mv 文件名1(到)目录名/文件名2
显示当前目录下所有文件:ls
显示文件所有信息:ls -l
显示当前位置:pwd
清屏:clear
修改权限
r 读 4;w 写 2;x 执行 1;- 没权限 0
文件类型+属主u+同组人g+其他人o+用户+组+创建时间+文件名
chmod u-w main.c 去掉属主的写权限
chmod 766 main. 属主,同组人,其他人权限:读写执行,读写,读写
创建文件
vim 文件名:打开/创建文件(进入后默认命令模式)
i进入插入模式
esc回到命令模式
:进入末行模式
命令模式
nyy+p复制粘贴n行;
ndd剪切、删除n行;
u撤销,ctrl+r恢复 ;
r修改;
shift+c删除光标后面的内容;
cc删除整行
末行模式
set nu显示行号;set nonu消除行号;
set hlsearch搜索结果高亮;set nohlsearch取消搜索结果高亮;
/str在当前文件中搜索str这个字符串;
:n 跳转到n行;G跳转到末尾;gg跳到第一行;
wq保存退出;q!不保存退出;q直接退出;w保存不退出
查看文件
cat 显示文件中的内容
cat 文件1 文件2>文件3:合并文件1文件2为文件3
more 分屏幕显示文件中的内容 空格翻页,回车一行一行显示
less 显示文件中的内容(可反复查看)q退出
head 显示文件的前10行(head -3 文件名:显示文件中的前3行)
tail 显示末尾10行
查找文件:find /home/stu -name “文件” (在stu中搜索“文件”)
history显示执行过的命令
grep 过滤
用法:grep “字符串” 文件名
grep -i “字符串” 文件名(-i 不管大小写,给出那一行的信息)
grep -v “字符串” 文件名(-v 不要相关的那一行)
grep -c “字符串” 文件名(-c 只显示有多少行有该“字符串”)
grep高阶使用:ls -l |grep “passwd” ps -ef |grep sleep
进程命令
进程:正在运行的程序
显示当前进程:ps
显示所有进程的更多信息:ps -ef(e表示所有进程,f表示更多信息)
结束指定进程:kill+id(ctrl+c只能结束前台进程)
停止一个正在进行的进程:ctrl+z;
继续运行已停止的进程:bg %任务号
强制结束已停止的进程:kill -9 +id
显示后台进程 jobs;
结束该名字对应的所有进程:pkill+进程名;
放到后台运行:&
将后台进程放到前台:fg %任务号
top:查看系统中各进程cpu占用情况;q退出
tar包命令
tar 将文件打包或者解包
◼ c 创建包文件
◼ f 指定目标为文件而不是设备
◼ v 显示详细过程
◼ t 显示包中的内容而不释放
◼ x 释放包中的内容
◼ z GNU版本新加的,使得tar有解压和释放的功能
使用:tar zvf 包名
gzip +包名:压缩成包
gzip -d 压缩包名:解压缩
user命令(了解)
管理员权限下,adduser+用户名:添加用户;passwd+用户名:改密码;删除用户:deluser+用户名
注:删除用户是使得不能再登录,但是该用户之前创建的文件仍然存在
调试命令(重点)
gcc -o main add.o max.o main.o -g(增加调试信息)
开始调试:gdb 文件名
l:显示代码(每次显示10行)
l+n可以跳转到第n行
l add.c:1 :跳转到add.c函数的第一行
b+行号:加断点
info break:查看断点信息
delete 序号:删除第几个断点
r:运行程序
n:单步执行(走一行)
c:一直走走到断点
s:进入函数
finish:跳出函数
bt:显示函数调用的关系(看到程序执行到哪个函数的哪一行)
p 变量:显示变量
q:退出
编译链接
头文件都存放在/usr/include里面
c语言的编译器要求c的源文件必须以.c结尾
编译链接过程结果:.c->.exe 高级语言文件->可执行文件
编译链接过程:
- 预编译gcc -E main.c -o main.i(处理#开头的预编译指令;替换宏定义;删除注释;printf函数声明)
- 编译gcc -S main.i -o main.s(词法分析,语法分析,语义分析;优化预处理文件)
- 汇编gcc -c main.s -o main.o(将汇编代码转变成机器可执行的指令)
- 链接gcc -o main main.o(链接其他文件如printf函数实现;生成可执行文件)
调用多个文件:
1)gcc -o main main.c add.c ···
2)仅执行前三个过程可查看.c文件有无语法错误
gcc -c add.c
gcc -c main.c
gcc -o main add.o main.o
makefile文件
多文件的项目工程,编译时可以使用makefile文件管理(cmake),实现自动化的编译
makefile文件的实现:
- 创建makefile文件(终端执行):vi makefile
- 编写文件内容:
all:main GDB=-g main:add.o main.o max.o//依赖关系 TAB键gcc -o main add.o max.o main.o//规则 add.o:add.c TAB键gcc -c add.c ${GDB} max.o:max.c TAB键gcc -c max.c ${GDB} main.o:main.c TAB键gcc -c main.c ${GDB} 清理:clean: TAB键rm -rf *.o main //-r表示可能要删除文件夹 f表示如果没有 *.o文件仍然要删除的话系统不要报错makefile文件执行(终端):直接输入命令make
清理命令:make clean