【Linux】期末复习

发布于:2024-06-04 ⋅ 阅读:(55) ⋅ 点赞:(0)

《Linux程序设计》各章知识点梳理
第1章

  1. 软件包的管理方式方面,Ubuntu、CentOS的差异
    Ubantu使用APT,CentOS使用YUM

  2. 如何添加一个新用户?
    Useradd new_user_name

  3. 什么是Shell?
    Shell 是一个用 C 语言编写的程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

  4. 如何查看一条命令的帮助文档?
    man 命令

  5. ls命令的各种选项

  6. -l(长格式):以长格式列出信息,包括文件权限、所有者、大小和最后修改时间。
    ls -l

  7. -a(所有文件):显示所有文件和目录,包括以点(.)开头的隐藏文件。
    ls -a

  8. -h(易读格式):与 -l 结合使用时,以易读的格式显示文件大小(例如,以 K、M 或 G 显示)。
    ls -lh

  9. -t:按修改时间排序,通常与 -l 结合使用。
    ls -lt

  10. -d:仅显示目录本身的信息,而不是目录内容。
    ls -d mydir

  11. -p:在每个文件或目录名后添加一个斜杠(/),以区分文件和目录。
    ls -p

  12. -i:显示文件的 inode 号。
    ls -i

  13. 建立、复制、删除目录
    建立:mkdir
    复制:cp -r src dst
    删除:rm -r(通用)、rmdir(删除空目录)

  14. cd命令,如何进入特定的目录,例如主目录、上一层目录等?
    进入主目录:Cd ~
    进入上一层:cd …

  15. chmod命令,修改权限
    chmod 777

  16. grep与正则表达式
    头,$尾,[a-z],[a-z]非

  17. sort命令
     sort filename.txt
    将 filename.txt 文件中的行输出到标准输出,按字典序排序。

  18. wc命令,管道的使用
    wc -l 统计行数
    wc -c 统计字节
    wc -m 统计字符
    wc -w 统计单词
    管道:|

  19. pwd与PWD
    pwd 是一个命令,显示当前目录
    PWD 是环境变量,显示的也是当前目录的完整路径

  20. 各种压缩命令,特别是tar命令
     文件归档
    tar [cx][zj][v]f filename [filelist]
    • c: 创建归档
    • x:展开归档
    • z:调用gzip对归档压缩/解压
    • j:调用bzip2对归档压缩/解压
    • v:显示冗余信息

  21. find命令
     find — 文件搜索
    find [目录] [选项] [动作]
    • -name 按名称查找,可以使用通配符,但必须使用引号括起来
    • -type 按类型查找
    • -exec 将查找到的目标进行进一步处理,exec后跟随处理命令,命令中通过 {} 引用被找的文件,而且命令必须以 “ ;”结束

  22. mv命令,移动与改名
    移动到不存在的文件就是改名

  23. ln 与 ln -s,符号链接文件与硬链接文件的区别?
    符号链接(ln -s):是一种独立的文件,创建时源文件可以不存在,可以跨文件
    名称 命令 类型 源文件 跨文件系统 备注
    符号链接 ln -s 独立文件 可以不存在 可以
    硬链接 ln 与源文件共享一个inode 必须存在 不可以 不能给目录创建硬链接

  24. head tail cat more
     more 命令用于分页查看文件内容。它一次显示一页内容,你可以按回车键查看下一页,或使用空格键查看下一页的下一行。
     less 命令是一个更强大的 more 命令版本,它允许你前后翻页,并且可以搜索文本。less 也可以用来查看压缩文件和管道输出。
     head 命令用于显示文件的开始部分,默认情况下显示前 10 行。
     tail 命令用于显示文件的末尾部分,默认情况下显示最后 10 行。

  25. bc计算,与echo命令搭配,如何做计算?如何做小数或浮点数的运算?
    qiao@qiao-virtual-machine:~/workspace$ echo “scale=3; (12.3 + 4.56) * 7.8” | bc
    131.508

  26. ps -l命令、ps -ef命令
     查看进程—ps
    ps [-lauxwm]
    • l:以长列表形式显示
    • w:以加宽格式显示
    • a:显示所有用户进程
    • u:按用户名和启动时间的顺序显示进程
    • x:显示无控制台进程
    • ef:全部进程+完整信息
    常用组合:-aux 显示所有进程
     进程监控—top

  27. who、free
    who:显示当前在线用户
    free:显示内存信息

  28. kill命令及kill函数(C语言)
    命令:kill -SIGKILL PID
    C语言:int kill(pid_t pid, int sig);

  29. 大写的PWD、PATH、HOME、USER分别表示什么含义?
     PWD:当前工作目录路径
     PATH:命令执行路径
     HOME:用户主目录
     USER:用户登录名

  30. Shell元字符*、?、[]、{}、~的使用方法

  31. 重定向> >> < ,命令的后台执行、顺序执行分别用什么?

: 输出重定向,会清空文件内容

输出重定向,不会清空文件内容
< 输入重定向
后台执行:&
顺序执行:管道,分号隔开

  1. vim有哪几种工作模式?命令模式、末行模式的各种基本操作
    三种:输入模式,上述两种
    命令模式:dd删除、p粘贴、yy复制
    末行模式:wq保存退出、q不保存退出、q!强制退出

  2. Linux文件系统中,有一些默认的目录,例如/etc、/dev等,它们分别存放什么文件?
    /etc: 存放配置文件
    /dev: 存放设备文件

  3. /etc/passwd是什么文件?文件的内容有哪些?
    存放用户信息

  4. 如何利用管道将多个命令连接起来完成一个指定的任务,例如“统计所有普通文件所含有的字符数”、“统计所有普通文件的个数”
    cat file_name | wc -m
    find -type f | wc -l
    第2章

  5. bash脚本的第一行
    幻数,内核程序用以标识这是脚本程序

  6. shell脚本中,$0 $1 $2 $# $* $?的含义
    变量名 含义
    $? 最后一次执行命令的返回码
    $$ 当前脚本自己的PID
    $# 命令行参数的个数
    $0 脚本文件本身的名字
    $1, 2 … 第一、第二个命令行参数“ 2… 第一、第二个命令行参数 “ 2第一、第二个命令行参数*” 将所有命令行参数作为一个整体单词看待
    “$@” 将命令行参数作为多个单词看待

  7. Shell编程例题
    #!/bin/bash 幻数
    echo -n enter filename: 不输出换行符,打印enter filename
    read fname 读入文件名存入fname
    echo -n enter words:
    read words
    echo w o r d s 2 > / d e v / n u l l > words 2>/dev/null > words2>/dev/null>fname输出刚读入的words,不输出错误信息,将words内容重定向到fname
    if [ $? –eq 0 ]如果上一条echo命令的返回码为0(也就是成功执行)
    then
    echo Write successfully
    else
    echo write error
    fi

  8. 知道()、{}、[]、[[]]、 (())的使用方法  () 子shell中执行  如果是arr=(1,2,3),那就是数组赋值  {} 本shell中执行、声明数组、{1..4}生成1-4  上述两个都可以成组命令,使用 && 、||  [] 测试条件  [[]] 更复杂的条件测试,可以对于字符串操作、算数比较  命令替换
     (()) 执行算术运算

  9. echo “ i ”与 e c h o ‘ i” 与 echo ‘ iechoi’的执行结果的区别
    “” 会替换i变量的值,’’ 不会

  10. read命令,read $xyz是否正确?
    错误,read读入的应该是变量,而不是环境变量

  11. 牢固掌握if语句的用法

  12. shell下如何做字符串拼接?
    echo “$word1 $word2”

  13. 如何判断一个变量是文件还是目录,-e -s的含义
     -f 普通文件 、-d 目录
     -s 文件大小非零
     -r 可读 -w 可写 -x 可执行
     -L/h 符号链接文件

  14. 字符串、表达式的比较

  15. for循环,for循环的C语言风格写法

  16. while循环,无限循环,怎么写?

  17. case语句

  18. break

  19. continue

  20. 数组,a=(one two three four)是什么含义?如何输出数组的每个元素?如何获取数组的元素个数?
    echo ${a[@]}
    echo “数组元素个数为: ${#my_array[@]}”

  21. 斐波那契数列的构造及其求和。

注:下列内容中,系统调用与函数在说法上没有加以区分。
第3章

  1. gcc -c的含义

  2. gcc编译过程包括哪些步骤,其中的链接步骤指的是什么?
     预处理(-E,*.i):宏替换
     编译(-S, *.s):C语言转为汇编代码
     汇编(-c, *.o):汇编代码转为机器代码
     链接(gcc):将机器代码和库文件链接

  3. 静态库与共享库的不同之处是什么?
    静态库:链接时,库成为代码的一部分
    共享库:运行时将库引用插入,库的代码不复制,需要用到时,操作系统加载

  4. make命令的功能、好处?makefile、Makefile的作用,基本结构?
    功能:自动化编译、
    好处: 节省时间
    结构:
    目标文件:依赖文件
    命令
    第4章

  5. 时间函数(asctime、localtime、time)的使用方法
     time_t time(time_t *t) 系统调用,返回自1970.1.1午夜以来流失的秒数。
     struct tm * localtime(const time_t * t)
     char * asctime(const struct tm *tp) 和 char * ctime(const time_t * t) 都是将指定时间转换为字符形式的时间,长度大概26个字母。

  6. tm结构的基本属性
    tm_mday tm_mon

  7. 如何在C语言中输出当前的时间?(不使用system或exec函数族)

  8. 什么是用户空间、什么是内核空间?
     系统调用在内核空间,是系统内核的所在区域
     库函数调用在用户空间,是普通程序的内存区域

  9. getenv函数与env命令
    都是获取环境变量
    第5章

  10. 什么是系统调用、什么是函数?
    系统调用:是面向硬件的调用,无缓冲区
    函数:是程序的api

  11. chmod函数

  12. umask函数的作用、umask命令的使用方法
    mode_t umask(mode_t cmask)
    修改当前进程环境的权限掩码为 cmask:八进制值
    返回修改之前的掩码。

  13. stat结构体与stat函数、stat命令的联系、各自的功能。
    Stat:描述文件其他属性。
    int stat(const char *path, struct stat *buf) 获取指定文件文件的属性信息,并填充到buf。

  14. 如何根据stat结构体获得文件的类型、权限等信息?
    先创建一个struct stat结构体,然后使用stat()函数,通过路径,传到stat结构体中。

  15. 文件描述符与文件指针的区别,各自的应用环境
    文件描述符(File Descriptor):是一个代表打开文件的整数,由操作系统分配。它用于在系统调用中引用文件。
    文件指针(File Pointer):是一个指向文件当前读取或写入位置的指针。它由程序内部维护,用于顺序访问。

  16. open、close、read、write要非常熟悉。读文件、读键盘、输出到屏幕、输出到文件操作要熟悉。
    open(path,flags):从path按照flags模式打开文件
    close()
    read(fd, buf, count):从fd中读取count字节到buf
    write():写入buf

  17. open文件时如果采用O_NONBLOCK方式,则后续的效果是怎么样的?
    非阻塞:如果打开不成功,立即返回

  18. open文件时,O_TRUNC、O_WRONLY是什么方式?
    清空、只读

  19. 如何利用C语言实现文件的复制?如何编写属于自己的命令程序,mycp ?
     先用open打开两个文件给予相应权限,一个read循环,在这个循环中进行write
     将可执行文件添加到$PATH后面

  20. opendir、readdir、closedir是用来做什么的?
    打开目录
    经常使用opendir获得一个目录,然后使用readdir进行while循环,其间使用structdirent* entry 进行读取名称,如果想获得其他属性,需要使用struct stat file_stat进行读取(一定不是指针),最后使用closedir

  21. 如何将指定目录下的文件或目录的详细信息(名称、类型、大小、修改时间等)列举出来?
    同11
    第6章

  22. 进程的基本概念
    进程是运行的程序,是动态的,是操作系统分配和调度资源的基本单位

  23. 如何获得进程的PID、PPID?
    Getpid()
    Getppid()
    unistd.h

  24. 熟练掌握fork函数的用法
    =0为子进程,>0为父进程,<0为出错

  25. 父子进程如何交替执行?
    Wait()、sleep()

  26. 什么是僵尸进程、什么是孤儿进程,由谁来回收?
    僵尸进程:一个进程已经终止,但是父进程未对其PCB进行释放
    孤儿进程:使用fork创建的子进程,父进程先于子进程销毁,由init/systemd回收

  27. sleep函数的作用?
    挂起进程,秒

  28. 如何避免僵尸进程,wait函数、waitpid函数的多种用法
    避免:在父进程中使用 wait() 或 waitpid() 函数来回收子进程的状态信息。

  29. 如何产生多个进程,而不发生僵尸进程,进程号之间彼此有什么关联?
    For循环产生,但是每个父进程都使用wait()等待子进程。
    子进程的ps中可以找到父进程pid

  30. WIFEXITED、WEXITSTATUS两个宏是用来做什么的?
    1->是否正常退出
    2->正常退出的返回值

  31. 什么是SIGCHILD信号,有什么作用?
    SIGCHILD 信号是当一个子进程结束时,操作系统发送给父进程的信号。

  32. 父进程如何给其子进程发送信号,通过什么函数?kill函数与raise函数的区别是什么?
    通过kill。
     区别:
     Kill可以发给任何程序,只要权限够
     Raise信号发给自己

  33. 守护进程的特点是什么?如何产生一个守护进程?产生守护进程的每个步骤的作用分别是什么?
     特点:
     长期运行在后台
     周期性执行任务
     产生 & 作用:
     创建子进程,终止父进程:子进程就是守护进程
     在子进程中创建新会话:确保守护进程不附属于任何会话,不拥有终端
     改变到安全的工作目录:防止目录被删除
     重设工作掩码:确保守护进程创建的文件有合适的权限
     关闭文件描述符:防止守护进程对终端的输出,以及避免文件描述符泄露,确保守护进程不会对用户的文件系统造成影响。

  34. 什么是进程组、什么是会话组?
    会话是一组进程的高级集合,会话中的进程共享一个会话 ID(SID)。

  35. 守护进程是孤儿进程吗?
    不是
     守护进程不会被回收
     也有父进程(init进程)

  36. 如何编写简单的守护进程?例如周期性地向指定文件中写入当前的最新时间、如何监督检查指定文件是否被修改过?

  37. system函数与exec函数族的使用方法,区别

  38. exec函数族中execl、execv在使用时,参数方面有何区别?

 exec函数族格式
 char *const ps_argv[] ={“ps”, “-o”, “pid,ppid,pgrp,session,tpgid,comm”, NULL};
 char *const ps_envp[] ={“PATH=/bin:/usr/bin”, “TERM=console”, NULL};
 execl(“/bin/ps”, “ps”, “-o”, “pid,ppid,pgrp,session,tpgid,comm”, NULL);
 execv(“/bin/ps”, ps_argv);
 execle(“/bin/ps”, “ps”, “-o”, “pid,ppid,pgrp,session,tpgid,comm”, NULL, ps_envp)
 execve(“/bin/ps”, ps_argv, ps_envp);
 execlp(“ps”, “ps”, “-o”, “pid,ppid,pgrp,session,tpgid,comm”, NULL);
 execvp(“ps”, ps_argv);

第7章

  1. 进程间通信的几种方式是什么?
    管道、System V IPC和套接字

  2. 用户进程对于信号响应的方式有哪些?如何编程实现?

  3. alarm函数
    int alarm(int second)
    设定一个定时器,在指定秒数后向进程自身发送一个SIGALRM信号,该信号默认处理是终止当前进程。

  4. signal函数的用法
    先定义signal_handler,进行信号处理;再使用signal(发生信号,处理函数)进行注册,然后使用。

  5. 当前进程如何在收到某一特定的信号(例如SIGINT)后,不执行默认的操作,转而执行自定义的操作?
    自定义操作函数,传入signal 的第二个参数

  6. SIGKILL与SIGSTOP的特殊性在哪里?SIGINT、SIGQUIT、SIGTERM的共同点是什么?
    SIGKILL 的特殊性
    • 不可捕捉:SIGKILL(信号编号 9)是一个强制杀死进程的信号,进程不能捕捉或忽略它。
    • 立即终止:接收到 SIGKILL 的进程将立即终止,不会执行任何清理操作。
    • 系统使用:通常由操作系统或 root 用户用来终止那些不响应其他信号的进程。
    SIGSTOP 的特殊性
    • 不可忽略:SIGSTOP(信号编号 19)用于暂停进程的执行,进程不能捕捉或忽略它。
    • 停止进程:进程接收到 SIGSTOP 后将停止运行,直到接收到 SIGCONT 信号恢复执行。
    • 单向通信:SIGSTOP 只能由发送者控制,接收进程无法控制何时恢复。
    SIGINT、SIGQUIT、SIGTERM 的共同点
    • 可捕捉:这些信号都可以被进程捕捉,进程可以定义自己的信号处理函数来响应这些信号。
    • 终止进程:它们的默认行为都是终止进程,但允许进程通过捕捉信号来执行清理操作。
    • 用户生成:这些信号通常由用户生成,例如 SIGINT 可以通过 Ctrl+C 生成,SIGQUIT 可以通过 Ctrl+\ 生成。
    • 默认行为:它们的默认行为是终止进程,但进程可以通过捕捉信号并执行特定的清理操作来改变这一行为。
    SIGINT
    • 中断信号:通常与 Ctrl+C 关联,用于请求进程终止。
    SIGQUIT
    • 退出信号:通常与 Ctrl+\ 关联,用于请求进程终止并生成核心转储(core dump),用于调试。
    SIGTERM
    • 终止信号:是一个通用的终止信号,用于请求进程正常终止并执行清理操作。

  7. 什么是管道?什么是匿名管道、什么是命名管道,各自的应用场景是什么?
     管道是Unix最早支持的IPC形式。
     匿名管道:只能在亲缘进程之间通信
     命名管道:借助于外存解除普通管道只能在同源进程使用的限制

  8. 如何利用pipe系统调用实现父子进程的管道通信?
     父进程关闭读端,fd[0],使用write向fd[1]中写
     子进程关闭写端,fd[1],使用read从fd[0]读

  9. 如何利用匿名管道让父进程写文件、子进程读文件?如何使用dup2函数让操作变得更简单?
     父进程关闭读端,fd[0],利用dup2(fd[0], 0)将管道写端和标准输出流连接
     子进程关闭写端,fd[1],利用dup2(fd[1], 1)将管道读端和标准输入流连接

  10. 命名管道文件的类型是以什么开头的?
    /dev/


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章