Linux

复制代码
Linux --总概括
    1.uboot是最大的裸机程序
    2.uboot是个片外程序
    3.内核态 + 用户态 
    4.软中断:通过软件产生的中断
    5.    bootloader    :uboot.bin / uboot.imx
        kernel        :zimage
        rootfs        :system.ing / rootfs.tar.ba2
    6.阻塞 非阻塞 信号 多路复用 异步



linux --基础:

1.Vmware 安装
    1.Linunx发行版:Ubuntu ‌‌Debian ‌RedHat centosos
    
2.Ubuntu 安装
    1.下载镜像
    2.通过Vmware安装
    3.一般一个虚拟机对应一个项目!
    4.桥接    :将虚拟机和主机连到同一个局域网,这样所有的电脑主机都可以访问虚拟机,相反虚拟机也可以访问所有电脑主机。 (NFS使用桥接模式)
      NAT    :将虚拟机和主机放在同一个局域网,其他的电脑主机不可访问虚拟机。
      仅主机    :将虚拟机独立,和任何电脑都不可访问。
    5.Ubuntu包含Linux
    6.Ubuntu:
        1.有界面:Ubuntu-desktop  = Ubuntu-core + 第三方界面(gnome/kde/lxde)
                 Ubuntu-core + gnome = Ubuntu
                 Ubuntu-core + kde     = kubuntu
                 Ubuntu-core + lxde = lUbuntu (轻量级ubuntu)
        2.无界面:Ubuntu-core

3.Ubuntu属性
    1.user@name 用户@主机名
    2.¥普通用户 / #root用户
    3.启用root用户:sudo passwd  --> 切换root用户 su root --> 退回普通用户exit
    4.apt-get:ubuntu最强大的部分,采用C/S模式,从服务器下载软件。
    5.通网络 --> 桥接 --> 设置下载源(system setting/software updates/download from/other/中国/清华源) --> 更新下载源(sudo apt-get update)
    6.软件安装:apt-get install + 软件包
      软件更新:apt-get upgrade + 软件包
      软件卸载:apt-get remove  + 软件包
    7.vim:
        1.文本编辑器(类似offce wps)
        2.几乎每个Linux发行版都有vim
        3.vim是vi的加强版。
        4.vim没有菜单,通过命令进行操作。
        5.三种模式:一般模式 (i/a) --> 编辑模式(esc) --> 命令行模式(:)
        6.光标:g双击:第一行  G双击:最末行     ngg:选择n行
        7.复制黏贴:
            1.v + 上下左右 + y(选择复制) --> esc --> p(黏贴)
            2.esc --> yy/nyy --> p
        8.删除:
            1.一般模式:dd/ndd
            2.编辑模式:delete
            3.命令行模式:n,nd (1,10d :删除1到10行删除)
        9.撤销:
            1.一般模式:u
        10.反撤销:
            1.ctrl+r
        11.查找:
            1.命令行模式:
                1./  向下查找:n
                2.?     向上查找:n
        12.替换:
            1.命令行模式:
                1.:%s /替换旧内容/替换新内容/g
        13.保存:
            1.wq保存退出,x保存退出
            2.q!不保存退出
            3.q退出
        14.文件对比:
            1.vimdiff file1 file2 ...
        15.vi /etc/vim/vimrc  set tabstop =4    
    8.普通命令:
        1.ls(list缩写) ; ls -al  
            d 目录文件            10:子目录的个数        用户名      组名        文件大小(byte)    最后修改日期
            - 普通文件            
            p 管理文件
            l 链接文件
            b 块设备文件
            c 字符设备文件
            s 套接字文件
        2.cd  跳转路径
            cd ..
        3.pwd 当前路径
        4.相对/绝对路径
            1.绝对路径:目标位置的完整路径,从根目录开始,
            2.相对路径:目标位置相对当前路径
    9.根/家目录:
        1.根目录:最顶层     /
        2.家目录:用户目录    ~
    10.mkdir
        1.区分大小写
        2.不能创建文件名一样
        3.mkdir -p /test/test1/test2 创建多级目录
    11.rmdir 删除一个非空目录
    12.rm 删除文件/目录
        1. -r递归删除  
        2. -f强制删除
        3. -i询问删除
    13.touch 创建文件
    14.clear 清屏/翻页
    15.rest     重新初始化屏幕
    16.cp     复制文件/目录
        1. -r 递归复制
    17.mv     移动/重命名-文件/目录
        1. 移动:     mv file_name path
        2. 重命名:mv file_name file_name1 
        3. mv path/* path
    18.tar 压缩/解压
        1.tar[参数] 压缩文件名  被压缩的目录/文件
            -c 创建一个打包文件 
            -x 解压一个大包文件
            -z gzip格式进行压缩或者解码
            -j bzip2格式进行压缩或者解码
            -f 表示要操作的文件
            -v 显示处理过程
            -C 指定压缩文件路径
        2.tar cjvf test.tar.bz2    test  -C  path/ tar xjvf test.tar.bz2 -C  path
        3.tar czvf test.tar.gz    test  -C  path/ tar xzvf test.tar.gz  -C  path
    19.ifconfig 查看/配置网络状态
        1. 查看IP    :ifconfig
        1. 设置IP    :ifconfig 网卡名 IP
        3. 打开网卡    :ifconfig 网卡名 up
        2. 关闭网卡    :ifconfig 网卡名 down
    19.cat 查看文件内容
        1. cat + file
            -b 对输出行进行编号
    20.reboot 系统重启
    21.poweroff    关机ubuntu系统
    22.ping 测试本机与目标机的网络联通
        -c ping指定次数后停止
        1.ping + IP/域名
    23.ps : 显示进程动态
    
    
    23.Linux帮助手册:man + 命令
        1.帮助手册一共九页
            man 1 :可执行的程序或shell命令的帮互
            man 2 :系统调用的帮互
            man 3 :库调用的帮互
            man 4 :设备和特殊文件的帮互
            man 5 :配置文件的帮助
            man 6 :游戏的帮助
            man 7 :杂项设备帮助
            man 8 :超级用户可执行的系统命令帮助
            man 9 :内核相关的帮互
        2.man -f 命令 :显示命令所在页位置数
    24.Linux权限管理:用户权限 + 文件权限
        1.目的:很好的管理每个用户,控制每个用户对系统权限访问
        2.初次创建的用户要比普通用户拥有更多的权限
        3.ubuntu用户分类:
            1.root:超级用户
            2.系统初次创建用户
            3.系统普通用户(几乎用不到)
        4.用户信息全部保存在/etc/passwd
        5.chown 修改用户权限
        6.文件权限:
            1.读/写/执行(文件拥有者权限) + 读/写/执行(文件拥有者所在用户组权限) + 读/写/执行(其他用户权限) 
        7. chmod 修改文件/文件夹权限 : chmod + 参数 + 权限 + 文件/文件夹名
            1.chmod 777 文件/文件夹         
            2.chmod
    25.软连接/硬链接
        1.硬链接:ln 参数 源文件 目标文件
            1.多个文件对应同一个文件!修改一个其他都会被修改!他们的inode都一样!
            2.ls -i 查看inode号
            3.ln -f 源文件 目标文件 :强制硬链接
            4.特点:安全,只有删除所有硬链接文件,才会真正被删除!
              缺点:只有在同一个系统才会被硬链接,不能跨文件系统,目录间不能硬链接,因为环境太复杂
        2.软连接:ln -s 源文件(绝对路径) 目标文件
            1.类似windows的快捷方式
            2.他们的inode号不一样,他们是不用的文件
            3.软连接的本文件删除,其他软连接都失效
        3.软连接/硬链接他们的文件数据都是同步的
    
    26.Linux目录结构:
        1.从根目录开始 /
        2.Linux文件层次标准:FHS
            规定:
                1./bin:系统启动时需要的可执行文件,大部分普通只有
                2./boot:用来存放bootloader相关文件,损坏无法进入系统
                3./dev :设备驱动文件
                4./etc:设备配置文件,
                5./cdrom:光盘目录
                6./home :家目录
                7./lib 各种所需要的库和系统正常运行的支持文件
                8./lib64 64位支持库
                9.media:存放媒体信息文件
                10.mnt:设备挂在文件
                11.opt:存放第三方文件
                12.proc:系统信息和进程信息文件
                13.root:root
                14.run:保存系统从开始运行至今的信息
                15.sbin:存放系统管理员命令
                16.snap:应用程序框架文件
                17.srv:存放系统存储相关数据
                18.temp:存放临时文件
    27.文件系统:
        1.操作系统负责管理和存储文件系统的软件,称为:文件系统
        2.Linux必须要挂在文件系统!
        3.文件系统类型:ext3 ext4 proc sysfs
            1.ext4完全兼容ext3
            2.proc伪系统,是内核虚拟的
            3.df:查看文件系统,磁盘分区,磁盘空间  df -T / df -Th
            4.Ubuntu使用的是ext4文件系统
    29.编译:
        1.gcc : (gun compiler collection):编译套件
                1.gcc支持多种计算器体系机构,如:X86 MIPI ARM
                2.Ubuntu默认自带gcc
                3.gcc -v查看gcc版本
                4.gcc原本叫gun c语言编译器,只能除了c语言,后面发展太快可以编译c++,java,go,,就改名为编译套件了。
                5.gcc file -o name : 指定生成文件名
                6.file +文件名 : 查看文件类型
            编译细节:
                1. 预处理(hello.i:预处理得到C语言代码) --> 编译(hellow.s汇编语言文件)  --> 汇编(hellow.o目标文件机器码) --> 链接()
                    第一阶段.预处理:编译器只会对头文件和宏定义进行展开 : -E
                        预处理    :gcc -E hello.c -o hello.i
                    第二阶段.编译:将文件编译成汇编代码 -S
                        编译        :gcc -E hello.i -o hello.s
                    第三阶段.汇编:将编译文件编译成机器码 -C
                        汇编        :gcc -C hello.s -o hello.o  //此时还不能运行
                    第四阶段.链接:直接将目标文件编译为可执行文件
                        链接        :gcc -C hello.o -o hello
                    gcc 默认编译器会直接跳过生成可执行文件!    
                2.gcc 默认为动态链接,特点:生成的程序很小,但依赖库,静态链接需手动加上 -ststic : gcc hellow.c -o hello -static 
                    1.静态链接:生成的程序里面包含了需要的库,直接可以运行,但是文件很大!
                               静态链接他把头文件的库都加载到程序中!没有使用lib下的stdio等库
    30.环境变量:
        1.环境变量是系统预设的参数
        2.PATH:决定了在哪个路径下查找程序或者命令!
        3.echo:在标准输出显示文字
        4.echo $PATH :当前所有的环境变量路径
        5.修改ubuntu环境变量:
            1. 直接命令设置:export 变量 = 新增的变量:$变量  : export PATH=/home/wangxy:$PATH
                1.立刻生效,只对当前终端生效,只对当前用户生效!
            2. 修改配置文件:.bashrc
                1.在家目录下,修改.bashrc文件,在最后行添加 : export PATH=/home/wangxy:$PATH
                2.需要更新环境变量,source .bashrc
                3.永久有效,且仅对当前用户生效!
    31.编写命令:
        1.命令就是可执行程序
        2.ls -al //ls是可执行命令,al是ls的参数
        3.编写可执行文件 --> 将可执行文件路径加入环境变量/或者将可执行文件放入bin
        4.命令发给了shell,shell再通过环境变量去找该命令!
    32.Makefile    
        1.makefile就像单片机keil的单个编译和全部编译:通过文件改变的时间戳去编译!
        2.make工具:就是编译辅助工具,为了解决使用命令编译工程繁琐的问题
        3.直接在控制台输入make,就可以调用make工具,就像keil的按钮,调用到keil的编译器
        4.Makefile是描述整个工程编译链接等规则的文件
            1.目标 : 依赖
            2.Makefile默认执行第一行规则
            3.make clean 声明为伪目标
            4.变量支持
            5.Makefile函数

    33.VmwareTools工具安装使用
        1.目的:虚拟机 window 之间相互复制粘贴!
        2.CD/DVD2 和 CD/DVD 和 软盘  --> 使用物理驱动器 --> 自动检查
        3.df -l
        4.VmwareTools解压到管理员/root/opt
        5.安装完成重启Ubuntu
        
    34.SSH安装使用
        1.目的:外部连接 和 文件互传
        
    35.samba安装使用
        1.目的:在windows上面编辑代码,在Linux上面编译代码! 和 文件互传!
        2.将ubuntu的存储空间,当做windows的磁盘来用
        3.我的电脑 \\IP  --> 映射网络驱动器
        
    36.SourceInsght安装使用
        1.目的:在samba里面创建SourceInsght工程,在windows上面进行代码编辑!
        2.samba + SourceInsght 完美开发
        3.同步勾选上面两个
        4.支持中文:prefernces --> files --> default encoding --> chinese simplified(GB2312) CP:936
        
    37.超级终端安装使用
        1.HyperTerminal --> 就是一个串口的终端! 
        
        
        
linux --系统:
    1.argc 和 argv :
        1.argc 命令行中参数的个数
        2.argv 命令行中参数实体
        3.参数原则是没有上线的
    2.标准IO / 文件IO
        1.文件IO 不经过C库,直接调用系统函数
        2.标准IO通过c库间接调用系统函数
        3.文件IO:
            1.通过man手册查
                文件IO:
                    1.open: 打开/创建文件
                        1.第二个参数没有creat,不需要第三个参数!
                        2.获取文件描述符(标准输入-标准输出-标准出错: 0-1-2)
                    2.close:关闭文件/描述符        
                        1.系统文件描述符最大只有1024,所以需要关闭,被内核回收重新使用!
                    3.read    :读取文件
                    4.write    :写入文件
                    5.lseek    :文件指针流偏移
                        1.可以通过lseek计算出文件大小
                目录IO:
                    1.mkdir        : 创建目录
                    2.opendir    :打开目录
                        1.返回目录流指针
                    3.closedir    :关闭目录
                    4.readdir    :读取目录
                    
                    
                1.目录IO也是系统调用。?
                2.ls -i 前面为文件的inode编号
            2.每个文件都会分配一个文件描述符。
            
            
        4.应用层printf 内核层printk    
        5.    
        
    3.库:
        1.库本质:可执行的二进制文件
        2.需求:
            1.优势:提高开发效率
        3.种类:
            1.静态库:在程序编译时会被链接到代码里面
                1.程序运行就不需要该静态库
                2.编译出来的比较大
                3.lib开头-.a结尾
                制作:
                    1.gcc -C mylib.c -o mylib.o
                    2.ar + cr(creat 覆盖) + 库文件名(libmylib.a) : mylib为库名
                    3.调用:gcc test -l(链接) + mylib(库名) + -L ./(路径)
                        运行:直接执行(因为已经链接到可执行文件)
                    
                    
            2.动态库:在程序编译时不会被链接到代码里面
                1.程序运行就需要该静态库
                2.编译出来的比较小
                3.lib开头-.so结尾
                4.动态库也叫共享库
                制作:
                    1.gcc -C -fpic()  mylib.c -o mylib.o
                    2.gcc mylib.o -shared -o libmylib.so
                    3.调用:gcc test -l(链接) + mylib(库名) + -L ./(路径)
                        运行:需要配置环境变量,再运行!
                            1.环境变量:2种方法
                            2.修改Ubuntu下配置文件/etc/ld.so.conf
                                1.添加动态库位置
                                2.ldconfig命令更新目录
            3.用途:
                1.十个程序用一个库,用动态库!
                2.程序需要移植,用静态库方便,不需要依赖其他库!
            4.区别:
                1.库的加载时间不同!
                    1.静态库在编译链接时候加载
                    2.动态库在程序运行时候加载
                    
            5.静态链接与静态编译区别?
             C库是动态库还是静态库
    
    4.进程
        1.进程:正在运行的程序
        2.系统资源分配的最小单位
        3.进程ID ,每个进程都有一个标识符,简称pid
        4.进程通过内核进行通信
        5.进程间通信:
            有名管道    无名管道    信号        
            消息队列    共享内存    信号量
                    socket
        6.进程状态转换:就绪态 - 阻塞态 - 执行态
        7.进程控制:
            1.fork:进程创建
                getpid  getppid
            2.父进程和子进程关系:就是拷贝,拷贝出新的子进程
                子进程从fork函数开始执行,往下
                父子进程的执行顺序不一定!谁抢到CPU资源谁先执行
        8.exec函数族
            1.不想让子进程和父进程执行fork后面一样的代码
                exec:换核不换壳
        9.ps命令:
            1.列出当前系统进程
                ps -aux | grep "进程名"
                    -a 显示所有进程
                    -u 内存使用和归属用户
                    -x 不关联终端进程
                   
        10.kill命令
            1.杀死进程
                kill + 进程号(pid)
            2.kill + 信号 + 进程号(pid)    
        11.僵尸进程和孤儿进程
            1.僵尸进程:
                1.子进程结束,父进程没结束,但是父进程还没有时间去回收子进程的资源,子进程变成僵尸死进程
            2.孤儿进程:
                1.父进程结束,子进程没结束
                2.init进程为pid为1的进程,会领养孤儿进程,为了释放孤儿进程的资源,init就变成了他的父进程
        12.wait函数
            1.僵尸进程太多会导致系统臃肿!
            2.wait阻塞回收一个进程!
            3.wait函数为了避免和减少僵尸进程!
        13.守护进程:
            1.windows的后台进程,就是守护进程,不跟任何终端进行关联
            2.创建条件:
                1.必须为init进程的子进程!
                2.不与任何控制终端交互!
                创建:
                    1.fork 创建进程
                    2.父进程使用exit直接退出
                    3.....
            3.进程(同学) --> 进程组(班级一班) --> 会话(年级)    
        14 进程间通信:
            1.无名管道 pipe
                1.无名管道只能用于有亲缘关系的进程!
                2.无名管道和有名管道区别:有没有文件名!
                3.fd[0]:读端  fd[0]:写端
                4.在fork函数之前创建无名管道 
            2.有名管道 fifo
                1.可以实现没有任何亲缘关系进程的通信
                2.有文件名
            3.信号
                1.kill -l : 查看系统中信号
                2.进程间是不能直接发信号通信的,只能发给内核处理
                3.发送函数:kill:发信号(自己和别人)   raise :自己给自己发信号      alarm : 设置时间信号(当时间到了就会产生一个信号,如果没有被捕捉程序就会被终止)
                  接收函数: pause 当前进程暂停,直到被信号中断!
                            接收信号进程就不能停止 while sleep pause
                  信号处理: signal 信号处理 (系统默认 忽略 捕获)
                            
                            
                            
            4.共享内存
                1.shmget
                2.ipcs -m
                3.内存映射:内核地址映射到应用层,效率最高的进程间通信
            5.消息队列
                1.msgget
                2.ipcs -q
                
            6.信号量
                1.semget
                2.ipcs -s
            7.进程间是不能直接通信的,只能通过内核进行间接处理
        
复制代码

 

posted @   panda_w  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示