0.引言

版本ubuntu20.04

1.Linux目录结构

ubuntu sudoers 保存_ubuntu sudoers 保存

常见目录说明:

/bin ubuntu sudoers 保存_服务器_02 存放常用的命令(二进制可执行程序)
/etc ubuntu sudoers 保存_服务器_02 存放系统配置文件
/home ubuntu sudoers 保存_ubuntu_04 所有普通用户的家目录
/rootubuntu sudoers 保存_服务器_02管理员用户家目录
/usrubuntu sudoers 保存_服务器_02 存放系统应用程序及文档
/procubuntu sudoers 保存_服务器_02虚拟文件系统目录,以进程为单位存储内存的映射
/devubuntu sudoers 保存_服务器_02存放设备文件
/mntubuntu sudoers 保存_服务器_02临时挂载点
/lib ubuntu sudoers 保存_服务器_02 存储库文件
/boot ubuntu sudoers 保存_ubuntu_04 系统内核及启动有关的文件
/tmpubuntu sudoers 保存_服务器_02存放各种临时文件,所有用户均可访问
/var ubuntu sudoers 保存_服务器_02存放系统运行中经常改变的文件,如系统日志
/runubuntu sudoers 保存_服务器_02

2.文件类型和文件权限

Linux将文件分为以下几种:

  • 普通文件ubuntu sudoers 保存_ubuntu sudoers 保存_15"-"
  • 目录文件ubuntu sudoers 保存_ubuntu sudoers 保存_15"d"
  • 管道文件ubuntu sudoers 保存_ubuntu sudoers 保存_15"p"
  • 链接文件ubuntu sudoers 保存_ubuntu sudoers 保存_15"l"
  • 设备文件(块设备"b",字符设备"c")
  • 套接字文件ubuntu sudoers 保存_服务器_19"s"

Linux有一点不同于Windows的是不以文件的后缀名区别文件类型,而是在文件属性中专门一列来记录文件类型(使用命令ls -l)。

ubuntu sudoers 保存_文件名_20

在文件类型后面紧跟着的是文件权限。

ubuntu sudoers 保存_ubuntu_21

  • r ubuntu sudoers 保存_ubuntu sudoers 保存_15读权限ubuntu sudoers 保存_ubuntu sudoers 保存_15值:4
  • wubuntu sudoers 保存_ubuntu sudoers 保存_15写权限ubuntu sudoers 保存_ubuntu sudoers 保存_15值:2
  • x ubuntu sudoers 保存_ubuntu sudoers 保存_15可执行权限 值:1
  • ubuntu sudoers 保存_ubuntu sudoers 保存_15无权限ubuntu sudoers 保存_ubuntu sudoers 保存_15值:0
  1. ubuntu sudoers 保存_ubuntu sudoers 保存_15u:表示文件属主的访问权限
  2. ubuntu sudoers 保存_ubuntu sudoers 保存_15g:表示文件同组用户的访问权限
  3. ubuntu sudoers 保存_ubuntu sudoers 保存_15o:表示其他用户的访问权限

3.文件权限修改命令 chmod

两种方式修改文件权限。

3.1文字设定法

u表示属主,g表示同组,o表示其他,a表示所有;"+“表示增加权限,”-"表示去掉权限。

ubuntu sudoers 保存_ubuntu sudoers 保存_32

3.2数字设定法

权限由三位数字组成,每一位数字代表一种角色的权限,每个角色的数值由其所具有的权限对应的数字之和构成。

ubuntu sudoers 保存_服务器_33

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

ubuntu sudoers 保存_服务器_34

ubuntu sudoers 保存_文件名_35

ubuntu sudoers 保存_ubuntu_36

ubuntu sudoers 保存_ubuntu_37

最终输出内容解释

UID    //用户ID
PID    //进程标识符
PPID   //父进程标识符
LWP    //线程标识符
C      //CPU使用率
NLWP   //线程数量
STIME  //进程启动的时间
TTY    //与进程相关的终端,若无相关的终端显示 ? 号
TIME   //运行时间
CMD    //进程启动时使用的命令

7.2.kill 结束或挂起一个进程

-9    //强制结束进程
-STOP  //挂起进程

7.3.& 后台运行程序

终端下的命令默认会在前台执行,在命令后面添加 & 可以使命令在后台执行。

7.4.jobs 显示当前终端中的任务

ubuntu sudoers 保存_文件名_38

7.5.前后台切换 bg fg

bg 任务号    //唤醒挂起的进程在后台执行,任务号由命令 jobs 查看
fg 任务号    //将后台运行的或挂起的进程挪到前台执行

7.6.top 查看系统资源使用情况及进程信息

ubuntu sudoers 保存_文件名_39

8.gcc的使用

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

汇编阶段,将汇编指令翻译为二进制格式,生成section和符号表。
4. 链接

gcc main.o -o main

链接阶段,合并各个段,符号解析,符号重定位。
gcc一步编译链接

gcc main.c -o main

9.makefile文件和make命令

makefile文件用于自动化编译程序,对三个文件进行编译 add.c max.c main.c

ubuntu sudoers 保存_ubuntu sudoers 保存_40

gcc 命令前必须用 table 键进行缩进

ubuntu sudoers 保存_linux_41

make命令会根据makefile文件的规则生成可执行程序,命令 make clean 用于清除中间文件和最终的可执行文件。

ubuntu sudoers 保存_服务器_42

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	//调试追踪子进程