• 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命令写法

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

    第二章 Linux基础命令

    2.1 pwd

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

    pwd
    
    • 1

    2.2 ls

    功能:

    1. 对于目录:ls将列出该目录下所有子目录与文件
    2. 对于文件:ls将列出文件名及其他信息
    ls [选项] [目录或文件]
    
    • 1
    选项说明
    -a查看当前目录下的文件,包括隐藏文件
    -l长格式显示文件
    -lh以方便阅读的长格式显示

    2.3 cd

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

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

    2.4 man

    功能:连机查找指令用法

    man 指令
    
    • 1

    2.5 grep

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

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

    2.6 find

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

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

    2.7 chmod

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

    chmod [选项] 文件名
    
    • 1
    选项说明
    -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

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

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

    2.9 kill

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

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

    2.10 tail

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

    tail [选项] 文件名
    
    • 1
    选项说明
    -f实时读取
    -1000查看最近1000行日志

    例子

    tail -f /opt/usr/log/momenta/mff_main_node.log.(⾃动补全Tab键) | grep -i objectdisp
    
    • 1

    2.11 netstat命令

    功能:查看端口

    netstat -anp | grep 端口
    
    -a,显示所有
    -n,不用别名显示,只用数字显示
    -p,显示进程号和进程名
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.12 data

    功能: 查看当前系统时间

    data
    
    • 1

    2.13 ping

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

    ping ip地址
    
    • 1

    2.14 如何查未知命令

    man 命令名
    命令 -help
    info cat 命令名
    whatis 命令名
    上网查
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第三章 文件操作命令

    3.1 mkdir

    功能:创建空目录

    mkdir [选项] [路径] 文件名
    
    • 1
    选项说明
    -p层级创建
    -v显示创建顺序

    3.2 rmdir

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

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

    3.3 touch

    功能:新建空文件

    touch [路径] 文件名
    
    • 1

    3.4 rm

    功能:删除文件或目录

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

    rm和rmdir的区别:

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

    3.5 mv

    功能:移动文件

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

    3.6 cp

    功能:复制文件或目录

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

    3.7 cat

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

    cat [选项] 文件名
    
    • 1
    选项说明
    -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指令处理备份文件;
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    第四章 vim使用教程

    4.1 vim三种模式

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

    4.2 vim三种打开方式

    // 1.常规打开:vim ⽂件路径
    vim mff_config.json
    
    // 2.打开时定位到指定行:vim +行数 文件路径
    vim +3 mff_config.json
    
    // 3.打开时⾼亮关键词:vim +/关键词 文件路径
    vim +/is_hnp_switch_ignore mff_config.json 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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 编译指令

    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程序
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5.3 Makefile

    1. Makefile的特点

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

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

    2. 命名

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

    • 常规编写方法与案例(编写完成并保存后,在shell中输入make就可以运行Makefile文件)
    目标:依赖
    	命令
    app:sub.c add.c mult.c div.c main.c
    	gcc sub.c add.c mult.c div.c main.c -o app
    
    • 1
    • 2
    • 3
    • 4
    • 如果依赖存在则执行;如果不存在,则向下检查其他规则,检查有没有规则是用来形成依赖的,如果找到了则执行(如下代码)。
    • Makefile中的其它规则一般都是为第一条规则服务的,make默认执行第一条规则,如果下面的规则和第一条规则无关则不会执行
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 变量的使用

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

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

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

    变量名变量值
    CCgcc
    CXXg++
    #定义变量
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    5.4 GDB调试

    1. 调试前
    • 编译时一定要打开调试选项(-g),其作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证 gdb 能找到源文件(即源文件与可执行文件在一个文件夹下)
    gcc -g program.c -o program
    
    • 1
    1. 启动、退出、查看代码
    • 启动:gdb 可执行程序,退出:quit/q
    • 给程序设置参数:set args 10 20, 获取设置参数:show args
    • 查看当前文件代码:list(按enter默认执行上一条命令)
    list/l  (默认位置即从main函数的第1行显示到第10行)
    
    list/l 行号   (该行号显示在正中间)
    list/l 函数名   (该函数显示在中间)
    
    • 1
    • 2
    • 3
    • 4
    • 查看其他文件代码
    list/l 文件名:行号
    list/l 文件名:函数名
    
    • 1
    • 2
    • 查看/设置list行数
    show list/listsize
    set list/listszie 行数
    
    • 1
    • 2
    1. 断点操作
    • 设置断点(将断点设置在这一行的开始,即程序走到这里,该还还未执行)
    break/b 行号
    break/b 函数名
    break/b 文件名:行号
    break/b 文件名:函数名
    
    • 1
    • 2
    • 3
    • 4
    • 查看断点信息
    info/i break/b
    
    • 1
    • 删除断点
    delete/del/d 断点编号,编号在断点信息的Num字段
    
    • 1
    • 设置断点无效/有效
    disable 断点编号,这条命令可从查看断点信息的Enb字段查看
    enable 断点编号
    
    • 1
    • 2
    • 设置条件断点(一般是循环位置)
    break/b 10 if i==5,即在第10行加条件断点
    
    • 1
    1. 调试命令
    • 运行
    start 程序会停在第一行,不会继续执行
    run 遇到断点才停,如果没有断点则一次性执行完,经常使用run而非start
    
    • 1
    • 2
    • 继续运行,直到下一个断点
    c/continue
    
    • 1
    • 向下执行一行(不会进入函数体)
    n/next
    
    • 1
    • 变量操作
    p/print 变量名(打印变量值)
    ptype 变量名(打印变量类型)
    
    • 1
    • 2
    • 向下单步调试(遇到函数进入函数体)
    s/step(不同于n)
    finish(跳出函数体,前提是函数体中无断点)
    
    until (跳出循环,前提是循环中无断点)
    
    • 1
    • 2
    • 3
    • 4
    • 自动变量设置
    display 变量名(自动打印指定变量的值)
    i/info display 查看自己设置的自动变量
    undisplay 编号,删除自动变量
    
    • 1
    • 2
    • 3
  • 相关阅读:
    172版本关闭背钻后自动添加反盘和禁布的功能
    【数据结构】堆(万字详解)
    PaddleOCR 服务化部署(基于PaddleHub Serving)
    TypeScript编译选项
    企业如何做好供应链管理工作?8个步骤及应用详解!
    叠氮标记荧光Cy3-叠氮Cyanine3 azide 非磺化染料 CY3 azide结构式图谱来了
    用于快速数字化转型的 7 大可观察性工具
    高精度加减乘除小数详解
    帆软 多条件参数动态查询,有参数查没参数为空
    go实现优先级channel
  • 原文地址:https://blog.csdn.net/weixin_52341045/article/details/134459938