Linux简介
什么是 Linux?
Linux:世界上不仅只有一个 Windows 操作系统,还有 Linux、mac、Unix 等操作系统。桌面操作系统下 Windows 是霸主,而 Linux 的桌面操作系统用的人很少,因为 Windows 有的很多软件在 Linux 下没有或者很弱;服务器操作系统则反之。Linux 有一个强大的服务器软件生态系统:Docker、Redis、MySQL、Nginx、Hadoop 等等。
Linux 和 Windows 有哪些不一样?
- 使用 Windows 倾向于 GUI 操作,Linux 虽然也可以安装图形界面,但是 Linux 倾向于命令行操作。用 Linux 就要用命令提示符操作,命令行操作的优点慢慢就会体会了(可以自动化、可以精确控制、可以组合命令)。
- 底层 api 不一样,因此可执行程序不互通;有一些软件同时在 windows 和 linux 下作了移植;
- windows 下的命令到了 linux 下不一定能用;
- windows 下主要根据文件的扩展名区分文件类型,linux 中可以没有扩展名;
- Linux 不同版本使用方法、配置文件可能变化很大,要自己查、反复试;
- 易错的地方:Linux 中文件名是区分大小写的
Linux 内核和 Linux 发行版
Linux 内核由 Linus 及开源社区维护,内核包含内存管理、存储管理、进程管理、网络通讯等基础模块。很多公司、开源组织基于 Linux 内核打包出了很多“发行版”,不同的发行版的内核版本可能不一致,包含的软件也不一致,界面差别较大,但是命令行操作都是互通的,大部分程序也是互通的。
内核和发行版的关系就像 Android 内核和“小米手机系统、华为手机系统”的关系一样。
常用的发行版有 RedHat、CentOS、Debian、Ubuntu 等等。这里我们用 Ubuntu,因为 Ubuntu 内置的软件最适合程序员,其他发行版要自己装。当然也有一些人钻木取火的人瞧不起用Ubuntu 的人。
虚拟机
什么是虚拟机?
使用 Linux 最好是在计算机上直接安装 Linux 系统,最起码也是双系统启动。不过担心初学者搞砸了自己的电脑,而且 Linux 不太适合日常使用。因此我们使用虚拟机软件在
Windows 上虚拟出一台电脑出来,在这台虚拟的电脑上安装 Linux。
使用虚拟机的好处:不破坏物理电脑是,随便搞。坏处:不真实、操作卡。
Windows 下的虚拟机软件有 VMWare、Virtual Box、HypverV 等。这里我们使用开源免费的 Virtual Box。
电脑如果配置太差跑不起虚拟机,只能升级电脑,加内存就差不多。
Virtual Box 的安装
- 下载地址:https://www.virtualbox.org/
- 一路 Next 就可以。
-
新建一个虚拟机
需要选 64 位 Ubuntu,不要选成 32 位,因为一些软件不支持 32 位系统。 如果不能选择 32 位的版本,那么说明你的电脑主板没有启用虚拟化,需要进入电脑 bios 设置启用虚拟化。不同版本主板的启用虚拟化的方法不一样,具体请根据你主板的型号去网上搜索。有部分老电脑主板不支持虚拟化,这就没办法了
- 虚拟电脑内存至少 2G 才不卡
- 创建虚拟硬盘
- 配置虚拟机,加载 iso 虚拟光盘文件
有的同学运行 VirtualBox 的时候会出现“该内存不能为 writtern”的错误,请看后续的“虚拟机故障排除”这一章。
下载 Ubuntu 的 iso 文件
-
https://www.ubuntu.com/下载 Desktop 版(Desktop 版是内置了图形界面以及常用桌面软件;Server 版默认没有安装图形界面。当然也可以在 Server 版装图形界面。)。
如果在物理机上安装,只要用 UltraISO 等软件把 iso 刻录到光盘上或者制作可启动 U 盘就可以。
-
把 iso 文件加载到光驱中(相当于 Linux 安装光盘插入光驱),然后启动虚拟机
直到运行到 Linux 安装画面
启动虚拟机的时候如何截图?用 windows 的“截图工具”。
安装 Linux
我测试环境密码用的是 123456,一定要把用户名和密码记住!有一些发行版是禁止简单密码的。
记得把光盘从光驱中取出(卸载 iso 文件),防止再次安装系统。
虚拟机故障解决
VirtualBox 的时候会出现“该内存不能为 writtern”的错误
可以依次尝试下面的方法,哪个解决了就不用再试其他的方法了:
方法 1:
- 首先确保虚拟机中的系统处于关机状态,如果没有关机,则在终端中执行“shutdown now” 关机。
-
打开 VirtualBox 主程序,打开虚拟机的【设置】
勾选【系统】→【处理器】中的【启用 PAE】
方法 2:在 VirtualBox 管理器的主菜单【管理】→【全局设定】去掉【热键】中的【自动独占键盘】中的勾去掉。
方法 3:在你的 windows 系统中,以管理员权限运行 cmd,执行 sfc /scannow,执行完成后重启电脑。
配置 Linux
输入安装 Linux 时候设定的密码
图形化的程序尽量不要用。在桌面上点右键→打开终端。在很多生产服务器下,是没有装图形化程序的,就是直接命令行界面操作,根本就进不了图形界面。
尽量不要用图形界面,所有操作都可以在“终端”中完成。因此后续操作都尽量在“终端”中进行。也忘了鼠标,别妄想在终端中用鼠标。不要想“终端中听歌、看电影、上网”,场景不对。
使用习惯
其实是可以“共享文件夹”在虚拟机和宿主机之间共享文件等操作。但是虚拟机使用 linux 的时候,不要想着还有“宿主机(Host)”,不要想着怎么“共享文件夹”,就把当成两台电脑就可以。共享文件的方式就通过经典的 ftp 跨服务器的等方式,就像两台电脑一样。
可以“共享粘贴板”,但是别这么懒,那就是一台单独的电脑,你怎么复制粘贴? 虚拟硬盘、虚拟光盘(iso)、虚拟内存、虚拟 cpu。虚拟出来的电脑和主机(Host)之间没有直接的联系,也不会互相干扰。
备份
VBox 安装完成后可以做一个“备份”(主菜单【控制】→【生成备份】),这样万一把虚机系统搞乱了还可以还原回来,可以创建多个“备份”,相当于“还原点”。
锁屏
为了避免反复锁屏,在设置→亮度和锁屏中关闭“锁屏”;VBox 窗口可以调整大小,虚拟机中的系统会自动调整分辨率,有的电脑不支持。
网卡
虚拟机的网卡有时候会有问题连不上网,这时候就要在虚拟机的设置中先取消网卡再重新选择网卡,相当于插拔网线。
Linux 的基本命令
文件操作
- Windows 是多根的文件系统,物理上是 1 到多块硬盘,逻辑上分为 C、D、E……盘,每个盘都是一棵树。Linux 是单根的文件系统,不分 CDE 盘,多块硬盘/U 盘/光盘也是相当于多个文件夹。不同硬盘/U 盘/光盘对应的文件夹叫做“挂载点”,把外部存储设备放到文件系统树的过程又叫做“挂载(mount)”
- Linux 下无论是文件还是命令都是大小写敏感的。
- 小白说“文件夹”,专业人士说“目录”(Directory)
Linux 常用根目录的作用
- boot 存放用于系统引导时使用的各种文件
- bin 存放二进制可执行文件(ls,cat,mkdir 等)
- sbin 存放二进制可执行文件,只有 root 才能访问
- usr 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
- opt 额外安装的可选应用程序包所放置的位置
- dev 用于存放设备文件
- etc 存放系统配置文件
- home 存放所有用户文件的根目录
- lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
- tmp 用于存放各种临时文件
- var 用于存放运行时需要改变数据的文件
- mnt 安装临时文件系统的安装点
常用文件操作命令
- 工作目录(working directory)就是“当前目录” l 显示当前工作目录 pwd (print work directory)
- 显示当前目录下的文件、目录 ls 或者 dir
- 切换工作目录 cd (Change Directory):cd ./test 切换工作目录到当前目录下的 test 目录(cd 后不要忘了空格);cd .. 到上一级目录;cd /很显然就是返回根目录
- 新建目录 mkdir (Make Directory):mkdir test 有的系统目录下是没有权限创建文件夹的。用户的文件一般放到 home 的自己的用户名下
- 删除目录:rmdir (Remove Directory) 删除空目录;rm(Remove)删除文件;rm -r testA 删除目录及其下所有文件(-r 就是 recursive 的简写。*坑人的指令:rm -rf /)。
- mv 移动文件
- cp 复制文件
- 查看文本文件内容:cat(一下子全显示,适合小文件);more(分页显示,q 退出)
- 查找文件:find -name 'a*' 在当前目录下查找文件名以 a 开始的文件。不要丢了''
其他常用命令
- ps 查看当前用户当前运行的进程;查看所有运行中的进程 ps –ef
- reboot 重启 7、 shutdown now立即关机(备注:课程中写错了,写成了shutdown –now,应该是shutdown now)
- 退出终端:exit
- clear 清理当前显示或者快捷键:ctrl+L
- 上下键可以快速恢复历史命令。可以通过 tab 键完成当前目录下文件或者子目录的自动填充,如果遇到多个前一部分一样的会自动完成一样的前一部分。ctrl+c 取消当前输入的命令重新开始。
- tar 命令,将文件夹打包成一个文件,同时可进行压缩命令格式,打包 tar -c -f 归档文件 需要打包的文件,解开 tar -x -C 解开到指定目录 -f 归档文件
- man 命令,各个命令的手册,比如 man dir;按 q 退出。linux 命令非常多、参数非常多,只要会搜就行,慢慢记住的越来越多。
- Linux 管道命令:一个软件或一个命令 要想完成一件事情,通常都需要输入原始数据 , 处理后 , 再把处理的结果输出到一个地方(保存到文件或者显示在屏幕上),Linux 的管道是这样一个东西,它可以把上一个命令的处理结果作为下一个命令的输入数据,供下一个命令使用。例如:
ps -ef | grep bash
netstat -a | more 3) 因此 cat 1.txt|more 也可以达到 more 1.txt 的效果 sudo:基于安全考虑,一般不建议使用超级用户权限登录 linux;而是平时使用低权限用户访问,需要高权限的操作再用 sudo 后跟着指令。比如在/下无法创建文件夹,但是 sudo mkdir a 就可以,当然需要输入密码。su 就是“super user”的简写,sudo 就是“用超级用户权限执行命令”
VI 编辑器
VI 简介
如果使用 linux 桌面,也有一些图形化文本编辑器(类似于记事本),但 linux 的神级编辑器是 vi,如果连 vi 都不会用就别说会用 linux。
在很多环境下是没有图形界面的,只能用 vi。VI 是全键盘操作,不能用鼠标。当然日常开发还是在图形界面下使用 VS 等开发,使用 vi 一般是进行简单的修改或者配置文件的修改。
vi 刚接触感觉很痛苦,用熟了也挺爽的,vi 命令非常多,初学掌握基本的操作即可。vim 是 vi 的加强版。
vi 的运行模式
命令模式下可以进行行删除等命令的输入(相当于快键键);插入模式下可以进行文本的输入;末行模式下是执行保存、退出等指令用。 易混:插入模式下如果直接输入:就是输入:了,因此要先 esc 退出插入模式
末行模式的指令
- :wq 保存然后退出 w→write,q→quit 如果是“vi 文件名”方式执行的,则直接写入到指定的文件名中,否则要“:wq 文件名”。
- :q! 不保存退出
- :w 保存不退出
- 在末行模式中输入“!shell 指令”可以不离开 vi 执行 shell 指令
命令模式的命令
- 移动输入光标,不能在插入模式下按上下左右键。要 esc 先回到命令模式下;
- shift+^移到行首;shift +$移到行尾。联想一下正则表达式中就好记了;
- ctrl+b:上滚一屏;ctrl+f 下滚一屏; b→backward;f→forward
- dd:删除当前一行;x 删除当前字符
- 撤销:上一次的操作 u;undo 的简写
- o:在当前行下新增一行(因为如果移动到行尾再回车的话还是在最后一个字符前回车)自动进入插入模式。
- i:在当前光标前面插入,a:在当前光标后面插入。a→append(附加)也是自动进入插入模式。
还有一个傻瓜化字符界面编辑器 nano,底下提示信息中^X 的意思就是 ctrl+X。不是每个Linux 上都安装 nano,有时候需要自己装。
软件的安装
linux 下很多软件都是自己下载源代码、自己编译的,有点痛苦。因此很多发行版都有自己的安装包格式。比如 RedHat 使用*.rpm 的文件,Ubuntu 使用*.deb 文件。
自己查找、下载安装还是很麻烦。因此很多发行版中都提供了类似于应用市场、NuGet 的东西。
Ubuntu 推荐使用 apt 进行下载、安装。会从 ubuntu 官网下载(中国区镜像),如果下载速度慢的话,可以设置从其他镜像下载,具体搜索“Ubuntu apt-get 镜像” 执行某些程序的时候,如果程序没安装,还会提示你,比如执行 vim、tree 等。
安装软件需要 sudo 执行。如下:
- 安装 “sudo apt-get install 程序名”,比如“sudo apt-get install vim”
- 卸载“sudo apt-get remove 程序名”
重要配置
网络配置
- 使用 ifconfig 命令查看网络配置信息,查看 ip 地址和网卡物理地址(MAC 地址)
要先执行 sudo apt install net-tools 命令安装 net-tools - 如果出现无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
解决办法:sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock 虚拟机和主机之间组建了一个局域网,虚拟机通过主机上网。虚拟机的设置的“网络”中可以设置不同的连接方式。主机可以通过 ifconfig 看到的 ip 地址连接虚拟机的网络。
虚拟机的网络连接方式有很多种,最主要有三种:HostOnly 、NAT、桥接(Bridge)。HostOnly 配置较麻烦,需要懂很多网络工程的东西;NAT 是虚拟机借助于主机网卡访问网络,藏在主机后面,网络中其他设备不能这个虚拟机,连主机都不能,但是虚拟机能连接主机的网络,能上外网;桥接(Bridge)方式则是把虚拟主机也暴露为网络中的一个设备,主机和虚拟主机在网络内是平等的,可以互相访问,但是要求网络中没有设备访问的限制(比如 Mac 地址绑定或者终端个数限制),如果有限制要改路由器的配置。因为咱们需要主机和虚拟机互相访问,除非网络有限制,否则最好配置为桥接(Bridge),配置桥接(Bridge)要选择通过哪个网卡上外网,不能选错了,否则就无法访问外网了。后面我们都配置为桥接(Bridge)。
虚拟机的 ip 地址可能变化,注意。
SSH 服务
运维人员是怎么远程连接到机房上的服务器,很少使用图形界面(卡,无法自动化)远程登录有专门的通信协议 telnet, telnet 就是通过网络进行命令行操作服务器。只有服务器端开始了远程登录服务,客户端才能通过 telnet 协议控制服务器端。
但 telnet 协议使用明文传输数据,这会造成严重的安全性问题,所以现在几乎不推荐使用, 而替代协议是 SSH。SSH 通讯过程数据是加密的。
Linux 安装使用 OpenSSH
- Ubuntu 默认只安装了客户端 openssh-client
- 安装服务器: sudo apt-get install openssh-server
- 查看服务器是否开启:netstat -tlp
- 启动 sudo /etc/init.d/ssh start
- 重启 sudo /etc/init.d/ssh restart
- ssh 服务默认端口 22,可通过修改配置文件修改端口/etc/ssh/sshd_config
windows 下如何通过 ssh 连接到 linux :下载运行 putty,免安装。
linux下重启网络服务: /etc/init.d/network restart 或者是 /etc/init.d/networking restart
putty登录SSH终端出现的“Access Denied”提示:只要在Putty的configuration里面Connection-》SSH-》Auth【认证】-》GSSAPI的配置中,去掉默认的Attempt GSSAPI authentication(ssh-2 only) 一项前面的对勾
如果显示中文乱码,则在 putty 标题栏点击右键,选【change settings】点【Translation】,选 UTF8 编码
新显示会不乱码,旧显示还会乱码。
后续都通过 ssh 连接操作,这也是平时连接服务器时候的常规操作:windows 下开发,然后部署到 linux 下运行。
使用 mysql
安装 mysql 服务器
- sudo apt-get install mysql-server
- 根据提示设置 root 用户的密码,测试时候设置为 123456(安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码)
- sudo apt-get install mysql-client 安装管理客户端
- mysql -uroot -p123456 通过管理 客户端连接 mysql,如果不报错就 ok。mysql –u 用户名 –p 密码。mysql –uroot –p123456
- mysql 客户端中执行(不要在 shell 中直接执行)show databases;(不要丢了结尾的英文分号)查看有哪些数据库; 执行一下 select now();正确执行。执行“quit;” 退出 mysql 客户端。
- 基于安全考虑,mysql 默认只能本机连接。如果想通过其他电脑连接(比如主机访问虚拟机中的 mysql),就需要配置。最好不要配置成任意电脑都可以连接,因为危险。要配置成只允许某些 ip 访问。
设置Mysql密码
- 进入到etc/mysql 目录下,查看debian.cnf文件 sudo cat /etc/mysql/debian.cnf
- 找到用户名,密码 ,使用此账号登录mysql
用户名:debian-sys-maint
密码:BdA9Uyv0QDfFlzuP
登录:mysql -udebian-sys-maint -pBdA9Uyv0QDfFlzuP
- 修改root用户的的密码
这里是关键点,由于mysql5.7没有password字段,密码存储在authentication_string字段中,password()方法还能用
在mysql中执行下面语句修改密码use mysql;
// 下面这句命令有点长,请注意。
update mysql.user set authentication_string=password('') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit; - 修改完密码,需要重启mysql
/etc/init.d/mysql restart;
//或者
sudo service mysql restart - 再次登录
mysql -u root -p密码; - 卸载:
sudo apt purge mysql-*
sudo rm -rf /etc/mysql/ /var/lib/mysql
sudo apt autoremove - 安装:
# 安装的时候会提示要设置root密码,如果你没有在卸载的时候去清理残留数据是不会提示你去设置root密码的 ,我的就没提示,可以用上面的方法修改密码
sudo apt-get install mysql-client mysql-server #检查mysql是不是在运行
sudo service mysql status #一般安装完成之后都是会自动运行的,如果没有运行可以start
sudo service mysql start
配置 MySQL 远程访问(需要网络配置为桥接网络)
- 编辑 mysql 的配置文件 mysqld.cnf ,由于 mysql 是系统服务,因此需要以 su 运行 vi,才有权限,执行 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 。由于不同 mysql 版本配置文件的位置可能不一样,因此最好的找路径的方式就是 cd、dir 一级级的看看。(linux 下不同版本差异性很大,之前查资料都是改/etc/mysql /conf.d/mysql.cnf,但是使用 status;命令查询 mysql 版本之后搜索“mysql 5.7 远程访问”才找到正确的做法。)
- 把 bind-address = 127.0.0.1 注释掉。
- 执行 sudo /etc/init.d/mysql restart 重启mysql服务
- 在主机上执行 ifconfig (Linux下是ifconfig、Windows下是ipconfig),查看主机的ip 地址是多少(别看错了,也别看成虚拟机的ip),假如是192.168.0.11
- 执行 mysql -uroot -p123456 (-u后面的是用户名、-p后面的是密码,根据你的配置做修改。不要在-u和-p输入空格)进入mysql服务器后
- 执行 grant all privileges on *.* to root@"192.168.0.11" identified by "这里换成密码" with grant option; 注意:不要丢了末尾的分号,不要直接在命令行下输入,要进入mysql再执行。
- 再执行 flush privileges; 注意:不要丢了末尾的分号,不要直接在命令行下输入,要进入mysql再执行。
主机上连接虚拟机内的 mysql 一定要连接虚拟机的 ip,别连错了。
主机的 ip 如果变了就要重新配置。
安装vsftp服务器
安装
什么是 ftp。通过 ftp 进行文件的上传下载
执行 sudo apt-get install vsftpd 命令进行安装
配置
这时候可以用 linux 用户登录,能够访问/home/用户名的文件夹下。但是没有上传权限。需要 sudo vi /etc/vsftpd.conf 将 write_enable=YES 前面的#取消,然后执行 sudo /etc/init.d/vsftpd restart 重启
Windows 下可以使用 FileZilla FTP Client 等 FTP 客户端上传下载
中文会有乱码,不用处理,上传下载比较多的文件都压缩。linux 解压使用 unzip“unzip a.zip”。不要传 rar 等格式。