此文章是学习朱老师零基础3天学会linux课程时所做的笔记,文中介绍了linux的基本知识、如何在windows虚拟机装载ubuntu系统、linux常用命令和c语言的编译器等知识。此文章比较适合快速上手linux系统。
当前主流的操作系统:windows、android、iOS、symbian、linux/unix
Windows:傻瓜式、好学习、工资低
Linux: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(all所有)命令(普通显示ls)
什么是路径:路径是用来标识一个文件在操作系统的文件系统中存储位置的。pathname
举例:
D:\winshare\enum.c 全路径 pathname
D:\winshare 路径 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发行版。
ubuntu、redhat就是linux的不同的发行版。
GUI:grahics user interface,图形用户界面。关于人机交互的开发常用
cmdline:command line,命令行。摄像头这些没有交互界面的
人机交互:人和机器(计算机)进行交互,常用的有命令行和GUI。
Windows下既有GUI,又有命令行。linux中也是既有GUI,又有命令行。
但是,在linux中我们常用命令行,在Windows中常用GUI
ls_cd_pwd_mkdir_mv_touch_cp_rm_cat_rmdir_ln_man_apt-get:
作用:使用列表把当前文件夹下所有文件显示出来
ls 显示当前文件夹下的文件列表
ls -a 显示所有文件,包括隐藏文件
ls -l 以详细信息显示
ls -a -l 显示所有文件,并有详细信息
ls -l -a 如上
ls -la 如上
ls -al 四种方式都是可以的
作用:用来切换目录,涉及到相对路径和绝对路径
cd .. ..代表上一层目录
. 代表当前目录(.有个自动生成的路径,隐藏文件)
cd /abc/123/def.txt 进入文件(绝对路径),/ 代表根目录
cd def.txt/ 进入文件(相对路径)
cd ../../../../.././../ 返回到根目录就停了
./a.out 执行该c语言文件
作用:打印出当前的绝对路径
目录很深时,显示当前路径
作用:创建空文件夹
mkdir -p 级联创建文件夹
mkdir abc 创建abc文件夹
mkdir -p abc/def 创建abc,同时在abc里创建def
作用:在目录间移动文件,重命名文件
mv 源文件pathname 目的文件pathname(全路径)
mv def/def.txt ./def.txt (移动def文件下的def.txt到当前目录下)
mv def.txt def/def.txt (移动当前目录的下def.txt到def文件下)
mv def.txt abc.txt (重命名,没改路径改名字了)
作用:创建空文件
touch pathname
touch 1.txt(创建空文件并进入,q键是退出)
vi 1.c (创建空文件并进入,没编辑直接退出后,文件并没有)
vim 1.c (创建空文件并进入,没编辑直接退出后,文件并没有)
作用:复制文件或文件夹
cp 源文件pathname 目标文件pathname
cp -r 用来复制文件夹
cp -f 强制复制
实际操作时,一般都是cp -f复制文件,
cp -rf复制文件夹(如果之前有同名称的,就会覆盖之前的;但不强制就会复制失败而其并不提示)
cp 1.txt a.c (复制1.txt为a.c)
cp 1.txt ../b.c (复制1.txt到上层目录为b.c)
作用:用来删除文件,文件夹
当一个文件正在打开时,也能删除,删的是硬盘那份,而打开的是内存那份,又要保存时,文件又被存到了硬盘。
rm 文件pathname
rm -r 文件夹pathname
rm -rf 文件夹pathname (强制删除文件夹,如果没有该文件,不会提示;但不强制就会提示没有该文件夹)
作用:直接在命令行下显示文件内容,适合短的内容,长的用vi直接打开
也可以用来向文件输入,暂时不管
cat b.c (显示b.c里的内容)
vi b.c (打开b.c)
作用:删除空文件夹
rmdir只能删除空文件夹(非空时有提示,哪怕是里面有多个空文件夹也不行)
rm -r可以删除空文件夹和非空文件夹
windows中快捷方式,实际上快捷方式和它指向的文件是独立的两个文件,两个都占硬盘空间,只不过用户访问快捷方式时,其效果等同于访问指向的文件。
linux中有两种连接文件:
一种叫软连接(符号连接),等同于windows中快捷方式
一种叫硬连接
创建软连接文件: ln -s 源文件名 符号连接文件名
举例:ln -s src.c linker.c (linker.c就是src.c的一个符号连接文件,删除源文件,符号连接文件用不了)
硬连接:ln 源文件名 连接文件名
硬连接实际上和源文件在硬盘中是同一个东西,效果类似于硬盘上的一个文件,在文件系统上,在我们看来有好多个文件一样。每次删除一个文件时,只要他还有其他的硬连接存在,这个文件就不会被真正删除。只有等所有的连接文件都删除掉了,这个文件才会被真正从硬盘上删除。
ln a.c b.c (a.c b.c两个普通文件,剩哪个都能打开)
作用:查询man手册,获得帮助信息
man 1 ls 1表示查询的是linux命令
man 2 xxx 2表示查询的是linux api(API就是操作系统留给应用程序的一个调用接口)
man 3 xxx 3表示查询的是C库函数
注意:在man手册中查询时,退出按Q键(Q就是quit的缩写)
作用:在ubuntu中用来在线安装、卸载软件的程序
apt-get install
apt-get remove
apt-get install vim
su root 进入root模式
su username 退出root模式
注意,安装和卸载都是在线的,也就是说ubuntu必须能上网才能使用apt-get
说明:apt-get 安装软件的原理和必要性。
linux操作系统的发行版,内核版本,定制性,造成了linux中软件的不兼容性。在linux中安装软件是一件困难的事情,装了软件能不能用不一定。ubuntu解决了这个问题,ubuntu就适合某个发行版(ubuntu10.04)的所有软件做了一个列表,然后用户通过apt-get install的方式安装软件,就会实时连接到ubuntu服务器,服务器会根据你的ubuntu版本,给你下载合适的软件来安装。这样确保了软件的兼容性。
ls -l显示的详细信息中:
-rw-r–r–
drwxr-xr-x
一共10个字符,第一个字符表示文件类型,后面9个字符表示文件权限。
文件类型:
表示普通文件。普通文件指文本文件和二进制文件,如a.c 1.txt a.out都是普通文件
d 表示文件夹,d是directory的缩写
l 表示符号连接文件,后面会用->打印出它指向的文件
s 表示socket文件,网络通信相关
p 表示管道文件(pipe),通信
什么是编辑器?编辑器就是一款软件,它的主要作用就是用来编辑。譬如编写文件,编写代码。
Windows中的常用编辑器,如自带的notepad。比较好用的notepad++,UltraEditor,SlickEditor
Linux中常用编辑器,自带的最古老的vi。比较好用的vim,gedit。
注:vi和vim的关系:vim是vi的升级版,推荐使用vim。
我们在后面提到vi时,其实都是指vim。
*使用vi来打开/创建一个文件,vi pathname
*vi的两种模式:
命令模式:当vi打开时默认为命令模式,要转入输入模式,需要按a或者i键。在命令模式下,此时键盘上输入的所有东西都被vi当作命令来对待。
命令模式:最好不要乱输入。此时应该输入相应的命令,来让vi做相应的事。
输入模式:输入模式用来向文件输入内容。可以从命令模式中按a或者i进入输入模式。进入输入模式后,就可以随意按键盘进行输入了。输入完成后如果要保存,要先退回到命令模式(因为保存也是一种命令)。
在输入模式下按ESC键退回到命令模式。
注:注意看屏幕左下角,当命令模式时无提示信息或者提示文件名等信息,等处于输入模式时,提示 – INSERT –
在命令模式下如何保存:
:wq 保存并且退出
:w 只保存不推出
:q 不保存退出 进来看了一下没改退出
:q! 不保存强制退出
:wq! 保存并强制退出
查找
在命令模式下,输入 /xxx,就可以查找到xxx
快速切换行
在命令模式下,输入 :num,就可以快速切换到num行
设置显示行号
在命令模式下,输入 :set nu,就可以显示行号
在命令模式下,输入 :set nonu,不显示行号
设置永久显示行号,需要修改vi的配置文件。打开vi的配置文件~/.vimrc,在其中输入set nu即可。
. 代表当前目录
.. 代表上一层目录,当前目录的父目录
- 代表前一个目录,我刚才从哪个目录cd过来
~ 代表当前用户的宿主目录
/ 代表根目录
$ 普通用户的命令行提示符
# root用户的命令行提示符
* 万能匹配符
宿主目录:所谓宿主目录,就是操作系统为当前用户所设计的用来存放文件、工作的默认目录。如Windows中的“我的文档”目录,就是Windows为我们设计的宿主目录。Linux中每个用户都有自己的宿主目录,这个目录对于普通用户来说,在/home/username/,而对于root用户来说,在/root。
行删除
命令模式下,先将光标移动到要删除的行(或者:行),然后输入dd
如果要删除连续多行,譬如要删除连续的3行光标,该在3行的第一行,使用3dd
行复制粘贴
复制:命令模式下,nyy(3yy)
粘贴:命令模式下,p
细节,复制时要把光标放在多行的第一行,粘贴时实际粘贴到当前光标所在行的下一行。
Windows中有普通用户和特权用户,特权用户是Administrator,普通用户可以有很多个。特权用户是系统的管理员,对系统内所有文件具有操作权限。每个普通用户只能处理自己的文件,不能访问其他用户的文件,更不能随意处理操作系统的文件。
Linux中也有普通用户和特权用户的区别。特权用户就是root用户。普通用户权限受到限制,譬如说普通用户不能cd /root,普通用户不能使用apt-get install 来装软件。
可以使用su 用户名来在不同用户间切换。譬如要从普通
用户切换到root,可以su root,然后输入root的密码即可转入root用户。从root要切换到普通用户gec,则su gec即可。从普通用户gec进入普通用户abc,su abc需要密码。
ls -l显示详细信息:
drwxr-xr-x 10个字符,第一个表示文件类型。剩下的9个分成3组,表示文件权限。
前三个表示此文件的属主对文件的权限
中间三个表示此文件属主所在的组对文件的权限
最后三个表示其他用户对文件的权限
rwx解析:r代表可读,w代表可写,x代表可执行
rwx:可读,可写,可执行
r-x: 可读,不可写,可执行
r--: 可读,不可写,不可执行
- 表示普通文件。普通文件指文本文件和二进制文件,如a.c 1.txt a.out都是普通文件
d 表示文件夹,d是directory的缩写
l 表示符号连接文件,后面会用->打印出它指向的文件
这是ubuntu的一个特点,在ubuntu中可以使用sudo命令让普通用户暂时获取root用户的权限,而不必进行用户切换。
sudo apt-get install vim 要输入密码,执行完后还是普通用户
功能:在linux文件系统中,用来查找一个文件放在哪里了。
举例:find /etc -name “interfaces”
总结:
什么时候用find?
当你知道你要找的文件名,但是你忘记了它被放在哪个目录下,要找到该文件时,用find。
怎么用find?
find 路径 -name “文件名”
find / -name “文件名”
功能:在一个文本文件中,查找某个词。
举例:grep -nr “SUN” * (所有路径)
grep -nr "SUN" 路径
总结:
什么时候用grep?
当你想查找某个符号在哪些地方(有可能是一个文件,也有可能是多个文件组成的文件夹)出现过,就用grep
怎么用?
grep -nr “要查找的符号” 要查找的目录或文件集合
注意:-n表示查找结果中显示行号,-r表示要递归查找(文件夹里面也查)
功能:查找一个应用程序(二进制文件)在哪里
举例:which ls whereis ls
区别:
which只显示二进制文件的路径
whereis显示二进制文件的路径,和其源码或man手册位置
功能:查看系统信息
举例:uname -a
init 0 关机
init 2 重启
shutdown -h now 立即关机
shutdown -r now 立即重启
reboot 重启
功能:显示文件和目录由根目录开始的树形结构
功能:用来挂载磁盘到文件系统中
举例:mount -t nfs -o nolock 192.168.1.141:/root/rootfs /mnt 挂载
umount /mnt 卸载
df -h 显示已挂载的分区列表,大小、容量
du -h 列出文件或文件夹的大小
du -h 文件名,可以列出这个文件有多大,列出方式是以人比较好看懂的方式。不像 ls -l列出的都是以字节为单位。
useradd user1 添加一个名为user1的用户
userdel user1 删除一个名为user1的用户
passwd user1 为名为user的用户设置密码
adduser user1 添加一个名为user1的用户,同时创建宿主目录,用户shell等。
adduser和useradd的区别:
adduser是一个脚本,而useradd是一个二进制应用程序。adduser创建用户时比较麻烦,但是一次设定完所有的信息;而useradd设置时简单,但是需要额外的设置宿主目录,密码那些信息。
作用:用来管理系统中文件的权限。
chmod (change mode,修改文件权限,比较常用,要记得)
chown (change owner,修改属主) chown meng a.c
chgrp (change group,修改文件的组) chgrp meng a.c
ls -l 列出的属性
-rwxr-xr-x
一共10个字符,第一个表示文件属性(d表示文件夹,-表示普通文件),剩下的9个分成三组。每组中三个分别表示r可读w可写x可执行。如果是字母表示有这个权限,如果是-表示没这个权限。三组分别表示:第一组表示文件属主的权限,第二组表示属主所在的组用户的权限,第三组表示其他用户的权限。
权限还有另一种表示方法,用数字来表示。
编码规则如下:
r 可读 4
w 可写 2
- 无权限 0
x 可执行 1
有了这个编码规则,则 rwxr-xr-x 编码后为755
第一种修改权限的方法:
要把权限改成 rwxr–r– 则对应的编码值为744
修改命令为:chmod 744 文件名
第二种修改权限的方法:
在原来的权限基础上进行修改,即增加或减少某权限。
三个组用户的编码依次为: 属主u,属主所在的组g,其他用户o
譬如
要属主增加可执行权限 chmod u+x 文件名
其他用户增加可写权限 chmod o+w 文件名
属主所在组用户去掉可执行权限 chmod g-x 文件名
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
正则表达式。匹配加替换。
mkfs /dev/hd1
mkfs -t vfat 32 -F /dev/hd1 创建一个FAT32文件系统
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和子网掩码
ln –s /mnt/hgfs/windows_share /root/windows_share, 即可在/root下成功创建共享文件夹的符号链接,便于以后实验时与 Windows 下交互
在线安装gcc:sudo apt-get install build-essential
本地安装gcc: 查看1.4.3安装交叉工具链
搭建tftp服务器
搭建nfs服务器
使用技巧:
1>使用shell的Tab键自动补全
Tab在linux命令行输入中可以自动完成。在linux命令行中使用Tab键会极大提高输入效率
2>使用shell的历史记录,上下键
shell会记录用户执行命令的历史记录,而我们一般使用命令都会在短时间内集中反复使用,因此当你需要使用一条刚才还使用过的命令时,不需再次花时间输入,只要按下键盘上下箭头按键,就可实现上下翻页,翻出刚才用过的命令,直接回车执行。就好像电话机的通话记录和快速回拨一样。
VMware中虚拟机网络的三种设置
第一种:桥接(bridged)
第二种:NAT
第三种:Host only 。该模式下仅主机可以上网,虚拟机不能上网。
第一步:在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择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 重启网卡
ping www.baidu.com ctrl+c终止
查看地址 ifconfig
第一步:桥接。在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择桥接模式。
第二步:桥接到可以上网的网卡。在菜单栏 编辑 -> 虚拟网络编辑器,选择桥接到自己Windows中可以上网的网卡上(一般就是Wifi网络或者有线网络)
第三步:设置并重启网卡。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 重启网卡
第一,NAT方式设置上网比较简单,包含在主机里外部感知不到,路由器不能察觉,网段地址都不一样,但是不能用在嵌入式开发中
第二,桥接方式设置上网较繁琐,相当于同一个网络里面两台电脑,网段一样地址不一样,但是在嵌入式开发中比较有用。
转自https://zhuanlan.zhihu.com/p/32916021