1、简述如下目录的功能:
- /bin :可执行程序或命令
- /etc :系统配置文件
- /boot 内核 与系统启动有关的文件
- /root :管理员的家目录
- /home:所有普通用户的家目录
- /proc:虚拟目录,进程在内存中的映像
- /mnt :临时挂载点
- /lib :库文件
- /usr :系统运行过程中不常改变的文件
- /var:系统运行过程中常改变的文件
- /dev :设备文件
- /proc :虚拟目录,进程在内存中的映像
- /tmp:临时文件,所有的用户均可访问
2、写15个熟悉Linux命令,并简述其功能
- 显示当前工作目录的绝对路径:pwd
- 查找文件:find
- 查看文件内容:tail -f 文件名
- 显示进程信息:ps
- 结束进程:kill pid
- 系统监测工具:top
- 改变当前工作目录:cd +路径
- 查看ip :ifconfig
- 查看、发送邮件:mail
- 查看服务进程:ps -ef | grep 进程名
- 输出命令:echo
- 重启mysql:mysqladmin restart
- 关闭mysql :mysqladmin shutdown
- 修改mysql用户密码:mysqladmin -u用户名 -p旧密码 password 新密码 修改mysql用户密码
- 历史命令:history
3、Linux系统都有哪些类型的文件?改变文件权限使用什么命令?
普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等
ls -lh可以查看某个文件的属性
修改文件权限的命令:chmod
1)字符修改法:chmod u/g/o/a +/-/= r/w/x 文件名
u:属主 g:同组 o:其他文件
r:读权限 w:写权限 x:可执行权限
2)数字修改法:chmod 664 main.c
r:4 w:2 x:1
4、添加一个用户使用哪个命令,它会修改/etc下的哪些文件
useradd
/etc /passwd /etc /group /etc /shadow
5、系统关机和重启的命令
1)关机:halt 立刻关机
poweroff 立刻关机
root用户才能运行:
init 0
shutdown -h now 立刻关机
shutdown -h 10 十分钟后自动关机
2)重启:reboot
root用户才能运行:
init 6
shutdown -r now 立即重启
shutdown –r 10 过10分钟自动重启
6、简述makefile文件是用来做什么的?
管理工程,实现自动化的编译
makefile里主要包含了五个东西:显示规则、隐晦规则、变量定义、文件指示和注释
7、Linux调试程序使用什么工具,说明工具中常用的命令有哪些
gdb调试 //test
gcc/g++ -g test.c/cpp -o test
gdb test
进入gdb调试界面设置参数
- 运行程序:r(run)
- 查看代码:l(list)
- 设置断点:b+断点(break 26)
- 单步执行:n(next)
- 继续执行:c(continue)
- 查看断点:info break
- 打印变量的值:p(print i)
- 删除断点:delete(delete 2)
- 查看线程信息:info thread
- 调试目标id指定的线程:thread id
- 退出gdb:q(quit)
8、什么是库?请简述静态库和动态库的区别
库是共享程序代码的方式,一般分为静态库和动态库(库就是预先编译好的方法的集合)
1)静态库:链接时完整的拷贝到可执行文件中,被多次使用就有多份冗余拷贝
2)动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存
9、什么是进程,什么是进程描述符?Linux最多可以产生多少个进程,一个进程最多可以打开多少个文件描述符,什么命令可以查看某个进程打开了哪些文件?
1)进程:一个正在运行的程序
2)进程描述符:结构体task_struct,用来描述进程的属性信息
3)Linux最多可以产生32768个进程(pid的上限,pid是一个整型)
4)一个进程最多可以打开1024个文件描述符,
5)lsof -p可以查看某个进程打开了哪些文件
10、画出进程状态转移图(三个状态的模型)
11、用户态和内核态的区别,什么时候会从用户态切换到内核态?
1)用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取
2)内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序
执行用户代码处在用户态,执行内核代码 //取决于当前所执行的代码
库函数运行在用户态,实现在内核态
3)执行系统调用的时候 | 产生中断
12、linux环境下main函数有几个参数,并说明各个参数的意义
int main(int argc,char* argv[],char* envp[])
三个参数
1)argc:参数个数
2)argv:参数内容
3)envp:环境变量
13、什么是系统调用,它和函数有啥区别?
1)系统调用:Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。系统调用是在内核完成的。
2)区别:
库函数的实现在函数库中;系统调用调用内核的服务;
函数在用户地址空间执行;系统调用在内核地址空间执行;
函数调用属于过程调用,调用开销较小;系统调用需要在用户空间和内核环境上下环境间切换,开销较大
14、调用系统调用后,如何从用户态切到内核态?
产生中断,陷入内核
系统调用号、系统调用表
15、简述有名管道和无名管道的区别,并说明管道是全双工还是半双工
1)有名管道 mkfifo/mkfifo()创建:任意两个进程间通信
2)无名管道 pipe():只能在父子进程间通信
3)半双工,写入的管道都在内存中
16、su命令是用来做什么的
切换用户身份
17、简述与信号有关的系统调用signal和kill的功能,并说明信号如何实现
信号:系统先定义号的某些特定的时间,可以被发生,也可以被接受,发生和接受的主体都是进程
18、简述fork复制进程的流程,并说明什么是写时拷贝
《内核设计与实现》第三章
申请新的pid,将父进程的pcb复制一份,进程实体的复制(进程地址空间)
调用do_fork 父进程的内核栈
写时拷贝可以提高复制的效率
19、什么是僵死进程?怎么做可以避免僵死进程的产生
僵死进程:子进程先于父进程结束,父进程没有调用wait获取子进程的退出码,此时,子进程变成僵死进程
解决办法:父进程调用wait获取退出码,或父进程先结束,让init进程接管子进程。
20、什么是虚拟内存,引入虚拟内存后对系统运行程序有什么作用?
不是真正的内存,是把磁盘上的空间
运行比物理内存更大的空间
21、以下程序输出多少个”a”?
int i=0;
for(;i<2;i++)
{
fork();
printf(“a”);
}
8个a