0.引言
版本ubuntu20.04
1.Linux目录结构
常见目录说明:
/bin 存放常用的命令(二进制可执行程序)
/etc 存放系统配置文件
/home 所有普通用户的家目录
/root管理员用户家目录
/usr 存放系统应用程序及文档
/proc虚拟文件系统目录,以进程为单位存储内存的映射
/dev存放设备文件
/mnt临时挂载点
/lib 存储库文件
/boot 系统内核及启动有关的文件
/tmp存放各种临时文件,所有用户均可访问
/var 存放系统运行中经常改变的文件,如系统日志
/run
2.文件类型和文件权限
Linux将文件分为以下几种:
- 普通文件"-"
- 目录文件"d"
- 管道文件"p"
- 链接文件"l"
- 设备文件(块设备"b",字符设备"c")
- 套接字文件"s"
Linux有一点不同于Windows的是不以文件的后缀名区别文件类型,而是在文件属性中专门一列来记录文件类型(使用命令ls -l)。
在文件类型后面紧跟着的是文件权限。
- r 读权限值:4
- w写权限值:2
- x 可执行权限 值:1
- – 无权限值:0
- u:表示文件属主的访问权限
- g:表示文件同组用户的访问权限
- o:表示其他用户的访问权限
3.文件权限修改命令 chmod
两种方式修改文件权限。
3.1文字设定法
u表示属主,g表示同组,o表示其他,a表示所有;"+“表示增加权限,”-"表示去掉权限。
3.2数字设定法
权限由三位数字组成,每一位数字代表一种角色的权限,每个角色的数值由其所具有的权限对应的数字之和构成。
4.Linux常用命令
4.1基础命令
pwd //显示当前位置的绝对路径
cd //切换目录,后跟要切换的位置,可以是绝对路径也可以是相对路径
ls //显示目录中的文件,-l显示详细信息,-a查看隐藏文件
man //查看帮助手册,后跟1代表命令,2代表系统调用,3代表库函数
touch //创建普通文件
mkdir //创建目录文件
rmdir //删除空目录
cp //拷贝文件,拷贝目录文件时需要加上参数-r,递归拷贝
mv //移动文件,在同一个目录中移动可实现文件的重命名
rm //删除文件,-f强制删除,-r删除目录文件
find 目录 -name 文件名 //在指定的目录中搜索指定的文件
grep "字符串" 文件名 //在文件中过滤出包含指定字符串的行
| //管道,将前一个命令的输出结果作为后一个命令的输入
wc //统计文件信息,-l行数,-w单词个数,-c字符个数
su username //切换用户,没有指定用户名,则默认切换到root用户
shutdown -h now //立刻关机
shutdown -r now //立刻重启
4.2文件查看命令
cat 文件名 //查看文件内容
cat 文件1 文件2 > 文件3 //将文件1和文件2的内容写进文件3(覆盖)
cat > 文件名 //从终端向文件写入数据(覆盖),ctr+d结束
cat 文件1 文件2 >> 文件3 //将文件1和文件2的内容写进文件3(追加)
cat >> 文件名 //从终端向文件写入数据(追加),ctr+d结束
more //文件内容超过一个屏幕,分屏显示,空格换页,回车换行
less //查看文件内容,但文件内容不会显示到界面上
head //-n显示文件前n行内容,默认显示前10行内容
tail //-n显示文件后n行内容,默认显示后10行内容。
tail -f 文件名 //实时追踪文件内容,可用于实时显示日志文件,ctr+c中断
5.文件编辑命令
文件编辑包含三种模式
- 命令模式
- 插入模式
- 末行模式
命令模式切换到插入模式
i //光标位置
I //光标行头
a //光标后
A //光标行末
o //光标下一行
O //光标上一行
s //删除光标位置字符并开始插入
S //删除光标所在行并插入
命令模式切换到末行模式
: //对文本设置或者保存
/ //全文向下搜索
? //全文向上搜索
vim常用命令
n dd //删除光标开始向下的n行
n yy //拷贝光标开始向下的n行
p //粘贴
u //撤销上一次操作
ctrl+r //恢复上一次撤销操作
r //字符替换
shift+4 //光标移至行尾
shift+6 //光标移至行首
gg //光标移至文本第一行
shift+g //光标移至文本最后一行
n shift+g //光标移至第n行
d n shift+g //删除光标到第n行的内容
y n shift+g //拷贝光标到第n行的内容
末行模式下的操作
:w //保存
:q //退出
:wq //保存并退出
:q! //强制退出
:w newfile //另存为newfile
:set nu //显示行号
:set nonu //取消行号
:set hlsearch //设置高亮搜索
:set nohlsearch //取消高亮搜索
:n,m s/oldstring/newstring //从n行到m行,用newstring替换每行的第一个oldstring
:n,m s/oldstring/newstring/g //从n行到m行,用newstring替换每行的所有oldstring
/string //向下搜索string
?string //向上搜索string
vim默认情况下一个Tab键是8个空格的长度而且不显示行号,为了程序的美观和可读性,可对vim的配置文件进行修改,使得一个Tab键变为4个空格的长度。
vim /etc/vim/vimrc //对vim的配置文件进行修改,在文件末尾添加如下内容
set nu
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set smartindent
6.文件压缩与解压命令
Ubuntu自带的文件压缩命令 tar 和 gzip 分别对应着打包和压缩的功能,为方便使用可以合二为一。
tar czvf 文件名.tar.gz 文件1 文件2 目录1 目录2 //文件压缩
tar xzvf 文件名.tar.gz //文件解压
下面解释一下对应的参数的含义:
c //创建包文件
x //释放包文件
z //使得 tar 命令具有压缩和解压功能
v //显示详细过程
f //指定目标为文件而不是设备
另外一个比较常用且方便的文件压缩命令是 rar
sudo apt install rar //命令安装
rar a 文件名.rar dir1 dir2 //文件压缩
rar x 文件名.rar -c dir //文件解压 -c 指定解压路径
7.进程管理命令
7.1.ps 命令用于查看与当前终端相关的进程
-e //显示系统中所有的进程信息
-f //显示更多的进程属性(全格式)
-L //显示进程中的线程 id
最终输出内容解释
UID //用户ID
PID //进程标识符
PPID //父进程标识符
LWP //线程标识符
C //CPU使用率
NLWP //线程数量
STIME //进程启动的时间
TTY //与进程相关的终端,若无相关的终端显示 ? 号
TIME //运行时间
CMD //进程启动时使用的命令
7.2.kill 结束或挂起一个进程
-9 //强制结束进程
-STOP //挂起进程
7.3.& 后台运行程序
终端下的命令默认会在前台执行,在命令后面添加 & 可以使命令在后台执行。
7.4.jobs 显示当前终端中的任务
7.5.前后台切换 bg fg
bg 任务号 //唤醒挂起的进程在后台执行,任务号由命令 jobs 查看
fg 任务号 //将后台运行的或挂起的进程挪到前台执行
7.6.top 查看系统资源使用情况及进程信息
8.gcc的使用
gcc分步编译链接
- 预编译
gcc -E main.c -o main.i
预编译阶段主要操作包括处理预编译指令,删除宏定义并替换,处理所有条件预编译指令,删除注释等。
2. 编译
gcc -S main.i -o main.s
编译阶段进行词法分析、语法分析、语义分析,代码优化和汇总符号。
3. 汇编
gcc -c main.s -o main.o
汇编阶段,将汇编指令翻译为二进制格式,生成section和符号表。
4. 链接
gcc main.o -o main
链接阶段,合并各个段,符号解析,符号重定位。
gcc一步编译链接
gcc main.c -o main
9.makefile文件和make命令
makefile文件用于自动化编译程序,对三个文件进行编译 add.c max.c main.c
gcc 命令前必须用 table 键进行缩进
make命令会根据makefile文件的规则生成可执行程序,命令 make clean 用于清除中间文件和最终的可执行文件。
10.gdb调试命令
在利用 gcc 命令生成可执行文件时,默认生成的 Release 版本,该版本无法进行调试。要想进行调试必须生成 Debug 版本,Debug 版本为可调式版本,生成的可执行文件中包含调试信息。由于调试信息是在编译阶段加入到中间文件 .o 中的,所以必须在编译时控制其生成包含调试信息的 .o 文件。
gcc -c main.c -g //参数 -g 用来生成包含调试信息的 .o 文件
gcc -o main main.o //利用 .o 文件生成可执行文件
或者一步完成
gcc -o main main.c -g
生成Debug版本的可执行文件,就可以利用gdb命令进行调试
gdb main
l //显示main函数所在文件前10行代码
l filename:num //显示filename文件num行的上下10行代码
b num //给num行添加断点
b function //给函数function的第一有效行添加断点
info break //简写 i b,显示断点信息
delete 断点号 //删除指定断点
disable 断点号 //将断点设置为无效,不加断点号会将所有断点都设置为无效
enable 断点号 //将断点设置为有效,不加断点号会将所有断点都设置为有效
r (run) //运行程序
n(next) //单步执行
c(continue) //继续执行到下一个断点处
s //进入将要被调用的函数中
finish //跳出函数
q //退出调试
p val //打印变量val的值
p &val //打印变量val的地址
p a+b //打印表达式的值
p arr(数组名) //打印数组所有元素的值
p *p@len //用指向数组的指针打印数组的元素
display //自动显示,参数和p一样,每执行一步自动显示变量值
info display //查看自动显示信息
undisplay 编号 //删除指定的自动显示
ptype val //显示变量类型
bt //显示函数调用栈
//2022-12-09 补充
set follow-fork-mode parent //调试追踪父进程
set follow-fork-mode child //调试追踪子进程