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.进程间是不能直接通信的,只能通过内核进行间接处理
Stay hungry, stay foolish
待续。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!