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模式"
点击"确定"
- 修改Ubuntu配置文件
打开配置文件
修改配置文件为如下格式:
保存退出
:wq
-
重启Ubuntu
-
配置apt-get工具集的源
-
点击"Ubuntu Software"
-
右键选择"Software & Updates"
-
点击"close"
-
输入命令
-
软件安装
-
shell编程
-
解释型语言与编译型语言
-
解释性语言:边翻译边执行
开发效率高
执行效率低
不适合做数据运算
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
- 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 相当于传出返回值