Linux 介绍、命令、.gitingore的书写
Linux 介绍、命令、.gitingore的书写
- Linux 和 shell
- Git——.gitingore的书写
Linux 和 shell
项目结构——❤️

查看系统发行版本
cat /etc/os-release

🌲 思维导图:Linux 知识体系(以“Linux”为根节点)
Linux
|
--------------------------------------------------------
| | |
内核 (Kernel) 发行版 (Distribution) 工具与生态
| | |
麒麟、Linus、... 商业发行版 社区发行版
| | | |
核心功能: RHEL Debian Ubuntu
- 进程管理 Fedora CentOS Arch
- 内存管理 SUSE Mint openSUSE
- 文件系统管理
- 网络栈
- 设备驱动
| | | |
| | | |
| Red Hat Canonical Debian
| | | |
| (商业) (社区) (社区)
|
|
|
v
常用工具与命令
|
-------------------------------
| | |
命令行工具 文件系统 用户与权限
| | |
- ls, cd, pwd - mount - useradd
- ps, kill - tar, gzip - sudo
- grep, awk - cp, mv - chmod
- find, which - df, du - chgrp
- vim - ln, touch - su
- scp - fdisk - usermod
- ssh - blkid - groupadd
- top, htop - mkfs - passwd
- id
- whoami
linux 常见的各种版本
Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Red Hat(RHEL红帽)为代表,后者以Debian为代表
“Linux 通常指代 Linux 内核;而我们在日常中使用的‘Linux 系统’其实是基于该内核的 发行版(Distribution)。发行版分为:
- 商业发行版:如 Red Hat Enterprise Linux (RHEL),由 Red Hat 公司提供,用于企业环境。
- 社区发行版:如 Debian、Ubuntu、openSUSE、Arch Linux 等,由开源社区维护。
注意:Fedora 是 Red Hat 提供的 免费、前沿的社区项目,它也是 RHEL 的技术试验田
而 CentOS 原本是 RHEL 的免费克隆版本,但如今已被 CentOS Stream 取代,成为 RHEL 的滚动预览版本”
Kali Linux 是一个基于 Debian 的 Linux 发行版,专为网络安全和渗透测试设计
Alpine Linux 是一个轻量级的Linux发行版本,没有自带很多软件,安装完虚拟磁盘才150M。
Ubuntu 是基于 Debian 开发的,每六个月发布一次版本,并每两年推出一个长期支持(LTS)版本
Debian 被称为“所有发行版之母”,其开发由社区驱动,注重稳定性和开源原则。Ubuntu 则由 Canonical 公司开发
| 发行版 | 类型 | 公司 | 特点 |
|---|---|---|---|
| RHEL | 商业 | Red Hat | 稳定、付费、安全支持好 |
| Fedora | 社区 | Red Hat | 最新特性、开发人员友好 |
| CentOS | 社区 | Red Hat | 旧版是 RHEL 的免费镜像,现在是 CentOS Stream(滚动更新) |
| Debian | 社区 | 自由组织 | 很稳定,适合服务器,依赖关系强 |
| Ubuntu | 社区 | Canonical | 用户友好,桌面体验佳,广泛用于云平台 |
| openSUSE | 社区 | SUSE | 功能丰富,YaST 图形管理工具强大 |
| Arch Linux | 社区 | 无公司 | 极简主义,滚动更新,适合高级用户 |
Linux各个版本的包管理器
Linux 发行版虽然多,但归根结底主要分为两大家族(Red Hat 系和 Debian 系),外加一些独立的发行版(如 Arch、openSUSE)。
核心概念:包管理器是什么?
简单来说,它是 Linux 的“应用商店”后台。
- 底层工具:直接处理
.rpm或.deb这种安装包文件(如rpm,dpkg)。 - 高层工具:自动处理依赖关系、从网络下载软件(如
dnf,apt,pacman)。我们平时主要用高层工具。
一、 Red Hat 家族 (RHEL / Fedora / CentOS)
特点:使用 .rpm 包格式。
核心工具:dnf (新一代) / yum (旧一代,CentOS 7/RHEL 7 及以下常用),底层是 rpm。
注意:在 RHEL 8/9、Fedora、CentOS Stream 中,
yum已经被dnf取代(虽然输入yum通常会自动跳转到dnf),但命令语法基本一致。
1. 常用命令语法 (dnf/yum)
所有命令都需要 sudo 权限(因为要修改系统文件)。
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 更新系统 | sudo dnf update 或 sudo dnf upgrade |
升级所有已安装的软件包 |
| 安装软件 | sudo dnf install <包名> |
例如:sudo dnf install nginx |
| 删除软件 | sudo dnf remove <包名> |
例如:sudo dnf remove nginx |
| 搜索软件 | dnf search <关键词> |
例如:dnf search python |
| 查看信息 | dnf info <包名> |
查看软件的详细信息 |
| 清理缓存 | sudo dnf clean all |
清理下载的安装包缓存,释放空间 |
2. 底层命令 (rpm)
当你下载了一个本地的 .rpm 文件时使用:
- 安装:
sudo rpm -ivh package.rpm - 查询:
rpm -qa | grep <包名>
二、 Debian 家族 (Debian / Ubuntu)——⭐
特点:使用 .deb 包格式。
核心工具:apt (现代推荐) / apt-get (旧版),底层是 dpkg。
注意:
apt是给人用的(有进度条、颜色),apt-get是给脚本用的。平时用apt就好。
1. 常用命令语法 (apt)
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 更新源列表 | sudo apt update |
非常重要:只更新软件列表,不升级软件 |
| 更新系统 | sudo apt upgrade |
升级所有可升级的软件 |
| 全量升级 | sudo apt full-upgrade |
智能处理依赖关系变化(如内核升级) |
| 安装软件 | sudo apt install <包名> |
例如:sudo apt install nginx |
| 删除软件 | sudo apt remove <包名> |
保留配置文件 |
| 彻底删除 | sudo apt purge <包名> |
删除软件及所有配置文件 |
| 搜索软件 | apt search <关键词> |
例如:apt search python |
| 清理缓存 | sudo apt autoremove |
删除不再需要的依赖包 |
| 清理缓存 | sudo apt clean |
清理下载的 .deb 缓存 |
建议定期执行
sudo apt update && sudo apt upgrade -y可保持系统安全稳定,更新软件包索引并且自动确认,避免交互
2. 底层命令 (dpkg)
当你下载了一个本地的 .deb 文件时使用:
- 安装:
sudo dpkg -i package.deb - 修复依赖:
sudo apt install -f(如果 dpkg 安装报错,运行此命令修复)
三、 openSUSE 家族
特点:使用 .rpm 包格式,但有自己的高层工具。
核心工具:zypper (命令行),YaST (图形化神器)。
常用命令语法 (zypper)
| 操作 | 命令示例 |
|---|---|
| 更新系统 | sudo zypper update 或 sudo zypper up |
| 安装软件 | sudo zypper install <包名> |
| 删除软件 | sudo zypper remove <包名> |
| 搜索软件 | zypper search <关键词> |
| 刷新源 | sudo zypper refresh |
四、 Arch Linux 家族
特点:滚动更新,极简。
核心工具:pacman,以及 AUR (Arch User Repository,用户仓库)。
常用命令语法 (pacman)
Arch 的命令比较简洁,但参数是连在一起的。
| 操作 | 命令示例 | 说明 |
|---|---|---|
| 更新系统 | sudo pacman -Syu |
Sync(同步源) y (刷新) u (升级) |
| 安装软件 | sudo pacman -S <包名> |
例如:sudo pacman -S nginx |
| 删除软件 | sudo pacman -Rs <包名> |
R: 递归删除依赖,s: 删除配置文件 |
| 搜索软件 | pacman -Ss <关键词> |
大写 S 表示搜索 |
| 清理缓存 | sudo pacman -Sc |
清理未安装的包缓存 |
关于 AUR (Arch User Repository)
Arch 官方仓库没有的软件,可以在 AUR 里找。通常需要安装一个助手工具(如 yay 或 paru):
- 安装 AUR 助手:
sudo pacman -S yay - 使用 AUR 安装:
yay -S <包名>
五、 关于 sudo 命令的详细说明——⭐
sudo 的意思是 “SuperUser DO”(以超级用户身份执行)。在 Linux 中,安装软件、修改系统配置都需要 root 权限,直接用 root 登录不安全,所以普通用户通过 sudo 临时提权。
1. 基本语法
sudo [命令]
例如:sudo apt install vim
2. 常见参数
sudo -i或sudo su:切换到 root 用户(变成 # 提示符),输入exit退回。sudo -s:切换到 root shell,但保留当前用户的环境变量。sudo !!:非常有用!如果你刚才输入了一个命令忘记加 sudo 报错了,输入这个可以自动用 sudo 重跑上一条命令。sudo -k:强制下次输入密码(如果你刚输过,默认几分钟内不用再输)。
3. 免密码 sudo
在服务器管理中,为了方便,有时会配置特定用户免密 sudo。
编辑文件:sudo visudo
添加一行:username ALL=(ALL) NOPASSWD: ALL (将 username 换成你的用户名)
六、 总结速查表 (Cheat Sheet)
为了方便记忆,我把您表格里的发行版对应的核心命令整理如下:
| 发行版家族 | 代表发行版 | 更新命令 (Update) | 安装命令 (Install) | 搜索命令 (Search) | 底层工具 |
|---|---|---|---|---|---|
| Red Hat 系 | RHEL, Fedora, CentOS | sudo dnf update |
sudo dnf install |
dnf search |
rpm |
| Debian 系 | Debian, Ubuntu | sudo apt update + upgrade |
sudo apt install |
apt search |
dpkg |
| SUSE 系 | openSUSE | sudo zypper update |
sudo zypper install |
zypper search |
rpm |
| Arch 系 | Arch Linux | sudo pacman -Syu |
sudo pacman -S |
pacman -Ss |
tar.zst |
各种Linux shell的区别以及选择
- Bash因其兼容性和功能性成为Linux最常用的Shell
# 查看系统可用Shell
cat /etc/shells
# 查看当前默认Shell
echo $SHELL
好的,我们来详细讲解一下 Linux Shell 的世界。这是一个非常核心的话题,理解它能让你的 Linux 使用效率和体验产生质的飞跃。
简单来说,如果 Linux 内核是餐厅的总厨师,那么 Shell 就是连接你(顾客)和厨师的服务员。你通过 Shell 下达命令(点菜),Shell 将其翻译成内核能理解的语言,内核执行后再通过 Shell 把结果反馈给你。
下面我将从 Shell 的种类与选择、常用命令语法、以及 sudo 的深入使用 三个方面为您详细讲解。
一、 Linux Shell 家族大盘点:如何选择你的“神器”?
Shell 种类繁多,但现代 Linux 系统中最主流的是 Bash、Zsh 和 Fish。它们各有千秋,适合不同的人群和场景。
1. 主流 Shell 详解
| Shell 类型 | 全称 | 核心特点 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| Bash | Bourne-Again Shell | 行业标准,兼容性之王。几乎所有 Linux 发行版的默认 Shell,是 sh (Bourne Shell) 的增强版。 | 1. 无处不在:脚本兼容性最好,几乎所有教程和脚本都基于 Bash。 2. 功能均衡:支持命令补全、历史记录、数组、函数等,足够满足日常和脚本需求。 3. 资源占用低:相比 Zsh 更轻量,启动快。 |
1. 配置原生体验一般:默认提示符和补全功能不如 Zsh/Fish 炫酷。 2. 脚本语法稍显陈旧:相比现代语言,有些语法(如 [[ ]])不够直观。 |
所有用户,尤其是初学者、系统管理员、需要编写兼容性脚本的开发者。它是你必须掌握的基础。 |
| Zsh | Z Shell | 终极可定制,集大成者。兼容 Bash 语法,并吸收了 ksh、csh 等优点,功能极其强大。 | 1. 智能补全:支持菜单选择、参数提示、路径自动补全,比 Bash 的 Tab 补全强大得多。 2. 高度可定制:通过 Oh My Zsh 框架,可以轻松安装数千种主题和插件,打造个性化界面。 3. 拼写纠错:输错命令会自动提示修正。 4. 兼容性好:能运行绝大多数 Bash 脚本。 |
1. 配置复杂:功能太多,新手可能会感到不知所措。 2. 启动稍慢:加载大量插件后,启动速度比 Bash 慢。 3. 资源占用略高。 |
追求效率和个性化的开发者、高级用户。如果你愿意花时间折腾,Zsh 能带来无与伦比的交互体验。 |
| Fish | Friendly Interactive Shell | 开箱即用,对新手最友好。设计理念是“好用”,而非“兼容”。 | 1. 自动建议:根据历史记录实时灰色显示建议命令,按右箭头即可采纳,效率极高。 2. 语法高亮:命令、选项、参数用不同颜色区分,错误命令会标红,非常直观。 3. 零配置:安装后无需任何配置就有优秀的体验。 4. 帮助文档完善: help 命令非常好用。 |
1. 不兼容 POSIX/Bash:语法完全不同(如 if 语句用 end 结尾),无法直接运行 Bash 脚本。2. 脚本性能较差:不适合用于执行复杂的系统脚本。 3. 生态较小:插件和主题远不如 Zsh 丰富。 |
Linux 新手、不想花时间配置的用户、在资源受限设备(如手机 Termux)上使用的用户。 |
2. 其他 Shell
- sh (Bourne Shell):最古老的 Shell 之一,功能非常基础(无数组、无函数)。主要用于执行系统启动脚本,以保证最大兼容性和速度。不推荐日常交互使用。
- ksh (Korn Shell):融合了 sh 和 csh 的优点,在商业 Unix 系统(如 AIX)中较常见,支持脚本调试和数学运算。
- csh/tcsh:语法模仿 C 语言,适合有编程背景的用户,但因兼容性问题,现在已很少使用。Tcsh 是 C shell(csh)的增强版
- dash (Debian Almquist Shell):一个轻量级、快速的 Shell,在 Debian/Ubuntu 中常作为
/bin/sh的实现。执行脚本比 Bash 快 30%-40%,但不适合交互使用(没有命令补全等功能) - rbash 是 Restricted BASH 的缩写,旨在通过限制用户的操作来提高系统安全性。例如,rbash 禁止使用 cd 更改目录、修改环境变量、重定向输入输出等操作
- Tmux 是一个终端复用器(terminal multiplexer),属于常用的开发工具。这些会话可以独立于终端窗口存在,即使终端窗口被关闭,会话仍然可以在后台运行
3. 如何选择与切换?
- 新手/追求稳定:直接用 Bash,它是系统默认,无需任何操作。
- 追求酷炫和效率:安装并切换到 Zsh,并搭配 Oh My Zsh 使用。这是目前最流行的“极客”配置。
- 怕麻烦/想要现代化体验:安装并切换到 Fish,享受开箱即用的便利。
常用操作:
- 查看当前 Shell:
echo $SHELL - 查看系统安装的所有 Shell:
cat /etc/shells - 临时切换 Shell(在当前终端生效):
# 切换到 zsh zsh # 切换回 bash bash - 永久切换默认 Shell(需注销重启生效):
执行后,务必注销(Logout)并重新登录,或者重启系统,才能看到变化。# 切换到 zsh chsh -s /bin/zsh # 切换到 fish chsh -s /bin/fish
二、 Shell 命令语法大同小异——⭐
虽然 Shell 不同,但 90% 的核心命令(如 ls, cd, grep)是完全一样的。差异主要体现在交互功能(如补全、提示符)和脚本语法上。
以下是所有 Shell 通用的核心命令语法,以 Bash 为例(这也是最通用的):
1. 文件与目录操作(最高频)
ls [选项] [路径]:列出文件和目录ls -l:显示详细信息(权限、所有者、大小、时间)ls -a:显示所有文件(包括以.开头的隐藏文件)ls -h:配合-l,以人性化单位(K, M, G)显示大小ls -lt:按修改时间排序ls -lth:按时间倒序显示
cd [路径]:切换目录cd ~或cd:回到用户主目录cd ..:进入上一级目录cd -:返回上一次所在的目录cd /usr/local:切换到绝对路径
pwd:显示当前工作目录的绝对路径mkdir [选项] [目录名]:创建目录mkdir -p project/{src,docs}:递归创建多层目录
rm [选项] [文件/目录]:删除(危险操作!)rm file.txt:删除文件rm -r old_dir:递归删除目录及其所有内容rm -rf old_dir:强制递归删除(极度危险,请谨慎使用)
cp [选项] [源] [目标]:复制cp -r project/ /media/usb/:递归复制目录
mv [源] [目标]:移动或重命名mv old.txt new.txt:重命名mv report.pdf ~/documents/:移动文件
2. 文本查看与处理
cat [文件]:一次性显示所有内容(适合小文件)cat -n story.txt:显示行号
less [文件]:分页显示大文件(功能比more强大)less /var/log/syslog:用上下箭头翻页,按q退出
head/tail:查看文件头/尾tail -f /var/log/nginx/access.log:实时监控日志文件,非常有用!
grep [选项] "模式" [文件]:强大的文本搜索工具grep "error" app.log:在文件中搜索 “error”grep -r "TODO" .:在当前目录下递归搜索 “TODO”grep -i "hello" file.txt:忽略大小写搜索
3. 权限与系统管理
sudo <命令>:以 root 权限执行命令(核心!)sudo apt update:更新软件包列表sudo systemctl start nginx:启动 nginx 服务
chmod [权限] [文件]:修改文件权限chmod +x script.sh:给脚本添加执行权限chmod 755 script.sh:rwxr-xr-x,所有者可读写执行,其他人可读执行
chown [用户:组] [文件]:修改文件所有者sudo chown www-data:www-data /var/www/html
4. 管道与重定向(Shell 的精髓)
|(管道):将前一个命令的输出,作为后一个命令的输入ps aux | grep "nginx":查看所有进程,并只筛选出 nginx 相关的cat access.log | wc -l:统计日志文件的总行数
>(覆盖重定向):将命令输出写入文件(会覆盖原文件)echo "Hello World" > hello.txt
>>(追加重定向):将命令输出追加到文件末尾echo "New log entry" >> app.log
<(输入重定向):从文件读取内容作为命令输入sort < names.txt
5. 命令组合与逻辑判断
&&(与):前一个命令成功(返回值为0),才执行后一个sudo apt update && sudo apt upgrade:更新成功后再升级
||(或):前一个命令失败(返回值非0),才执行后一个cd /non_existent_dir || echo "Directory not found"
;(分号):无论前一个命令成功与否,都执行后一个cd /tmp; ls -l
在Windows上使用Shell
在Windows上使用Shell,主要有Windows自带的PowerShell、命令提示符 (CMD),以及通过安装Git Bash或WSL ( Windows Subsystem for Linux ) 获得更完整的Linux Bash环境
推荐使用现代的Windows终端 (Windows Terminal) 来统一管理它们
1. 使用Windows自带工具
- PowerShell (推荐的Windows Shell):
- 在开始菜单搜索 “PowerShell” 或 “Windows PowerShell” 并打开。
它功能强大,支持跨平台,是Windows的现代化命令行工具。
命令提示符 (CMD): - 在开始菜单搜索 “cmd” 或 “命令提示符” 并打开。
- 在开始菜单搜索 “PowerShell” 或 “Windows PowerShell” 并打开。
2. 使用Git Bash (类Unix Shell环境)
- 安装: 下载并安装Git for Windows (包含Git Bash)。
- 使用:
- 安装后,在任意文件夹下右键点击,选择 “Git Bash Here” 即可打开一个 Bash 终端。
- 可以使用 ls, cd, pwd 等标准Shell命令。
- 运行Shell脚本(.sh文件)时,使用 ./test.sh 或 sh test.sh。
3. 使用WSL (Windows Subsystem for Linux)
安装教程以及修改发行版默认的安装位置,可以参考我
- 功能: 让你在Windows上运行一个真实的Linux发行版 (如Ubuntu) 的命令行环境。
- 使用:
- 需要先在Windows设置中启用WSL。
- 安装喜欢的Linux发行版 (从Microsoft Store)。
- 打开WSL终端,即可使用 apt, bash, grep等原生Linux命令。
4. 使用Windows终端 (统一管理)
- 功能: 现代化的多标签页终端应用,可以同时运行PowerShell, CMD, Git Bash, WSL等。
- 使用:
- 从Microsoft Store下载安装 Windows Terminal。
- 在设置中可以配置默认配置文件,添加你的Git Bash或WSL
Git——.gitingore的书写
❌ 不要提交
venv/到 Git!
✅ 应该提交requirements.txt!
🔹 什么是 .gitignore?
它是 Git 用来忽略某些文件或目录不被提交到版本库中的配置文件。
比如:编译输出、日志、IDE 配置等,不需要纳入版本控制。
🔹 不同写法的含义
✅ build/
表示 “忽略 build 文件夹及其所有内容”
例如:
project/
build/ ← 被忽略
src/
test.py ← 不被忽略
✅ /build/
开头加了 / 表示从 仓库根目录开始匹配,只忽略根下的 build 目录
如果你有多个地方叫 build(比如子目录里也有),它不会影响其他路径。
例子:
/build/→ 只忽略根目录下的build目录,不影响src/build/build/→ 忽略所有路径中出现的build文件夹(包括子目录)
⚠️ 注意:一般情况下,用 build/ 就够了,除非你想特别限定在根目录。
✅ *.log
表示 忽略所有以 .log 结尾的文件(不限于位置)
例如:
app.log
error.log
logs/my.log
都会被忽略!
✅ /log/
表示 忽略根目录下的 log 文件夹(注意是 / 开头)
如果子目录也有 log 文件夹,不会被忽略。
✅ native_ai_robot/data
直接写文件夹名,表示忽略 nativeads_ai_robot/data 这个路径(相对路径,从根开始)
🔹 如何忽略 test.py?
只需在 .gitignore 中添加一行:
test.py
✅ 它会忽略根目录下的 test.py。
如果你想忽略任意位置的 test.py,可以写:
**/test.py
**表示任意层级的子目录(递归)- 所以
**/test.py会忽略:test.py /src/test.py /utils/test.py /a/b/c/test.py
✅ 小贴士
- 每行一个规则,空行或注释(以
#开头)会被忽略 - 规则支持通配符
*、?、[]等。 - 使用
!可以排除某个规则(比如:!important.txt会保留这个文件)。 - 你可以用 gitignore.io 生成模板(如 Python、VSCode 等)。
更多推荐
所有评论(0)