目录
01.Linux系统发展
001.从Unix开始
-
Unix发展史:
– 60年代,批处理、Multics系统
– 1969年,Thompson&Rithie修改Multics,Unix雏形初现
– 1973年,重写内核
– 70年代,Unix开始飞速发展 -
Unix的问题与自由软件:
– Unix价格昂贵
– 1984年,不得向学生提供代码,Tanenbaum编写了Minix,用于教学
– 1984年,Stallman开始GUN项目,创立自由软件基金会 -
自由软件:
– 自由使用
– 自由修改
– 自由发表
– 公开源码
002.Linux
-
诞生(1991年)
– 芬兰,赫尔辛基大学
– Linus,基于gcc与bash开发Linux内核
– 3000行代码 -
Linux=内核+应用程序+界面
- 内核版本
– 1994年,正式推出1.0版
– 2019年,推出5.0版 - 查看版本命令
– uname -a
– cat /proc/version
- 主版本.此版本.修订版本——编译次数
地址:
– 192-localhost
– 168.253.128-localdomain
内核:
– 5-版本号
– 3-应用程序次版本号(奇数为验证版本,偶数为稳定版本。Fedora是为RHEL做测试的系统)
– 7-修订次数
– 301-联编次数
– fc31-Fedora第31版
- 内核版本
- 界面
– Xfce
极简界面
– Workstation
通用版本,gomne界面
– KDE
Windows界面
– Cinnamon
较新
02.常见Linux系统
001.发行版本
- RHEL
基于服务器的版本,服务、维护付费 - CentOS
对RHEL源码再编译的社区版本 - Fedora
版本较新,激进,适合个人用 - Debian
社区用户支持,更新较慢,技术较旧,较可靠 - Ubuntu
Debian的一个分支 - SUSE
德国,漂亮;社区人数少
002.获取Linux版本
- 官网
- 国内镜像
– 各高校镜像
– 主要公司镜像
003.Linux安装
获取安装镜像
- 选择网站
– 中科大http://mirrors.ustc.edu.cn
– 阿里云http://developer.aliyun.com/mirror - 选择版本
– 点击“获取安装镜像”
选择安装方式
- 独立安装
– 单系统
– 双系统
先装Windows,再装Linux - 虚拟机安装
03.VM虚拟机安装
- 安装VM虚拟机
- 虚拟机设置
– 虚拟磁盘
用一个文件来模拟,性能有损失,空间大小可以大于物理磁盘,实际上用多少占多少
– 使用物理磁盘
一次分配所有空间,而且可能会被物理机破坏 - 虚拟网络设置
– NAT模式
虚拟机和主机用的是同一个网卡,做了一个地址转换
虚拟机可以访问互联网,但不能访问主机
– 仅主机模式
做网络测试用,虚拟机可以和主机通信,就像一个网络中的两个计算机
但虚拟机不能访问互联网
网络服务配置一般在这种模式下进行
– 桥接模式
集成了这两方面的优点,配置起来较为麻烦 - Fedora安装流程
1.选择Live
2.在Live界面关闭网络
3.选中文
4.安装位置,有个对勾
5.设置root密码
6.网络名和主机名,默认localhost.localdomain
7.创建用户(登录用户,root用户一般不登录系统)
8.关闭网络时间 - 安装后配置
– 添加sudo用户
— root用户原则上不登录系统,sudo就是以root身份来做,需要授权、验证对应的用户的口令,以此达到分权、防止root口令泄露的目的
— 有些Linux默认创建的用户有sudo全部授权,而Fedora没有
— root下的visudo命令,打开/etc/sudoers文件,可对其进行修改(只有visudo),100行加上一行
允许任何域中的任何一台计算机登录,执行任何一条命令
来源who where=(whom) commands 用户 主机=(以谁的身份) commands #用户配置可以是: username #uid %groupname %#gid user_alias #主机配置: ip hostname Netaddr host_alias #commands配置 command #命令要绝对路径指定 cmnd #命令别名,灵活使用能提高效率 ----------------------------------- 在sudo配置中,可能对多个用户配置多个相同命令,这时候可以使用别名来配置。 #定义别名的方法: ALIAS_TYPE NAME=item1, item2, item3, ... NAME:别名名称,必须使用全大写字符; ALIAS_TYPE: User_Alias Host_Alias Runas_Alias Cmnd_Alias 例如: User_Alias NETADMIN=tom, jerry Cmnd_Alias NETCMND=ip, ifconfig, route NETADMIN localhost=(root) NETCMND
–修改软件源
04.Fedora的包管理
早期软件发布 | 大型软件发布 |
---|---|
可执行文件 | 可执行文件 |
私有库文件 | 私有库文件 |
公共库文件 | |
第三方文件 | |
关系简单 | 关系复杂 |
001.RPM(RedHat Package Manage)
RPM包结构
- 二进制文件
- 库文件
- 配置文件
- 帮助文件
- 获取RPM
- 软件发行商提供
- RPM网站
- RPM常用参数
- rpm -ivh
i:install;v:view;h:进度条 - rpm -e --nodeps
e:erase卸载;nodeps:可选项,依赖关系出问题也强制删除 - rpm -qa | grep 包名
qa:查看所有
比如:rpm -qa | grep “pyth*” - man rpm
- rpm -ivh
002.YUM(YellowDog Update Modified)
已转为dnf,yum也会自动转为dnf
-
管理RPM的前端工具
-
自动下载、安装
-
自动修改依赖关系
-
下载位置(从网络上)
– 由/etc/yum.repos.d中的配置文件决定
打开目录/etc/yum.repos.d
打开最重要的文件fedora.repo
-
常用参数
- yum install <包名>
- yum update <包名>
- yum remove <包名>
- yum check-update <包名>
-
更新源
- mirrors.ustc.edu.cn–》配置软件源–》Fedora源使用帮助
- yum makecache
05.Linux中的C开发环境
001.安装
sudo yum install gcc/gcc-c++
002.组成
- 编辑器
– vi/vim
– 文本编辑器
– vs code(rpm)
– qt - 编译器(gcc)
- 调试器(gdb)
003.字符界面开发
- 创建一个文件
– vi abc.c - 编译
- gcc abc.c生成可执行文件a.out
- 指定文件名
- gcc -c abc.c生成中间代码abc.o,o是output
gcc -o abc abc.o链接生成可执行文件abc - 链接库文件
用系统中的库函数,要在头文件指定原型,编译后变为库的形式,调用库中的函数在链接时要指明库的名字
– 查看链接方法:man sqrt
– 命令:gcc -o abc abc.o -lm - 链接当前目录的自定义文件
- 不用头文件
– vimx abc.c(有+寄存器的vim,可复制到系统剪贴板)
– gcc -c abc.c#include <stdio.h> #include "myfunc.c" #include <math.h> int main() { //计算值 int ret=0; //待处理值 int data=100; int a=0; int b=0; printf("Hello,world!\n"); ret=sqrt(data); printf("ret=%d\n",ret); a=add(100,200); b=sub(1000,2000); printf("a=%d,b=%d",a,b); return 0; }
– gcc -o abc abc.o -lm - 需要头文件
– vim myfunc.h声明自定义函数
– vi abc.c改“myfunc.c”为“myfunc.h”
– gcc -c abc.c生成abc.o
– gcc -c myfunc.c生成myfunc.o
– gcc -o abc abc.o myfunc.o -lm
生成release版的可执行文件。若不改myfunc.c则abc.o、myfunc.o会出现上面两个函数的重复定义
- 不用头文件
- gcc -c abc.c生成中间代码abc.o,o是output
- make方法
在调试或编译过程中,源代码一修改,都要重新处理,太麻烦了,用make命令,根据makefile文件,每次检查每个源文件是否有改变,如果有改变,就重新编译,否则不编译
– makefile文件
— 模式:
<模块名>:<生成所需文件>
–回车自动Tab–<生成方法>
– make命令:(默认)执行当前目录下的makefile文件,并且clean模块不执行(中间文件依然有)
– make clean
- 执行
./a.out或者./abc - 调试
- 生成debug版的可执行文件
gcc -g <源文件> -o <可执行文件> -l<库>
gcc -g abc.c myfunc.c -o abc -lm - 开始调试
gdb <可执行文件>
gdb abc
- 列出源代码
– list:从头开始每次列出10行
– list <行号> :列出以指定的行号为中心的10行
– list <行号> <行号>:列出两行之间的代码 - 看程序执行结果
run - 断点
-
设置断点
break <行号>,run命令跑到断点
-
删除断点
– 先得到断点信息:info break
– delete breakpoint <断点编号>:delete breakpoint 1 -
禁用/启用断点:disable/enable breakpoint <编号>
-
查看变量信息:print <变量>
可以看到第一次查看变量的值为0,说明断点处的代码未执行
-
- 单步运行
- next:遇到函数不进入函数
– 多步:next <行数> - step:遇到函数进入函数
如果是系统函数一般不进入,如果是用户编写的函数则可以进入
- next:遇到函数不进入函数
- 列出源代码
- 生成debug版的可执行文件