Linux

1、常用命令

操作举例
显示文件目录lsls
改变当前目录cdcd /home/user/file0
建立子目录mkdirmkdir file0
删除子目录rmdirrmdir /home/user/file0
删除文件rmrm ~/file0
复制文件cpcp ~/file0 ~/opt/
获取帮助信息manman ls
显示文件内容 lessless test.lx

2、文件基本属性

文件类型属主权限属主权限其他用户权限
d代表目录,-代表文件,l代表链接文档,b代表可随机存取装置,c代表串行端口设备(一次性读取装置,如键盘、鼠标)rwx,代表可读可写可执行,若没有某权限则使用-表示rwx,代表可读可写可执行,若没有某权限则使用-表示rwx,代表可读可写可执行,若没有某权限则使用-表示

举例:dr-xr-xr-x

d:目录文件

r-x:属主拥有读和执行权限,无写权限

r-x:属组拥有读和执行权限,无写权限

r-x:其他用户拥有读和执行权限,无写权限

3、Linux文件目录结构

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

  • /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

  • /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root 使用的指令。

  • /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

4、Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别?

阻塞IO、非阻塞IO、IO复用、信号驱动IO、异步IO

5、什么是虚拟内存?

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

5.1虚拟内存的作用

内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存。

5.2虚拟内存管理的作用/好处

虚拟内存管理最 主要的作用是让每个进程有独立的地址空间

当物理内存不足时,可以将物理内存当前暂时不用的东西转移到虚拟内存文件中,以便腾出物理内存存放当前需要的数据

6、Linux基本命令

命令作用
pwd显示当前目录
rm删除
touch生成文件
cat读取指定文件的内容并打印到终端输出
mkdir新建目录make directory
file查看文件类型
whereis,which,find 和 locate查找
chown改变文件所有者
df查看磁盘容量
wc计数工具
tr删除一段文本信息中的某些文字。或者将其进行转换
join连接两个文件
paste它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开
free、/proc/meminfo、vmstat内存查看命令
top |head、

7、grep、awk、sed掌握程度

  • grep命令用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件。

  • sed用于过滤和转换文本的流编辑器。

  • AWK是一种用于处理文本的编程语言工具。

8、Linux是如何避免内存碎片的

  • 伙伴算法,用于管理物理内存,避免内存碎片;

  • 高速缓存Slab层用于管理内核分配内存,避免碎片。

9、GDB调试,什么是条件断点?

条件断点是当满足条件就中断程序运行,命令:

条件断点是当满足条件就中断程序运行,命令:break line-or-function if expr。
例如:(gdb)break 666 if testsize==100

10、常用GDB指令

  • start:开始调试,停在第一行代码处,(gdb)start

  • b <lines> #b: Breakpoint的简写,设置断点。(gdb) b 10

  • b <func> #b: Breakpoint的简写,设置断点。(gdb) b main

  • b filename:[line/function] #b:在文件filename的某行或某个函数处设置断点

11、Linux进程和线程如何创建、退出?进程退出的时候,自己没有释放的资源(如内存没有free)会怎样?

创建线程:

  • 调用该线程函数的入口点

  • 使用函数pthread_create(),线程创建后,就开始运行相关的线程函数

退出线程

  • 在线程函数运行完后,该线程也就退出了

  • 或使用函数pthread_exit(),这是线程的主动行为

12、GDB的用法

GDB 的主要功能就是监控程序的执行流程。

(gdb) break (b)在源代码指定的某一行设置断点,其中xxx用于指定具体打断点位置
(gdb) run (r)执行被调试的程序,其会自动在第一个断点处暂停执行。
(gdb) continue (c)当程序在某一断点处停止后,用该指令可以继续执行,直至遇到断点或者程序结束。
(gdb) next (n)令程序一行代码一行代码的执行。
(gdb) step(s)如果有调用函数,进入调用的函数内部;否则,和 next 命令的功能一样。
(gdb) print (p)打印指定变量的值,其中 xxx 指的就是某一变量名。
(gdb) return(return)结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。

13、什么是内存泄漏?怎么避免?

内存泄漏是指程序中已分配的堆内存由于某种原因程序未及时释放或无法释放,导致系统内存的浪费,导致程序运行速度减慢甚至系统崩溃。

解决:

  1. 对于每个内存分配函数应该配有free函数;

  2. 每次分配内存后应该要进行初始化;

  3. 保证可用字节数和写入字节数的交叉核对;

  4. 对于指针赋值前需要核对是否为孤立位置;

  5. 正确处理动态分配内存引用的函数返回值。

14、如何调试C/C++内存泄漏的

捕获系统信号:Linux操作系统提供了一组接口可以修改信号对应的默认回调。通过这组接口,当出现错误信号的时候,将程序的执行流程引导到我们自定义的回调函数中,在这里我们可以调用另外一组系统接口获得当前错误出现时的堆栈信息,有了堆栈信息,就可以很方便的定位到程序最后出错时的代码位置。

core dump:Linux程序在崩溃的时候可以产生core文件,这个文件记录了程序崩溃时的状态,有了core文件,就可以还原发生崩溃时的场景,并且还可以使用gdb进行调试。

15、权限为765的文件,权限位标记是什么?

-rwxr-xrwx

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐