一、操作系统基础
操作系统本质上是一款软件,作用是屏蔽底层各式各样的硬件平台,向上层应用提供统一接口,以此实现通用软件代码。
PC端三大操作系统:
- Unix:世界上第一款操作系统
- Linux:遵循GNU(GNU's Not Unix),使用C语言编写;广泛应用于服务器、嵌入式场景
- Windows:由C/C++开发
二、Linux操作系统
1. Linux内核五大核心功能
- 内存管理
- 多任务调度
- 文件系统的管理:Linux系统理念一切皆是文件
- 多任务间的通信
- 网络通信
2. Linux内核特点
- Linux内核是由系统调用组成的纯C代码
- 内核不允许和用户直接交互
- 内核功能复杂,直接调用难度大,因此借助shell编写命令实现内核功能,shell也就是命令解释器。
3. shell的作用
- 保护内核
- 作为命令解释器,接收用户命令,对接内核
4. 库函数
- 库函数是对系统调用的封装,用来处理复杂的应用场景。
- 系统调用是Linux内核提供的函数接口,仅可在Linux系统下使用,功能强大,但接口简练。
- 库函数具备可移植性,通用性更强。
三、Shell 基础命令
1. 文件目录基础命令
-
ls
ls -l 查看详细信息 ls -a 显示全部文件,包含隐藏文件
Linux 七种文件类型:
b:block 块设备文件c:character 字符设备文件d:directory 目录文件-:普通文件l:link 链接文件s:socket 套接字文件p:pipe 管道文件
touch:创建文件rm:删除文件mkdir:创建文件夹rmdir:删除空文件夹rm -rf:删除非空文件夹cp:拷贝文件;拷贝目录需要加-r参数mv:移动文件
2. 文件查看命令
cat filename:直接查看文件全部内容more / less:分页查看文件head / tail:查看文件头部 / 尾部内容 示例:head/tail -n 行数 文件名
3. 文件查找
-
find:在目录下查找文件路径find . -name "文件名"
-
grep:匹配打印文件中符合字符串的行grep "字符串" 文件名
4. 通配符
*:匹配任意长度、任意字符的文件名?:匹配一位长度、任意字符的文件名[]:匹配一位长度,指定字符的文件名
示例: file_*.txt、file_??.txt、file_[1,3,5].txt、file_[1‑5].txt、file_[^6].txt
5. 压缩解压 tar
压缩
tar -zcvf filename.tar.gz dirname/*
tar -jcvf filename.tar.bz2 dirname/*
解压
tar -zxvf filename.tar.gz
tar -jxvf filename.tar.bz2
6. 组合命令
-
管道
|:把前面命令输出,作为后面命令输入ps -ef | grep "bash"
-
重定向
-
>:覆盖重定向 -
>>:追加重定向ps -ef > file.txt
练习示例:
tail -n 200 /usr/include/stdio.h | grep "extern" > file.txt
7. 其余常用命令
echo:将内容输出显示在终端history:查看终端历史输入命令du:查看文件大小du -m/du -k文件名 / 目录名od:按指定格式查看文件内容od -c file.txtdate:查看系统时间、日期uname -a:查看内核版本、平台架构ifconfig:查看网卡信息ping:测试主机和目标 IP 网络连通性
8. 软件包工具
dpkg 工具集(本地 deb 包)
- 安装软件:
sudo dpkg -i 软件包名.deb - 卸载软件:
sudo dpkg -P 软件名 - 检查是否安装成功:
dpkg -l 软件名
apt‑get 工具集
使用前提:网络是可用的,配置软件源
- 下载安装:
sudo apt‑get install 软件名 - 卸载软件:
sudo apt‑get remove 软件名 --purge
四、Shell 编程
编译型语言 vs 解释型语言
编译型语言
- 拥有丰富的数据类型
- 先编译,后执行
- 执行速度快
- 开发效率偏低
- 适合数据运算处理
解释型语言(Shell 属于此类)
- 全部内容视作字符串
- 边翻译边执行
- 执行速度慢
- 开发效率高
- 适合系统开发维护
Shell 脚本编写运行步骤
- 编写脚本:
vim filename.sh - 添加执行权限:
chmod +x filename.sh - 运行脚本:
./filename.sh
Shell 脚本本质:多条 shell 命令的集合。
Shell 变量
- 环境变量 :
PWD、HOME、PATH - 位置变量
$0:脚本文件名$1 $2 $3 $4:传入脚本的参数$#:传入参数总个数$$:脚本运行进程 ID$?:上一条 shell 语句执行返回结果
- 自定义变量 :
变量名=值
Shell 中的引号
- 双引号:会解析替换里面变量的值
- 单引号:原样输出内容,不解析变量
- 倒引号:把引号内部内容当作命令执行
Shell 脚本输入输出
echo:输出read:接收终端输入
分支语句
if 语句
if 判断条件
then
else
fi
case 分支语句
case 变量名 in
值1)语句
;;
值2)语句
;;
值3)语句
;;
*)语句
;;
esac