Linux小问题

gdb调试命令

进入gdb调试:gdb 文件名

逐过程:next(n)

逐语句:step(s)

查看变量:print(p) 变量名

查看代码:list(l) 行号

持续监测变量:display 变量名

结束监测:undisplay 变量编号

下断点:break(b) 行号/函数名

run和start区别:他们都是开始调试,start会停在main函数第一行,run会停在第一个断点处。

continue:继续运行到下一个断点

临时禁用断点:disable 断点编号

重新启用断点:enable 断点编号

退出调试模式:quit(q)

写出完成一下功能的常用shell 命令

查看/etc/bin 文件夹下的所有文件(包括子文件夹以及所有隐藏文件的详细信息)

ls -aRl /etc/bin

切换到根目录下

cd /

在当前路径下创建一个 aa/bb/cc 关系的文件夹

mkdir aa/bb/cc -p

删除上面创建的文件夹

rm -rf aa

mv命令的作用

两个参数,第一个参数指定对那个文件操作,第二个参数,如果不存在就是对第一个参数重命名,存在就是移动覆盖。

输出字符串”hello world”到 a.txt(文件已存在当前路径下) 文件中

echo "hello world" > a.txt

查看磁盘使用情况

df -h

当前在~路径下,修改/usr路径下 aa 文件的权限为r-x rw- r--

chmod 0564 /usr/aa

把/etc/bin文件夹下的a文件所有者和所属组从原来的root:root改为colin:colin

sudo chown colin:colin /etc/bin/a

查找/etc文件夹(包括子文件夹)下的所有以a开头的文件

find /etc -name "a*"

查询当前路径(包括子文件夹)下文件中有以“ret”开头的字符串的文件,并显示文件中的行号

grep "ret" -Rn

写出挂起进程cat后,使用信号杀死这个进程的一组命令

jobs 查看作业号

kill -9 %作业号

给aa文件创建一个符号连接文件xx和硬链接文件yy的命令分别是什么?符号连接和硬链接有什么区别?从原理、inode 编号、链接计数器、删除源文件后的现象等几个方面进行描述。

ln -s aa xx,ln aa yy,硬链接的inode和原文件的inode相同链接计数器会+1删除源文件后新的不会失效链接计数器会-1,符号连接是再定义一个inode指向原文件的inode,链接计数器不会增加,删除源文件,符号链接会失效。

Makefile 的优势是什么?makefile 是怎么节省编译时间的?编译器是怎么判断哪个源文件被修改的?

一次编写,终身受益,重用性极强,不用再写复杂的编译命令,节省编译时间,第一次编译的时候不会节省编译时间,会把.c文件编译成.o文件保存,下次编译只会编译修改过的.c文件,根据.c文件和.o文件的创建时候来判断是否修改。

发送函数阻塞和非阻塞有什么区别?分别写出在 linux和 windows下设置套接字阻塞和非阻塞的函数。

在Linux下:

#include <fcntl.h>

int flags = fcntl(sockfd, F_GETFL);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);

在Windows下:

#include <winsock2.h>
#include <windows.h>

u_long mode = 1;  // 1 for non-blocking mode, 0 for blocking mode
ioctlsocket(sockfd, FIONBIO, &mode);

Linux文件IO函数有哪几个?哪些函数在什么场景下是阻塞函数?

  1. open:打开或创建文件。
  2. close:关闭文件描述符。
  3. read:从文件描述符中读取数据。
  4. write:向文件描述符中写入数据。
  5. lseek:在文件中移动读写指针。
  6. fcntl:对文件描述符进行各种控制操作。
  7. ioctl:设备控制命令。
  • read:从文件描述符中读取数据时,如果没有数据可读,会阻塞直到有数据到来或者遇到EOF。比如:读从终端输入的数据没有换行符,read读终端设备就会阻塞,网络没有数据包,read从网络读就会阻塞。
  • write:向文件描述符中写入数据时,如果输出缓冲区已满,会阻塞直到数据被写入到缓冲区中。
  • open:打开文件时会阻塞,直到文件成功打开或者失败。

描述 Linux 文件系统存储文件的过程。

1.来Boot Block查看磁盘分了几个区到自己具体的Block Group里面

2.到GDT块组描述符表,查看其他的几个功能块的位置,看是否有空闲的inode,没有就去下一个Block Group。

3.到inode bitmap里找一个空闲的inode节点,把文件属性写入找到的那个inode节点,到inode bitmap把此inode的标志位置为1。

4.到block bitmap块位图找到一个空闲的块,把内容存进块中,存完后把块的地址存到inode的数据块指针里,在block bitmap把对应块的标志位置为1。

描述 Linux文件系统读取文件的过程。Inode节点编号保存在什么地方?使用哪几个函数可以读取 inode 编号?

Linux文件系统读取文件的过程:

1.来Boot Block查看磁盘分了几个区到自己具体的Block Group里面。

2.到GDT块组描述符表,查看inode table的起始位置。

3.根据节点编号找到当前文件的inode节点,根据inode节点保存的数据块指针找到存储数据的数据块位置进行读取。

inode节点编号保存在文件夹记录项,stat,fstat,lstat可以查看inode编号。

一个inode 节点中有数据块指针 60字节,一个地址是4字节,可以存 15 个地址指针,是怎么存储大文件的?

多级寻址,15个指针,前12个存文件内容也就是(48kb),第13个指向一个datablock(4kb)但里面存的是地址(能存1024个指针每个指向一个datablock(4kb)存文件内容,一级寻址一共能存4M),如果文件大小超过了4M+48k,就启用第14个指针二级寻址指向一个块里面装地址指针,每个指针指向的块又装的地址指针,装的指针指向的块装的才是数据,二级寻址可以装1024*1024*4k=4g大小的数据,超过4g就启用最后一个指针三级寻址能容纳1024*1024*1024*4k=4t大小的数据。

从 Linux 文件系统的原理分析,为什么永久删除的文件还能够复原?

删除文件的流程

1.来Boot Block查看磁盘分了几个区到自己具体的Block Group里面。

2.到GDT块组描述符表,查看inode bitmap的起始位置和block bitmap的起始位置。

3.将inode bitmap的对应位置置为0,block bitmap的对应位置置为0。

删除只是将文件对应的inode bitmap和block bitmap的位置置为0,并没有真正的删除数据。

写出实现 linux 下的copy功能(目标文件如果不存在就创建一个,权限为 0664)的函数。

写出实现 linux 下递归遍历目录的函数,要求只能输入一个路径,按照指定路径打印路径下的所有文件及大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值