Linux操作系统是功能及其强大的操作系统,而且这种操作系统是可以裁剪的,我们可以将我们需要的功能裁剪出来,这一点在我们的嵌入式领域有着广泛的应用
先来了解一下我们操作系统的基本概念:
操作系统
概念:
可以看作一个软件,功能是用来屏蔽底层不同的硬件平台,为上层应用提供统一的接口与运行环境
Linux内核功能:
1.内存管理:
2.文件系统的管理;
3.对任务的调度;
4.多任务的通信;
5.网络功能管理;
6.对硬件设备的管理;
我们用户往往是无法直接与内核进行数据的交互的,我们在这里需要引入shell的概念
shell
作用:
1.保护内核:用户与shell交互,shell与内核交互;
2.命令解释器:
将用户命令转换为对应的C语言代码;
内核是用来解决复杂指令与复杂功能
我们还有一种与内核间接进行交互的方式那就是:
库函数:
库函数是有我们用户进行的具有可以跨平台的工具
库函数会先对数据进行预处理,然后再呈递LInux内核
库函数可以安装到不同的操作系统中(移植便利)
有用户调用就没有系统调用了吗??
有的有的:
还有我们的系统调用:
系统调用是只能由Linux内核进行调用的,只有在Linux中可以调用的接口;
系统调用的内容都会在我们操作手册中,直接使用 man 2 指令就可以查看;
2.操作系统的组成:
- linux 内核
- shell
- 库函数
接下来我们来了解一下基本的操作
1.shell命令
1.基本命令:
ls cd mkdir rmdir
使用形式 command options arg1 arg2 arg3 ···
2.文件查看命令:
1.cat 查看文件信息:
cat filename
2.head/tail 查看文件开头/末尾 的内容
head -n 10 filename
tail -n 10 filename
3.管道:
将前边命令的输出作为后续命令的输入
head -n 10 filename | grep "字符串"
ps -ef 查看进程信息
4.查看搜索
grep 搜索关键字
grep "字符串" 文件名
5.重定向
将原来输出在终端的内容写入到文件中
覆盖重定向:>
追加重定向: >>
6.通配符:
匹配任意长度长度任意字符 *
?:匹配一位长度任意字符
\]:匹配一位长度指定字符 7.chmod 修改文件权限: 读权限:r 写权限:w 执行权限:x 无权限:- 第一个rwx:创建文件的用户对文件是否拥有读写执行; 第二个rwx:创建文件的用户对同组用户是否拥有读写执行权 第三个rwx:其余人是否拥有读写执行权 rwx 对应的八进制码分别为:4 2 1 可以使用 chmod 0777 filename 修改全部权限 chmod +/- r/w/x filename 8.chgrp 修改文件所属的组 chgrp 用户名 filename 9.chown 修改文件所属的用户 chown 用户名 filename 10.压缩与解压缩 .tar.bz2 .tar.gz 压缩文件 tar -jcvf filename.tar.bz2 dirname/\* tar -zcvf filename.tar.gz dirname/\* 解压缩文件 tar -jxvf filename.tar.bz2 tar -zxvf filename.tar.gz 11.文件查找: 查找文件: find 目录 -name "文件名" 12.其余命令 1.echo 在终端显示对应内容 2.du 统计文件大小 du -m 文件名 以兆为单位 du -k 文件名 以Kb为单位 3.fdish 查看磁盘分区信息 fdish -l 4.sudo 使用超级用户权限来执行某个操作 sudo fish -l 5.data 查看时间 6.whoami 查看登录的用户信息 7.ps -ef 查看进程 8.top 根据CPU占用率查看进程信息 q 退出 9.ifconfig 查看网卡信息 10.ping 测试与目的主机是否连通 ping 8.8.8.8 13.dpkg 工具集 sudo dpkg -i filname.deb 安装软件 sudo dpkg -l 软件名 查看软件是否安装成功 sudo dpkg -p 软件名 卸载软件 14.aptget工具集 可以根据自己配置的园下载软件 根据软件依赖关系安装软件所需的所有依赖 ask:需要联网 点击"设置" 1.ping 8.8.8.8 检查是否有网 查看是否有回复请求 点击"虚拟网络适配器" 选择"NAT模式" 点击"确定" 2. 修改Ubuntu配置文件 打开配置文件 修改配置文件为如下格式: 保存退出 :wq 3. 重启Ubuntu 2. 配置apt-get工具集的源 1. 点击"Ubuntu Software" 2. 右键选择"Software \& Updates" 3. 点击"close" 4. 输入命令 5. 软件安装 6. shell编程 7. 解释型语言与编译型语言 8. 解释性语言:边翻译边执行 开发效率高 执行效率低 不适合做数据运算 sudo vim /etc/network/interfaces1 auto lo iface lo inet loopback auto ens33 iface ens33 inet dhcp sudo shutdown -r now1 sudo apt-get autoclean sudo apt-get update sudo apt-get install -f #安装软件 sudo apt-get install 软件名 #卸载软件 sudo apt-get remove 软件名 --purge 接下来来了解一下我们的shell编程吧 先了解一下: 解释性语言: 边翻译边执行 开发效率高 执行效率低 不适合做数据运算 适合对系统进行管理; python shell 语言 编译性语言 翻译完再执行 开发效率低 执行效率高 适合做数据运算符,有丰富的数据结构 c# c++ c 2. shell脚本开发流程 1.编写shell脚本 vim filename.sh 2.加上执行权限 chmod +x filename.sh 3.运行 ./filename.sh 3.shell脚本本质 一系列shell命令的集合 4.shell脚本中的引号 1.双引号 双引号中的变量内容会进行替换 2.单引号 单引号中的为字符串常量,不做 任何改变,直接操作 3.倒引号 将引号内的内容作为指令来执行 5,shell中的变量 1.环境变量 shell脚本中用来存放系统相关信息的变量 PWD:存放当前目录的绝对路径 HOME:登录用户的家目录 PATH:系统软件的默认目录 2.位置变量 $0 程序名 $1 第一个传入的文件名 $2 第二个传入的文件名 $# 传入 参数的个数 $? 上一句语句运行的效果 $$ 执行脚本对应进程的id号 3.自定义变量 i=0; str = "hello world" 无需定义,直接可用 read 可用于接收变量 6.分支语句: 1.基本格式: ```c if 表达式 then 语句块 elif 表达式 语句块 else 语句块 fi ``` 2.test 访问文件类型,比较数值 (())中的括号中可以直接使用C语言代码 2.case分支 基本结构 ```c case $变量 in 9) 语句块 ;; 8)语句块 ;; 7)语句块 ;; *)语句块 ;; esac 循环结构: #!/bin/bash sum=0 i=0 ``` #for i in `seq 100` #while \[ $i -le 100
until [ $i -gt 100 ]
do
sum=expr $sum + $i
i=expr $i + 1
done
echo "sum = $sum"
c
#!/bin/bash
sum=0
i=0
for i in `seq 100`
while[$i -le 100]
until[$i -gt 100]
do
sum = `expr$sun + $i`
i = `expr $i+1`
done
echo "sum = $sum"
数组的实现
c
#!/bin/bash
array = (i love china)
echo ${array[1]}
echo ${array[2]}
echo ${array[3]}
echo ${array[*]}
shell 中函数的实现
c
#!/bin/bash
add()
{
sum = `expr $1 + $2`
echo $sum
}
ret =`add 100 200`
echo "ret = $ret"
函数内部使用打印指令echo 相当于传出返回值