分类: linux

  • ubuntu下 使用AB做压力测试

    近刚开始接触apache大数据下数据优化,讲一下apache 下ab压力测试工具。

    程序“ab”尚未安装。 您可以使用以下命令安装:

    apt-get install apache2-utils 
    yum -y install httpd-tools  

    以下是ab –help

    sage: ab [options] [http[s]://]hostname[:port]/path
    Options are:
        -n requests     Number of requests to perform
        -c concurrency  Number of multiple requests to make at a time
        -t timelimit    Seconds to max. to spend on benchmarking
                        This implies -n 50000
        -s timeout      Seconds to max. wait for each response
                        Default is 30 seconds
        -b windowsize   Size of TCP send/receive buffer, in bytes
        -B address      Address to bind to when making outgoing connections
        -p postfile     File containing data to POST. Remember also to set -T
        -u putfile      File containing data to PUT. Remember also to set -T
        -T content-type Content-type header to use for POST/PUT data, eg.
                        'application/x-www-form-urlencoded'
                        Default is 'text/plain'
        -v verbosity    How much troubleshooting info to print
        -w              Print out results in HTML tables
        -i              Use HEAD instead of GET
        -x attributes   String to insert as table attributes
        -y attributes   String to insert as tr attributes
        -z attributes   String to insert as td or th attributes
        -C attribute    Add cookie, eg. 'Apache=1234'. (repeatable)
        -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                        Inserted after all normal header lines. (repeatable)
        -A attribute    Add Basic WWW Authentication, the attributes
                        are a colon separated username and password.
        -P attribute    Add Basic Proxy Authentication, the attributes
                        are a colon separated username and password.
        -X proxy:port   Proxyserver and port number to use
        -V              Print version number and exit
        -k              Use HTTP KeepAlive feature
        -d              Do not show percentiles served table.
        -S              Do not show confidence estimators and warnings.
        -q              Do not show progress when doing more than 150 requests
        -l              Accept variable document length (use this for dynamic pages)
        -g filename     Output collected data to gnuplot format file.
        -e filename     Output CSV file with percentages served
        -r              Don't exit on socket receive errors.
        -h              Display usage information (this message)
        -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
        -f protocol     Specify SSL/TLS protocol
                        (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
    
    -n :总共的请求执行数,缺省是1; -c: 并发数,缺省是1; -t:测试所进行的总时间,秒为单位,缺省50000s -p:POST时的数据文件 -w: 以HTML表的格式输出结果 
  • sshfs远程挂载

    12345 #常用命令 sshfs  - o nonempty,reconnect,allow_other, exec - p22 zjy@ 172.21 . 0.10 : / data / zjy  / data / zjy cat  / etc / fstab sshfs #zjy@172.21.0.10:/data/zjy /data/zjy fuse nonempty,reconnect,allow_other,exec 0 0

    一、什么是 SSHFS
    SSHFS(Secure SHell FileSystem)是一个客户端,可以让我们通过 SSH 文件传输协议(SFTP)挂载远程的文件系统并且在本地机器上和远程的目录和文件进行交互。

    12345 centos: yum install sshfs ubuntu: sudo apt - get install sshfs

    二、准备两台任意操作系统

    12345 一台 mkdir    / test / zjy / 另一台 mkdir    / test / zjy /

    三、挂载

    12 sudo sshfs  - o nonempty,allow_other, exec root@xx.xx.xx.xx: / test / zjy / / test / zjy /                         参数                用户@地址:挂载到               挂载到

    nonempty 允许安装在非空文件/DIR上
    allow_other 允许访问其他用户


    mount -a       重新加载挂载信息

    四、查看

    12345678910111213 查看当前系统挂载: [root@xiaoyuer ~] # cat /etc/mtab / dev / vda1  / ext3 rw,noatime,acl,user_xattr  0 0 proc  / proc proc rw  0 0 sysfs  / sys sysfs rw  0 0 devpts  / dev / pts devpts rw,mode = 0620 ,gid = 5 0 0 none  / proc / sys / fs / binfmt_misc binfmt_misc rw  0 0 root@ 192.168 . 1.121 : / test / / test / zjy fuse.sshfs rw,nosuid,nodev,allow_other  0 0 添加到自动挂载: root@ 192.168 . 1.121 : / test / / test / zjy fuse.sshfs rw,nosuid,nodev,allow_other  0 0

    五、卸载命令

    1 umount  - / test / zjy /  

    六、如果想免秘钥(可以做ssh免秘钥)

    1234567891011121314151617181920212223242526272829303132333435363738394041424344 1.ssh 免秘钥登录 / 挂载: ssh - keygen  - t rsa            [root@xiaoyuer ~] # ssh-keygen -t rsa Generating public / private rsa key pair. Enter  file in which to save the key ( / root / .ssh / id_rsa): Enter passphrase (empty  for no passphrase): Enter same passphrase again: Your identification has been saved  in / root / .ssh / id_rsa. Your public key has been saved  in / root / .ssh / id_rsa.pub. The key fingerprint  is : b0: 9d : 41 : 56 :b5:c4:b2: 0e : 0d : 47 : 07 : 4d :fa: 4c : 47 : 03 root@xiaoyuer The key's randomart image  is : + - - [ RSA  2048 ] - - - - + |        oo + * E.o  | |       o. o + oo . | |      . . + .oo .  | |        + .oo + .   | |      . So  o    | |          .      | |                 | |                 | |                 | + - - - - - - - - - - - - - - - - - + 2. 把公钥复制到服务器上 ssh - copy - id - i ~ / .ssh / id_rsa.pub root@xx.xx.xx.xx [root@xiaoyuer ~] # ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.121 root@ 192.168 . 1.121 's password: Now  try logging into the machine, with  "ssh 'root@192.168.1.121'" and check  in :    .ssh / authorized_keys to make sure we haven 't added extra keys that you weren' t expecting. 3. 测试 [root@xiaoyuer ~] # ssh root@xx.xx.xx.xx 测试成功在挂载就不需要数据密码<em  id = "__mceDel" style = "background-color: rgba(255, 255, 255, 1); font-family: "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px" > < / em>
  • SSH免密登录配置

    免密登录命令:

    1.进入.ssh目录:  cd ~/.ssh

    2.生成一对密钥: ssh-keygen -t rsa

    3.发送公钥:        ssh-copy-id root@192.168.xx.xxx -p22

    4.免密登录测试: ssh 192.168.xx.xxx

  • SSH端口转发

    端口转发

    ssh 会自动加密和解密所有的ssh客户端与服务端之间的网络数据。但是ssh 还提供了一个端口转发的功能。转发是一种与其他网络应用程序交互的方式,它能将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密以及解密服务。这一过程有时也被叫做隧道

    应用场景

    A: 本地服务器(IP: 10.0.0.1)

    B: 中间服务器(IP: 10.10.10.1)

    C: 目标服务器(C可以看到都是中间服务器B 在访问自己)

    本地转发

    第一种场景

    A: 10.0.0.1

    B: 10.0.0.2 (安装Mysql service,监听端口3306)

    B 上数据库 限制了 只有本机上的应用才可以直接连接Mysql 服务,如果我们由于调试需要用A上直接连接这个LDAP服务器,就需要使用本地转发实现

    ssh -L <本地端口>:<远程主机>:<远程端口>  <ssh hostaname>

    复制

    本例中应该如下:

    ssh -L 30000:10.0.0.2:80 root@10.0.0.2

    复制

    * -L 表示 使用 本地转发 建立ssh隧道

    * 选用 -f 后台建立隧道

    * -N 建议隧道后不执行命令

    * -fNR

    * 本地转发: 本地转发是 表示本地的端口上的数据通讯都会被转发到目标主机的对应端口上,这里可以抽象成是一种映射,执行命令的主机 为 本地主机。

    * 访问本地主机的30000 端口A,就相当于访问目标主机的端口B,当方粉本地的端口时,通讯数据会转发到目标主机的端口B,这就是本地转发

    * 访问A的30000 端口 就转发到了10.0.0.2 上的 80 端口上了

    * 30000 表示本地端口的监听地址

    * 10.0.0.2 表示远程主机以及端口

    * root@10.0.0.2 创建的ssh隧道是连接到10.0.0.2 上的root用户的

    * 综上

    * 从本机10.0.0.1 建议到10.0.0.2的隧道,使用本地转发模式,监听本机的30000端口,当访问本机的30000端口时,数据会被转发到10.0.0.2的80 端口上

    第二种场景

    A. 本地服务器 10.0.0.1

    B: 中间服务器 10.0.0.2

    C: 目标服务器 192.168.0.2

    A——能访问——>B——能访问——>C

    A——不能访问————> C

    A 通过该本地端口 以B的名义去访问——>C

    ssh -Nf -L <本地IP>:<本地端口>:<目标主机>:<目标端口>  <中间服务器地址>

    复制

    ssh -Nf -L 30001:192.168.0.2:80 root@10.0.0.2

    复制

    远程端口转发

    应用场景:

    A: 客户端PC 10.0.0.1

    B: 服务器端 10.0.0.2

    B 可以ssh连接A,但是A无法连接B

    服务器端操作,这时 服务器端就是操作端
    
    ssh -R AIP:<A端口>:<B服务器端IP>:<服务器端端口>  <Aip>

    复制

    在10.0.0.2 上操作
    
    ssh -R 30001:localhost:80 root@10.0.0.1

    复制

    * 在 10.0.0.1 建立隧道连接 并在10.0.0.1上建立端口 30001 端口监听

    * 在10.0.0.1 访问30001 的端口 会通过转发 到 服务端10.0.0.2 的 80 端口

    动态转发

    A: 10.0.0.1

    B: 10.0.0.2

    本地转发、远程转发都是需要一个我们已知的一个应用服务的端口的,但是如果没有端口的话,这里就需要用动态转发。

    A 上操作
    
    ssh -D <local port> <B SSH server>

    复制

    例如:

    ssh -D 30002 root@10.0.0.2

    复制

    * -D bind_address:port D参数说明我们开启了一个本地的端口转发。通过在本地分配了一个socket去监听端口。只要连接请求到这个port上来时,这个连接就会被安全通过该转发出去,应用程序的协议将有远程机器来决定连接到哪里。

    A 把B 作为了自己的全权代理,不限定目标服务器以及端口

    场景说明:

    浏览器访问google.com,此时浏览器开启了一个端口15435,但是发现在访问某个节点时,此网络包被丢弃了或者返回了错误的信息,导致我们无法访问google.com. 但是我们可以访问proxy.remotehost.com,而且该代理机器可以访问google.com,因此我们用 proxy.remotehost.com 做一个跳转。

    复制

    因此我们利用的ssh动态端口转发技术来达到这个目的,在本地开启30002端口,并且将端口关联到proxy.remote.com的22端口上,通过浏览器的设置,将所有的请求都转发到 127.0.0.1:30002上,通过ssh隧道,会将数据包传递到proxy.remotehost.com:22 上。proxy 服务器会随机开启一个端口访问google.com.然后将数据返回给proxy,然后再返回给浏览器,这就是代理的转发。

    问题

    账号已登录成功就被退出了

    ssh -D 30002 -l username proxy.remotehost.com -N

    复制

    * 增加-N 选项 参数是 不请求shell界面,不执行远程命令。这个只是在端口转发的时候使用,其他不会请求

    让该进程在后台运行

    ssh -D 30002 -l username proxy.remotehost.com -Nf

    复制

    给ssh 增加http代理

    在某些场景下,PC 无法直接访问到ssh服务器,但是只有http代理可以访问,那么我们要建立这个socket5的端口转发只能为他增加一个代理

    ssh -D 30002 -l username proxy.remotehost.com -Nf -o ProxyCommand="connect -H web-proxy.oa.com:8282 %h %p "

    复制

    其中 ProxyCommand 执行了使用connect 程序来进行代理,通常还可以使用 corkscrew 来达到相同的效果。

    * 安装 ubuntu 下

    复制

    apt-get install connect-proxy

    复制

    * mac下安装corkscrew

    复制

    brew install corkscrew

    复制

    连接一段时间后 自耦东断开了

    ssh -D 30002 -l username proxy.remotehost.com -Nf -o ProxyCommand="connect -H web-proxy.oa.com:8080 %h %p " -o ServerAliveInterval=60

    复制

    -X 转发

    a

    真实场景

    A—— 10.0.0.11

    B: 10.0.0.2 可以访问内网A 也可以联网到B

    B: 115.xx.x 公有云机器

    C: 笔记本

    A——可以联网–可以访问——B

    C——可以联网 可以访问—-B

    B 无法访问A

    B 无法访问C

    目标:C想访问A

    1. 在A上建立动态连接
     ssh -D 0.0.0.0:1080 root@127.0.0.1
    
     在A 上建立自身的动态连接

    复制

    1. 在B上建立远程连接到公有云C

    复制

    ssh -R 0.0.0.0:30000:10.0.0.1:1080 root@115.X.X.X

    在B上建立远程转发,在115.X.X.X上启用建立端口 30000 目标主机为 10.0.0.1

    复制

    1. 在公有云上确认是否30000 端口建立成功

    复制

    ss -luntp |grep 30000

    复制

    1. 在笔记本上 建立本地连接到公有云30000端口

    复制

    ssh -L 11080:127.0.0.1:30000 root@115.x.x.x

    在本机笔记本上开启端口11080 将所有访问11080的流量转发到 115.XX.X.X 30000 端口上

    复制

    1. 在笔记本上连接到 A机器

    复制

    ssh -o ProxyCommand=’/usr/bin/nc -X 5 -x 127.0.0.1:11080 %h %p’ root@10.0.0.1

    复制

    参考

    ssh权威指南

    https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

    http://www.zsythink.net/archives/2450

    https://www.chenyudong.com/archives/linux-ssh-port-dynamic-forward.html
  • 如何使用SSH设置代理

    首先我们来了解一下什么是SSH.

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

    1、正向连接 – 端口转发

    例如:当前机器A,SSH服务端B,目标服务器C,他们三者之间的关系是A可以SSH访问到B,B可以直接访问C,要达到的效果就A通过SSH端口转发直接访问服务器C.

    例如:A为自己在家里的电脑,B为公司提供外网可以SSH访问的服务器B,C为内网服务器.B可以访问内网中的服务器C. 通过以下命令可以实现端口映射,通过SSH服务器将本地端口映射到服务器C对应的端口上,从而实现在本地A直接访问C的目的.

    在Client机器A执行如下命令:

    ssh -L [本地IP可省略:][本地端口]:[服务器C地址]:[服务器C端口] [SSH服务器IP] -p [非默认端口22]

    如果使用的是默认SSH端口22 ,则”-p 端口”不用输入.

    ssh -L 8001:10.0.0.1:8001 username@115.13.13.1 -p 2200

    这样在访问本机的8001端口,通过SSH服务器B端口转发后,实际访问的就是服务器C的8001端口.

    2、反向连接 – 端口转发

    就是将Client的端口镜像到SSH服务器上,所有可以访问SSH服务器的访问SSH镜像的端口时即是访问Client的端口.

    ssh -R [SSH服务器IP:][SSH服务器上端口]:[客户端侧IP或能访问到的IP]:[客户端侧IP端口或能反问的IP的端口] 用户名@SSH服务器IP -p SSH服务器端口

    如果SSH服务器使用的为默认22端口,则后面的”-p SSH服务器端口”不用输入

    ssh -R 115.13.13.1 8080:127.0.0.1:8001 username@115.13.13.1 -p 2200

    3、socket代理

    ssh服务器可以访问外网,能访问google,facebook等站点,client可以访问ssh服务器但是不能访问google,facebook.如果希望client通过ssh服务器代理访问google,facebook通过以下命令可以实现.

    ssh -D 8081 username@SSH服务器IP -p SSH服务器端口

    本地浏览器上设置socket代理后,浏览器即可访问google,facebook站点了.

    要点2:确保SSH服务器的/etc/ssh/sshd_config配置文件的AllowTcpForwarding和GatewayPorts均配置为yes

    1. AllowTcpForwarding:yes 顾名思义是允许sshd进程转发tcp数据包
    2. GateWayPorts: yes 是确保公网ssh服务器的所有网卡都监听17780端口
  • Linux alias所有用户 当前用户

    自定义alias命令格式

    alias gs="git status" --color=auto, –color指定自定义命令的颜色
    直接在终端中执行alias命令只对当前终端有效, 不太方便
     
     

    alias设置对当前用户有效的方法

    只需一步, 在~/.bashrc末尾加入你的alias命令即可, 比如alias gs="git status" --color=auto, 重新打开一个终端就行了

    alias设置对所有用户有效的方法

    只需一步, 在/etc/profile.d/目录下创建一个shell文件00-aliases.sh

    执行sudo vim /etc/profile.d/00-aliases.sh
    然后输入你需要的alias命令并保存, 比如alias gs="git status" --color=auto

    现在再打开一个终端就可以使用你自定义的命令了
     
     

    笔记

    1. /etc/profile是一个全局文件,会在~/.profile执行之前执行
    2. /etc/profile.d中存放的.sh脚本文件会被/etc/profile中的函数调用
    3. 启动一个终端时会执行/etc/profile文件, 它会执行/etc/profile.d中的.sh脚本文件, 执行时使用的具体命令要么是source /etc/profile.d/your_script.sh要么是./etc/profile.d/your_script.sh
    4. 使用00-作为.sh文件的名字开头是为了先执行该文件
    5. 虽然直接编辑/etc/profile文件也可以实现全局的alias, 但是不推荐这样做
  • Linux查看网络流量

    作为一个非职业运维,不时需要查看Linux服务器上的网络流量状况。本文介绍几个常用的Linux查看网络流量命令,并简要介绍其用法。部分命令系统已经内置,某些命令则需要从软件仓库或者自行编译安装,本文以CentOS系统为例介绍软件安装方法。

    查看总流量

    ip

    ip 命令来自 iproute2util 包,是查看、配置网络/路由的工具。作为 ifconfig 的替代品,ip 命令功能更强大,用法更语义化。

    ip命令在大多数系统上都已经默认安装,也可通过 yum install -y iproute 安装。ip 的 “-s -h” 参数查看各网卡的总流量,下图是 ip -s -h link 的输出结果:

    ip命令输出结果

    nload

    nload 命令可以查看各个网络设备的当前网络速率,也会展示流经设备的总流量。

    nload 来自EPEL软件库,CentOS安装命令为:yum install -y epel-release && yum install -y nload。查看eth0网卡流量 nload eth0命令输出如下:

    nload查看网络流量

    PS:netstat -s 和 ifconfig -s 都可以查看收发的总包(netstat分协议给出),但不会给出字节数据。

    查看实时网速网速

    nload 命令可以输出当前网速,上面已经介绍过,本节不再赘述。

    dstat

    dstat 是一个用来替换vmstatiostatnetstatnfsstatifstat的全能系统信息统计工具,支持数据实时刷新,输出直观易懂。

    dstat 默认没有安装,安装命令为:yum install -y dstatdstat -tnf 1 10 输出接下来10秒内每秒的网络数据:

    dstat输出

    sar

    sar 是System Activity Report的缩写,是一款全面的Linux系统运行状态统计和性能分析工具,可从磁盘IO、CPU负载、内存使用等多个维度对系统活动进行报告。

    sar 命令来自 sysstat 包,可使用这个命令安装:yum install -y sysstatsar -n TCP 1 10可查看接下来10秒内的tcp数据:

    sar查看tcp数据

    查看连接/进程流量

    ss/netstat

    ss 和 netstat 是查看活动链接/监听端口的常用命令。ss 是 netstat 的替代,性能更好,建议使用。

    ss 是 iproute2util 包的一部分,因此在大多数系统上默认安装,也可通过yum install -y iproute安装。netstat 来自 net-tools 包,新版系统上需要自行安装:yum install -y net-tools

    下图是用ss查看tcp连接的输出:

    ss查看tcp连接

    iftop

    iftop 是一款实时流量监控工具,可以查看每个连接的实时速率。

    iftop 来自EPEL软件库,安装命令是:yum install -y epel-release && yum install -y iftopiftop -nN -i eth0实时查看eth0网卡的各个连接和网速:

    iftop查看实时网速

    nethogs

    nethogs 是为了查看单个进程流量而设计的工具,按照进程进行带宽分组。

    nethogs 来自EPEL软件库,安装命令是:yum install -y epel-release && yum install -y nethogsnethogs -d 2 eth0 每2秒刷新流经eth0网卡的进程流量信息:

    nethogs输出

    其他

    tcpdump可以用来抓包,保存的数据可以用wireshark打开和查看。

  • Linux下删除乱码或特殊字符文件

    今天遇到一个问题,一个文件名是“-MXV9.log”,直接用rm删除的时候就报错,如下:

    [localhost]rm -MXV9.log
    rm: illegal option -- M
    rm: illegal option -- X
    rm: illegal option -- V
    rm: illegal option -- 9
    rm: illegal option -- .
    rm: illegal option -- l
    rm: illegal option -- o
    rm: illegal option -- g
    Usage: rm [-Rfir] file ...
    

    通常对这类文件都可以使用引号括起来删除,但是这里带引号删除也一样报illegal option的错。

    找了一些资料后发现这种文件可以这样删除:先ls -i 查到文件的inode,然后用find命令删除

    [localhost]ls -ilrt
    
    100985 -rw-r--r--  1 tbcs      users            0 Apr 18 11:32 -MXV9.log
    

    最前面一列的100985就是文件的inode,在主机上执行如下命令即可删除文件

    [localhost]find ./ -inum 100985 -exec rm {} \;
    或者 
    
    [localhost]find ./ -inum 100985 -delete;

    所以大家以后遇到文件名为乱码或者带有特殊字符的文件需要删除的情况下,可以尝试使用这种方法。

  • Linux tar.gz、tar、bz2、zip 等解压缩、压缩命令详解

    Linux tar.gz、tar、bz2、zip 等解压缩、压缩命令详解

    分类 编程技术

    Linux 常用的压缩与解压缩命令有:tar、gzip、gunzip、bzip2、bunzip2、compress 、uncompress、 zip、 unzip、rar、unrar 等。


    tar

    参数:

    • -z 用gzip指令处理备份文件
    • -v 显示执行过程
    • -f 指定备份文件
    • -c 建立备份文件
    • -t 列出备份文件的内容
    • -x 从备份文件中还原文件
    • -p 保留权限
    • –exclude 排除指定文件

    最常用的打包命令是 tar,使用 tar 程序打出来的包我们常称为 tar 包,tar 包文件的命令通常都是以 .tar 结尾的。生成 tar 包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲 tar 命令的基本用法。

    tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:

    # tar -cf all.tar *.jpg

    这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

    # tar -rf all.tar *.gif

    这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去,-r 是表示增加文件的意思。

    # tar -uf all.tar logo.gif

    这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

    # tar -tf all.tar

    这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

    # tar -xf all.tar

    这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

    以上就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。

    1) tar调用

    gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip。下面来举例说明一下:

    # tar -czf all.tar.gz *.jpg

    这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,包名为 all.tar.gz。

    # tar -xzf all.tar.gz

    这条命令是将上面产生的包解开。

    2) tar 调用 bzip2

    bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。

    与 bzip2 相对的解压程序是 bunzip2。tar 中使用 -j 这个参数来调用 gzip。下面来举例说明一下:

    # tar -cjf all.tar.bz2 *.jpg

    这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,包名为 all.tar.bz2

    # tar -xjf all.tar.bz2

    这条命令是将上面产生的包解开。

    3)tar 调用 compress

    compress 也是一个压缩程序,但是好象使用 compress 的人不如 gzip 和 bzip2 的人多。.Z 结尾的文件就是 bzip2 压缩的结果。与 compress 相对的解压程序是 uncompress。tar 中使用 -Z 这个参数来调用 compress。下面来举例说明一下:

    # tar -cZf all.tar.Z *.jpg

    这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 compress 压缩,生成一个 uncompress 压缩过的包,包名为 all.tar.Z。

    # tar -xZf all.tar.Z

    这条命令是将上面产生的包解开。

    有了上面的知识,你应该可以解开多种压缩文件了,下面对于 tar 系列的压缩文件作一个小结:

    1) 对于.tar结尾的文件

    tar -xf all.tar

    2) 对于 .gz 结尾的文件

    gzip -d all.gz
    gunzip all.gz

    3)对于 .tgz 或 .tar.gz 结尾的文件

    tar -xzf all.tar.gz
    tar -xzf all.tgz

    4) 对于 .bz2 结尾的文件

    bzip2 -d all.bz2
    bunzip2 all.bz2

    5) 对于 tar.bz2 结尾的文件

    tar -xjf all.tar.bz2

    6) 对于 .Z 结尾的文件

    uncompress all.Z

    7) 对于 .tar.Z 结尾的文件

    tar -xZf all.tar.z

    另外对于 Windows 下的常见压缩文件 .zip 和 .rar,Linux 也有相应的方法来解压它们:

    1) 对于 .zip

    linux 下提供了 zip 和 unzip 程序,zip 是压缩程序,unzip 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

    # zip all.zip *.jpg

    这条命令是将所有 .jpg 的文件压缩成一个 zip 包:

    # unzip all.zip

    这条命令是将 all.zip 中的所有文件解压出来。

    2) 对于 .rar

    要在 linux 下处理 .rar 文件,需要安装 RAR for Linux。下载地址:http://www.rarsoft.com/download.htm,下载后安装即可。

    # tar -xzpvf rarlinux-x64-5.6.b5.tar.gz
    # cd rar 
    # make

    这样就安装好了,安装后就有了 rar 和 unrar 这两个程序,rar 是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

    # rar a all *.jpg

    这条命令是将所有 .jpg 的文件压缩成一个 rar 包,名为 all.rar,该程序会将 .rar 扩展名将自动附加到包名后。

    # unrar e all.rar

    这条命令是将 all.rar 中的所有文件解压出来:


    扩展内容

    tar

    -c: 建立压缩档案 
    -x:解压 
    -t:查看内容 
    -r:向压缩归档文件末尾追加文件 
    -u:更新原压缩包中的文件

    这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

    -z:有gzip属性的 
    -j:有bz2属性的 
    -Z:有compress属性的 
    -v:显示所有过程 
    -O:将文件解开到标准输出 

    下面的参数 -f 是必须的:

    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。 

    # tar -cf all.tar *.jpg

    这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

    # tar -rf all.tar *.gif 

    这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。

    # tar -uf all.tar logo.gif 

    这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

    # tar -tf all.tar 

    这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

    # tar -xf all.tar 

    这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

    压缩

    tar –cvf jpg.tar *.jpg       // 将目录里所有jpg文件打包成 tar.jpg 
    tar –czf jpg.tar.gz *.jpg    // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz 
    tar –cjf jpg.tar.bz2 *.jpg   // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2 
    tar –cZf jpg.tar.Z *.jpg     // 将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 compress 压缩,生成一个 umcompress 压缩过的包,命名为jpg.tar.Z 
    rar a jpg.rar *.jpg          // rar格式的压缩,需要先下载 rar for linux 
    zip jpg.zip *.jpg            // zip格式的压缩,需要先下载 zip for linux

    解压

    tar –xvf file.tar         // 解压 tar 包 
    tar -xzvf file.tar.gz     // 解压 tar.gz 
    tar -xjvf file.tar.bz2    // 解压 tar.bz2 
    tar –xZvf file.tar.Z      // 解压 tar.Z 
    unrar e file.rar          // 解压 rar 
    unzip file.zip            // 解压 zip 

    总结

    1、*.tar 用 tar –xvf 解压 
    2、*.gz 用 gzip -d或者gunzip 解压 
    3、*.tar.gz和*.tgz 用 tar –xzf 解压 
    4、*.bz2 用 bzip2 -d或者用bunzip2 解压 
    5、*.tar.bz2用tar –xjf 解压 
    6、*.Z 用 uncompress 解压 
    7、*.tar.Z 用tar –xZf 解压 
    8、*.rar 用 unrar e解压 
    9、*.zip 用 unzip 解压
  • 进程管理工具Supervisor使用教程

    Supervisor 是 Linux/Unix 系统下的一个进程管理工具。可以很方便的监听、启动、停止和重启一个或多个进程。通过 Supervisor 管理的进程,当进程意外被 Kill 时,Supervisor 会自动将它重启,可以很方便地做到进程自动恢复的目的,而无需自己编写 shell 脚本来管理进程。

    安装 Supervisor

    这里仅举例 CentOS 系统下的安装方式:

    # 安装 epel 源,如果此前安装过,此步骤跳过
    yum install -y epel-release
    yum install -y supervisor  

    创建一个配置文件

    cp /etc/supervisord.conf /etc/supervisord.d/supervisord.conf

    编辑新复制出来的配置文件 /etc/supervisord.d/supervisord.conf,并在文件结尾处添加以下内容后保存文件:

    # 新建一个应用并设置一个名称,这里设置为 hyperf
    [program:hyperf]
    # 设置命令在指定的目录内执行 
    directory=/var/www/hyperf/ 
    # 这里为您要管理的项目的启动命令 
    command=php ./bin/hyperf.php start 
    # 以哪个用户来运行该进程 
    user=root 
    # supervisor 启动时自动该应用 
    autostart=true 
    # 进程退出后自动重启进程 
    autorestart=true 
    # 进程持续运行多久才认为是启动成功 
    startsecs=1 
    # 重试次数 startretries=3 
    # stderr 日志输出位置 
    stderr_logfile=/var/www/hyperf/runtime/stderr.log 
    # stdout 日志输出位置 
    stdout_logfile=/var/www/hyperf/runtime/stdout.log

    建议同时增大配置文件中的 minfds 配置项,默认为 1024。同时也应该修改系统的 unlimit,防止出现 Failed to open stream: Too many open files 的问题。

    启动 Supervisor

    运行下面的命令基于配置文件启动 Supervisor 程序:

    supervisord -c /etc/supervisord.d/supervisord.conf

    使用 supervisorctl 管理项目

    # 启动 hyperf 应用
    supervisorctl start hyperf
    # 重启 hyperf 应用
    supervisorctl restart hyperf
    # 停止 hyperf 应用
    supervisorctl stop hyperf  
    # 查看所有被管理项目运行状态
    supervisorctl status
    # 重新加载配置文件
    supervisorctl update
    # 重新启动所有程序
    supervisorctl reload