本节将讲述linux基础命令、python与开源硬件、常用的python书籍三部分。
之所以把linux基础命令划分到硬件模块有两个原因:1、大多数人学习python时,只有在后期才会使用;2、大多数人仅仅是使用其较少的命令操作,而这些操作从知识层面来讲是没有技术含量的,就像不需要懂电脑底层一样,会使用即可。对笔者而言,主要使用MAC进行日常学习,因此linux仅仅做部分环境使用,它不像上一节的辅助软件工具那样,需要频繁的使用和修改。真正去做linux相关工作的,不能把其划分到硬件领域。
虽然python是高级语言,但不代表其不能与硬件结合。它可以和其他语言搭配进行硬件操作,简化算法;也可以像树莓派那样的开源硬件一样进行事物处理。本书只做介绍,不进行硬件配置学习。
趣话:1991 年 林纳斯(Linus) 就读于赫尔辛基大学期间,对 Unix 产生浓厚兴趣,尝试着在Minix 上做一些开发工作因为 Minix 只是教学
使用,因此功能并不强,林纳斯 经常要用他的终端 仿真器(Terminal Emulator) 去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,
他自己编写了磁盘驱动程序和文件系统,这些在后来成为了 Linux 第一个内核的雏形。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的**多用户、多任务、支持多线程和多CPU的操作系统。**它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。内核源码网址:http://www.kernel.org。所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中。
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。Linux 内核版本又分为 稳定版 和 开发版,两种版本是相互关联,相互循环。
稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序。
开发版:由于要试验各种解决方案,所以变化很快。
Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。如Ubuntu、Redhat、Fedora、openSUSE、Linux Mint、Debian、Manjaro、Mageia、CentOS、Arch
**服务器领域:**Linux 在服务器领域的应用是其重要分支;Linux 免费、稳定、高效等特点在这里得到了很好的体现。早期因为维护、运行等原因同样受到了很大的限制;近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛
**嵌入式领域:**近些年来 Linux 在嵌入式领域的应用得到了飞速的提高。Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广。
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | ls | list | 查看当前文件夹下的内容 |
02 | pwd | print wrok directory | 查看当前所在文件夹 |
03 | cd [目录名] | change directory | 切换文件夹 |
04 | touch [文件名] | touch | 如果文件不存在,新建文件 |
05 | mkdir [目录名] | make directory | 创建目录 |
06 | rm [文件名] | remove | 删除指定的文件名 |
07 | clear | clear | 清屏 |
参数 | 含义 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 配合 -l 以人性化的方式显示文件大小 |
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。 |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 切换到当前目录 |
cd .. | 切换到上级目录 |
cd - | 可进入上次所在的目录 |
参数 | 含义 |
---|---|
-i | 以进行交互式方式执行 |
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹时必须加此参数 |
参数 | 含义 |
---|---|
-f | 禁止交互式操作,如有覆盖也不会给出提示 |
-i | 确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件 |
-v | 显示移动进度 |
参数 | 含义 |
---|---|
-a | 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。 |
-f | 已经存在的目标文件而不提示 |
-i | 交互式复制,在覆盖目标文件之前将给出提示要求用户确认 |
-r | 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。 |
-v | 显示拷贝进度 |
grep [-选项] ‘搜索内容串’文件名
例:grep 'a' 1.txt
选项 | 含义 |
---|---|
-v | 显示不包含匹配文本的所有行(相当于求反) |
-n | 显示匹配行及行号 |
-i | 忽略大小写 |
find命令:查找文件
示例命令 | 含义 |
---|---|
find ./ -name test.sh | 查找当前目录下所有名为test.sh的文件 |
find ./ -name '*.sh' | 查找当前目录下所有后缀为.sh的文件 |
find ./ -name "[A-Z]*" | 查找当前目录下所有以大写字母开头的文件 |
find /tmp -size 2M | 查找在/tmp 目录下等于2M的文件 |
find /tmp -size +2M | 查找在/tmp 目录下大于2M的文件 |
find /tmp -size -2M | 查找在/tmp 目录下小于2M的文件 |
find ./ -size +4k -size -5M | 查找当前目录下大于4k,小于5M的文件 |
find ./ -perm 777 | 查找当前目录下权限为 777 的文件或目录 |
tar命令:归档
tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。
tar [参数] 打包文件名 文件
参数 | 含义 |
---|---|
-c | 生成档案文件,创建打包文件 |
-v | 列出归档解档的详细过程,显示进度 |
-f | 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后 |
-t | 列出档案中包含的文件 |
-x | 解开档案文件 |
gzip命令:解压缩
tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。
gzip [选项] 被压缩文件
解压: tar zxvf 压缩包包名
压缩: tar cvzf 压缩包包名 文件1 文件2 ...
选项 | 含义 |
---|---|
-d | 解压 |
-r | 压缩所有子目录 |
chmod命令:修改权限
字母法:chmod u/g/o/a +/-/= rwx 文件
数字法:chmod 777 文件
[ u/g/o/a ] | 含义 |
---|---|
u | user 表示该文件的所有者 |
g | group 表示与该文件的所有者属于同一组( group )者,即用户组 |
o | other 表示其他以外的人 |
a | all 表示这三者皆是 |
[ +-= ] | 含义 |
---|---|
+ | 增加权限 |
- | 撤销权限 |
= | 设定权限 |
rwx | 含义 |
---|---|
r | read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。 |
w | write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。 |
x | excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。 |
字母 | 说明 |
---|---|
r | 读取权限,数字代号为 "4" |
w | 写入权限,数字代号为 "2" |
x | 执行权限,数字代号为 "1" |
- | 不具任何权限,数字代号为 "0" |
硬件平台 | 操作系统 | python运行环境 |
---|---|---|
普通PC | windows | 安装windows版本python后的运行环境 |
普通PC | Linux | linux一般都自带python运行环境 |
普通PC | Mac | Mac自带python运行环境 |
pcDuino | Lubuntu | 自带python运行环境 |
树莓派(Raspberry) | Arch Linux | 自带python运行环境 |
先看一下开源软件的定义:它被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制。开放源码软件通常是有copyright的,它的许可证可能包含这样一些限制: 蓄意的保护它的开放源码状态,著者身份的公告,或者开发的控制。什么意思呢?就是说,尽管它有版权,但是将软件的源代码公开,本着共享的精神,使得他人可以借鉴和使用;如果软件有bug,他人可以指正;任何人都可以将自己的研究成果加入其中,促进其发展。
开源硬件类似开源软件,不同之处在于,开源硬件是把硬件的源代码公开,即公开硬件开发板源码。其中包括硬件原理图、机械绘图、物料清单、板子布局、硬件模块设计和电路图。软件开发人员根据这些公开的信息,可以自由的折腾,搭建自己的硬件应用系统——通过搭接以及软件编写完成指定功能。
实际上,在最早的时候硬件都是开源的。包括打印机、电脑、甚至苹果电脑,他们的整个设计原理图是公开的。在上个世纪六七十年代的时候,很多公司在思考“为什么要开放自己的资源”。于是,在那一时期很多公司都选择闭源。这种情况再加上很多的贸易壁垒、技术壁垒、专利版权等,就出现了不同公司之间的互相起诉,类似于三星和苹果那样。这种做法在一定程度上有利于创新,但是会阻碍小公司创新者或者个体创新的发展。
2005年冬季Arduino诞生,作为一款便携灵活、方便上手的开源电子原型平台,能够通过各种各样的传感器来感知环境并做一些操作。我们熟知的ARM芯片便是它的杰作。
Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。
它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是通过 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。
趣话:Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。Massimo Banzi喜欢去一家名叫di Re Arduino的酒吧,该酒吧是以1000年前意大利国王Arduin的名字命名的。为了纪念这个地方,他将这块电路板命名为Arduino。
其特点为:
**跨平台:**Arduino IDE可以在Windows、Macintosh OS X、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。
**简单清晰:**Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 avr-gcc库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。
**开放性:**Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。
**发展迅速:**Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。
Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。自问世以来,受众多计算机发烧友和创客的追捧,曾经一“派”难求。别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是“麻雀虽小,五脏俱全”。
它是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。 Raspberry Pi B款只提供电脑板,无内存、电源、键盘、机箱或连线。
pcDuino是一种高性能,高性价比的迷你PC的平台,能够运行PC操作系统,如Ubuntu和Android的ICS等。它可以通过内置HDMI接口输出视频到电视或显示器屏幕。
pcDuino专门针对开源社区快速增长的需求,即希望有一个平台可以运行完整的PC操作系统,容易使用的工具链和兼容流行的Arduino开放的生态系统,如Arduino shield和开源项目等。
pcDuino的硬件性能指标远超树莓派,性能稳定,做工精良。pcDuino迷你计算机的CPU采用1GHz ARM Cortex A8内核,DRAM为1GB,板载存储达到2GB Flash, 完全兼容Arduino接口。另外,pcDuino 可以从NAND或者从mini-SD卡(TF卡)启动,在NAND Flash内有出厂预装了ubuntu系统,拿到手即可使用。
可在pcDuino上用python实现一些应用,比如
在pcDuino上通过网页的形式控制LED灯的开关:即实现一个web服务器,并实现各种彩灯闪烁的效果等。
在pcDuino上运行simpleCV实现图像处理时,可以使用python库函数simpleCV来实现图像处理,包括摄像头采集数据与处理,可以比肩Photoshop了。
在pcDuino上用python语言实现远程无线视频监控等等。
在python学习中,建议大家尽可能的阅读和查询官方文档,这样可以更好的帮助我们。除此之外,本节主要介绍了笔者学习和工作中经常查阅的一些书籍,此处声明本书也综合学习借鉴了这些书籍的讲解,通过分类列出,供大家按需查询。
基础学习 |
---|
《21天学通python》 |
《python硬件编程实战》 |
《python学习手册》第四版 |
《python标准库》 |
《python袖珍指南》第五版 |
《用python重写了C语言经典100例》 |
《编写高质量代码——改善python程序的91个建议》 |
《python Cookbook》第三版英文 |
高级学习 |
《python核心编程》第三版 |
《正则表达式必知必会》 |
《python网络编程基础》 |
《python web开发学习实录》 |
《数据结构与算法 python语言描述》 |
《python自动化运维技术与最佳实践》 |
《深入python3》 |
《python编程实战——运用设计模式、并发和程序库创建高质量程序》 |
《Diango Web开发指南》 |
《the Diango book 2.0》 |
《Flask web开发:基于python的web应用开发实战》 |
《shell脚本学习指南》 |
数据分析 |
《利用python进行数据分析》 |
《python科学计算》第三版 |
《python数据分析基础》 |
《常用数据挖掘算法总结及python实现》 |
《贝叶斯思维:统计建模的python学习法》 |
《python数据可视化编程实战》 |
《python金融大数据分析》 |
《量化投资以python为工具》 |
爬虫 |
《python网络爬虫实战》 |
《Beautifulsoup4官方英文文档》 |
《用python写网络爬虫》 |
《learning scrappy》 |
机器学习 |
《使用python分析社交网络数据》 |
《deeplearnbook0.5》 |
《机器学习》马志华 |
《Tensorflow实战Google深度学习框架》 |
《headfirst-tensorflow》 |
《Hands-On Machine Learning with Scikit-Learn&TensorFlow》 |
《Fundamentals of Deep Learning》 |
《机器学习系统设计 python2014》 |
《深度学习》(Ian Goodfellow) |