Windows与Linux的关系
当前主流的操作系统:Windows、Android、iOS、Linux/Unix、Symbian。
Windows:傻瓜式、好学习、工资低
Linux:认为每一个用户都是专业人士,操作麻烦,学习比较难,免费的、开源的,Linux性能好,可移植性好,好的设计理念
Android:移动操作系统,android基于linux
iOS:很优秀,创造性,走钢丝
嵌入式操作系统:Linux + WinCE
当前:消费电子Android,工业Linux
多机开发:双系统与虚拟机
开发嵌入式程序,需要Linux环境。但是因为:Windows中有许多很好用的软件,如代码编辑器:notepad++ ,SourceInsight,所以也需要windows。
既需要Windows,又需要Linux。
第一种:双系统:不方便
第二种:虚拟机:方便,损失性能,与真机微小差异
第三种:两台电脑:不方便
现实中:
个人开发者:虚拟机
大公司:服务器+客户端
搭建开发环境
涉及到两个东西:虚拟机软件+Linux系统
虚拟机软件:就是一个单纯的在Windows中运行的软件,跟word、360没有本质区别。现在主流的虚拟机软件有VMWare和VirtualBox
虚拟机软件在Windows系统中运行,运行后它会模拟出来一个电脑,所以叫虚拟机。然后我们可以在该虚拟机中安装别的操作系统。
隐藏文件与非隐藏文件
Windows中:文件隐藏与不隐藏通过设置文件属性实现的,可以点击文件,右键属性,选择勾选隐藏选项来设置文件为隐藏文件。。在Windows中查看隐藏文件方法:菜单栏 工具->文件夹选项->查看->显示所有文件
和文件夹。
Linux中:Linux中隐藏文件特点是文件名以.开头,跟文件属性无关。在linux中查看隐藏文件用ls -a命令(普通显示ls)
相对路径与绝对路径
路径:用来标识一个文件在操作系统的文件系统中存储的位置。
全路径 pathname &路径 path &文件名 name
D:\windows_share\enum.c 全路径 pathname
D:\windows_share\ 路径 path
enum.c 文件名 name
绝对路径:路径从绝对位置开始。Windows从某一个盘符(C:\)开始,Linux从根目录(/)开始。
相对路径:从当前所在的位置开始指明路径
举例:
D:\我的文档\123\123.txt
D:\我的文档\abc\abc.txt
当前在123.txt,但是要去abc.txt
方式1:采用绝对路径。D:\我的文档\abc\abc.txt
方式2:采用相对路径。../abc/abc.txt
从当前路径开始,往上走一层,再往下走一层(abc)就到了
测试:
/abc/123/def.txt 是linux绝对路径
abc/123/def.txt 不是linux绝对路径
F:\abc\123\def.txt 是windows绝对路径
abc\123\def.txt 不是windows绝对路径
Linux内核与发行版
Linux本身是一个操作系统内核,只有内核是无法直接使用的。我们所需的操作系统是内核和应用程序的集合体 → Linux发行版
Ubuntu、Redhat就是Linux的不同发行版,内核一样,应用程序不同。
目前使用Ubuntu的开发者居多,因为背后资金雄厚:捐赠收入,给大企业的定制化服务(基本版本、企业版等)
GUI与cmdline
GUI: Graphics User Interface 图形用户界面,偏娱乐;cmdline: Command Line 命令行,偏专业。
人机交互:人和机器(计算机)进行交互。在Linux中常用命令行(专业),在Windows中常用GUI(娱乐)。
Linux常用命令
- ls(list,列表):显示文件(不包含隐藏文件);ls -a:显示所有文件(包括隐藏文件);ls -l:以详细信息显示文件(不包含隐藏文件) ;ls -a -l:以详细信息显示文件(包含隐藏文件) tips:1)ls是命令;-a,-l等是参数,参数是平行关系,无先后顺序(ls -l -a = ls -a -l = ls -la = ls -al);2)ls -l显示的详细信息中: -rw-r--r--或者drwxr-xr-x 一共10个字符,第一个字符表示文件类型,后面9个字符表示文件权限。 文件类型:- 表示普通文件。普通文件指文本文件和二进制文件,如a.c 1.txt a.out都是普通文件;d 表示文件夹,d是directory的缩写;l 表示符号链接文件,后面会用->打印出它指向的文件;s 表示socket文件;p 表示管道文件 pipe
- man:查询man手册,离线获得帮助信息;man 1/2/3 xxx:1表示查询Linux命令,2表示查询Linux的API,3表示查询C库函数
- cd(change directory,切换目录):cd .:切换到当前目录;cd ..:切换到上一层目录;cd ../../:切换到上上层目录(./a.out 执行当前目录里的a.out)
- pwd(print work directory,打印当前工作目录的绝对路径)
- mkdir(make directory,创建文件夹):mkdir -p abc/def:级联创建文件夹,在abc文件夹里再创建一个def文件夹
- mv(move,移动):在目录间移动文件,mv 源文件pathname 目标文件pathname,eg: mv def/def.txt ./def.txt;修改文件名,mv 源名字 目标名字
- touch(创建空文件):touch pathname
- cp(copy,复制):复制文件或文件夹,cp 源文件pathname 目标文件pathname;cp -r 用来复制文件夹;cp -f 强制复制。实际操作时,一般都是cp -f 复制文件,cp -rf 复制文件夹
- rm(remove,删除):删除文件、文件夹;rm 文件pathname;rm -r 文件夹pathname;rm -f 强制删除文件;rm -rf 强制删除文件夹;rm a*删除当前目录下除目录文件外的所有单独文件。tip:-f 意味着有无返回值,含-f无返回值,不含-f会出现返回值
- cat:直接在命令行下显示文件内容;向文件输入
- rmdir(remove directory,删除文件夹):删除空的文件夹;要删除含有内容的文件夹只能用:rm -rf 强制删除文件夹
- ln(link,链接文件):Windows中快捷方式,实际上快捷方式和它指向的文件是独立的两个文件,两个都占硬盘空间,只不过用户访问快捷方式时,其效果等同于访问指向的文件;Linux中有两种链接文件:1)软链接(符号链接symbol),等同于Windows中快捷方式ln -s 源文件名 符号链接文件名,源文件名和符号链接文件名是主从关系,源被删了,符号链接也就失效了, eg: ln -s src.c linker.c (linker.c就是src.c的一个符号链接文件);2)硬链接,ln 源文件名 符号链接文件名,源文件名和符号链接文件名是并列关系,源被删了,符号链接依然有效。硬链接实际上和源文件在硬盘中是同一个东西,效果类似于硬盘上的一个文件,在文件系统上,在我们看来有好多个文件一样。每次删除一个文件时,只要他还有其他的硬链接存在,这个文件就不会被真正删除。只有等所有的链接文件都删除掉了,这个文件才会被真正从硬盘上删除。
- apt-get:在Ubuntu中在线安装、卸载软件。安装vim软件:apt-get install vim;卸载vim软件:apt-get remove vim。tip:apt-get 在线安装软件的原理和必要性:Linux操作系统复杂的内核版本、发行版本和定制性版本,造成了Linux中软件的不兼容。在Linux中安装软件是一件困难的事情,装了软件能不能用是不确定的。Ubuntu解决了这个问题,它对某个发行版(eg: Ubuntu10.04)的所有软件做了一个列表,然后用户通过apt-get install来安装软件时,在线连接的服务器会根据Ubuntu版本,给用户下载合适的软件来安装,确保了软件的兼容性。涉及的问题:1)权限;2)虚拟机Ubuntu的网络连接
- clear:清屏
- reset:复位(也起到清屏的作用)
- reboot:重启系统
- shutdown:以一种安全的方式关闭系统。所有登陆用户都可以看到关机信息提示,并且 login 将被阻塞。可以指定立刻关机,也可以指定系统在一定的延时后关机。所有进程都将接收到 SIGTERM 信号。这可以使 vi 等程序有时间将处于编辑状态的文件进行存储,邮件和新闻程序进程则可以将所有缓冲池内的数据进行适当的清除等等。 shutdown 通过通知 init 进程,要求它改换运行级别来实现。运行级别 0 用来关闭系统,运行级别 6 用来重启系统,运行级别 1 用来使系统进入执行系统管理任务状态,如果没有给出 -h 或 -r 标志时,这是 shutdown 命令的默认工作状态。
- halt:最简单的关机命令。其实halt就是调用shutdown -h。halt执行时会杀死应用进程,执行sync系统调用,文件系统写操作完成后就会停止内核。
- poweroff:在关闭计算机操作系统之后,最后还会发送ACPI指令,通知电源,最后切断电源供应,当然路由器等嵌入系统不支持ACPI的,所以这个无效。
- tar cvzf x.tar.gz xxx:将xxx压缩成x文件
- tar xvzf x.tar.gz:解压x文件;tar xvzf x.tar.gz -C xxx:将x文件解压到xxx目录
- su:用户切换
- sudo:暂时获取root用户权限
- ifconfig:配置网卡
编辑器vi的使用(vim是vi的升级版,推荐使用 vim)
编辑器就是一款软件,用来编辑。比如编写文件,编写代码。
Windows中常用的编辑器,如自带的notepad,比较好用的:notepad++,UltraEditor,SlickEditor;Linux中常用的编辑器,自带的最古老的vi,比较好用的:vim(推荐),gedit。
tip:有的vi命令其实是指vim,可以采用which vi,然后ls -l查看是不是链接到vim,如果是,则vi就是vim
1、vi的基础使用
- 使用vi来打开/创建一个文件, vi pathname
- vi的两种模式:1)命令模式:当vi打开时默认为命令模式,要转入输入模式,需要按a或者i键。在命令模式下,此时键盘上输入的所有东西都被vi当作命令来对待。 在命令模式下,最好不要乱输入。此时应该输入相应的命令,来让vi做相应的事;2)输入模式:输入模式用来向文件输入内容。可以从命令模式中按a或者i进入输入模式。进入输入模式后,就可以随意按键盘进行输入了。输入完成后如果要保存,要先退回到命令模式(因为保存也是一种命令)。在输入模式下按ESC键退回到命令模式。 注:注意看屏幕左下角,当命令模式时无提示信息或者提示文件名等信息,等处于输入模式时,提示 -- INSERT -- 。
- 在命令模式下如何保存:↓ ↓ ↓
- :wq 保存并且退出
- :w 只保存不推出
- :q 不保存退出,进来看了一下没改退出
- :q! 不保存强制退出
- :wq! 保存并强制退出
2、vi的高级使用
- 查找:在命令模式下,输入/xxx,光标就可以自动定位到xxx。
- 快速切换行:在命令模式下,输入:num,就可以快速切换到num行。
- 设置显示行号 :在命令模式下,输入:set nu,就可以显示行号 。注:设置不显示行号,命令模式输入:set nonu。设置永久显示行号,需要修改vi的配置文件。打开vi的配置文件~/.vimrc(vim /etc/vim/vimrc),在其中输入set number即可。
- 行删除 :在命令模式下,先将光标移动到要删除的行,然后输入dd 。如果要删除连续多行,譬如要删除连续的3行,使用3dd。
- 行复制:在命令模式下,输入nyy(n是复制行数,yy是复制命令)。复制时,要把光标放在要复制多行的第一行。
- 行粘贴:在命令模式下,输入p 。粘贴时,是粘贴到当前光标所在行的下一行。
Linux命令行中一些符号的含义
- . 代表当前目录
- .. 代表上一层目录,当前目录的父目录(是固定的)
- - 代表前一个目录(类似于IDE里的←) ,我刚才从哪个目录cd过来(可变的)
- ~ 代表当前用户的宿主目录 (宿主目录:所谓宿主目录,就是操作系统为当前用户所设计的用来存放文件、工作的默认目录。如Windows中的“我的文档”目录,就是Windows为我们设计的宿主目录;Linux中每个用户都有自己的宿主目录,这个目录对于普通用户来说,在/home/username/(cd ~ == cd /home/username/) ,而对于root用户来说,在/root。
- / 代表根目录
- $ 普通用户的命令行提示符
- # root用户的命令行提示符
- * 万能匹配符(eg: rm ab* 删除所有开头含有ab的文件;rm * 删除所有文件)
Linux中权限表示&管理
1、普通用户与特权用户(su命令切换用户 )
Windows中有普通用户和特权用户,特权用户是Administrator,普通用户可以有很多个。
特权用户是系统的管理员,对系统内所有文件具有操作权限。每个普通用户只能处理自己的文件,不能访问其他用户的文件,更不能随意处理操作系统的文件。
Linux中也有普通用户和特权用户的区别。特权用户就是root用户。普通用户权限受到限制,譬如说普通用户不能 cd /root,普通用户不能使用apt-get install 来装软件。
可以使用su 用户名来在不同用户间切换。譬如要从普通 用户切换到root,可以su root,然后输入root的密码即可转入root用户。从root要切换到普通用户gec,则su gec即可。
2、rwx与权限表示
ls -l显示详细信息
drwxr-xr-x 10个字符,第一个表示文件类型。剩下的9个分成3组,表示文件权限。
前三个表示此文件的属主(文件拥有者)对文件的权限
中间三个表示此文件属主所在的组对文件的权限
最后三个表示其他用户对文件的权限
(类似于:研发工程师——研发部——市场部,这三层关系)
rwx:r代表可读,w代表可写,x代表可执行
rwx:可读,可写,可执行
r-x: 可读,不可写,可执行
r--: 可读,不可写,不可执行
3、使用sudo暂时获取root权限
这是Ubuntu的一个特点,在Ubuntu中可以使用sudo命令让普通用户暂时获取root用户的权限,而不必麻烦地来回切换用户。eg:在普通用户下安装vim软件,可以输入sudo apt-get install vim,然后按照提示输入root用户的密码,即可进行安装。
虚拟机Ubuntu上网的问题
1、VMware中虚拟机网络的三种设置
第一种:NAT
第二种:桥接(bridged)
第三种:Host only 。该模式下仅主机可以上网,虚拟机不能上网。
1.1、虚拟机上网方式1:NAT方式
设置步骤:
第一步:在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择NAT模式
第二步: vi /etc/network/interfaces,打开该文件,将内容编辑成为:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
address 192.168.1.141
netmask 255.255.255.0
gateway 192.168.1.1
第三步:执行/etc/init.d/networking restart 重启网卡
1.2、虚拟机上网方式2:桥接(bridged) 方式
第一步:桥接。在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择桥接模式。
第二步:桥接到可以上网的网卡。在菜单栏 编辑 -> 虚拟网络编辑器,选择桥接到自己Windows中可以上网的网卡上(一般就是Wifi网络或者有线网络)
第三步:设置dhcp并重启网卡。
vi /etc/network/interfaces,打开该文件,将内容编辑成为:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
address 192.168.1.141
netmask 255.255.255.0
gateway 192.168.1.1
保存退出。然后命令行执行/etc/init.d/networking restart 重启网卡
1.3、总结
第一,NAT方式设置上网比较简单,但是不能用在嵌入式开发中。
第二,桥接方式设置上网较繁琐,但是在嵌入式开发中比较有用。
2、Linux中网络设置ifconfig
3、Ubuntu中网络配置文件/etc/network/interface
Linux高阶命令
1、find
功能:在linux文件系统中,用来查找一个文件放在哪里了。
举例:find /etc -name "interfaces"
总结:
(1)什么时候用find?
当你知道你要找的文件名,但是你忘记了它被放在哪个目录下,要找到该文件时,用find。
(2)怎么用find?
find 路径 -name "文件名"
2、grep
功能:在一个文本文件中,查找某个词。
举例:grep -nr "SUN" *
总结:
(1)什么时候用grep?
当你想查找某个符号在哪些地方(有可能是一个文件,也有可能是多个文件组成的文件夹)出现过,就用grep
(2)怎么用?
grep -nr "要查找的符号" 要查找的目录或文件集合
注意:-n表示查找结果中显示行号,-r表示要递归查找
3、which和whereis
功能:查找一个应用程序(二进制文件)在哪里
举例:which ls whereis ls
区别
which只显示二进制文件的路径
whereis显示二进制文件的路径,和其源码或man手册位置
4、uname
功能:查看系统信息
举例:uname -a
5、开机和关机
shutdown -h now 立即关机
init 0 关机
shutdown -r now 立即重启
reboot 重启
6、tree/lstree
功能:显示文件和目录由根目录开始的树形结构
7、mount/umount
功能:用来挂载磁盘到文件系统中
举例:mount -t nfs -o nolock 192.168.1.141:/root/rootfs /mnt 挂载
umount /mnt 卸载
8、磁盘空间相关
df -h 显示已挂载的分区列表
du -h 列出文件或文件夹的大小
du -h 文件名,可以列出这个文件有多大,列出方式是以人比较好看懂的方式。不像 ls -l列出的都是以字节为单位。
9、用户管理
useradd user1 添加一个名为user1的用户
userdel user1 删除一个名为user1的用户
passwd user1 为名为user的用户设置密码
adduser user1 添加一个名为user1的用户,同时创建宿主目录,用户shell等。
adduser和useradd的区别:
adduser是一个脚本,而useradd是一个二进制应用程序。adduser创建用户时比较麻烦,但是一次设定完所有的信息;而useradd设置时简单,但是需要额外的设置宿主目录,密码那些信息。
10、权限管理
作用:用来管理系统中文件的权限。
chmod (change mode)修改文件权限,比较常用,要记得
chown (change owner,修改属主)
chgrp (change group,修改文件的组)
ls -l 列出的属性
-rwxr-xr-x
一共10个字符,第一个表示文件属性(d表示文件夹,-表示普通文件),剩下的9个分成三组。每组中三个分别表示r可读w可写x可执行。如果是字母表示有这个权限,如果是-表示没这个权限。三组分别表示:第一组表示文件属主的权限,第二组表示属主所在的组用户的权限,第三组表示其他用户的权限。
权限还有另一种表示方法,用数字来表示。
编码规则如下:
r 可读 4
w 可写 2
x 可执行 1
- 无权限 0
有了这个编码规则,则 rwxr-xr-x 编码后为755
第一种修改权限的方法:
要把权限改成 rwxr--r-- 则对应的编码值为744
修改命令为:chmod 744 文件名
第二种修改权限的方法:
在原来的权限基础上进行修改,即增加或减少某权限。
三个组用户的编码依次为: 属主u 属主所在的组g 其他用户o
譬如
要属主增加可执行权限 chmod u+x 文件名
其他用户增加可写权限 chmod o+w 文件名
属主所在组用户去掉可执行权限 chmod g-x 文件名
11、文件打包压缩与解压缩
tar -czvf dir.tar.gz dir/ 将dir目录打包成dir.tar.gz
tar -cjvf dir.tar.bz2 dir/ 将dir目录打包成dir.tar.bz2
tar -zxvf dir.tar.gz 解压缩dir.tar.gz
tar -jxvf dir.tar.bz2 解压缩dir.tar.bz2
12、sed和awk
正则表达式。匹配加替换。
13、格式化文件系统
mkfs /dev/hd1
mkfs -t vfat 32 -F /dev/hd1 创建一个FAT32文件系统
14、网络配置命令
ifconfig eth0 192.168.1.13 设置IP地址
ifconfig eth0 up 启动网卡
ifconfig eth0 down 禁用网卡
ifup eth0 启动网卡
ifdown eth0 禁用网卡
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 同时设置IP和子网掩码