选择

Linux 概述

  1. 仍然在用的分时操作系统可以主要分三个家族,第一个是类UNIX,包括Linux,第二个是VMS以及后代的Windows,第三个是IBM专用大型机系统上的操作系统。那么,安卓呢?就是一种Linux

  2. 下面哪些部件不是一台物理上的字符终端必须具备的?磁盘存储器

  3. C语言编写的应用程序,通过printf打印一个换行符\n,但在终端上执行的是回车加换行\r\n,把换行符替换为回车换行是由下面哪个软件模块完成的?Linux内核中的行律模块

  4. 使用PuTTY或SecureCRT仿真终端登录Linux,将终端类型设置为linux,输入echo -e "\033[1;31mHello"命令后文字变为红色。输入哪个命令后,文字变为黄色?echo -e "\033[1;33mHello"

  5. 如果用SecureCRT或PuTTY登录这个云端Linux服务器,应该打开数据压缩功能。正确

  6. 终端仅仅是Linux主机的一个外部设备,不分担存储和计算工作。正确

  7. ‍传统的终端与Linux主机之间传输的是字节流。正确

  8. 终端转义序列的意义在于终端收到某一特定字符序列后执行一些约定好的控制功能,而不是把这些字符显示在显示器上。正确

  9. 在终端按下Ctrl-C按键一般会导致一个死循环程序中止运行,这是因为按下Ctrl-C之后终端并不向Linux输送字符,而是通过RS232接口的一条特殊信号线通知Linux主机,将进程终止。错误

  10. ‌ echo BUPT | md5sum b48c94

系统工具

  1. Linux超级用户的用户名为:root
  2. 了解系统当前的时间是几点几分,使用下列哪个命令?date
  3. ‌下面哪个命令可以获得某进程占用的逻辑内存大小?ps
  4. 下面哪个命令可以了解目前系统CPU的空闲情况?vmstat
  5. 使用more命令逐屏显示文本文件时,使得显示内容上滚一行而不是滚动一屏,应按下哪个键?Enter
  6. ‍Linux中用来实现计数功能,比如:统计系统有多少个登录用户,实现计数功能的命令是:wc -l
  7. Linux使用符号 | 连接两个命令使用管道机制,设计管道机制的目的是:将前一个命令的输出作为下个命令的输入,两个命令组合以提供更灵活的功能
  8. 系统在创建用户的时,可以指定这个用户登录成功后执行哪个命令,一般是shell,也可以是程序员自己开发的软件,甚至shutdown。正确
  9. Linux中超级用户的权限很大,可以读取普通用户的口令值。错误
  10. ps列出进程启动时间STIME和占用CPU的时间TIME,一般来说TIME值等于当前时间减STIME得数。错误
  11. Linux把物理终端,或者虚拟终端,都处理成设备文件。只要写这个设备文件,就会把数据发送到终端的显示屏幕上。正确
  12. ps命令显示进程占用内存的大小SZ,这表示该进程占用了多少物理内存。错误,逻辑内存
  13. ‍free命令报告处于free状态的内存非常低,这意味着系统内存配置不足。错误,是缓存,自动释放
  14. 一个应用程序的C语言源程序通过printf语句在标准输出输出信息,运行时只要使用输出重定向机制,不需要修改原先的程序加入文件操作的代码,就可以把输出结果存入指定名字的文件。正确
  15. less命令是more命令的一个简化版本,精简后功能比more弱,但更节约内存和CPU。错误,less is more
  16. 用户A为tee命令提供一个文件名abc.log,例如:abc | tee abc.log, 那么,通过管道的方式可以把前面abc命令的输出结果在当前终端上显示的同时也存入磁盘文件abc.log,可供事后查阅。如果以另外一个已登录用户B正在使用的终端的设备文件名(如/dev/pts/2)代替文件名abc.log,那么,这个abc命令执行时的输出就会同时在用户A和用户B两个终端上实时显示。把前面的abc命令换成vi也是完全可能的,用户B可以在自己终端上实时看到用户A终端上的编辑画面。正确
  17. 信息由一个个字节组成,tr命令处理这些信息时,可以将256种字节值中的255种取值“翻译”为另一个字节值,唯有字节值为0时无法转译,因为一个字节的8个比特全为零被用作字符串结尾。错误,256/256种
  18. 不带任何选项的uniq命令消除数据中重复的行。一旦某一行出现过,uniq会记录下来,以后无论这一行在以后什么地方再次出现,输出时都会被忽略,保证数据的唯一行。错误,相邻两行
  19. ‍信息由一个个字节组成,tr命令处理这些信息时,可以将256种字节值中的任何一种取值“翻译”为另一个字节值,并且不限于可打印字符之间的转译,比如把换行符替换为斜线。正确
  20. 用bc计算1000之内所有奇数的乘积。该乘积的最后四位数字是:5625

正则

  1. 下列哪个不是单字符正则表达式?*.*
  2. ‌可以与正则表达式A[i-k]*b[i]*c匹配的最短字符串长度为:3
  3. 能与正则表达式a.x[i-j]*b[i-j]匹配的字符串为:a-xibi
  4. 与字符串A1234不匹配的正则表达式有:A*4
  5. ‍grep和fgrep都可以从一个文本文件中搜索出指定的字符串。正确
  6. ‍fgrep,grep,egrep三个命令在指定待查找字符串的模式方面,依次越来越灵活,后面的命令可以覆盖前面命令的功能,并且模式描述的语法也是完全兼容的。错误
  7. 命令cat pm.txt | sed ‘s/\[[^][]\*]//g’ 可以把pm.txt中所有用方括号括起来的内容(包括方括号自身)类似“ [参考文献23] ”这样的字符串片段删除。正确
  8. grep可以筛选出包括某些特定模式的文本行,awk不仅可以筛出指定模式的行,还可以筛掉文本型表格中的部分列。正确
  9. ‌正则表达式<[^<>]*>可以匹配一个HTML格式数据中的诸如<span class="src-time">这样的用尖括号包裹起来的标签信息。正确
  10. awk是一门小型的文本数据处理语言,有类似C语言一样的语法,可以使用自定义的变量,变量之间可以进行算术运算、关系运算和逻辑运算,还可以进行正则表达式匹配运算,支持条件、循环等流程控制。正确

文本比较 vim

  1. ‍vi处于文本输入状态时,按下下列哪个按键可以返回命令状态?ESC
  2. ‍vi处于命令状态时,按下下列哪组按键可以把正在编辑的内容保存到磁盘上?:wq
  3. ‌ Linux终端按下Ctrl-S按键后,导致终端被锁死,必须按下下列哪个键才能恢复?Ctrl-Q
  4. 在windows中*.可以匹配所有文件,但在Linux有的文件名与.*不匹配,下列哪个不匹配?.bash_profile,必须中间有点
  5. md5sum计算出位于两台不同计算机上的两文件的校验和是相同的,我们就认为两个文件的内容是完全相同的,无论这两个文件有多大。两计算机之间仅交换16字节的校验和就可以完成文件内容的比较。正确
  6. ‌diff命令可以求出两个文件中的差异,无论文件是而二进制的数据文件,还是文本文件。错误,文本
  7. diff命令的输出有normal和unified等格式选择,无论哪种格式,都能表达出从一个文本文件迁移到另外一个文本文件需要增加,修改和删除哪些文本行。正确
  8. Linux与Windows系统文本文件的存储格式完全一样。错误
  9. 中文UTF-8编码是常见编码形式GBK编码的一个超集,是对GBK编码的扩展,完全兼容GBK。错误
  10. Linux文件名由若干字符构成,某些有特殊用途的字符,如:*|():等,不允许用做文件名。错误,除了/

文件管理 目录管理

  1. ‌ls –l未能列出下面哪个文件属性?文件占用多少存储空间,不完全等于文件长度
  2. 查找子目录src下所有后缀为.txt的文件执行dos2unix命令,把文件从Dos格式转换为Linux格式,正确的命令是:find src -name \*.txt –exec dos2unix {} \;
  3. ls与ls *的输出结果是一样的,都是列出当前目录下所有文件和子目录。错误,*会在shell中进行替换
  4. 命令cp src/*.[ch]可以把src目录下的C语言源程序文件拷贝到当前目录。错误
  5. rm命令的-f选项是force:“强制删除”,可能会将只读文件强制删除不给出任何提示。正确
  6. rm命令的–r选项是递归(recursion)的意思,-f是强制删除的意思,rm -rf *命令能把当前目录下的所有文件都删除。错误,.profile之类的文件与不匹配
  7. pwd和cd都是shell的内部命令,而且不可能设计成外部命令。错误,pwd是可以设计成外部命令
  8. cp命令的-r选项可以实现增量拷贝,也就是说,如果目的端文件存在并且最后一次修改时间晚于或者等于源端文件,那么这次拷贝动作被忽略,否则,就执行拷贝动作。错误,-u是增量
  9. 使用find命令的-exec选项启用一个命令处理符合条件的文件,比find结合xargs的方式,花费更多的CPU时间。正确
  10. tar命令输出文件的后缀必须符合规定,为.tar,.tar.gz, .tgz, .tar.bz2等,否则无法解包。错误,惯例而已

权限 Shell

  1. 修改已有文件的权限使用的命令是。chmod
  2. 进程新创建的文件的权限受下列哪个系统调用的影响?umask
  3. 在交互式bash的命令提示符下输入!v并按下回车,其功能是:引用历史机制,重复执行最近输入的以v开头的命令
  4. bash的重定向符<<<的作用是:将重定向符后面的单词作为这个命令的标准输入
  5. 在Linux中用户可以把他的某个文件设置为他本人不可以读、写、执行,但是与他同组的人可以读、可以执行,即使他是该组的成员之一也无法读取文件。正确
  6. Linux中如果文本文件具有可执行属性,那么运行时需要启动一个程序逐行解释执行文本文件(脚本)中的文本行。选择哪个程序解释脚本中的文本行,可以自包含在脚本程序中,而不是仅仅依靠文件名后缀选择解释程序。正确
  7. 对于目录来说,x权限没有意义。所以,一个目录有无x权限,不影响对目录的访问。错误
  8. 一个文件如果具有只读权限,也就是权限为r–r--r–,那么,不允许任何人修改这一文件的内容,也就意味着文件不可以被删除。错误
  9. 命令执行时在终端上显示的信息有些属于标准输出stdout,有些属于标准错误输出stderr。显示信息到底属于stdout还是stderr,这取决于命令提供者如何设计的程序,与操作员无关。正确
  10. ‌命令./myap 2>&1 | more可以把stderr合并到stdout并且每显示满一屏后暂停显示,等待操作员按键;类似的,命令./myap 2>&1 >myap.log可以把stderr合并到stdout,终端上不会再显示信息,本来在终端上显示的信息全部存入文件myap.log中。错误,./myap >myap.log 2>&1

替换 元字符 转义

  1. bash通过“替换”提供灵活性,下述哪个不属于基本bash替换。正则表达式替换
  2. 下列哪个字符不属于bash的元字符。,,元字符有 空格 制表符 回车 < > | ; $ & ` * [ ] ? \ ( )
  3. 下列哪个字符不属于bash的元字符。.
  4. DATABASE=/opt/data/puma,执行下列命令rm -rf $DATEBASE/*命令执行结果为:如果上述命令执行结束,那么系统将无法运行已安装好的软件中的建库命令,拼错了
  5. bash中的变量跟C语言中的变量不同,变量赋值和使用之前不需要变量类型定义,变量存储的内容只是字符串,字符串长度不定。正确
  6. bash变量有环境变量和局部变量两种类型,环境变量与全局变量一样,在其生命期内,某个进程对环境变量的修改结果其他进程可见。错误
  7. 无论是C语言编写的源程序经编译链接得到的可执行文件还是bash脚本,都能访问环境变量得到其取值,而环境变量的创建与赋值可以一直推迟到相关的可执行程序运行之前由操作员完成。正确
  8. 环境变量PATH的值有特别的含义,一般不会把当前目录.或者上一级目录…作为PATH的分量,主要是出于多用户环境下的安全考虑。正确
  9. ‌bash脚本程序的后缀必须是.sh,否则即使把文件权限设置为“可执行”,也无法正常运行。错误
  10. 单引号与双引号的区别在于,双引号括起来的这部分文字中取消了所有元字符的特殊含义只维持其字面值,而单引号与双引号类似,但保留了少数几个元字符维持其特殊含义,以便于保持灵活的替换。错误,单引号是取消所有元字符,双引号取消了大多数元字符,保留了$和`
  11. ‌echo \*echo '*'以及echo "*"三个命令的执行结果是一样的,echo命令根本无法区别操作员输入的是这三个命令中的哪一个。正确

shell 流程控制

  1. 下述命令的输出结果是什么
1
expr `pwd` : '^/\([^/]*\).*$'

获取当前工作目录的路径名的第一个分量

  1. 将下列bash代码改写为功能等价的代码,正确的是:
1
2
3
4
5
if test -w errfile
then
cat errfile >> $LOGFILE
rm errfile
fi

[ -w errfile ] && { cat errfile >> $LOGFILE;rm errfile;}

  1. 每隔3秒钟一次列出文件data.txt的大小,不正确的程序为:
1
2
3
4
while true do 
ls -l data.txt
sleep 3
done
  1. bash输入下列一行a() { a;};a回车后导致当前bash终止运行,下面哪个说法是正确的?将左花括号与后面的字符a之间的空格删掉,bash就不会异常中止

  2. 如何在bash中增加注释文字?单词以#领头,直到行尾的文字都视为注释

  3. C语言程序中子程序main的返回值是一个整数,这个返回值无法被当前进程的代码引用,但是可以被父进程利用。父进程用来判断子进程退出的状态。在bash中,将子进程main函数的返回值用于判断命令执行成功与否的条件判断,main函数返回非0为成功,返回0为失败。错误,0成功 其他错误

  4. bash支持复合条件,也就是条件的“与”以及“或”,分别用符号&&和||连接两个命令。正确

  5. ‍bash中可以使用花括号{}或圆括号()将若干个命令组合为一个复合命令,两者的区别在于花括号方式会在新的子shell中执行这一组命令中的各个命令,圆括号方式是在当前shell进程中执行。错误,()是元字符

  6. bash的内部命令eval可以把程序运行期间实时生成的数据当成程序来运行。正确

  7. 由于for是bash的内部命令,就如同C语言中的保留关键字一样,系统不可以设计一个名字为for的可执行文件。因为即使有名为for的可执行文件,也无法将其投入运行,操作员在交互式bash输入的一行的第一个单词是for,就会被bash解释为for循环控制。错误,shell没有保留字

进程创建、重定向

  1. 程序foo.c的源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int i = 0;

printf("PID=%d\n", getpid());
for (;;) {
if (!fork())
return 0;
sleep(1);
printf("%d\n", ++i);
}
}

编译链接后生成的可执行程序为foo,运行./foo得到的第一行输出为:PID=7812,然后程序继续运行,一段时间以后,在其他终端上执行vi bar.c失败,得到的提示信息为:-bash: fork: retry: Resource temporarily unavailable。在执行foo程序的终端上按下Ctrl-C导致foo程序终止后,系统恢复正常

  1. 在你自己的Linux系统上编个程序测试一下,你的系统最多可创建的进程数在以下哪个区间?2000+
  2. 程序foo.c在修改数据文件foo.dat时,采取这样的方式:调用两次open分别返回了文件描述符fd1和fd2,下面那个描述是正确的:fd1和fd2虽然打开的是同一个文件,访问fd1和fd2使用的却是不同当前读写位置指针
  3. 如果fork后父子进程都不执行exec系统调用,那么,父子进程将执行完全相同的程序,只是可能运行程序的不同分支。如果父子进程将fork的返回值都忽略,那么父子进程执行的程序分支也必然相同。错误,至少pid不同
  4. xsh1.c程序中,重定向功能是由父进程完成的,设置好重定向之后,才引导运行子进程的程序。错误,子进程重定向
  5. 最后一个close(fd0)不调用的话,对系统运行的正确性没有影响。正确,就是浪费资源
  6. 某个程序foo持续不间断运行,运行时,间歇性在标准输出设备输出文本信息。可以编写一个程序加载foo运行并创建一种输出重定向机制,不用修改foo的程序,就能做到每天的输出信息重定向到不同的文件中。错误
  7. 打印多少行
1
2
3
4
5
6
7
int main(){
int i;
for (i = 0; i < 4; i++) {
printf("i = %d\n", i);
fork();
}
}

15,第1次循环:打印1次 I = 0;第2次循环:打印2次 I = 1;第3次循环:打印4次 I = 2;第4次循环:打印8次 I = 3

重定向 信号

  1. 在xsh2.c样例程序中,主循环结束前执行了close(fd[0])。如果省略了此操作,下面哪个说法正确?管道读写端子进程都能正常运行结束并且完成预定的功能,但父进程文件描述符资源不能正常回收,多轮循环以后资源耗尽程序将无法完成预期功能
  2. 在xsh2.c样例程序中,主循环结束前执行了close(fd[1])。如果省略了此操作,下面哪个说法正确?会导致管道读端子进程无法正常运行结束因而无法完成预期功能
  3. 下面哪些C语言调用或者操作可能会导致进程收到信号?alarm
  4. ‌两个进程,只有由共同祖先创建的匿名管道才可能用来实现两进程之间的通信,对于命名管道,没有这样的要求。正确
  5. 多个进程利用同一个管道向某一个进程发送数据,由于管道只允许一个发送端进程和一个接收端进程,所以无法实现这样的机制,但是可以通过多个管道实现,每个管道承载一个产生数据的进程的数据。错误
  6. Linux设计的非常健壮,尽管如此,多个进程利用管道通信也可能因操作不当产生死锁。正确
  7. 在一个普通函数中,goto语句可以实现函数内部语句之间的跳转。全局跳转可以实现跨函数之间的跳转,但是只能跳转到本函数或本函数调用嵌套之外层函数的某一执行过的位置恢复运行。之前程序运行从这一位置到全局跳转前的这段时间里新诞生的局部变量都被销毁,但对全局变量的修改无法恢复。正确
  8. 进程设置捕获某信号后执行函数a,当进程处于阻塞状态时收到这个信号,进程将转去执行函数a,函数a执行完毕,进程将重返之前的阻塞状态,等待条件满足后退出阻塞状态。错误,见下一个
  9. 进程设置捕获某信号后执行函数a,当进程正在执行用户态代码时收到这个信号,进程将转去执行函数a,函数a完成任务后,执行return语句返回,进程将重返之前中断处代码继续运行。正确

进程间协作 Socket

  1. 使用MemoryMap方式访问磁盘文件,不需要事先用open()系统调用打开文件。由于每个进程可以打开的文件总数是有限的,所以这种文件访问方式可以节约进程的文件描述符资源。错误,内部调用了
  2. ‍两个独立的可执行程序a和b,程序运行时,两者通过MemoryMap方式同时访问一个磁盘文件同一位置的数据。这样,不需要通过IPC“共享内存”机制中的shmget()和shmat()等系统调用也可以实现两独立进程通过共享内存通信,而且,进程无论正常或者异常终止,都可以做到将修改过的数据自动持久化存储到磁盘文件中。正确
  3. 文件data.txt内有100行文本数据,ls -l显示文件的权限为rw-r–r--。用cat打印data.txt的全部内容时,屏幕显示出前50行就暂停显示,后50行被阻塞而迟迟不能显示。出现这种现象的一种可能原因是:Linux系统中某个进程使用fcntl()系统调用将这个文件的后50行数据上了“写锁”,因为写锁锁定时不允许读,导致cat的读操作被阻塞;如果那个进程上锁类型是“读锁”,那么,cat只是打开文件读,将不会被阻塞。错误,cat不会被那个锁锁住
  4. 某程序仅使用read()/close()系统调用访问文件,程序主流程为fd = atoi(argv[1]); while ((n = read(fd, buf, sizeof buf)) > 0) { } close(fd);该C语言程序生成的可执行文件被exec()系统调用加载时,以命令行参数方式传递一个已经事先打开好的文件描述符。这样,无论fd引用的是磁盘文件,匿名管道,命名管道,终端设备文件,socket,程序均能正常工作。正确
  5. Linux设计得非常健壮,一直以运行稳定而著称。当系统中多个应用程序因为对信号量操作出现不恰当的P操作和V操作导致死锁时,semop()系统调用将直接返回-1,系统拒绝错误的操作,从而避免死锁的发生。错误
  6. 对信号量的P操作有可能导致进程进入阻塞状态,也有可能不进入阻塞状态,但是V操作确定不会导致当前进程进入阻塞状态。正确
  7. UDP提供了不可靠数据报服务,但如果通信线路没有任何误码和数据丢失,接收进程可以接收到发送进程发来的所有数据。错误,接收缓冲炸了
  8. ‍UDP提供了不可靠服务,所以通信线路误码导致的数据比特被翻转会传递到UDP之上的应用层程序,因此对于一些重要的应用使用UDP通信应增加类似CRC等校验机制。错误,链路层校验
  9. ‍TCP向应用程序提供了“可靠的面向连接的字节流”服务,因此,应用程序交付给TCP的数据总能准确无误地传送到接收方,网络丢包会导致自动超时重传,网络导致的数据乱序也被自动纠正。错误,可靠是说接收可靠

Socket

  1. 下面与socket相关的系统调用,哪个会导致当前进程进入阻塞状态?connect accept
  2. accept返回一个新的文件描述符以代表新到达的TCP连接,而不是利用accept之前创建的socket来操纵所有tcp连接,这样同时有n个连接,则整个系统中至少需要n+1个文件描述符。在UDP通信中可以不这样复杂,服务端只用一个socket就可以同时与多个客户端通信。正确
  3. 客户端/服务器编程模式,服务器端在同时处理多个呼入TCP连接的多进程并发方案中,每当一个TCP连接到达,将创建一个子进程,父子进程独立运行。如果父进程对于子进程如何处理这个TCP连接丝毫不感兴趣,那么,创建子进程前执行signal(SIGCLD, SIG_IGN); 创建子进程后,父子进程各自独立运行,父子进程可以不发生任何联系。正确
  4. 从socket接收数据,执行ret = read(sock, buf, sizeof buf);会导致当前进程阻塞。线路长时间持续发生故障导致无法接收到数据或者是线路正常但发送方长时间持续没有数据发送,都会导致进程持续停留在阻塞状态。应用程序无法区分这两种情况。错误
  5. 对一个TCP连接socket执行ret= write(sock, buf, len); 函数返回值ret等于len,说明系统调用执行成功。系统调用若执行失败,write会返回-1,errno记录了系统调用失败的原因。由于TCP提供了可靠的面向连接的字节流传送服务,所以,ret>0标志系统调用执行成功,可断定这len个字节数据已经成功发送到接收端计算机。错误
  6. select的最后一个参数是struct timeval结构体指针定义的超时时间,时间精度可以指定到微秒级。在这个指定的时间内没有发生任何前面文件描述符集合参数指定的事件之一,进程将从select阻塞态解除。如果指定这个时间间隔值为0,select将一直阻塞,直到至少前面集合参数指定的事件之一发生。正确
  7. ‌shutdown调用可以选择关闭发送或者接收方向的单向连接。TCP提供全双工连接,协议提供了“优雅的”方式分别关闭两个单向连接,利用shutdown系统调用,可以自由选择只关闭本地到远端的单向TCP连接,或者只关闭自远端到本地的另一个单向TCP连接,以允许TCP长时间只有一个单向连接进行通信。错误
  8. 对于UDP的socket来说,connect调用不会导致进程进入阻塞状态,由于UDP不是面向连接的协议,所以这一调用毫无意义。错误

问答

写脚本 正则 不考

Linux

编辑命令 vim基本命令 10个8个

i insert模式

a append模式

esc 退出编辑

:wq 保存退出

:w 保存

:q! 退出

:2 导航到2行

:$ 导航到尾

dd 删行

Linux基本目录结构了解

  1. / (根目录): 整个文件系统的起点,所有文件和目录都位于此根目录下。
  2. /bin: 存放基本用户命令的二进制可执行文件,例如常用的 ls、cp、mv 等命令。
  3. /boot: 存放启动加载程序和内核镜像文件,启动系统时会用到。
  4. /dev: 存放设备文件,例如硬盘、终端设备等。设备文件用于与硬件设备进行交互。
  5. /etc: 存放系统配置文件和子目录。例如,用户密码文件(/etc/passwd)、网络配置文件(/etc/network)等。
  6. /home: 存放普通用户的主目录,每个用户都有一个单独的子目录,例如 /home/user1、/home/user2。
  7. /lib: 存放系统库文件,供 /bin 和 /sbin 中的二进制文件使用。通常包括共享库文件(也称为动态链接库)。
  8. /media: 用于挂载可移动媒体设备,如 CD-ROM、USB 驱动器等。
  9. /mnt: 临时挂载文件系统的挂载点,管理员可以在这里临时挂载文件系统。
  10. /opt: 存放额外安装的应用软件包,有时用于存放大型的第三方应用软件。
  11. /proc: 虚拟文件系统,提供系统进程和内核信息的接口。例如,系统信息可以通过查看 /proc/cpuinfo 获取。
  12. /root: 超级用户(root 用户)的主目录,与 /home/root 类似。
  13. /run: 存放系统运行时数据,如系统启动后生成的进程 ID 文件等。
  14. /sbin: 存放系统管理员使用的系统命令二进制文件,例如 fsck、reboot 等。
  15. /srv: 存放系统提供的服务相关的数据,例如网站数据。
  16. /sys: 虚拟文件系统,类似于 /proc,用于提供系统和硬件信息。
  17. /tmp: 存放临时文件,系统重启后会清空该目录。
  18. /usr: 存放用户程序和数据,包括许多子目录:
    /usr/bin: 存放用户命令的二进制可执行文件。
    /usr/lib: 存放用户程序库文件。
    /usr/local: 存放本地安装的软件和文件。
    /usr/share: 存放共享数据和文件。
  19. /var: 存放可变数据文件,例如日志文件(/var/log)、邮件(/var/mail)和临时文件。

Linux内外部命令 3种风格?

内部命令:shell自带的命令,例如 cd echo

外部命令:用户自己安装的命令

可以用type+命令查看属于哪种

三种命令(参数)风格:

  1. 类似于dd命令 param=value 例如 dd if=sysdisk.img of=/dev/sdb
  2. 类似于gcc命令 -xxx 例如 gcc -Wall xxx
  3. 现代方式 例如

ls --all --width=80 /xx 「长选项」

ls -aw80 /xx 「多个选项合并」

ls -a -w 80 /xx 「多个选项分隔」

ls -w80 /xx -a 「选项后置」

操作系统基础

Linux进程 进程在内存中分布组成 ppt里没有pcb区要补全4个区

进程:一个running的程序,包含执行环境和相关数据(系统和用户数据)

命令参数 环境参数 : 栈 -> (空闲区) <-堆 : 数据段|指令段

pcb区在内核中,和用户内存分开

文件目录组织 inode 目录表 文件表 给目录结构画inode图

目录表:首先,目录表也是一个文件。由目录项(文件名:inode号)组成的表

inode

软硬连接

硬链接:命令ln,两个文件名对应同一个inode号,不能硬链接目录

软链接(符号链接):命令ln -s,相当于快捷方式,相当于链接到了另一个目录项而不是inode

文件结构 目录结构

目录结构

image-20240601122417647

文件结构

img

活动文件怎么组织

活动文件目录AFD,三级

  1. 文件描述符 表,每个进程一张,存在pcb里
  2. 系统文件表
  3. inode
image-20240601120400369

pcb结构

页表(内存)

文件描述符表(活动文件)

cpu context

进程状态优先级(调度)

当前目录

umask

pid uid gid

进程间通信方式 345种 pipe

信号 共享内存 消息队列

管道

image-20240601121210693

新创建进程 怎么创建 fork后怎么加载

系统调用 fork() 父子进程用户数据、指令、堆栈完全一致;系统数据部分一致

根据返回值区分父子进程

shell相关

shell变量类型 环境变量有哪些 什么地方 怎么修改环境变量

  1. 变量类型:字符串?环境变量和局部变量

  2. 常见环境变量:

  • PATH
  • HOME
  • PWD
  • LANG
  1. 存储位置

全局:/etc/profile

特定环境:~/.bashrc ~/.bash_profile ~/.profile

  1. 用 export 修改全局变量

  2. 子进程继承父进程的环境变量,不继承局部变量。子进程修改环境变量不影响父进程。

Linux程序参数 外部信息输入方式

命令行参数 交互输入(键盘)环境参数

信号量

如何用信号量解决多读1写 信号量作用 伪代码(不用标准)

  1. 读写互斥
1
2
3
4
5
6
7
8
9
10
reader(){
P();// 加锁
//read
V();// 解锁
}
writer(){
P();// 加锁
//write
V();// 解锁
}
  1. 读读不互斥
1
2
3
4
5
6
7
8
9
10
11
12
13
int reader_cnt;
reader(){
if(reader_cnt==0) P();// 加锁
reader_cnt++;
//read
reader_cnt--;
if(reader_cnt==0) V();// 解锁
}
writer(){
P();// 加锁
//write
V();// 解锁
}