【面经】Linux

一、高频

1、Linux常见的指令

  • 路径/目录类
    • cd, mkdir, rmdir, pwd ,ls等重要指令;
    • rmdir 仅能删除空目录,要删除非空目录需使用" rm -r "指令;
  • 文件类
    • 创建:mkdir文件夹,touch文件
    • 移动mv
    • 复制cp
    • 修改名字mv
    • 删除rm
    • 打开/编辑gedit/vi
    • 查看:cat正着查看,tac反着查看,nl添加行号,more向后翻页,less可以向前翻页,head 只看头几行,tail 只看尾巴几行,od 以二进制的方式读取文件内容
    • umask 就是指定 "目前使用者在创建文件或目录时候的权限默认值"
    • chattr (设置文件隐藏属性)
    • lsattr (显示文件隐藏属性)
    • 观察文件类型:file
    • 查找文件:which (只能查"可执行文件"),whereis (由一些特定的目录中寻找文件文件名),locate(只加文件名,依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名) / updatedb(用于更新 locate 命令所使用的数据库),find直接搜索磁盘,较慢
    • 权限(chmod XXX)其中111(7)对应rwx。当前用户,用户组,其他用户;chgrp;chown
  • 通讯类:ping ip、ipconfig、hostname -I、netstat
  • 查看:(进程ps)
  • 搜索:grep能使用正则表达式搜索文本,并把匹配的行打印出来。grep [stringSTRING] filename
  • 进程:查看ps,杀掉kill
  • 后台:查看后台任务job -l,把后台任务调到前台执行 fg,把停下的后台任务在后台执行起来 bg

2、Linux与Windows的区别,为什么嵌入式开发用linux?

  1. 开源性质:Linux是一个开源操作系统,其源代码对于用户和开发者来说是可访问和可修改的。这使得开发者能够针对特定的嵌入式系统进行定制和优化,以满足硬件和应用程序的需求。相比之下,Windows系统不开源或半开源,这限制了开发者对系统的完全控制。
  2. 可定制性:Linux内核的开源性质 使得嵌入式开发者可以根据具体需求定制和裁剪系统,将其精简为适合特定嵌入式设备的最小系统。这种灵活性使得Linux成为嵌入式设备开发的理想选择。而Windows系统由于其庞大的体积和复杂的结构,很难做到如此高度的可定制性。
  3. 跨平台支持:Linux支持多种硬件架构,包括x86、ARM、MIPS等 ,可以在不同类型的嵌入式设备上运行。这种跨平台的特性使得开发者可以更方便地在不同的嵌入式平台上进行开发。而Windows系统主要支持x86架构,对于其他架构的支持相对较弱。
  4. 安全性:Linux系统在设计上注重安全性,通过权限管理、内存保护等机制来保护系统免受攻击和破坏。相比之下,Windows系统在过去曾存在过一些安全漏洞和攻击事件,这在一定程度上影响了其在嵌入式开发领域的应用。
  5. 丰富的驱动程序和工具链:Linux环境下有丰富的驱动程序和工具链,包括编译器、调试器、模拟器等,这些工具和资源可以满足嵌入式开发的各种需求。而Windows系统虽然也提供了相应的开发工具链,但在某些方面可能不如Linux系统完善。

3、ps的状态

在 Linux 中,进程可以有多种状态。这些状态在 ps 命令的输出中可以通过特定的符号来表示。以下是一些常见的进程状态及其对应的 ps 输出中的符号:

  1. R (Running or Runnable):

    • 进程正在运行或在运行队列中等待运行。
    • ps 中,这通常显示为 R
  2. S (Interruptible Sleep):

    • 进程在等待某个条件成立(例如,等待 I/O 操作完成)而处于可中断的睡眠状态。
    • ps 中,这通常显示为 S
  3. D (Disk Sleep):

    • 进程在等待 I/O 操作完成(通常是磁盘 I/O),此时它不会被中断。
    • ps 中,这通常显示为 D。注意,这种状态的进程很少见,因为大多数 I/O 操作都是可中断的。
  4. T (Stopped or Traced):

    • 进程已被停止(例如,通过 SIGSTOP 信号)或正在被调试器跟踪。
    • ps 中,这通常显示为 T
  5. Z (Zombie):

    • 进程已终止,但其父进程尚未通过 wait() 或类似的系统调用来获取其终止状态。这样的进程也被称为"僵尸进程"。
    • ps 中,这通常显示为 Z,但注意,ps 的默认输出可能不显示僵尸进程。要查看它们,你可能需要使用特定的选项,如 ps -ef | grep defunctps -eo pid,stat,cmd | grep Z
  6. I (Idle):

    • 这个状态在某些版本的 Linux 中可能并不常见,但在某些上下文中,它可能表示进程处于空闲状态。
    • ps 中的表示可能因系统而异。
  7. W (Waking):

    • 这个状态在某些系统上可能表示进程正在从睡眠状态唤醒。但在现代的 Linux 系统中,这个状态可能不常见或已被其他状态所取代。
    • ps 中的表示可能因系统而异。

二、基础

1、Linux学什么

  • 计算机概论与硬件相关知识
  • Linux的安装与指令
  • Linux操作系统的基础技能:"使用者、群组的概念"、"权限的观念","程序的定义"等等
  • vi文书编辑器
  • Shell与Shell Script的学习
  • 软件管理员
  • 网络基础的创建
  • 网站的架设

2、磁盘分区

  1. 分区类型

Linux 支持多种分区方案,但最常见的是基于 GUID 分区表 (GUID Partition Table, GPT) 和传统的 Master Boot Record (MBR) 分区方案。

  • MBR 分区方案:MBR 使用 512 字节的引导扇区,其中 64 字节用于分区表。MBR 分区方案最多支持 4 个主分区,或者 3 个主分区加 1 个扩展分区(扩展分区内可以有多个逻辑分区)。

  • GUID 分区表 (GPT):GPT 克服了 MBR 的限制,允许几乎无限数量的分区,并且支持大于 2TB 的分区。GPT 通常用于需要超过 4 个分区或处理大分区的情况。

  1. 分区用途

在 Linux 中,常见的分区用途包括:

  • /boot:存放启动加载器(如 GRUB)和内核文件的分区,通常是一个较小的主分区。

  • /(根文件系统):存放操作系统文件、应用程序和大部分用户数据的分区。

  • /home:存放用户主目录的分区,这样可以将用户数据与操作系统文件分离。

  • /var:存放经常变动的数据,如日志文件、邮件队列等。

  • /usr:存放用户共享的文件和应用程序。

  • 交换空间 (swap):用于虚拟内存,当物理内存不足时,Linux 会使用 swap 空间。

  1. 分区工具:MBR 分区表请使用 fdisk 分区, GPT 分区表请使用 gdisk 分区

三、文件

1、Linux的使用者与群组

Linux一般将文件可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限

2、Linux文件权限

用 su - 切换身份成为root后, 下达" ls -al ":ls是"list"的意思,重点在显示文件的文件名与相关属性。而选项"-al"则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为" . "的文件)

  1. 第一栏代表文件的类型和权限(10个字符):档案类型、档案拥有者之权限、档案所属群组之权限、其他人之权限
  2. 第二栏表示有多少文件名链接到此节点(i-node)
  3. 第三栏表示这个文件(或目录)的"拥有者帐号
  4. 第四栏表示这个文件的所属群组
  5. 第五栏为这个文件的容量大小,默认单位为Bytes
  6. 第六栏为这个文件的创建日期或者是最近的修改日期
  7. 第七栏为这个文件的文件名

与Windows系统不一样的是,在Linux系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在"数据安全性"上面的(系统保护、团队开发软件或数据共享的功能)

3、改变文件属性与权限

  • chgrp :改变文件所属群组(change group, 要被改变的群组名称必须要在/etc/group文件内存在才行)

  • chown :改变文件拥有者(change own,使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变;chown还可以直接修改群组的名称,加上-R)

  • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

    • 各权限的分数对照表:> r:4 > w:2 > x:1,777就是用户、群组和其他都是全部rwx

4、Linux 文件类型

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件(进一步还包括纯文本文件,二进制文件,数据格式文件)
  • 若是[ l ]则表示为链接文件(link file);
  • 若是[ b ]则表示区块设备文件,为设备文件里面的可供储存的周边设备(可随机存取设备);
  • 若是[ c ]则表示字符设备文件,为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)
  • [s] 数据接口文件(sockets)
  • [p] 数据输送档(FIFO, pipe)

5、文件扩展名

只要你的权限当中具有x的话,即代表这个文件具有可以被执行的能力,但不一定执行成功

6、Linux目录配置-FPS标准

7、文件与目录管理

  • cd:变换目录
  • pwd:显示目前的目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录

8、Linux文件系统

Linux文件系统具有以下几个特点:

  1. 树形结构:Linux文件系统采用树状目录结构,具有单一的根目录(/),所有文件和目录都从根目录开始,一层一层向下延伸。
  2. 无结构的字符流式文件:Linux中的文件被视为无结构的字符流,这意味着文件内容可以被视为连续的字符序列,而不考虑其内部的结构或格式。
  3. 动态增长或减少:Linux文件可以动态地增长或减少,即文件的大小可以在使用过程中动态地改变。
  4. 访问权限控制:文件数据可由文件拥有者设置相应的访问权限而受到保护,这有助于保护文件的安全性和完整性。
  5. 设备文件:在Linux中,外部设备(如磁盘设备、键盘、鼠标和串口等)都被看作文件,这使得设备可以通过文件系统隐蔽掉设备特性,从而简化了设备的管理和使用。

Linux支持多种文件系统类型,其中一些常见的包括:

  • EXT系列文件系统:EXT系列文件系统是专门为Linux设计的高性能文件系统,包括EXT2、EXT3和EXT4等版本。这些文件系统具有良好的磁盘空间管理和容错能力,以及较高的性能和可靠性。
  • VFAT文件系统:VFAT文件系统是一种在Windows操作系统下广泛使用的文件系统类型,也称为FAT32。虽然它在Windows中广泛使用,但在Linux中也有一些应用场景。VFAT文件系统具有较好的兼容性,可以在不同的操作系统之间共享文件。

inode是什么?------索引节点

  • inode即为index node,就是索引节点
  • inode表中包含文件系统所有文件列表
  • 一个节点是在一个表项,包含了有关文件的信息(元数据)。
  • 一个文件有且只有一个inode

block是什么?------数据块

  • 文件数据存储在block中
  • 每块block只能存储一个文件
  • block 文件系统的最小存储单位是 1k,2k,4k,2^n

inode与block关系

1.磁盘被分区格式化分区之后,会分为inode和block两部分

2.inode存放文件的属性以及指向文件实体的指针(block的位置)

3.superblock用来存储inode和block的全部信息,包括inode和block的大小,数量,以及block的使用情况。

4.创建了一个文件时会同时创建inode和block,inode用来存储元数据和block指针,block用来存储数据内容。

5.一个block只能被一个文件使用,所以一个block并不是越大越好,当服务器存储的小文件居多,那么block设置的小一点比较好,不会浪费空间。当服务器存储的大数据居多,block设置的大一点比较好。

相关推荐
ZHOUPUYU12 分钟前
Centos常用命令,按功能分类,用户和权限管理等
linux·运维·centos
vvw&31 分钟前
如何在 Ubuntu 22.04 上安装 phpMyAdmin
linux·运维·服务器·mysql·ubuntu·php·phpmyadmin
手心里的白日梦1 小时前
TCP协议
服务器·网络·tcp/ip
灰勒塔德1 小时前
Linux文件IO
linux·运维·服务器
dntktop2 小时前
解锁自动化新高度,zTasker v2.0全方位提升效率
运维·windows
我曾经是个程序员2 小时前
C#Directory类文件夹基本操作大全
服务器·开发语言·c#
花姐夫Jun3 小时前
在 CentOS 8 系统上安装 Jenkins 的全过程
linux·centos·jenkins
运维&陈同学3 小时前
【Beats01】企业级日志分析系统ELK之Metricbeat与Heartbeat 监控
运维·elk·elasticsearch·云原生·kibana·heartbeat·metricbeat
地球资源数据云3 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
是店小二呀3 小时前
【Linux】Linux开发利器:make与Makefile自动化构建详解
linux·运维·自动化