欢迎光临
我们一直在努力

Linux 之centos7 制作服务自启动systemd

u22e阅读(4835)

  • Centos7开机第一个程序从init完全换成了systemd这种启动方式,同centos 5 6已经是实质差别。systemd是靠管理unit的方式来控制开机服务,开机级别等功能。
  • 在/usr/lib/systemd/system目录下包含了各种unit文件,有service后缀的服务unit,有target后缀的开机级别unit等,这里临时介绍关于service后缀的文件。因为systemd在开机要想执行自启动,都是通过这些*.service 的unit控制的

具体流程

  1. 在/usr/lib/systemd/system目录下新建一个 service-name.service的文件
  2. 以apache的httpd.service的unit为例解释
  1. [Unit]
  2. #定义描述
  3. Description=The Apache HTTP Server
  4. #指定了在systemd在执行完那些target之后再启动该服务
  5. After=network.target remote-fs.target nss-lookup.target
  6. [Service]
  7. #定义Service 的运行type,一般是forking,就是后台运行
  8. Type=notify
  9. Environment=LANG=C
  10. #以下定义systemctl start |stop |reload *.service  的每个执行方法,具体命令#需要写绝对路径
  11. ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
  12. ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
  13. # Send SIGWINCH for graceful stop
  14. KillSignal=SIGWINCH
  15. KillMode=mixed
  16. #创建私有的内存临时空间
  17. PrivateTmp=true
  18. [Install]
  19. WantedBy=multi-user.target

以下是我自己写的一个java项目,需要他开机自运行的service,systemd会帮我执行我写脚本,shell如下,仅供参考

  1. #!/bin/bash
  2. CMD=$1
  3. case $CMD in
  4. -start)
  5.         nohup java -jar /home/mobileoa/apps/shMediaManage-0.0.1.jar &> /home/mobileoa/apps/shm.log &
  6.         ;;
  7. -stop)
  8.         port=$(sudo netstat -tnlp | grep ‘:9099‘ |awk ‘{print $nf}’ |awk -f’/’ ‘{print $1}’)
  9.         sudo kill $port
  10.         ;;
  11. -restart)
  12.         port=$(sudo netstat -tnlp | grep ‘:9099‘ |awk ‘{print $nf}’ |awk -f’/’ ‘{print $1}’)
  13.         sudo kill $port
  14.         nohup java -jar /home/mobileoa/apps/shMediaManage-0.0.1.jar &> /home/mobileoa/apps/shm.log &
  15.         ;;
  16. *)
  17.         echo “Usage: shMediaManager.sh -start | -stop | -restart .Or use systemctl start | stop | restart  MediaManager.service “
  18.         ;;
  19. esac

编辑.service文件,在Exec*下执行脚本,来启动关闭重启服务

  1. [UNIT]
  2. Description=Media wanager Service
  3. After=network.target
  4. [Service]
  5. Type=forking
  6. **ExecStart=/home/mobileoa/apps/shMediaManager.sh -start
  7. ExecReload=/home/mobileoa/apps/shMediaManager.sh -restart
  8. ExecStop=/home/mobileoa/apps/shMediaManager.sh -stop**
  9. PrivateTmp=True
  10. [Install]
  11. WantedBy=multi-user.target

设置开机自起
systemctl enable MediaManager.service
会创建一个连接

haproxy实现discuz论坛的动静分离和负载均衡

u22e阅读(2624)

搭建拓扑图如下

一、在cs2、cs3、cs4上安装httpd

[root@cs2 ~]# yum install httpd

[root@cs3 ~]# yum install httpd

[root@cs4 ~]# yum install httpd

 

二、在cs3、cs4上安装php和php-mysql

[root@cs3 ~]# yum install php
[root@cs3 ~]# yum install php-mysql

[root@cs4 ~]# yum install php
[root@cs4 ~]# yum install php-mysql

三、在cs5上安装mysql

[root@cs5 ~]# yum install mariadb-server

四、在cs5上给dz论坛创建数据库

  1. [root@cs5 ~]# systemctl start mariadb
  2. [root@cs5 ~]# mysql
  3. #创建一个discuz用的数据库,库名叫dz
  4. MariaDB [(none)]> create database dz;
  5. #创建并授权账号dzadmin密码123321给dz库,授权范围为全网
  6. MariaDB [(none)]> grant all privileges on dz.* to dzadmin@’%’ identified by ‘123321‘;
  7. #授权账号dzadmin密码123321给dz库,授权范围为本地
  8. MariaDB [(none)]> grant all privileges on dz.* to dzadmin@localhost identified by ‘123321‘;
  9. #刷新权限
  10. MariaDB [(none)]> flush privileges;

五、配置cs2、cs3、cs4的httpd

  1. [root@cs2 ~]# vim /etc/httpd/conf/httpd.conf
  2. ServerName cs2.xinfeng.com:80    #修改此处
  3. DocumentRoot “/var/www/html/upload”    #因为次文件还不存在,所以会报错,等装了dz之后再执行之后的就OK了
  4. [root@cs2 ~]# httpd -t
  5. [root@cs2 ~]# systemctl start httpd
  6. [root@cs3 ~]# vim /etc/httpd/conf/httpd.conf
  7. ServerName cs3.xinfeng.com:80    #修改此处
  8. DocumentRoot “/var/www/html/upload”
  9. [root@cs3 ~]# httpd -t
  10. [root@cs3 ~]# systemctl start httpd
  11. [root@cs4 ~]# vim /etc/httpd/conf/httpd.conf
  12. ServerName cs4.xinfeng.com:80    #修改此处
  13. DocumentRoot “/var/www/html/upload”
  14. [root@cs4 ~]# httpd -t
  15. [root@cs4 ~]# systemctl start httpd

六、在cs3安装discuz

[root@cs3 ~]# wget  http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip
[root@cs3 ~]# mkdir Discuz
[root@cs3 ~]# unzip -d /root/Discuz Discuz_X3.2_SC_UTF8.zip
[root@cs3 ~]# cp -a /root/Discuz/* /var/www/html/
[root@cs3 ~]# chmod -R 777 /var/www/html/upload/*

打开cs3.xinfeng.com安装

论坛管理员账号admin,密码123

七、将cs3上安装完成后的网站根目录复制到cs2和cs4上

#复制cs3下的/var/www/html所有文件到cs2/var/www/html/下
[root@cs3 ~]# scp -r /var/www/html/* 192.168.1.114:/var/www/html/

#复制cs3下的/var/www/html所有文件到cs4/var/www/html/下
[root@cs3 ~]# scp -r /var/www/html/* 192.168.1.115:/var/www/html/

八、将cs3和cs4的静态文件存放目录挂载到cs2下

#/var/www/html/upload中需要挂载的目录如下
data ┄┄┄数据缓存及附件
static ┄┄┄静态文件

设置cs2为NFS服务器

[root@cs2 ~]# yum install nfs-utils
[root@cs2 ~]# yum install rpcbind
[root@cs2 ~]# service rpcbind start
[root@cs2 ~]# vim /etc/exports
#NFS输出目录为data,可以访问这个目录的主机为cs3和cs4,权限为读写,访问uid为0(root),允许超过1024的端口号连接
/var/www/html/upload/data/ 192.168.1.113(rw,all_squash,anonuid=0,insecure)
/var/www/html/upload/data/ 192.168.1.115(rw,all_squash,anonuid=0,insecure)
#NFS输出目录为static,可以访问这个目录的主机为cs3和cs4,权限为读写,访问uid为0(root),允许超过1024的端口号连接
/var/www/html/upload/static/ 192.168.1.113(rw,all_squash,anonuid=0,insecure)
/var/www/html/upload/static/ 192.168.1.115(rw,all_squash,anonuid=0,insecure)
[root@cs2 ~]# service nfs start
#查看共享状态
[root@cs2 ~]# showmount -e
Export list for cs2.xinfeng.com:
/var/www/html/upload/static 192.168.1.115,192.168.1.113
/var/www/html/upload/data   192.168.1.115,192.168.1.113

在cs3上挂载

[root@cs3 ~]# yum install nfs-utils
[root@cs3 ~]# yum install rpcbind
[root@cs3 ~]# service rpcbind start
[root@cs3 ~]# service nfs start
[root@cs3 ~]# mount 192.168.1.114:/var/www/html/upload/data/ /var/www/html/upload/data/
[root@cs3 ~]# mount 192.168.1.114:/var/www/html/upload/static/ /var/www/html/upload/static/
[root@cs3 ~]# showmount -e 192.168.1.114
Export list for 192.168.1.114:
/var/www/html/upload/static 192.168.1.115,192.168.1.113
/var/www/html/upload/data   192.168.1.115,192.168.1.113

在cs4上挂载

[root@cs4 ~]# yum install nfs-utils
[root@cs4 ~]# yum install rpcbind
[root@cs4 ~]# service rpcbind start
[root@cs4 ~]# service nfs start
[root@cs4 ~]# mount 192.168.1.114:/var/www/html/upload/data/ /var/www/html/upload/data/
[root@cs4 ~]# mount 192.168.1.114:/var/www/html/upload/static/ /var/www/html/upload/static/
[root@cs4 ~]# showmount -e 192.168.1.114
Export list for 192.168.1.114:
/var/www/html/upload/static 192.168.1.115,192.168.1.113
/var/www/html/upload/data   192.168.1.115,192.168.1.113

九、在cs1上安装配置haproxy

开起日志功能

[root@cs1 ~]# vim /etc/rsyslog.conf
#打开或增加一下几行,让udp514端口处于监听状态,并将日志纪录到指定文件中
$ModLoad imudp
$UDPServerRun 514
local2.*                                                /var/log/haproxy.log
[root@cs1 ~]# systemctl restart rsyslog.service
[root@cs1 ~]# ss -unl | grep 514
UNCONN     0      0            *:514                      *:*                  
UNCONN     0      0           :::514                     :::*

配置haproxy

[root@cs1 ~]# yum install haproxy
[root@cs1 ~]# vim /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
global    #全局配置

    log         127.0.0.1 local2    #日志纪录位置

    chroot      /var/lib/haproxy    #haproxy的工作目录
    pidfile     /var/run/haproxy.pid    #pid文件位置
    maxconn     4000                    #最大连接数
    user        haproxy                #运行时使用的用户身份
    group       haproxy                #运行时使用的组身份
    daemon                            #启动为守护进程,不加此处运行在前台
    
    stats socket /var/lib/haproxy/stats    #本地访问stats统计信息时以套接字方式通信
    
defaults    #默认配置
    mode                    http    #已http模式运行
    log                     global    #默认日志为全局配置中日志的设置
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8    #除本机外所有发往服务器的请求首部中加入“X-Forwarded-For”首部
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000    #前端最大并发连接数
    
listen static    #设置统计报告页面
    bind *:9000    #监听在本机9000端口
    stats enable    #打开
    stats hide-version    #隐藏haproxy版本
    stats uri /hadzadmin?stats    #统计页面路径
    stats realm "HAProxy/ Static"    #打开统计页面的认证功能
    stats auth hasts:123            #进入统计页面所使用的账号hasts和密码123
    stats admin if TRUE            #条件满足时进入管理级别
    
frontend  dz    #前端设置
    bind *:80    #监听在80端口
    acl url_static path_beg -i /data /static /images /javascript /stylesheets    #url开头为这些的静态内容
    acl url_static path_end -i .jpg .gif .png .css .js .html .ico    #url结尾带为这些的静态内容
    use_backend staser  if url_static    #如果静态内容符合url_static的条件,就调度到staser中的服务器
    default_backend             dyser    #其他默认调度到dyser中的服务器
    
backend dyser    #后端动态内容服务器设置
    cookie srv insert nocache    #在cookie中插入srv字串防止登录信息丢失
    balance     roundrobin    #调度算法为轮询
    server      cs3 192.168.1.113:80 check
    server      cs4 192.168.1.115:80 check
    
backend staser    #后端静态内容服务器设置
    balance     roundrobin
    server  cs1 192.168.1.114:80 check
    
[root@cs1 ~]# systemctl start haproxy

修改cs2、cs3、cs4的http配置文件,让他们能收到真实访问的ip

[root@cs2 ~]# vim /etc/httpd/conf/httpd.conf
#修改一下内容
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[root@cs2 ~]# service httpd reload
#cs3和cs4执行同样的操作

十、测试

分别看下cs2,cs3,cs4最近的访问日志

[root@cs2 ~]# tail -1 /var/log/httpd/access_log 
192.168.1.110 - - [05/Jun/2016:16:36:12 +0800] "GET /data/attachment/forum/201606/05/161843j4au463pthh432zf.png HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
[root@cs3 uc_server]# tail -1 /var/log/httpd/access_log 
192.168.1.110 - - [05/Jun/2016:16:33:07 +0800] "GET /misc.php?mod=patch&action=ipnotice&_r=0.40765136777967004&inajax=1&ajaxtarget=ip_notice HTTP/1.1" 200 65 "http://cs1.xinfeng.com/forum.php?mod=viewthread&tid=1&extra=page%3D1" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
[root@cs4 data]# tail -1 /var/log/httpd/access_log 
192.168.1.110 - - [05/Jun/2016:16:33:07 +0800] "GET /misc.php?mod=patch&action=pluginnotice&inajax=1&ajaxtarget=plugin_notice HTTP/1.1" 200 65 "http://cs1.xinfeng.com/forum.php?mod=viewthread&tid=1&extra=page%3D1" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"

 

docker强制删除none的image镜像

u22e阅读(428)

报错信息

Error response from daemon: conflict: unable to delete e45989ee5383 (must be forced) - image is being used by stopped container d3c09f37e4b2

首先我查看镜像
再查看容器,包括运行后退出的。
#引起上面的原因是docker官方要求,docker rmi image_id 只能删除未被使用的image。
由上面这段话,我推断到有容器在使用这个镜像,所以没法删除。
排除方法:1、删除和bceaae03d0ea镜像有关联的容器 2、再重新删除镜像

查看镜像
[root@salt-master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> bceaae03d0ea 15 hours ago 172 MB
516249940/centos6-ssh v1 f6bb69ea7020 19 hours ago 556.4 MB
centos6-ssh latest f6bb69ea7020 19 hours ago 556.4 MB
docker.io/centos centos6 8315978ceaaa 4 weeks ago 194.6 MB
docker.io/ubuntu 12.10 3e314f95dcac 2 years ago 172 MB
查看所有容器
[root@salt-master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31142aabc63c bceaae03d0ea "/bin/sh -c 'apt-get " 15 hours ago Exited (100) 15 hours ago drunk_borg
f8aa111d0066 centos6-ssh "/usr/sbin/sshd -D" 18 hours ago Up 18 hours 0.0.0.0:32768->22/tcp my-first-docker
[root@salt-master ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31142aabc63c bceaae03d0ea "/bin/sh -c 'apt-get " 15 hours ago Exited (100) 15 hours ago drunk_borg
[root@salt-master ~]#

[root@salt-master ~]# docker ps -a |grep bceaae03d0ea
31142aabc63c bceaae03d0ea "/bin/sh -c 'apt-get " 15 hours ago Exited (100) 15 hours ago drunk_borg

[root@salt-master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31142aabc63c bceaae03d0ea "/bin/sh -c 'apt-get " 15 hours ago Exited (100) 15 hours ago drunk_borg
f8aa111d0066 centos6-ssh "/usr/sbin/sshd -D" 18 hours ago Up 18 hours 0.0.0.0:32768->22/tcp my-first-docker
删除已经退出运行的容器
[root@salt-master ~]# docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
31142aabc63c
[root@salt-master ~]#
[root@salt-master ~]#
[root@salt-master ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8aa111d0066 centos6-ssh "/usr/sbin/sshd -D" 18 hours ago Up 18 hours 0.0.0.0:32768->22/tcp my-first-docker

删除none镜像
[root@salt-master ~]# docker images |grep none
<none> <none> bceaae03d0ea 15 hours ago 172 MB
[root@salt-master ~]# docker images |grep none |awk '{print $3}'
bceaae03d0ea
[root@salt-master ~]# docker images |grep none |awk '{print $3}'|xargs docker rmi
Deleted: sha256:bceaae03d0ea6312608c6a9f310bcaa0b4363792fba6ee4875e1d2b9c7c1fbb1
[root@salt-master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
516249940/centos6-ssh v1 f6bb69ea7020 19 hours ago 556.4 MB
centos6-ssh latest f6bb69ea7020 19 hours ago 556.4 MB
docker.io/centos centos6 8315978ceaaa 4 weeks ago 194.6 MB
docker.io/ubuntu 12.10 3e314f95dcac 2 years ago 172 MB
[root@salt-master ~]#

 

nethogs 查看 Linux 进程的网络使用

u22e阅读(3138)

有时候我们客户会发现服务器或 VPS 网络慢,进一步发现大量带宽被占用,一些客户到这里为止就不知道怎么办了。有什么简单办法能找出哪个程序(或者进程)占用了带宽呢?Linux 监控流量的小工具不少,如 iftop, iptraf, ifstat, darkstat, bwm-ng, vnstat 等,大都是统计和监控网卡流量的。今天介绍的 NetHogs 有点特别,可以监控每个进程的网络带宽占用情况。

在 Ubuntu/Debian 上安装 nethogs:

$ sudo apt-get install nethogs

在 CentOS/RHEL 上安装 nethogs:

# yum install nethogs

运行 nethogs:

# nethogs

# nethogs eth0

 

Tomcat yum安装和Tomcat编译安装及应用部署

u22e阅读(3567)

tomcat安装

tomcat的组件:
<Server>
    <Service>
        <connector/>
        <connector/>
        <Engine>
            <Host />
            <Host>
                <Context/>
                ...
            </Host>
        </Engine>
    </Service>
</Server>

每个组件,均有java类来实现;

此组件可分为如下几类:
    顶级组件:Server
    服务类:Service
    连接器:http, https, ajp(apache jserv protocol)
    容器类:Engine, Host, Context
    被嵌套的组件:valve, logger, realm, loader, manager
    集群类组件:listener, ...

OS版本CentOS 7

(1)系统自带的openjdk+tomcat

- 查看yum仓库中jdk版本:
yum list all *jdk*
仓库中现有的openjdk版本为
java-1.6.0-openjdk
java-1.7.0-openjdk
java-1.8.0-openjdk

- 本次测试使用java-1.7.0-openjdk:
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel -y

- 设定java的环境变量($JAVA_HOME):
查看java目录
[root@localhost ~]# which java  
/usr/bin/java
[root@localhost ~]# ls -l /usr/bin/java 
lrwxrwxrwx 1 root root 22 4月  26 09:46 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 75 4月  26 09:46 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.13
1-2.6.9.0.el7_3.x86_64/jre/bin/java
~]# java -version   查看bin目录环境变量是否正常
java version "1.7.0_131"
OpenJDK Runtime Environment (rhel-2.6.9.0.el7_3-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

添加$JAVA_HOME
~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/bin
~]# . /etc/profile.d/java.sh 
~]# echo $JAVA_HOME
/usr/bin

tomcat安装
~]# yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps
tomcat的配置文件查看
~]# rpm -ql tomcat
/etc/logrotate.d/tomcat
/etc/sysconfig/tomcat
/etc/tomcat
/etc/tomcat/Catalina
/etc/tomcat/Catalina/localhost
/etc/tomcat/catalina.policy
/etc/tomcat/catalina.properties
/etc/tomcat/conf.d
/etc/tomcat/conf.d/README
/etc/tomcat/context.xml
/etc/tomcat/log4j.properties
/etc/tomcat/logging.properties
/etc/tomcat/server.xml
/etc/tomcat/tomcat-users.xml
/etc/tomcat/tomcat.conf
/etc/tomcat/web.xml
/usr/bin/tomcat-digest
/usr/bin/tomcat-tool-wrapper
/usr/lib/systemd/system/tomcat.service
/usr/lib/systemd/system/tomcat@.service
/usr/libexec/tomcat
/usr/libexec/tomcat/functions
/usr/libexec/tomcat/preamble
/usr/libexec/tomcat/server
/usr/sbin/tomcat
/usr/share/doc/tomcat-7.0.69
/usr/share/doc/tomcat-7.0.69/LICENSE
/usr/share/doc/tomcat-7.0.69/NOTICE
/usr/share/doc/tomcat-7.0.69/RELEASE-NOTES
/usr/share/tomcat
/usr/share/tomcat/bin/bootstrap.jar
/usr/share/tomcat/bin/catalina-tasks.xml
/usr/share/tomcat/conf
/usr/share/tomcat/lib
/usr/share/tomcat/logs
/usr/share/tomcat/temp
/usr/share/tomcat/webapps
/usr/share/tomcat/work
/var/cache/tomcat
/var/cache/tomcat/temp
/var/cache/tomcat/work
/var/lib/tomcat
/var/lib/tomcat/webapps
/var/lib/tomcats
/var/log/tomcat
/var/log/tomcat/catalina.out

- tomcat开启:8080和8009端口均正常开启
默认连接器:
    http, 8080
    ajp, 8009
~]# systemctl start tomcat.service
~]# ss -tnlp
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port              
LISTEN     0      128                       *:22                                                     
users:(("sshd",pid=1078,fd=3))LISTEN     0      100         127.0.0.1:25                                                  
users:(("master",pid=1423,fd=13))LISTEN     0      100       :::8009                                                
users:(("java",pid=2942,fd=47))LISTEN     0      100         :::8080                                                 
users:(("java",pid=2942,fd=46))LISTEN     0      128         :::22                                                 
users:(("sshd",pid=1078,fd=4))LISTEN     0      100          ::1:25                                                
users:(("master",pid=1423,fd=14))

(2)使用Oracle JDK和tomcat提供的编译完成的程序包

- Oracle JKD安装
~]# rpm -ivh jdk-7u79-linux-x64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:jdk-2000:1.7.0_79-fcs ################################# [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
jfxrt.jar...

- java环境变量设置
查看java目录
~]# ls -l /usr/java/
总用量 4
lrwxrwxrwx 1 root root 16 4月 26 10:23 default -> /usr/java/latest
drwxr-xr-x 8 root root 4096 4月 26 10:23 jdk1.7.0_79
lrwxrwxrwx 1 root root 21 4月 26 10:23 latest -> /usr/java/jdk1.7.0_79
java的bin目录
~]# cd /usr/java/jdk1.7.0_79/
jdk1.7.0_79]# ls
bin include LICENSE release THIRDPARTYLICENSEREADME.txt
COPYRIGHT jre man src.zip
db lib README.html THIRDPARTYLICENSEREADME-JAVAFX.txt
jdk1.7.0_79]# ls bin
appletviewer jarsigner javap jdb jps jvisualvm rmic tnameserv
apt java java-rmi.cgi jhat jrunscript keytool rmid unpack200
ControlPanel javac javaws jinfo jsadebugd native2ascii rmiregistry wsgen
extcheck javadoc jcmd jmap jstack orbd schemagen wsimport
idlj javafxpackager jconsole jmc jstat pack200 serialver xjc
jar javah jcontrol jmc.ini jstatd policytool servertool
设定环境变量,添加JAVA_HOME和PATH
~]# vim /etc/profile.d/java.sh
JAVA_HOME=/usr/java/latest
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
~]# . /etc/profile.d/java.sh
~]# echo $JAVA_HOME
/usr/java/latest
~]# echo $PATH
/usr/java/latest/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

- 安装tomcat
~]# tar -xf apache-tomcat-7.0.55.tar.gz -C /usr/local/
~]# cd /usr/local/
local]# ll
总用量 0
drwxr-xr-x 9 root root 149 4月 26 10:34 apache-tomcat-7.0.55
drwxr-xr-x. 2 root root 6 8月 12 2015 bin
drwxr-xr-x. 2 root root 6 8月 12 2015 etc
drwxr-xr-x. 2 root root 6 8月 12 2015 games
drwxr-xr-x. 2 root root 6 8月 12 2015 include
drwxr-xr-x. 2 root root 6 8月 12 2015 lib
drwxr-xr-x. 2 root root 6 8月 12 2015 lib64
drwxr-xr-x. 2 root root 6 8月 12 2015 libexec
drwxr-xr-x. 2 root root 6 8月 12 2015 sbin
drwxr-xr-x. 5 root root 46 11月 7 16:32 share
drwxr-xr-x. 2 root root 6 8月 12 2015 src
local]# ln -s apache-tomcat-7.0.55 tomcat
ocal]# cd tomcat/
tomcat]# ls 目录结构
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
tomcat]# ls conf/
catalina.policy context.xml server.xml web.xml
catalina.properties logging.properties tomcat-users.xml
tomcat]# ls webapps/
docs examples host-manager manager ROOT
tomcat]# ls bin/
bootstrap.jar commons-daemon-native.tar.gz digest.sh startup.bat tool-wrapper.sh
catalina.bat configtest.bat setclasspath.bat startup.sh version.bat
catalina.sh configtest.sh setclasspath.sh tomcat-juli.jar version.sh
catalina-tasks.xml daemon.sh shutdown.bat tomcat-native.tar.gz
commons-daemon.jar digest.bat shutdown.sh tool-wrapper.bat

- 设定tomcat环境变量
~]# vim /etc/profile.d/tomcat.sh
CATALINA_BASE=/usr/local/tomcat
PATH=$CATALINA_BASE/bin:$PATH
export CATALINA_BASE PATH

~]# . /etc/profile.d/tomcat.sh
~]# catalina.sh --help
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined

-开启tomcat
~]# catalina.sh configtest 检测配置文件是否正常
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
四月 26, 2017 10:40:10 上午 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environmen
ts was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib四月 26, 2017 10:40:11 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
四月 26, 2017 10:40:11 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8009"]
四月 26, 2017 10:40:11 上午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1328 ms

~]# catalina.sh start 开启tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
~]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
users:(("sshd",pid=1071,fd=3))LISTEN 0 100 127.0.0.1:25 *:*
users:(("master",pid=1429,fd=13))LISTEN 0 100 :::8009 :::*
users:(("java",pid=16417,fd=43))LISTEN 0 100 :::8080 :::*
users:(("java",pid=16417,fd=42))LISTEN 0 128 :::22 :::*
users:(("sshd",pid=1071,fd=4))LISTEN 0 100 ::1:25 :::*
users:(("master",pid=1429,fd=14))

目录文件查看
~]# cd /usr/local/tomcat/
tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
tomcat]# cd webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
webapps]# tree manager/
manager/
├── images
│   ├── add.gif
│   ├── asf-logo.gif
│   ├── code.gif
│   ├── design.gif
│   ├── docs.gif
│   ├── fix.gif
│   ├── tomcat.gif
│   ├── update.gif
│   └── void.gif
├── index.jsp
├── META-INF
│   └── context.xml
├── status.xsd
├── WEB-INF
│   ├── jsp
│   │   ├── 401.jsp
│   │   ├── 403.jsp
│   │   ├── 404.jsp
│   │   ├── sessionDetail.jsp
│   │   └── sessionsList.jsp
│   └── web.xml
└── xform.xsl

4 directories, 19 files
webapps]# tree ROOT/
ROOT/
├── asf-logo.png
├── asf-logo-wide.gif
├── bg-button.png
├── bg-middle.png
├── bg-nav-item.png
├── bg-nav.png
├── bg-upper.png
├── build.xml
├── favicon.ico
├── index.jsp
├── RELEASE-NOTES.txt
├── tomcat.css
├── tomcat.gif
├── tomcat.png
├── tomcat-power.gif
├── tomcat.svg
└── WEB-INF
└── web.xml

1 directory, 17 files
webapps]# tree host-manager/
host-manager/
├── images
│   ├── add.gif
│   ├── asf-logo.gif
│   ├── code.gif
│   ├── design.gif
│   ├── docs.gif
│   ├── fix.gif
│   ├── tomcat.gif
│   ├── update.gif
│   └── void.gif
├── index.jsp
├── manager.xml
├── META-INF
│   └── context.xml
└── WEB-INF
├── jsp
│   ├── 401.jsp
│   ├── 403.jsp
│   └── 404.jsp
└── web.xml

tomcat的配置文件:
server.xml:主配置文件;
context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp程序目录下的WEB-INF目录中,用于定义会话管理顺、JDBC等 ;conf/context.xml是为各webapp提供默认配置;
web.xml:每个webapp只有在“部署”之后才能够被访问;此文件则用于为各webapps定义默认的部署操作方式; 
tomcat-users.xml:用户认证的账号和密码配置文件;
catalina.policy:当使用-security选项来启动tomcat实例时会读取此配置文件来实现基于安全策略的运行方式;
catalina.properties:Java属性的定义文件,用于设定类加载器路径等 ,以及一些与JVM性能相关的调优参数;
logging.properties:日志系统相关的配置;

Java Webapp的组织结构:

有特定的组织形式、层次型的目录结构;主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等 ;
    /:webapps的根目录
    index.jsp:jsp的主页面文件
    WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml;
    META-INF/:当前webapp的私有资源目录,通常存储当前webapp自用的context.xml;
    classes/: 当前webapp的私有类;
    lib/:当前webapp的私有类,被打包成jar格式;
webapp归档格式:
.war:webapp
.jar:EJB的类;
.rar:资源适配器;
.ear:企业级应用程序;

linux 硬连接与软连接与复制

u22e阅读(2626)

对一个文件做硬连接,软连接,复制,查看三者的不同之处:
创建一个软连接
[root@localhost tmp]# ln -s tmp soft_tmp
创建一个硬连接:
[root@localhost tmp]# ln tmp hard_tmp
复制文件:
[root@localhost tmp]# cp tmp cp_tmp
查看三者的inod值
[root@localhost tmp]# ls -li
total 12
260855 -rwxr-xr–. 2 root root 2 Aug 22 01:51 tmp
260855 -rwxr-xr–. 2 root root 2 Aug 22 01:51 hard_tmp
287381 lrwxrwxrwx. 1 root root 3 Aug 22 01:48 soft_tmp -> tmp
287383 -rwxr-xr–. 1 root root 2 Aug 22 02:02 cp_tmp

可以发现硬连接的inod值与原文件一样,软连接与复制出来的文件inod值与源文件不同。
如果删除源文件则软连接会失效,硬连接依旧存在。

查看网上相关帖子,详细总结备份下:

我的总结:
三者的本质区别
本质区别在与inod的不同,硬连接是与物理文件直接相连的,是访问这个文件的另外一个入口,它与源文件没有任何差别,不使用硬盘容量,复制则是开辟一个新的硬盘空间并在里面填充了一样的内容,它的inod自然也就不同了,而软连接只是一个保存了源文件路径的文件,原文件的不存在了,这个路径也就错了,软连接也就失效了。

什么情况下使用哪个
可以使用硬连接对一个巨大的文件进行备份,软连接可以跨文件系统,可以对目录做软连接,硬连接则不行

自己的总结不够好,这里把别人写的好的总结也放进来。

1. 软连接可以 跨文件系统 ,硬连接不可以 。
2. 硬连接不管有多少个,都指向的是同一个I节点,会把 结点连接数增加 ,只要结点的连接数不是 0,文件就一直存在 ,不管你删除的是源文件还是 连接的文件 。软连接不直接使用i节点号,而 是使用文件路径名作为指针。所以 删除连接文件 对源文件无影响,但是 删除 源文件,连接文件 就会找不到要指向的文件 。软连接有自己的inode,并在磁盘上有一小片空间存放路径名.
3. 软连接可以对一个不存在的文件名进行连接 。
4. 软连接可以对目录进行连接。
5. 硬连接可以认为不是一个文件,它只是实际文件的一个别名,它的作用是防止真实文件被误操作, 给一个文件建立硬连接后,他们互为别名,删除其中任意一个,只会删除该别名,实际文件并不会 被删除。由于只是别名没有任何其他信息,所以并不占用原始文件大小的磁盘空间

限制帐号使用su与无需密码su

u22e阅读(2505)

限制帐号使用su:
Linux(针对redhat版本)下,不同的帐号之间的切换可以使用su命令,默认的配置中su是任何帐号都可以使用的,出于安全的考虑,需要对使用su的帐号进行限制。
su对帐号的认证、授权使用的是pam,以便用户根据自己的需求对su的认证、授权进行单独的配置。配置文件是
/etc/pam.d/su

cat /etc/pam.d/su
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the “wheel” group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the “wheel” group.
#auth required pam_wheel.so use_uid
auth include system-auth
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so

配置文件的第四行的注释表明:第五行配置将要求只有属于wheel组的用才能使用su
在这里pam调用的是pam_wheel.so模块,use_uid作为参数
我们将第五行的注释去掉,然后测试
1.添加两个普通用户tom mary
2.gpasswd -a mary wheel 将mary添加到wheel组
3.登录mary tom 分别执行su – root
4.执行后,mary只要输入正确的root密码就可以su到root,而tom不论输入root的密码正确与否都是返回:su: incorrect password的提示(限制之后tom也不能su到普通用户)。
成功限制用户对su的使用。

无需密码su:
root帐号su到其他帐号无需任何口令,普通用户su到root或其他用户都需要输入口令。su中的pam配置文件允许受信任的用户在su切换时无需任何口令。

配置文件的第二行注释表明:第三行的配置会将属于wheel组的用户设置为可信任的。
在这里pam调用的是 pam_wheel.so 用trust use_uid作为参数
去掉第三行注释,然后测试
1.添加两个普通用户tom mary
2.gpasswd -a mary wheel 将mary添加到wheel组
3.登录mary tom 分别执行su – root
4.执行后,mary用户直接却换到root用户,没有输入口令的提示(su成其他普通用户一样不需要口令),tom用户出现了输入口令的提示。
成功设置无需密码su

命令备忘:
su 直接切换到root
su – 切换到root身份和root的主目录。
用户组的成员在/etc/group中查看,多个用户以逗号分隔
gpasswd -d user group 从grup组删除user成员
id user 查看user用户属于哪些组

CentOS7安装配置SAMBA服务器

u22e阅读(2614)

假设我们有这样一个场景

特定组的组名为RD,目前的Alice、Jack、Tom三个人

安装SAMBA

# yum -y install samba samba-client samba-common
//或者使用rpm安装
#rpm -ivh samba-4.1.1-37.el7_0.src.rpm
//查看安装版本信息
# rpm -qi samba
Name :
samba
Epoch :
0
Version : 4.1.1
Release :
37.el7_0
Architecture: x86_64
Install Date: Mon 11 Aug 2014 05:10:39 PM CST
Group :
System Environment/Daemons
Size :
1657523
License :
GPLv3+ and LGPLv3+
Signature :
RSA/SHA256, Wed 06 Aug 2014 03:59:24 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM :
samba-4.1.1-37.el7_0.src.rpm
Build Date :
Wed 06 Aug 2014 03:33:22 AM CST
Build Host :
worker1.bsys.centos.org
Relocations : (not relocatable)
Packager :
CentOS BuildSystem <http://bugs.centos.org>
Vendor :
CentOS
URL : http://www.samba.org/
Summary :
Server and Client software to interoperate with Windows machines
Description :
Samba is the standard Windows interoperability
suite of programs for Linux and Unix.
Tips:也之前的SAMBA 3有一个重大的变化是:
security不再支持share
WARNING: Ignoring invalid value 'share' forparameter 'security'

配置SAMBA服务器

创建共享目录(假设共享/smb目录下的文件)
# mkdir -p /smb/docs
# mkdir -p /smb/tech

配置内核参数
# ulimit -n 16384
# vi /etc/security/limits.conf
#在最后加入以下内容
* - nofile 16384

Tip: 这主要是避免在启动Samba时出现以下警告信息:
rlimit_max: increasing rlimit_max (1024) tominimum Windows limit (16384)


# cd /etc/samba/
//备份原有的配置文件
# cp smb.conf smb.conf.origin

# vi/etc/samba/smb.conf
删除原有所有内容,添加如下内容:
[global]
workgroup=BIGCLOUD
netbios name=ZZSRV2
server string=Samba Server
#security=share
security=user
map to guest = Bad User
[SHAREDOCS]
path=/smb/docs
readonly=yes
browseable=yes
guest ok=yes
[RDDOCS]
path = /smb/tech/
public = no
writable = yes
write list = @RD
validusers = @RD

创建用户并分配权限

//创建操作系统用户
# useraddalice
# useraddjack
# useradd tom
# useradd RD

//修改用户的组
# usermod -a-G RD alice
# usermod -a-G RD jack
# usermod -a-G RD tom
# id alice
uid=1000(alice) gid=1000(alice)groups=1000(alice),1003(RD)

//创建SAMBA用户
# smbpasswd-a alice
# smbpasswd-a jack
# smbpasswd-a tom

//修改目录权限
# chown RD:RD/smb/tech/
# chmod 770/smb/tech
//查看服务状态
# ll -d/smb/tech/
drwxrwx--- 2 RD RD 4096 Aug 11 17:08 /smb/tech/

# systemctlrestart smb
# systemctlenable smb
# systemctlstatus smb
smb.service - Samba SMB Daemon
Loaded: loaded(/usr/lib/systemd/system/smb.service; enabled)
Active: active (running) since Tue2014-08-12 11:38:29 CST; 14s ago
Main PID: 16807 (smbd)
Status: "smbd: ready to serveconnections..."
CGroup: /system.slice/smb.service
16807 /usr/sbin/smbd
16808 /usr/sbin/smbd

systemd[1]:Starting Samba SMB Daemon...
smbd[16807]:[2014/08/12 11:38:29.255341, 0]../lib/util/become_daemon.c:136(daemon_ready)
systemd[1]:Started Samba SMB Daemon.
smbd[16808]:STATUS=daemon 'smbd' finished starting up and ready to serve connectionsfailedto retrieve print...CCESSFUL
Hint:Some lines were ellipsized, use -l to show in full.

测试连通性

// Linux上测试
# smbclient-L localhost -U alice%P@ssw0rd
Domain=[BIGCLOUD] OS=[Unix] Server=[Samba 4.1.1]

Sharename Type Comment
--------- ---- -------
SHAREDOCS Disk
RDDOCS Disk
IPC$ IPC IPC Service (Samba Server)
Domain=[BIGCLOUD] OS=[Unix] Server=[Samba 4.1.1]

Server Comment
--------- -------

Workgroup Master
--------- -------
//Windows上测试
C:\>netuse * /del
您有以下的远程连接:

\\192.168.1.18\d$
继续运行会取消连接。

您想继续此操作吗? (Y/N) [N]: y
命令成功完成。


C:\>netuse \\192.168.188.12 P@ssw0rd /U:alice
命令成功完成。

打开资源管理器进行写入测试

 

ubuntu进入recovery mode模式

u22e阅读(7355)

偶尔会遇到Ubuntu无法正常启动的情况,这时候需修改某些文件让系统正常启动,如果直接进入 recovery 模式,默认是文件权限只读,无法修改文件。这时我们需要进入recovery 的单用户模式,获得修改文件的权限。

1、重启ubuntu,随即长按shirft进入grub菜单,或等待grub菜单的出现,如下图


2、选择recovery mode,接着用方向键将光标移至recovery mode,按”e”键进入编辑页面,如下图:
3、将 ro recovery nomodeset 改为 rw single init=/bin/bash
4、 按 ctrl+x或者F10 进入单用户模式,当前用户即为root。这时候可以修改文件。修改完毕后重启即可。

另外一种方式,进入Recovery mode的Recovery Menu而不是采用单用户的方式。

重启Ubuntu,随即长按shift进入grub菜单;
选择recovery mode,回车确认,如下图;

在Recovery Menu中,选择“Root Drop to root shell prompt”,回车确认,如下图;

1)修改普通用户的密码

进入shell界面,使用passwd命令重新设定密码:passwd david,(david是系统中已有的username,但是如果root的用户就会有authentication token manipulation error错误),回车确认;
输入新密码;
再次确认新密码;
看到密码设定成功提示:passwd: password updated successfully;
重启系统进入GUI界面:sudo reboot;
2)修改root用户的密码

使用passwd命令重新设定密码:passwd root
输入新密码;
再次确认新密码;
看到密码设定成功提示:passwd: password updated successfully;
重启系统进入GUI界面:sudo reboot;

ubuntu系统安装成功后SSH连接不上

u22e阅读(2860)

ubuntu系统安装成功后SSH连接不上解决方法

 

1.运行sudo apt-get install openssh-server命令安装之后成功解决

 

2.在安装系统的时候勾选openssh的安装包