Linux快速目录切换,PHP统计目录中文件以及目录中目录大小的方法
分类:微服架构

本文实例讲述了PHP统计目录中文件以及目录中目录大小的方法。分享给大家供大家参考,具体如下:

之前一直在弄iOS开发,对于服务器了解并不多。趁着最近不忙,打算了解了解服务器的相关知识。

ansible实现lamp

创建role的步骤

(1) 创建以roles命名的目录;
(2) 在roles目录中分别创建以各角色名称命名的目录,如webservers等;
(3) 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不
到的目录可以创建为空目录,也可以不创建;
(4) 在playbook文件中,调用各角色;

role内各目录中可用的文件

tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用in
clude包含其它的位于此目录中的task文件;
files目录:存放由copy或script等模块调用的文件;
templates目录:template模块会自动在此目录中寻找Jinja2模板文件;
handlers目录:此目录中应当包含一个main.yml文件,用于定义此角色用到的各handler;在handler
中使用include包含的其它的handler文件也应该位于此目录中;
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;

[root@scholar ~]# vim /etc/ansible/hosts 
#定义被控主机
[webservers]
172.16.10.123 ansible_ssh_user=root ansible_ssh_pass=centos
172.16.10.124 ansible_ssh_user=root ansible_ssh_pass=centos
[dbservers]
172.16.10.125 ansible_ssh_user=root ansible_ssh_pass=centos


实现基于ssh密钥通信
[root@scholar ~]# ssh-keygen -t rsa -P ''
[root@scholar ~]# yum install sshpass -y  #请确保安装sshpass,不然无法通信

#此时可以将/etc/ansible/hosts改为
[webservers]
172.16.10.123 
172.16.10.124 
[dbservers]
172.16.10.125

创建各目录
[root@scholar ~]# mkdir lamp/role -pv
[root@scholar role]# mkdir web/{files,handlers,meta,tasks,templates,vars,default} db/{files,handlers,meta,tasks,templates,vars,default} php/{files,handlers,meta,tasks,templates,vars,default} -p

准备各服务配置文件
[root@scholar role]# cp /etc/httpd/conf/httpd.conf web/files/
[root@scholar role]# cp /etc/php.ini php/files/
[root@scholar role]# cp /etc/my.cnf db/files/

创建各剧本
[root@scholar role]# touch web.yml php.yml db.yml site.yml
[root@scholar role]# touch web/{handlers,tasks}/main.yml db/{handlers,tasks}/main.yml php
/tasks/main.yml
[root@scholar role]# vim web.yml

- name: web service
  remote_user: root
  hosts: webservers
  roles:
    - web

[root@scholar role]# vim php.yml    

- name: php service
  remote_user: root
  hosts: webservers
  roles:
    - php

[root@scholar role]# vim db.yml 

- name: mysql service
  remote_user: root
  hosts: dbservers
  roles:
    - db

[root@scholar role]# vim web/tasks/main.yml     

- name: install httpd
  yum: name=httpd state=present
- name: configuration httpd
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:
    - restart httpd
- name: service httpd start
  service: name=httpd enabled=no state=started

[root@scholar role]# vim web/handlers/main.yml 

- name: restart httpd
  service: name=httpd state=restarted

[root@scholar role]# vim php/tasks/main.yml 

- name: install php
  yum: name=php state=present
- name: configuration php
  copy: src=php.ini dest=/etc/php.ini

[root@scholar role]# vim db/tasks/main.yml 

- name: install mysql
  yum: name=mysql state=present
- name: install mysql-server
  yum: name=mysql-server state=present
- name: configuration mysqld
  copy: src=my.cnf dest=/etc/my.cnf
  notify:
    - restart mysqld
- name: service mysqld start
  service: name=mysqld enabled=no state=started

[root@scholar role]# vim db/handlers/main.yml 

- name: restart mysqld
  service: name=mysqld state=restarted

Linux快速目录切换

<?php
 //循环遍历目录中所有的文件,并统计目录和文件的大小
 $dirName="phpMyAdmin";
 $dir=opendir($dirName); //返回一个资源类型
 while($fileName=readdir($dir)){
 $file=$dirName."/".$fileName;
 if($fileName!="." && $fileName!=".."){
  if(is_dir($file)){
  echo "<font color='red'>".$fileName."===".date("Y-m-d H:i:s",filectime($file))."==".filetype($file)."==".toSize(dirSize($file))."</font><br/>";
  }
  else{
  echo "<font color='green'>".$fileName."=====".date("Y-m-d H:i:s",filectime($file))."====".filetype($file)."====".toSize(filesize($file))."</font><br/>";
  }
 }
 }
 closedir($dir);
 //把文件或目录的大小转化为容易读的方式
 function toSize($size){
 $dw; //指定文件或目录统计的单位方式
 if($size>pow(2,30)){
  $dw="GB";
  $size=round($size/pow(2,30),2);
 }
 else if($size>pow(2,20)){
  $dw="MB";
  $size=round($size/pow(2,20),2);
 }
 else if($size>pow(2,10)){
  $dw="KB";
  $size=round($size/pow(2,10),2);
 }
 else
 {
  $dw="bytes";
 }
 return $size.$dw;
 }
 //利用递归的方式统计目录的大小
 function dirSize($dirName){
 $dirsize=0;
 $dir=opendir($dirName);
 while($fileName=readdir($dir)){
  $file=$dirName."/".$fileName;
  if($fileName!="." && $fileName!=".."){ //一定要进行判断,否则会出现错误的
  if(is_dir($file)){
   $dirsize+=dirSize($file);
  }
  else{
   $dirsize+=filesize($file);
  }
  }
 }
 closedir($dir);
 return $dirsize;
 }
?>

问了更好的了解服务器的相关知识,买了一台服务器,本来打算用阿里云的,但是好贵,然后发现AWS 可以免费使用一年(链接需要翻墙),先要预约,然后亚马逊的客服会打电话给你(客服妹子很不错!哈哈)

ansible实现lamp

创建role的步骤

(1) 创建以roles命名的目录;
(2) 在roles目录中分别创建以各角色名称命名的目录,如webservers等;
(3) 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不
到的目录可以创建为空目录,也可以不创建;
(4) 在playbook文件中,调用各角色;

role内各目录中可用的文件

tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用in
clude包含其它的位于此目录中的task文件;
files目录:存放由copy或script等模块调用的文件;
templates目录:template模块会自动在此目录中寻找Jinja2模板文件;
handlers目录:此目录中应当包含一个main.yml文件,用于定义此角色用到的各handler;在handler
中使用include包含的其它的handler文件也应该位于此目录中;
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;

[root@scholar ~]# vim /etc/ansible/hosts 
#定义被控主机
[webservers]
172.16.10.123 ansible_ssh_user=root ansible_ssh_pass=centos
172.16.10.124 ansible_ssh_user=root ansible_ssh_pass=centos
[dbservers]
172.16.10.125 ansible_ssh_user=root ansible_ssh_pass=centos


实现基于ssh密钥通信
[root@scholar ~]# ssh-keygen -t rsa -P ''
[root@scholar ~]# yum install sshpass -y  #请确保安装sshpass,不然无法通信

#此时可以将/etc/ansible/hosts改为
[webservers]
172.16.10.123 
172.16.10.124 
[dbservers]
172.16.10.125

创建各目录
[root@scholar ~]# mkdir lamp/role -pv
[root@scholar role]# mkdir web/{files,handlers,meta,tasks,templates,vars,default} db/{files,handlers,meta,tasks,templates,vars,default} php/{files,handlers,meta,tasks,templates,vars,default} -p

准备各服务配置文件
[root@scholar role]# cp /etc/httpd/conf/httpd.conf web/files/
[root@scholar role]# cp /etc/php.ini php/files/
[root@scholar role]# cp /etc/my.cnf db/files/

创建各剧本
[root@scholar role]# touch web.yml php.yml db.yml site.yml
[root@scholar role]# touch web/{handlers,tasks}/main.yml db/{handlers,tasks}/main.yml php
/tasks/main.yml
[root@scholar role]# vim web.yml

- name: web service
  remote_user: root
  hosts: webservers
  roles:
    - web

[root@scholar role]# vim php.yml    

- name: php service
  remote_user: root
  hosts: webservers
  roles:
    - php

[root@scholar role]# vim db.yml 

- name: mysql service
  remote_user: root
  hosts: dbservers
  roles:
    - db

[root@scholar role]# vim web/tasks/main.yml     

- name: install httpd
  yum: name=httpd state=present
- name: configuration httpd
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:
    - restart httpd
- name: service httpd start
  service: name=httpd enabled=no state=started

[root@scholar role]# vim web/handlers/main.yml 

- name: restart httpd
  service: name=httpd state=restarted

[root@scholar role]# vim php/tasks/main.yml 

- name: install php
  yum: name=php state=present
- name: configuration php
  copy: src=php.ini dest=/etc/php.ini

[root@scholar role]# vim db/tasks/main.yml 

- name: install mysql
  yum: name=mysql state=present
- name: install mysql-server
  yum: name=mysql-server state=present
- name: configuration mysqld
  copy: src=my.cnf dest=/etc/my.cnf
  notify:
    - restart mysqld
- name: service mysqld start
  service: name=mysqld enabled=no state=started

[root@scholar role]# vim db/handlers/main.yml 

- name: restart mysqld
  service: name=mysqld state=restarted

 

笔者选择的是Linux 服务器,看了下 目录,下面是目录截图

  快速目录切换使用到的是成为目录栈的东东,通过三个命令实现。pushd目录入栈与切换、dirs查看栈中内容、popd栈中目录出栈。

图片 1

1、pushd命令

Linux目录.png

pushd命令执行,会在内存中维持一张目录列表,便于随时切换列表内目录

/

pushd命令是切换到上一次访问的目录,同时调整目录记录列表的顺序(pushd命令的实际作用和“cd -”的命令相类似)

/处于Linux文件系统树形结构的最顶端,它是Linux文件系统的入口,所有的目录、文件、设备都在/之下。

/bin 该目录存放着系统最常用的最重要的命令,相当于DOS下的内部命令,只不过它们是以独立的文件形式存在。比如:ls、cp、mkdir等命令。这个目录中的文件都是可执行的并且是普通用户都可以使用的命令。作为系统最基础的命令都放在这里。

/usr 该目录是系统存放程序的地方,比如普通命令、帮助文件、安装的软件等。这个目录下有很多的文件和目录。当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。当有涉及服务器的配置文件时,会把配置文件安装在/etc目录中。/usr目录下包括涉及字体目录/usr/share/fonts、帮助目录/usr/share/man或/usr/share/doc等。

/var 该目录的内容是经常变动的,/var下有/var/log目录用来存放系统日志的目录。/var/www目录用来定义Apache服务器站点存放目录。/var/lib用来存放一些库文件。

/sbin 大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的。

/root Linux超级权限用户(系统管理员)root的主目录。

/home

pushd [-n] [dir]

普通用户的主目录都默认存放在该目录中,比如:有个用户叫wang,那它的主目录就是/home/wang,也可以用~wang表示。

/etc 该目录是系统配置文件的所在地,一些服务器的配置文件也在这里,比如:用户帐号及密码配置文件等。

/dev 设备文件存储在该目录中,这个目录下是所有Linux的外部设备文件,这些设备文件的功能类似于DOS下的.sys文件和Win下的.vxd文件。Linux将设备当成文件使用,即将设备抽象化,这样极大地方便了我们对设备的操作控制。因此Linux中设备和文件是用相同的方法访问的。

/boot Linux的内核及引导系统的程序所需要的文件都存放在该目录中,比如vmlinuz、initrd.img等文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器在这个目录中。

/opt 该目录是可选的软件包安装目录,有些软件包我们可以将它安装在该目录中。

/tmp 该目录用于存放临时文件,有时用户运行程序的时候,会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是相似的。

/lost+found 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生的一些文件碎片就存放在该目录中。当系统启动在过程中fsck工具会检查这里,并修复已经损坏的文件系统。 有时系统发生问题,有很多的文件被移到这个目录中,可能要用手工的方式来修复,或移到文件原来的位置上。

/lib 该目录用于存放库文件,这个目录里存放着系统最基本的共享库,其作用类似于Windows里的.dll文件。几乎所有的应用程序都须要用到这些共享库。
/mnt 该目录是用于存放挂载储存设备的挂载目录的,系统提供这个目录是让用户临时挂载别的文件系统,比如有cdrom等目录。

/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里。

/misc 该目录可以用来存放杂项文件或目录,即那些用途或含义不明确的文件或目录可以存放在该目录下。

/media 即插即用型存储设备的挂载点自动在该目录下创建。比如USB盘系统自动挂载后,会在这个目录下产生一个目录;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,类似于cdrom这个目录。该目录只有在最新的发行套件上才有。

/initrd 系统在启动前的内核是压缩的(这和ramdisk有关),当系统启动时需要解压缩,该目录就是解压缩时的临时目录,当启动完后又将该目录清空。

/usr/man 该目录是Linux系统帮助文档的存放目录。

/proc/cpuinfo 关于处理器的信息,如类型、厂家、型号和性能等。比如cat /proc/cpuinfo -

/proc/devices 当前运行内核所配置的所有设备清单。 -

/proc/filesystems 当前运行内核所配置的文件系统。 -

/proc/dma 当前正在使用的DMA通道。 -

/proc/interrupts 正在使用的中断和曾经有多少个中断。 -

/proc/ioports 当前正在使用的I/O端口。 -

/etc/init.d 这个目录是用来存放系统或服务器以System V模式启动的脚本,这在以System V模式启动或初始化的系统中常见。比如RedHat Fedora。 -

/etc/xinetd.d 如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。有些系统没有这个目录,比如Slackware,有些老的版本也没有。在Redhat Fedora中比较新的版本中存在。 -

/etc/rc.d

pushd [-n] [+n] [-n]

这是Slackware发行版中有的一个目录,是BSD方式启动脚本的存放地,比如定义网卡,服务器开启脚本等。

 
/etc/X11 是X-Window相关的配置文件存放地。 -

/usr/bin

将目录推入目录栈,或者轮换栈中的内容,使栈的顶部成为当前工作目录。 没有参数时,交换顶部两个目录,返回 0,除非目录栈为空。如果给出了参数, 它们有如下含义:

这个目录是可执行程序的目录,普通用户就有权限执行。当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。相似的目录是/usr/local/bin目录。有时/usr/bin中的文件是/usr/local/bin的链接文件。

/usr/sbin

+n

这个目录也是可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行,相似目录是/sbin或/usr/local/sbin或/usr/X11R6/sbin等。

/usr/local

轮换栈中内容,使得 dirs 给出的列表中从左数第n 个目录 (从 0 数起) 成为目录栈的顶部。

这个目录一般是用来存放用户自编译安装软件的存放目录。一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。

/usr/lib 该目录和/lib目录相似,是库文件的存储目录。存放一些常用的共享库。 -

/usr/share

-n

该目录用于存放系统共用的东西,比如/usr/share/fonts是字体目录,是用户都共用的。

 
/usr/share/doc 该目录是Linux共享文档的存放地。 -

/usr/share/man 该目录是共享的帮助文件的存放地。 -

/usr/src 该目录是内核源码存放地,下面有内核源码目录,比如linux、linux-2.xxx.xx目录等。有的系统也会把一些源码软件包安装在这里,比如Redhat Fedora。另外Redhat

轮换栈中内容,使得 dirs 给出的列表中从右数第n 个目录 (从 0 数起) 成为目录栈的顶部。

4.0/5.0,它的内核源码包的目录位于/usr/src/kernels目录下的某个目录中(只有安装后才会生成相应目录)。

/var/adm

-n

比如软件包安装信息、日志、管理信息等就存放在该目录下,在Slackware操作系统中是有这个目录的。在Fedora中好象没有。

/var/log 该目录用于存放系统日志。 -
 
/var/spool 打印机、邮件、代理服务器等假脱机目录存放在该目录下。 -

参考链接

仅向栈中添加目录,不切换当前工作目录。

dir

添加dir 到栈顶,使得它成为新的当前工作目录。

2、dirs

dirs [-clpv]

没有选项时显示当前保存的目录。默认输出为一行,目录名用空格分开。 

-c

删除所有条目,清空目录栈。

-l

产生长列表;默认列表格式使用波浪线来表示个人目录。

-p

输出目录栈,一行一个。

-v

将pushd命令生成的目录列表加上编号。

3、pop命令

 

popd [-n] [+n] 

 

+n

删除 dirs 给出的列表中从左数第n 个目录。

-n

删除 dirs 给出的列表中从右数第n 个目录。

-n

仅从栈中删除,不切换当前工作目录。

快速目录切换使用到的是成为目录栈的东东,通过三个命令实现。pushd目录入栈与切换、dirs查看栈中内容、popd栈中目录出...

本文由10bet手机官网发布于微服架构,转载请注明出处:Linux快速目录切换,PHP统计目录中文件以及目录中目录大小的方法

上一篇:PHP常用字符串操作函数实例总结 下一篇:PHP基于单例模式实现的mysql类
猜你喜欢
热门排行
精彩图文