1. 常见目录说明
/bin 存放常用命令(即二进制可执行程序)
/etc 存放系统配置文件
/home 所有普通用户的家目录
/root 管理员用户的家目录
/usr 存放系统应用程序及文档
/proc 虚拟文件系统目录,以进程为单位存储内存的映射
/dev 存放设备文件
/mnt 临时挂载点
/lib 存放库文件
/boot 系统内核及启动有关的文件
/tmp 存放各种临时文件,是所有用户均可访问的地点
/var 存放系统运行中常改变的文件, 如系统日志
2、绝对路径与相对路径
绝对路径: 是从系统根目录(“/”)开始到指定位置的路径
例如:以绝对路径表示 main.c 的位置 /home/stu/main.c
以绝对路径表示桌面的位置 /home/stu/Desktop
相对路径: 是从当前目录开始到指定位置的相对路径
例如: “.” 代表当前位置 “…” 代表当前位置的上一层目录
“./main.c” 表示当前位置下的 main.c 文件
3.文件类型与权限
Linux 将文件分为以下几种类型:
◼ 普通文件 ‘-’
◼ 目录文件 ‘d’
◼ 管道文件 ‘p’
◼ 链接文件 ‘l’
◼ 设备文件(块设备 ’b’ 、字符设备 ‘c’)
◼ 套接字文件 ‘s
文件权限:
◼ r 读权限 值: 4
◼ w 写权限 值: 2
◼ x 执行权限 值: 1
◼ - 无权限 值: 0
修改文件权限 chmod
用法: chmod u+rwx 文件名
chmod 764 文件名
文件分三种
u 表属主 g(对应7) 同组人 o(对应6) 其他人 a(对应4) 所有人 “+”表示增加权限 “-”表示去掉权限
4.基本命令
cd
切换目录,cd 后的参数表示要切换到的位置,可以使用绝对路径或相对路径
touch
创建普通文件/文档文件
mkdir
创建目录文件
pwd
显示当前所在的位置
ls
显示当前目录下下有哪些文件
ls -a
查看隐藏文件
ls -l
看文件详细信息
rmdir
只能删除空文件夹/目录
cp
拷贝
cp -r
拷贝目录
mv
移动文件,重命名文件
rm
删除文件,删除目录文件时,需要加“-r”
find
在目录树中搜索指定的文件,也可以指定开始的搜索位置
find /home/stu -name main.c(按照名字找)
man
帮助手册,用来查看命令、系统调用,库函数等帮助信息
grep
在文件中过滤出包含指定字符串的行
grep “main” main.c(在main.c中查一个main的字符串)(main也可不加“”)
管道 |
将前一个命令的输出结果作为后一个命令的输入
ls /bin | grep “icroej”
wc
统计文件中单词个数(-w)、字符个数(-c)、行数(-l) ,
文件查看命令
cat(主要用来查看和合并)
1.查看文件内容
cat test
2.创建文件并写入内容
cat >test(创建文件并写入内容)
3.合并文件:cat trst veii >min(新创建的文件夹)
结束
往文件中写入数据, Ctrl+d 是结束输入
more
当一个文件的内容超过一个屏幕能显示的行数,使用 more 可以分屏显示文件内容。
使用方式: more filename
空格,下一页
回车,按行
less
文本内容查看器,查看文件内容,但是文件内容不会显示到界面上
按q退出
head
显示文件前 n (10)行的内容
head -3 文件名
显示前三行内容
tail
显示文件后 n(10) 行的内容
sudo apt update
安装vim
sudo apt install vim
安装gcc
sudo apt intstall gcc
5.文件编辑命令
命令模式切换到插入模式:
- a //进入到当前光标后开始编辑
- A //进入到当前光标所在行的行末开始编辑
- i //进入当前光标位置开始编辑
- I //进入当前光标所在行的行头开始编辑
- o //进入当前光标下一行开始编辑
- O //进入当前光标上一行开始编
命令模式切换到末行模式:
- : //对文本的设置或保存工作
- / //对文本进行全文向下搜索字符串 string
- ? //对文本进行全文向上搜索字符串 string
vi/vim 常用命令:
- n dd //删除光标开始向下的 n 行
- n yy //拷贝光标开始向下的 n 行
- p //粘贴
- u //撤销上一次操作
- ctrl + r // 恢复上一次撤销操作
- r //替换一个字符
- shift + 6 //光标移动到当前行的行头
- shift + 4 //光标移动到当前行的行尾
- shift + g //光标移动到整个文本的最后一行
- gg //光标移动到整个文本的第一行
- n shift + g //光标移动到第 n 行
- d n shift + g //删除光标到 n 行的内容
- y n shift + g //拷贝光标到 n 行的内
- x 删除光标字符
- shift + r(R) 替换 接下来的全部
- shift + c © 删除光标后的内容
- cc 删除一整行
- :行号 跳转到多少行
末行模式下的操作
29. :w //保存文本
30. :q //退出编辑
31. :wq //保存并退出
32. :q! //强制退出
33. :w newfile(即新文件名) //另存为
34. :set nu //显示行号
35. :set nonu //取消行号
36. : set hlsearch //设置高亮搜索
37. : set nohlsearch //取消高亮搜索
38. : n,m s/oldstring/newstring //替换整个文本每行的第一个 oldstring
39. :n, m s/oldstring/newstirng/g //替换整个文本所有的 oldstring
40. /string //向下搜索 string
41. ?string //向上搜索 string
文件压缩与解压命令
tar
将文件打包或者解包
◼ c 创建包文件
◼ f 指定目标为文件而不是设备
◼ v 显示详细过程
◼ t 显示包中的内容而不释放
◼ x 释放包中的内容
◼ z GNU 版本新加的,使得 tar 有压缩和解压的功
一般 tar cvf +指定位置 创建 tar +xvf (或zxf)+指定位置 释放
gzip
对文件进行压缩或者解压
解压加-d
进程管理命令
1 .ps
默认显示与当前终端有关的进程信息 {(PCB)进程控制块}
-e 显示系统中所有的进程信息
-f 显示更多的进程属性信息(全格式)
-L 显示进程中的线程 ID
ps -ef |grep “sleep” //将有sleep这以字符的进程显示
2. kill
结束或者挂起一个进程
-9 强制结束进程
-stop 挂起进程
pkill
结束一组同名的进程 // pkill sleep
3.&后台运行程序
eg sleep 200 &
4.ctrl + z 停止进程
5.jobs -l 显示运行的进程
6.bg %1 (1是任务号)后台执行
fg %1 前台执行
7.top
查看系统资源使用情况以及进程信息
8.history 查看前面写过的命令
Linux 系统上 C 程序的编译与调试
gcc 分步编译链接
(1) 预编译 :
gcc -E main.c -o main.i
(2) 编译:
gcc -S main.i -o main.s
(3) 汇编:
gcc -c main.s -o main.o
(4) 链接:
gcc main.o -o main
链接的时候函数的地址是在此时确定下来的
gdb 调试
Debug 版本和 Release 版本
Debug 版本
Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人
员,最常用的就是 debug 版本的可执行文件。
Debug 版本的生成:
因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生
成包含调试信息的中间文件。
gcc -c hello.c -g —> 生成包含调试信息的中间文件
gcc -o hello hello.o
或者 gcc -o hello hello.c -g
Release 版本
Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版
本。
首先将源代码编译、链接生成 Debug 版本的可执行文件,然后通过‘gdb Debug 版本
的可执行文件名’进入调试模式
单进程、单线程基础调试命令
- l //显示 main 函数所在的文件的源代码
- list 文件名:num //显示 filename 文件 num 行上下的源代码
- b 行号 //给指定行添加断点
- b 函数名 //给指点函数的第一有效行添加一个断点
- info break //显示断点信息
- delete 断点号 //删除指定断点
- disable 断点号 //将断点设定为无效的,不加断点号,将所有断点设置为无效
- enable 断点号 //将断点设定为有效的,不加断点号,将所有断点设置为有效
- r(run) //运行程序
- n(next) //单步执行
- c (continue) //继续执行,直接执行到下一个断点处
- s //进入将要被调用的函数中执行
- finish //跳出函数
- q //退出调试
- p val //打印变量 val 的值
- p &val //打印变量 val 的地址
- p a+b //打印表达式的值
- p arr(数组名) //打印数组所有元素的值
- p *parr@len //用指向数组的指针打印数组所有元素的值
- display //自动显示,参数和 p 命令一样
- info display //显示自动显示信息
- undisplay + 编号 //删除指定的自动显示
- ptype val //显示变量类型
- bt //显示函数调用栈
Linux 系统上的库文件生成与使用
库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so
声明存放在usr/include下面
定义存放在usr/lib下面
静态库的生成
第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文
第二步:使用 ar 命令将第一步编译的所有”.o”文件生成静态库,其中:
◼ c 是创建库
◼ r 是将方法添加到库中
◼ v 显示过程
静态库的使用
先编译文件
add.c ->add.o
max.c ->max.o
然后创建库
ar crv libfoo.a add.o max.o(如果有很多.o文件用 *.o)
在main.c中使用 gcc -o main mian.c -L. -l库名
库在标准位置就只需要指定库名
共享库的创建与使用
生成
第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件
第二步:使用 gcc 命令将第一步编译的所有”.o”文件生成共享库
命令gcc -shared -fPIC -o libfoo.so add.o max.o
使用(当静态库和共享库同时存在的时候默认使用共享库)
共享库在usr/lib下才能使用
gcc -o main mian.c -l库名(位置默认和c标准库存放在同一位置)
如果库不在标准位置下,也可以通过设置环境变量”LD_LIBRARY_PATH”来指定加
载库的路径。
ldd main 查看main中库的使用只看共享库
例如一些math.h一些系统提供的也需要在编译时指出库名
静态库和共享库的区别
静态库在链接时将用到的方法包含到最终生成的可执行程序中静态库main可以直接运行,而共享库不包含,只标记,在运行程序时,才动态加载。