牛客刷题-Linux

1.Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读。

2.在linux中,httpd.conf :网络服务器软件的配置文件,对WWW服务器进行访问、控制存取和运行等控制 。lilo.conf :由引导管理程序 lilo 读取的文件 inetd.conf :保存了系统提供internet服务的数据库并对其进行控制,如打开/关闭某项服务。 resolv.conf:域名解析器使用的配置文件

3.chown命令的完整语法是:chown [选项] user[:group] 文件例如:

  • chown user1 file1 (只改变拥有者)
  • chown user1:group1 file1 (同时改变拥有者和群组)

4.Linux系统中的crontab命令用于执行定期任务,时间格式为:分 时 日 月 星期 命令。其中*/n表示每隔n个单位时间执行一次。五个时间字段分别代表:分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6)

5.在Vi编辑器中,yy命令用于复制(yank)当前行内容,这是最标准和常用的复制当前行的操作方式。yy命令执行后,会将当前行的内容复制到Vi的默认寄存器中,之后可以使用p命令粘贴。

cc命令是删除当前行并进入插入模式(等同于删除当前行后按i键),而不是复制操作。

dd命令是删除(delete)当前行,会将当前行内容剪切到默认寄存器,而不是复制。虽然可以用p命令粘贴,但这改变了原文件内容。

6.在Linux系统下实现服务器间日志同步的技术选择。rsync是最佳选择,因为它具有以下优势:

  1. 增量传输 - rsync只传输有变化的文件部分,大大减少网络传输量
  2. 支持断点续传 - 传输中断后可以从断点处继续
  3. 可以通过ssh通道加密传输,保证数据安全
  4. 支持实时同步 - 可以配合inotify等工具实现实时文件同步
  5. 资源占用少 - 采用优化的传输算法,系统开销小

分析其他选项:B选项wget:主要用于从网络下载文件,不适合服务器间的文件同步C选项scp:虽然可以安全传输文件,但不支持增量传输,每次都要传输整个文件D选项ftp:传统文件传输协议,不支持增量传输,且安全性较差

7.文件类型和权限由开头的 10 个字符表示,第一位表示文件的类型,有如下几种:

  • 普通文件类型 d 目录文件 b 块设备文件 c 字符设备文件 s 套接字文件 p 管道文件 l 链接文件

8.在Linux系统中,文件的扩展名不是必需的,Linux系统判断文件类型主要是通过文件属性而不是扩展名来识别。虽然使用文件扩展名有助于用户识别文件类型,但这只是一种命名习惯,而不是必须的。

9./etc目录确实是存放系统配置文件的标准位置,包含了系统和应用程序的配置文件。

10./mnt目录是设计用来作为挂载点的标准目录,通常用于临时挂载其他文件系统,包括远程文件系统。

11.Linux的文件系统是大小写敏感的,这意味着"File.txt"和"file.txt"会被视为两个不同的文件。

12.Linux系统最重要的特点之一就是"一切皆文件",文件的类型是通过文件属性来标识的,而不依赖于文件的扩展名。例如,可执行文件不一定要以.exe结尾,图片文件不一定要以.jpg或.png结尾,系统仍然能够正确识别和处理这些文件。

13.tail -f 命令专门用于实时监控文件内容的变化,它会持续显示文件的最新内容,特别适合查看不断更新的日志文件。当文件有新内容追加时,这些内容会立即显示在屏幕上,这正是查看动态日志文件所需要的功能。

14.在Linux系统中,当一个设置了setuid权限的可执行文件被普通用户执行时,进程会有两个用户身份标识:实际用户ID(real user ID)和有效用户ID(effective user ID)。

  • 实际用户ID(mike):表示实际执行程序的用户,即谁在运行这个程序。在这个场景中是普通用户mike。
  • 有效用户ID(root):由于文件设置了setuid权限,且文件属主是root,所以程序运行时的有效用户ID会变成文件属主root。

这是Linux系统中的一个重要安全机制,允许普通用户以文件属主的权限来执行某些特权操作,比如使用passwd命令修改密码时,普通用户需要写入/etc/shadow文件,这就需要root权限。这种机制通过区分实际用户ID和有效用户ID来实现权限的精确控制。

15. read/write、pread/pwrite都是用于文件读写操作的系统调用函数,直接对文件描述符进行操作。lseek也是系统调用函数,用于设置文件描述符的偏移量。而fseek是标准C库函数,它是基于FILE结构体的高级文件操作函数,不是系统调用。

16.在多核处理器的Linux环境下,当临界区很短且不允许线程上下文切换时,使用自旋锁(SpinLock)是最佳选择。

SpinLock的工作原理是在请求锁时通过循环检查的方式等待锁释放,这种忙等待机制避免了线程的上下文切换。当临界区执行时间很短时,使用SpinLock的开销比进行上下文切换要小得多。

17.:s/old/new 将当前行中查找到的第一个字符 “old” 串替换为 “new”

:s/old/new/g 将当前行中查找到的所有字符串 “old” 替换为 “new”

:#,#s/old/new/g 在行号 “#,#” 范围内替换所有的字符串 “old” 为 “new”

:%s/old/new/g 在整个文件范围内替换所有的字符串“old”为“new”

18.在Linux/Unix系统中,复制文件有多种方法,

  1. cp file1 file2 (选项A)这是最直接、最常用的复制命令。cp命令专门用于文件复制,语法简单直观。
  2. cat file1 > file2 (选项B)使用cat命令读取file1的内容,然后通过重定向符号">"将内容写入file2。如果file2不存在会创建,如果存在会覆盖。
  3. cat < file1 > file2 (选项C)这种方式使用输入重定向"<"从file1读取,再用输出重定向">"写入file2。效果与B选项相同。
  4. dd if=file1 of=file2 (选项D)dd命令可以用于复制文件,if表示输入文件,of表示输出文件。dd命令更适合底层的块设备复制,但也可用于普通文件。
  5. cat file1 | cat > file2 (选项E)使用管道将file1的内容通过cat传递,然后重定向到file2。虽然看起来复杂,但确实可以完成文件复制。

这些命令都能实现文件复制的功能,只是实现方式和适用场景有所不同。cp命令最为直接高效,是日常使用的首选。其他方法虽然可能看起来迂回,但在特定场景下也都有其应用价值。

19.Shell脚本在嵌入式开发中主要用于自动化测试和部署

20.mkdir 命令用于创建目录

  • -p 参数允许创建嵌套的目录结构,如果父目录不存在会自动创建
  • -m 700 设置目录权限,700表示只有所有者有读、写、执行权限(rwx),其他用户无权限
  • 这个命令可以一次性创建完整的目录路径并设置正确的权限
  • 21.Linux系统不允许对目录创建硬链接。这是因为如果允许对目录创建硬链接,可能会造成文件系统循环引用,导致系统混乱。

    22.硬链接不能跨文件系统建立。因为不同的文件系统使用独立的inode编号系统,而硬链接要求共享同一个inode号。

    23.硬链接不能跨分区建立。不同分区相当于不同的文件系统,使用不同的inode管理方式。

    24.硬链接的主要特点是:

    1. 具有相同的inode号
    2. 具有相同的文件内容
    3. 删除任意一个链接,文件实体仍然存在
    4. 只能对文件创建,不能对目录创建
    5. 必须在同一个文件系统中创建

    25.Linux系统进程类型有:交互进程;批处理进程;监控进程(守护进程)。

    交互进程:由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。 

    批处理进程:这种进程和终端没有联系,是一个进程序列。

    监控进程(也称守护进程):Linux系统启动时启动的进程,并在后台运行。

    26.Linux系统中的BootLoader是在操作系统运行之前运行的程序,负责引导和加载操作系统内核。这些选项都是常见的嵌入式Linux系统中的BootLoader,每个都有其特定的应用场景。

    vivi是一个简单的bootloader,主要用于ARM架构的嵌入式系统,特别是三星的S3C2410/S3C2440处理器平台。它具有小巧、快速启动的特点。

    Blob(Boot Loader Object)是另一个用于嵌入式系统的开源bootloader,主要用于MIPS架构,提供基本的系统引导功能。

    U-boot(Universal Boot Loader)是目前最流行的开源bootloader之一,支持多种架构(如ARM、MIPS、x86等),功能强大,可定制性强,社区活跃。

    E-boot也是一个常用的bootloader,主要应用于嵌入式系统,具有配置灵活、代码精简的特点。

    这些bootloader都在嵌入式Linux系统中得到广泛应用,它们各自针对不同的硬件平台和应用场景进行优化,为系统启动提供重要支持。因此所有选项都是正确的。

    27.在 Linux 系统中,ELF(Executable and Linkable Format) 是用于可执行文件、共享库、目标文件及核心转储的标准文件格式。根据 ELF 规范和搜索结果,以下文件类型属于 ELF 格式:

    1. Linux 可执行文件 类型:ELF 可执行文件(ET_EXEC)。 特点:包含程序入口地址、代码段(.text)、数据段(.data)等,可直接由操作系统加载运行。 示例:/bin/ls、用户编译的a.out。 验证:通过file命令查看文件类型,例如file /bin/ls会输出ELF 64-bit LSB executable。
    2. Linux 动态链接库 类型:ELF 共享目标文件(ET_DYN)。 特点:以.so为扩展名,包含可被多个程序共享的代码和数据,支持动态加载(如libc.so)。 验证:使用readelf -h查看 ELF 头,e_type字段显示为DYN (Shared object file)。
    3. Linux 核心转储文件 类型:ELF 核心转储文件(ET_CORE)。 特点:程序崩溃时生成,包含进程的内存映像和调试信息,用于分析崩溃原因(如core文件)。 验证:通过file core命令可确认其 ELF 类型。
    4. Linux 静态链接库 类型:不属于 ELF 格式。 说明:静态链接库(.a文件)本质是目标文件(.o)的归档集合,而单个.o文件是 ELF 可重定位文件(ET_REL)。但.a文件本身是ar归档格式,非 ELF。 验证:使用ar -t lib.a可查看其包含的.o文件,但直接执行file lib.a会显示current ar archive。 总结 文件类型 是否属于 ELF 原因 Linux 可执行文件 是 直接包含程序入口和代码,符合ET_EXEC类型。 Linux 动态链接库 是 以.so结尾,符合ET_DYN类型,支持动态加载。 Linux 核心转储文件 是 崩溃时生成,符合ET_CORE类型,用于调试。 Linux 静态链接库 否 本质是ar归档文件,包含多个 ELF 目标文件(.o),但自身非 ELF。 扩展知识 ELF 文件结构:包含 ELF 头、程序头表(加载段信息)、节头表(符号表、代码段等)及数据区。 动态链接机制:通过 PLT(过程链接表)和 GOT(全局偏移表)实现运行时符号解析。 工具支持:readelf、objdump可分析 ELF 文件结构,ldd查看动态库依赖。 若需进一步验证文件类型,可通过readelf -h <文件>或objdump -f <文件>查看详细信息。

    全部评论

    相关推荐

    03-06 18:20
    门头沟学院 Java
    点赞 评论 收藏
    分享
    评论
    点赞
    收藏
    分享

    创作者周榜

    更多
    牛客网
    牛客网在线编程
    牛客网题解
    牛客企业服务