ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

4.Linux软件编程

4.Linux软件编程 4. Linux软件编程1. 操作系统是一款软件为了屏蔽底层不同的硬件平台为上层提供统一的接口实现通用的软件代码PC三大操作系统Unix 世界上第一款操作系统Linux GNU GNUs Not Unix C语言编写服务器嵌入式Windows C/C2. Linux操作系统1. Linux内核5大功能内存管理多任务调度文件系统的管理Linux系统中一切皆是文件多任务间的通信网络通信2. Linux内核1. Linux内核是由系统调用组成的一些纯C代码2. 不允许与用户直接交互3. 内核功能复杂不容易被调用所以通过shell编写一系列命令来完成内核功能命令解释器3. shell作用1. 保护内核2. 命令解释器4. 库函数1. 库函数是对系统调用的封装能够处理一些复杂的应用场景2. 系统调用是Linux内核中的函数接口只有在Linux系统中才能使用功能强大但十分简练3. 库函数可以移植所以具有通用性4.1 Shell1. shell命令1. 基础命令1. lsls -l 显示目录下文件的详细信息ls -a 显示目录下的隐藏文件文件类型b block 块设备文件按块扫描设备信息的文件要用于表示存储设备的文件c character 字符设备文件按字符扫描设备信息的文件主要用于表示普通设备文件d directory 目录文件存放和管理文件的文件夹- 普通文件用来记录信息的文本文件l link 连接文件类似于Windows快捷方式如果A连接到B文件操作A文件其实操作的是B文件硬链接的个数有几个文件名(2个)指向对应磁盘里面的文件删掉一个文件名磁盘空间并不能被回收。s socket 套接字文件进程间通信p pipe 管道文件进程间通信2. touch 创建文件3. rm 删除文件4. mkdir 创建文件夹5. rmdir 删除空文件夹6. rm -rf 删除非空文件夹7. cp 拷贝文件如果拷贝目录文件需要加 -rf选项8. mv 移动文件2. 文件查看命令1. cat功能查看文件中的内容使用示例cat filename2. more/lessmore filenameless filename 按q退出3. head/tailhead/tail -n 行数 文件名3. 文件查找1. find功能在当前目录下找与文件名对应的文件路径find . -name 文件名2.grep功能打印出文件名中所有与字符串匹配的行grep 字符串 文件名4. 通配符*:匹配任意长度任意字符的文件名?:匹配一位长度任意字符的文件名[]:匹配一位长度指定字符的文件名file_*.txt 匹配任意长度、任意字符可以是 0 个字符file_??.txt 表示匹配两个字符file_[1,3,5].txt 表示匹配字符 1、3、5 中的任意一个file_[1-5].txt 表示匹配数字 1~5file_[^6].txt 表示匹配不是 6 的一个字符5. 压缩解压命令压缩tar -zcvf filename.tar.gz dirname/*tar -jcvf filename.tar.bz2 dirname/*解压tar -zxvf filename.tar.gztar -jxvf filename.tar.bz26.组合命令1. 管道将前面命令的输出作为后续命令的输入ps -ef | grep bash2. 重定向将前面命令的输出重定向到文件中 覆盖重定向 追加重定向ps -ef file.txt ps -ef 查看进程信息练习在/usr/include/stdio.h文件中的后200行找到和extern 相关的内容并把这些内容所在的行记录到file.txt文件中使用一条shell命令实现tail -n 200 /usr/include/stdio.h | grep extern file.txt7. 其余命令1. echo 将内容显示在终端2. history 查看终端输入过的历史命令3. du 查看文件大小du -m 文件名/目录名du -k 文件名/目录名du 用于查看文件或目录实际占用的磁盘空间-k 以 KB 显示 -m 以 MB 显示-h以易读格式自动显示单位。4. od 按照指定的方式查看文件中的内容od -c file.txt # 按字符显示od -x file.txt # 按十六进制显示od -d file.txt # 按十进制显示od -b file.txt # 按八进制显示5. date 查看时间和日期6. unameuname -a 查看内核版本、平台架构7. ifconfig 查看网卡信息8. ping 测试主机与指定IP地址是否能够网络连通8. dpkg工具集1. 安装软件sudo dpkg -i 软件包名.deb2. 卸载软件sudo dpkg -P 软件名3. 查看安装是否成功dpkg -l 软件名9. apt-get工具集1. 一定有网2. 设置apt-get工具集的源3. 下载并安装软件sudo apt-get install 软件名4. 卸载软件sudo apt-get remove 软件名 --purge2. shell编程1. 编译型语言如 C 语言1. 有丰富的数据类型2. 先编译再执行3. 执行速度快4. 开发效率低5. 数据的运算和处理2. 解释型语言如 Shell、Python1. 所有内容都是字符串2. 边翻译边执行3. 执行速度慢4. 开发效率高5. 系统的开发和维护3. 编写shell脚本并执行的步骤1.打开文件并编写代码 vim filename.sh2.加上执行权限 chmod x filename.sh3.运行脚本 ./filename.sh4. shell脚本本质就是一系列shell命令的集合5. shell中的变量1. 环境变量PWD $PWD表示 用这个值 当前的路径HOME $HOME 家目录PATH $PATHPATH 表示系统查找可执行命令的路径集合当输入一个命令时Shell 会按照$PATH 中的目录依次查找该命令。2. 位置变量$0文件名$1给脚本传参$2$3$4$#传入参数个数$$脚本运行时的进程ID号$?上一条shell语句执行的结果$1 到 $9分别代表传入脚本的第 1 个到第 9 个参数。$? 表示上一条命令或语句的执行结果0 代表成功3. 自定义变量变量名值 不要加空格会出错6. shell中的引号1. 双引号打印时会替换成变量的值2. 单引号打印单引号中的内容不变3. 倒引号将引号内部的内容作为一个命令使用7. shell脚本中的输入和输出1. echo 输出2. read 输入8. if分支语句if 判断条件thenelsefi判断条件test 判断两个字符串大小两个数字大小逻辑关系文件是否存在以及文件类型9. case分支语句case 变量名 in值1)语句;;值2)语句;;值3)语句;;*)语句;;esac10. while循环while 条件do语句done11. for 循环#for i in 1 2 3 4 5#for i in {1..100}#for i in seq 100for ((i 0; i 101; i))do语句done12. untiluntil 条件do语句doneuntil条件为假时执行循环条件为真时结束循环。#直到 i 100 为止所以 i1~100 都会参与求和。 #!/bin/bash i1 sum0 until [ $i -gt 100 ] do sumexpr $sum $i iexpr $i 1 done echo sum $sum13. 数组#!/bin/bash array(hello world how are you) echo ${array[0]} echo ${array[1]} echo ${array[2]} echo ${array[3]} echo ${array[4]} echo ${array[*]}14. 函数#!/bin/bash #函数return返回的是函数调用的结果结果为0 #函数内部的打印会作为函数的返回值 add() { ret0 retexpr $1 $2 echo $ret return 3 } read num1 read num2 sumadd $num1 $num2 echo $? echo sum $sum #函数没有 return 时返回最后一条命令echo $ret的状态有 return 时返回 return 指定的状态。 #你的 return 3 覆盖了前面 echo 的返回值所以 $? 是 3。小知识点1.exprexpr计算表达式expr 是 Shell 中用于计算表达式的命令主要功能如下基本用途用于评估表达式Evaluate expressions支持算术运算支持的运算包括加、减、乘、除以及比较运算如大于、小于、等于等使用方式通常配合倒引号使用将 expr 及其参数作为命令执行并将结果赋值给变量注意事项在进行乘法运算时由于星号 * 在 Shell 中有通配符含义需要添加反斜杠 \ 进行转义2.testShell 脚本中 test 命令的用法及其在分支语句中的应用1. test 命令基础功能定义test 用于测试表达式真假常配合 if 语句进行条件判断。语法结构基本格式为 test expression若表达式为真则执行后续代码否则走 else 分支。简写形式可以使用中括号 [ ] 替代 test 命令但需注意左右两侧必须保留空格。2. 常用测试选项字符串测试使用 -n 测试长度非零-z 测试长度为零 和 ! 分别判断相等与不等。数值比较使用 -eq相等、-gt大于、-ge大于等于、-lt小于、-le小于等于及 -ne不等于。文件属性支持 -b块设备、-c字符设备、-d目录、-e存在、-f普通文件等选项。#if test $num1 -gt $num2 等价于 if [ $num1 -gt $num2 ]3.PATHpath环境变量的使用? 为啥不直接a.out 而是./a.out ? 为啥不./ls 而是ls?PATH 环境变量用于告诉 Shell输入一个命令后应该去哪些目录中查找对应的可执行文件。例如输入 ls 时Shell 会到 $PATH 中的 /bin、/usr/bin 等目录查找 ls所以可以直接写 ls而自己编译生成的 a.out 一般就在当前目录当前目录 . 默认通常不在 PATH 中因此直接输入 a.out 找不到需要写 ./a.out其中 ./ 就表示“当前目录”。同理./ls 的意思是执行“当前目录下的 ls 文件”如果当前目录没有这个文件就会失败而直接写 lsShell 会根据 PATH 自动找到系统中的 ls。可以用 which ls 或者 whereis ls 查看实际执行的是哪个文件。
返回列表