LinuxC高级_day1
 【0】授课任务1. Linux命令 复习补充
2. shell脚本 独立的语言 语法规则
3. C高级 学生管理系统(新)
4. makefile
【1】什么是嵌入式?
 以计算机为中心,软硬件可裁剪的专用计算机系统(通用计算机系统windows)
 对体积功耗都有特定的要求*系统的裁剪
 操作系统 - 内核
 windows - NT
 Ubuntu - Linux
 macOS - unix
 ios - unix
 Android - linux【2】linux起源
 1965 - multics 300同时登陆 -失败了
 1969 - 贝尔实验室 汤姆森肯 4周 2人登录太空旅行 unics
 1973 - C语言风格 - unix收费 - 向大学生推广 - (systemV 伯克利分校(TCP/IP))
 1984 - 理查德斯托曼 - 自由软件的思想 - GUN(is not unix) - GPL协议(bash glic库)
 1991 - linus人 - Linux
 不收费: 对用户不收费 对企业收费的(高德)【3】
1. Ubuntu系统 - 版本
 sudo lsb_release -a
 cat /etc/issue2. 内核版本
 uname -r
 cat /proc/version
 3.2.0-150-generic-pae
 主版本号.次版本号.修订次数-编译次数-内核描述信息3. Ubuntu - 人道主义 桌面性能优越 更新及时
 Redhat - 服务器上 更新不频繁 很稳定*笔试 -linux和Unix区别
 1.linux开源代码的自由软件,unix收费传统商业软件
 2.linux运行在多平台上,unix是和硬件配套(电信SUN 民航HP 银行IBM)【4】 Linux系统的组成
 应用层
 APP APP 命令 shell脚本
 | -------------------
 | 命令解析器
 可以直接操作内核 | 0-3G应用空间:每个程序都有自己的0-3G内核层:五大功能 3-4G内核空间:只有一份
1. 进程管理 什么是进程?程序的一次执行过程
 CPU面向的对象就是进程,对进程调度
 4核:CPU1 - QQ CPU2 - wechat - 时间片(轮询)2. 文件管理 通过文件系统
 /bin 系统常用的二进制文件
 /root 和超级用户相关
 /boot 系统启动文件
 /dev 设备文件 硬盘区分 鼠标 USB
 /etc 系统的配置文件 passwd:存放用户信息
 /home 用户主目录
 /mnt 通常作为挂载点
 /proc 进程的各种信息3. 内存管理 申请释放 malloc
4. 设备管理 设备驱动
5. 网络管理 网络收发 TCP/IP
 =====================================
 硬件层 鼠标 键盘 USB 摄像头【5】0-4G虚拟内存 - 32位机器
 512M/1G(0x4000 0000) - 物理地址(真实存在),程序是运行在虚拟地址当中
 MMP内存映射 swap交换分区[练习]
 1.
 char *p = “hello world”
 *p = ‘a’ — X 字符串常量不能改
 p++ — Y p指针在栈上 栈可以自加2. const修饰的全局变量放在哪里了?
 const对变量的存储没有影响,所以不在.ro里
 已初始化.data 未初始化的.bss【6】 命令
1. 终端相关
 1)打开
 ctrl+alt+T
 ctrl+shift+n
 2)字体
 ctrl+"-" ctrl+shfit +"+"
 3)退出 exit2. linux@ubuntu:/dev/input$
 用户名 主机名 路径 普通用户(超级#)
 whoami hostname pwd3. 软件相关的命令 dpkg apt-get
 1)右上角有上下箭头
 2)ping www.baidu.com
 3)打开网页
 A. 编辑 - 虚拟网络编辑器 - 有三个(如果没有出现 - 直接还原默认设置) - 桥接/仅主机/NAT模式
 桥接:Ubuntu和windows有两个IP 这两个是独立 可以访问外网
 NAT: Ubuntu和windows对外公用同一个IP地址 可以上网
 仅主机: Ubuntu和windows通信 不能上网
 B. 虚拟机 - 设置 - 网络适配器 - 对应选择
 C. 选中右上角的图标 - 编辑网络 - 删除现在所有的网络 - ADD - SAVE• windows上查看IP的方法:
 windows+R - cmd - ipconfig - 192.168.31.XX(局域网)
 linux查看ip的方法: ifconfig4. 常见的软件包后缀
 windows - .exe Android - .apk
 Ubuntu - .deb RedHat - .rpm5. 软件包组成
 sl_ 3.03 -16 _i386. deb - 软件包包名
 软件名 朱版本号 次版本号 架构 后缀6. dpkg 离线安装 安装的时候不依赖网络 不检查依赖
 apt-get 在线安装 安装的时候要联网 联网检查依赖 将依赖的包一并安装上• 软件包出现之前 怎么安装?
 a.out – 可执行程序 --> ./a.out
 ls – 可执行程序 --> cd /bin --> ls -l ls -->file ls
 ls可在任意目录下执行,如何让a.out在任意目录下执行? sudo cp a.out /bin7. dpkg
 1)安装: sudo dpkg -i 软件包全名
 sudo dpkg -i sl_3.03-16_i386.deb
 2)查看状态: sudo dpkg -s 软件名
 sudo dpkg -s sl
 Package: sl
 Status: install ok installed //安装完成
 3)执行: 直接写软件名 sl
 4) 查看软件的安装信息等
 sudo dpkg -l 软件名 //查看版本号
 sudo dpkg -L 软件名 //查看安装信息和路径
 5)查看软件参数 man sl
 6)彻底删除 (配置文件一并删除)
 sudo dpkg -P 软件名
 sudo dpkg -P sl[练习] 1. 如何查看Ubuntu上安装的所有软件
 sudo dpkg -l
 2. 假设一个目录下有5个安装包,怎么全部安装
 sudo dpkg -i *.deb8. apt-get
• 换源
 1)从网上下载的软件包在哪?–在服务器里
 2)源 - 指定从哪个服务器下载
 从哪里换
 A. 图形化界面 update manager - setting - Ubuntu software - downloadfrom
 B. cd /ect/apt/
 vim sources.list -->保存的就是源
 C. 如何更新
 1.先备份! sudo cp sources.list sources.list.bak
 2.sudo gedit sources.list把清华源网站上给的全部贴进来,之前的要清空
 或者 直接把sources.list文件放到家目录下的某个位置,
 cd ~
 mv XXXsources.list .
 然后拷贝到/etc/apt目录下
 sudo cp sources.list /etc/apt/
 D. 如果出现错误 – 本地服务器对不上
 cd /var/lib/apt/lists
 sudo rm * -rf
 sudo apt-get update下载并安装
• apt-get install会现将软件包下载到本地
 cd /var/cache/apt/archives 然后自动安装
 sudo apt-get install sl //小火车
 sudo apt-get install frozen-bubble //泡泡龙
 sudo apt-get install cmatrix //屏保
 sudo apt-get install oneko //小猫鼠标
 sudo apt-get install cowsay //奶牛说
 sudo apt-get install bastet //俄罗斯方块
 卸载
 sudo apt-get remove 软件名
 清除安装包
 sudo apt-get clean 清除/var/cache/apt/archives
 只下载不安装
 sudo apt-get download 软件名
 只下载源码
 sudo apt-get source 软件名[练习] 1.用apt-get安装的软件可以dpkg卸载吗?
 – 可以
 2. apt-get中断安装 (断网 断电 ctrl+C)
 就既不能删除也不能安装
 1)检查依赖源: sudo apt-get check
 2) 修复: sudo apt-get -f install【7】 命令复习
1. cd ~ cd / cd - cd . cd …
2. pwd
3. touch 如果文件存在就更新时间戳
 如果文件不存在就创建文件4. mkdir -p //创建有层级关系的目录
5. cp
6. mv 如果目标存在就是移动 不存在就是重命名
7. rm -r 删除目录 -f强制
 rm *.c 删除所有的.c文件
 rm !(2.c) 删除2.c以外的所有文件8. history 查看历史命令
 history num 显示num历史记录9. 关机和重启
 sudo shutdown -h now 立即关机
 sudo shutdown -r now 立即重启 //sudo reboot
 sudo shutdown -h +10 “byebye” //定时十分钟后关机
 sudo shutdown -r +10 “byebye”10. vi/vim (gedit)
 插入模式
 命令行模式 YY DD P
 底行模式 :w :q :vsp :set nu :nohl
 :%s/旧字符串/新字符串/g【8】 shell命令
1. shell是一个命令行解析器,将用户的指令解析为操作系统能理解的命令,实现人机交互
 分类: sh csh ksh bash
 格式: 指令 选项 参数(中间用空格隔开,多条命令在一行书写用;隔开,一条命令在一行写不完加\标明)
 2.通配符
 1)* 匹配所有 ls *.c
 2)? 只去匹配一个字符 ls aa?.c2. ?? 只去匹配两个字符 ls aa??.c
3. [字符1字符2字符3…字符n] 通配其中任意一个字符 ls aa[12a].c
 5)[起始字符-结束字符] ls aa[1-9].c ls aa[a-z].c
 6)[^字符] 除了指定的字符都可匹配 ls aa[^1].c
 [练习]
 touch aa1.c aa2.c aaa.c aab.c aaa.c aaA.c aaB.c aay.c aaY.c
 ls aa[A-C].c --> aaA.c aab.c aaB.c
 ls aa[a-c].c --> aaa.c aaA.c aab.c aaB.c
 aAbBcC语序问题 去除本地化 (export LC_ALL=C 换终端或者重启失效)4. 管道 | 前一个命令的输出作为后一个命令的输入
 wc -w 文件名 :显示单词的个数
 ls | wc -w
grep查找 cat显示
 cat aa1.c | grep int5. 输出重定向
 ifconfig > route.txt以新建的方式重定向
以追加的方式
3. 命令置换 `` 将一个命令的输出作为另一个命令的参数
 echo "user is whoami4. echo 回声 显示内容到标准输出
 echo 123
 echo “hahaha” >> route.txt5. man手册
 man man: 查看man手册
 man 1 命令 -> man 1 ls
 man 2 系统调用 -> man 2 open
 man 3 库函数 -> man 3 printf
 man 5 文件规定 -> man 5 passwd6. su 临时改变用户的身份
 su root• su -/su root(sudo su)
 su root是获取root权限不获取环境
 su root - 是获取root权限和环境
 sudo root 是临时获取root权限和环境
sudo是一种权限管理机制,依赖于/etc/sudoers这个文件,定义授权给哪个用户可以以管理员的身份执行管理命令7. date 显示设置的系统时间
8. 清屏ctrl+l system(“clear”)
【9】 shell中的用户管理
1. 添加用户:adduser 用户名
 如果是普通用户:sudo adduser haha
 [sudo] password for linux:
 Adding user haha' ... Adding new grouphaha’ (1001) …
 Adding new user haha' (1002) with grouphaha’ …
 Creating home directory /home/haha' ... //创建家目录 Copying files from/etc/skel’ … //拷贝模板文件
 Enter new UNIX password: //新用户的密码
 Retype new UNIX password: //再次输入新用户密码
 passwd: password updated successfully
 Changing the user information for haha
 Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
 Is the information correct? [Y/n] y
 linux@ubuntu:/root$ su haha //切换到haha用户
 新建的haha用户没有sudo权限的• /etc/passwd 保存用户信息
 /etc/skel 模板文件(新用户的配置文件)
 /etc/shadow 保存密码的文件
 /etc/group 保存组信息文件2. id 用户名
 uid=1002(haha) gid=1001(haha) groups=1001(haha)3. 切换用户:su 用户名
4. 修改密码
 sudo passwd 用户名
 root@ubuntu:/home# passwd haha
 Enter new UNIX password: //没有回显
 Retype new UNIX password:
 passwd: password updated successfully5. 退出用户 exit
6. deluser --remove-home 用户名
 删除用户的同时把目录文件删除干净
 root@ubuntu:/home# deluser --remove-home haha
 Looking for files to backup/remove …
 Removing files …
 Removing user haha' ... Warning: grouphaha’ has no more members.
 Done.
 root@ubuntu:/home# su haha
 Unknown id: haha
 如果删除不掉:
 su root
 ps aux | grep haha
 kill -9 进程号
 终端关闭 - 再次打开 - su root
 ps aux | grep haha
 deluser --remove-home haha[作业]
1. 学生管理系统
 typedef struct
 {
 char name[15];
 int age;
 float score;
 }student_ttypedef struct
 {
 int n; //实际的学生人数
 student_t stu[30]; //班级里最多有30个人
 }class_t1. 向班级添加学生 0<=n<=30
2. 输入学生姓名删除学生 同名的都删除
 1 张三 1 李四
 2 李四
 3 张三3. 排序 冒泡
4. 修改 输入学生姓名修改信息
5. 查找
6. 退出
==========================================
 1.添加 2.查询 3.删除 4.排序 5.查找 6.退出1)枚举
 2)宏定义定义人数
 3)malloc开辟空间