6、Linux操作系统基础知识
1. Linux系统结构
1. 内核
内核是操作系统的核心组件,负责管理系统资源和硬件设备。它提供了硬件抽象层,使得应用程序不必直接操作硬件。内核的主要功能包括:
- 进程管理:创建、调度和终止进程。
- 内存管理:分配和回收内存,提供虚拟内存功能。
- 设备管理:控制硬件设备的访问。
- 文件系统管理:管理文件和目录结构。
- 系统调用接口:提供系统调用,使应用程序能够与操作系统交互。
2. Shell
Shell是用户与操作系统之间的交互界面,接受用户命令并将其传递给内核执行。Shell可以是命令行界面(CLI)或图形用户界面(GUI)。其主要作用包括:
- 命令解释:解析用户输入的命令。
- 脚本执行:运行Shell脚本,实现自动化任务。
- 程序启动:根据用户命令启动应用程序。
- 环境管理:配置和管理用户环境变量。
3. 文件系统
文件系统负责管理和存储数据,提供文件和目录的组织结构。其主要功能包括:
- 数据存储:将数据以文件形式存储在磁盘上。
- 目录管理:组织文件和目录的层次结构。
- 访问控制:设置文件和目录的读写权限。
- 文件操作:提供创建、删除、读取、写入和修改文件的操作接口。
4. 应用程序
应用程序是由用户或第三方开发者编写的软件,用于执行特定任务或功能。它们通过系统调用与内核交互,利用系统资源完成任务。应用程序的主要特点包括:
- 特定功能:每个应用程序针对特定的任务设计,例如文字处理、数据分析、网络浏览等。
- 用户接口:提供图形界面或命令行界面供用户操作。
- 依赖系统资源:通过系统调用接口使用内存、CPU、存储等系统资源。
- 扩展性:可通过插件或外部模块扩展功能。
Linux操作系统内核
-
1、进程管理:
- 进程调度
- 进程创建与销毁
- 进程间通信
-
2、内存管理:
- 内存分配与回收
- 虚拟内存管理
- 缓存管理
-
3、驱动管理:
- 设备驱动程序接口
- 硬件抽象层
- 中断处理
-
4、文件和网络管理:
- 文件系统管理
- 网络协议栈
- 网络安全及防火墙管理
........
Linux Shell(壳)
Linux Shell接收用户命令并将其转换为内核可执行的系统调用。具体而言,用户输入的命令如cat
会被Shell解析为open()
和read()
等系统调用,然后由内核执行。
- 简化操作:Shell通过友好的命令行接口,使用户无需了解底层细节即可与操作系统交互。
- 安全性:Shell验证和解析用户输入,确保只执行合法命令,从而增强内核的安全性。
Linux Shell工具
名称 | 程序路径 | 作者 |
---|---|---|
Bourne Shell | /usr/bin/sh 或 /bin/sh | Stephen Bourne |
C Shell | /usr/bin/csh | Bill Joy |
K Shell | /usr/bin/ksh | David Korn |
Bourne Again Shell | /bin/bash | Brian Fox |
Z Shell | /bin/zsh 或 /usr/bin/zsh | Paul Falstad |
- 查看当前工具:
echo $SHELL
- 查看工具列表:
cat /etc/shells
- 查看可切换工具:
chsh -l
- 切换使用工具:
chsh -s 工具名
Shell和Terminal
Shell编程/Shell脚本(.sh)
Linux文件系统
一切皆文件
在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括:
- 普通文件:存储数据的常规文件。
- 目录文件:包含其他文件和子目录的文件。
- 进程文件:在
/proc
目录下代表系统中运行的进程。 - 设备文件:位于
/dev
目录,代表硬件设备。 - 网络字节流套接字文件:用于网络通信的数据流。
- 链接文件:指向另一个文件的符号链接或硬链接。
- 管道文件:用于进程间通信的文件。
这种设计哲学是Linux系统高效和灵活性的基础。通过统一的文件接口,用户和程序可以以一致的方式访问和操作系统资源,从而简化了系统的操作和管理。
命令 | 作用 |
---|---|
lsof /bin/bash |
查找与某个文件相关的进程 |
lsof -u root |
列出某个用户(如 root)打开的文件信息 |
lsof -c redis |
列出某个程序(如 redis)进程所打开的文件信息 |
lsof -i tcp |
列出所有 TCP 网络连接信息 |
losf 文件名——查看合格者文件相关的进程。
/ 在Linux系统里是根目录,也是分隔符
目录结构
目录 | 作用 | 备注 |
---|---|---|
/bin |
存放普通用户可执行的指令 | 即使在单用户模式下也能够执行 |
/boot |
开机引导目录 | 包括Linux内核文件与引导文件 |
/dev |
设备目录 | 存放所有硬件设备 |
/etc |
配置文件目录 | 存放大部分配置属性 |
/lib |
库文件存放地 | 类似Windows的DLL |
/media |
可移除设备挂载目录 | 用于U盘、光盘等 |
/mnt |
临时挂载其他文件 | 额外设备的临时挂载 |
/opt |
第三方软件安装目录 | 习惯上放置在/usr/local 中 |
/proc |
虚拟文件系统 | 通常为内存中的映射 |
/root |
系统管理员主目录 | 除root外其他用户在/home 下 |
/run |
系统运行时所需文件 | 重启后重新生成 |
/sbin |
只有root能运行的管理指令 | 类似/bin,但仅限于管理员 |
/srv |
服务所需数据目录 | |
/sys |
虚拟文件系统 | 记录核心系统硬件信息 |
/tmp |
临时文件目录 | 所有用户可读写 |
/usr |
应用程序放置目录 | |
/var |
存放经常改变的文件 |
用户主目录
-
主目录:
home directory
- root用户的主目录是
/root
- 其他用户的主目录格式为
/home/用户名
- 使用命令
cd
或cd ~
可切换到主目录
- root用户的主目录是
-
工作目录:
working directory
目录指代
符号 | 指代 |
---|---|
/ |
根目录 |
. |
当前目录 |
~ |
用户工作目录 |
../ |
上一级目录 |
../../ |
上上一级目录,依此类推 |
命令帮助
- 查看命令手册:
man command
- 简要说明:
whatis command
- 详细介绍:
info command
- 内置命令帮助:
help command
在线查询:
关机与重启(root用户)
-
关机命令:
poweroff
shutdown -h now
halt -p
-
重启命令:
reboot
快捷键与命令
操作 | 作用 |
---|---|
Tab |
补全命令和目录 |
↑/↓ |
上一条/下一条命令 |
Ctrl + Insert |
复制 |
Shift + Insert |
粘贴 |
Alt + Insert |
复制并粘贴 |
Ctrl + E |
光标移动到行尾 |
Ctrl + A |
光标移动到行首 |
Ctrl + K |
清除光标后至行尾的内容 |
Ctrl + U |
清除光标前至行首的内容 |
Ctrl + R |
搜索历史命令 |
!cd: |
重复执行最近一次以cd 开头的命令 |
clear |
清屏 |
history |
查看历史命令 |
history -c |
清除历史命令(新建会话后仍在) |
echo > ~/.bash_history |
彻底清除历史命令(CentOS) |
echo > ~/.zsh_history |
彻底清除历史命令(Kali Linux) |
echo > ~/.bash_history
实际是将空赋给当前用户历史文件,达到清空目的
别名配置 alias
- 查看别名:
alias
- 设置别名:
- 打开配置文件:
vim ~/.bashrc
- 添加别名格式:
alias short='xxx;xxx'
- 打开配置文件:
- 使配置生效:
source ~/.bashrc
通配符
符号 | 指代 |
---|---|
* | 任意字符 |
? | 单个字符 |
[] | 匹配范围中的字符,例如:[0-9] 表示数字,[a-z] 表示小写字母 |
{} | 匹配多个模式中的一个,例如:*.{log,txt} 表示匹配 .log 和 .txt 文件 |
^ | 取反,例如:*[^txt] 查找不是 .txt 结尾的文件 |
系统环境变量 实际就是可执行文件的路径
- 作用:定义可执行文件的路径
- 查看全部变量:
env
- 查看单个变量:
echo $XXX
- 用户变量存放在:
~/.bashrc
- 系统变量存放在:
/etc/profile
设置JDK环境变量:
- 编辑系统环境配置文件:
vim /etc/profile
- 添加以下内容:
export JAVA_HOME=/usr/local/soft/java/jdk1.8.0_74 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使配置生效:source /etc/profile
重定向符号
使用场景:
- 保存屏幕输出到文件。
- 将后台程序输出保存到文件。
- 将文件内容作为命令的输入。
- 屏蔽命令运行中的错误信息。
文件描述符
ID | 描述 | 设备 | 备注 |
---|---|---|---|
0 | 标准输入 (stdin) | 键盘 | 默认输入值 |
1 | 标准输出 (stdout) | 显示器 | 默认输出值 |
2 | 标准错误输出 (stderr) | 显示器 |
重定向符号解释
符号 | 类别 | 描述 |
---|---|---|
> |
输出重定向 | 将命令的输出重定向到文件,覆盖原有内容 |
>> |
输出重定向 | 将命令的输出追加到文件末尾 |
&> |
输出重定向 | 将标准输出和标准错误输出重定向到文件 |
< |
输入重定向 | 将文件内容作为命令的输入 |
<< |
输入重定向 | 将多行文本作为命令的输入(Here Document) |
案例—输出重定向
类别 | 命令格式 | 示例 |
---|---|---|
标准输出 | command > file |
ls / 1> test.txt (1可以省略) |
重定向 | command >> file |
echo "aaa" 1>> test.txt (1可以省略) |
标准错误 | command 2> file |
find / -name "aaa" 2> err.txt |
输出重定向 | command 2>> file |
find / -name "aaa" 2>> err.txt |
输出和错误 | command > file 2>&1 |
ls 7.txt 8.txt 1> a.txt 2> b.txt |
- 2>&1的含义:将标准错误输出重定向到标准输出,符号>&是一个整体,不可分 开,分开后就不是上述含义了
- 2>1的写法其实是将标准错误输出重定向到名为"1 ”的文件里去了
命令格式 | 说明 | 案例 |
---|---|---|
command < file |
将文件内容作为命令的输入 | wc -l < test.txt 统计test.txt 文件中有多少行文本 |
command << END |
从标准输入(键盘)中读取数据,直到遇见分界符END才停止 | wc -l << END 统计用户在终端输入的文本的行数 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能