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;
}
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式