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
- 现象说明:当晃动鼠标或点击按键时,终端会高频刷新大量不可读的乱码及特殊字符。
- 底层原理:这是由于鼠标传感器产生的硬件中断被内核捕获后,转换为底层的二进制事件数据流(包含相对坐标偏移
X、Y及按键状态)。cat命令将其视为文本解析导致乱码。这也直接证明了 硬件在 Linux 中被彻底抽象为可读写的文件。
p3. 目录与文件基础操作 (I)
1. 路径导航
-
pwd(Print Working Directory)-
格式:
pwd -
功能:显示当前工作目录的绝对路径。
-
-
cd(Change Directory)- 格式:
cd [目的地路径] - 特殊路径符:
cd ~:切换至当前用户的家目录(/home/user)。cd -:返回上一次所在的工作目录。在两个相距较深的目录间高频切换时极为高效。
- 格式:
2. Linux 系统文件类型 (7 种核心类型)
在 ls -l 输出的结果中,第一个字符代表文件的物理/逻辑类型:
-(普通文件):包括文本文件、源码、二进制可执行程序等。d(目录文件 - Directory):在 Linux 中目录也是一种特殊文件,存储着下属文件名的索引列表。c(字符设备文件 - Character):如串行端口、虚拟终端、鼠标(/dev/input/mice)。b(块设备文件 - Block):如系统硬盘(/dev/sda)。l(软链接/符号链接 - Link):快捷方式,指向另一个文件的路径。p(管道文件 - Pipe):用于进程间通信(IPC)的有名管道(FIFO)。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/$。在目录层级极深时会占据大量屏幕空间。 - 修改方案:
- 使用编辑器打开 Shell 的环境配置文件:
vi ~/.bashrc(若使用 Zsh 则为vi ~/.zshrc)。 - 在文件最末尾追加配置:
PS1='\$ ' - 保存退出后执行
source ~/.bashrc刷新环境,即可将提示符精简为单一的$,隐藏一切路径和主机信息,提供极简的沉浸式编码视野。
- 使用编辑器打开 Shell 的环境配置文件:
- 背景:默认终端提示符(
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)。

浙公网安备 33010602011771号