linux和IO常见面试题

1、文件、网络、压缩、链接的指令

1.1 ls

命令名 英文单词 功能 常见格式 常用选项 加选项后的功能
ls list 显示目录中文件及其属性信息 ls [选项] [文件或目录...] 列出当前工作目录中的文件信息
-l 以长格式显示文件详细信息(权限、所有者、大小、修改时间等)(默认单位是字节)
-h -l 结合使用(-lh),以人类可读格式显示文件大小(如 234M、2G)
-a 显示所有文件和目录,包括隐藏文件(以 . 开头的文件)
-t 与-lh结合使用(-tlh)按修改时间排序,最新的排在前面
-R 递归列出所有子目录及其内容

2.3.1 目录操作类命令

命令名 英文单词 功能 常见格式 常用操作 常用操作功能
cd change directory 切换目录 cd [选项] [目录路径],(一般不用选项) ~/无 切换到当前使用者的家目录
.. 切换至当前位置的上一级目录
- 切换至上次所在目录
pwd print working directory 显示当前工作目录的路径 pwd 显示所在目录的绝对路径
clear clear 清除终端界面已有内容 clear 清除终端界面已有内容
exit exit 关闭当前终端 exit 关闭当前终端

cd的路径可以是相对路径也可以是绝对路径

相对路径不以根目录(/)开头的路径,绝对路径相反

2.3.2 文件操作类命令

命令名 英文单词 功能 常见格式 常用操作 常用操作功能
touch touch 创建空文件与修改时间戳 touch [选项] [文件名] 创建一个空内容的文本文件 ;如果文件已存在 ,则对文件的时间进行修改
-d 设置日期,格式:touch -d "YYYY-MM-DD" 文件名
mkdir make directories 创建目录 mkdir [选项] [目录名] 创建一个新的目录文件,若目标目录已存在,则提示已存在而不继续创建 (单级)
-p 递归创建多级目录
rm remove 删除文件或目录(不会放在回收站) rm [选项] [文件或目录] rm 可删除文件对于空目录,使用 rmdir 命令删除
rm 文件名/ -rf -rf -f 强制删除文件而不询问-r 通常与 -f 结合使用,强制递归删除目录及其内容
cp copy 复制文件或目录 cp [选项] 源文件或目录 目标文件或目录 复制文件,若目标文件存在则会覆盖
-rf 复制目录
mv move 对文件和目录进行剪切和重命名操作 mv [选项] [源文件或目录] [目标文件或目录] 同一目录下 对文件和目录进行重命名操作不同目录下 对文件和目录进行剪切操作

对于cp:

选项 功能 说明
-r recursive(递归) 复制目录时必须使用,会递归复制目录及其所有子目录和文件
-f force(强制) 强制覆盖,不询问(不解决递归复制目录的问题)
-v verbose(详细) 显示详细过程(不解决递归复制目录的问题)

2.3.3 系统管理类命令

命令名 英文单词 功能 常见格式 常用操作 常用操作功能
shutdown shutdown 关闭服务器的系统 shutdown [选项] [时间] -r 将系统立即重启,可设定定时重启,格式:shutdown -r +分钟shutdown -r 时间
-h 将系统立即关机,可设定定时关机,格式:shutdown -h +分钟shutdown -h 时间
reboot reboot 重新启动计算机 reboot 用于重启系统,简单快捷

文件:ls、cp、mv、rm、touch、cat、chmod

网络:ifconfig、ping、netstat、ss、curl、wget

压缩:tar、gzip、gunzip、zip、unzip

链接:ln(硬链接)、ln -s(符号链接)

2、GDB调试流程

编译时加 -g:gcc -g program.c -o program

启动GDB:gdb program

设置断点:break main 或 break 行号

运行程序:run

单步执行:step(进入函数)或 next(不进入)

查看变量:print 变量名

继续执行:continue

退出GDB:quit

3、环境变量相关概念与配置方法

概念:环境变量是操作系统中存储系统或用户配置信息的命名值对,影响进程行为。

常用环境变量:PATH、HOME、LD_LIBRARY_PATH、SHELL

配置方法:

临时:export 变量名=值

永久:写入 ~/.bashrc 或 /etc/profile,然后执行 source ~/.bashrc

4、常见Makefile的符号功能与语法

目标:依赖文件

按下Tab键后写命令

常用符号与函数:

$@:表示当前目标名

$<:表示第一个依赖文件

$^:表示所有依赖文件

=:递归展开赋值

:=:简单展开赋值

?=:条件赋值

+=:追加赋值

wildcard:通配符匹配文件

patsubst:模式字符串替换

@:放在命令前面,表示执行时不回显该命令(即不打印命令本身)。

%:模式匹配符,用于定义通用规则,例如 %.o: %.c 表示所有.o文件依赖对应的.c文件。

5、标准库和系统调用区别

标准库函数(如 printf、fopen)是用户态封装,可移植、带缓冲,调用系统调用实现具体功能;系统调用(如 write、open)是内核提供的接口,无缓冲、直接操作硬件,可移植性差但开销更大。标准库在用户层,系统调用是进入内核的唯一入口。

6、文件操作API有哪些

标准库:fopen、fclose、fread、fwrite、fprintf、fscanf、fgets、fputs

系统调用:open、close、read、write、lseek、stat、dup、fcntl

7、静态库和动态库区别及应用

静态库在编译时合并到可执行文件,运行时无依赖、体积大、更新需重编译;动态库在运行时加载,多程序共享、体积小、更新方便但依赖库存在。静态库适合独立部署、库不常变的场景;动态库适合多程序共享、频繁更新的场景。

8、什么是标准IO与文件I/O

标准IO是C标准库提供的文件操作接口(如fopen、fprintf、fgets),在用户层维护缓冲区,减少系统调用次数,具有可移植性,通常操作FILE结构体。

文件I/O也叫系统调用IO,是操作系统直接提供的接口(如open、read、write),无用户层缓冲,操作文件描述符,属于内核态调用,可移植性差但效率可控。

9、创建文件的函数

创建文件常用open系统调用:int open(const char *pathname, int flags, mode_t mode);

flags常用O_CREAT | O_RDWR,mode指定权限如0666。

标准IO的fopen也可创建文件:FILE *fopen(const char *path, "w");

标准I/O创建文件的权限用文件I/O创建如何编写

标准I/O:fopen("file.txt", "w"),权限由umask决定。

文件I/O(系统调用)创建文件需指定权限:

int fd = open("file.txt", O_CREAT | O_WRONLY | O_TRUNC, 0644);

其中0644表示所有者读写、组和其他只读。

10、缓冲区

缓冲区是一块内存区域,用于暂存数据,目的是减少实际IO操作次数(如读写磁盘或调用系统调用),从而提高效率。标准IO提供行缓冲、全缓冲、无缓冲三种策略,文件IO通常在内核也有页缓存。

标准I/O的缓存机制和刷新条件有哪些

缓存机制:全缓冲(填满缓冲区才刷新,默认普通文件)、行缓冲(遇到换行符或填满刷新,默认终端)、无缓冲(立即刷新,如stderr)。

刷新条件:缓冲区满、遇到换行符(仅行缓冲)、调用fflush、程序正常退出(return或exit)、文件关闭(fclose)。

11、Linux下/etc路径保存什么内容

/etc目录保存系统的配置文件和管理工具所需的配置文件,基本都是文本文件。常见内容有:passwd(用户账户信息)、shadow(用户密码)、group(用户组)、fstab(文件系统挂载)、hostname(主机名)、hosts(域名解析)、network/(网络配置)、apt/或yum.repos.d/(软件源)、profile与bashrc(环境变量配置)等。

12、硬链接与软连接的区别

硬链接:与源文件共享同一个inode,删除源文件不影响硬链接,不能跨文件系统,不能链接目录。

软连接(符号链接):是一个独立文件,存储指向源文件的路径,删除源文件则软连接失效,可以跨文件系统,可以链接目录

13、选择任意一种I/O实现文件的拷贝

使用标准I/O:

cs 复制代码
#include <stdio.h>

int main() {
    FILE *src = fopen("source.txt", "rb");
    FILE *dst = fopen("dest.txt", "wb");
    if (!src || !dst) return 1;

    char buffer[4096];
    size_t n;
    while ((n = fread(buffer, 1, sizeof(buffer), src)) > 0) {
        fwrite(buffer, 1, n, dst);
    }

    fclose(src);
    fclose(dst);
    return 0;
}

使用文件I/O(系统调用):

cs 复制代码
#include <fcntl.h>
#include <unistd.h>

int main() {
    int src = open("source.txt", O_RDONLY);
    int dst = open("dest.txt", O_CREAT | O_WRONLY | O_TRUNC, 0644);
    if (src == -1 || dst == -1) return 1;

    char buffer[4096];
    ssize_t n;
    while ((n = read(src, buffer, sizeof(buffer))) > 0) {
        write(dst, buffer, n);
    }

    close(src);
    close(dst);
    return 0;
}
相关推荐
zzzyyy5382 小时前
Linux程序地址空间
linux·运维·服务器
RisunJan2 小时前
Linux命令-newusers(用于批处理的方式一次创建多个命令)
linux·运维·服务器
嵌入式吴彦祖2 小时前
RKNN demo运行
linux
草莓熊Lotso2 小时前
Linux 线程深度剖析:线程 ID 本质、地址空间布局与 pthread 源码全解
android·linux·运维·服务器·数据库·c++
殇者知忧2 小时前
Tmux快速上手
linux·tmux
AcrelGHP2 小时前
安科瑞AIM-T系列工业IT绝缘监测及故障定位解决方案为关键供电场所筑牢安全防线
大数据·运维·数据库
草莓熊Lotso3 小时前
MySQL 从入门到实战:视图特性 + 用户权限管理全解
linux·运维·服务器·数据库·c++·mysql
雾岛听蓝3 小时前
进程信号机制深度解析
linux·开发语言·经验分享·笔记
zmjjdank1ng4 小时前
OSI模型和TCP/IP模型
服务器·网络·tcp/ip