`

常用小片段指令集锦

阅读更多
写道
检测是否是整数 还是这个好使啊

/**
* 是否是 整数
*/
function isint($value)
{
$filter = preg_replace('/[^0-9]+/', '', $value);
return $filter == $value;
}
不然还要区分 32位/64位 我擦
差点又被 32位的PHP给坑了
 
写道
在目录中查找带指定 字符串的文件

find . -name "*.js" -exec grep "Product.Options" {} -H \;
find . -name "*.js" -exec grep "product-custom-option" {} -H \;

 

/**
 * Convert BR tags to nl
 *
 * @param string The string to convert
 * @return string The converted string
 */
function br2nl($string)
{
    return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}

 

写道
web 日志分析:

比如 Apache
211.87.152.44 – - [18/Mar/2005:12:21:42 +0800] “GET / HTTP/1.1″ 200 899 “http://www.baidu.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)”

从上面提到的apache日志中得到访问量最高前100个IP,实现很简单:

cat logfile | awk ‘{a[$1]++} END {for(b in a) print b”\t”a[b]}’|sort -k2 -r|head -n 100

 

写道
PHP利用curl伪造IP和来路
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8')); //构造IP
curl_setopt($ch, CURLOPT_REFERER, "http://www.xssxss.com/ "); //构造来路
curl_setopt($ch, CURLOPT_HEADER, 1);
$out = curl_exec($ch);
curl_close($ch);
?>
查看效果的脚本2.php

<?php
function getClientIp() {
if (!empty($_SERVER["HTTP_CLIENT_IP"]))
$ip = $_SERVER["HTTP_CLIENT_IP"];
else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if (!empty($_SERVER["REMOTE_ADDR"]))
$ip = $_SERVER["REMOTE_ADDR"];
else
$ip = "err";
return $ip;
}
echo "IP: " . getClientIp() . "";
echo "referer: " . $_SERVER["HTTP_REFERER"];

<?php
//php判断客户端是否为手机
$agent = $_SERVER['HTTP_USER_AGENT'];
if(strpos($agent,"NetFront") || strpos($agent,"iPhone") || strpos($agent,"MIDP-2.0") || strpos($agent,"Opera Mini") || strpos($agent,"UCWEB") || strpos($agent,"Android") || strpos($agent,"Windows CE") || strpos($agent,"SymbianOS"))
header("Location:xxxxxxxx");
?>

 

写道
PHP制作安装程序的原理与步骤
1、制作PHP安装程序的原理
PHP程序的安装原理就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安装完成后需要修改安装文件。
2、制作PHP安装程序的步骤
step1 检查目录或文件的权限
step2 修改或填加配置文件
step3 检查配置文件正确性
step4 导入数据库
step5 锁定或删除安装文件
3、制作安装用到的PHP函数
检查文件是否可写,返回布尔值:is_writable("data/config.php");
检查文件是否可读,返回布尔值:is_readable("data/config.php");
fopen() 文件操作函数,打开一个文件或新建
fwrite() 文件操作函数,写入内容到文件
rename() 文件操作函数,给文件改名
4、注意事项
(1).对文件和相关文件夹权限进行检查,如缓存,生成文件,配置文件
(2).安装文件尽可能独立,可删除,可改名。
(3).数据库导入时,需检查:
a.检查是否有建立数据库的权限
b.是否同名数据库的存在
c.考虑到数据库导入的大小是否分段处理
(4).检查配置环境,各种模块的支持情况,如:gd2, pdo,rewirte等

 

写道
在一个大篮球场里,放100个篮球架,把篮网下面的口扎住,投进一个球就占用了一个篮球架,第二天才清零。现在把包括你在内的100个人放进篮球场参与投篮游戏,买一个球1块钱,投进后篮球架会吐出1块2。你的投篮技术属于平均水准,所以每天你可以投进一个球,赚2毛钱。

但是逐渐的,游戏组织者会继续往里放人而又不让你意识到,你想投进球越来越难,你把这归咎于自己的投篮技术不够好。虽然你偶尔还是可以投进一个赚走2毛,但是参与这场游戏耗费你大量时间和精力,你觉得不划算想退出。

这时候游戏组织者告诉你,你不必非得自己投进球,只要你能拉人进来参加游戏,那么他们买球的钱可以拿出一部分来给你,而且你拉来的人继续拉人进来买球的钱,你也可以分一部分。此外,你仅仅是拉人进来,哪怕他们不买球,也可以给你奖励。所以只要从你这条线上进来足够多的人参与游戏,你就能发家致富,你看人家王五靠这个都开上宝马了。

于是你留了下来

 

mysql 简单优化 写道
mysql> show global status;

  可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:

mysql> show variables;

一、慢查询

mysql> show variables like '%slow%';
+------------------+-------+
| Variable_name     | Value |
+------------------+-------+
| log_slow_queries | ON     |
| slow_launch_time | 2      |
+------------------+-------+
mysql> show global status like '%slow%';
+---------------------+-------+
| Variable_name        | Value |
+---------------------+-------+
| Slow_launch_threads | 0      |
| Slow_queries         | 4148 |
+---------------------+-------+

配置中打开了记录慢查询,执行时间超过2秒的即为慢查询,系统显示有4148个慢查询,你可以分析慢查询日志,找出有问题的SQL语句,慢查询时间不宜设置过长,否则意义不大,最好在5秒以内,如果你需要微秒级别的慢查询,可以考虑给MySQL打补丁:http://www.percona.com /docs/wiki/release:start,记得找对应的版本。
打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响又小。
二、连接数
经常会遇见”MySQL: ERROR 1040: Too many connections”的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小:

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name    | Value |
+-----------------+-------+
| max_connections | 256   |
+-----------------+-------+

这台MySQL服务器最大连接数是256,然后查询一下服务器响应的最大连接数:

mysql> show global status like 'Max_used_connections';

MySQL服务器过去的最大连接数是245,没有达到服务器连接数上限256,应该没有出现1040错误,比较理想的设置是

Max_used_connections / max_connections * 100% ≈ 85%

最大连接数占上限连接数的85%左右,如果发现比例在10%以下,MySQL服务器连接数上限设置的过高了。
三、Key_buffer_size
key_buffer_size是对MyISAM表性能影响最大的一个参数,下面一台以MyISAM为主要存储引擎服务器的配置:

mysql> show variables like 'key_buffer_size';
+-----------------+------------+
| Variable_name    | Value       |
+-----------------+------------+
| key_buffer_size | 536870912 |
+-----------------+------------+

分配了512MB内存给key_buffer_size,我们再看一下key_buffer_size的使用情况:

mysql> show global status like 'key_read%';
+------------------------+-------------+
| Variable_name           | Value        |
+------------------------+-------------+
| Key_read_requests       | 27813678764 |
| Key_reads               | 6798830      |
+------------------------+-------------+

  一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:
key_cache_miss_rate = Key_reads / Key_read_requests * 100%
比如上面的数据,key_cache_miss_rate为0.0244%,4000个索引读取请求才有一个直接读硬盘,已经很BT 了,key_cache_miss_rate在0.1%以下都很好(每1000个请求有一个直接读硬盘),如果key_cache_miss_rate在 0.01%以下的话,key_buffer_size分配的过多,可以适当减少。
MySQL服务器还提供了key_blocks_*参数:

mysql> show global status like 'key_blocks_u%';
+------------------------+-------------+
| Variable_name           | Value        |
+------------------------+-------------+
| Key_blocks_unused       | 0            |
| Key_blocks_used         | 413543       |
+------------------------+-------------+

Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:
Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%
四、临时表

mysql> show global status like 'created_tmp%';
+-------------------------+---------+
| Variable_name            | Value    |
+-------------------------+---------+
| Created_tmp_disk_tables | 21197    |
| Created_tmp_files        | 58       |
| Created_tmp_tables       | 1771587 |
+-------------------------+---------+

每次创建临时表,Created_tmp_tables增加,如果是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数,比较理想的配置是:
  Created_tmp_disk_tables / Created_tmp_tables * 100% <= 25%比如上面的服务器Created_tmp_disk_tables / Created_tmp_tables * 100% = 1.20%,应该相当好了。我们再看一下MySQL服务器对临时表的配置:

mysql> show variables where Variable_name in ('tmp_table_size', 'max_heap_table_size');
+---------------------+-----------+
| Variable_name        | Value      |
+---------------------+-----------+
| max_heap_table_size | 268435456 |
| tmp_table_size       | 536870912 |
+---------------------+-----------+

只有256MB以下的临时表才能全部放内存,超过的就会用到硬盘临时表。
五、Open Table情况

mysql> show global status like 'open%tables%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables    | 919    |
| Opened_tables | 1951  |
+---------------+-------+

Open_tables表示打开表的数量,Opened_tables表示打开过的表数量,如果Opened_tables数量过大,说明配置中 table_cache(5.1.3之后这个值叫做table_open_cache)值可能太小,我们查询一下服务器table_cache值:

mysql> show variables like 'table_cache';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| table_cache    | 2048  |
+---------------+-------+

比较合适的值为:

Open_tables / Opened_tables * 100% >= 85%
Open_tables / table_cache * 100% <= 95%

六、进程使用情况

mysql> show global status like 'Thread%';
+-------------------+-------+
| Variable_name      | Value |
+-------------------+-------+
| Threads_cached     | 46     |
| Threads_connected | 2      |
| Threads_created    | 570    |
| Threads_running    | 1      |
+-------------------+-------+

如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器 thread_cache_size配置:

mysql> show variables like 'thread_cache_size';
+-------------------+-------+
| Variable_name      | Value |
+-------------------+-------+
| thread_cache_size | 64     |
+-------------------+-------+


七、查询缓存(query cache)

mysql> show global status like 'qcache%';
+-------------------------+-----------+
| Variable_name            | Value      |
+-------------------------+-----------+
| Qcache_free_blocks       | 22756      |
| Qcache_free_memory       | 76764704  |
| Qcache_hits              | 213028692 |
| Qcache_inserts           | 208894227 |
| Qcache_lowmem_prunes     | 4010916    |
| Qcache_not_cached        | 13385031  |
| Qcache_queries_in_cache | 43560      |
| Qcache_total_blocks      | 111212     |
+-------------------------+-----------+

MySQL查询缓存变量解释:
Qcache_free_blocks:缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。
Qcache_free_memory:缓存中的空闲内存。
Qcache_hits:每次查询在缓存中命中时就增大
Qcache_inserts:每次插入一个查询时就增大。命中次数除以插入次数就是不中比率。
Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks和free_memory可以告诉您属于哪种情况)
Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。
Qcache_queries_in_cache:当前缓存的查询(和响应)的数量。
Qcache_total_blocks:缓存中块的数量。
我们再查询一下服务器关于query_cache的配置:

mysql> show variables like 'query_cache%';
+------------------------------+-----------+
| Variable_name                 | Value      |
+------------------------------+-----------+
| query_cache_limit             | 2097152    |
| query_cache_min_res_unit      | 4096       |
| query_cache_size              | 203423744 |
| query_cache_type              | ON         |
| query_cache_wlock_invalidate | OFF        |
+------------------------------+-----------+

各字段的解释:
query_cache_limit:超过此大小的查询将不缓存
query_cache_min_res_unit:缓存块的最小大小
query_cache_size:查询缓存大小
query_cache_type:缓存类型,决定缓存什么样的查询,示例中表示不缓存 select sql_no_cache 查询
query_cache_wlock_invalidate:当有其他客户端正在对MyISAM表进行写操作时,如果查询在query cache中,是否返回cache结果还是等写操作完成再读表获取结果。
query_cache_min_res_unit的配置是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费。
查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
查询缓存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%
查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且 Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
查询缓存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%
示例服务器 查询缓存碎片率 = 20.46%,查询缓存利用率 = 62.26%,查询缓存命中率 = 1.94%,命中率很差,可能写操作比较频繁吧,而且可能有些碎片。
八、排序使用情况

mysql> show global status like 'sort%';
+-------------------+------------+
| Variable_name      | Value       |
+-------------------+------------+
| Sort_merge_passes | 29          |
| Sort_range         | 37432840    |
| Sort_rows          | 9178691532 |
| Sort_scan          | 1860569     |
+-------------------+------------+

Sort_merge_passes 包括两步。MySQL 首先会尝试在内存中做排序,使用的内存大小由系统变量 Sort_buffer_size 决定,如果它的大小不够把所有的记录都读到内存中,MySQL 就会把每次在内存中排序的结果存到临时文件中,等 MySQL 找到所有记录之后,再把临时文件中的记录做一次排序。这再次排序就会增加 Sort_merge_passes。实际上,MySQL 会用另一个临时文件来存再次排序的结果,所以通常会看到 Sort_merge_passes 增加的数值是建临时文件数的两倍。因为用到了临时文件,所以速度可能会比较慢,增加 Sort_buffer_size 会减少 Sort_merge_passes 和 创建临时文件的次数。但盲目的增加 Sort_buffer_size 并不一定能提高速度,见 How fast can you sort data with MySQL?(引自http://qroom.blogspot.com/2007/09/mysql-select-sort.html,貌似被墙)
另外,增加read_rnd_buffer_size(3.2.3是record_rnd_buffer_size)的值对排序的操作也有一点的好处,参见:http://www.mysqlperformanceblog.com/2007/07/24/what-exactly-is-read_rnd_buffer_size/
九、文件打开数(open_files)

mysql> show global status like 'open_files';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_files     | 1410  |
+---------------+-------+

mysql> show variables like 'open_files_limit';
+------------------+-------+
| Variable_name     | Value |
+------------------+-------+
| open_files_limit | 4590  |
+------------------+-------+

比较合适的设置:Open_files / open_files_limit * 100% <= 75%
十、表锁情况

mysql> show global status like 'table_locks%';
+-----------------------+-----------+
| Variable_name          | Value      |
+-----------------------+-----------+
| Table_locks_immediate | 490206328 |
| Table_locks_waited     | 2084912    |
+-----------------------+-----------+

  Table_locks_immediate表示立即释放表锁数,Table_locks_waited表示需要等待的表锁数,如果 Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,因为InnoDB是行锁而MyISAM是表锁,对于高并发写入的应用InnoDB效果会好些。示例中的服务器 Table_locks_immediate / Table_locks_waited = 235,MyISAM就足够了。
十一、表扫描情况

mysql> show global status like 'handler_read%';
+-----------------------+-------------+
| Variable_name          | Value        |
+-----------------------+-------------+
| Handler_read_first     | 5803750      |
| Handler_read_key       | 6049319850  |
| Handler_read_next      | 94440908210 |
| Handler_read_prev      | 34822001724 |
| Handler_read_rnd       | 405482605    |
| Handler_read_rnd_next | 18912877839 |
+-----------------------+-------------+

各字段解释参见http://hi.baidu.com/thinkinginlamp/blog/item/31690cd7c4bc5cdaa144df9c.html,调出服务器完成的查询请求次数:

mysql> show global status like 'com_select';
+---------------+-----------+
| Variable_name | Value      |
+---------------+-----------+
| Com_select     | 222693559 |
+---------------+-----------+

计算表扫描率:
表扫描率 = Handler_read_rnd_next / Com_select
如果表扫描率超过4000,说明进行了太多表扫描,很有可能索引没有建好,增加read_buffer_size值会有一些好处,但最好不要超过 8MB。
后记:
文中提到一些数字都是参考值,了解基本原理就可以,除了MySQL提供的各种status值外,操作系统的一些性能指标也很重要,比如常用的 top,iostat等,尤其是iostat,现在的系统瓶颈一般都在磁盘IO上,关于iostat的使用,可以参考:http://www.php-oa.com/2009/02/03/iostat.html

 

写道
MySQL root密码忘记的解决方法

1.先停掉mysql
# /etc/rc.d/init.d/mysqld stop
2.以--skip-grant-table 的参数启动mysql
# mysqld_safe --skip-grant-table&
3. 更改root 密碼
# mysql mysql
mysql> UPDATE user SET password=password('xmzhu.cn') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit
4.停掉mysql再重跑
killall mysqld
#/etc/rc.d/init.d/mysqld start
# mysql -u root -p
Enter password:

mysql4.1以上版本连接时出现Client does not support authentication protocol问题
Could not connect: Client does not support authentication protocol requested by server; consider upgrading MySQL client
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client
官方的说法
MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. .....
如果你升级mysql到4.1以上版本后遇到以上问题,请先确定你的mysql client 是4.1或者更高版本.(WINDOWS下有问题你就直接跳到下面看解决方法了,因为MYSQL 在WINDOWS是client和server一起装上了的)
解决方案
请使用以下两种方法之一
其一:
mysql> SET PASSWORD FOR
-> [email=]'some_user'@'some_host'[/email] = OLD_PASSWORD('newpwd');

其二:
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;
注:具体操作中,请更换HOST及User的值
原因
原因是因为你使用的mysql服务器版本中使用了新的密码验证机制,这需要客户端的版本要在4.0以上,原来的密码函数被改为old_password();,这样使用password()生成的密码在旧的版本上的客户端就不好使了,而PHP中的MYSQL客户端都是3.23的(当然,mysqli的扩展除外),问题就在这了。

MySQL 5_1新特性 - 事件调度器(Event Scheduler)
MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能
创建EVENT非常简单,语法如下:
CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval]
| EVERY interval
[STARTS timestamp [+ INTERVAL interval]]
[ENDS timestamp [+ INTERVAL interval]]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}例如创建一个每30秒清空tableA数据的任务
CREATE EVENT E_DELETE_ASO_TOKEN ON SCHEDULE EVERY 30 SECOND DO DELETE FROM tableA ;默认EVENT支持是没有启动的,可以通过下面的命令来查看状态:
Select @@event_scheduler;如果返回OFF,则需要执行下面的命令启动:
SET GLOBAL event_scheduler = ON;好了,上面虽然启动了EVENT,但是每次重启mysql之后EVENT并没有自动启动,
那么如何让它自动启动呢?
方法之一:找到当前使用的.cnf文件,在[mysqld]的下面加入如下行...
event_scheduler=1方法二:启动mysql的时候增加--event_scheduler=1
mysql start --event_scheduler=1事件详细语法事例(EVENT)1>创建事件(CREATE EVENT) 先来看一下它的语法:
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; schedule: AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP] INTERVAL: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

1) 首先来看一个简单的例子来演示每秒插入一条记录到数据表
USE test; CREATE TABLE aaa (timeline TIMESTAMP); CREATE EVENT e_test_insert ON SCHEDULE EVERY 1 SECOND DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

等待3秒钟后,再执行查询看看:
mysql> SELECT * FROM aaa; +---------------------+ | timeline | +---------------------+ | 2007-07-18 20:44:26 | | 2007-07-18 20:44:27 | | 2007-07-18 20:44:28 | +---------------------+

2) 5天后清空test表:
CREATE EVENT e_test ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

3) 2007年7月20日12点整清空test表:
CREATE EVENT e_test ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00' DO TRUNCATE TABLE test.aaa;

4) 每天定时清空test表:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY DO TRUNCATE TABLE test.aaa;

5) 5天后开启每天定时清空test表:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

6) 每天定时清空test表,5天后停止执行:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY DO TRUNCATE TABLE test.aaa;

7) 5天后开启每天定时清空test表,一个月后停止执行:
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH DO TRUNCATE TABLE test.aaa;

[ON COMPLETION [NOT] PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE
8) 每天定时清空test表(只执行一次,任务完成后就终止该事件):
CREATE EVENT e_test ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE DO TRUNCATE TABLE test.aaa;

[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE
[COMMENT comment]可以给该事件加上注释
2>修改事件(ALTER EVENT) ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO sql_statement]

1) 临时关闭事件
ALTER EVENT e_test DISABLE;

2) 开启事件
ALTER EVENT e_test ENABLE;

3) 将每天清空test表改为5天清空一次:
ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY;

3>删除事件(DROP EVENT) 语法很简单,如下所示:
DROP EVENT [IF EXISTS] event_name

例如删除前面创建的e_test事件
DROP EVENT e_test;

当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS
DROP EVENT IF EXISTS e_test;

 

写道
获取交集
cat a.txt b.txt | sort | uniq -d > ./comm.txt
comm -12 <(sort a.txt|uniq ) <(sort b.txt|uniq ) > ./comm.txt 共同的交集
获取差
cat a.txt b.txt | sort | uniq -u > ./diff.txt 写入a.txt和b.txt所有 不同的元素 相同元素不写入
注意顺序很重要!
$ grep -F -v -f a.txt b.txt | sort | uniq > ./diff.txt B-A 写入b.txt的不同元素 相同元素不写入
$ grep -F -v -f b.txt a.txt | sort | uniq > ./diff.txt A-B 写入a.txt的不同元素 相同元素不写入
==========================================================


运营提了个导数据的需求,需要把某段时间登陆用户id导出来,由于数据量大,分了多个文 件保存。数据保存格式,每一行一个用户id。刚开始打算用数据,由于数据量大,就放弃了,存数据库去重,取数据交集差集比较方便,比如在A时间登陆了B时 间没有登陆的用户(差集)。Linux下有操作文件的命令,而且功能也很强大。下面是我的备注(经我整理,来源于互联网):
ls ./lc* | xargs -t -i sort {} -o {}
当前目录以lc开头的文件批量排序,结果保存到原文件中
ls ./lc* | xargs -t -i uniq {} ./uniq/{}
当前目录以lc开头的文件批量去重,结果保存到与原文件名相同uniq目录下
cat lcUsrLoginData20120601.txt lcUsrLoginData20120616.txt | sort | uniq > ../month/lcUsrLoginData201206.txt
合并当前目录下两文件并排序并去重,结果保存到当前目录的父目录的子目录month中
cat a.txt b.txt | sort | uniq -d | wc -l
comm -12 a.txt b.txt | wc -l
计算两个文件交集元素个数(为什么最后是换行符才行?)
cat a.txt b.txt | sort | uniq -d > temp.txt
cat a.txt temp.txt | sort | uniq -u > diff.txt
计算两个文件的差集

 

写道
查找请求数请20个IP(常用于查找攻来源):
  netstat -anlp|grep 80|grep tcp|awk '{print $5}

 

centos 配置java环境 写道
用文本编辑器打开/etc/profile(说明:根目录下的/etc/目录,其中的profile文件)
•在profile文件末尾加入如下字符串
JAVA_HOME=/usr/java/jdk1.6.0_21
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

 

centos ntfs分区读写 写道
红帽企业版系统默认是不支持Windows分区读写的,而基于红帽软件重新编译再分发的社区版红帽——CentOS同样默认也是不支持 Windows分区的挂载,Windows系统和Linux系统我们都要,应此在Linux下实现读写Windows的NTFS分区对文件系统管理非常有帮助,最近我安装了CentOS6.2,下面以此为例,在这里记录下操作,以备后用。

要实现Linux下挂载NTFS分区有三种方法:
一、编译安装NTFS-3G

这种方式要求系统里面已经安装了基本的开发工具,首先确认你已经安装了gcc和libc-dev。
然后访问NTFS-3G的下载页面:http://www.tuxera.com/community/ntfs-3g-download/,在Download标签下面可以下到这样的字样:
The latest stable version is ntfs-3g_ntfsprogs-2012.1.15, released on January 22, 2012.
这里显示了最新版的NTFS-3G的源码包下载地址,改文件是一个经过tar打包并且gzip压缩过的文件,使用 wget 下载然后编译安装:

编译安装
1 $ wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2012.1.15.tgz
2 $ tar -zxvf ntfs-3g_ntfsprogs-2012.1.15.tgz -C /tmp
3 $ cd /tmp/ntfs-3g-2012.1.15
4 $ chmod +x configure && ./configure
5 $ make
6 # make install
7 # 或者执行 sudo make install 或下切换至root(su root)然后再执行 make install

挂载NTFS分区:
1 # root 身份执行
2 # 下面是将NTFS分区C盘 /dev/sda1 挂载到 /media/winc 目录下,其他分区类似。
3 # mount -t ntfs-3g /dev/sda1 /media/winc
4 # 若要实现开机自动挂载硬盘上的NTFS分区,可以编辑 /etc/fstab 文件,添加如下行:
5 /dev/sda1 /mnt/winc ntfs-3g defaults 0 0

 

常用20几个linux命令 写道
1. ls命令

ls命令是列出目录内容(List Directory Contents)的意思。运行它就是列出文件夹里的内容,可能是文件也可能是文件夹。
1 root@tecmint:~# ls
2
3 Android-Games Music
4 Pictures Public
5 Desktop Tecmint.com
6 Documents TecMint-Sync
7 Downloads Templates

“ls -l”命令以详情模式(long listing fashion)列出文件夹的内容。
01 root@tecmint:~# ls -l
02
03 total 40588
04 drwxrwxr-x 2 ravisaive ravisaive 4096 May 8 01:06 Android Games
05 drwxr-xr-x 2 ravisaive ravisaive 4096 May 15 10:50 Desktop
06 drwxr-xr-x 2 ravisaive ravisaive 4096 May 16 16:45 Documents
07 drwxr-xr-x 6 ravisaive ravisaive 4096 May 16 14:34 Downloads
08 drwxr-xr-x 2 ravisaive ravisaive 4096 Apr 30 20:50 Music
09 drwxr-xr-x 2 ravisaive ravisaive 4096 May 9 17:54 Pictures
10 drwxrwxr-x 5 ravisaive ravisaive 4096 May 3 18:44 Tecmint.com
11 drwxr-xr-x 2 ravisaive ravisaive 4096 Apr 30 20:50 Templates

"ls -a"命令会列出文件夹里的所有内容,包括以"."开头的隐藏文件。
01 root@tecmint:~# ls -a
02
03 . .gnupg .dbus .goutputstream-PI5VVW .mission-control
04 .adobe deja-dup .grsync .mozilla .themes
05 .gstreamer-0.10 .mtpaint .thumbnails .gtk-bookmarks .thunderbird
06 .HotShots .mysql_history .htaccess .apport-ignore.xml .ICEauthority
07 .profile .bash_history .icons .bash_logout .fbmessenger
08 .jedit .pulse .bashrc .liferea_1.8 .pulse-cookie
09 .Xauthority .gconf .local .Xauthority.HGHVWW .cache
10 .gftp .macromedia .remmina .cinnamon .gimp-2.8
11 .ssh .xsession-errors .compiz .gnome teamviewer_linux.deb
12 .xsession-errors.old .config .gnome2 .zoncolor

注意:在Linux中,文件以“.”开头的就是隐藏文件,并且每个文件,文件夹,设备或者命令都是以文件对待。ls -l 命令输出:

d (代表了是目录).
rwxr-xr-x 是文件或者目录对所属用户,同一组用户和其它用户的权限。
上面例子中第一个ravisaive 代表了文件文件属于用户ravisaive
上面例子中的第二个ravisaive代表了文件文件属于用户组ravisaive
4096 代表了文件大小为4096字节.
May 8 01:06 代表了文件最后一次修改的日期和时间.
最后面的就是文件/文件夹的名字

更多"ls"例子请查看 15 linux中ls命令实例
Lesus
Lesus
翻译于 8天前

5人顶

顶 翻译的不错哦!
其它翻译版本(1)
2. lsblk命令

"lsblk"就是列出块设备。除了RAM外,以标准的树状输出格式,整齐地显示块设备。
01 root@tecmint:~# lsblk
02
03 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
04 sda 8:0 0 232.9G 0 disk
05 ├─sda1 8:1 0 46.6G 0 part /
06 ├─sda2 8:2 0 1K 0 part
07 ├─sda5 8:5 0 190M 0 part /boot
08 ├─sda6 8:6 0 3.7G 0 part [SWAP]
09 ├─sda7 8:7 0 93.1G 0 part /data
10 └─sda8 8:8 0 89.2G 0 part /personal
11 sr0 11:0 1 1024M 0 rom

“lsblk -l”命令以列表格式显示块设备(而不是树状格式)。
01 root@tecmint:~# lsblk -l
02
03 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
04 sda 8:0 0 232.9G 0 disk
05 sda1 8:1 0 46.6G 0 part /
06 sda2 8:2 0 1K 0 part
07 sda5 8:5 0 190M 0 part /boot
08 sda6 8:6 0 3.7G 0 part [SWAP]
09 sda7 8:7 0 93.1G 0 part /data
10 sda8 8:8 0 89.2G 0 part /personal
11 sr0 11:0 1 1024M 0 rom

注意:lsblk是最有用和最简单的方式来了解新插入的USB设备的名字,特别是当你在终端上处理磁盘/块设备时。
3. md5sum命令

“md5sum”就是计算和检验MD5信息签名。md5 checksum(通常叫做哈希)使用匹配或者验证文件的文件的完整性,因为文件可能因为传输错误,磁盘错误或者无恶意的干扰等原因而发生改变。
1 root@tecmint:~# md5sum teamviewer_linux.deb
2
3 47790ed345a7b7970fc1f2ac50c97002 teamviewer_linux.deb

注意:用户可以使用官方提供的和md5sum生成签名信息匹对以此检测文件是否改变。Md5sum没有sha1sum安全,这点我们稍后讨论。
Lesus
Lesus
翻译于 8天前

4人顶

顶 翻译的不错哦!
4. dd命令

“dd”命令代表了转换和复制文件。可以用来转换和复制文件,大多数时间是用来复制iso文件(或任何其它文件)到一个usb设备(或任何其它地方)中去,所以可以用来制作USB启动器。
1 root@tecmint:~# dd if=/home/user/Downloads/debian.iso of=/dev/sdb1 bs=512M; sync

注意:在上面的例子中,usb设备就是sdb1(你应该使用lsblk命令验证它,否则你会重写你的磁盘或者系统),请慎重使用磁盘的名,切忌。

dd 命令在执行中会根据文件的大小和类型 以及 usb设备的读写速度,消耗几秒到几分钟不等。
Lesus
Lesus
翻译于 8天前

3人顶

顶 翻译的不错哦!
5. uname命令

"uname"命令就是Unix Name的简写。显示机器名,操作系统和内核的详细信息。
1 root@tecmint:~# uname -a
2
3 Linux tecmint 3.8.0-19-generic #30-Ubuntu SMP Wed May 1 16:36:13 UTC 2013 i686 i686 i686 GNU/Linux

注意: uname显示内核类别, uname -a显示详细信息。上面的输出详细说明了uname -a

“Linux“: 机器的内核名
“tecmint“: 机器的节点名
“3.8.0-19-generic“: 内核发布版本
“#30-Ubuntu SMP“: 内核版本
“i686“: 处理器架构
“GNU/Linux“: 操作系统名

6. history命令

“history”命令就是历史记录。它显示了在终端中所执行过的所有命令的历史。
01 root@tecmint:~# history
02
03 1 sudo add-apt-repository ppa:tualatrix/ppa
04 2 sudo apt-get update
05 3 sudo apt-get install ubuntu-tweak
06 4 sudo add-apt-repository ppa:diesch/testing
07 5 sudo apt-get update
08 6 sudo apt-get install indicator-privacy
09 7 sudo add-apt-repository ppa:atareao/atareao
10 8 sudo apt-get update
11 9 sudo apt-get install my-weather-indicator
12 10 pwd
13 11 cd && sudo cp -r unity/6 /usr/share/unity/
14 12 cd /usr/share/unity/icons/
15 13 cd /usr/share/unity

注意:按住“CTRL + R”就可以搜索已经执行过的命令,它可以在你写命令时自动补全。
1 (reverse-i-search)`if': ifconfig
Lesus
Lesus
翻译于 8天前

2人顶

顶 翻译的不错哦!
7. sudo命令

“sudo”(super user do)命令允许授权用户执行超级用户或者其它用户的命令。通过在sudoers列表的安全策略来指定。
1 root@tecmint:~# sudo add-apt-repository ppa:tualatrix/ppa

注意:sudo 允许用户借用超级用户的权限,然而"su"命令实际上是允许用户以超级用户登录。所以sudo比su更安全。
并不建议使用sudo或者su来处理日常用途,因为它可能导致严重的错误如果你意外的做错了事,这就是为什么在linux社区流行一句话:

“To err is human, but to really foul up everything, you need root password.”

“人非圣贤孰能无过,但是拥有root密码就真的万劫不复了。” # 译

8. mkdir命令

“mkdir”(Make directory)命令在命名路径下创建新的目录。然而如果目录已经存在了,那么它就会返回一个错误信息"不能创建文件夹,文件夹已经存在了"("cannot create folder, folder already exists")
1 root@tecmint:~# mkdir tecmint

注意:目录只能在用户拥有写权限的目录下才能创建。mkdir:不能创建目录`tecmint`,因为文件已经存在了。(上面的输出中不要被文件迷惑了,你应该记住我开头所说的-在linux中,文件,文件夹,驱动,命令,脚本都视为文件)
Lesus
Lesus
翻译于 8天前

5人顶

顶 翻译的不错哦!
9. touch 命令

“touch”命令代表了将文件的访问和修改时间更新为当前时间。touch命令只会在文件不存在的时候才会创建它。如果文件已经存在了,它会更新时间戳,但是并不会改变文件的内容。
1 root@tecmint:~# touch tecmintfile

注意:touch 可以用来在用户拥有写权限的目录下创建不存在的文件。
10. chmod 命令

“chmod”命令就是改变文件的模式位。chmod会根据要求的模式来改变每个所给的文件,文件夹,脚本等等的文件模式(权限)。

在文件(文件夹或者其它,为了简单起见,我们就使用文件)中存在3中类型的权限
1 Read (r)=4
2 Write(w)=2
3 Execute(x)=1

所以如果你想给文件只读权限,就设置为'4';只写权限,设置权限为'2';只执行权限,设置为1; 读写权限,就是4+2 = 6, 以此类推。

现在需要设置3种用户和用户组权限。第一个是拥有者,然后是用户所在的组,最后是其它用户。
1 rwxr-x--x abc.sh

这里root的权限是 rwx(读写和执行权限),
所属用户组权限是 r-x (只有读和执行权限, 没有写权限),
对于其它用户权限是 -x(只有只执行权限)

为了改变它的权限,为拥有者,用户所在组和其它用户提供读,写,执行权限。
1 root@tecmint:~# chmod 777 abc.sh

三种都只有读写权限
1 root@tecmint:~# chmod 666 abc.sh

拥有者用户有读写和执行权限,用户所在的组和其它用户只有可执行权限
1 root@tecmint:~# chmod 711 abc.sh

注意:对于系统管理员和用户来说,这个命令是最有用的命令之一了。在多用户环境或者服务器上,对于某个用户,如果设置了文件不可访问,那么这个命令就可以解决,如果设置了错误的权限,那么也就提供了为授权的访问。
Lesus
Lesus
翻译于 8天前

5人顶

顶 翻译的不错哦!
11. chown命令

“chown”命令就是改变文件拥有者和所在用户组。每个文件都属于一个用户组和一个用户。在你的目录下,使用"ls -l",你就会看到像这样的东西。
1 root@tecmint:~# ls -l
2
3 drwxr-xr-x 3 server root 4096 May 10 11:14 Binary
4 drwxr-xr-x 2 server server 4096 May 13 09:42 Desktop

在这里,目录Binary属于用户"server",和用户组"root",而目录"Desktop"属于用户“server”和用户组"server"

“chown”命令用来改变文件的所有权,所以仅仅用来管理和提供文件的用户和用户组授权。
1 root@tecmint:~# chown server:server Binary
2
3 drwxr-xr-x 3 server server 4096 May 10 11:14 Binary
4 drwxr-xr-x 2 server server 4096 May 13 09:42 Desktop

注意:“chown”所给的文件改变用户和组的所有权到新的拥有者或者已经存在的用户或者用户组。
Lesus
Lesus
翻译于 8天前

2人顶

顶 翻译的不错哦!
12. apt命令

Debian系列以“apt”命令为基础,“apt”代表了Advanced Package Tool。APT是一个为Debian系列系统(Ubuntu,Kubuntu等等)开发的高级包管理器,在Gnu/Linux系统上,它会为包自动地,智能地搜索,安装,升级以及解决依赖。
01 root@tecmint:~# apt-get install mplayer
02
03 Reading package lists... Done
04 Building dependency tree
05 Reading state information... Done
06 The following package was automatically installed and is no longer required:
07 java-wrappers
08 Use 'apt-get autoremove' to remove it.
09 The following extra packages will be installed:
10 esound-common libaudiofile1 libesd0 libopenal-data libopenal1 libsvga1 libvdpau1 libxvidcore4
11 Suggested packages:
12 pulseaudio-esound-compat libroar-compat2 nvidia-vdpau-driver vdpau-driver mplayer-doc netselect fping
13 The following NEW packages will be installed:
14 esound-common libaudiofile1 libesd0 libopenal-data libopenal1 libsvga1 libvdpau1 libxvidcore4 mplayer
15 0 upgraded, 9 newly installed, 0 to remove and 8 not upgraded.
16 Need to get 3,567 kB of archives.
17 After this operation, 7,772 kB of additional disk space will be used.
18 Do you want to continue [Y/n]? y
01 root@tecmint:~# apt-get update
02
03 Hit http://ppa.launchpad.net raring Release.gpg
04 Hit http://ppa.launchpad.net raring Release.gpg
05 Hit http://ppa.launchpad.net raring Release.gpg
06 Hit http://ppa.launchpad.net raring Release.gpg
07 Get:1 http://security.ubuntu.com raring-security Release.gpg [933 B]
08 Hit http://in.archive.ubuntu.com raring Release.gpg
09 Hit http://ppa.launchpad.net raring Release.gpg
10 Get:2 http://security.ubuntu.com raring-security Release [40.8 kB]
11 Ign http://ppa.launchpad.net raring Release.gpg
12 Get:3 http://in.archive.ubuntu.com raring-updates Release.gpg [933 B]
13 Hit http://ppa.launchpad.net raring Release.gpg
14 Hit http://in.archive.ubuntu.com raring-backports Release.gpg

注意:上面的命令会导致系统整体的改变,所以需要root密码(查看提示符为"#",而不是“$”).和yum命令相比,Apt更高级和智能。

见名知义,apt-cache用来搜索包中是否包含子包mplayer, apt-get用来安装,升级所有的已安装的包到最新版。

关于apt-get 和 apt-cache命令更多信息,请查看 25 APT-GET和APT-CACHE命令
Lesus
Lesus
翻译于 8天前

3人顶

顶 翻译的不错哦!
13. tar命令

“tar”命令是磁带归档(Tape Archive),对创建一些文件的的归档和它们的解压很有用。
1 root@tecmint:~# tar -zxvf abc.tar.gz (记住'z'代表了.tar.gz)
1 root@tecmint:~# tar -jxvf abc.tar.bz2 (记住'j'代表了.tar.bz2)
1 root@tecmint:~# tar -cvf archieve.tar.gz(.bz2) /path/to/folder/abc

注意: "tar.gz"代表了使用gzip归档,“bar.bz2”使用bzip压缩的,它压缩的更好但是也更慢。

了解更多"tar 命令"的例子,请查看 18 Tar命名例子
14. cal 命令

“cal”(Calender),它用来显示当前月份或者未来或者过去任何年份中的月份。
1 root@tecmint:~# cal
2
3 May 2013
4 Su Mo Tu We Th Fr Sa
5 1 2 3 4
6 5 6 7 8 9 10 11
7 12 13 14 15 16 17 18
8 19 20 21 22 23 24 25
9 26 27 28 29 30 31

显示已经过去的月份,1835年2月
1 root@tecmint:~# cal 02 1835
2
3 February 1835
4 Su Mo Tu We Th Fr Sa
5 1 2 3 4 5 6 7
6 8 9 10 11 12 13 14
7 15 16 17 18 19 20 21
8 22 23 24 25 26 27 28

显示未来的月份,2145年7月。
1 root@tecmint:~# cal 07 2145
2
3 July 2145
4 Su Mo Tu We Th Fr Sa
5 1 2 3
6 4 5 6 7 8 9 10
7 11 12 13 14 15 16 17
8 18 19 20 21 22 23 24
9 25 26 27 28 29 30 31

注意: 你不需要往回调整日历50年,既不用复杂的数据计算你出生那天,也不用计算你的生日在哪天到来,[因为它的最小单位是月,而不是日]。
Lesus
Lesus
翻译于 8天前

3人顶

顶 翻译的不错哦!
15. date命令

“date”命令使用标准的输出打印当前的日期和时间,也可以深入设置。
1 root@tecmint:~# date
2
3 Fri May 17 14:13:29 IST 2013
1 root@tecmint:~# date --set='14 may 2013 13:57'
2
3 Mon May 13 13:57:00 IST 2013

注意:这个命令在脚本中十分有用,以及基于时间和日期的脚本更完美。而且在终端中改变日期和时间,让你更专业!!!(当然你需要root权限才能操作这个,因为它是系统整体改变)
16. cat命令

“cat”代表了连结(Concatenation),连接两个或者更多文本文件或者以标准输出形式打印文件的内容。
1 root@tecmint:~# cat a.txt b.txt c.txt d.txt abcd.txt
1 root@tecmint:~# cat abcd.txt
2 ....
3 contents of file abcd
4 ...

注意:“>>”和“>”调用了追加符号。它们用来追加到文件里,而不是显示在标准输出上。“>”符号会删除已存在的文件,然后创建一个新的文件。所以因为安全的原因,建议使用“>>”,它会写入到文件中,而不是覆盖或者删除。
Lesus
Lesus
翻译于 8天前

3人顶

顶 翻译的不错哦!

在深入探究之前,我必须让你知道通配符(你应该知道通配符,它出现在大多数电视选秀中)。通配符是shell的特色,和任何GUI文件管理器相比,它使命令行更强大有力!如你所看到那样,在一个图形文件管理器中,你想选择一大组文件,你通常不得不使用你的鼠标来选择它们。这可能觉得很简单,但是事实上,这种情形很让人沮丧!

例如,假如你有一个有很多很多各种类型的文件和子目录的目录,然后你决定移动所有文件名中包含“Linux”字样的HTML文件到另外一个目录。如何简单的完成这个?如果目录中包含了大量的不同名的HTML文件,你的任务很巨大,而不是简单了。

在LInux CLI中,这个任务就很简单,就好像只移动一个HTML文件,因为有shell的通配符,才会如此简单。这些是特殊的字符,允许你选择匹配某种字符模式的文件名。它帮助你来选择,即使是大量文件名中只有几个字符,而且在大多数情形中,它比使用鼠标选择文件更简单。

这里就是常用通配符列表:
1 Wildcard Matches
2 * 零个或者更多字符
3 ? 恰好一个字符
4 [abcde] 恰好列举中的一个字符
5 [a-e] 恰好在所给范围中的一个字符
6 [!abcde] 任何字符都不在列举中
7 [!a-e] 任何字符都不在所给的范围中
8 {debian,linux} 恰好在所给选项中的一整个单词

! 叫做非,带'!'的反向字符串为真

更多请阅读Linux cat 命令的实例 13 Linux中cat命令实例
Lesus
Lesus
翻译于 8天前

3人顶

顶 翻译的不错哦!
17. cp 命令

“copy”就是复制。它会从一个地方复制一个文件到另外一个地方。
1 root@tecmint:~# cp /home/user/Downloads abc.tar.gz /home/user/Desktop (Return 0 when sucess)

注意: cp,在shell脚本中是最常用的一个命令,而且它可以使用通配符(在前面一块中有所描述),来定制所需的文件的复制。
18. mv 命令

“mv”命令将一个地方的文件移动到另外一个地方去。
1 root@tecmint:~# mv /home/user/Downloads abc.tar.gz /home/user/Desktop (Return 0 when sucess)

注意:mv 命令可以使用通配符。mv需谨慎使用,因为移动系统的或者未授权的文件不但会导致安全性问题,而且可能系统崩溃。
19. pwd 命令

“pwd”(print working directory),在终端中显示当前工作目录的全路径。
1 root@tecmint:~# pwd
2
3 /home/user/Desktop

注意: 这个命令并不会在脚本中经常使用,但是对于新手,当从连接到nux很久后在终端中迷失了路径,这绝对是救命稻草。
Lesus
Lesus
翻译于 8天前

3人顶

顶 翻译的不错哦!
20. cd 命令

最后,经常使用的“cd”命令代表了改变目录。它在终端中改变工作目录来执行,复制,移动,读,写等等操作。
1 root@tecmint:~# cd /home/user/Desktop
1 server@localhost:~$ pwd
2
3 /home/user/Desktop

注意: 在终端中切换目录时,cd就大显身手了。“cd ~”会改变工作目录为用户的家目录,而且当用户发现自己在终端中迷失了路径时,非常有用。“cd ..”从当前工作目录切换到(当前工作目录的)父目录。

这些命令肯定会让你在Linux上很舒服。但是这并不是结束。不久,我就会写一些其它的针对于中级用户的有用命令。例如,如果你熟练使用这些命令,欢呼吧,少年,你会发现你已从小白级别提升为了中级用户了。在下篇文章,我会介绍像“kill”,"ps","grep"等等命令,期待吧,我不会让你失望的。

 

 

增量级linux命令 写道
21. 命令: Find

搜索指定目录下的文件,从开始于父目录,然后搜索子目录。
01 root@tecmint:~# find -name *.sh
02
03 ./Desktop/load.sh
04 ./Desktop/test.sh
05 ./Desktop/shutdown.sh
06 ./Binary/firefox/run-mozilla.sh
07 ./Downloads/kdewebdev-3.5.8/quanta/scripts/externalpreview.sh
08 ./Downloads/kdewebdev-3.5.8/admin/doxygen.sh
09 ./Downloads/kdewebdev-3.5.8/admin/cvs.sh
10 ./Downloads/kdewebdev-3.5.8/admin/ltmain.sh
11 ./Downloads/wheezy-nv-install.sh

注意: `-name‘选项是搜索大小写敏感。可以使用`-iname‘选项,这样在搜索中可以忽略大小写。(*是通配符,可以搜索所有的文件;‘.sh‘你可以使用文件名或者文件名的一部分来制定输出结果)

01 root@tecmint:~# find -iname *.SH ( find -iname *.Sh / find -iname *.sH)
02
03 ./Desktop/load.sh
04 ./Desktop/test.sh
05 ./Desktop/shutdown.sh
06 ./Binary/firefox/run-mozilla.sh
07 ./Downloads/kdewebdev-3.5.8/quanta/scripts/externalpreview.sh
08 ./Downloads/kdewebdev-3.5.8/admin/doxygen.sh
09 ./Downloads/kdewebdev-3.5.8/admin/cvs.sh
10 ./Downloads/kdewebdev-3.5.8/admin/ltmain.sh
11 ./Downloads/wheezy-nv-install.sh
01 root@tecmint:~# find -name *.tar.gz
02
03 /var/www/modules/update/tests/aaa_update_test.tar.gz
04 ./var/cache/flashplugin-nonfree/install_flash_player_11_linux.i386.tar.gz
05 ./home/server/Downloads/drupal-7.22.tar.gz
06 ./home/server/Downloads/smtp-7.x-1.0.tar.gz
07 ./home/server/Downloads/noreqnewpass-7.x-1.2.tar.gz
08 ./usr/share/gettext/archive.git.tar.gz
09 ./usr/share/doc/apg/php.tar.gz
10 ./usr/share/doc/festival/examples/speech_pm_1.0.tar.gz
11 ./usr/share/doc/argyll/examples/spyder2.tar.gz
12 ./usr/share/usb_modeswitch/configPack.tar.gz

注意:以上命令查找根目录下和所有文件夹以及加载的设备的子目录下的所有包含‘tar.gz'的文件。

’find'命令的更详细信息请参考35 Find Command Examples in Linux
王瑞平
王瑞平
翻译于 8天前

1人顶

顶 翻译的不错哦!
22. 命令: grep

‘grep‘命令搜索指定文件中包含给定字符串或者单词的行。举例搜索‘/etc/passwd‘文件中的‘tecmint'
1 root@tecmint:~# grep tecmint /etc/passwd
2
3 tecmint:x:1000:1000:Tecmint,,,:/home/tecmint:/bin/bash

使用’-i'选项将忽略大小写。
1 root@tecmint:~# grep -i TECMINT /etc/passwd
2
3 tecmint:x:1000:1000:Tecmint,,,:/home/tecmint:/bin/bash

使用’-r'选项递归搜索所有自目录下包含字符串 “127.0.0.1“.的行。
01 root@tecmint:~# grep -r "127.0.0.1" /etc/
02
03 /etc/vlc/lua/http/.hosts:127.0.0.1
04 /etc/speech-dispatcher/modules/ivona.conf:#IvonaServerHost "127.0.0.1"
05 /etc/mysql/my.cnf:bind-address = 127.0.0.1
06 /etc/apache2/mods-available/status.conf: Allow from 127.0.0.1 ::1
07 /etc/apache2/mods-available/ldap.conf: Allow from 127.0.0.1 ::1
08 /etc/apache2/mods-available/info.conf: Allow from 127.0.0.1 ::1
09 /etc/apache2/mods-available/proxy_balancer.conf:# Allow from 127.0.0.1 ::1
10 /etc/security/access.conf:#+ : root : 127.0.0.1
11 /etc/dhcp/dhclient.conf:#prepend domain-name-servers 127.0.0.1;
12 /etc/dhcp/dhclient.conf:# option domain-name-servers 127.0.0.1;
13 /etc/init/network-interface.conf: ifconfig lo 127.0.0.1 up || true
14 /etc/java-6-openjdk/net.properties:# localhost & 127.0.0.1).
15 /etc/java-6-openjdk/net.properties:# http.nonProxyHosts=localhost|127.0.0.1
16 /etc/java-6-openjdk/net.properties:# localhost & 127.0.0.1).
17 /etc/java-6-openjdk/net.properties:# ftp.nonProxyHosts=localhost|127.0.0.1
18 /etc/hosts:127.0.0.1 localhost

注意:您还可以使用以下选项:

-w 搜索单词 (egrep -w ‘word1|word2‘ /path/to/file).
-c 用于统计满足要求的行 (i.e., total number of times the pattern matched) (grep -c ‘word‘ /path/to/file).
–color 彩色输出 (grep –color server /etc/passwd).

王瑞平
王瑞平
翻译于 8天前

3人顶

顶 翻译的不错哦!
23. 命令: man

‘man‘是系统帮助页。Man提供命令所有选项及用法的在线文档。几乎所有的命令都有它们的帮助页,例如:
01 root@tecmint:~# man man
02
03 MAN(1) Manual pager utils MAN(1)
04
05 NAME
06 man - an interface to the on-line reference manuals
07
08 SYNOPSIS
09 man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-m system[,...]] [-M path] [-S list] [-e extension] [-i|-I]
10 [--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justification] [-p
11 string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] [[section] page ...] ...
12 man -k [apropos options] regexp ...
13 man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...
14 man -f [whatis options] page ...
15 man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t] [-T[device]]
16 [-H[browser]] [-X[dpi]] [-Z] file ...
17 man -w|-W [-C file] [-d] [-D] page ...
18 man -c [-C file] [-d] [-D] page ...
19 man [-hV]

上面是man命令的系统帮助页,类似的有cat和ls的帮助页。

注意:系统帮助页是为了命令的使用和学习而设计的。
王瑞平
王瑞平
翻译于 8天前

2人顶

顶 翻译的不错哦!
24. 命令: ps

ps命令给出正在运行的某个进程的状态,每个进程有特定的id成为PID。
1 root@tecmint:~# ps
2
3 PID TTY TIME CMD
4 4170 pts/1 00:00:00 bash
5 9628 pts/1 00:00:00 ps

使用‘-A‘选项可以列出所有的进程及其PID。
01 root@tecmint:~# ps -A
02
03 PID TTY TIME CMD
04 1 ? 00:00:01 init
05 2 ? 00:00:00 kthreadd
06 3 ? 00:00:01 ksoftirqd/0
07 5 ? 00:00:00 kworker/0:0H
08 7 ? 00:00:00 kworker/u:0H
09 8 ? 00:00:00 migration/0
10 9 ? 00:00:00 rcu_bh
11 ....

注意:当你要知道有哪些进程在运行或者需要知道想杀死的进程PID时ps命令很管用。你可以把它与‘grep‘合用来查询指定的输出结果,例如:
1 root@tecmint:~# ps -A | grep -i ssh
2
3 1500 ? 00:09:58 sshd
4 4317 ? 00:00:00 sshd

ps命令与grep命令用管道线分割可以得到我们想要的结果。
王瑞平
王瑞平
翻译于 8天前

1人顶

顶 翻译的不错哦!
25. 命令: kill

也许你从命令的名字已经猜出是做什么的了,kill是用来杀死已经无关紧要或者没有响应的进程.它是一个非常有用的命令,而不是非常非常有用.你可能很熟悉Windows下要杀死进程可能需要频繁重启机器因为一个在运行的进程大部分情况下不能够杀死,即使杀死了进程也需要重新启动操作系统才能生效.但在linux环境下,事情不是这样的.你可以杀死一个进程并且重启它而不是重启整个操作系统.

杀死一个进程需要知道进程的PID.

假设你想杀死已经没有响应的‘apache2'进程,运行如下命令:
1 root@tecmint:~# ps -A | grep -i apache2
2
3 1285 ? 00:00:00 apache2

搜索‘apache2'进程,找到PID并杀掉它.例如:在本例中‘apache2'进程的PID是1285..
1 root@tecmint:~# kill 1285 (to kill the process apache2)

注意:每次你重新运行一个进程或者启动系统,每个进程都会生成一个新的PID.你可以使用ps命令获得当前运行进程的PID.

另一个杀死进程的方法是:
1 root@tecmint:~# pkill apache2

注意:kill需要PID作为参数,pkill可以选择应用的方式,比如指定进程的所有者等.
王瑞平
王瑞平
翻译于 8天前

1人顶

顶 翻译的不错哦!
26. 命令: whereis

whereis的作用是用来定位命令的二进制文件\资源\或者帮助页.举例来说,获得ls和kill命令的二进制文件/资源以及帮助页:
1 root@tecmint:~# whereis ls
2
3 ls: /bin/ls /usr/share/man/man1/ls.1.gz
1 root@tecmint:~# whereis kill
2
3 kill: /bin/kill /usr/share/man/man2/kill.2.gz /usr/share/man/man1/kill.1.gz

注意:当需要知道二进制文件保存位置时有用.
王瑞平
王瑞平
翻译于 8天前

1人顶

顶 翻译的不错哦!
27. 命令: service

‘service‘命令控制服务的启动、停止和重启,它让你能够不重启整个系统就可以让配置生效以开启、停止或者重启某个服务。

在Ubuntu上启动apache2 server:
1 root@tecmint:~# service apache2 start
2
3 * Starting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
4 httpd (pid 1285) already running [ OK ]
重启apache2 server:
1 root@tecmint:~# service apache2 restart
2
3 * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
4 ... waiting .apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName [ OK ]
停止apache2 server:
1 root@tecmint:~# service apache2 stop
2
3 * Stopping web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
4 ... waiting [ OK ]

注意:要想使用service命令,进程的脚本必须放在‘/etc/init.d‘,并且路径必须在指定的位置。

如果要运行“service apache2 start”实际上实在执行“service /etc/init.d/apache2 start”.
王瑞平
王瑞平
翻译于 7天前

1人顶

顶 翻译的不错哦!
28. 命令: alias

alias是一个系统自建的shell命令,允许你为名字比较长的或者经常使用的命令指定别名。

我经常用‘ls -l‘命令,它有五个字符(包括空格)。于是我为它创建了一个别名‘l'。
1 root@tecmint:~# alias l='ls -l'

试试它是否能用:
01 root@tecmint:~# l
02
03 total 36
04 drwxr-xr-x 3 tecmint tecmint 4096 May 10 11:14 Binary
05 drwxr-xr-x 3 tecmint tecmint 4096 May 21 11:21 Desktop
06 drwxr-xr-x 2 tecmint tecmint 4096 May 21 15:23 Documents
07 drwxr-xr-x 8 tecmint tecmint 4096 May 20 14:56 Downloads
08 drwxr-xr-x 2 tecmint tecmint 4096 May 7 16:58 Music
09 drwxr-xr-x 2 tecmint tecmint 4096 May 20 16:17 Pictures
10 drwxr-xr-x 2 tecmint tecmint 4096 May 7 16:58 Public
11 drwxr-xr-x 2 tecmint tecmint 4096 May 7 16:58 Templates
12 drwxr-xr-x 2 tecmint tecmint 4096 May 7 16:58 Videos

去掉’l'别名,要使用unalias命令:
1 root@tecmint:~# unalias l

再试试:
1 root@tecmint:~# l
2
3 bash: l: command not found

开个玩笑,把一个重要命令的别名指定为另一个重要命令:
1 alias cd='ls -l' (set alias of ls -l to cd)
2 alias su='pwd' (set alias of pwd to su)
3 ....
4 (You can create your own)
5 ....

想想多么有趣,现在如果你的朋友敲入‘cd'命令,当他看到的是目录文件列表而不是改变目录;当他试图用’su‘命令时,他会进入当前目录。你可以随后去掉别名,向他解释以上情况。
王瑞平
王瑞平
翻译于 7天前

1人顶

顶 翻译的不错哦!
29.命令: df

报告系统的磁盘使用情况。在跟踪磁盘使用情况方面对于普通用户和系统管理员都很有用。 ‘df‘ 通过检查目录大小工作,但这一数值仅当文件关闭时才得到更新。
01 root@tecmint:~# df
02
03 Filesystem 1K-blocks Used Available Use% Mounted on
04 /dev/sda1 47929224 7811908 37675948 18% /
05 none 4 0 4 0% /sys/fs/cgroup
06 udev 1005916 4 1005912 1% /dev
07 tmpfs 202824 816 202008 1% /run
08 none 5120 0 5120 0% /run/lock
09 none 1014120 628 1013492 1% /run/shm
10 none 102400 44 102356 1% /run/user
11 /dev/sda5 184307 79852 94727 46% /boot
12 /dev/sda7 95989516 61104 91045676 1% /data
13 /dev/sda8 91953192 57032 87218528 1% /personal

‘df’命令的更多例子请参阅 12 df Command Examples in Linux.
30. 命令: du

估计文件的空间占用。 逐层统计文件(例如以递归方式)并输出摘要。
01 root@tecmint:~# du
02
03 8 ./Daily Pics/wp-polls/images/default_gradient
04 8 ./Daily Pics/wp-polls/images/default
05 32 ./Daily Pics/wp-polls/images
06 8 ./Daily Pics/wp-polls/tinymce/plugins/polls/langs
07 8 ./Daily Pics/wp-polls/tinymce/plugins/polls/img
08 28 ./Daily Pics/wp-polls/tinymce/plugins/polls
09 32 ./Daily Pics/wp-polls/tinymce/plugins
10 36 ./Daily Pics/wp-polls/tinymce
11 580 ./Daily Pics/wp-polls
12 1456 ./Daily Pics
13 36 ./Plugins/wordpress-author-box
14 16180 ./Plugins
15 12 ./May Articles 2013/Xtreme Download Manager
16 4632 ./May Articles 2013/XCache

注意: ‘df‘ 只显示文件系统的使用统计,但‘du‘统计目录内容。‘du‘命令的更详细信息请参阅10 du (Disk Usage) Commands.
无奈的钝刀
无奈的钝刀
翻译于 7天前

0人顶

顶 翻译的不错哦!
其它翻译版本(1)
31. 命令: rm

'rm' 标准移除命令。 rm 可以用来删除文件和目录。
删除目录
1 root@tecmint:~# rm PassportApplicationForm_Main_English_V1.0
2
3 rm: cannot remove `PassportApplicationForm_Main_English_V1.0': Is a directory

'rm' 不能直接删除目录,需要加上相应的'-rf'参数才可以。
1 root@tecmint:~# rm -rf PassportApplicationForm_Main_English_V1.0

警告: "rm -rf" 命令是一个破坏性的命令,假如你不小心删除一个错误的目录。一旦你使用'rm -rf' 删除一个目录,在目录中所有的文件包括目录本身会被永久的删除,所以使用这个命令要非常小心。
skyim
skyim
翻译于 7天前

0人顶

顶 翻译的不错哦!
其它翻译版本(1)
32. 命令: echo

echo 的功能正如其名,就是基于标准输出打印一段文本。它和shell无关,shell也不读取通过echo命令打印出的内容。然而在一种交互式脚本中,echo通过终端将信息传递给用户。它是在脚本语言,交互式脚本语言中经常用到的命令。
1 root@tecmint:~# echo "Tecmint.com is a very good website"
2
3 Tecmint.com is a very good website
创建一小段交互式脚本

1. 在桌面上新建一个文件,命名为 ‘interactive_shell.sh‘ (记住必须带 ‘.sh‘扩展名)。
2. 复制粘贴如下脚本代码,确保和下面的一致。
1 #!/bin/bash
2 echo "Please enter your name:"
3 read name
4 echo "Welcome to Linux $name"

接下来,设置执行权限并运行脚本。
1 root@tecmint:~# chmod 777 interactive_shell.sh
1 root@tecmint:~# ./interactive_shell.sh
2
3 Please enter your name:
4 Ravi Saive
5 Welcome to Linux Ravi Saive

注意: ‘#!/bin/bash‘ 告诉shell这是一个脚本,并且在脚本首行写上这句话是个好习惯。. ‘read‘ 读取给定的输出.
非常兔
非常兔
翻译于 8天前

1人顶

顶 翻译的不错哦!
33. 命令: passwd

这是一个很重要的命令,在终端中用来改变自己密码很有用。显然的,因为安全的原因,你需要知道当前的密码。
1 root@tecmint:~# passwd
2
3 Changing password for tecmint.
4 (current) UNIX password: ********
5 Enter new UNIX password: ********
6 Retype new UNIX password: ********
7 Password unchanged [这里表示密码未改变,例如:新密码=旧密码]
8 Enter new UNIX password: #####
9 Retype new UNIX password:#####
34. 命令: lpr

这个命令用来在命令行上将指定的文件在指定的打印机上打印。
1 root@tecmint:~# lpr -P deskjet-4620-series 1-final.pdf

注意: "lpq"命令让你查看打印机的状态(是开启状态还是关闭状态)和等待打印中的工作(文件)的状态。
Lesus
Lesus
翻译于 7天前

1人顶

顶 翻译的不错哦!
其它翻译版本(2)
35. 命令: cmp

比较两个任意类型的文件并将结果输出至标准输出。如果两个文件相同, ‘cmp‘默认返回0;如果不同,将显示不同的字节数和第一处不同的位置。

以下面两个文件为例:
file1.txt
1 root@tecmint:~# cat file1.txt
2
3 Hi My name is Tecmint
file2.txt
1 root@tecmint:~# cat file2.txt
2
3 Hi My name is tecmint [dot] com

比较一下这两个文件,看看命令的输出。
1 root@tecmint:~# cmp file1.txt file2.txt
2
3 file1.txt file2.txt differ: byte 15, line 1
36. 命令: wget

Wget是用于非交互式(例如后台)下载文件的免费工具.支持HTTP, HTTPS, FTP协议和 HTTP 代理。
使用wget下载ffmpeg
01 root@tecmint:~# wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2
02
03 --2013-05-22 18:54:52-- http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2
04 Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59
05 Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected.
06 HTTP request sent, awaiting response... 302 Found
07 Location: http://kaz.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2 [following]
08 --2013-05-22 18:54:54-- http://kaz.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2
09 Resolving kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)... 92.46.53.163
10 Connecting to kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)|92.46.53.163|:80... connected.
11 HTTP request sent, awaiting response... 200 OK
12 Length: 275557 (269K) [application/octet-stream]
13 Saving to: ‘ffmpeg-php-0.6.0.tbz2’
14
15 100%[===========================================================================>] 2,75,557 67.8KB/s in 4.0s
16
17 2013-05-22 18:55:00 (67.8 KB/s) - ‘ffmpeg-php-0.6.0.tbz2’ saved [275557/275557]
无奈的钝刀
无奈的钝刀
翻译于 7天前

0人顶

顶 翻译的不错哦!
37 命令: mount

mount 是一个很重要的命令,用来挂载不能自动挂载的文件系统。你需要root权限挂载设备。

在插入你的文件系统后,首先运行"lsblk"命令,识别出你的设备,然后把分配的设备名记下来。
01 root@tecmint:~# lsblk
02
03 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
04 sda 8:0 0 931.5G 0 disk
05 ├─sda1 8:1 0 923.6G 0 part /
06 ├─sda2 8:2 0 1K 0 part
07 └─sda5 8:5 0 7.9G 0 part [SWAP]
08 sr0 11:0 1 1024M 0 rom
09 sdb 8:16 1 3.7G 0 disk
10 └─sdb1 8:17 1 3.7G 0 part

从这个输出上来看,很明显我插入的是4GB的U盘,因而“sdb1”就是要挂载上来的文件系统。以root用户操作,然后切换到/dev目录,它是所有文件系统挂载的地方。
1 root@tecmint:~# su
2 Password:
1 root@tecmint:~# cd /dev

创建一个任何名字的目录,但是最好和引用相关。
1 root@tecmint:~# mkdir usb

现在将“sdb1”文件系统挂载到“usb”目录.
1 root@tecmint:~# mount /dev/sdb1 /dev/usb

现在你就可以从终端进入到/dev/usb或者通过X窗口系统从挂载目录访问文件。
是时候让程序猿见识见识Linux环境是多么丰富了!
Lesus
Lesus
翻译于 7天前

0人顶

顶 翻译的不错哦!
38. 命令: gcc

gcc 是Linux环境下C语言的内建编译器。下面是一个简单的C程序,在桌面上保存为Hello.c (记住必须要有‘.c‘扩展名)。
1 #include <stdio.h>
2 int main()
3 {
4 printf("Hello world\n");
5 return 0;
6 }
编译
1 root@tecmint:~# gcc Hello.c
运行
1 root@tecmint:~# ./a.out
2
3 Hello world

注意: 编译C程序时,输出会自动保存到一个名为“a.out”的新文件,因此每次编译C程序 “a.out”都会被修改。 因此编译期间最好定义输出文件名.,这样就不会有覆盖输出文件的风险了。
用这种方法编译
1 root@tecmint:~# gcc -o Hello Hello.c

这里‘-o‘将输出写到‘Hello‘文件而不是 ‘a.out‘。再运行一次。
1 root@tecmint:~# ./Hello
2
3 Hello world
39. 命令: g++

g++是C++的内建编译器。下面是一个简单的C++程序,在桌面上保存为Add.cpp (记住必须要有‘.cpp‘扩展名)。
01 #include <iostream>
02
03 using namespace std;
04
05 int main()
06 {
07 int a;
08 int b;
09 cout<<"Enter first number:\n";
10 cin >> a;
11 cout <<"Enter the second number:\n";
12 cin>> b;
13 cin.ignore();
14 int result = a + b;
15 cout<<"Result is"<<" "<<result<<endl;
16 cin.get();
17 return 0;
18 }
编译
1 root@tecmint:~# g++ Add.cpp
运行
1 root@tecmint:~# ./a.out
2
3 Enter first number:
4 ...
5 ...

注意:编译C++程序时,输出会自动保存到一个名为“a.out”的新文件,因此每次编译C++程序 “a.out”都会被修改。 因此编译期间最好定义输出文件名.,这样就不会有覆盖输出文件的风险了。
用这种方法编译
1 root@tecmint:~# g++ -o Add Add.cpp
运行
1 root@tecmint:~# ./Add
2
3 Enter first number:
4 ...
5 ...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
2 楼 vb2005xu 2015-06-02  
http://wpl12.blog.163.com/blog/static/20707145201252511597659/  drupal7 模块开发
1 楼 vb2005xu 2013-11-02  
数据URL可以直接嵌入到HTML/CSS/JS中,以节省大量的 HTTP请求。 下面的这段代码可利用$file轻松创建数据URL。
function data_uri($file, $mime) {
  $contents=file_get_contents($file);
  $base64=base64_encode($contents);
  echo "data:$mime;base64,$base64";
}

相关推荐

    Linux获取10个你最常用的终端命令列表

    几周前我偶然发现了这个Reddit线程一个简短的Bash片段告诉我如何获得我最常用的终端命令的列表。 history '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] CMD[a]/count*100 % a; }' column 细节并不是非常...

    linux常用命令&系统维护软件运维&常用shell脚本.zip

    Linux教程,主要内容:Linux 常见命令、Linux 系统的常见运维工作、部署在 Linux 系统上的软件运维。 Linux 环境下的常见 Shell 脚本操作片段。

    linux常用命令

    linux常用命令,源描述可以把电子书的概述、源代码的说明、文档的片段填在这里,描述详细会获得我们的推荐,更容易被他人下载!描述大于20字不是问题吧!

    最新Elasticsearch+x-pack+head+kibana+bigdesklogstash+java开发经验和片段完整部署开发分享

    1.es常用命令 2.es配置详解 3.ik分词器安装 4.基于x-pack的权限模块安装配置 5.head插件安装 6.kibana安装 7.bigdesk安装 8.logstash安装部署(分为简单和高级例子) 9.java开发经验和片段 10.searchguard安装&部署&...

    VisualASM6.0

    VisualASM60 是一款便捷的汇编语言IDE。 1,支持可视化的编译连接; 2,支持调用Debug TD进行调试,省去了开发人员命令输入的过程。 3,关键字变色:寄存器、...8, 各种常用小工具. 9,完全绿色,无需安装,不写注册表。

    VisualASM_6.0_Build_08.0117.3

    VisualASM60 是一款便捷的汇编语言IDE. 1,支持可视化的编译连接. 2,支持调用Debug TD进行调试,省去了开发人员命令输入的过程. 3,关键字变色:寄存器,CPU指令集,FPU...8,各种常用小工具. 9,完全绿色,无需安装,不写注册表.

    Redis列表类型的常用命令小结

    列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加、删除、获取元素,或者某个片段。在redis中,实际上是使用双向链表的方式实现的,所以在列表两端添加删除元素的时间复杂度是O(1),获取的元素越...

    xtpl-emmet:sublime 的 xTemplate 代码片段

    xtpl emmet借助强大的 Emmet 插件,提供 xtemplate 中常用代码片段,从而提高开发效率。使用方法基于 Emmet 插件,以 Sublime text 为例:确保已经安装了 Emmet 插件,并且可以正常使用打开菜单 Preferences→...

    linux操作系统命令大全

    操作系统根据每个任务的优先顺序为每个任务分配合适的时间片段,每个时间片段大约都有零点几秒,虽然看起来很短,但实际上已经足够电脑完成成千上万的命令。每个任务都会被系统运行一段时间,然后挂起,系统转而处理...

    php常用的工具开发整理

    首先,可以用记事本来开发。 记事本每个人的电脑上都有,也...二、拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时调用。 三、支持 VIM 模式,可以使用Vim模式下的多数命令。支持宏,简单

    SSD1316中文数据手册-128x39点阵OLED/PLED控制器中文datashheet

    SSD1316中文数据手册,OLED-12832常用,引脚定义接口时序指令集部分已翻译。 SSD1316是一款单芯片CMOS OLED/PLED驱动器,带有有机/聚合物发光控制器二极管点阵图形显示系统。它由128个片段和39个公域组成。这个IC是...

    IDEA-Java集成开发工具-舒适化配置

    - 设置 Shell 的环境变量,方便自定义路径和常用命令。 - 配置自动补全功能,减少命令输入的时间和错误。 - 添加自定义 Shell 脚本来完成特定任务或简化操作。 4. 版本控制配置: - 配置版本控制工具,如 Git,...

    Surf-PhpStorm

    Tieba 常用代码片段 for PhpStorm ##安装 克隆本项目到本地 找到C:\Users\yourname\.WebIde60[取决于你的版本,也可能是WebIde80]\config\templates,复制项目的user.xml至此文件夹 重启PhpStorm ##使用 下面是可用...

    atom-phrase:收集短语并快速参考

    开发阶段Α短语常用的词组注册表。为什么? 短语是可行的代码片段或您稍后要引用的示例代码。 当您尝试出错时,请编写一些代码并得出一些结论。 您想将该有用的短语保存到中心位置。 该软件包可帮助您在Atom编辑器中...

    leetcode中国-xiao-awesome:很棒的github开源项目

    leetcode中国 xiao-awesome awesome ...Python常用的代码片段: Python常用的代码片段: 使用redis实现的队列: 最好的Python大全: Golang golang工程师路线图: golang知识图谱: gopool连接池: golangy优雅

    SublimeText3180 For Mac

    )的功能,可以将常用的代码片段保存起来,在需要时随时调用。支持 VIM 模式,可以使用Vim模式下的多数命令。支持宏,简单地说就是把操作录制下来或者自己编写命令,然后播放刚才录制的操作或者命令。

    Sublime Text 2

    Sublime Text 2 支持多种编程语言的语法高亮、拥有优秀的代码自动完成功能,还拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时调用。支持 VIM 模式,可以使用Vim模式下的多数命令。支持...

    ace.js实现的编辑器

    此外,ace.js编辑器支持代码片段功能,允许开发者预定义一些常用的代码片段,通过简单的快捷键或命令进行插入,减少了重复劳动。并且,ace.js还允许在同一时间内,对多个位置进行编辑,提高了代码编辑的效率和灵活性...

    Python 代码调试技巧示例代码

    Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug。...pdb 提供了一些常用的调试命令,详情见表 1。 表 1. pdb 常用命令 命令 解释 break 或 b 设置断点

    java8集合源码-Linux-Useful-Commands:Linux-有用的命令

    上最常用的命令集。 对于刚接触 linux 操作系统的人来说,这些将是完全有帮助的。 我相信这个片段可以为那些需要在 linux 中创建开发环境以进行 Web 开发的人节省大量时间。 宽带和wifi设置 sudo pppoeconf 要启用 ...

Global site tag (gtag.js) - Google Analytics