Linux系统编程day1 p1-p16 黑马+gemini

https://www.bilibili.com/video/BV1KE411q7ee/

Linux系统编程day1 p1-p16 黑马+gemini

p1. Shell 基础与终端快捷键

1. Shell 环境查看

Shell 是连接用户与 Linux 内核的命令解释器。在系统编程与日常开发中,了解当前运行的 Shell 环境是进行配置的基础。

  • 查看系统当前时间

    • 命令date
    • 作用:显示或设置系统的日期和时间。
  • 查看当前系统可使用的所有 Shell 列表

    • 命令cat /etc/shells
    • 作用:读取 /etc/shells 配置文件,列出系统安全合法的 Shell 环境(如 /bin/sh, /bin/bash, /bin/zsh 等)。
  • 查看当前终端正在使用的 Shell

    • 命令echo $SHELL
    • 作用:输出环境变量 SHELL 的值,用于确定当前用户的默认 Shell。

2. 终端快捷键(Emacs 风格标准组合)

快捷键 功能描述 备考/记忆技巧
Ctrl + p 切换到上一条命令 (Previous) 作用同方向键
Ctrl + n 切换到下一条命令 (Next) 作用同方向键
Ctrl + b 光标向左移动一个字符 (Backward) 作用同方向键
Ctrl + f 光标向右移动一个字符 (Forward) 作用同方向键
Ctrl + a 光标移动到行首 (Ahead) 作用同 Home
Ctrl + e 光标移动到行尾 (End) 作用同 End
Ctrl + d 删除光标后面的单个字符 (Delete) 作用同 Del 键,若无输入则退出当前 Shell
Backspace 删除光标前面的单个字符 标准退格键
Ctrl + u 清除整行(严格来说是删除光标至行首的所有字符) 快速重输命令时常用
Ctrl + k 删除从光标所在位置到行末的所有字符 用于剪切尾部冗余参数
Shift + PgUp 终端屏幕向上滚动 查看历史滚屏输出
Shift + PgDn 终端屏幕向下滚动 返回最新的输出界面
Ctrl + Shift + + 增大终端字体 便于代码演示或高分辨率屏幕适配
Ctrl + - 减小终端字体 增大屏幕视野,查看长行日志
Ctrl + Alt + T 新建并打开一个独立的终端窗口 Ubuntu 等桌面系统的通用快捷键
Ctrl + l 清除屏幕显示 (Clear Screen) 等效于执行 clear 命令,但速度更快

p2. 类 Unix 系统目录架构与硬件设备映射

1. 核心目录解析

Linux 采用单一根目录(/)的树状架构,其目录设计遵循 FHS (Filesystem Hierarchy Standard) 标准:

  • /bin (Binary):存放系统设计者和用户通用的、最基本的二进制可执行命令(如 ls, cp, date 等)。
  • /boot:存放系统启动所需的核心文件,包括 Linux 内核(vmlinuz)及引导加载程序(GRUB)。
  • /dev (Device):核心虚拟文件系统。Linux 引入“一切皆文件”的设计哲学,所有底层物理硬件设备在此目录下均映射为一个设备文件。
    • 字符设备 (Character Device):按字节流串行顺序读写的设备,如鼠标、键盘、串口。
    • 块设备 (Block Device):支持随机按块(Block)读写的存储设备,如硬盘、U 盘。
  • /home:普通用户的宿主目录(家目录)。新建用户 username 后,系统会默认在此创建 /home/username
  • /root:超级管理员(root)的专属宿主目录。
  • /etc (Editable Text Configuration):存放系统管理所需的绝大多数配置文件,如用户信息文件 /etc/passwd、群组文件 /etc/group
  • /lib (Library):存放系统最基本的动态链接共享库(如 C 标准库 libc.so.6)及内核模块,作用等同于 Windows 下的 .dll 文件。
  • /usr (Unix Software Resource):存放用户级软件资源与应用程序的目录,类似 Windows 的 Program Files

2. 硬件外设的“一切皆文件”特性验证(以鼠标日志为例)

在类 Unix 系统中,可以通过读取 /dev/input/ 下的设备映射文件直接捕获硬件产生的原始二进制事件:

# 1. 切换至输入设备映射目录
cd /dev/input

# 2. 列出输入设备(常见包含 eventX, mice, mouseX 等)
ls

# 3. 使用 sudo 权限实时捕获鼠标原生二进制数据流
sudo cat mice
  • 现象说明:当晃动鼠标或点击按键时,终端会高频刷新大量不可读的乱码及特殊字符。
  • 底层原理:这是由于鼠标传感器产生的硬件中断被内核捕获后,转换为底层的二进制事件数据流(包含相对坐标偏移 XY 及按键状态)。cat 命令将其视为文本解析导致乱码。这也直接证明了 硬件在 Linux 中被彻底抽象为可读写的文件

p3. 目录与文件基础操作 (I)

1. 路径导航

  1. pwd (Print Working Directory)

    • 格式pwd

    • 功能:显示当前工作目录的绝对路径。

  2. cd (Change Directory)

    • 格式cd [目的地路径]
    • 特殊路径符
      • cd ~:切换至当前用户的家目录(/home/user)。
      • cd -返回上一次所在的工作目录。在两个相距较深的目录间高频切换时极为高效。

2. Linux 系统文件类型 (7 种核心类型)

ls -l 输出的结果中,第一个字符代表文件的物理/逻辑类型:

  1. - (普通文件):包括文本文件、源码、二进制可执行程序等。
  2. d (目录文件 - Directory):在 Linux 中目录也是一种特殊文件,存储着下属文件名的索引列表。
  3. c (字符设备文件 - Character):如串行端口、虚拟终端、鼠标(/dev/input/mice)。
  4. b (块设备文件 - Block):如系统硬盘(/dev/sda)。
  5. l (软链接/符号链接 - Link):快捷方式,指向另一个文件的路径。
  6. p (管道文件 - Pipe):用于进程间通信(IPC)的有名管道(FIFO)。
  7. s (套接字文件 - Socket):用于网络或本地进程间高性能通信的端点。

3. ls 命令族:列出目录内容

  • 命令格式ls [选项] [目录/文件]
  • 常用核心参数结合
    • ls:仅列出可见的文件和目录名。
    • ls -l(在多数 Shell 中被别名为 ll):以长格式(详细信息)竖排显示目录项。
    • ls -l dirname:列出指定目录 dirname 内部所有子项的详细信息。
    • ls -dl dirname仅列出目录本身 (dirname) 这一文件的详细属性,而不展开其内部子项。
    • ls -R:递归(Recursive)列出当前目录及其所有子目录结构下的内容。
    • ls -Rl:递归列出全套文件树的完整长格式详细属性。

4. ls -l 长格式属性解析

执行 ls -l 后,每行输出包含 7 个标准字段:

字段示例 含义
drwxrwxr-x 文件类型与权限标志位(1 位类型 + 9 位权限,详见下文)
2 硬链接计数(对目录而言,代表其包含的子目录数+2)
shiyanlou 文件所有者 (Owner)
shiyanlou 文件所属组 (Group)
4.0K / 4096 文件大小(单位:字节。加 -h 参数可以显示为可读性强的 K/M/G)
9月 29 2019 最后修改时间 (mtime)
Code 文件名或目录名

权限位的 10 位排列机制:

-rw-r--r-- 为例,将其拆分为 4 个部分:

   -         rw-            r--            r--
文件类型    所有者权限        同组权限       其他人权限
  • 第 1 位:文件类型(如 - 纯文件,d 目录)。
  • 第 2、3、4 位:所有者(User)具备的权限(r 读,w 写,x 执行,- 缺失)。
  • 第 5、6、7 位:同组用户(Group)具备的权限。
  • 第 8、9、10 位:其他非本组用户(Others)具备的权限。

5. 命令检索与环境调优

  • 查找可执行命令的绝对路径位置
    • 格式which 命令名(例如:which date 输出 /bin/date
    • 原理:在环境变量 PATH 设定的目录序列中,检索指定的二进制可执行文件。
  • 精简/隐藏终端提示符中的冗余路径
    • 背景:默认终端提示符(PS1)通常会显示复杂的 user@hostname:~/Long/Path/$。在目录层级极深时会占据大量屏幕空间。
    • 修改方案
      1. 使用编辑器打开 Shell 的环境配置文件:vi ~/.bashrc(若使用 Zsh 则为 vi ~/.zshrc)。
      2. 在文件最末尾追加配置:PS1='\$ '
      3. 保存退出后执行 source ~/.bashrc 刷新环境,即可将提示符精简为单一的 $ ,隐藏一切路径和主机信息,提供极简的沉浸式编码视野。

p4. 目录与文件基础操作 (II)

1. 文件与目录的增删改

  • mkdir (Make Directory)

    • 格式mkdir [选项] 目录名
    • 扩展参数mkdir -p path/to/dir 可递归创建多层嵌套的未知级联目录。
  • rmdir (Remove Empty Directory)

    • 格式rmdir 目录名
    • 重要限制只能用于删除空目录。若目录下存在任何子文件或关联项,系统将报错 删除失败: 目录非空
  • touch

    • 格式touch 文件名
    • 行为:若指定文件名不存在,则创建一个大小为 0 字节的空文件;若文件已存在,则刷新该文件的访问时间(atime)与修改时间(mtime),不对内容做任何破坏。
  • rm (Remove)

    • 格式rm [选项] 文件或目录
    • 核心安全选项
      • rm filename:删除普通文件。
      • rm -r dirname:递归(Recursive)删除目录及其内部包含的所有层级的文件。
      • rm -rf dirname强制(Force)递归删除,跳过一切系统二次确认和写保护警告。在工程级清理垃圾日志时常用,但极其危险。
  • mv (Move / Rename)

    • 格式mv 源文件/源文件列表 目标位置
    • 多文件移动格式mv file1 file2 file3 target_directory/ (将前述所有文件一次性移入目标目录)。
    • 重命名机制:若目标路径在同目录下且为新文件名,则直接视作重命名(Rename)。
  • cp (Copy)

    • 格式cp [选项] 源文件 目标路径
    • 场景参数详解
      • cp file1 file2:复制并生成新文件 file2
      • cp file1 dirname/:将文件复制到指定目录下。
      • cp -r dirname1 dirname2:递归复制整个目录树,若目标目录存在,则将 dirname1 整体作为子项移入。
      • cp -a dirname1 dirname2归档复制 (Archive)。(镜像克隆,修改日期等均不会更新)
    • -a-r 的深层核心差异
      • -r (Recursive) 仅执行纯内容的递归复制,新生成的文件和目录其所有者会变更为当前执行复制操作的用户,且改动时间(mtime)会刷新为当前系统时间,符号链接文件会被解析并复制其指向的物理实体。
      • -a (等价于 -dpR) 是完全保真复制。它不仅递归复制内容,还能完好保留原文件的全部读写执行权限(Permissions)、硬链接关系、用户所有者、所属组属性以及历史时间戳,且遇到软链接时只会复制软链接本身而不破坏结构。在系统级备份、镜像迁移中,必须强制使用 -a

2. 文件内容浏览与文本流处理

  • cat (Concatenate)

    • 格式cat filename
    • 底层行为:将文件的全部内容一次性倾倒(Dump)到标准输出。不适宜查看超大型文件。
    • 回显机制:若单独输入 cat 且不加任何文件名参数,它将阻塞并切换为读取标准输入流(终端键盘)状态。此时你在终端输入什么,按下回车后终端便会同步回显什么。使用 Ctrl + d 可发送 EOF 信号正常退出。
  • tac

    • 格式tac filename
    • 功能:与 cat 正好相反(字母顺序也是反向的),它会按行从最后一行到第一行逆序颠倒输出文件内容。
  • more

    • 格式more filename
    • 交互逻辑:全屏按页分屏查看大文本。按下 Space(空格)翻页,按下 Enter(回车)滚屏前进一步。执行完毕或按 q / Ctrl + c 退出。
  • less

    • 格式less filename
    • 工程优势:高级文本流查看器。比 more 更加强大,支持向前/向后自由翻页(PgUp/PgDn)。底层不会一次性加载整个大文件进内存,在查看数 GB 级的大型服务器工程日志时效率极高。
  • head

    • 格式head -n [行数] filename
    • 默认行为:如果不带 -n 参数(如 head file3),系统默认展示文件的前 10 行。例如查看前 5 行:head -5 file3
  • tail

    • 格式tail -n [行数] filename
    • 默认行为:如果不带参数,系统默认展示文件的最后 10 行。
    • 重要特性:它是顺序显示文件尾部内容,而不是倒序。例如一个文件有 12 行,执行 tail -5 会顺序列出第 8、9、10、11、12 行。
    • 高级面试扩展:在实际开发中,高频使用 tail -f logfile 来实时滚动追踪(Follow)文件新增追加的内容,常用于分布式架构下的动态日志排查。

3. tree 命令:可视化树状结构查看

  • 安装命令(基于 Debian/Ubuntu 体系):

    • 基于 Debian/Ubuntu 体系:

      sudo apt-get update
      sudo apt-get install tree
      
    • 基于 Red Hat/CentOS/Fedora 体系(红帽体系):

      红帽 (dnf/yum) 不需要手动 update。

      # 新版系统(推荐)
      sudo dnf install tree
      # 旧版系统
      sudo yum install tree
      
  • 格式tree [目录名]

  • 功能输出:以极其直观的图形化树状分支结构图,将指定工作目录下的全部层级、子目录及文件依赖关系渲染出来,并在末尾精准汇总统计包含的实体目录与文件总数(如 1 directory, 4 files)。

posted @ 2026-07-12 22:12  学习笔记草稿存放账号  阅读(6)  评论(0)    收藏  举报