Linux系统删除文件后占用空间为减少的问题

今天看到一台上传服务器空间只剩9%了,为了避免状况,于是清理了一些没用的上传文件,删除之后,df -h 发现磁盘剩余空间并没有增加,而用du -h  查看刚才的目录,发现实际文件使用的空间才46%,100多G的空间,不明去向。

问了一下运维,df -h 和 du -h 两个命令所看到的空间大小怎么会差别这么大。

他让我用lsof命令查看下,lsof |grep delete(已经被删除但是仍然被应用程序占用的文件列表)。 刚刚删除的文件竟然都在列表里出来了,  原来是刚删除的文件,虽然被删除了,但空间并未释放。

google了下原因:

在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

重启了下那个进程,然后df -h 发现100多G的空间终于回来了。

lsof工具说明

随机取出一维数组中的N个元素 PHP

<?php

	$testArr = range(a, z);

	#######  the first method  

	$newArr = arrayRand($testArr);

	var_dump($newArr);

	function arrayRand($arr, $num = 3) {
		$arr1 = array_rand($arr, $num);

		$newArr = array();

		foreach ($arr1 as $key => $value) {
			$newArr[] = $arr[$value];
		}

		return $newArr;
	}
	echo "\n";


	######  the second method

	$arr2 = arrayRandom($testArr);

	var_dump($arr2);



	function arrayRandom($arr, $num = 3) {
		shuffle($arr);

		// list($a, $b, $c) = $arr;

		$newArr = array();

		for ($i = 0; $i < $num; $i++) {
			$newArr[] = $arr[$i];
		}

		return $newArr;
	}



	###### the third method    getting random value from assoc arrays

	$testArr = array(
		'a' => 'siyuantlw',
		'b' => 'chengxusheji',
		'c' => 'redisfans',
		'd' => 'phpzl',
		'e' => 'yemiansheji'
	);

	echo "\n";

	$newArr = assocArrayRandom($testArr);

	var_dump($newArr);

	function assocArrayRandom($arr, $num = 2) {
		$keyArr = array_keys($arr);

		shuffle($keyArr);

		$newArr = array();

		for ($i = 0; $i < $num; $i++) {
			$newArr[$keyArr[$i]] = $arr[$keyArr[$i]];
		}

		return $newArr;
	}

?>

PHP SimpleXML 函数

PHP SimpleXML 简介

SimpleXML 函数允许您把 XML 转换为对象。

通过普通的属性选择器或数组迭代器,可以处理这个对象,就像处理任何其他对象一样。

其中的一些函数需要最新的 PHP 版本。

安装

SimpleXML 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。

PHP SimpleXML 函数

PHP:指示支持该函数的最早的 PHP 版本。

函数 描述 PHP
__construct() 创建一个新的 SimpleXMLElement 对象。 5
addAttribute() 给 SimpleXML 元素添加一个属性。 5
addChild() 给 SimpleXML 元素添加一个子元素。 5
asXML() 从 SimpleXML 元素获取 XML 字符串。 5
attributes() 获取 SimpleXML 元素的属性。 5
children() 获取指定节点的子。 5
getDocNamespaces() 获取 XML 文档的命名空间。 5
getName() 获取 SimpleXML 元素的名称。 5
getNamespaces() 从 XML 数据获取命名空间。 5
registerXPathNamespace() 为下一次 XPath 查询创建命名空间语境。 5
simplexml_import_dom() 从 DOM 节点获取 SimpleXMLElement 对象。 5
simplexml_load_file() 从 XML 文档获取 SimpleXMLElement 对象。 5
simplexml_load_string() 从 XML 字符串获取 SimpleXMLElement 对象。 5
xpath() 对 XML 数据运行 XPath 查询。 5