什么是vim
vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
vim键盘图:
初次见面,看不懂上图没关系,不妨先继续学习vim,大致了解vim后再来细细品味它。
vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下不会输入字符内容,只能执行命令。
常用命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : (英文冒号) 切换到底线命令模式,以在最底一行输入命令。
输入模式:
在命令模式下按下 i 就进入了输入模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合:输入字符(正常的字符输入)
- ENTER:回车键,换行
- BACK SPACE:退格键,删除光标前一个字符
- DEL:删除键,删除光标后一个字符
- 方向键:在文本中移动光标
- HOME/END:移动光标到行首/行尾
- Page Up/Page Down:上/下翻页
- Insert:切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC:退出输入模式,切换到命令模式
底线命令模式:
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有:
- q:退出程序
- w:保存文件
按ESC键可随时退出底线命令模式。
三种模式的关系图
vi/vim使用实例
前文中手误在csc目录的a1.txt文件中手误拼错一个单词,刚好通过该知识点来练手修复这个错误~
1:首先进入csc目录,通过下列命令在vim中打开a1.txt文件。
vim a1.txt
2:按下 i 进入输入模式,通过方向键控制光标对错误单词进行修改。
3:更改完文本后按ESC键退出输入模式,重新进入命令模式。
4:在命令模式中按下 : (冒号)进入底线命令模式,并输入wq保存并退出vim编辑器。
vi/vim使用实例
前文中手误在csc目录的a1.txt文件中手误拼错一个单词,刚好通过该知识点来练手修复这个错误~
1:首先进入csc目录,通过下列命令在vim中打开a1.txt文件。
vim a1.txt
2:按下 i 进入输入模式,通过方向键控制光标对错误单词进行修改。
3:更改完文本后按ESC键退出输入模式,重新进入命令模式。
4:在命令模式中按下 : (冒号)进入底线命令模式,并输入wq保存并退出vim编辑器。
移动光标的方法
基础光标移动:
- h 或 向左箭头键(←):光标向左移动一个字符 (常用)。
- j 或 向下箭头键(↓) :光标向下移动一个字符 (常用)。
- k 或 向上箭头键(↑) :光标向上移动一个字符 (常用)。
- l 或 向右箭头键(→):光标向右移动一个字符 (常用)。
可以通过输入数组后再加上上述命令,实现一次性移动n行的效果。例如“10j”或“10↓”可一次性向下移动10行。
[Ctrl] + [f] :屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)。
[Ctrl] + [b]:屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)。
[Ctrl] + [d]:屏幕『向下』移动半页。
[Ctrl] + [u]:屏幕『向上』移动半页。
+:光标移动到非空格符的下一行。
- :光标移动到非空格符的上一行。
n<space>: n 表示【数字】,例如 20<space> 光标会向后面移动 20 个字符距离。
0 或功能键[Home] :移动到这一行的最前面字符处 (常用)。
$ 或功能键[End] :移动到这一行的最后面字符处 (常用)。
H :光标移动到这个屏幕的最上方那一行的第一个字符。
M:光标移动到这个屏幕的中央那一行的第一个字符。
L :光标移动到这个屏幕的最下方那一行的第一个字符。
G :移动到这个档案的最后一行(常用)。
n<G>:n为数字,移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行。
gg:移动到这个档案的第一行,相当于 1G (常用)。
n<Enter>:n 为数字,光标向下移动 n 行 (常用)。
本小节接下来的内容更倾向实际操作体验,建议打开环境,在真机中同步体验。(可优先尝试常用功能)
当真机体验尝试时,不小心修改到文本内容又不想保存退出的话,可以使用 :q! 强制退出不保存。
删除、复制与粘贴
复制/粘贴,作为一位码农的必备神器!
【删除】
- x与X :x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 退格键) (常用)。
- n<x>:n为数字,表示连续向后删除n个字符。例如10x,则连续向后删除10个字符。
- dd:删除光标所在的那一整行 (常用)。
- ndd:n为数字。删除光标所在的向下n行,例如 20dd,则是删除光标向下 20 行 (常用)。
- d1G:删除光标所在到第一行的所有数据。
- dG:删除光标所在到最后一行的所有数据。
- d$:删除光标所在行的最后一个字符。
- d0:删除光标所在行的第一个字符。
【复制与粘贴】
- yy:复制光标所在的那一行 (常用)。
- nyy:复制光标所在的向下 n 行。例如 20yy,则是复制 20 行 (常用)。
- y1G:复制光标所在行到第一行的所有数据
- yG:复制光标所在行到最后一行的所有数据
- y0:复制光标所在的那个字符到该行行首的所有数据
- y$:复制光标所在的那个字符到该行行尾的所有数据
不难发现该部分快捷键基本与删除类快捷键格式差不多,仅通过x(删除)与y(复制)区分。
p与P:p将已复制的数据在光标下一行粘贴,P 则为贴在光标上一行粘贴 (常用)。
J :将光标所在行与下一行的数据结合成同一行(合并行)。
c :重复删除多个数据。例如向下删除 10 行,[ 10cj ](注意大小写,不要与上面的J混淆)
u:复原前一个动作(撤销操作) (常用)。
[Ctrl]+r:重做上一个动作 (常用)。
.(就是一个点) :重复前一个动作 (常用)。
快捷键需要在命令模式中操作使用
进入输入模式的按钮说明
i,I 进入输入模式:i 从当前光标所在处输入; I 从当前光标所在行的第一个非空格处开始输入。 (常用)
a,A 进入输入模式:a 从当前光标所在的下一个字符处开始输入; A 从光标所在行的最后一个字符处开始输入。(常用)
o,O 进入输入模式:o 从目前光标所在的下一行处插入新的一行并开始输入; O 为在目前光标所在处的上一行插入新的一行。(常用)
r,R 进入取代模式:r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下 ESC 为止。(常用)
使用上述按键时,vim界面左下角会出现[--INSERT--]或[--REPLACE--]的字样,表示进入输入模式。
[Esc]:退出编辑模式,回到一般模式中。 (常用)
指令行的储存、离开等指令
- :w :将编辑的数据写入硬盘档案中。(常用)
- :w!:若文件属性为[只读]时,强制写入该档案。(依然受账号权限限制)
- :q :离开 vi。(常用)
- :q!:强制退出,若曾修改过档案,又不想储存直接退出,可以使用该命令。
- :wq:储存后离开,若为 :wq! 则为强制储存后离开。 (常用)
- ZZ :若档案没有改动,则不储存离开;若档案已经被更动过,则储存后离开。
- :w [filename]:将编辑的数据储存成另一个档案。(类似另存为)
- :r [filename] :在编辑的数据中,读入另一个档案的数据。亦即将 [filename] 这个档案内容追加到光标所在行后面。
! 在vim中常用作强制操作。
行号的显示与关闭
代码编辑常需要使用到对行号的定位。
通过下列按钮可以实现行号的开启与关闭。
- :set nu :显示行号,设定之后,会在每一行的前缀显示该行的行号。
- :set nonu:取消行号显示。
【练手实操】LinuxPHP环境搭建
准备工作-预备安装包
前言:Linux的基础用法已经在前几章节中介绍。接下来将会通过部署LNMP(Linux+Nginx+MySQL+PHP)环境来加以巩固前几章所学的知识,并借以实操。
建议在已部署好的Linux系统中跟随本章节同步进行实操练习。
所需安装包:
- nginx:nginx-1.8.0.tar.gz
- php:php-7.1.1.tar.gz
- mysql:mysql-5.6.21.tar.gz
- libxml2:libxml2-2.9.1.tar.gz
- openssl:openssl-1.0.1e.tar.gz
- zlib:zlib-1.2.3.tar.gz
- pcre:pcre-8.36.tar.gz
安装包下载链接:https://pan.baidu.com/s/1KDwBIikBJtQHTZHqm0AKCA
提取码:cxy5
本章节主要通过PHP环境安装来加深对Linux的基础命令的使用。
课程中仅提供基础环境搭建,如需搭建线上项目运行环境,建议可以在课程学习之余了解更多的相关环境搭建详情及对应的权限部署等知识。
如果对这方面知识尚未较全面掌握,但是又急需搭建线上环境,建议可以下载使用第三方提供的一键安装包。
例如PHP一键环境:
准备工作-连接工具
前面章节中都是通过Putty连接服务器。
接下来我们需要将已下载好的安装包上传到Linux系统中。
我们将会通过rz/sz命令行工具配合Xshell连接工具实现文件上传至Linux系统。
1:在Linux系统中安装rz/sz命令行工具。
安装命令:
yum install lrzsz
2:打开Xshell连接工具,并连接Linux服务器后,执行rz命令。
选择对应文件后即开始上传文件到Linux中。(依此方法将前面提及的预备安装包上传至Linux中)
MySQL的安装包较大,需要较长的上传时间,建议可以晚上电脑挂机上传。(该文件建议单独上传)
不建议一次性上传太多文件,会导致上传失败。如若失败可通过Ctrl+c中断命令。
准备工作-解压安装包
1:首先创建 /www/web 用于存入程序代码; /www/source 环境的安装目录; /www/lnmp 用于存放安装软件。
通过如下命令创建:
mkdir -p /www/{lnmp,source,web}
2:并将之前的安装包移动到/www/lnmp文件夹中。
mv libxml2-2.9.1.tar.gz mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz nginx-1.8.0.tar.gz openssl-1.0.2u.tar.gz pcre-8.36.tar.gz php-7.4.1.tar.gz zlib-1.2.3.tar.gz /www/lnmp
3:进入lnmp文件夹,使用find命令解压文件。
cd /www/lnmp/
find ./*.tar.gz -exec tar zxvf {} \;
解压完后的目录。
准备工作-安装工具
通过yum安装编译过程中需要的编译工具和小程序。如:gcc、gd库、cmake等等。
通过如下命令:
yum install -y gcc gcc-c++ make sudo autoconf libtool-ltdl-devel gd-devel \
freetype-devel libxml2-devel libjpeg-devel libpng-devel \
openssl-devel curl-devel patch libmcrypt-devel \
libmhash-devel ncurses-devel bzip2 \
libcap-devel ntp sysklogd diffutils sendmail iptables unzip cmake
安装过程有些许缓慢,耐心等待。
准备工作-创建用户
接下来我们创建2个用户,分别用来启动MySQL和Nginx。
通过如下命令创建用户,并给予权限。
groupadd mysql
useradd -r mysql -g mysql
groupadd www
useradd -r www -g www
安装Nginx
安装Nginx之前,需要先安装3个依赖包。
- pcre:在使用 nginx 的 rewrite 模块的时候,需要有pcre库的支持。
- openssl:在使用ssl功能时,需要有 openssl库的支持。
- zlib:在使用gzip模块时,需要有zlib库的支持。
1:安装pcre
cd /www/lnmp/pcre-8.36
./configure
make
make install
初次安装切记, ./configure 之后需要按一下“回车”,等待配置,配置后再输入make,然后再次“回车”,等待编译,最后输入make install。
2:安装 openssl
cd /www/lnmp/openssl-1.0.2u
./config
make
make install
3:安装 zlib
cd /www/lnmp/zlib-1.2.3
CFLAGS="-O3 -fPIC" ./configure
make && make install
4:安装 Nginx
Nginx安装过程中参数较多,教程中我们以最简化安装。进入Nginx目录中可以使用 ./configure --help命令查看参数。以下介绍几个常用的命令。
- --prefix=PATH:要安装到的目录
- --sbin-path=PATH:指定Nginx二进制文件的路径,没指定的话这个路径依赖 --prefix 选项
- --conf-path=PATH:如果在命令行未指定配置文件,那么将会通过 --prefix 指定的路径去查找配置文件
- --error-log-path=PATH:错误文件路径,Nginx写入错误日志文件地址
- --pid-path=<path>:Nginx master进程pid写入的文件位置,通常在var/run下
- --user=<user>:worker进程运行的用户
- --group=<group>:worker进程运行的组
- --with-http_ssl_module:开启 ssl 模块
- --with-zlib=DIR:设置 zlib 的源码目录
- --with-openssl=DIR:设置 openssl 的源码目录
- --with-pcre=DIR:设置 pcre 的源码目录
接下来继续Nginx安装步骤。
cd /www/lnmp/nginx-1.8.0
./configure --user=www --group=www --prefix=/www/source/nginx --with-pcre=/www/lnmp/pcre-8.36 --with-zlib=/www/lnmp/zlib-1.2.3 --with-openssl=/www/lnmp/openssl-1.0.2u
make && make install
安装成功后通过ls /www/source 命令查看,发现有nginx,证明安装成功。
安装 MySQL
1:将已上传的安装包复制到/usr/local,并解压后将目录名改为mysql。
cd /www/lnmp
mv mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz /usr/local
cd /usr/local
tar -xzvf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.46-linux-glibc2.12-x86_64 mysql
2:在/usr/local/mysql目录下创建data目录
mkdir /usr/local/mysql/data
3:创建mysql用户组和用户。
cat /etc/group | grep mysql
cat /etc/passwd |grep mysql
groupadd mysql
useradd -r -g mysql mysql
4:设置权限。
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql
5:编译安装并初始化MySQL
此处可以先检查是否有安装链接库文件等小工具。
rpm -qa|grep libaio
如若未安装可通过如下命令安装:
yum install libaio-devel.x86_64
yum -y install numactl
开始初始化。
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
初始化成功。
6:编辑配置文件my.cnf (标注区域,记住将#号去掉,并填入对应参数)
7:启动MySQL服务器
/usr/local/mysql/support-files/mysql.server start
启动成功。
8:添加软连接,重启MySQL服务。
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
service mysql restart
9:登录MySQL,修改密码(默认为空,直接回车)
mysql -u root -p
输入密码:为空回车
set password for root@localhost = password('w3cschool');
本文中的流程在不同环境中可能出现部分步骤不同,或者一些报错,建议遇到的同学可以将错误信息通过百度了解对应的解决方案。
安装PHP
1:安装依赖包libxml2。
cd /www/lnmp/libxml2-2.9.1
./configure --with-python=no
make && make install
先介绍一下PHP常用的编译参数:
- --prefix:安装到的目录
- --enable-fpm:开始 fpm 模式,nginx 下必需开启
- --enable-fpm-user:fpm 的启动账户
- --enable-fpm-group:fpm 的启动账户组
- --with-openssl:开启 openssl
- --with-libxml-dir:开启 libxml
- --with-zlib:开启 zlib
- --enable-mbstring:开启 mbstring
- --with-mysqli=mysqlnd:开启 mysqli
- --with-pdo-mysql:开启 pdo mysql
- --with-gd:开启gd库
- --enable-sockets:开启 sockets
- --with-curl:开启 curl
- --enable-maintainer-zts:开启 maintainer zts,以后安装多线程的话,这个必须开启
2:配置命令:
cd /www/lnmp/php-7.4.1
./configure --prefix=/www/source/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-openssl --with-libxml-dir --with-zlib --enable-mbstring --with-mysqli=mysqlnd --enable-mysqlnd --with-pdo-mysql=/usr/local/mysql/ --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-sockets --with-curl --enable-maintainer-zts
如若遇到下列问题,可根据解决方法处理后再次运行配置步骤。
error: Package requirements (sqlite3 > 3.7.4) were not met
error: Package requirements (sqlite3 > 3.7.4) were not metNo package 'sqlite3' found
解决方案,运行命令:yum install libsqlite3x-devel -y
error: Package requirements (oniguruma) were not met
error: Package requirements (oniguruma) were not metNo package 'oniguruma' found
解决方案,运行命令:yum install oniguruma-devel -y
3:配置无误后即可运行make进行编译。
make
4:运行测试命令。
make test
该步骤会让你输入邮箱。
4:编译通过后,先停止PHP-FPM服务。
systemctl stop php-fpm
5:然后使用make install 进行安装。
make install
环境配置
1:PHP配置
cd /www/source/php/
cp etc/php-fpm.conf.default etc/php-fpm.conf
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
cp /www/lnmp/php-7.1.1/php.ini-production lib/php.ini
2:启动 php-fpm
/www/source/php/sbin/php-fpm
3:Nginx配置
cd /www/source/nginx/conf/
vim nginx.conf
将 nginx.conf 中的 server 保存成如下
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
root /www/web;
index index.html index.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME /www/web$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
4:启动 Nginx
/www/source/nginx/sbin/nginx
测试环境
1:在 /www/web/ 目录下创建一个index.php,并写入如下内容。
cd /www/web/
vim index.php
<?php
phpinfo();
2:修改 index.php 所属组
chown -R www:www /www/web/
3:查看localhost页面
本地搭建的同学可以直接浏览器访问localhost。
服务器搭建的同学可以通过curl localhost访问,不过在命令行中页面会被以文本的形式呈现。
curl localhost
至此,php环境搭建完毕,过程中可能因为环境等因素存在课程中未提及的问题导致安装步骤报错,建议可以尝试将所遇问题到google、百度中查找对应解决方案。