学于黑马和传智播客联合做的教学项目 感谢
黑马官网
传智播客官网
微信搜索"艺术行者",关注并回复关键词"软件测试"获取视频和教程资料!
b站在线视频
没有安装操作系统的计算机,通常被称为裸机。如果想在裸机上运行自己所编写的程序,就必须用机器语言书写程序。如果计算机上安装了操作系统,就可以在操作系统上安装支持的高级语言环境,用高级语言开发程序。
1.1 操作系统的作用
- 是现代计算机系统中最基本和最重要的系统软件
- 是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩展
- 主要作用是管理好硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用
- 而其他的诸如编译程序、数据库管理系统,以及大量的应用软件,都直接依赖于操作系统的支持
1.2 不同应用领域的主流操作系统
- 桌面操作系统
- 服务器操作系统
- 嵌入式操作系统
- 移动设备操作系统
1> 桌面操作系统
- Windows:用户群体大
- MacOS:适合开发人员
- Linux:应用软件少
2> 服务器操作系统
- Linux:安全、稳定、免费、占有率高
- Windows Server:付费、占有率低
3> 嵌入式操作系统
- 嵌入式操作系统:Linux
4> 移动设备操作系统
- 移动设备操作系统:iOS、Android(基于Linux)
1.3 虚拟机
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
- 虚拟系统通过生成现有操作系统的全新虚拟镜像,具有真实操作系统完全一样的功能
- 进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响
- 而且能够在现有系统与虚拟镜像之间灵活切换的一类操作系统
1.1 Unix
1965 年之前的时候,电脑并不像现在一样普遍,它可不是一般人能碰的起的,除非是军事或者学院的研究机构,而且当时大型主机至多能提供30台终端(30个键盘、显示器),连接一台电脑。
为了解决数量不够用的问题
- 1965 年左右贝尔实验室加入了麻省理工学院以及通用电气合作的计划 —— 该计划要建立一套多使用者(multi-user)、多任务(multi-processor)、多层次(multi-level)的MULTICS操作系统,想让大型主机支持300 台终端
- 1969 年前后这个项目进度缓慢,资金短缺,贝尔实验室退出了研究
- 1969 年从这个项目中退出的Ken Thompson当时在实验室无聊时,为了让一台空闲的电脑上能够运行 "星际7旅行(SpaceTravel)" 游戏,在 8 月份左右趁着其妻子探亲的时间,用了 1 个月的时间,使用汇编写出了Unix 操作系统的原型
- 1970 年,美国贝尔实验室的Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B 语言(取BCPL的首字母),并且他用B 语言写了第一个 UNIX 操作系统
- 1971 年,同样酷爱 "星际旅行(Space Travel)" 的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发 UNIX,他的主要工作是改造B 语言,因为B 语言的跨平台性较差
- 1972 年,Dennis M.Ritchie在B 语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C 语言
- 1973 年初,C 语言的主体完成,Thompson和Ritchie迫不及待地开始用它完全重写了现在大名鼎鼎的Unix操作系统
1.2 Minix
- 因为AT&T(通用电气)的政策改变,在 Version 7 Unix 推出之后,发布新的使用条款,将 UNIX 源代码私有化,在大学中不能再使用 UNIX 源代码
- Andrew S. Tanenbaum(塔能鲍姆)教授为了能在课堂上教授学生操作系统运作的细节,决定在不使用任何 AT&T 的源代码前提下,自行开发与 UNIX 兼容的操作系统,以避免版权上的争议
- 以小型 UNIX(mini-UNIX)之意,将它称为MINIX
1.3 Linux
- 1991 年林纳斯(Linus)就读于赫尔辛基大学期间,对 Unix 产生浓厚兴趣,尝试着在Minix 上做一些开发工作
- 因为Minix只是教学使用,因此功能并不强,林纳斯经常要用他的终端仿真器(Terminal Emulator)去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这些在后来成为了 Linux 第一个内核的雏形,当时,他年仅 21 岁!
- 林纳斯利用 GNU 的 bash 当做开发环境,gcc 当做编译工具,编写了 Linux 内核,一开始 Linux 并不能兼容Unix
- 即 Unix 上跑的应用程序不能在 Linux 上跑,即应用程序与内核之间的接口不一致
- 一开始 Linux 只适用于 386,后来经过全世界的网友的帮助,最终能够兼容多种硬件
C 语言
-
在把UNIX移植到其他类型的计算机上使用时,C 语言强大的移植性(Portability)在此显现
- 机器语言和汇编语言都不具有移植性,为 x86 开发的程序,不可能在 Alpha,SPARC 和 ARM 等机器上运行
-
而C 语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的 C 语言编译器和库,然后将 C 源代码编译、连接成目标二进制文件之后即可运行
2.1 Linux 内核版本
-
内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层
-
Linux 内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环
- 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些 bug 或加入一些新的驱动程序
- 开发版:由于要试验各种解决方案,所以变化很快内
-
核源码网址:http://www.kernel.org
所有来自全世界的对 Linux 源码的修改最终都会汇总到这个网站,由 Linus 领导的开源社区对其进行甄别和修改最终决定是否进入到 Linux 主线内核源码中
2.2 Linux 内核版本
- Linux 发行版(也被叫做 GNU/Linux 发行版)通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件
- 常见的发行版本如下:
- Ubuntu
- Redhat
- Fedora
- openSUSE
- Linux Mint
- Debian
- Manjaro
- Mageia
- CentOS
- Arch
3.1 服务器领域
- Linux 在服务器领域的应用是其重要分支
- Linux 免费、稳定、高效等特点在这里得到了很好的体现
- 早期因为维护、运行等原因同样受到了很大的限制
- 近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛
3.2 嵌入式领域
- 近些年来 Linux 在嵌入式领域的应用得到了飞速的提高
- Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB等特点,使其近些年来在嵌入式领域的应用得到非常大的提高
主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、等都是其应用领域,得到了Google、三星、摩托罗拉、NEC 等公司的大力推广
3.3 个人桌面领域
- 此领域是传统 Linux 应用最薄弱的环节
- 传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 Windows 所压制
- 近些年来随着Ubuntu、Fedora等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率在逐渐的提高
- 在 Windows 下,打开 “计算机”,我们看到的是一个个的驱动器盘符
- 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形
- 在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录)
- Linux没有盘符这个概念,只有一个根目录 / ,所有文件都在它下面
1 用户目录
位于 /home/user ,称之为用户工作目录或家目录。
2 Linux 主要目录速查表
-
/:根目录,一般根目录下只存放目录,在 Linux 下有且只有一个根目录,所有的东西都是从这里开始
- 当在终端里输入 /home ,其实是在告诉电脑,先从 / (根目录)开始,再进入到 home 目录
-
/bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
-
/boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件: /boot/vmlinuz ,系统引导管理器: /boot/grub
-
/dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱
-
/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有
- /etc/inittab
- /etc/fstab
- /etc/init.d
- /etc/X11
- /etc/sysconfig
- /etc/xinetd.d
-
/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
- ~ 表示当前用户的家目录
- ~edu 表示用户 edu 的家目录
-
/lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
-
/lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下
-
/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载
-
/opt:给主机额外安装软件所摆放的目录
-
/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等
-
/root:系统管理员root的家目录
-
/sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与/bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用
-
/tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
-
/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
-
/usr:应用程序存放目录
- /usr/bin:存放应用程序
- /usr/share:存放共享数据
- /usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
- /usr/local:存放软件升级包
- /usr/share/doc:系统说明文件存放目录
- /usr/share/man:程序说明文件存放目录
- /var:放置系统执行过程中经常变化的文件
- /var/log:随时更改的日志文件
- /var/spool/mail:邮件存放的目录
- /var/run:程序或服务启动后,其 PID 存放在该目录下
-
很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务。
-
Linux 刚出世时没有什么图形界面,所有的操作全靠命令完成,就如同电视里的黑客那样,充满了神秘与晦涩。近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图形化界面下运行的快。可以说不会命令,就不算会 Linux。
-
在职场中,大量的服务器维护工作都是在远程通过SSH 客户端来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成。如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等
-
Linux 发行版本的命令大概有 200 多个,但是常用的命令只有 10 多个而已
学习终端命令的技巧:
- 不需要死记硬背,对于常用命令,用的多了,自然就记住了
- 不要尝试一次学会所有的命令,有些命令是非常不常用的,临时遇到,临时百度就可以
小技巧
- ctrl + shift + = 放大终端窗口的字体显示
- ctrl + - 缩小终端窗口的字体显示
在敲出 的前几个字母之后,按下 tab 键
- 如果输入的没有歧义,系统会自动补全
- 如果还存在其他文件 ,再按一下 tab 键,系统会提示可能存在的命令
小技巧按上
- /下光标键可以在曾经使用过的命令之间来回切换
- 如果想要退出选择,并且不想执行当前选中的命令,可以按 ctrl + c
说明:
- command :命令名,相应功能的英文单词或单词的缩写
- options :选项,可用来对命令进行控制,也可以省略
- parameter :传给命令的参数,可以是零个、一个或者多个
[] 代表可选
提示
- 现阶段只需要知道通过以下两种方式可以查询命令的帮助信息
- 先学习常用命令及常用参数的使用即可,工作中如果遇到问题可以借助网络搜索命令的中文资料
2.1 --help
说明:
显示command命令的帮助信息
2.2 man
说明:
查阅command命令的使用手册
man 是manual的缩写,是 Linux 提供的一个手册,包含了绝大部分的命令、函数的详细使用说明
使用man时的操作键:
ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。
Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“..”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。
ls常用参数:
详细信息含义如下图表示:
与DOS下的文件操作类似,在Unix/Linux系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符。
clear作用为清除终端上的显示(类似于DOS的cls清屏功能),也可使用快捷键:Ctrl + l ( “l” 为小写字母"L" )。
在使用Unix/Linux的时候,经常需要更换工作目录。cd命令可以帮助用户切换工作目录。 Linux所有的目录和文件名大小写敏感。
cd后面可跟绝对路径,也可以跟相对路径。如果省略目录,则默认切换到当前用户的主目录。
注意:
如果路径是从根路径开始的,则路径的前面需要加上 “ / ”,如 “ /mnt ”,通常进入某个目录里的文件夹,前面不用加 “ / ”。
使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后面不带参数。
通过mkdir命令可以创建一个新的目录。参数-p可递归创建目录。
需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限。
可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。
常用参数及含义如下表所示:
cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令。
用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。
常用选项说明:
用户可以通过touch来创建一个空的文件,如下:
说明:
- 会在当前路径下创建名字为hello.txt的空文件
- Linux系统中没有严格的后缀(格式),所以创建文件时可以命名为任意的文件名
Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。
注意: >输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。
查看内容时,在信息过长无法在一屏上显示时,会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用more命令,每次只显示一页,按下空格键可以显示下一页,按下q键退出显示,按下h键可以获取帮助。
管道:一个命令的输出可以通过管道做为另一个命令的输入。
管道我们可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读)。
Linux链接文件类似于Windows下的快捷方式。
链接文件分为软链接和硬链接。
软链接:软链接不占用磁盘空间,源文件删除则软链接失效。
硬链接:硬链接只能链接普通文件,不能链接目录。
使用格式:
如果没有-s 选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。
注意:如果软链接文件和源文件不在同一个目录,源文件要使用绝对路径,不能使用相对路径。
Linux系统中grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。
grep一般格式为:
在grep命令中输入字符串参数时,最好引号或双引号括起来。
例如:
常用选项说明:
rep搜索内容串可以是正则表达式。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
grep常用正则表达式:
7 查找命令:find
find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。
常用用法:
计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。
tar使用格式: tar [参数] 打包文件名 文件
tar命令很特殊,其参数前面可以使用“-”,也可以不使用。
tar与gzip命令结合使用实现文件打包、压缩。 tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。
gzip使用格式如下:
常用选项:
tar这个命令并没有压缩的功能,它只是一个打包的命令,但是在tar命令中增加一个选项(-z)就可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。
压缩用法:tar cvzf 压缩包包名 文件1 文件2...
解压用法: tar zxvf 压缩包包名
解压到指定目录:-C (大写字母“C”)
tar与bzip2命令结合使用实现文件打包、压缩(用法和gzip一样)。
tar只负责打包文件,但不压缩,用bzip2压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz2。
在tar命令中增加一个选项(-j)可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程。
压缩用法:tar -jcvf 压缩包包名 文件...(tar jcvf bk.tar.bz2 *.c)
解压用法:tar -jxvf 压缩包包名 (tar jxvf bk.tar.bz2)
通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。
压缩文件:zip [-r] 目标文件(没有扩展名) 源文件
解压文件:unzip -d 解压后目录文件 压缩文件
chmod修改文件权限有两种使用格式:字母法与数字法。
字母法:chmod u/g/o/a +/-/= rwx 文件
如果需要同时进行设定拥有者、同组者以及其他人的权限,参考如下:
数字法:“rwx” 这些权限也可以用数字来代替
如执行:chmod u=rwx,g=rx,o=r filename 就等同于:chmod u=7,g=5,o=4 filename
chmod 751 file:
- 文件所有者:读、写、执行权限
- 同组用户:读、执行的权限
- 其它用户:执行的权限
注意:如果想递归所有目录加上相同权限,需要加上参数“ -R ”。如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限
Centos下切换到root的简单命令:su
在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户密码。用户也可以直接使用该命令来修改自己的密码,而无需在命令后面使用用户名。
- 如果是图形界面,退出当前终端;
- 如果是使用ssh远程登录,退出登陆账户;
- 如果是切换后的登陆用户,退出则返回上一个登陆账号。1
who命令用于查看当前所有登录系统的用户信息。
vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。 vi没有菜单,只有命令,且命令繁多。
命令行模式
任何时候,不管用户处于何种模式,只要按一下ESC键,即可使Vi进入命令模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
文本输入模式
在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。
末行模式
末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。例如:
则分出一个窗口编辑newfile文件。如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。
vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富
进入插入模式:
进入命令模式:
ESC:从插入模式或末行模式进入命令模式
移动光标:
删除命令:
撤销命令:
重复命令:
文本行移动:
复制粘贴:
可视模式:
替换操作:
查找命令: