1.linux系统学习外的介绍
1.1.常见linux系统的种类
1.Ubuntu:适合桌面、笔记本电脑和服务器使用,广泛用于家庭和商业环境。
2.Debian:适合作为服务器操作系统,在网络环境中广泛使用。也可用于桌面工作。
3.CentOS:适合作为服务器操作系统,特别是在企业级环境中使用。
4.Fedora:适合作为开发者的操作系统,提供最新版本的软件包并支持最新的技术。
5.Red Hat Enterprise Linux (RHEL):适合作为企业级服务器操作系统,提供高级支持和稳定性。
6.OpenSUSE:适合桌面和服务器使用,具有易用性和良好的硬件兼容性。
7.Arch Linux:适合高级用户和Linux发烧友使用,提供最新的软件包和灵活的配置选项。
8.Slackware Linux:适合高级用户和Linux发烧友,提供简单而稳定的环境。
9.Gentoo Linux:适合高级用户和Linux发烧友,提供源代码安装和高度可配置的环境。
10.Kali Linux:适合作为渗透测试和网络安全评估的操作系统,提供各种安全工具和漏洞测试。
1.2.常用嵌入式系统的种类
嵌入式系统通常使用实时操作系统(Real-time Operating System,RTOS),包括:
1.FreeRTOS:一个开源的小型嵌入式实时操作系统,适合用于低成本、低功耗和资源受限的应用领域,例如智能家居、传感器网络、医疗设备等。
2.μC/OS:一种迷你型实时操作系统,适用于单片机和处理器等资源有限的设备,广泛应用于汽车电子、航空航天、消费电子等领域。
3.QNX:一种高度可靠的实时操作系统,适用于大规模工业自动化、医疗设备、交通运输、安防等领域。
4.VxWorks:一种强大的实时操作系统,适用于无人机、军事航空、铁路信号、半导体制造等高可靠性和高实时性要求的应用领域。
5.Nucleus RTOS:一种小巧而灵活的实时操作系统,适用于嵌入式网络设备、通信设备、消费电子等领域。
这些实时操作系统主要用于控制和管理嵌入式系统的各种硬件和软件资源,以提供稳定性、可靠性、实时性和效率。它们广泛应用于工业自动化、交通运输、医疗设备、消费电子、军事航空等领域。
1.3.Linux下开发嵌入式比windows有哪些优点?
在Linux系统下开发嵌入式通常更受欢迎和更加方便,原因如下:
1.开源性:Linux系统本身就是一个开源操作系统,开发者可以免费获取并自由修改和使用。而在Windows下,很多开发工具和库则需要购买授权或付费使用。
2.工具链完整性:Linux系统提供了完整的开发工具链,包括编译器、调试器、Make工具以及各种库文件和开发工具,这些工具之间相互协作、配合得非常紧密,能够更好地满足嵌入式开发的需求。而在Windows系统下,这些工具则需要从不同的来源获取,安装和配置起来相对较为复杂。
3.可移植性:由于Linux本身就具有高度可移植性,而且很多开源软件和库都是基于Linux环境进行开发的,因此在Linux下进行开发的程序更容易移植到其他嵌入式设备上。
4.软件资源丰富:Linux系统有很多开源软件和库可以被用于嵌入式系统的开发,包括网络协议、图形界面、数据库等。这些开源软件和库的数量和质量远远超过了Windows下的同类资源。
总之,在Linux系统下开发嵌入式系统更加方便和自由,具有更好的可移植性和高效性。同时,由于Linux下的开源文化和社区支持,开发者可以更容易地共享经验和解决问题。
2.linux系统学习
2.1.linux文件系统FHS
Linux文件系统的目录结构是层次化的树形结构,称为文件系统层次结构(Filesystem Hierarchy Standard,缩写FHS)。
以下是常见的一些目录及其用途:
目录名 | 用途 |
---|---|
/bin | 存放可执行二进制文件 |
/boot | 存放启动Linux时使用的文件 |
/dev | 存放设备文件 |
/etc | 存放系统配置文件 |
/home | 存放用主目录 |
/lib | 存放共享库文件 |
/media | 自动挂载的设备(如USB驱动器、光盘等)所在的目录 |
/mnt | 手动挂载的文件系统所在的目录 |
/opt | 第三方应用程序所安装的目录 |
/proc | 运行时信息存储的虚拟文件系统 |
/root | 超级用户(root)的主目录 |
/sbin | 存放系统管理员使用的可执行二进制文件 |
/tmp | 存放临时文件 |
/usr | 存放共享的只读和可执行的程序、库、文档、源代码和数据文件 |
/var | 存放经常变化的文件,如日志文件、邮件、打印队列等 |
2.2.linux系统命令
这里是一个之前放过的查询链接
linux命令大全
这个表是对于以下命令中出现代词的解释
command,命令名
dir,文件夹名
string,字符串
username,用户名
groupname,组名
regex,正则表达式
path,路径
device,设备名
partition,分区名
IP, IP地址
domain,域名
ID,远程用户ID
host,主机名,可以为IP地址或者域名
var,变量名
value,变量值
1.命令帮助
$man command
# 查询命令command的说明文档
$man -k keyword
# 查询关键字
$info command
# 更加详细的说明文档
$whatis command
# 简要说明
$which command
# command的binary文件所在路径
$whereis command
# 在搜索路径中的所有command
2.用户
$finger username
# 显示用户username的信息
$who
# 显示当前登录用户
$who am I
# 一个有趣的用法
$write username
# 向用户发送信息(用EOF结束输入)
$su
# 成为root用户
$sudo command
# 以root用户身份执行
$passwd
# 更改密码
3.shell
$history
# 显示在当前shell下的命令历史
$alias
# 显示所有的命令别称
$alias new_command='command'
# 命令command的别称为new_command
$env
# 显示所有的环境变量
$export var=value
# 设置环境变量var为value
$expr 1 + 1
# 计算1+1
4.文件系统
$du -sh dir
# 文件夹大小,-h人类可读的单位,-s只显示摘要
$find . -name filename
# 从当前路径开始,向下寻找文件filename
$locate string
# 寻找包含有string的路径
$updatedb
# 与find不同,locate并不是实时查找,你需要更新数据库,以获得最新信息
$ln -s filename path
# 为文件filename在path位置创建软链接
$pwd
# 显示当前路径
$cd path
# 更改当前工作路径为path
$cd -
# 更改当前路径为之前的路径
5.文件
$touch filename
# 如果文件不存在,则创建一个空白文件;如果文件存在,则更新文件读取并修改时间
$rm filename
# 删除文件
$cp file1 file2
# 复制file1为file2
$ls -l path
# 显示文件和文件相关信息
$mkdir dir
# 创建dir文件夹
$mkdir -p path
# 递归创建路径path上的所有文件夹
$rmdir dir
# 删除dir文件夹,dir必须为空文件夹
$rm -r dir
# 删除dir文件夹及其包含的所有文件
$file filename
# 文件filename的类型描述
$chown username:groupname filename
# 更改文件的拥有者为owner,拥有组为group
$chmod 755 filename
# 更改文件的权限为755: owner r+w+x, group: r+x, others: r+x
$od -c filename
# 以ASCII字符显示文件
6.文件显示
$cat filename
# 显示文件
$cat file1 file2
# 连接显示file1和file2
$head -1 filename
# 显示文件第一行
$tail -5 filename
# 显示文件倒数第五行
$diff file1 file2
# 显示file1和file2的差别
$sort filename
# 对文件中的行排序,并显示
$sort -f filename
# 排序时,不考虑大小写
$sort -u filename
# 排序,并去掉重复的行
$uniq filename
# 显示文件filename中不重复的行(内容相同,但不相邻的行,不算做重复)
$wc filename
# 统计文件中的字符、词和行数
$wc -l filename
# 统计文件中的行数
7.文本
$echo string
# 显示string
$echo string | cut -c5-7
# 截取文本的第5列到第7列
$echo string | grep regex
# 显示包含正则表达式regex的行
$echo string | grep -o regex
# 显示符合正则regex的子字符串
8.时间与日期
$date
# 当前日期时间
$date +"%Y-%m-%d_%T"
# 以YYYY-MM-DD_HH:MM:SS的格式显示日期时间(格式可参考$man date)
$date --date="1999-01-03 05:30:00" 100 days
# 显示从1900-01-03 05:30:00向后100天的日期时间
$sleep 300
# 休眠300秒
9.进程
$top
# 显示进程信息,并实时更新
$ps
# 显示当前Shell下的进程
$ps -lu username
# 显示用户username的进程
$ps -ajx
# 以比较完整的格式显示所有的进程
$kill PID
# 杀死PID进程(PID为Process ID)
$kill %job
# 杀死job工作(job为job number)
$lsof -u username
# 用户username的进程打开的文件
$dmesg
# 显示系统日志
$time a.out
# 测试a.out的运行时间
10.硬件
$uname -a
# 显示系统信息
$df -lh
# 显示所有硬盘的使用状况
$mount
# 显示所有的硬盘分区挂载
$mount partition path
# 挂载partition到路径path
$umount partition
# 卸载partition
$sudo fdisk -l
# 显示所有的分区
$sudo fdisk device
# 为device(比如/dev/sdc)创建分区表,进入后选择n、p、w
$sudo mkfs -t ext3 partition
# 格式化分区patition(比如/dev/sdc1)
$arch
# 显示架构
$cat /proc/cpuinfo
# 显示CPU信息
$cat /proc/meminfo
# 显示内存信息
$free
# 显示内存使用状况
$pagesize
# 显示内存page大小(以KB为单位)
11.网络
$ifconfig
# 显示网络接口及相应的IP地址。ifconfig可用于设置网络接口
$ifup eth0
# 运行eth0接口
$ifdown eth0
# 关闭eth0接口
$iwconfig
# 显示无线网络接口
$route
# 显示路由表。route还可以用于修改路由表
$netstat
# 显示当前的网络连接状态
$ping IP
# 发送ping包到地址IP
$traceroute IP
# 探测前往地址IP的路由路径
$dhclient
# 向DHCP主机发送DHCP请求,以获得IP地址及其他设置信息
$host domain
# DNS查询,寻找域名domain对应的IP
$host IP
# 反向DNS查询
$wget url
# 使用wget下载url指向的资源
$wget -m url
# 镜像下载
12.SSH登录与文件传输
$ssh ID@host
# ssh登录远程服务器host, ID为用户名
$sftp ID@host
# 登录服务器host, ID为用户名。
#sftp登录后,可以使用下面的命令进一步操作
get filename # 下载文件
put filename # 上传文件
ls # 列出host上当前路径的所有文件
cd # 在host上更改当前路径
lls # 列出本地主机上当前路径的所有文件
lcd # 在本地主机更改当前路径
$scp localpath ID@host:path
# 将本地localpath指向的文件上传到远程主机的path路径
$scp -r ID@site:path localpath
# 以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath
13.压缩与归档
$zip file.zip file1 file2
# 将file1和file2压缩到file.zip
$unzip file.zip
# 解压缩file.zip
$gzip -c filename > file.gz
# 将文件filename压缩到file.gz
$gunzip file.gz
# 解压缩file.gz文件
$tar -cf file.tar file1 file2
# 创建tar归档
$tar -zcvf file.tar file1 file2
# 创建tar归档,并压缩
$tar -xf file.tar
# 释放tar归档
$tar -zxf file.tar.gz
# 解压并释放tar归档