Linux学习,lnmp安装,MongoDB学习

                                              Linux操作简介

http://www.runoob.com/mongodb/mongodb-php.html:mongod

1、cd命令

cd /root/Docements # 切换到目录/root/Docements

cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录

cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录

2、ls命令

-l :列出长数据串,包含文件的属性与权限数据等

-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)

-d :仅列出目录本身,而不是列出目录的文件数据

-h :将文件容量以较易读的方式(GB,kB等)列出来

-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来

3、find命令

find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:

find [PATH] [option] [action]

# 与时间有关的参数:

-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;

-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;

-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;

-newer file : 列出比file还要新的文件名

# 例如:

find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件

# 与用户或用户组名有关的参数:

-user name : 列出文件所有者为name的文件

-group name : 列出文件所属用户组为name的文件

-uid n : 列出文件所有者为用户ID为n的文件

-gid n : 列出文件所属用户组为用户组ID为n的文件

# 例如:

find /home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出所有者为ljianhui的文件

# 与文件权限及名称有关的参数:

-name filename :找出文件名为filename的文件

-size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件

-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、

目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);

-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;

-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示

-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

# 例如:

find / -name passwd # 查找文件名为passwd的文件

find . -perm 0755 # 查找当前目录中文件权限的0755的文件

find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte

4、cp命令

该命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:

-a :将文件的特性一起复制

-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份

-i :若目标文件已经存在时,在覆盖时会先询问操作的进行

-r :递归持续复制,用于目录的复制行为

-u :目标文件与源文件有差异时才会复制

例如 :

cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2

cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中

5、mv命令

该命令用于移动文件、目录或更名,move之意,它的常用参数如下:

-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖

-i :若目标文件已经存在,就会询问是否覆盖

-u :若目标文件已经存在,且比目标文件新,才会更新

注:该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。

例如:

mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中

mv file1 file2 # 把文件file1重命名为file2

6、rm命令

该命令用于删除文件或目录,remove之间,它的常用参数如下:

-f :就是force的意思,忽略不存在的文件,不会出现警告消息

-i :互动模式,在删除前会询问用户是否操作

-r :递归删除,最常用于目录删除,它是一个非常危险的参数

例如:

rm -i file # 删除文件file,在删除之前会询问是否进行该操作

rm -fr dir # 强制删除目录dir中的所有文件

7、ps命令

该命令用于将某个时间点的进程运行情况选取下来并输出,process之意,它的常用参数如下:

-A :所有的进程均显示出来

-a :不与terminal有关的所有进程

-u :有效用户的相关进程

-x :一般与a参数一起使用,可列出较完整的信息

-l :较长,较详细地将PID的信息列出

其实我们只要记住ps一般使用的命令参数搭配即可,它们并不多,如下:

ps aux # 查看系统所有的进程数据

ps ax # 查看不与terminal(终端)有关的所有进程

ps -lA # 查看系统所有的进程数据

ps axjf # 查看连同一部分进程树状态

状态详解:

user 用户名

uid 用户号

pid 进程号

ppid 父进程号

size 内存大小, Kbytes字节.

vsize 总虚拟内存大小, bytes字节(包含code+data+stack)

share 总共享页数

nice 进程优先级(缺省为0, 最大为-20)

priority(pri) 内核调度优先级

pmem 进程分享的物理内存数的百分比

trs 程序执行代码驻留大小

rss 进程使用的总物理内存数, Kbytes字节

time 进程执行起到现在总的CPU暂用时间

stat 进程状态:D 不可中断 uninterruptible sleep (usually IO),R 运行 runnable (on run queue),S 中断 sleeping,T 停止 traced or stopped,Z 僵死 a defunct (”zombie”) process

cmd(args) 执行命令的简单格式

8、kill命令

该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用,它的基本语法如下:

kill -signal PID

signal的常用参数如下:

注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号。

1:SIGHUP,启动被终止的进程

2:SIGINT,相当于输入ctrl+c,中断一个程序的进行

9:SIGKILL,强制中断一个进程的进行

15:SIGTERM,以正常的结束进程方式来终止进程

17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行

例如:

# 以正常的结束进程方式来终于第一个后台工作,可用jobs命令查看后台中的第一个工作进程

kill -SIGTERM %1

# 重新改动进程ID为PID的进程,PID可用ps命令通过管道命令加上grep命令进行筛选获得

kill -SIGHUP PID

9、killall命令

该命令用于向一个命令启动的进程发送一个信号,它的一般语法如下:

killall [-iIe] [command name]

它的参数如下:

-i :交互式的意思,若需要删除时,会询问用户

-e :表示后面接的command name要一致,但command name不能超过15个字符

-I :命令名称忽略大小写

# 例如:

killall -SIGHUP syslogd # 重新启动syslogd

10、压缩和解压缩

tar命令

解包:tar zxvf FileName.tar

打包:tar czvf FileName.tar DirName

gz命令

解压1:gunzip FileName.gz

解压2:gzip -d FileName.gz

压缩:gzip FileName

.tar.gz 和 .tgz

解压:tar zxvf FileName.tar.gz

压缩:tar zcvf FileName.tar.gz DirName

压缩多个文件:tar zcvf FileName.tar.gz DirName1 DirName2 DirName3 ...

bz2命令

解压1:bzip2 -d FileName.bz2

解压2:bunzip2 FileName.bz2

压缩: bzip2 -z FileName

.tar.bz2

解压:tar jxvf FileName.tar.bz2

压缩:tar jcvf FileName.tar.bz2 DirName

bz命令

解压1:bzip2 -d FileName.bz

解压2:bunzip2 FileName.bz

压缩:未知

.tar.bz

解压:tar jxvf FileName.tar.bz

Z命令

解压:uncompress FileName.Z

压缩:compress FileName

.tar.Z

解压:tar Zxvf FileName.tar.Z

压缩:tar Zcvf FileName.tar.Z DirName

zip命令

解压:unzip FileName.zip

压缩:zip FileName.zip DirName

11、chmod命令

该命令用于改变文件的权限,一般的用法如下:

chmod [-R] xyz 文件或目录

-R:进行递归的持续更改,即连同子目录下的所有文件都会更改

同时,chmod还可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟rwx搭配来对文件的权限进行更改。

12、Vim命令

dd    删除光标所在行

dw     删除一个字(word)

x     删除当前字符

X     删除前一个字符

D     删除到行末

yy     复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行

yw     复制一个字

y$     复制到行末

p     粘贴粘贴板的内容到当前行的下面

P     粘贴粘贴板的内容到当前行的上面

gg    跳至文件的第一行

gd     跳至当前光标所在的变量的声明处

13 、目录结构

/bin

系统有很多放置执行档的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot

主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。

/dev

在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等

/etc

系统主要的设定档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop

/etc/xinetd.d/ :这就是所谓的super daemon管理的各项服务的设定档目录。

/etc/X11/ :与X Window有关的各种设定档都在这里,尤其是xorg.conf或XF86Config这两个X Server的设定档。

/home

这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:

~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。

/lib

系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?妳可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动程式)。

/media

media是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。

/mnt

如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。

/opt

这个是给第三方协力软体放置的目录 。 什么是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果妳想要自行安装额外的软体(非原本的distribution提供的),那么也能够将你的软体安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。

/root

系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。

/sbin

Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。

/srv

srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。

/tmp

这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。

事实上FHS针对根目录所定义的标准就仅限于上表,不过仍旧有些目录也需要我们了解一下,具体如下:


/lost+found

这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时,将一些遗失的片段放置到这个目录下。 这个目录通常会在分割槽的最顶层存在,例如你加装一个硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录/disk/lost+found

/proc

这个目录本身是一个虚拟文件系统(virtual filesystem)喔。 他放置的资料都是在内存当中,例如系统核心、行程资讯(process)(是进程吗?)、周边装置的状态及网络状态等等。因为这个目录下的资料都是在记忆体(内存)当中,所以本身不占任何硬盘空间。比较重要的档案(目录)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虚拟内存吗[guest]?

/sys

这个目录其实跟/proc非常类似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯。 包括目前已载入的核心模组与核心侦测到的硬体装置资讯等等。 这个目录同样不占硬盘容量。

除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分区则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分区去。

那哪些目录不可与根目录分开呢?有底下这些:

/etc:配置文件

/bin:重要执行档

/dev:所需要的装置文件

/lib:执行档所需的函式库与核心所需的模块

/sbin:重要的系统执行文件


                                                   关于LNMP安装

关于lnmp的一键安装

下载LNMP一件安装包

wget   http://lnmporg.duapp.com/lnmp/lnmp1.4-full.tar.gz

下载好以后,就进行解压

tar -zxvf lnmp1.4-full.tar.gz

解压完以后,就进入解压后的目录

接着进行一键安装,

./install.sh

选择想要的版本。接着就等待自动安装完成。


安装完全了以后,就输入一下IP,查看一下是否安装成功。


如果是该界面,就是安装完成了。接着就是查看和检查一下。

ps -A 查看一下进程。也可以做一下测试,看看是否正常,

重启nginx : nginx -s reload

关闭php-fpm 进程,然后启用php-fpm

连接一下数据库,mysql -uroot -p

如果都成功,那说明安装成功了,接下来就是开启数据库外部访问权限

mysql>use mysql;

mysql>update user set host ="%" where user = "root";

mysql>select host, user from user;

mysql>FLUSH PRIVILEGES;

这是最简单的外部访问权限开启,


如果设置成功了,可是连接的时候,依旧连接不上,可能存在的问题就是端口没有开启,接着就要去查看一下端口3306有没有开启。

iptables -L -n


可以先将防火墙备份下来

iptables-save > /root/iptables


可以看到,3306端口没有打开。

接着打开备份,vim iptables 


可以看到,3306端口没有开启,接着修改备份,讲3306打开。


保存好以后,将备份restore到防火墙

iptables-restore< /root/iptables

接着在查看一下端口号,3306已经开启,接着在连接一下数据。数据库连接成功。

数据库也连接成功了,接着就是虚拟机配置

虚拟机的配置在nginx.conf中,也可以在vhost文件夹中创建文件自己配置,其地址是 /usr/local/nginx/conf/nginx.conf


其中红色箭头标注的地方就是可以拓展的虚拟机的位置,


该地方就是虚拟机的配置,其中

{

listen 80 default_server;  //默认监听的端口号80端口

#listen [::]:80 default_server ipv6only=on;

server_name _;  //填写备案的域名

index index.html index.htm index.php; //读取的入口文件

root  /home/wwwroot/default; //读取项目的路径

#error_page  404  /404.html;

# Deny access to PHP files in specific directory

#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all;

 }

                                                MongoDB学习

1、A (Atomicity) 原子性

原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性

一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

3、I (Isolation) 独立性

所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

4、D (Durability) 持久性

持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

分布式系统

分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。

分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。

分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。

分布式计算的优点

可靠性(容错) :

分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。

可扩展性:

在分布式计算系统可以根据需要增加更多的机器。

资源共享:

共享数据是必不可少的应用,如银行,预订系统。

灵活性:

由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。

更快的速度:

分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。

开放系统:

由于它是开放的系统,本地或者远程都可以访问到该服务。

更高的性能:

相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。

分布式计算的缺点

故障排除:

故障排除和诊断问题。

软件:

更少的软件支持是分布式计算系统的主要缺点。

网络:

网络基础设施的问题,包括:传输问题,高负载,信息丢失等。

安全性:

开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。

mongodb在linux中的安装

curl-O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz    # 下载

tar-zxvf mongodb-linux-x86_64-3.0.6.tgz# 解压

mv  mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb# 将解压包拷贝到指定目录

进入到mingodb目录中:cd /usr/local/mongodb

创建数据库目录 :mkdir -p data/db

接着启动mongodb

./mongod  --dbpath=/usr/local/mongodb/data

./mongo

mongodb的安装和简单的启动已经完成。

也可以做一个简单的配置用来启用,

进入 bin 目录中:

cd bin/

创建配置文件 mongodb.conf:

vim  mongodb.conf

在 mongodb.conf 写入如下内容:

# 设置数据文件的存放目录

dbpath = /usr/local/mongodb/bin/data/db

# 设置日志文件的存放目录及其日志文件名

logpath = /usr/local/mongodbdata/log/mongodb.log

# 设置端口号(默认的端口号是 27017)

port = 27017

# 设置为以守护进程的方式运行,即在后台运行

fork = true

# nohttpinterface = true

nohttpinterface = true

接着wq 保存

然后就是启动:./mongod --config mongodb.conf  这一句等价于:./mongod  --dbpath=/usr/local/bin/data/db --logpath=/usr/local/mongodb/bin/data/log/mongodb.log --fork,若以前有过配置,或者在使用的时候,出错了,可以到db里面将mongodb.lock给删了在重新启动一下试试。

接着可以查看一下mongodb的进程是否在后台运行 :ps aux |grep mongodb

查看 mongodb 服务的运行日志:tail -200f /usr/local/mongodb/data/log/mongodb.log

检查端口是否已被启动:netstat -lanp | grep 27017 //该端口号是你在配置中设置的端口号,默认是27017

                                                   mongodb的实例

以下实例我们创建了数据库 young:

>use young

switched to db young>db

young>

如果你想查看所有数据库,可以使用show dbs命令:

>show dbs

>db.runoob.insert({"name":"young"})

WriteResult({"nInserted":1})

>show dbs

local  0.078GB

young  0.078GB

 test    0.078GB>


删除数据库

db.dropDatabase()


插入数据:>db.young.insert()


更新数据:>db.young.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})


删除数据:db.young.remove({'title':'MongoDB 教程'})


查询所有数据:db.young.find()

查询格式化:db.young.find().pretty()

条件语句查询:

and语句查询规则:

or语句查询规则:

用type类型查询:

limit的使用:

MongoDB Skip() 方法

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。


MongoDB sort()方法

在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

mongodb 索引

ensureIndex() 方法

MongoDB使用 ensureIndex() 方法来创建索引。

语法

ensureIndex()方法基本语法格式如下所示:

>db.COLLECTION_NAME.ensureIndex({KEY:1})

例子:


(唯一索引)


复核索引的创建:


查看所创建的索引:


删除索引:

使用explain()对查询数据进行分析:


                                                PHP的mongodb 拓展安装

wget http://pecl.php.net/get/mongo-1.4.0.tgz

tar -zxvf mongo-1.4.0.tgzcd mongo-1.4.03)

进入文件夹后,首先运行phpize来编译扩展的环境

[root@localhost mongo-1.4.0]# /usr/local/php/bin/phpize

运行后,我们运行./configure脚本来进行配置

./configure--with-php-config=/usr/local/php/bin/php-config

–with-php-config 这个参数是告诉配置脚本 php-config 这个程序的路径

 make

make install

安装完成后:在php.ini文件增加一行

extension=mongo.so


接着重启nginx和php-fpm ,然后在index.php中输出phpinfo();


在浏览器中打开输入服务器IP,



搜索一下:mongo如果有出现就安装成功了,

推荐阅读更多精彩内容