想在 mac 上使用 ubuntu 的共享目录,方便对文件和目录的操作,不知道什么原因通过 smb 不能正常访问。

通过搜索,发现 mac 还提供了一个 afp 协议可以用于共享文件夹。

以下操作可以让 Mac 访问 Ubuntu 中的文件,亲测好用。

在Ubuntu上安装 netatalk

sudo apt-get install netatalk

进行 netatalk 的配置

sudo vim /etc/default/netatalk

找到以下配置语句,去除注释。

ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no

配置分享文件夹

sudo vim /etc/netatalk/AppleVolumes.default

~/                            "Home Directory"
/data/                        "data dir for share"

重启nettalk服务

sudo /etc/init.d/netatalk restart

在Mac上进行连接

atp://192.168.yourip

redis 默认安装启动之后,如果查看 redis 日志,经常会报几条警告,这些警告与 linux 操作系统的配置有关系。如果忽略它们,有可能会造成 redis 在运行过程中异常。

具体的报警信息如下:

27967:M 23 Jul 03:48:38.410 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
27967:M 23 Jul 03:48:38.410 # Server started, Redis version 3.0.6
27967:M 23 Jul 03:48:38.410 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
27967:M 23 Jul 03:48:38.410 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

解决办法如下:

一、修改 /etc/sysctl.conf

在配置文件末尾增加如下两行:

net.core.somaxconn=65535
vm.overcommit_memory=1

二、重新载入 sysctl 配置,使配置生效

sysctl --system

三、处理 transparent_hugepage

echo never > /sys/kernel/mm/transparent_hugepage/enabled

四、处理 maximum open files

启动 redis 的时候,还可能遇到这个问题,使用 ulimit -n 明明设置的都是比较大大值,比如 10240,但是似乎 redis 无法识别这个设置,始终会报如下警告:

Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.

此时,你需要修改 /etc/pam.d/ 目录下的 sudo 文件, 添加如下行:

session required pam_limits.so

这将会帮助使得 /etc/security/limits.conf 中的设置生效。

五、vm.overcommit_memory 原理

Redis在启动时可能会出现这样的日志:

# WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the 
command 'sysctl vm.overcommit_memory=1' for this to take effect.

在分析这个问题之前,首先要弄清楚什么是overcommit?Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多的程序。因为申请内存后,并不会马上使用内存,这种技术叫做overcommit。如果Redis在启动时有上面的日志,说明vm.overcommit_memory=0,Redis提示把它设置为1。

vm.overcommit_memory用来设置内存分配策略,它有三个可选值,如下表所示。

vm.overcommit_memory 含义
0 表示内核将检查是否有足够的可用内存。如果有足够的可用内存,内存申请通过,否则内存申请失败,并把错误返回给应用进程
1 表示内核允许超量使用内存直到用完为止
2 表示内核决不过量的(“never overcommit”)使用内存,即系统整个内存地址空间不能超过swap+50%的RAM值,50%是overcommit_ratio默认值,此参数同样支持修改

注意:本文的可用内存代表物理内存与swap之和。
日志中的Background save代表的是bgsave和bgrewriteaof,如果当前可用内存不足,操作系统应该如何处理fork。如果vm.overcommit_memory=0,代表如果没有可用内存,就申请内存失败,对应到Redis就是fork执行失败,在Redis的日志会出现:

Cannot allocate memory

Redis建议把这个值设置为1,是为了让fork能够在低内存下也执行成功。

5.2. 获取和设置

获取:

cat /proc/sys/vm/overcommit_memory

设置:

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

5.3. 最佳实践

Redis设置合理的maxmemory,保证机器有20%~30%的闲置内存。
集中化管理 aof 重写和 rdb 的 bgsave。
设置vm.overcommit_memory=1,防止极端情况下,会造成fork失败。

六. Transparent Huge Pages 原理

Redis在启动时可能会看到如下日志:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

从提示看Redis建议修改Transparent Huge Pages (THP)的相关配置,Linux kernel在2.6.38内核增加了Transparent Huge Pages (THP)特性 ,支持大内存页(2MB)分配,默认开启。当开启时可以降低fork子进程的速度,但fork之后,每个内存页从原来4KB变为2MB,会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询。例如简单的incr命令也会出现在慢查询中。因此Redis日志中建议将此特性进行禁用,禁用方法如下:

echo never >  /sys/kernel/mm/transparent_hugepage/enabled

而且为了使机器重启后THP配置依然生效,可以在/etc/rc.local中追加

echo never > /sys/kernel/mm/transparent_hugepage/enabled。

在设置THP配置时需要注意:有些Linux的发行版本没有将THP放到/sys/kernel/mm/transparent_hugepage/enabled中,例如Red Hat 6以上的THP配置放到/sys/kernel/mm/redhat_transparent_hugepage/enabled中。而Redis源码中检查THP时,把THP位置写死。

FILE *fp = fopen("/sys/kernel/mm/transparent_hugepage/enabled","r");
if (!fp) return 0;

所以在发行版中,虽然没有THP的日志提示,但是依然存在THP所带来的问题。

echo never >  /sys/kernel/mm/redhat_transparent_hugepage/enabled

七、TCP backlog 原理

Redis默认的tcp-backlog为511,可以通过修改配置 tcp-backlog 进行调整,如果 Linux 的 tcp-backlog 小于Redis设置的 tcp-backlog,那么在Redis启动时会看到如下日志:

# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

查看方法:

cat /proc/sys/net/core/somaxconn

修改方法:

echo 511 > /proc/sys/net/core/somaxconn

php 是最好的语言,嗯,确实是,这门语言异常简单,非常适合做 web 开发,也非常适合作为一门入门的语言来学习。

对于一个没有编程经验的人,想要学习 php 这门语言,该如何上手呢?

本文试图整理一个学习纲要,或者说路线。

一、构建 php 开发环境和开发工具

预先成其事,必先利其器,配置一个好的学习开发环境,使用顺手的工具,能够更加高效的进行学习。

环境

  • 推荐使用 ubuntu 操作系统,安装 php7,mysql,redis 这些基础服务,为 php7 配置必要的扩展。

工具

  • 推荐使用 phpstorm 作为 php 的开发工具。
  • 推荐使用 navicat 或者 datagrip 作为数据库管理工具。

二、了解什么是 php 语言及其特点

PHP 是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域。

php 是动态语言,解释性语言,解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。

PHP语言的特性:(摘抄的,了解一下)

1、PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。
2、PHP 支持几乎所有流行的数据库以及操作系统。
3、PHP 可以用C、C++进行程序的扩展!
4、PHP 5 版本之后逐渐规范化,支持面向对象,目前比较完善的支持面向对象。

PHP语言的八大优势:(摘抄的,了解一下)

1、开放源代码,所有的PHP源代码事实上都可以得到。
2、免费性,php和其它技术相比,PHP本身免费且是开源代码。
3、快捷性,程序开发快,运行快,技术本身学习快。嵌入于HTML:因为PHP可以被嵌入于HTML语言,它相对于其他语言。编辑简单,实用性强,更适合初学者。
4、跨平台性强,由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS、Mac OS下。
5、专业专注,PHP 支持脚本语言为主,同为类C语言。
6、效率高, PHP 消耗相当少的系统资源。
7、面向对象,在php4,php5 中,面向对象方面都有了很大的改进,php完全可以用来开发大型商业程序。
8、资料丰富,类库丰富:作为 web 开发, php 依然是主流的语言,开发效率高。

三、了解 php 的基础语法(重点)

参看 《PHP 和 Mysql web 开发中》基础语法相关章节,或者其他的 php 语言基础相关资料。

四、尝试构建一个简单的 php 程序

php 在使用过程中,分为 cgi 应用和 cli 应用,所谓 cgi 应用指的是 web 开发, 而 cli 应用主要指的是 shell 环境下的脚本开发。

  1. 可以尝试写一个脚本:通过 curl 函数,获取天气网站的数据,将数据进行处理之后,保存在一个文件中。脚本每 10 分钟运行一次,将天气的数据按照一定的规范格式存储。
  2. 可以尝试写一个算法题:给定一组数据,将数据从高到低进行排列,并输出。算法题要求,不能使用 php 自带的函数,只能使用基本的数据,字符串操作来编写。
  3. 尝试编写一个 web 页面,该页面接受一个 get 参数,比如参数为城市信息, 页面收到城市信息之后,去抓取天气网的数据,并输出该城市的天气信息,要求该页面输出简洁美观。

五、通过 php 进行文件操作

了解一下即可,后面主要使用框架进行操作,这些扩展下的方法都会被封装到底下。遇到问题的时候可以反过头来再看。

  1. 输出一个目录的文件清单
  2. 递归创建一个目录
  3. 找出一个目录中最大的文件,把它移动到 /tmp 目录下。

六、通过 php 进行数据库操作

了解一下即可,后面主要使用框架进行操作,这些扩展下的方法都会被封装到底下。遇到问题的时候可以反过头来再看。

  1. 连接数据库,输出该数据库中的所有的表。
  2. 向一个数据表中插入一条数据。
  3. 更新一条记录
  4. 删除一条记录
  5. 根据条件查询某表,输出结果,要求把结果展示出来。

七、熟悉 php 的常用函数(重点)

php 在做 web 开发的过程中,常常要处理的是字符串,数组,json,数据,正则表达式这些东西,需要对常用的函数比较熟悉。

这一块可以花一到两天重点学习一下。

八、熟悉 php 面向对象(重点)

php 经过 20 年的发展,从 2000 年之后慢慢的开始从面向过程的函数是风格的语言,逐渐转向面向对象风格为主的语言。面向对象是主流,单纯的函数已经弱化(一些基础的字符串,数组内置函数例外)。

php 有一本面向对象的书籍《深入PHP:面向对象、模式与实践(第三版)》不错,可以翻一翻。

九、学习 modern php 这本书

  1. 了解 php 的新特性:面向对象,trait,命名空间,闭包
  2. 了解 composer,自动加载,组件。
  3. 了解 psr 规范
  4. 了解 php 异常处理
  5. 了解 php 单元测试
  6. 了解 php 最佳实践:查看这篇文章 https://wulijun.github.io/php-the-right-way/

十、了解 php 框架,推荐上手 laravel。

十一、用 laravel 做点什么吧~

  • 到这里,你可以自己做一个简单博客了。

如何使用浏览器预览 Excel、PPT、Word 这些类型的文档呢?

最简单的方式是使用第三方服务, 只需要在你的链接前面拼上

http://view.officeapps.live.com/op/view.aspx?src=your link

即可预览.

比如:

http://view.officeapps.live.com/op/view.aspx?src=http%3a%2f%2fvideo.ch9.ms%2fbuild%2f2011%2fslides%2fTOOL-532T_Sutter.pptx

一、mysql 服务命令

1.1 开启 mysql 服务

service mysql start

1.2 关闭 mysql 服务

service mysql stop

1.3 重启 mysql 服务

service mysql restart

1.4 通过 mysql client 连接 mysql

mysql -h 127.0.0.1 -uusername -ppassword

二、mysql 备份与还原操作

2.1 mysql 数据库备份

mysqldump -h host -uusername -ppassword database > database.sql

2.2 mysql 数据库还原

  1. 首先,需要通过 mysql client 连接到 mysql server

其次连接你需要还原到数据库

use database;

三、mysql 库操作

四、mysql 表操作

五、mysql 查询操作

六、mysql 插入操作

七、mysql 更新操作

八、mysql 删除操作

九、mysql 联表操作

十、mysql 权限操作

1.linux下启动mysql的命令:

  mysqladmin start

  /ect/init.d/mysql start (前面为mysql的安装路径)

  2.linux下重启mysql的命令:

  mysqladmin restart

  /ect/init.d/mysql restart (前面为mysql的安装路径)

  3.linux下关闭mysql的命令:

  mysqladmin -u root -p密码 shutdown

  /ect/init.d/mysql shutdown (前面为mysql的安装路径)

  4.连接本机上的mysql:

  进入目录mysqlbin,再键入命令mysql -uroot -p, 回车后提示输入密码。

  退出mysql命令:exit(回车)

  5.修改mysql密码:

  mysqladmin -u用户名 -p旧密码 password 新密码

  或进入mysql命令行SET PASSWORD FOR '用户名'@'主机' = PASSWORD(‘密码');

  GRANT USAGE ON . TO '用户名'@'主机' IDENTIFIED BY 'biscuit';

  修改自己的密码SET PASSWORD = PASSWORD('biscuit');

  6.增加新用户。(注意:mysql环境中的命令后面都带一个分号作为命令结束符)

  grant all privileges on . to 用户名@'%' identified by '密码' with grant option;

  flush privileges;(刷新权限设置)

  grant select on 数据库.* to 用户名@登录主机 identified by "密码"

  如增加一个用户test密码为123,让他可以在任何主机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

  grant select,insert,update,delete on . to " Identified by "123";

  7.跳过授权访问mysql

  mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

  二、有关mysql数据库方面的操作

  必须首先登录到mysql中,有关操作都是在mysql的提示符下进行,而且每个命令以分号结束

  1、显示数据库列表。

  show databases;

  2、显示库中的数据表:

  use mysql; //打开库

  show tables;

  3、显示数据表的结构:

  describe 表名;

  4、建库:

  create database 库名;

  5、建表:

  use 库名;

  create table 表名(字段设定列表);

  6、删库和删表:

  drop database 库名;

  drop table 表名;

  7、将表中记录清空:

  delete from 表名;

  8、显示表中的记录:

  select * from 表名;

  9、编码的修改

  如果要改变整个mysql的编码格式:

  启动mysql的时候,mysqld_safe命令行加入

  --default-character-set=gbk

  如果要改变某个库的编码格式:在mysql提示符后输入命令

  alter database db_name default character set gbk;

  三、数据的导入导出

  1、文本数据转到数据库中

  文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例:

  1 name duty 2006-11-23

  数据传入命令 load data local infile "文件名" into table 表名;

  2、导出数据库和表

  mysqldump --opt news > news.sql(将数据库news中的所有表备份到news.sql文件,news.sql是一个文本文件,文件名任取。)

  mysqldump --opt news author article >author.article.sql(将数据库news中的author表和article表备份到author.article.sql文件,author.article.sql是一个文本文件,文件名任取。)

  mysqldump --databases db1 db2 > news.sql(将数据库dbl和db2备份到news.sql文件,news.sql是一个文本文件,文件名任取。)

  mysqldump -h host -u user -p pass --databases dbname > file.dump

  就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中

  mysqldump --all-databases > all-databases.sql(将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。)

  3、导入数据

  mysql < all-databases.sql(导入数据库)

  mysql -u root -p fukai –force < dmc010003_db.myisam.sql(强行导入)

  mysql>source news.sql;(在mysql命令下执行,可导入表)

  MySQLimport的常用选项介绍:

  -d or --delete 新数据导入数据表中之前删除数据数据表中的所有信息

  -f or --force 不管是否遇到错误,MySQLimport将强制继续插入数据

  -i or --ignore MySQLimport跳过或者忽略那些有相同唯一关键字的行, 导入文件中的数据将被忽略。

  -l or -lock-tables 数据被插入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。

  -r or -replace 这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。

  --fields-enclosed- by= char 指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。

  --fields-terminated- by=char 指定各个数据的值之间的分隔符,在句号分隔的文件中,分隔符是句号。您可以用此选项指定数据之间的分隔符。

  默认的分隔符是跳格符(Tab)

  --lines-terminated- by=str 此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下MySQLimport以newline为行分隔符。

  您可以选择用一个字符串来替代一个单个的字符:

  一个新行或者一个回车。

  MySQLimport命令常用的选项还有-v 显示版本(version),-p 提示输入密码(password)

  例子:导入一个以逗号为分隔符的文件

  文件中行的记录格式是这样的:

  "1", "ORD89876", "1 Dozen Roses", "19991226"

  我们的任务是要把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用这个命令:

  bin/MySQLimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt

  一、连接MySQL

  格式: mysql -h主机地址 -u用户名 -p用户密码

  1、例1:连接到本机上的MYSQL。

  首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。

  2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

  mysql -h110.110.110.110 -uroot -pabcd123

  (注:u与root可以不用加空格,其它也一样)

  3、退出MYSQL命令: exit (回车)。

  mysql常用维护命令

  1、show global status;列出MySQL服务器运行各种状态值

  2、show variables;查询MySQL服务器配置信息语句

  3、查看慢查询

  show variables like '%slow%';

  show global status like '%slow%';

  4、最大连接数

  show variables like 'max_connections';MySQL服务器最大连接数

  show global status like 'Max_used_connections'; 服务器响应的最大连接数

  5、查看表结构

  desc Tablename;

  describe Tablename;

  show columns from Tablename;

  show create table Tablename;