标签归档:Linux

vi/vim基本用法和部分指令

vi的基本概念

  1. 命令行模式(command mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 插入模式 或 底行模式 。
  2. 插入模式(Insert mode)
    只有在插入模式下,才可以进行文字输入,该模式下按 ESC 键可回到命令行模式。
  3. 底行模式(last line mode)
    将文件 保存 或 退出 ,也可以设置编辑环境,如寻找字符串、列出行号……等。
  1. 进入 vi
    比如我要编辑一个名为 myfile 的文本文件,只要输入 vi myfile 即可进入这个文件的vi编辑界面。刚进入vi是处于命令行模式,这时是不能编辑文本的,需要切换到插入模式才能够输入或删除文字。
  2. 切换至插入模式编辑文件
    在命令行模式下按一下字母 i 就可以进入插入模式,这时你就可以↑↓←→移动光标到对应位置,然后输入或删除文本了。
  3. 退出 vi 和保存文件
    在命令行模式下,输入 : 键进入底行模式,例如:
    :w newname (将文件重命名为 newname 保存)
    :wq (保存并退出 vi,后面加入 ! 如 :wq! 则是强制保存退出)
    :q (不保存退出 vi,后面加入 ! 如 :q! 则是强制不保存退出)

命令行模式功能键

  1. 插入模式
    要进入插入模式有以下三种选择
    按 i 进入:插入模式后,是从光标当前位置开始输入文件
    按 a 进入:插入模式后,是从目前光标所在位置的下一个位置开始输入文字
    按 o 进入:插入模式后,是插入新的一行,从行首开始输入文字。
  2. 从插入模式切换为命令行模式
    按 ESC 键。
  3. 移动光标
    vi 可以直接用键盘上的 ↑↓←→ 来移动光标,但正规用法是使用小写英文字母 h 、 j 、 k 、 l 来控制光标左、下、上、右移一格。
    按 ctrl+b :屏幕往“后”移动一页。
    按 ctrl+f :屏幕往“前”移动一页。
    按 ctrl+u :屏幕往“后”移动半页。
    按 ctrl+d :屏幕往“前”移动半页。
    按数字 0 :移到文章的开头。
    按 G :移动到文章的最后。
    按 $:移动到光标所在行的“行尾”。
    按 ^:移动到光标所在行的“行首”
    按 w:光标跳到下个字的开头
    按 e:光标跳到下个字的字尾
    按 b:光标回到上个字的开头
    按 #l:光标移到该行的第 # 个位置,如:5l,56l。
  4. 删除文字
    x :每按一次,删除光标所在位置的“后面”一个字符。
    #x :例如,「6x」表示删除光标所在位置的“后面”6个字符。
    X :大写的X,每按一次,删除光标所在位置的“前面”一个字符。
    #X :例如,「20X」表示删除光标所在位置的“前面”20个字符。
    dd :删除光标所在行。
    #dd :从光标所在行开始删除#行
  5. 复制
    yw :将光标所在之处到字尾的字符复制到缓冲区中。
    #yw :复制#个字到缓冲区
    yy :复制光标所在行到缓冲区。
    #yy :例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
    p :将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
  6. 替换
    r :替换光标所在处的字符。
    R :替换光标所到之处的字符,直到按下 ESC 键为止。
  7. 返回上一步操作
    u :比如你在插入模式下误删了文本内容,想返回上一步,需先按 ESC 键进入命令行模式,然后按下 u 键,回到上一个操作。按多次 u 可以执行多次恢复。
  8. 恢复撤销操作
    ctrl+r :如果按 u 不小心返回过头了,那么可以按下 ctrl+r 恢复上一步撤销操作,同样可执行多次。
  9. 更改
    cw :更改光标所在处的字到字尾处
    c#w :例如,「c3w」表示更改3个字
  10. 跳至指定的行
    ctrl+g列出光标所在行的行号。
    #G:例如,「15G」,表示移动光标至文章的第15行行首。

底行模式下命令简介

  1. 列出行号
    set nu :在文件中的每一行前面列出行号。
  2. 跳到文件中的某一行
    # :# 号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了
  3. 查找字符
    /关键字 :先按 / 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 n 向后查找。
    ?关键字:先按 ? 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 n 向前查找。
  4. 保存文件
    w :冒号后输入字母 w 就可以将文件保存起来
  5. 退出 vi
    q :退出不保存,如果按 q 无法退出vi,可以在后面加个 ! 强制退出 vi
    wq :保存并退出,记住w在前要先保存才能退出

vi 命令列表

  1. 命令模式下的一些键的功能
    h 左移光标一个字符
    l 右移光标一个字符
    k 光标上移一行
    j 光标下移一行
    ^ 光标移动至行首
    0 数字“0”,光标移至文章的开头
    G 光标移至文章的最后
    $ 光标移动至行尾
    Ctrl+f 向前翻屏
    Ctrl+b 向后翻屏
    Ctrl+d 向前翻半屏
    Ctrl+u 向后翻半屏
    i 在光标位置前插入字符
    a 在光标所在位置的后一个字符开始增加
    o 插入新的一行,从行首开始输入
    ESC 从输入状态退至命令状态
    x 删除光标后面的字符
    #x 删除光标后的#个字符
    X (大写X),删除光标前面的字符
    #X 删除光标前面的#个字符
    dd 删除光标所在的行
    #dd 删除从光标所在行数的#行
    yw 复制光标所在位置的一个字
    #yw 复制光标所在位置的#个字
    yy 复制光标所在位置的一行
    #yy 复制从光标所在行数的#行
    p 粘贴
    u 取消操作
    cw 更改光标所在位置的一个字
    #cw 更改光标所在位置的#个字
  2. 底行模式下的一些指令
    w newname 将正在编辑的文件重命名为 newname 并保存
    wq 保存并退出 vi
    q 放弃所有修改,退出vi
    set nu 显示行号
    / 或 ? 查找,在 / 后输入要查找的内容
    n 与 / 或 ? 一起使用,如果查找的内容不是想要找的关键字,按 n 或向后(与 / 联用)或向前(与 ? 联用)继续查找,直到找到为止。

2016新的一年开启新的架构

© Written by J.Y. WANG

结构工程师搭建网站,写写自己的东西也算是某种舒缓心中憋闷的方式之一。我常碎碎念希望能多了解世界真实的运行规律,哪怕没什么实际的名闻利养。但友人也常玩讽道,站得更高才能看得更真切,不在高位自然无法明白高处的风景。我对此也是无话可说。也许只是同样的风景,起起伏伏后会有不同的体会吧。做自己喜欢的,看看书,充实一下自己,一切都是上天最好的安排。初步打算写两部分内容:一是大道至简系列,关于结构设计的一些基本理念;二是欧洲规范学习系列,关于EUROCODE的应用。既然把计划写在这里了,那么就督促自己坚持把这两个系列完成。

好了言归正传,为了能让自己的那点思想在这个健壮的小站上愉快的流淌,基业长青。新的一年换用大型站点的架构,俗话说做事看世界要有格局,当然我自己的小站也要有格局,就是架构要有优良的鲁棒性,所谓麻雀虽小五脏俱全。

架构的目的:
1、方便系统升级自己折腾,方便备份,安全性高。
2、实现动静分离。
oss_in_website

阿里云的配置如下:
ECS配置
CPU:1核;内存:2 GB;操作系统:CentOS 7.4 64位;带宽:2Mbps;
系统盘 40GB;数据盘 40GB;

RDS配置
CPU:1核;内存:1 GB; 容量:40GB;

使用OSS;使用CDN;

将整个系统至于云盾的保护之下。
使用数据盘单独挂载/var/www目录,将OS系统与网站数据分离。
使用RDS,将数据库从数据盘分离。
使用OSS,将图库和附件库从数据盘分离。
使用CDN,分发加快OSS静态数据加载速度。

经过此番处理后:由于网站数据对应数据盘,升级或变更操作系统将不影响网站数据;将数据库搬至云端RDS后,数据库单独管理,有效防止网站攻击,可时时自动备份,安全可靠;将较大文件如图片、附件等静态文件搬至OSS并实现CDN分发,提高加载速度,实现动静分离。通过以上架构,即使系统盘,数据盘完全擦除也可轻松重新建站,因为数据库和大型文件均搬至云端。并且哪怕是极端情况,磁盘损毁,网站遭到恶意攻击,均可轻松应对。

最后附上一个技术细节,所谓细节据定成败。(以下部分20180101更新)
附录:关于ossfs的使用。另外关于LAMP系统搭建请看阿里云服务器搭建LAMP环境

1、首先用ps aux | grep apache 看下httpd运行于那个用户下,默认是apache用户。
2、然后下载安装对应版本的ossfs最新安装包。

wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32196/cn_zh/1507811577850/ossfs_1.80.3_centos7.0_x86_64.rpm
yum localinstall ossfs_1.80.3_centos7.0_x86_64.rpm

3、写入OSS的AKID与AKS至密码文件,然后修改文件执行权限和用户组。
echo 你的第一个bucket:你的AKID:你的AKS> /etc/passwd-ossfs
echo 你的第二个bucket:你的AKID:你的AKS>> /etc/passwd-ossfs

chmod 640 /etc/passwd-ossfs
chown root:apache /etc/passwd-ossfs

4、然后以apache用户建立目录。

sudo -u apache mkdir /opt/bitnami/wordpress/wp-content/你的图库名
sudo -u apache mkdir /opt/bitnami/wordpress/wp-content/附件库名

5、加载OSS的bucket

ossfs 你的第一个bucket 你的图库路径 -o url=http://oss-cn-qingdao-internal.aliyuncs.com -o uid=用户号,gid=用户组号,umask=007,allow_other
ossfs 你的第二个bucket 附件库路径 -o url=http://oss-cn-qingdao-internal.aliyuncs.com -o uid=用户号,gid=用户组号,umask=007,allow_other

6、需要注意的问题:
– 对应好自己系统的安装包;
– 记得修改密码文件的权限和用户组;
– url填写内网地址,并从oss-cn开始填写;
– 如果使用allow_other,会变成777权限,不安全。如果不使用allow_other,把用户ID改为apacheID,就会变成700权限,就会导致无法访问的问题。解决方法:使用uid,gid,umask参数控制用户和用户组及其权限。
– 设置自动挂载ossfs方法:
在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息,其中同样可以使用uid,gid,umask参数。
建立的ossfs脚本赋予可执行权限 chmod a+x /etc/init.d/ossfs
把ossfs启动脚本作为其他服务,开机自动启动 chkconfig ossfs on

阿里云服务器搭建LAMP环境

© Written by J.Y. WANG

#以下内容20180101进行了更新。

#查看数据盘是否分区格式化

lsblk

#对数据盘分区

fdisk /dev/vdb
n
p
1
wq

#对数据盘格式化

mkfs.ext4 /dev/vdb1

#查看挂载情况

df -ahT

#建立挂载目录

mkdir /var/www

#添加启动挂载

echo '/dev/xvdb1 /var/www ext4 defaults 0 0 /etc/fstab

#挂载分区

mount -a

#更新

yum -y update

#安装LAMP
#(如果使用RDS可以不装mysql mysql-server)

yum install httpd php php-mysql php-gd php-mbstring php-mcrypt mysql mysql-server

# 安装的模块简介
# httpd(提供Apache主程序)
# php(PHP主程序含给Apache使用的模块)
# php-mysql(提供给PHP程序读取MySQL资料库的模块)
# php-gd (php处理图形扩展库)
# php-mbstring(PHP的多字节字符处理模块)
# php-mcrypt(php的加密支持扩展库)
# php-devel (建构PHP扩展所需的文件)
# mysql(MySQL客户端程序,若使用RDS可不装)
# mysql-server(MySQL服务器程序,若使用RDS可不装)

#配置Apache
/etc/httpd/conf/httpd.conf
#配置方法请参见鸟哥的Linux私房菜

#启动服务(适用于Centos 7)

systemctl start httpd.service
systemctl enable httpd.service

#若使用RDS则无需启动和初始化mysql

systemctl start mysqld.service
systemctl enable mysqld.service
#mysql初始化
/usr/bin/mysql_secure_installation

#查看httpd的80端口和mysql的3306端口是否成功启动

netstat -nat

#首先设定网站目录和文件的所有者和所有组。

chown -R root:apache /var/www
cd /var/www

#设置网站目录权限为750,只有root用户对目录拥有读写执行的权限,用户组有读执行权限,其它用户没有任何权限。

find -type d -exec chmod 750 {} \;

#设置网站文件权限为640,只有root用户对网站文件有更改的权限,http服务器只有读取文件的权限,其它用户无任何权限。

find -not -type d -exec chmod 640 {} \;

#针对wordpress目录设置所有者和所有组权限。

chown -R apache:apache /var/www/html