Linux 基础与 Shell 命令

前言

今天是第24天,前面一直在写 C 语言和数据结构,今天转回 Linux 系统编程基础。Linux 是嵌入式 C 开发的主战场,内核、shell、常用命令、简单 shell 脚本,都是日常写代码、调试、编译必不可少的基本功。

一、操作系统与 Linux 内核

操作系统本质

操作系统本质是软件,用来屏蔽底层硬件差异,给上层程序提供统一接口。

Linux 内核五大核心功能

  1. 内存管理:管理系统内存分配、回收
  2. 多任务调度:CPU 时间片分配,进程调度
  3. 文件系统管理:Linux 哲学:一切皆文件
  4. 多任务间通信:进程之间数据交互
  5. 网络通信:网络协议栈

内核是纯 C 代码,用户不能直接和内核打交道。用户通过两种方式使用内核能力:

  • 系统调用:内核原生接口,功能强,不可移植
  • 库函数:对系统调用做封装,可移植,更易用

Shell 是什么

shell 是命令解释器,相当于用户和内核中间的外壳。用户输入 shell 命令,shell 解析后调用内核完成工作,保护内核不被用户直接操作。

二、Shell 常用命令

1. 文件目录操作

命令 作用
ls 查看目录,ls -l 详细信息,ls -a 显示隐藏文件
touch 新建普通文件
rm 删除文件;rm -rf 强制删除目录
mkdir 创建文件夹
rmdir 删除空文件夹
cp 复制,复制目录需要加 -r
mv 移动 / 重命名

ls 看到的第一位字符代表文件类型:

  • -:普通文件
  • d:目录
  • l:软链接
  • b:块设备
  • c:字符设备
  • s:socket 套接字
  • p:管道文件

2. 文件查看命令

  • cat filename:一次性全部输出文件内容,适合小文件
  • more / less:分页查看大文件
  • head / tail:看头部 / 尾部,tail -n 20 filename 查看末尾 20 行

3. 文件查找

  • find . -name "文件名":在当前目录递归搜索文件
  • grep "字符串" filename:在文件中匹配,打印包含该字符串的行

4. 通配符

  • *:匹配任意长度任意字符
  • ?:匹配单个任意字符
  • []:匹配括号内指定单个字符
bash 复制代码
file_*.txt
file_??.txt
file_[1,3,5].txt
file_[1-5].txt
file_[^6].txt

5. 压缩解压 tar

bash 复制代码
# 压缩 gz
tar -zcvf out.tar.gz dirname/*

# 压缩 bz2
tar -jcvf out.tar.bz2 dirname/*

# 解压 gz
tar -zxvf out.tar.gz

# 解压 bz2
tar -jxvf out.tar.bz2

6. 管道与重定向

  • 管道 | :把前一条命令输出,当做后一条命令输入

    bash 复制代码
    ps -ef | grep "bash"
  • 重定向

    • > 覆盖重定向,清空文件写入
    • >> 追加重定向,在文件末尾追加
    bash 复制代码
    ps -ef > file.txt

示例综合练习:取头文件后 200 行,过滤 extern 写入文件

bash 复制代码
tail -n 200 /usr/include/stdio.h | grep "extern" > file.txt

7. 其他高频命令

  • echo:打印内容到终端
  • history:查看历史执行命令
  • du:查看文件 / 目录大小,du -k / du -m
  • od -c file.txt:按字符格式查看文件原始内容
  • date:查看系统时间
  • uname -a:查看内核、平台架构信息
  • ifconfig:网卡信息
  • ping:测试网络连通

8. 软件安装

  • dpkg 工具(deb 包本地安装)

    bash 复制代码
    sudo dpkg -i xxx.deb    # 安装
    sudo dpkg -P 软件名     # 卸载
    dpkg -l 软件名          # 查看是否安装成功
  • apt‑get(联网源)

    bash 复制代码
    sudo apt-get install 软件名
    sudo apt-get remove 软件名 --purge

三、Shell 脚本基础

编译型 vs 解释型

  • 编译型语言 (C 语言):先全部编译成机器码,再运行;执行速度快,开发效率低。
  • 解释型语言 (shell/python):边解析边执行;开发快,执行速度慢。

shell 脚本编写运行完整步骤

  1. vim test.sh 写脚本
  2. chmod +x test.sh 添加可执行权限
  3. ./test.sh 运行脚本

shell 脚本本质:一堆 shell 命令的集合。

shell 变量

  • 环境变量 :系统自带,例如 PWDPATH
  • 位置变量
    • $0:脚本文件名
    • $1 $2 $3:传入脚本第 1、2、3 个参数
    • $#:传入参数总个数
    • $$:脚本运行进程 PID
    • $?:上一条命令返回值
  • 自定义变量变量名=值,等号两边不能空格

shell 引号区别

  • 双引号 " ":解析里面变量,把变量替换成值
  • 单引号 ' ':原样输出,不解析变量
  • 反引号 :把内部内容当做命令执行

输入输出、分支语句

  • read:读取终端输入
  • if-then-elif-else-fi 判断分支
  • case 多分支匹配

四、踩坑总结

  1. shell 脚本语法对空格极其敏感,if[] 条件前后必须留空格。
  2. 脚本写完一定要加执行权限 chmod +x,否则不能 ./ 运行。
  3. 重定向 >>> 不要搞混,> 会直接清空原有文件。
  4. rm -rf 谨慎使用,没有回收站,删除无法恢复。

小结

Shell 是 Linux 开发的基本功,写 Makefile、交叉编译、调试程序、批量处理文件都离不开。后面写 C 程序的时候,会高频使用这些命令。

相关推荐
起名真的太难了1 小时前
Linux系统运维与远程管理核心命令速查指南
linux·运维·服务器
xiaoye-duck1 小时前
《Linux网络编程》吃透 Linux 网络传输全流程:完整梳理局域网通信、封装解包与跨网络传输原理
linux·网络
深念Y1 小时前
订阅管理及节点过滤实践(技术笔记)
linux·网络·arm·优化·日志·工具·soc
酷可达拉斯1 小时前
自动化运维-Ansible Role详解
linux·运维·服务器·自动化·ansible
智能运维指南2 小时前
智能体自治运维选型指南:2026年企业如何从“AI辅助”走向“AI自治”
大数据·运维·人工智能
suijishengchengde2 小时前
k8s deployment或statefulset分组关停
运维·kubernetes
翼龙云_cloud2 小时前
腾讯云国际代理商:CDB数据库自动备份和异地灾备配置 从快照到跨区域恢复
运维·数据库·云计算·腾讯云
牢姐与蒯2 小时前
Linux首战之进度条
linux·运维·服务器
日常筹谋记2 小时前
西门子 G120XA 变频器在数据中心冷却水泵系统的应用与数字化运维价值
运维