一.Linux简介
1.1 Linux介绍
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX 操作系统,其内核由林纳斯·本纳第克特·
托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、
多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它
支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作
系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat
Enterprise Linux、SUSE、Oracle Linux等。
综上所述:Linux是一款操作系统,免费,开源, 安全,高效,稳定, 处理高并发非常强悍的操作系
统,现在很多的企业级的项目都部署到Linux服务器运行
1.2 Linux的分类
1.2.1根据市场需求分类
根据市场需求Linux大致分为两个版本,一个是主要服务于大众用户的图形化版本:
另一款是面向服务器端的服务器版本:
1.2.2 根据发行版本分类
根据发行版本的分类大致有:ubuntu、redhat、centos、lubuntu、freeBSD、Deepin…
1.2.3 Red hat和Centos
- Red Hat Enterprise Linux:简称Red Hat(红帽)或RHEL,红帽Linux(RHEL)是RedHat专为企业设 计的基于Linux的操作系统。RHEL可以在桌面,服务器,虚拟机管理程序或云中运行。Red Hat是世界上使用最广泛的Linux发行版之一。
RedHat 是用 LINUX 核心构架的一个操作系统。RedHat Linux 是目前世界上使用最多的 Linux 操作系统。
因为它具备最好的图形界面,无论是安装、配置还是使用都十分方便,而且运行稳定,因此不论是新手
还是老玩家都对它有很高的评价。
- CentOS(Community Enterprise Operating System):中文意思是:社区企业操作系统;是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
区别:
- 无偿和有偿的区别:redhat是收费版,centos是免费版;
- redhat一个提供商业的解决方案 ,centos一个不提供。
CentOS是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。它与RedHat使用同样的源代码;它完全就是对Red Hat AS进行改进后发布的!各种操 作、使用和RED HAT没有区别!
1.3 Linux与Window
1.3.1 生态环境
- Window主要面向大众群体,主要以娱乐丶办公等为主要方向;
- Linux系统面向的客户群体是互联网开发者,因此Linux操作系统在对一些专业的服务器进行了相关的优化
1.3.2 性能优化
windows性能提升主要在系统和软件的外观,操作的便捷性,游戏的兼容性丶游戏优化丶设备硬件驱动等领域,对面向互联网开发者的服务器软件没有太大优化
Linux性能提升主要在操作系统内核优化,如IO模型,多用户多进程系统,网络模型等,都做了非常好的优化处理。
1.3.3 安全
Linux部署的都是服务器软件,用于给客户端电脑提供服务,服务器的安全是每个企业都非常看重的问
题,Linux是专门用于部署服务器软件的一款操作系统,自然而然对安全方面非常的看重;如:补丁管
理、防火墙设置、应用进程管理、权限管理等方面Linux都比windows要出色许多;另外由于Linux的开源
特性,一旦发现重大漏洞,整个互联网的开发工程师都可以参与Bug的解决,这比windows或mac这样需
要等待内部工程师的修复要高效的多;
1.3.4 操作便利性
Linux系统中可以更好的将CPU的性能完全的提供给数据计算,不用花费性能在图像渲染上。
二.虚拟机
2.1虚拟机简介
- 虚拟机是一个软件,它可以使你在一台真实的pc机器上同时运行二个或更多的不同的操作系统。它可以模拟一个标准的PC环境,这个环境和真实的计算机一样,都有芯片组丶CPU丶内存丶显卡丶声卡丶网卡丶软驱丶硬盘丶光驱丶串口丶并口丶USB控制器。
简单的来说,虚拟机就是用来模拟一台真实的电脑,我们实际在学习过程中,有的时候需要多态电脑模
拟真实的环境,那么不可能在硬件层面上真正的提供多态电脑,这个时候我们可以使用虚拟机来帮我们
虚拟出一台电脑来;
2.2快照
2.2.1拍摄快照
可以给虚拟机拍摄快照,记录虚拟机这一刻的状态,以后误操作虚拟机后可以通过恢复快照的方式来恢复到以前的状态;
2.2.2 恢复快照
2.3 安装图形化工具
输入命令:
yum groupinstall -y "GNOME Desktop"
安装完成:
安装完成之后输入命令:
startx
启动图形化工具
2.5VM的网络管理
VM中的操作系统是虚拟出来的,里面的具体硬件也是由VM虚拟的,关于硬件的配置如下:
- 关于其他硬件的参数都比较简单,如果想要虚拟机的性能比较好,可以酌情调高(占用的资源也会随之增加),我们本章主要讲的是VM的网络管理,VM安装完毕之后,会有两个网卡,分别是
VMwareNetwork Adapter VMnet1 和 VMware Network Adapter VMnet8
- 在VM中,网络管理主要有三种模式,分别为bridged(桥接模式)丶NAT(网络地址转换模式)丶host-only(仅主机模式)
2.5.1桥接模式
在桥接模式中,虚拟的操作系统就是一台独立于局域网中的一台主机,宿主机就相当于是一台网络交换机,虚拟机连上宿主机后,可以访问局域网内的任意一台机器,但是需要在虚拟机中手动配置IP地址丶子网掩码丶DNS服务器等,而且必须要和宿主机在同一网段;桥接模式一般用于需要在局域网内容真正独立出一台机器的情况;
- 桥接模式中,默认使用的是VMnet0网卡
选择好桥接模式后,重启虚拟机,输入命令:
ip addr #查看虚拟机的ip地址
查看宿主机的IP地址:
ipconfig
发现虚拟机的IP地址与宿主机的在同一个网段,此时虚拟机在局域网中是一个独立的主机;可以使用局域网内的任意一台主机与之通信;
- 也可以查看VM的网络编辑器,点击VM工具栏上的【编辑】>【虚拟网络编辑】
2.5.2 NAT模式
NAT:全称Net Address Transfrom
,网络地址转换,NAT模式是通过宿主机的网络来访问公网,NAT模式下虚拟机中的IP配置信息是由VMnet8虚拟网络的DHCP服务器提供的;由于NAT模式下,虚拟机是借助于宿主机的网络来访问公网的,在局域网内并不是一台独立的主机,因此不能与局域网内其他主机进行通信;NAT的优势在于虚拟机接入互联网简单,不需要进行任何的配置,只要宿主机能够访问互联网即可;
- 在NAT模式中,默认使用的是VMnet8网卡
重启虚拟机:reboot
查看ip:ip addr
打开【虚拟网络编辑器】:
更改完网段要重启 - 需要注意的是,在NAT模式下,即使虚拟机的网段改为了12(和宿主机同一个网段),在12段的其他机器也还是不能与虚拟机进行通信,因为在NAT模式下,虚拟机在局域网并不是一台独立的主机;
2.5.3 仅主机模式
仅主机模式,也称为host-only模式,在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可以采用host-only模式。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
- 在仅主机模式中,默认使用的是VMnet1网卡; 主机和虚拟机是通的,但是虚拟机和主机不是通的。
在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都是由
VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的。 如果你想利用VMWare创建一个与网内其他机
器相隔离的虚拟系统,进行某些特殊的网络调试工作,可以选择host-only模式。
三.客户端工具
在实际开发中,Linux服务器都在其他的地方,我们要通过windows客户端工具远程去连接Linux并操作它;市面上有许多的Linux客户端连接工具,让我们可以更便捷的操作Linux;连接 Linux的windows客户端工具有很多,企业中常用的有Xshell、Putty、secureCRT、SSH Secure等。
3.1 Xshell连接工具
3.2 XFTP文件上传工具
是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS windows用户能安全地UNIX/Linux 和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲地功能特性。
四.Linux的目录结构
我们启动Linux操作系统时,默认所在的目录是root
目录,简称:~
,如图所示
- cd为切换目录
但root目录并不是linux的根目录,Linux的目录结构如下:
系统目录的解释:
- /boot:存放的启动Linux时使用的内核文件,包括连接文件以及镜像文件.
/etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。
/lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中
指令集合:
- /bin:存放着最常用的程序和指令
/sbin:只有系统管理员能使用的程序和指令。
外部文件管理:
- /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。
/media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
/mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
临时文件:
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。
/lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
/tmp:这个目录是用来存放一些临时文件的。
账户:
- /root:系统管理员的用户主目录。
/home:用户的主目录,以用户的账号命名的。
/usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
**/usr/bin:**系统用户使用的应用程序与指令。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
运行过程中用:
- /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
/proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系 统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修 改。
扩展用:
- /opt:默认是空的,我们安装额外软件可以放在这个里面。
/srv:存放服务启动后需要提取的数据(不用服务器就是空)
进入根目录:
/
代表根目录,ll
命令查看当前目录有那些文件
五.Linux基本命令
5.1目录操作
5.1.1创建
语法:
mkdir 目录名
示例:
mkdir aaa # 在当前目录下创建aaa目录
mkdir /bbb # 在当前目录下创建bbb目录
mkdir /ccc # 在根目录下创建ccc目录
mkdir /root/ddd # 在root目录下创建ddd目录
5.1.2 剪切
语法:
mv 原来的目录 新的目录
示例:
mv bbb abc # 将aaa目录移动到当前目录,目录名还是叫abc
5.1.3 修改
在Linux中,没有专门修改文件夹目录的命令,但是我们可以借助mv命令(剪切)来实现
语法:
mv 原来的目录 新的目录
示例:
mv bbb abc # 将aaa目录移动到当前目录,目录名还是叫abc 1
5.1.4 拷贝
语法:
cp [参数] 目录 目录的新位置
参数:-r
:递归拷贝,拷贝目录下的文件及子目录、子目录下的文件、孙目录等…如果拷贝的是文件夹则一定要加 -r
参数。
示例:
cp -r bbb b1
5.1.5 删除
语法:
rm [参数] 目录
参数:
-r
:递归删除,将目录下的所有文件夹及子目录等全部删除(删除文件夹必须加 -r 参数,
即使是空目录)
-f
:强制删除目录,不会进行提示
示例:
rm -r b1
5.1.6 查看
语法:
ls [参数]
参数:
-l
:以详细形式查询当前目录下所有文件和目录,不包括隐藏文件和目录
-a
:以精简形式查询当前目录下所有文件和目录,包括隐藏文件和目录
示例1:
ls # 以精简形式查看当前目录下的文件和目录,不包括隐藏内容
示例2:
ls -l # 以详细形式查询当前目录下所有文件和目录,不包括隐藏文件和目录
示例3:
ls -a # 以精简形式查询当前目录下所有文件和目录,包括隐藏文件和目录
示例4:
ls -a # 以详细形式查询当前目录下所有文件和目录,包括隐藏文件和目录
5.1.7 搜索
语法:
find [目录] -name '条件'
示例:
find /root -name 'a' # 在root目录(包含子目录)下查询目录名为a的目录
find /root -name 'a*' # 在root目录(包含子目录)下查询目录名包含a的目录
如果目录太多,想停止查看可以按住ctr+c
强行终止程序执行
# 从当前目录查询查询目录名包含a的目录或文件
find -name 'a*'
5.2 文件操作
5.2.1 创建
语法:
touch 文件
示例:
touch a.java # 在当前目录创建.java文件
touch /root/b.html # 在/root目录下创建b.html文件
touch /c.xml # 根目录下创建c.xml文件
5.2.2 查看
语法:
cat /more/head/tail 文件名
准备一篇文章:article.txt;使用XFTP工具,上传 article.txt
到linux系统中
cat article.txt # 查询的是最后一页的内容
more article.txt # 从第一页开始查看文件内容,按回车键一行一行的看,按空格健一页一
页的看
head article.txt # 查看文件的前10行内容
tail article.txt # 查看文件的后10行内容
head -n 18 article.txt # 查看文件的前18行内容
head -n 18 article.txt # 查看文件的后18行内容
- 查看文本的过程中,按
q
退出查看
5.2.3 删除
语法:
rm [参数] 文件
参数:
-r
:递归删除,将目录下的所有文件夹及子目录等全部删除(删除文件夹必须加 -r 参数,即使是空目录)
-f
:强制删除目录,不会进行提示
示例:
rm -f a.java # 删除a.java
rm -f a.* # 删除a开头的所有文件
mkdir abc
touch a.java
touch a2.java
touch a3.java
touch abc.java
touch bc.java
rm -f ./* # 删除当前目录下的所有文件
5.2.4 拷贝
语法:
cp 文件名 新文件名
5.2.5 vi编辑器
vi编辑器是linux下的vi 是一种文字编辑器,后来的升级版本是vim。vi分为三种模式:命令模式丶编辑模式丶末行模式。
所有的Linux系统都会内建vi文本编辑器。Vim具有程序编程能力,可以看作是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完丶编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
- 安装vim相关命令:
yum install -y vim*
命令模式:当执行vi/vim指令后,将会进入命令模式:该模式是进入vi编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc即可进入命令模式。在命令模式下,用户可以输入vi命令。用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来介绍。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。
- 命令模式下,所输入的命令并不回显在屏幕上,若输入的字符不是vi的合法命令,vi会响铃报价
编辑模式:在命令模式下输⼊i、a、o、r、s等命令都可以进⼊编辑模式。在该模式下,⽤户输⼊的任何字符都被vi 当做⽂件内容保存起来,并将其显示在屏幕上。在⽂本输⼊过程中,若想回到命令模式下,按下Esc键即可。
末行模式:在编辑模式下,⽤户按下ESC键退出编辑模式(进⼊了命令模式),按:键即可进⼊末⾏模式,此时 vi会在显示窗⼝的最后⼀⾏(通常也是屏幕的最后⼀⾏)显示⼀个:作为末⾏模式的说明符,等待⽤户输⼊命令。多数⽂件管理命令都是在此模式下执⾏的(如把编辑缓冲区的内容写到⽂件中等)。末⾏模式的指令执⾏完后,vi ⾃动回到命令模式。
语法:
vi /vim 文件名
(1)命令模式的指令如下:
i
:插入数据,进行数据的插入a
:数据的追加o
:打开文件,插入空白行s
:删除当前光标指向的数据,功能和i一致r
:替换文件,进行数据的替换
大部分指令和i
功能一致,都是插入,使用i
的使用频率较多。
(2)编辑模式
输入完命令模式的命令后,vi编辑器进入编辑模式
(3)末行模式
在编辑模式下,输入ESC键退出编辑模式(重新回到命令模式),再输入:进入末行模式
末行模式的命令如下:
wq
:保存并且退出
vi将先保存文件,然后退出vi返回到shell命令行q
:代表退出- 如果退出时当前编辑文件尚未保存,则vi并不退出,而是继续等待用户的命令(继续处于命令模式),并且会显示在窗口的最末行说明如下信息:
No write since last change (use! to overrides)
输入回车键,再输入i
,继续编辑
q!
:代表强制退出
该命令不论文件是否改变都会强行退出vi编辑器,刚刚编辑的内容将丢失,文件也不会被保存下来,对于此命令用户应当慎用。
w
:将此文件的内容另存为一份新的内容
:w 新文件名
vi保存当前的编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给当前编辑文件起一个新的文件名。这个功能相当于将该文件另存为一个新的文件。文件保存后,当前界面进入命令模式等待新的命令;
如果新文件名已经存在那么则提示:
w!
:
:w! 新文件名
该命令与:w命令相同,所不同的是,即使指定的新文件存在,vi编辑器也会用当前编辑文件对其进行替换,而不再询问用户,因此,此命令同样要慎用。
5.3 压缩与解压
5.3.1压缩
语法:
tar [参数] 打包压缩后的⽂件名 要打包压缩的⽂件 1
参数:
-c
:创建新的文件(必选项)
-v
:输出文件清单(可选项)
-f
:设置压缩包的文件名(必选项)
5.3.2 解压
语法:
tar [参数] 压缩⽂件
参数:
-x
:取出压缩包中文件中的内容(必选项)
-v
:输出文件清单(可选项)
-f
:设置要操作的文件名(必选项)
-c
:设置解压的路径(可选项),默认解压到压缩包所在的目录
六.用户管理
6.1 用户管理
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
在Linux中,用户是属于某个组的,创建用户首先得让用户属于某个组
6.1.1 关于用户和组的相关命令
- cat / etc /shadow:密码和登录信息(加密的)
- cat / etc /group:查看组信息
解释:
root:x:0:
组名:x:组ID:
cat /etc /passwd:用户账户信息
解释:
root:x:0:0:root:/root:/bin/bash
⽤户名:x:⽤户ID:组ID:该⽤户的组⽬录:命令解释程序
6.1.2 添加用户
语法:
useradd 参数 用户名
参数:
-g
:用户组,指定用户所属的用户组,如省略该参数,则会建立和新用户名同名的组。
示例1:创建zhangsan用户
useradd zhangsan # 创建zhangsan⽤户,默认创建同名组
进入/home目录查看:
示例2:创建lisi用户,属于zhangsan组
useradd lisi -g zhangsan
查看组:
cat /etc/group
查看用户:
cat /etc/passwd
发现和zhangsan用户同属于1000组
6.1.3 分配密码
语法:
passwd 用户名
切换zhangsan用户登录:
logout/exit:退出当前用户
如果使用xshell连接工具参数:
使用whoami可以查看当前登录的用户:
6.1.5 切换登录用户
语法:
su 要切换的用户名
示例:
6.1.4 修改用户
语法:
usermod -l 新登录名 原登录名
修改用户名时,必须当前用户处于退出登录状态,如果正在登录的用户则会出现如下信息:
usermod: user zhangsan is currently used by process 进程号
- 注意:修改了用户名之后,用户所属的组名以及家目录不变
6.1.5 删除用户
语法:
userdel 用户名
默认情况下,删除用户时,用户所在的同名的组也会被删除,但是家目录不会删除;
删除家目录:
rm -rf 用户名
一般判断当前Linux有多少用户是查看home下的家目录,因此一般删除用户时,会顺带删除家目录;
- 删除用户时(不管是否加上
-r
参数),只会删除同名的组,不同名的组不会被删除
6.2 用户组操作
用户组简介:类似于角色,系统可以对有共性的多个用户进行统一的管理;
6.2.1 添加组
语法:
groupadd 组名
查看组信息:
cat /etc/group
6.2.2 修改组
(1)修改组名称
语法:
groupmod -n 新组名 组名
(2)移动用户到新组
useradd 用户名
usermod 用户名 -g 组名
6.2.3 删除组
语法:
groupdel 组名
-删除组的时候必须保证组中没有用户
总结:
- (1)创建用户的时候,如果没有指定该用户所属的组,那么会创建一个同名组
- (2)删除用户的时候,同名组也会被删除(前提是组里没有其他用户),并且删除组的时候要求组中不能有用户存在
- (3)删除用户的时候加-r代表删除家目录(即使家目录和用户名不一样)
6.3 权限管理
6.3.1 权限介绍
Linux中对每个目录和文件都做了规定,只能由满足条件的用户才能操作
查看文件的操作权限:ll
每个文件和文件夹的最前面都有类似于drwxr-xr-x这样的字母,这些字母的含有就代表具体的操作权限
具体含义如下:
r
:只读,权限等级为4w
:只写,权限等级为2x
:只执行,权限等级为1,对于文件夹来说就是是否能进入该文件夹-
:不具备权限
- 主权限(u):当前用户的权限
- 组权限(g):整个组的权限
- 其他权限(o):其他用户的权限(除当前登录用户外)
6.3.2 分配权限
语法:
chmod [权限] [操作] [⽂件/⽬录]
权限:
文字设定法
- u:主权限
- g:组权限
- o:其他用户权限
- a:同时设置u丶g丶o三者的权限
数字设定法
- 1:执行权限(x)
- 2:写权限(w)
- 3:写权限+执行权限(w+x)
- 4:读权限( r)
- 5:读权限+执行权限(r+x)
- 6:读权限+写权限(r+w)
- 7:读权限+写权限+执行权限(r+w+x)
操作
- +:赋予某个权限
- -:剔除某个权限
- =:替换权限
6.3.4 权限优先级
u>g>o