Linux 介绍、命令、.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 updatesudo 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 updatesudo 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 里找。通常需要安装一个助手工具(如 yayparu):

  • 安装 AUR 助手:sudo pacman -S yay
  • 使用 AUR 安装:yay -S <包名>

五、 关于 sudo 命令的详细说明——⭐

sudo 的意思是 “SuperUser DO”(以超级用户身份执行)。在 Linux 中,安装软件、修改系统配置都需要 root 权限,直接用 root 登录不安全,所以普通用户通过 sudo 临时提权

1. 基本语法
sudo [命令]

例如:sudo apt install vim

2. 常见参数
  • sudo -isudo 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 系统中最主流的是 BashZshFish。它们各有千秋,适合不同的人群和场景。

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,享受开箱即用的便利。

常用操作:

  1. 查看当前 Shell
    echo $SHELL
    
  2. 查看系统安装的所有 Shell
    cat /etc/shells
    
  3. 临时切换 Shell(在当前终端生效):
    # 切换到 zsh
    zsh
    # 切换回 bash
    bash
    
  4. 永久切换默认 Shell(需注销重启生效):
    # 切换到 zsh
    chsh -s /bin/zsh
    # 切换到 fish
    chsh -s /bin/fish
    
    执行后,务必注销(Logout)并重新登录,或者重启系统,才能看到变化。

二、 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.shrwxr-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 BashWSL ( Windows Subsystem for Linux ) 获得更完整的Linux Bash环境
推荐使用现代的Windows终端 (Windows Terminal) 来统一管理它们

1. 使用Windows自带工具

  • PowerShell (推荐的Windows Shell):
    • 在开始菜单搜索 “PowerShell” 或 “Windows PowerShell” 并打开。
      它功能强大,支持跨平台,是Windows的现代化命令行工具。
      命令提示符 (CMD):
    • 在开始菜单搜索 “cmd” 或 “命令提示符” 并打开。

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
    

✅ 小贴士

  1. 每行一个规则,空行或注释(以 # 开头)会被忽略
  2. 规则支持通配符 *?[] 等。
  3. 使用 ! 可以排除某个规则(比如:!important.txt 会保留这个文件)。
  4. 你可以用 gitignore.io 生成模板(如 Python、VSCode 等)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐