Linux八股文

Linux八股文

第一章 Linux简介

Linux是一种多用户、多任务,支持多线程和多CPU的操作系统,具有免费、稳定、高效的优点,一般运行在大型服务器上。

1.1 常用目录

目录 说明
/ 根目录,有且仅有一个,一般只存放目录
/home 家目录,新增用户时,放在此目录下
/root 系统管理员root的家目录
/bin/user/bin 可执行二进制文件的目录
/etc 系统配置文件存放的目录
/media 光盘默认挂载点
/tmp 一般用户或正在执行的程序临时存放文件的目录
/var 存放不断扩充的东西,经常被修改的目录存放在此,包括日志文件

1.2 [root@localhost ~]#

  1. @之前是当前登录用户
  2. localhost是主机名(即开发机的名字)
  3. ~当前所在目录(此时为家目录,而/是根目录)
  4. #是用户表示(#为超级用户,$是普通用户)

1.3 Linux命令写法

shell 复制代码
命令名 [选项] [参数]
  1. 命令名:功能的单词或缩写
  2. 选项:对命令进行控制,可以省略;格式为-字母-单词字母,并且可以合并(如-a-b可以合并为-ab
  3. 参数:传给命令的参数,可以是0个、1个或多个

第二章 Linux基础命令

2.1 pwd

功能:显示当前用户所在目录

shell 复制代码
pwd

2.2 ls

功能:

  1. 对于目录:ls将列出该目录下所有子目录与文件

  2. 对于文件:ls将列出文件名及其他信息

    ls [选项] [目录或文件]

选项 说明
-a 查看当前目录下的文件,包括隐藏文件
-l 长格式显示文件
-lh 以方便阅读的长格式显示

2.3 cd

功能:改变工作目录,将当前工作目录改变到指定目录下

shell 复制代码
cd [目录名]
命令 说明
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd ~ 返回家目录
cd / 切换根目录
cd /home/chaopro/data 绝对路径
cd ./data 相对路径

2.4 man

功能:连机查找指令用法

shell 复制代码
man 指令

2.5 grep

功能:用于查找文件里符合条件的字符串

shell 复制代码
grep [选项] '字符串' 文件名
选项 说明
-a 将binaray文件以text文件的方式查找数据
-c 计算找到'查找字符串'的次数
-i 忽略大小写
-v 反向选择,即显示出没有'查找字符串'的行

2.6 find

功能:在指定目录下查找文件

shell 复制代码
find [路径] [选项]
选项 说明
-name test 查询名为text的文件
-size +100k 文件大于100k的文件
-ctime n 过去n天被修改过的文件

2.7 chmod

功能:控制用户对文件的权限

shell 复制代码
chmod [选项] 文件名
选项 说明
-r 赋予读权限
-w 赋予写权限
-x 赋予执行权限
777 赋予读、写、执行权限(读:4,写:2,执行:1)

说明:(以-rw-r--r-x的权限为645为例)

  • 权限显示位共10位,分为4段,从第2位开始,每3个一组
  1. 第1位为文件类型(-表示普通文件)
  2. 第2-4位为用户权限(rw-:4+2=6)
  3. 第5-7位为用户所属组权限(r--:4)
  4. 第8-10位为其他用户权限(r-x:4+1=5)

2.8 ps

功能:用来列出当前正在运行的进程

shell 复制代码
ps [选项]
选项 说明
-A 列出所有进程(!)
-ef 查看全格式的所有进程(!)
-w 显示加宽可以显示较多资讯
-au 显示较详细的咨询
-aux 显示所有包含其他使用者的进程

2.9 kill

功能:用于删除执行中的程序或工作

shell 复制代码
kill [选项]/[信号] 进程号
选项 说明
-l 列出全部的信息名称
-s 指定要送出的信息
信号 说明
-1(HUP) 重新加载进程
-9(KILL) 杀死进程
-15(TERM) 正常停止一个进程

2.10 tail

功能:查看测试项目的日志:一般测试项目中有log目录文件会存放xxx.out文件,可以用tail -f动态实时查看日志

shell 复制代码
tail [选项] 文件名
选项 说明
-f 实时读取
-1000 查看最近1000行日志

例子

shell 复制代码
tail -f /opt/usr/log/momenta/mff_main_node.log.(⾃动补全Tab键) | grep -i objectdisp

2.11 netstat命令

功能:查看端口

shell 复制代码
netstat -anp | grep 端口

-a,显示所有
-n,不用别名显示,只用数字显示
-p,显示进程号和进程名

2.12 data

功能: 查看当前系统时间

shell 复制代码
data

2.13 ping

功能:检测是否与主机连通

shell 复制代码
ping ip地址

2.14 如何查未知命令

shell 复制代码
man 命令名
命令 -help
info cat 命令名
whatis 命令名
上网查

第三章 文件操作命令

3.1 mkdir

功能:创建空目录

shell 复制代码
mkdir [选项] [路径] 文件名
选项 说明
-p 层级创建
-v 显示创建顺序

3.2 rmdir

功能:删除空目录,但不能删除非空目录,也不能删除文件

shell 复制代码
rmdir [选项] [路径] 目录名
选项 说明
-p 子目录被删除后,如果父目录也变成空目录的话就连带父目录删除

3.3 touch

功能:新建空文件

shell 复制代码
touch [路径] 文件名

3.4 rm

功能:删除文件或目录

shell 复制代码
rm [选项] 文件名
选项 说明
-f 强制删除
-r 多级删除
-rf 强制删除给定目录下所有文件和目录

rm和rmdir的区别:

  • rmdir只能删除空目录,不能删除文件
  • rm带上选项-r可以删除非空目录

3.5 mv

功能:移动文件

shell 复制代码
mv [选项] [路径] 旧文件名 [新路径] [新文件名]
选项 说明
-f 如果目标文件已存在,不会询问直接覆盖
-i 如果目标文件存在,会询问是否覆盖

3.6 cp

功能:复制文件或目录

shell 复制代码
cp [选项] [路径] 旧文件名 [新路径] [新文件名]
选项 说明
-f或--force 强制复制,无论目标文件或目录是否存在
-i或--interactive 覆盖前会询问
-r 递归处理,将指定目录下的文件与子目录一并处理,若源文件或目录的形态不属于目录或符号连接,则一律视为普通文件处理
-R或--recursive 递归处理,将指定目录下的文件与子目录一并处理

3.7 cat

功能:查看目标文件的内容

shell 复制代码
cat [选项] 文件名
选项 说明
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行

3.8 tar

选项 说明
-c --create 建立新的备份文件;
-C --directory= 切换到指定的目录;
-f --file= 指定备份文件(注意:-f 是最后的参数,只能接文件名);
-r --append 新增文件到已存在的备份文件的结尾部分;
-u --update 仅置换较备份文件内的文件更新的文件;
-v --verbose 显示指令执行过程;
-x --extract或--get 从备份文件中还原文件;
-z --gzip或--ungzip 通过gzip指令处理备份文件;
shell 复制代码
tar -xvf file.tar //解压 tar包

tar -xzvf file.tar.gz //解压tar.gz

tar -xjvf file.tar.bz2   //解压 tar.bz2

tar -xZvf file.tar.Z   //解压tar.Z

unrar e file.rar //解压rar

unzip file.zip //解压zip

第四章 vim使用教程

4.1 vim三种模式

  1. 命令模式:删除、复制、粘贴
  2. 编辑模式:编辑文本内容
  3. 末行模式:保存、退出

4.2 vim三种打开方式

shell 复制代码
// 1.常规打开:vim ⽂件路径
vim mff_config.json

// 2.打开时定位到指定行:vim +行数 文件路径
vim +3 mff_config.json

// 3.打开时⾼亮关键词:vim +/关键词 文件路径
vim +/is_hnp_switch_ignore mff_config.json 

4.3 命令模式

打开文件后默认即为命令模式,从其他模式切换回命令模式按Esc

1、移动光标(光标高亮部分表示位于前⼀个字符的后面)

操作 说明
h或← 光标左移1个单位
l或→ 光标右移1个单位
k或↑ 光标上移1个单位
j或↓ 光标下移1个单位
shift+6 光标移动到行首
shift+4 光标移动到行尾
gg 光标移动到首行头
G 光标移动到尾行头

2、搜索替换

操作 说明
/字符串+回车 向下搜索指定字符串
n 继续向下搜索
?字符串+回车 向上搜索指定字符串
N 继续向上搜索
:%s/word1/word2/g 将文件中的word1替换成word2
:%s/word1/word2/gc 将文件中的word1替换成word2,需要用户确认

3、删除复制粘贴

操作 说明
x 删除后⼀个字符
X 删除前⼀个字符
dd 剪切一行
yy 复制一行
p 粘贴到下一行
P 粘贴到上一行
u 撤回

4.4 编辑模式

操作 说明
i 输⼊模式,左下角显示‒INSTER‒
o 在光标下插一行并进入输入模式,左下角显示‒INSTER‒
R 取代模式,输入的值会取代光标所在的内容

4.5 末行模式

操作 说明
:w 保存
:q 退出
:wq 保存并退出
:q! 不保存强制退出
:set nu 显示行号
:set nonu 不显示行号
:w 文件名 将编辑后的内容保存到另⼀个文件中

第五章 GCC/G++编译和GDB调试

5.1 gcc和g++误区

两者都为GNU编译器

  1. 误区一:gcc只能编译c,g++只能编译c++

    • 后缀为.c的,gcc视为c程序,而g++视为c++程序

    • 后缀为.cpp的,gcc和g++都视为c++程序

    • 在编译阶段,gcc命令不能自动和c++程序使用的库链接,通常用g++来完成链接,故为了统一就用g++了

  2. 误区二:gcc不会定__cpluscplus宏,而g++会

    • 如果后缀是.c且用gcc编译则宏是未定义的,其余情况都是定义的(即后缀为.cpp用gcc编译会定义该宏)
  3. 误区三:编译只能用gcc,链接只能用g++

    • 实际上编译可以用gcc/g++,链接可以用g++或者gcc -lstdc++

5.2 编译指令

shell 复制代码
gcc test.c -E -o test.i  // 该操作为预处理,即将源文件的头文件展开,通过-E进行预处理,其中-o是命名操作
gcc test.i -S -o test.s  // 该操作为编译,即将预处理后的源代码变成汇编,通过-S进行编译
gcc test.s -C -o test.o  // 该操作为汇编,即将汇编代码变为机器码(0、1)
gcc test.c  // 直接获得最后的out文件,其实经历了上面三个步骤。默认生成的文件名为a.out
./a.out  // 运行该out程序

5.3 Makefile

  1. Makefile的特点

    • Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译 ,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile 文件就像一个 Shell 脚本一样,也可以执行操作系统的命令

    • Makefile文件一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

  2. 命名

    • 文件命名为makefileMakefile,使用vim打开上述文件并进行编辑(注意不用新建这个文件,直接vim即可)
    shell 复制代码
    vim Makefile
  3. 书写方法

  • 常规编写方法与案例(编写完成并保存后,在shell中输入make就可以运行Makefile文件)
shell 复制代码
目标:依赖
	命令
app:sub.c add.c mult.c div.c main.c
	gcc sub.c add.c mult.c div.c main.c -o app
  • 如果依赖存在则执行;如果不存在,则向下检查其他规则,检查有没有规则是用来形成依赖的,如果找到了则执行(如下代码)。
  • Makefile中的其它规则一般都是为第一条规则服务的,make默认执行第一条规则,如果下面的规则和第一条规则无关则不会执行
shell 复制代码
app:sub.o add.o mult.o div.o main.o
        gcc sub.o add.o mult.o div.o main.o -o app

sub.o:sub.c
        gcc -c sub.c -o sub.o

add.o:add.c
        gcc -c add.c -o add.o

mult.o:mult.c
        gcc -c mult.c -o mult.o

div.o:div.c
        gcc -c  div.c -o div.o

main.o:main.c
        gcc -c  main.c -o main.o
  • 变量的使用

    • %通配符,匹配一个字符串,例如:

    • 自定义变量:变量名=变量值,例如var=hello

    • 预定义变量(已经定义好了)

变量名 变量值
CC gcc
CXX g++
shell 复制代码
#定义变量
src=sub.o add.o mult.o div.o main.o
target=app

$(target):$(src)
        $(CC) $(src) -o $(target)

sub.o:sub.c
        gcc -c sub.c -o sub.o

add.o:add.c
        gcc -c add.c -o add.o

mult.o:mult.c
        gcc -c mult.c -o mult.o

div.o:div.c
        gcc -c  div.c -o div.o

main.o:main.c
        gcc -c  main.c -o main.o

5.4 GDB调试

  1. 调试前
  • 编译时一定要打开调试选项(-g),其作用是在可执行文件中加入源代码的信息 ,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证 gdb 能找到源文件(即源文件与可执行文件在一个文件夹下)
shell 复制代码
gcc -g program.c -o program
  1. 启动、退出、查看代码
  • 启动:gdb 可执行程序,退出:quit/q
  • 给程序设置参数:set args 10 20, 获取设置参数:show args
  • 查看当前文件代码:list(按enter默认执行上一条命令)
shell 复制代码
list/l  (默认位置即从main函数的第1行显示到第10行)

list/l 行号   (该行号显示在正中间)
list/l 函数名   (该函数显示在中间)
  • 查看其他文件代码
shell 复制代码
list/l 文件名:行号
list/l 文件名:函数名
  • 查看/设置list行数
shell 复制代码
show list/listsize
set list/listszie 行数
  1. 断点操作
  • 设置断点(将断点设置在这一行的开始,即程序走到这里,该还还未执行)
shell 复制代码
break/b 行号
break/b 函数名
break/b 文件名:行号
break/b 文件名:函数名
  • 查看断点信息
shell 复制代码
info/i break/b
  • 删除断点
shell 复制代码
delete/del/d 断点编号,编号在断点信息的Num字段
  • 设置断点无效/有效
shell 复制代码
disable 断点编号,这条命令可从查看断点信息的Enb字段查看
enable 断点编号
  • 设置条件断点(一般是循环位置)
shell 复制代码
break/b 10 if i==5,即在第10行加条件断点
  1. 调试命令
  • 运行
shell 复制代码
start 程序会停在第一行,不会继续执行
run 遇到断点才停,如果没有断点则一次性执行完,经常使用run而非start
  • 继续运行,直到下一个断点
shell 复制代码
c/continue
  • 向下执行一行(不会进入函数体)
shell 复制代码
n/next
  • 变量操作
shell 复制代码
p/print 变量名(打印变量值)
ptype 变量名(打印变量类型)
  • 向下单步调试(遇到函数进入函数体)
shell 复制代码
s/step(不同于n)
finish(跳出函数体,前提是函数体中无断点)

until (跳出循环,前提是循环中无断点)
  • 自动变量设置
shell 复制代码
display 变量名(自动打印指定变量的值)
i/info display 查看自己设置的自动变量
undisplay 编号,删除自动变量
相关推荐
007php0073 小时前
linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
linux·运维·服务器·ubuntu·centos·php·ai编程
人类群星闪耀时3 小时前
深度学习在灾难恢复中的作用:智能运维的新时代
运维·人工智能·深度学习
djykkkkkk4 小时前
ubuntu编译遇到的问题
linux·运维·ubuntu
LinkTime_Cloud4 小时前
GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
大数据·运维·gitlab
qq_429856574 小时前
linux 查看服务是否开机自启动
linux·运维·服务器
就爱学编程4 小时前
重生之我在异世界学编程之C语言:数据在内存中的存储篇(下)
java·服务器·c语言
Smile丶凉轩5 小时前
Docker核心技术和实现原理
运维·docker·容器
清风细雨_林木木5 小时前
Docker使用——国内Docker的安装办法
运维·docker·容器
运维&陈同学5 小时前
【Kibana01】企业级日志分析系统ELK之Kibana的安装与介绍
运维·后端·elk·elasticsearch·云原生·自动化·kibana·日志收集
7yewh5 小时前
Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02
linux·arm开发·驱动开发·嵌入式硬件·嵌入式