2014年8月

CentOS编译安装MySQL5.5笔记

背景说明:前面已通过yum安装了mysql5.0,但是因为McAfee Audit Plugin插件只支持5.1、5.5、5.6,所以我们来试下重新编译安装mysql5.5 。

[root@CentOS ~]# rpm -qa | grep mysql
php-mysql-5.1.6-44.el5_10
mysql-5.0.95-5.el5_9
mysql-server-5.0.95-5.el5_9
mysql-5.0.95-5.el5_9
[root@CentOS ~]# yum remove mysql
......
Dependencies Resolved

==============================================================================
Package             Arch        Version                 Repository      Size
==============================================================================
Removing:
mysql               i386        5.0.95-5.el5_9          installed      8.0 M
mysql               x86_64      5.0.95-5.el5_9          installed      8.2 M
Removing for dependencies:
mysql-server        x86_64      5.0.95-5.el5_9          installed       22 M
perl-DBD-MySQL      x86_64      3.0007-2.el5            installed      328 k
php-mysql           x86_64      5.1.6-44.el5_10         installed      196 k

Transaction Summary
==============================================================================
Remove        5 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing        : mysql-server                                           1/5
warning: /var/log/mysqld.log saved as /var/log/mysqld.log.rpmsave
  Erasing        : mysql                                                  2/5
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
  Erasing        : perl-DBD-MySQL                                         3/5
  Erasing        : mysql                                                  4/5
  Erasing        : php-mysql                                              5/5

Removed:
  mysql.i386 0:5.0.95-5.el5_9          mysql.x86_64 0:5.0.95-5.el5_9        

Dependency Removed:
  mysql-server.x86_64 0:5.0.95-5.el5_9  perl-DBD-MySQL.x86_64 0:3.0007-2.el5
  php-mysql.x86_64 0:5.1.6-44.el5_10  

Complete!
[root@CentOS ~]# mkdir mysql5.5_SourceCode
[root@CentOS ~]# cd mysql5.5_SourceCode/
[root@CentOS mysql5.5_SourceCode]# wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.39.tar.gz
......
Length: 21713567 (21M) [application/x-tar-gz]
Saving to: `mysql-5.5.39.tar.gz'

100%[====================================>] 21,713,567  7.95K/s   in 22m 45s

2014-08-15 09:52:19 (15.5 KB/s) - `mysql-5.5.39.tar.gz' saved [21713567/21713567]

接下来准备编译安装,mysql用户和组已经都有了,如果是第一次安装mysql的话就敲下面的命令添加下。
# groupadd mysql
# useradd -r -g mysql mysql

接着创建mysql目录。
# mkdir /usr/local/mysql #mysql安装目录
# mkdir /usr/local/mysqlData #数据存放目录
# chown mysql:mysql -R /usr/local/mysqlData #更改数据目录属主为mysql
# yum install -y gcc gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel ncurses-devel cmake bison #配置编译所需要的环境

开始编译。

[root@CentOS mysql5.5_SourceCode]# tar -zxvf mysql-5.5.39.tar.gz
[root@CentOS mysql5.5_SourceCode]# cd mysql-5.5.39
[root@CentOS mysql-5.5.39]# cmake . \                   #开始编译
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \               #安装到/usr/local/mysql目录
-DMYSQL_DATADIR=/usr/local/mysqlData \                  #数据存放到/usr/local/mysqlData目录
-DMYSQL_UNIX_ADDR=/usr/local/mysqlData/mysqld.sock \    #sock存放到/usr/local/mysqlData目录
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                      #innoDB引擎
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8 \                                #字符集
-DDEFALUT_CHARSETS=all \                                #支持所有字符集
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DDEFAULT_COLLATION=utf8_general_ci \                   #字符集校验
-DMYSQL_USER=mysql \
-DEXTRA_CHARSETS=all \
-DMYSQL_TCP_PORT=3306 \
-DWITH_DEBUG=0
放在一行里,方便读者复制。
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysqlData -DMYSQL_UNIX_ADR=/usr/local/mysqlData/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_CHARSETS=all -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DEXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0

编译通过后,开始安装

[root@CentOS mysql-5.5.39]# make && make install

执行初始化配置脚本,创建系统自带的数据库和表
# cd /usr/local/mysql
# scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysqlData --user=mysql

添加服务,并设置开机启动
# cp support-files/mysql.server /etc/init.d/mysql
# chkconfig mysql on
# service mysql start

如果启动失败,先检查下/usr/local/mysqlData目录属主是否已经修改为mysql,如检查无误,建议reboot下系统。

配置账户。
默认root没有密码,作为安全症患者这怎么可以忍受。设置密码之前,先配置下系统PATH
# vi /etc/profile
在文件末尾增加如下:
PATH=/usr/local/mysql/bin:$PATH
export PATH
保存退出,然后执行:source /etc/profile,让配置立即生效。

然后:mysql -u root 进入console控制台。

mysql> update mysql.user set password=PASSWORD('toor') where User='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 4  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from mysql.user where User='';
Query OK, 2 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
| root | centos    | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
| root | 127.0.0.1 | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
| root | ::1       | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

如果需要外部访问,则配置iptables开启3306端口,方法如下:
打开/etc/sysconfig/iptables
在-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT,下添加:
-A INPUT -m state --state NEW -m tcp -p -dport 3306 -j ACCEPT
然后保存退出,在终端内执行下面的命令,刷新防火墙配置:
# service iptables restart

为外部访问的用户单独设置密码:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.1.%' IDENTIFIED BY 'hereispassword' WITH GRANT OPTION;

如果开放mysql外网访问,则最好修改默认端口3306,以防被扫描,弱口令最可怕!!

参考资料:
http://www.cnblogs.com/xiongpq/p/3384681.html

nginx反向代理Google参数配置【转】

刚刚看到一个帖子提到了那个 wen.lu ,想着就把自己的反向代理配置分享一下,因为网上的教程大多是错的。

下面的参数配置只需把xxx.xxx改为你自己的域名以及修改一下你的SSL路径就可以了。

Nginx 反代 Google配置如下

server
{
listen 443;
server_name xxx.xxx;
ssl on;
ssl_certificate /usr/local/nginx/xxx.crt; #这里改为你自己的证书路径
ssl_certificate_key /usr/local/xxx.key; #这里改为你自己的密钥路径

location / {
proxy_redirect http://www.google.com/ /;
proxy_cookie_domain google.com xxx.xxx;
proxy_pass http://173.194.127.48;
proxy_set_header Accept-Encoding "";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Accept-Language "zh-CN";
proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";
sub_filter www.google.com xxx.xxx;
sub_filter_once off;
}
}

server {
listen 80;
server_name xxx.xxx;
rewrite ^(.*) https://xxx.xxx$1 permanent;
}

Nginx 反代 Google Scholar 的配置如下:

server
{
listen 443;
server_name xxx.xxx;

ssl on;
ssl_certificate /usr/local/nginx/ssl.crt; #这里改为你自己的证书路径
ssl_certificate_key /usr/local/nginx/ssl.key; #这里改为自己的密钥路径
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:-ADH:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP;

location / {
proxy_redirect http://scholar.google.com/ /;
proxy_set_header Host "scholar.google.com";
proxy_set_header Accept-Encoding "";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Accept-Language "zh-CN";
proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";
proxy_pass http://scholar.google.com;
sub_filter scholar.google.com xxx.xxx;
sub_filter_once off;
}

}

server
{
listen 80;
server_name xxx.xxx;
rewrite ^(.*) https://xxx.xxx/$1 permanent;
}

Nginx 反代草liu论坛的配置如下:

server
{
listen 80;
server_name xxx.xxx;

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://184.154.128.246/;
}

}
#把所有的xxx.xxx改为你自己的域名即可

不使用 SSL 证书进行反代 Google 的代码如下:

server {
listen 80;
server_name xxx.xxx;

location / {
proxy_redirect http://www.google.com/ /;
proxy_cookie_domain google.com xxx.xxx;
proxy_pass http://173.194.127.48;
proxy_set_header Accept-Encoding "";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Accept-Language "zh-CN";
proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";
sub_filter www.google.com xxx.xxx;
sub_filter_once off;
}
}

原文:http://www.v2ex.com/t/126028

Apache&nginx rewrite规则学习总结

几个配置实例:

1、wordpress安装在子目录时nginx重定向的写法
LINK

a域名指向目录A,b域名指向目录B,并且B目录是A目录的子目录,即 “/目录A/目录B/ ”这样的目录结构,如果把B目录里安装的wordpress固定链接结构改成/archive/12/这样的话,就会出现404错误,而且404指向的是为a域名配置的404页面。

解决方法是,在域名a的server块里面添加如下代码:

        location /目录B/ { 
        rewrite ^index\.php$ - last;

        if ( !-e $request_filename ) { 
                rewrite . /目录B/index.php last; 
        } 
        }

添加后代码应该类似于这样:

server
{
	listen       80;
	server_name 域名A;
	index index.html index.htm index.php default.html default.htm default.php;

  location /目录B/ { rewrite ^index\.php$ - last;

      if ( !-e $request_filename ) { rewrite . /目录B/index.php last; } }

.................

}

重启nginx或者/etc/initd./nginx reload即可生效。

2、domain.com/bluewolf/tag/linux 跳转到 blog.b1uew01f.net/tag/linux

    location /bluewolf {
        if (!-f $request_filename){
                        rewrite ^/bluewolf/(.*)$ http://blog.b1uew01f.net/$1 permanent;
                }
        }

3、目录对换 /123456/xxxx ====> /xxxx?id=123456

rewrite ^/(\d )/(. )/  /$2?id=$1 last; 

4、禁止访问以/data开头的文件
location ~ ^/data{deny all;}

禁止访问以.sh,.flv,.mp3为文件后缀名的文件
location ~ .*\.(sh|flv|mp3)${return 403;}

5、将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html 指向 /job/123/456/789.html

rewrite ^/job-([0-9] )-([0-9] )-([0-9] )\.html$ /job/$1/$2/jobshow_$3.html last;

6、文件和目录不存在的时候重定向:

if (!-e $request_filename) {proxy_pass http://127.0.0.1;}

7、Apache .htaccess Rewrite解决问号匹配的写法

如news.asp?id=123 需要把它定向到 news/123.html,这个用 RewriteRule 怎么写?
RewriteRule ^news\.asp\?id=(\d+)$ news/$1.html [L] 这个不行。

可以使用:

RewriteCond %{QUERY_STRING} ^id=(.+) 
RewriteRule news\.php$ news/$1.html [L]

RewriteRule 不会去匹配 ? 后面的字符串,需要用RewriteCond来匹配

参考资料:
Nginx配置及Rewrite规则 http://bbs.aliyun.com/read/137857.html

超详细的 NGINX URL重写实例讲解 http://www.jbxue.com/article/2187.html

windows 135 137 138 139 445端口介绍及关闭方法

135端口

端口说明:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码;使用DCOM可以通过网络直接进行通信,能够跨包括HTTP协议在内的多种网络传输。
端口漏洞:相信去年很多Windows 2000和Windows XP用户都中了“冲击波”病毒,该病毒就是利用RPC漏洞来攻击计算机的。RPC本身在处理通过TCP/IP的消息交换部分有一个漏洞,该漏洞是由于错误地处理格式不正确的消息造成的。该漏洞会影响到RPC与DCOM之间的一个接口,该接口侦听的端口就是135。
操作建议:为了避免“冲击波”病毒的攻击,建议关闭该端口。
在许多“网管”眼里,135端口是最让人捉摸不透的端口,因为他们中的大多数都无法明确地了解到135端口的真正作用,也不清楚该端口到底会有哪些潜在的危险。直到一种名为“IEen”的专业远程控制工具出现,人们才清楚135端口究竟会有什么样的潜在安全威胁。 IEen工具能够借助135端口轻松连接到Internet上的其他工作站,并远程控制该工作站的IE浏览器。例如,在浏览器中执行的任何操作,包括浏览页面内容、输入帐号密码、输入搜索关键字等,都会被IEen工具监控到。甚至在网上银行中输入的各种密码信息,都能被IEen工具清楚地获得。除了可以对远程工作站上的IE浏览器进行操作、控制外,IEen工具通过135端口几乎可以对所有的借助DCOM开发技术设计出来的应用程序进行远程控制,例如IEen工具也能轻松进入到正在运行Excel的计算机中,直接对Excel进行各种编辑操作。 怎么样?135端口对外开放是不是很危险呀?当然,这种危险毕竟是理论上的,要想真正地通过135端口入侵其他系统,还必须提前知道对方计算机的IP地址、系统登录名和密码等。只要你严格保密好这些信息,你的计算机被IEen工具攻击的可能性几乎不存在。 为什么IEen工具能利用135端口攻击其他计算机呢?原来该工具采用了一种DCOM技术,可以直接对其他工作站的DCOM程序进行远程控制。DCOM技术与对方计算机进行通信时,会自动调用目标主机中的RPC服务,而RPC服务将自动询问目标主机中的135端口,当前有哪些端口可以被用来通信。如此一来,目标主机就会提供一个可用的服务端口作为数据传输通道使用。在这一通信过程中,135端口的作用其实就是为RPC通信提供一种服务端口的映射功能。说简单一点,135端口就是RPC通信中的桥梁。

137端口

137端口的主要作用是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。 要是非法入侵者知道目标主机的IP地址,并向该地址的137端口发送一个连接请求时,就可能获得目标主机的相关名称信息。例如目标主机的计算机名称,注册该目标主机的用户信息,目标主机本次开机、关机时间等。此外非法入侵者还能知道目标主机是否是作为文件服务器或主域控制器来使用。

138端口

137、138端口都属于UDP端口,它们在局域网中相互传输文件信息时,就会发生作用。而138端口的主要作用就是提供NetBIOS环境下的计算机名浏览功能。 非法入侵者要是与目标主机的138端口建立连接请求的话,就能轻松获得目标主机所处的局域网网络名称以及目标主机的计算机名称。有了计算机名称,其对应的IP地址也就能轻松获得。如此一来,就为黑客进一步攻击系统带来了便利。

139端口

139端口是一种TCP端口,该端口在你通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用。 139端口一旦被Internet上的某个攻击者利用的话,就能成为一个危害极大的安全漏洞。因为黑客要是与目标主机的139端口建立连接的话,就很有可能浏览到指定网段内所有工作站中的全部共享信息,甚至可以对目标主机中的共享文件夹进行各种编辑、删除操作,倘若攻击者还知道目标主机的IP地址和登录帐号的话,还能轻而易举地查看到目标主机中的隐藏共享信息。
端口说明:139端口是为“NetBIOS Session Service”提供的,主要用于提供Windows文件和打印机共享以及Unix中的Samba服务。在Windows中要在局域网中进行文件的共享,必须使用该服务。比如在Windows 98中,可以打开“控制面板”,双击“网络”图标,在“配置”选项卡中单击“文件及打印共享”按钮选中相应的设置就可以安装启用该服务;在Windows 2000/XP中,可以打开“控制面板”,双击“网络连接”图标,打开本地连接属性;接着,在属性窗口的“常规”选项卡中选择“Internet协议(TCP/IP)”,单击“属性”按钮;然后在打开的窗口中,单击“高级”按钮;在“高级TCP/IP设置”窗口中选择“WINS”选项卡,在“NetBIOS设置”区域中启用TCP/IP上的NetBIOS。
端口漏洞:开启139端口虽然可以提供共享服务,但是常常被攻击者所利用进行攻击,比如使用流光、SuperScan等端口扫描工具,可以扫描目标计算机的139端口,如果发现有漏洞,可以试图获取用户名和密码,这是非常危险的。
操作建议:如果不需要提供文件和打印机共享,建议关闭该端口。

445端口

445端口也是一种TCP端口,该端口在Windows 2000 Server或Windows Server 2003系统中发挥的作用与139端口是完全相同的。具体地说,它也是提供局域网中文件或打印机共享服务。不过该端口是基于CIFS协议(Common Internet File System)工作的,而139端口是基于SMB协议(服务器协议族)对外提供共享服务。同样地,攻击者与445端口建立请求连接,也能获得指定局域网内的各种共享信息。445端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘,甚至会在悄无声息中将你的硬盘格式化掉!我们所能做的就是想办法不让黑客有机可乘,封堵住445端口漏洞 到了这里,相信你对各端口开放时存在的安全威胁早已是恐慌不已了。毕竟,对这些端口放任不管的话,随时都可能引来“飞来横祸”。

一键关闭危险端口(135 137 138 139 445 593 1025 3389)批处理bat文件:

@echo off 
color 1f 
title 关闭常见的危险端口 
echo. 
echo. 
echo 本批处理用于启动XP系统的防火墙并关闭常见的危险端口 
echo. 
echo 请确认您正在使用的是XP系统 并且未安装其他防火墙 
echo. 
echo 以避免与XP系统的防火墙发生冲突 
echo. 
echo. 
echo. 
pause 
cls 
echo 正在启动防火墙 请稍候… 
sc config SharedAccess start= auto > nul 
net start SharedAccess > nul 
echo 防火墙已经成功启动 
echo. 
echo 正在关闭常见的危险端口 请稍候… 
echo. 
echo 正在关闭135端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 135 name = 135 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭137端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 137 name = 137 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭138端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 138 name = 138 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭139端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 139 name = 139 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭445端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 445 name = 445 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭593端口 请稍候… 
netsh firewall set portopening protocol = TCP port = 593 name = 593 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭1025端口 请稍候… 
netsh firewall set portopening protocol = TCP port = 1025 name = 1024 mode = DISABLE scope = ALL profile = ALL 
echo 正在关闭3389端口 请稍候… 
netsh firewall set portopening protocol = ALL port = 3389 name = 3389 mode = DISABLE scope = ALL profile = ALL 
cls 
echo. 
echo. 
echo. 
echo 常见的危险端口已经关闭 
echo. 
echo. 
echo. 
echo. 
echo 
echo. 
echo. 
echo. 
echo 按任意键退出 
pause>nul

参考资料:

http://www.jb51.net/article/30493.htm

Linux bash Shell 入门学习

www.linuxidc.com/Linux/2013-08/88487.htm

1、echo $BASH_VERSION —— 查看bash版本号;

bluewolf@Ubuntu:~$ echo $BASH_VERSION
4.2.37(1)-release

2、第一行内容

#!/bin/bash

解释:Linux 系统根据"#!"及该字串后面的信息确定该文件的类型,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。

在 BASH 中 第一行的 "#!" 及后面的 "/bin/bash" 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin/usr/local/bin/usr/bin/usr/sbin/usr/local/sbin 这样的目录下;如果还找不到,你可以用 "locate bash"、"find / ‐name bash 2> /dev/null" 或 "whereis bash" 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。

3、注释符:#(井号,后面紧接着是“!”号的除外)

BASH 中的绝大多数语句结尾处都没有分号

如何运行?

  • $bash filename
  • $sh filename (这里 sh 是指向 bash 的一个链接,“ lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh ‐> bash” )
  • $chmod u+x filename
    $./filename

需要注意的是,BASH 程序被执行后,实际上 Linux 系统是另外开设了一个进程来运行的。

4、Linux 输入、输出和错误输出

在字符终端环境中,标准输入/标准输出的概念很好理解。输入即指对一个应用程序或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息。与 Windows 系统下不同的是,Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出与标准输出分开可以让一些高级的错误信息不干扰正常的输出信息,从而方便一般用户的使用。

在 BASH 中使用这些概念时一般将标准输出表示为 1,将标准错误输出表示为 2。

$ ls > ls_result

$ ls -l >> ls_result

">"就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个 ">" 符号,即 ">>" 则表示不清除原来的而追加输出。

$ find /home -name lost* 2> err_result

将标准错误输出重定向;

$ find /home -name lost* > err_result

只有标准输出被重定向;

[1]$ find /home -name lost* > all_result 2>& 1

[2]$ find /home -name lost* >> all_result 2>& 1

首先将标准错误输出(2)重定向到标准输出(1)中,再将标准输出重定向到 all_result 这个文件中。其中[1]更简便的作法是:

$ find /home -name lost* >& all_result