Linux学习新篇章C高级:day1

Linux C高级
【0】 自我介绍: 浦 课堂氛围: 无代沟 有问题直接说 多尝试
【1】 授课任务 5-6天
1. Linux系统命令 补充 全面 
2. shell脚本 和C一致是个独立的语言 稍微有难度(C逻辑)规矩 
3. C高级 - 学生管理系统 强化结构体
4. makefile (读懂) GDB(调试)
【2】 怎么学习LinuxC高级
1.写笔记 dpkg -i -s -P 
2.加强记忆 
3.笔试占的比例比较大 


【1】什么是嵌入式? 你自己的理解 感悟
(软硬结合 -- 举例子 手机 冰箱 智能家居 小度小度 小爱同学 无人分拣 北京无人驾驶租出车 自动送餐机器人)
可裁剪 系统 移动便携? 传感器
以计算机应用为中心,软硬件可裁剪,专用计算机系统(通用计算机系统Windows)
对功耗 体积 成本 可靠性有特定要求  

操作系统  --- 内核
Windows --- NT内核
Ubuntu --- Linux内核
MacOS ---- Unix
Android -- Linux 
ios --- Unix 

为什么会使用Linux? --- 开源 可裁剪 移植性好 支持硬件众多
硬件裁剪 -- 不要什么了就在画PCB的时候去掉
软件裁剪 -- 对应的程序就不写

【2】Linux系统由来
1965 - Multics计划 可以同时登陆300人 - 失败了
1969 - 贝尔实验室(汤姆森肯 四周)unics
1973 - C语言风格 Unix(收费) -- 大学里面推广(SystemV 伯克利分校(TCP/IP))
1984 - 理查德 自由软件  -- GNU (GNU is not Unix)-- 遵循GPL协议(开源保护协议)
       bash(终端解析器) glibc库(C库 -  printf scanf)
1991 - Linus - Linux开源不收费 (不对个人收费 面向企业收费)
高德地图: 如果高德不写 淘宝就得自己开发 

* Linux系统: 把这个Linux内核编译出来的就叫Linux系统
  linux内核: 一段代码

1. 查看内核版本的命令 
   uname -r
   cat /proc/version
   3.2.0-29-generic-pae
   主版本号.次版本号.修订次数 - 编译次数 - 内核描述信息
2. 查看Ubuntu版本
   cat /etc/issue
   sudo lsb_release -a
3. Linux系统
   Ubuntu: 更新及时 用户体验感 人道主义 桌面性能优越 有Windows有界面交互
   Redhat: 服务器上面 更新速度不快 所以很稳定
4. 面试题: Linux和Unix的区别
   1)linux开源代码 自由软件 Unix是商业
   2)Unix基本都是硬件配套的 Linux可以运行在多种硬件平台上面
* 使用Unix的环境: 银行 电信 民航 固定型的Unix机 

【3】 Linux系统组成
应用层 {glibc}
        APP            APP 命令 shell脚本 
        |                      |
        |                   命令解析器
        |                       |
      可以直接操作内核            |              【0-3G】
-----------------------------------------------------
内核层 五大功能:                                【3-4G】
1. 进程管理
什么是进程: 进程是程序的一次执行过程 (程序是静态的 进程是动态的)
            CPU面向的对象是进程 对进程进行调度
* 买手机买电脑买几核的? -- 几个核?
几个核相当于有几个CPU: CPU1-QQ CPU2-wechat CPU3-tim CPU4-nodepad++
时间片轮询 -- 系统进程的调度

2. 文件管理 -- 文件管理系统
/bin 系统常用的可执行文件 二进制文件
/boot 和Linux相关的启动文件
/dev 设备文件 鼠标 键盘 USB
/lib 共享文件
/mnt 通常会作为挂载点 
/home 用户主目录的默认位置 
/etc 配置文件 passwd(文件里写的是用户的信息)

3. 内存管理 --  申请和释放malloc
4. 设备管理 -- 设备驱动 
5. 网络管理 -- TCP UDP套接字 socket编程

---------------------------------------------------------
硬件层 : 鼠标 显示器 USB

【4】 0-4G内存分配
1. 0-3G有什么区
   堆 - heap malloc出来 先进先出
   栈 - stack 满减栈(地址越用越向下 程序执行完出栈 都在栈顶)先进后出
   静态区
     .data 已经初始化
     .bss 为初始化 一堆0
   .ro  readonly 只读数据段 字符串常量“hello world”
   .text 你写的代码
2. MMU内存映射
   一个a.out 2k左右 存在在真实的物理内存上
3. 1G物理内存满了怎么办? 硬盘保存 swap交换分区(速度慢)

提问练习:
    1. char *p = "hello world"  - 只读数据段
    *p = "haaaaa"  -- 不行 字符常量不能改
    p++  -- 行 栈上 栈可以加减
    2. const作用:
       常量化(只读修饰)
       const int *a a是一个指向整型数的指针 整数不可以修改 指针可以修改
       int * const a a是一个指向整数类型的常指针 指针指向的整型数是可以修改的 指针不可以修改
    3. 被const修饰过的全局变量放在哪里?
       全局变量放在静态存储区 
       const修饰的局部变量在栈上

【5】 三个模式:
    NAT  对外公用的是一个IP地址 可以访问外网
    仅主机 Ubuntu和Windows通信 不可以访问外网
    桥接 Ubuntu和Windows是两个独立的IP 但是都可以访问外网
连不上外网怎么办
    A. 编辑 - 虚拟网络编辑器 - 还原默认设置
    B. 虚拟机 - 设置 - 网络适配器 - 根据需求选择一个
    C. 右上角的网络箭头 -  删除已有的 - ADD - SAVE添加一个新的
    D. 重启你的虚拟机
    E. 安装虚拟机的时候 防火墙? 杀毒软件? 安装纯英文目录? 右键以管理员身份运行?

【6】 Linux系统命令 - 安装软件相关apt-get dpkg
1. 常见的软件包后缀
Windows .exe  Andriod .apk
Ubuntu  .deb  redhat .rpm
2. 软件包名组成
sl     _3.03    -16         _i386                     .deb
软件名  主版本号   次版本号   架构(X86-32位 X64-64位)   后缀
3. 安装命令 只有两个
apt-get : 在线安装 需要依赖网络 安装的时候会将依赖的包一起安装上
dpkg : 离线安装 没有网络 不依赖网络 不检查依赖

* 在软件包出现之前 怎么安装?
ls放在那里? /bin
file ls 
file a.out
ls和a.out都是一段可执行程序  
./a.out  ./表示当前目录 将a.out拷贝到/bin目录下就可以在任意目录下执行

4. 安装 sudo dpkg -i sl_3.03-16_i386.deb (install 一定要打全名)
   执行 直接输入软件名 sl  可以使用man手册查看选项参数
   卸载 sudo dpkg -r sl    (remove 直接写软件名)
   查看状态 sudo dpkg -s sl   (state)
   查看版本 sudo dpkg -l sl    (list)
   查看软件包中各个文件的安装信息 sudo dpkg -L sl    
   完全删除(包括删除配置文件)sudo dpkg -P sl
练习: 如何查看Ubuntu上已经安装的所有的软件
       sudo dpkg -l
      如果目录下面有五个安装包想要一把安装怎么办?
       sudo dpkg -i *.deb

* 换源(文件) : 
      1. update manager -- setting -- download from 
      2. 源文件所在: vim /etc/apt/sources.list
      3. 换源就是指把这个文件换掉

5. 在线安装 apt-get 
   安装 sudo apt-get install sl
   现将软件下载到本地 - 再把软件包安装 - 那么软件包在哪?
   cd /var/cache/apt/archives/
   
   sudo apt-get install sl 小火车
   sudo apt-get install xawtv 摄像头
   sudo apt-get install oneko 小猫
   sudo apt-get install frozen-bubble 泡泡龙
   sudo apt-get install cmatrix 屏保
   sudo apt-get install cowsay 奶牛说
   sudo apt-get install bastet 俄罗斯方块

如果由于故障或者网络原因导致中断了安装,用户既不能重装也不能删除?
1. 检查依赖源: sudo apt-get check
2. 修复:  sudo apt-get -f install

cd /var/lib/apt/lists  本地和服务器地址不同
sudo rm * -rf
sudo apt-get update  

   卸载 sudo apt-get remove sl
   清除目录下的软件包     sudo apt-get clean
   /var/cache/apt/archives/
   只下载不安装 sudo apt-get download 软件名
   下载源码 sudo apt-get source 软件名
用apt-get安装的软件可以用dpkg卸载

6. 关机和重启命令
   sudo reboot 重启
   sudo shutdown -h now : 立即关机
   sudo shutdown -r now : 立即重启
   sudo shutdown -h +10 "byebye" :定时十分钟后关机
   sudo shutdown -r +10 "byebye" :定时十分钟后重启

7. Vim编辑器
   图形模式的编辑工具gedit
   文本模式的编辑工具 nano (ctrl + x)
   vim输入的三种模式
    命令行模式: YY 3DD P 
    底行模式: :wq :q! :w+文件名 :vsp 
    插入模式: i o a

【7】shell简介(shell命令)
1. shell是一个命令行解析器,把用户的命令解析成系统能理解的指令,实现用户和系统的交互
2. sh->sh->ksh->bash
3. shell命令的格式
   command [-options] arg1 arg2...
   命令     选项    参数
   * 三者之间空格隔开 
     如果想要多个命令同一行书写要;隔开
     如果命令在一行不能写完的时候 用\表明未结束

【8】 1.查看历史记录 history  显示历史记录的大小echo $HISTSIZE
    2.通配符
      [..] :匹配其中指定一个字符
      [ - ]:匹配一个指定字符的范围
      [^..]:除了其中指定的字符 其他的都可以匹配
    touch a.c b.c c.c 1.c 2.c aa.c bb.c cc.c
    ls [ab].c   ---  a.c b.c
    ls [a-c].c  ---  a.c b.c c.c
    ls [^a-c].c ---  1.c 2.c
    3.管道 |  前一条命令的输出作为后一条命令的输入
     ls | wc -w
     wc -w 文件名 : 显示单词的个数
     wc -l 文件名 : 显示文件的行数
     wc -c 文件名 : 显示字符数
    4. grep : 过滤 
       grep "int" test.c 查找文件中的int
    5. cat: 显示文件内容
       cat test.c | grep int
    6. 输入输出重定向
       将终端输出的内容重定向到一个文件
       ifconfig > ip.txt 以新建的方式重定向
       ifconfig >> ip.txt 以追加的方式重定向
       < :将文件作为输入源
    7. 命令置换 `` 讲一个命令的输出作为一个命令的参数
       echo "user is `whoami`"
    8. echo 回显 回声
    9. date 获取系统时间日期
    10. Ctrl+L清屏 system("clear")

【9】 shell中的用户管理
    1. sudo adduser 用户名 : 添加用户
    [sudo] password for linux: 
    Adding user `lala' ... // 添加用户
    Adding new group `lala' (1001) ... // 添加用户组
    Adding new user `lala' (1002) with group `lala' ... 
    Creating home directory `/home/lala' ... //创建家目录
    Copying files from `/etc/skel' ... //拷贝模板文件
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    Changing the user information for lala
    Enter the new value, or press ENTER for the default
        Full Name []: LA
        Room Number []: 12
        Work Phone []: 
        Home Phone []: 
        Other []: 
    Is the information correct? [Y/n] y

*新建的用户没有sudo权限怎么办
[sudo] password for lala: 
lala is not in the sudoers file.  This incident will be reported.
su root
cd /etc
chmod 777 sudoers
照着root修改 root ALL= (ALL:ALL) ALL
chmod 440 sudoers
su lala --- > sudo命令可用

    2. su 切换用户
    cat /etc/passwd :保存用户信息
    cat /etc/shadow : 保存密码的文件
    cat /etc/group : 保存组的信息文件
    cat /etc/skel : 模板目录

你可能感兴趣的:(内核,linux,ubuntu,shell)