LinuxC高级day1

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/issue
  2. 内核版本
    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指针在栈上 栈可以自加

  1. const修饰的全局变量放在哪里了?
    const对变量的存储没有影响,所以不在.ro里
    已初始化.data 未初始化的.bss

【6】 命令

  1. 终端相关
    1)打开
    ctrl+alt+T
    ctrl+shift+n
    2)字体
    ctrl+"-" ctrl+shfit +"+"
    3)退出 exit
  2. linux@ubuntu:/dev/input$
    用户名 主机名 路径 普通用户(超级#)
    whoami hostname pwd
  3. 软件相关的命令 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的方法: ifconfig
  1. 常见的软件包后缀
    windows - .exe Android - .apk
    Ubuntu - .deb RedHat - .rpm

  2. 软件包组成
    sl_ 3.03 -16 _i386. deb - 软件包包名
    软件名 朱版本号 次版本号 架构 后缀

  3. dpkg 离线安装 安装的时候不依赖网络 不检查依赖
    apt-get 在线安装 安装的时候要联网 联网检查依赖 将依赖的包一并安装上

  • 软件包出现之前 怎么安装?
    a.out – 可执行程序 --> ./a.out
    ls – 可执行程序 --> cd /bin --> ls -l ls -->file ls
    ls可在任意目录下执行,如何让a.out在任意目录下执行? sudo cp a.out /bin
  1. 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 *.deb

  1. 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?.c
  1. ?? 只去匹配两个字符 ls aa??.c
  2. [字符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 换终端或者重启失效)
  1. 管道 | 前一个命令的输出作为后一个命令的输入
    wc -w 文件名 :显示单词的个数
    ls | wc -w

    grep查找 cat显示
    cat aa1.c | grep int

  2. 输出重定向
    ifconfig > route.txt

    以新建的方式重定向

    以追加的方式

  3. 命令置换 `` 将一个命令的输出作为另一个命令的参数
    echo "user is whoami

  4. echo 回声 显示内容到标准输出
    echo 123
    echo “hahaha” >> route.txt

  5. man手册
    man man: 查看man手册
    man 1 命令 -> man 1 ls
    man 2 系统调用 -> man 2 open
    man 3 库函数 -> man 3 printf
    man 5 文件规定 -> man 5 passwd

  6. su 临时改变用户的身份
    su root

  • su -/su root(sudo su)
    su root是获取root权限不获取环境
    su root - 是获取root权限和环境
    sudo root 是临时获取root权限和环境

    sudo是一种权限管理机制,依赖于/etc/sudoers这个文件,定义授权给哪个用户可以以管理员的身份执行管理命令

  1. date 显示设置的系统时间
  2. 清屏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 保存组信息文件
  1. id 用户名
    uid=1002(haha) gid=1001(haha) groups=1001(haha)

  2. 切换用户:su 用户名

  3. 修改密码
    sudo passwd 用户名
    root@ubuntu:/home# passwd haha
    Enter new UNIX password: //没有回显
    Retype new UNIX password:
    passwd: password updated successfully

  4. 退出用户 exit

  5. 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_t

typedef struct
{
int n; //实际的学生人数
student_t stu[30]; //班级里最多有30个人
}class_t

  1. 向班级添加学生 0<=n<=30
  2. 输入学生姓名删除学生 同名的都删除
    1 张三 1 李四
    2 李四
    3 张三
  3. 排序 冒泡
  4. 修改 输入学生姓名修改信息
  5. 查找
  6. 退出

==========================================
1.添加 2.查询 3.删除 4.排序 5.查找 6.退出

1)枚举
2)宏定义定义人数
3)malloc开辟空间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值