\ No newline at end of file
diff --git a/command/reject.md b/command/reject.md
new file mode 100644
index 0000000000..c28a60fdbb
--- /dev/null
+++ b/command/reject.md
@@ -0,0 +1,30 @@
+reject
+===
+
+指示打印系统拒绝发往指定目标打印机的打印任务
+
+## 补充说明
+
+**reject命令** 属于CUPS套件,用于指示打印系统拒绝发往指定目标打印机的打印任务。
+
+### 语法
+
+```
+reject(选项)(参数)
+```
+
+### 选项
+
+```
+-E:当连接到服务器时强制使用加密;
+-U:指定连接服务器时使用的用户名;
+-h:指定连接服务器名和端口号;
+-r:指定拒绝打印任务的原因。
+```
+
+### 参数
+
+目标:指定目标打印机。
+
+
+
\ No newline at end of file
diff --git a/command/restorecon.md b/command/restorecon.md
index cac35689ae..312ca00752 100644
--- a/command/restorecon.md
+++ b/command/restorecon.md
@@ -31,18 +31,18 @@ restorecon [-iFnrRv] [-e excludedir ] [-o filename ] [-f filename | pathname...]
假设CentOS安装了apache,网页默认的主目录是`/var/www/html`,我们经常遇到这样的问题,在其他目录中创建了一个网页文件,然后用mv移动到网页默认目录`/var/www/html`中,但是在浏览器中却打不开这个文件,这很可能是因为这个文件的SELinux配置信息是继承原来那个目录的,与`/var/www/html`目录不同,使用mv移动的时候,这个SELinux配置信息也一起移动过来了,从而导致无法打开页面,具体请看下面的实例:
/*使用CentOS举例,如果默认没有安装apache,确保网络连接,使用下面的命令安装*/
-root@linuxde.net ~ install httpd
+[root@jsdig.com ~]# yum install httpd
/*我们在root的家目录新建一个html文件*/
-root@linuxde.net ~
+[root@jsdig.com ~]# pwd
/root
-root@linuxde.net ~ index.html
+[root@jsdig.com ~]# vi index.html
/*随便输入一段文字,保存退出*/
-welcome to www.linuxde.net
+welcome to www.jsdig.com
/*将这个文件mv到网页默认目录下*/
-[root@linuxde.net ~]# mv index.html /var/www/html/
+[root@jsdig.com ~]# mv index.html /var/www/html/
/*
* 这个时候我们使用firefox浏览器输入127.0.0.1/index.html发现打不开,
@@ -55,14 +55,14 @@ welcome to www.linuxde.net
type=AVC msg=audit(1378974214.610:465): avc: denied { open } for pid=2359 comm="httpd" path="/var/www/html/index.html" dev="sda1" ino=1317685 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
/*使用ls -Z也可以看出,文件和目录的SELinux信息不匹配*/
-[root@linuxde.net html]# ls -Z /var/www/html/
+[root@jsdig.com html]# ls -Z /var/www/html/
.... unconfined_u:object_r:admin_home_t:s0 index.html
-[root@linuxde.net html]# ls -Zd /var/www/html/
+[root@jsdig.com html]# ls -Zd /var/www/html/
.... system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
/*使用restorecon来恢复网页主目录中所有文件的SELinux配置信息(如果目标为一个目录,可以添加-R参数递归)*/
-[root@linuxde.net html]# restorecon -R /var/www/html/
+[root@jsdig.com html]# restorecon -R /var/www/html/
```
diff --git a/command/rmmod.md b/command/rmmod.md
index af52517993..c5661693eb 100644
--- a/command/rmmod.md
+++ b/command/rmmod.md
@@ -31,7 +31,7 @@ rmmod(选项)(参数)
用rmmod命令主要用于卸载正在使用的Linux内核模块,与`modprobe -r`命令相似,如下所示:
```
-root@localhost boot | grep raid1
+[root@localhost boot]# lsmod | grep raid1
raid1 25153 0
[root@localhost boot]# rmmod raid1
diff --git a/command/rsync.md b/command/rsync.md
new file mode 100644
index 0000000000..2a0da87359
--- /dev/null
+++ b/command/rsync.md
@@ -0,0 +1,226 @@
+rsync
+===
+
+远程数据同步工具
+
+## 补充说明
+
+**rsync命令** 是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。
+
+### 语法
+
+```
+rsync [OPTION]... SRC DEST
+rsync [OPTION]... SRC [USER@]host:DEST
+rsync [OPTION]... [USER@]HOST:SRC DEST
+rsync [OPTION]... [USER@]HOST::SRC DEST
+rsync [OPTION]... SRC [USER@]HOST::DEST
+rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
+```
+
+对应于以上六种命令格式,rsync有六种不同的工作模式:
+
+1. 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:`rsync -a /data /backup`
+2. 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:`rsync -avz *.c foo:src`
+3. 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:`rsync -avz foo:src/bar /data`
+4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:`rsync -av root@192.168.78.192::www /databack`
+5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:`rsync -av /databack root@192.168.78.192::www`
+6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:`rsync -v rsync://192.168.78.192/www`
+
+### 选项
+
+```
+-v, --verbose 详细模式输出。
+-q, --quiet 精简输出模式。
+-c, --checksum 打开校验开关,强制对文件传输进行校验。
+-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
+-r, --recursive 对子目录以递归模式处理。
+-R, --relative 使用相对路径信息。
+-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
+--backup-dir 将备份文件(如~filename)存放在在目录下。
+-suffix=SUFFIX 定义备份文件前缀。
+-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
+-l, --links 保留软链结。
+-L, --copy-links 想对待常规文件一样处理软链结。
+--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
+--safe-links 忽略指向SRC路径目录树以外的链结。
+-H, --hard-links 保留硬链结。
+-p, --perms 保持文件权限。
+-o, --owner 保持文件属主信息。
+-g, --group 保持文件属组信息。
+-D, --devices 保持设备文件信息。
+-t, --times 保持文件时间信息。
+-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
+-n, --dry-run现实哪些文件将被传输。
+-w, --whole-file 拷贝文件,不进行增量检测。
+-x, --one-file-system 不要跨越文件系统边界。
+-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
+-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
+--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
+-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
+--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
+--delete 删除那些DST中SRC没有的文件。
+--delete-excluded 同样删除接收端那些被该选项指定排除的文件。
+--delete-after 传输结束以后再删除。
+--ignore-errors 及时出现IO错误也进行删除。
+--max-delete=NUM 最多删除NUM个文件。
+--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
+--force 强制删除目录,即使不为空。
+--numeric-ids 不将数字的用户和组id匹配为用户名和组名。
+--timeout=time ip超时时间,单位为秒。
+-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
+--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
+--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
+-T --temp-dir=DIR 在DIR中创建临时文件。
+--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
+-P 等同于 --partial。
+--progress 显示备份过程。
+-z, --compress 对备份的文件在传输时进行压缩处理。
+--exclude=PATTERN 指定排除不需要传输的文件模式。
+--include=PATTERN 指定不排除而需要传输的文件模式。
+--exclude-from=FILE 排除FILE中指定模式的文件。
+--include-from=FILE 不排除FILE指定模式匹配的文件。
+--version 打印版本信息。
+--address 绑定到特定的地址。
+--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
+--port=PORT 指定其他的rsync服务端口。
+--blocking-io 对远程shell使用阻塞IO。
+-stats 给出某些文件的传输状态。
+--progress 在传输时现实传输过程。
+--log-format=formAT 指定日志文件格式。
+--password-file=FILE 从FILE中得到密码。
+--bwlimit=KBPS 限制I/O带宽,KBytes per second。
+-h, --help 显示帮助信息。
+```
+
+### 实例
+
+ **SSH方式**
+
+首先在服务端启动ssh服务:
+
+```
+service sshd start
+启动 sshd: [确定]
+```
+
+ **使用rsync进行同步**
+
+接下来就可以在客户端使用rsync命令来备份服务端上的数据了,SSH方式是通过系统用户来进行备份的,如下:
+
+```
+rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
+work@172.16.78.192's password:
+receiving file list ...
+5 files to consider
+test/
+a
+0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
+b
+67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
+c
+0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
+dd
+100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
+sent 96 bytes received 98190 bytes 11563.06 bytes/sec
+total size is 100663363 speedup is 1024.19
+```
+
+上面的信息描述了整个的备份过程,以及总共备份数据的大小。
+
+ **后台服务方式**
+
+启动rsync服务,编辑`/etc/xinetd.d/rsync`文件,将其中的`disable=yes`改为`disable=no`,并重启xinetd服务,如下:
+
+```
+vi /etc/xinetd.d/rsync
+
+#default: off
+# description: The rsync server is a good addition to an ftp server, as it \
+# allows crc checksumming etc.
+service rsync {
+disable = no
+socket_type = stream
+wait = no
+user = root
+server = /usr/bin/rsync
+server_args = --daemon
+log_on_failure += USERID
+}
+```
+
+```
+/etc/init.d/xinetd restart
+停止 xinetd: [确定]
+启动 xinetd: [确定]
+```
+
+创建配置文件,默认安装好rsync程序后,并不会自动创建rsync的主配置文件,需要手工来创建,其主配置文件为“/etc/rsyncd.conf”,创建该文件并插入如下内容:
+
+```
+vi /etc/rsyncd.conf
+
+uid=root
+gid=root
+max connections=4
+log file=/var/log/rsyncd.log
+pid file=/var/run/rsyncd.pid
+lock file=/var/run/rsyncd.lock
+secrets file=/etc/rsyncd.passwd
+hosts deny=172.16.78.0/22
+
+[www]
+comment= backup web
+path=/www
+read only = no
+exclude=test
+auth users=work
+```
+
+创建密码文件,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为“username:password”,用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。
+
+```
+echo "work:abc123" > /etc/rsyncd.passwd
+chmod 600 /etc/rsyncd.passwd
+```
+
+备份,完成以上工作,现在就可以对数据进行备份了,如下:
+
+```
+rsync -avz --progress --delete work@172.16.78.192::www /databack/experiment/rsync
+
+Password:
+receiving file list ...
+6 files to consider
+./ files...
+a
+0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6)
+b
+67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6)
+c
+0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6)
+dd
+100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6)
+sent 172 bytes received 98276 bytes 17899.64 bytes/sec
+total size is 150995011 speedup is 1533.75
+```
+
+恢复,当服务器的数据出现问题时,那么这时就需要通过客户端的数据对服务端进行恢复,但前提是服务端允许客户端有写入权限,否则也不能在客户端直接对服务端进行恢复,使用rsync对数据进行恢复的方法如下:
+
+```
+rsync -avz --progress /databack/experiment/rsync/ work@172.16.78.192::www
+
+Password:
+building file list ...
+6 files to consider
+./
+a
+b
+67 100% 0.00kB/s 0:00:00 (2, 66.7% of 6)
+c
+sent 258 bytes received 76 bytes 95.43 bytes/sec
+total size is 150995011 speedup is 452080.87
+```
+
+
+
\ No newline at end of file
diff --git a/command/screen.md b/command/screen.md
index cf1707e214..411909ec69 100644
--- a/command/screen.md
+++ b/command/screen.md
@@ -87,8 +87,8 @@ C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上
流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。
```
-root@TS-DEV ~ install screen
-root@TS-DEV ~ -qa|grep screen
+[root@TS-DEV ~]# yum install screen
+[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[root@TS-DEV ~]#
```
@@ -192,7 +192,7 @@ Screen允许使用快捷键C-a s锁定会话。锁定以后,再进行任何输
在Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。关于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:
```
-root@TS-DEV ~ www.baidu.com
+[root@TS-DEV ~]# screen -S sandy -X screen ping www.baidu.com
```
这个命令在一个叫做sandy的screen会话中创建一个新窗口,并在其中运行ping命令。
diff --git a/command/sed.md b/command/sed.md
index 8412a28316..59dc7a4226 100644
--- a/command/sed.md
+++ b/command/sed.md
@@ -12,8 +12,8 @@ sed
**命令格式**
```
-sed options' file(s)
-sed options
+sed [options] 'command' file(s)
+sed [options] -f scriptfile file(s)
```
### 选项
@@ -79,7 +79,7 @@ sed options
**$** 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
**.** 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
**** * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
- **]ed/匹配sed和Sed。
+ **[]** 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
**[^]** 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
**\(..\)** 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
**&** 保存搜索字符用来替换其他字符,如s/love/ **&** /,love这成 **love** 。
@@ -199,14 +199,14 @@ sed 's/^192.168.0.1/&localhost/' file
匹配给定样式的其中一部分:
```
-echo this is digit 7 in a number | sed 's/digit \(0-9/\1/'
+echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
this is 7 in a number
```
命令中 digit 7,被替换成了 7。样式匹配到的子串是 7,\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 **\1** ,依此类推匹配到的第二个结果就是 **\2** ,例如:
```
-echo aaa BBB | sed 's/\(a-z \(A-Z/\2 \1/'
+echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
BBB aaa
```
@@ -363,7 +363,7 @@ sed -e '/test/h' -e '/check/x' file
sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
```
-sed options
+sed [options] -f scriptfile file(s)
```
### 打印奇数行或偶数行
diff --git a/command/semanage.md b/command/semanage.md
index 4a8c14d0b5..df66c93fa3 100644
--- a/command/semanage.md
+++ b/command/semanage.md
@@ -51,9 +51,9 @@ drwxr-xr-x root root root:object_r:var_t /srv/samba
```
semanage fcontext -l | grep '/srv'
/srv/.* all files system_u:object_r:var_t:s0
-/srv/(^/?ftp(/.*)? all files system_u:object_r:public_content_t:s0
-/srv/(^/?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
-/srv/(^/?rsync(/.*)? all files system_u:object_r:public_content_t:s0
+/srv/([^/]*/)?ftp(/.*)? all files system_u:object_r:public_content_t:s0
+/srv/([^/]*/)?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
+/srv/([^/]*/)?rsync(/.*)? all files system_u:object_r:public_content_t:s0
/srv/gallery2(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv directory system_u:object_r:var_t:s0 //看这里!
```
diff --git a/command/smbclient.md b/command/smbclient.md
index 64fb1193c6..5342f7c47d 100644
--- a/command/smbclient.md
+++ b/command/smbclient.md
@@ -5,7 +5,7 @@ smbclient
## 补充说明
-**smbclient命** 属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。
+**smbclient命令** 属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。
### 语法
@@ -43,13 +43,13 @@ smb服务器:指定要连接的smb服务器。
### 实例
-**列出某个IP地址所提供的共享文件夹**
+ **列出某个IP地址所提供的共享文件夹**
```
smbclient -L 198.168.0.1 -U username%password
```
-**像ftp客户端一样使用smbclient**
+ **像ftp客户端一样使用smbclient**
```
smbclient //192.168.0.1/tmp -U username%password
@@ -59,7 +59,7 @@ smbclient //192.168.0.1/tmp -U username%password
这里有许多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等。通过这些命令,我们可以访问远程主机的共享资源。
-**直接一次性使用smbclient命令**
+ **直接一次性使用smbclient命令**
```
smbclient -c "ls" //192.168.0.1/tmp -U username%password
@@ -74,10 +74,13 @@ smb:/>ls
功能一样的。
-**创建一个共享文件夹**
+ **创建一个共享文件夹**
```
smbclient -c "mkdir share1" //192.168.0.1/tmp -U username%password
```
-如果用户共享`//192.168.0.1/tmp`的方式是只读的,会提示`NT_STATUS_ACCESS_DENIED making remote directory /share1`
\ No newline at end of file
+如果用户共享`//192.168.0.1/tmp`的方式是只读的,会提示`NT_STATUS_ACCESS_DENIED making remote directory /share1`
+
+
+
\ No newline at end of file
diff --git a/command/speedtest-cli.md b/command/speedtest-cli.md
new file mode 100644
index 0000000000..6998e097f9
--- /dev/null
+++ b/command/speedtest-cli.md
@@ -0,0 +1,122 @@
+speedtest-cli
+===
+
+命令行下测试服务器外网速度
+
+## 补充说明
+
+**speedtest-cli** 是一个使用python编写的命令行脚本,通过调用speedtest.net测试上下行的接口来完成速度测试,最后我会测试运维生存时间所在服务器的外网速度。项目地址:https://github.com/sivel/speedtest-cli
+
+### 安装speedtest-cli
+
+speedtest-cli需要在python 2.4-3.4的环境下,安装方法都很简单,自己选择以下最适合你的一种。
+
+ **pip方式**
+
+```
+# pip install speedtest-cli
+```
+
+ **easy_install方式**
+
+```
+# easy_install speedtest-cli
+```
+
+ **github+pip方式**
+
+```
+# pip install git+https://github.com/sivel/speedtest-cli.git
+```
+
+或者
+
+```
+# git clone https://github.com/sivel/speedtest-cli.git
+# python speedtest-cli/setup.py install
+```
+
+ **下载脚本方式**
+
+```
+# wget -O speedtest-cli https://raw.github.com/sivel/spe ... er/speedtest_cli.py
+# chmod +x speedtest-cli
+```
+
+或者
+
+```
+# curl -o speedtest-cli https://raw.github.com/sivel/spe ... er/speedtest_cli.py
+# chmod +x speedtest-cli
+```
+
+直接下载脚本,给予执行权限即可。
+
+### 用法
+
+```
+-h, --help show this help message and exit
+--share 分享你的网速,该命令会在speedtest网站上生成网速测试结果的图片。
+--simple Suppress verbose output, only show basic information
+--list 根据距离显示speedtest.net的测试服务器列表。
+--server=SERVER 指定列表中id的服务器来做测试。
+--mini=MINI URL of the Speedtest Mini server
+--source=SOURCE Source ip address to bind to
+--version Show the version number and exit
+```
+
+### 实例
+
+列出所有在中国的测试服务器:
+
+```
+[root@li229-122 ~]# speedtest-cli --list | grep China
+1185) China Unicom (Changchun, China) [10534.35 km]
+3784) China Mobile (Urumqi, China) [10581.15 km]
+2667) Beijing Normal University (Beijing, China) [11117.03 km]
+2529) Beijing Normal University (Beijing, China) [11117.03 km]
+2816) Capital Online Data service (Beijing, China) [11117.03 km]
+4354) SXmobile (Taiyuan, China) [11383.17 km]
+3973) China Telecom (Lanzhou, China) [11615.43 km]
+3633) China Telecom (Shanghai, China) [11983.37 km]
+3927) China Mobile Jiangsu Co., Ltd. (Suzhou, China) [11989.27 km]
+2461) China Unicom (Chengdu, China) [12213.35 km]
+1028) Shepherd Software (Xiamen, China) [12785.57 km]
+1628) Xiamen Guangdian Xinxu (Xiamen, China) [12785.57 km]
+3891) GZinternet (Guangzhou, China) [13005.36 km]
+3871) SZWCDMA (Shenzhen, China) [13059.20 km]
+3819) SZU (Shenzhen, China) [13059.20 km]
+1536) STC (Hong Kong, China) [13088.37 km]
+1890) Telin (Hong Kong, China) [13088.37 km]
+```
+
+ **结果解释**
+
+```
+3633) China Telecom (Shanghai, China) [11983.37 km]
+```
+
+```
+3633: 服务器id
+china telecom:isp,这里是中国电信
+shanghai,china :服务器所在地址
+11983.37 km:两台服务器地理位置之间距离,我这台机器在美国,和上海相距11983.37公里,很远呐.
+```
+
+ **外网速度测试**
+
+```
+[root@li229-122 ~]# speedtest-cli --server=3633 --share
+Retrieving speedtest.net configuration...
+Retrieving speedtest.net server list...
+Testing from Linode (173.255.219.122)...
+Hosted by China Telecom (Shanghai) [11983.37 km]: 23.603 ms
+Testing download speed........................................
+Download: 24.84 Mbit/s
+Testing upload speed..................................................
+Upload: 4.57 Mbit/s
+Share results: http://www.speedtest.net/result/3240988007.png
+```
+
+
+
\ No newline at end of file
diff --git a/command/split.md b/command/split.md
index d43047a9be..e0f303302e 100644
--- a/command/split.md
+++ b/command/split.md
@@ -21,7 +21,7 @@ split
生成一个大小为100KB的测试文件:
```
-root@localhost split if=/dev/zero bs=100k count=1 of=date.file
+[root@localhost split]# dd if=/dev/zero bs=100k count=1 of=date.file
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.00043 seconds, 238 MB/s
@@ -31,7 +31,7 @@ root@localhost split if=/dev/zero bs=100k count=1 of=date.file
```
[root@localhost split]# split -b 10k date.file
-root@localhost split
+[root@localhost split]# ls
date.file xaa xab xac xad xae xaf xag xah xai xaj
```
diff --git a/command/startx.md b/command/startx.md
index 5c557b56c4..ad9ad9adac 100644
--- a/command/startx.md
+++ b/command/startx.md
@@ -5,7 +5,7 @@ startx
## 补充说明
-**startx命** 用来启动X Window,实际上启动X Window的程序为xinit。
+**startx命令** 用来启动X Window,实际上启动X Window的程序为xinit。
### 语法
@@ -85,4 +85,7 @@ $HOME/.twmrc twm 配置文件。
$HOME/.awmrc awm 配置文件。
$HOME/.uwmrc uwm 配置文件。
/dev/lft* 终端或 tty、工作站初始 login shell 的界面。
-```
\ No newline at end of file
+```
+
+
+
\ No newline at end of file
diff --git a/command/sudo.md b/command/sudo.md
index 5df7a34f3e..1072a28f01 100644
--- a/command/sudo.md
+++ b/command/sudo.md
@@ -60,7 +60,7 @@ foobar ALL=(ALL) ALL
保存退出后,切换到foobar用户,我们用它的身份执行命令:
```
-foobar@localhost ~ /root
+[foobar@localhost ~]$ ls /root
ls: /root: 权限不够
[foobar@localhost ~]$ sudo ls /root
@@ -77,7 +77,7 @@ foobar localhost= /sbin/ifconfig, /bin/ls
再来执行命令:
```
-foobar@localhost ~ -5 /etc/shadow
+[foobar@localhost ~]$ sudo head -5 /etc/shadow
Password:
Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.
diff --git a/command/tee.md b/command/tee.md
index 81ae6d9f29..e5c526e52a 100644
--- a/command/tee.md
+++ b/command/tee.md
@@ -46,7 +46,7 @@ WWW.pef
```
```
-root@localhost text -n
+[root@localhost text]# ls | tee out.txt | cat -n
1 1.sh
2 1.txt
3 2.txt
diff --git a/command/tempfile.md b/command/tempfile.md
new file mode 100644
index 0000000000..409da1d562
--- /dev/null
+++ b/command/tempfile.md
@@ -0,0 +1,39 @@
+tempfile
+===
+
+shell中给临时文件命名
+
+## 补充说明
+
+有时候在写Shell脚本的时候需要一些临时存储数据的才做,最适合存储临时文件数据的位置就是`/tmp`,因为该目录中所有的内容在系统重启后就会被清空。下面是两种方法为临时数据生成标准的文件名。
+
+### tempfile命令
+
+`tempfile命令`只有在基于Debian的发行版中才默认自带,比如Ubuntu,其他发行版没有这个命令。
+
+用tempfile命令为一个临时文件命名:
+
+```
+temp_file_name=$(tempfile)
+```
+
+用一个加带了随机数的文件名作为临时文件命名:
+
+```
+temp_file_name="/tmp/file_$RANDOM"
+```
+
+$RANDOM是一个返回随机数的环境变量。
+
+### $$变量
+
+如果没有tempfile命令的Linux发行版,也可以使用自己的临时文件名:
+
+```
+temp_file_name="/tmp/file.$"
+```
+
+`$$`是系统预定义变量,显示当前所在进程的进程号,用`.$$`作为添加的后缀会被扩展成当前运行脚本的进程id。
+
+
+
\ No newline at end of file
diff --git a/command/test.md b/command/test.md
new file mode 100644
index 0000000000..78d05b456c
--- /dev/null
+++ b/command/test.md
@@ -0,0 +1,99 @@
+test
+===
+
+shell环境中测试条件表达式工具
+
+## 补充说明
+
+**test命令** 是shell环境中测试条件表达式的实用工具。
+
+### 语法
+
+```
+test(选项)
+```
+
+### 选项
+
+```
+-b<文件>:如果文件为一个块特殊文件,则为真;
+-c<文件>:如果文件为一个字符特殊文件,则为真;
+-d<文件>:如果文件为一个目录,则为真;
+-e<文件>:如果文件存在,则为真;
+-f<文件>:如果文件为一个普通文件,则为真;
+-g<文件>:如果设置了文件的SGID位,则为真;
+-G<文件>:如果文件存在且归该组所有,则为真;
+-k<文件>:如果设置了文件的粘着位,则为真;
+-O<文件>:如果文件存在并且归该用户所有,则为真;
+-p<文件>:如果文件为一个命名管道,则为真;
+-r<文件>:如果文件可读,则为真;
+-s<文件>:如果文件的长度不为零,则为真;
+-S<文件>:如果文件为一个套接字特殊文件,则为真;
+-u<文件>:如果设置了文件的SUID位,则为真;
+-w<文件>:如果文件可写,则为真;
+-x<文件>:如果文件可执行,则为真。
+```
+
+### 实例
+
+linux中shell编程中的test常见用法:
+
+ **判断表达式**
+
+```
+if test #表达式为真
+if test ! #表达式为假
+test 表达式1 –a 表达式2 #两个表达式都为真
+test 表达式1 –o 表达式2 #两个表达式有一个为真
+test 表达式1 ! 表达式2 #条件求反
+```
+
+ **判断字符串**
+
+```
+test –n 字符串 #字符串的长度非零
+test –z 字符串 #字符串的长度是否为零
+test 字符串1=字符串2 #字符串是否相等,若相等返回true
+test 字符串1!=字符串2 #字符串是否不等,若不等反悔false
+```
+
+ **判断整数**
+
+```
+test 整数1 -eq 整数2 #整数相等
+test 整数1 -ge 整数2 #整数1大于等于整数2
+test 整数1 -gt 整数2 #整数1大于整数2
+test 整数1 -le 整数2 #整数1小于等于整数2
+test 整数1 -lt 整数2 #整数1小于整数2
+test 整数1 -ne 整数2 #整数1不等于整数2
+```
+
+ **判断文件**
+
+```
+test File1 –ef File2 两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。
+test File1 –nt File2 判断文件1是否比文件2新
+test File1 –ot File2 判断文件1比是否文件2旧
+test –b file #文件是否块设备文件
+test –c File #文件并且是字符设备文件
+test –d File #文件并且是目录
+test –e File #文件是否存在 (常用)
+test –f File #文件是否为正规文件 (常用)
+test –g File #文件是否是设置了组id
+test –G File #文件属于的有效组ID
+test –h File #文件是否是一个符号链接(同-L)
+test –k File #文件是否设置了Sticky bit位
+test –b File #文件存在并且是块设备文件
+test –L File #文件是否是一个符号链接(同-h)
+test –o File #文件的属于有效用户ID
+test –p File #文件是一个命名管道
+test –r File #文件是否可读
+test –s File #文件是否是非空白文件
+test –t FD #文件描述符是在一个终端打开的
+test –u File #文件存在并且设置了它的set-user-id位
+test –w File #文件是否存在并可写
+test –x File #文件属否存在并可执行
+```
+
+
+
\ No newline at end of file
diff --git a/command/tftp.md b/command/tftp.md
index 828a384773..bd6ea37d1a 100644
--- a/command/tftp.md
+++ b/command/tftp.md
@@ -136,7 +136,7 @@ tftp your-ip-address
命令格式为:
```
-tftp option [port]
+tftp [option] ... host [port]
```
如果要下载或上传文件的话是一定要用这些option的。
diff --git a/command/vdfuse.md b/command/vdfuse.md
new file mode 100644
index 0000000000..ff4beeee74
--- /dev/null
+++ b/command/vdfuse.md
@@ -0,0 +1,59 @@
+vdfuse
+===
+
+VirtualBox软件挂载VDI分区文件工具
+
+## 补充说明
+
+**vdfuse命令** 是VirtualBox软件挂载VDI分区文件的一个工具,VirtualBox是一款能创建虚拟机的开源软件,vdi是它的默认磁盘格式。
+
+### 什么是VirtualBox
+
+VirtualBox是一款功能强大的x86虚拟机软件,它不仅具有丰富的特色,而且性能也很优异。更可喜的是,VirtualBox于数日前走向开源,成为了一个发布在GPL许可之下的自由软件。VirtualBox可以在Linux和Windows主机中运行,并支持在其中安装Windows (NT 4.0、2000、XP、Server 2003、Vista)、DOS/Windows 3.x、Linux (2.4 和 2.6)、OpenBSD等系列的客户操作系统。
+
+ **在Ubuntu中安装vdfuse,打开终端,输入:**
+
+```
+sudo apt-get install virtualbox-fuse
+```
+
+### 语法
+
+```
+vdfuse [options] -f image-file mountpoint
+```
+
+### 选项
+
+```
+-h 帮助
+-r 只读
+-t 类型 (VDI, VMDK, VHD, or raw; default: auto)
+-f 镜像文件
+-a 允许所有用户读取
+-w 允许所有用户都写
+-g 前台运行
+-v 输出反馈
+-d debug模式
+```
+
+注意:必须编辑一下`/etc/fuse.confand`,去掉 "user_allow_other" 前面的注释符号(#),否则不能正确运行。
+
+### 实例
+
+使用如下如下语句挂载.vdi文件:
+
+```
+sudo vdfuse -f /path/to/file.vdi /path/to/mountpoint
+```
+
+`/path/to/mountpoint`应该包含如下文件EntireDisk、Partition1等,如果只有一个文件,你可能需要这样挂载:
+
+```
+mount /path/to/mountpoint/Partition1 /path/to/someother/mountpoint
+```
+
+文件系统就挂载到`/path/to/someother/mountpoint`了。
+
+
+
\ No newline at end of file
diff --git a/command/wall.md b/command/wall.md
index c516a18f9e..9c60d574bc 100644
--- a/command/wall.md
+++ b/command/wall.md
@@ -5,7 +5,7 @@ wall
## 补充说明
-**wall命** 用于向系统当前所有打开的终端上输出信息。通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。
+**wall命令** 用于向系统当前所有打开的终端上输出信息。通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。
### 语法
@@ -20,9 +20,12 @@ wall(参数)
### 实例
```
-root@localhost ~ line
+[root@localhost ~]# wall this is a test line
Broadcast message from root (pts/1) (Fri Dec 20 11:36:51 2013):
this is a test line
-```
\ No newline at end of file
+```
+
+
+
\ No newline at end of file
diff --git a/command/wget.md b/command/wget.md
index 4900bde739..d10fb099a5 100644
--- a/command/wget.md
+++ b/command/wget.md
@@ -49,7 +49,7 @@ URL:下载指定的URL地址。
**使用wget下载单个文件**
```
-wget http://www.linuxde.net/testfile.zip
+wget http://www.jsdig.com/testfile.zip
```
以下的例子是从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
@@ -57,7 +57,7 @@ wget http://www.linuxde.net/testfile.zip
**下载并以不同的文件名保存**
```
-wget -O wordpress.zip http://www.linuxde.net/download.aspx?id=1080
+wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080
```
wget默认会以最后一个符合`/`的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
@@ -65,7 +65,7 @@ wget默认会以最后一个符合`/`的后面的字符来命令,对于动态
错误:下面的例子会下载一个文件并以名称`download.aspx?id=1080`保存:
```
-wget http://www.linuxde.net/download?id=1
+wget http://www.jsdig.com/download?id=1
```
即使下载的文件是zip格式,它仍然以`download.php?id=1080`命令。
@@ -73,13 +73,13 @@ wget http://www.linuxde.net/download?id=1
正确:为了解决这个问题,我们可以使用参数`-O`来指定一个文件名:
```
-wget -O wordpress.zip http://www.linuxde.net/download.aspx?id=1080
+wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080
```
**wget限速下载**
```
-wget --limit-rate=300k http://www.linuxde.net/testfile.zip
+wget --limit-rate=300k http://www.jsdig.com/testfile.zip
```
当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
@@ -87,7 +87,7 @@ wget --limit-rate=300k http://www.linuxde.net/testfile.zip
**使用wget断点续传**
```
-wget -c http://www.linuxde.net/testfile.zip
+wget -c http://www.jsdig.com/testfile.zip
```
使用`wget -c`重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用`-c`参数。
@@ -95,7 +95,7 @@ wget -c http://www.linuxde.net/testfile.zip
**使用wget后台下载**
```
-wget -b http://www.linuxde.net/testfile.zip
+wget -b http://www.jsdig.com/testfile.zip
Continuing in background, pid 1840.
Output will be written to `wget-log'.
@@ -110,7 +110,7 @@ tail -f wget-log
**伪装代理名称下载**
```
-wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.linuxde.net/testfile.zip
+wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.jsdig.com/testfile.zip
```
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过`--user-agent`参数伪装。
diff --git a/command/which.md b/command/which.md
index 77c866542c..3092c4f538 100644
--- a/command/which.md
+++ b/command/which.md
@@ -31,7 +31,7 @@ which(选项)(参数)
查找文件、显示命令路径:
```
-root@localhost ~
+[root@localhost ~]# which pwd
/bin/pwd
[root@localhost ~]# which adduser
diff --git a/command/xargs.md b/command/xargs.md
new file mode 100644
index 0000000000..210a92b503
--- /dev/null
+++ b/command/xargs.md
@@ -0,0 +1,171 @@
+xargs
+===
+
+给其他命令传递参数的一个过滤器
+
+## 补充说明
+
+**xargs命令** 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
+
+### xargs命令用法
+
+xargs用作替换工具,读取输入数据重新格式化后输出。
+
+定义一个测试文件,内有多行文本数据:
+
+```
+cat test.txt
+
+a b c d e f g
+h i j k l m n
+o p q
+r s t
+u v w x y z
+
+```
+
+多行输入单行输出:
+
+```
+cat test.txt | xargs
+
+a b c d e f g h i j k l m n o p q r s t u v w x y z
+```
+
+ **-n选项** 多行输出:
+
+```
+cat test.txt | xargs -n3
+
+a b c
+d e f
+g h i
+j k l
+m n o
+p q r
+s t u
+v w x
+y z
+```
+
+ **-d选项** 可以自定义一个定界符:
+
+```
+echo "nameXnameXnameXname" | xargs -dX
+
+name name name name
+```
+
+结合 **-n选项** 使用:
+
+```
+echo "nameXnameXnameXname" | xargs -dX -n2
+
+name name
+name name
+```
+
+ **读取stdin,将格式化后的参数传递给命令**
+
+假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:
+
+```
+#!/bin/bash
+#sk.sh命令内容,打印出所有参数。
+
+echo $*
+
+```
+
+arg.txt文件内容:
+
+```
+cat arg.txt
+
+aaa
+bbb
+ccc
+
+```
+
+xargs的一个 **选项-I** ,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
+
+```
+cat arg.txt | xargs -I {} ./sk.sh -p {} -l
+
+-p aaa -l
+-p bbb -l
+-p ccc -l
+
+```
+
+复制所有图片文件到 /data/images 目录下:
+
+```
+ls *.jpg | xargs -n1 -I cp {} /data/images
+```
+
+ **xargs结合find使用**
+
+用rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用xargs去避免这个问题:
+
+```
+find . -type f -name "*.log" -print0 | xargs -0 rm -f
+```
+
+xargs -0将\0作为定界符。
+
+统计一个源代码目录中所有php文件的行数:
+
+```
+find . -type f -name "*.php" -print0 | xargs -0 wc -l
+```
+
+查找所有的jpg 文件,并且压缩它们:
+
+```
+find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
+
+```
+
+ **xargs其他应用**
+
+假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:
+
+```
+cat url-list.txt | xargs wget -c
+
+```
+
+### 子Shell(Subshells)
+
+运行一个shell脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。每个shell脚本有效地运行在父shell(parent shell)的一个子进程里。这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程。
+
+```
+cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5
+```
+
+如果cmd2 是cd /,那么就会改变子Shell的工作目录,这种改变只是局限于子shell内部,cmd5则完全不知道工作目录发生的变化。子shell是嵌在圆括号()内部的命令序列,子Shell内部定义的变量为局部变量。
+
+子shell可用于为一组命令设定临时的环境变量:
+
+COMMAND1
+COMMAND2
+COMMAND3
+(
+ IFS=:
+ PATH=/bin
+ unset TERMINFO
+ set -C
+ shift 5
+ COMMAND4
+ COMMAND5
+ exit 3 # 只是从子shell退出。
+)
+# 父shell不受影响,变量值没有更改。
+COMMAND6
+COMMAND7
+```
+
+
+
\ No newline at end of file