服务器安装Nginx+Apache+PHP

安装Apache

这个最简单:yum install httpd即可

然后就可以直接systemctl enable/start操作服务了

相关配置信息说明:

  • Apache默认将网站的根目录指向/var/www/html
  • 默认的主配置文件/etc/httpd/conf/httpd.conf
  • 配置存储在的/etc/httpd/conf.d/目录

安装PHP

这个也是必须,操作步骤如下:

  1. 先添加两个库:
    • yum install epel-release
    • yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
  2. 安装yum-utils: yum -y install yum-utils
  3. 启用PHP74:yum-config-manager –enable remi-php74
  4. 安装PHP74及各种包:sudo yum install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis
  5. 通过以下两个命令查看PHP安装信息:
    • php -v
    • php -module(s) 测试,加不加s都能成功

Continue Reading

MySQL常用操作

安装

在CentOS7上安装MySQL Community Server 8.0

通过Yum安装的是mariadb,为安装社区标准版,做如下操作:

  1. 官网查找最新的rpm包(repo)的下载地址https://dev.mysql.com/downloads/repo/yum/
  2. 下载rpm包,对CentOS7上的MySQL8来说是这个:https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  3. 安装rpm包到系统:rpm -ivh xxxxx.rpm 其中xxxx.rpm是上面下载的rpm文件
  4. 安装mysql,注意mysql是命令行客户端,需要安装mysql-community-server
  5. 配置my.cnf文件:lower_case_table_names
    • lower_case_table_names=1
    • 此配置一定要在第一次启动MySQL前完成,否则将导致异常冲突;
    • 默认情况下:Linux=0, Windows=1, OSX=2
    • 区别在于:0,保存表名时大小写敏感(与create table语句一致),查找(比较)时亦是;1,保存表名时统一转换为小写,查找时亦统一转换为小写查询;2,保存表名时大小写敏感(与create table语句一致),查询(比较)时统一都转换为小写。
  6. 配置my.cnf文件,其它:
    • sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    • 配置此内容是为应对部分MySQL5.7与8.0的语法不兼容的问题,例如5.7的数据库在升级到8.0时,datetime字段不支持0000-00-00的字符串作为默认值(Wordpress)将提示:Invalid default value for xxxx;
    • MySQL8不支持NO_AUTO_CREATE_USER,删除此项配置即可;
  7. 启动MYSQL,常规的7.0启动服务命令:systemctl start mysqld,注意后面的d;
  8. 首次启动后会在日志中生成默认密码,通过grep ‘temporary password’ /var/log/mysqld.log查看默认密码;
  9. 修改密码ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘root_new_pwd’;
  10. 或通过mysql还是mysqladmin连接一次会自动提示修改密码;
  11. 通过update user set host =’%’ where user=’root’;允许任意IP连接;
  12. 注意上述操作需要执行flush privileges;

其它安装相关技巧

  1. rpm查询相关包:rpm -qa | grep “mysql”
  2. 删除相关rpm包:rpm -e –nodeps mariadb-server,其中mariadb-server是包名;
  3. 删除mysql的相关文件:sudo rm -rf /var/lib/mysql /var/log/mysqld.log
  4. 查看yum中的repo库:yum repolist
  5. 启用或禁用yum中某个安装包:sudo yum-config-manager –disable mysql80-community,其中–disable改为–enable即为启用;可以通过启用或禁用5.7或8.0版本来安装(当然也可直接指定版本安装);
  6. 查看密码策略:SHOW VARIABLES LIKE ‘validate_password%’;
  7. 本机启用防火墙的情况下,添加防火墙规则:firewall-cmd –zone=public –add-port=3306/tcp –permanent,还需要通过firewall-cmd –reload加载一次方能生效。
  8. 可以通过创建root@%的新用户的方式来允许远程IP连接入;需要执行如下指令:
    1. CREATE USER ‘root’@’%’ IDENTIFIED BY ‘root’;
    2. GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ WITH GRANT OPTION;
Continue Reading

Word高级经验

说明

以下描述均在Word(16.45 21011103)for OSX上操作,Windows版可能有更简单的操作方法。

样式基本概念

样式库(Style Gallery)

显示在Home中的样式;这些样式是常用样式,可以移除,也可以添加。点击删除时,右键显示的名称叫:Style gallery,而在添加到此列表时叫Quick Style List。

添加快速样式:打开样式面板,点击样式右侧的向下箭头,点击修改(modify),然后添加到快速样式(Quick Style List )

删除快速样式:在样式库上右键点击,选择Remove from Style Gallery。

样式类型

这里的样式类型主要是指可见性:

  1. ALL STYLES:本文档,包括模板中定义的所有有效样式;
  2. IN CURRENT DOCUMENT:本文档中的样式,这里我还不太能准确的理解。
  3. STYLE IN USE:本文档中已被使用的样式;
  4. RECOMMENDED:推荐样式(这个没什么用)

注意这个类型五样式库没有必然关系,即:在样式库的样式可以不在3和4中,但一定在1和2 中。一般情况下,关注123即可。

当1中样式过多,确定不会使用时,可以删除。

常用样式说明

Heading1~9:标题

TOC1~9:目录(Table of conetnt)标题,注意:这是与Heading1∽9对应目录项的样式。

Toc Title:目录标题

Normal:标准段落,建议所有的样式以此为基础,即:基准样式,主要是字体,间距,对齐,缩进等的定义。我的习惯是这里不定义中文的首行缩进。

IndentFirstLine:首行缩进做段落,在Normal的基础上首行缩进两汉字。

caption:题注(图表等)

高级操作

重新打包

所有的docx文件其本质是zip文件我,解压后大多数文件可直接修改,完成修改后重新打包即可。

注意的是:

  1. 打包成zip
  2. 注意是打包根目录,即包含了:[Content_Types].xml和word/docProps/customXml文件夹的目录,不要再套目录;
  3. 如果在打包的目录加入了一些不相关的文件,无论是放到根目录还是子目录中,打开时将提示文件发现不可达的内容(unreachable content),点击YES(信任)可修复此错误;
  4. 默认的XML文件是紧凑排列(无空格的),可以格式化(增加空格和换行)后保存,不影响打包后打开此文件,并且不会在一般的保存操作时重新格式化为紧凑(即:先解压,打开xxx.xml,重新格式化增加换行和缩进,再打包为zip,改名为docx打开,修改文件再保存,再将此文件修改为zip 后再解压并查看xxx.xml文件,此文件仍为之前已经格式化过的状态,而不是紧凑状态)。
  5. 在styles.xml中删除样式
    1. 只删除样式定义部分的内容<w:style w:type=”paragraph” w:styleId=”Heading6″>此操作将导致样式丢失,文档打开时重建此“名称”的样式,格式为默认;如果样式此前显示在Style Gallery中仍将显示重建后的样式;
    2. 删除样式定义部分的同时,删除前部的引用如:<w:lsdException w:name=”heading 6″ w:uiPriority=”9″ w:qFormat=”1″ />,此时样式从StyleGallery中消失。

样式库排序

有时会出现样式合并后顺序错乱,此时在Windows平台上可以通过窗口方便的调整顺序,但在OSX上无此功能。

解决的方案是,将docx重命名为zip后解压,然后修改/word/styles.xml文件。

关于样式的定义大体如下:

<w:style w:type="paragraph" w:default="1" w:styleId="Normal">
        <w:name w:val="Normal" />
        <w:uiPriority w:val="95" />

        <w:qFormat />
</w:style>

可以通过搜索styleId="Normal"的方式来查找相应的片段,添加其中<w:uiPriority w:val="95" />这一行或修改后面的数字即可修改排序。

修改完成重新压缩为zip文件即可。

Continue Reading

Linux配置虚拟内存

  1. 用root用户登录系统
  2. 创建/usr/swap目录
  3. 执行dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096
  4. 其中的4096可修改为2048或其它大小,为虚拟内存大小;
  5. mkswap /usr/swap/swapfile
  6. swapon /usr/swap/swapfile
  7. 修改/etc/fstab,在第一行后(视情况)增加一行/usr/swap/swapfile swap swap defaults 0 0
  8. 重启:)通过free -m检查
Continue Reading

Linux命令经验——mount相关

之前用过很多次mount相关的功能,包括加载远程NFS等,最近因为配置vsftpd又用到,所以记录一下。

绑定A与B目录

这一操作感觉上类似于ln -s或者ln(实际上)。区别在于ln根本不能实现(硬链接不支持目录),而ln -s实际上是创建了一个文件指向了目标。

需求来自于一个ftp的配置。多个帐户要求共享若干个目录,每个帐户又有各自独立的目录,并且这些目录需要隐藏而不仅仅是禁止访问。

解决的方案是:

mount -bound /source/dir /target/dir

在fstab中启动时加载

这也是经常需要的功能,毕竟一次性加载的时候不多。

方法是编辑/etc/fstab文件,此文件的各个字段的标准解释参考这里

简单点说包括:fs_spec(加载系统) fs_file(挂载点<目录>) fs_type(文件系统类型) fs_options(参数) fs_dump(转储频率) fs_pass(启动时加载顺序)

翻译得通俗一点就是;

/source/dirOrDevice    /target/dir     file_system_type option1,option2 #1 #2

其中#1,#2一般为0,0。

对于上面提到的A目录挂载B目录时,对应的写法是:

/ftp/public     /ftp/users/ftp/public       none defaults,bind 0 0

字段之间可以使用“任意数量”的“空字符”分隔,至少包括:空格和制表符,且允许多个。

选项(option)之间使用逗号分隔。常用的除了上面的defaults,bind之外,还有ro(只读),rw(读写)等。

在另一个项目中,我试过用如下的方式加载远程的目录,通过NFS方式共享文件,实现上传文件的统一管理。

172.17.16.24:/nfs/upload    /nfs/upload    nfs    defaults 0 0

172.17.16.24:/nfs/archive    /nfs/archive    nfs    defaults 0 0

172.17.16.24:/nfs/share    /nfs/share    nfs    defaults 0 0

与之对应的的NFS配置虽然与mount无关,这里也列一下以便对照。

/nfs/share 172.17.16.25/32(rw,sync,no_root_squash,no_all_squash)
/nfs/share 172.17.16.30/32(rw,sync,no_root_squash,no_all_squash)
/nfs/share 172.17.16.45/32(rw,sync,no_root_squash,no_all_squash)
/nfs/archive 172.17.16.25/32(ro,sync)
/nfs/archive 172.17.16.30/32(ro,sync)
/nfs/archive 172.17.16.45/32(ro,sync)
/nfs/upload 172.17.16.25/32(rw,sync,no_root_squash,no_all_squash)
/nfs/upload 172.17.16.30/32(rw,sync,no_root_squash,no_all_squash)

fstab校验

之前遇到过一次修改了fstab把主机搞挂了的情况,所以一直对修改这个文件有点发怵,今天上网发现了一个命令,应该是非常实用的:

mount -a

该命令尝试加载fstab文件,可以不重启验证fstab文件是否有异常。

解除挂载

其实这个命令很简单,就是umount 挂载点路径

唯一需要说明的就是不是unmount,而是umount,一开始打错了。

Continue Reading

Mikrotik(ROS)知识整理

家里的RouterOS功能很强大,但太复杂有时有些东西记不住了,整理一下备用。

  1. ARP白名单
    1. 要求①为所有设备增加相应的静态ARP记录;
    2. 要求②将相应设备的接口(interface)的ARP设置改为reply-only;
    3. 由于大部分是WIFI设备而不是有线,所以实际是将bridge接口设置为reply-only;
    4. 取消白名单的设置是将ARP设置为enabled!
    5. 注意一定不是设置为disabled,在设置为disabled之后路由器将不应答任何ARP请求(包括正常的),导致MAC层通信完全瘫痪(MAC地址和IP地址无法映射和转换)。
  2. 先记到这……
Continue Reading

清除QQ同步助手的拼音排序

习惯用QQ同步助手做额外的备份,其中有一个功能叫:联系人排序,通过给联系人增加Phonetic First/Middle/Last Name字段,并为其中添加相应字段的“拼音”实现排序。

本来说这个功能只用于排序,但实测发现这个字段会用于siri的语音识别和朗读,结果就是你用拼音的方法读名字时它认不出来,而siri读通讯录名字会感觉很奇怪。

重新安装了QQ同步助手,发现只有排序功能而没有清除,于是想到了Apple Script,经过一翻搜索和实验,脚本如下:

  1. 打开Script editor,新建一个文件;
  2. 输入如下脚本:
tell application "Contacts"
	activate
	set the_people to every person
	repeat with tp in the_people
		try -- lazy way of skipping companies
			log tp
			set pfn to phonetic first name of tp
			set pln to phonetic last name of tp
			
			if pfn is not missing value then
				set phonetic first name of tp to missing value
			end if
			
			if pln is not missing value then
				set phonetic last name of tp to missing value
			end if
		end try
	end repeat
	
	save
end tell

执行即可:)

Continue Reading