分类目录归档:Linux

CentOS 7.X 装机参考

#查看文件描述符限制
ulimit -n

#调整文件描述符(文件最后添加内容)
vi /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

#RAID卡查看
dmesg | grep -i raid
[    1.521079] Areca RAID Controller0: Model ARC-1200, F/W V1.49 2010-12-02
[    1.521203] scsi host0: Areca SATA RAID Controller (RAID6 capable)
[    1.648025] scsi 0:0:16:0: Processor         Areca    RAID controller  R001 PQ: 0 ANSI: 0

cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: Areca    Model: ARC-1200-VOL#00  Rev: R001
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi0 Channel: 00 Id: 16 Lun: 00
  Vendor: Areca    Model: RAID controller  Rev: R001
  Type:   Processor                        ANSI  SCSI revision: 00
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST1000NM0033-9ZM Rev: SN04
  Type:   Direct-Access                    ANSI  SCSI revision: 05

lspci | grep -i raid
03:00.0 RAID bus controller: Areca Technology Corp. ARC-1200 2-Port PCI-Express to SATA II RAID Controller


#查看版本
cat /etc/system-release
cat /etc/issue 	#CentOS 7下不会再输出版本

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

#查看网卡
ip addr
ip link
ip -s link
ifconfig 	#CentOS 7下,默认不再安装此工具

#本机DNS配置,配置文件/etc/resolv.conf
options timeout:1 attempts:1 rotate
nameserver 192.168.1.1
nameserver 8.8.8.8

#CentOS 7下网卡命名发生了变化,以前的ethX这种命名不见
#如果要改回来,需要修改/etc/default/grub文件
#添加net.ifnames=0 biosdevname=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us net.ifnames=0 biosdevname=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

#修改网卡配置信息(注意网卡名称)
#CentOS 7中除了名称改变,其它几乎是一致的
vi vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.1.168
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eno16777736
UUID=7f9bd132-fb60-4ec8-8021-734f15dc0ff2
DEVICE=eno16777736
ONBOOT=yes

#CentOS 7 主机名相关状态(相关信息可以通过hostnamectl完成)
[root@localhost ~]# hostnamectl status
   Static hostname: localhost.localdomain
         Icon name: computer
           Chassis: n/a
        Machine ID: 2c3cda62de28434a894128e7ade1627b
           Boot ID: bd5d076f8a8c42358fe8ef4dbc6f0929
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-229.el7.x86_64
      Architecture: x86_64

#查看主机名
hostname

#CentOS 7中修改主机名
vi /etc/hostname
localhost.localdomain

#CentOS 6.x中(CentOS中不存在/etc/sysconfig/network)
vi /etc/sysconfig/network
NETWORKING=yes		#ipv4网络
NETWORKING_IPV6=no	#ipv6网络
HOSTNAME=vfeelit	#主机名称

#CentOS 7时间相关
[root@localhost ~]# timedatectl
      Local time: Sat 2015-11-07 22:38:42 PST
  Universal time: Sun 2015-11-08 06:38:42 UTC
        RTC time: Sun 2015-11-08 06:38:42
        Timezone: America/Los_Angeles (PST, -0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: no
 Last DST change: DST ended at
                  Sun 2015-11-01 01:59:59 PDT
                  Sun 2015-11-01 01:00:00 PST
 Next DST change: DST begins (the clock jumps one hour forward) at
                  Sun 2016-03-13 01:59:59 PST
                  Sun 2016-03-13 03:00:00 PDT
# 列出所有时区
timedatectl list-timezones 

# 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
timedatectl set-local-rtc 1 

# 设置系统时区为上海
timedatectl set-timezone Asia/Shanghai 

# 也可以使用如下方法(CentOS 6.x中使用的方法)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

##同步时间(yum install ntp)
ntpdate asia.pool.ntp.org

##查看当前时区的时间
date -R
Sun, 08 Nov 2015 14:45:07 +0800

#本地设置(修改为中文)
vi /etc/locale.conf
ANG="zh_CN.UTF-8"

#关闭Selinux
vi /etc/selinux/config
#关闭Selinux后可能无法开机,Ctrl+F1切换终端可以查看,编辑/etc/grub2.conf
#在语言设置之后添加selinux=0

#赋予rc.loal执行权限(CentOS 6.x中不需要)
ls -lha /etc/rc.d/rc.local 
-rw-r--r--. 1 root root 473 3月   6 2015 /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

#查看当前运行级别(runlevel)
cat /etc/systemd/system/default.target
#修改运行级别(先删除/etc/systemd/system/default.target符合链接)
rm -f /etc/systemd/system/default.target
#运行级别3
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
#运行级别5
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

#去掉一批自启动服务(systemctl list-unit-files|grep enabled)
#如果要停止当期服务,使用systemctl stop xxx 
systemctl disable auditd.service
systemctl disable avahi-daemon.service
systemctl disable firewalld.service
systemctl disable cups.service
systemctl disable irqbalance.service
systemctl disable iscsi.service
systemctl disable kdump.service
systemctl disable lvm2-monitor.service
systemctl disable mdmonitor.service
systemctl disable microcode.service
systemctl disable multipathd.service
systemctl disable NetworkManager.service
systemctl disable postfix.service
systemctl disable tuned.service
systemctl disable remote-fs.target
systemctl disable dm-event.socket
systemctl disable iscsid.socket
systemctl disable iscsiuio.socket
systemctl disable lvm2-lvmetad.socket

#安装
#使用系统默认安装的Chrony服务即可(http://blog.ifeeline.com/2554.html)
#1、ntpd.service #时间同步,不需要开机启动

2、nscd.service #缓存(默认没有DNS缓存)
有提供passwd, group, hosts, services,这里主要使用hosts
vi /etc/nscd.conf

#       logfile                 /var/log/nscd.log
        threads                 8
        max-threads             128
        server-user             nscd
#       stat-user               somebody
        debug-level             5
#       reload-count            5
        paranoia                no
#       restart-interval        3600


        enable-cache            hosts           yes
        positive-time-to-live   hosts           5
        negative-time-to-live   hosts           10
        suggested-size          hosts           211
        check-files             hosts           yes
        persistent              hosts           yes
        shared                  hosts           yes
        max-db-size             hosts           33554432
3、sysstat.service #系统性能
4、supervisord.service #进程监控

配置第三方YUM源:

#默认
yum repolist
base/7/x86_64        CentOS-7 - Base
extras/7/x86_64      CentOS-7 - Extras
updates/7/x86_64     CentOS-7 - Updates 

######
#安装epel,这个软件包,默认被extras收录,可以直接yum安装
yum install 
#也可以手动安装
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh epel-release-7-5.noarch.rpm
#确认
yum repolist
base/7/x86_64        CentOS-7 - Base
epel/x86_64          Extra Packages for Enterprise Linux 7 - x86_64
extras/7/x86_64      CentOS-7 - Extras 
updates/7/x86_64     CentOS-7 - Updates 

######
##-------ius源,它依赖epel(yum install epel-release)
#https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/repoview/
#来自这个源的软件包,习惯加一个u
wget https://rhel7.iuscommunity.org/ius-release.rpm
rpm -ivh ius-release.rpm

##--------Webtatic源,也依赖epel(yum install epel-release),这是一个理想的php(5.4-5.6,7),nginx的RPM源
#http://repo.webtatic.com/yum/el7/x86_64/RPMS/
#来自这个源的软件包,习惯加一个w
wget https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
rpm -ivh webtatic-release.rpm

#安装PHP
yum install php71w-bcmath.x86_64 php71w-cli.x86_64 php71w-common.x86_64 php71w-fpm.x86_64 php71w-gd.x86_64 php71w-mbstring.x86_64 php71w-mcrypt.x86_64 php71w-mysqlnd.x86_64 php71w-opcache.x86_64 php71w-pdo.x86_64 php71w-pecl-apcu.x86_64 php71w-pecl-mongodb.x86_64 php71w-pecl-redis.x86_64 php71w-pgsql.x86_64 php71w-process.x86_64 php71w-recode.x86_64 php71w-soap.x86_64 php71w-tidy.x86_64 php71w-xml.x86_64 php71w-intl.x86_64 php71w-devel.x86_64

#安装PHP后修改对应文件权限
find . -user apache
/var/log/php-fpm		#要改
/var/cache/httpd
/var/cache/httpd/proxy
/var/lib/dav
/run/httpd/htcacheclean

find . -group apache
/usr/sbin/suexec
/var/cache/httpd
/var/cache/httpd/proxy
/var/lib/dav
/var/lib/php/wsdlcache		#要改	
/var/lib/php/session		#要改
/run/httpd
/run/httpd/htcacheclean


##--------remi源,也依赖epel(yum install epel-release)
##Remi源可以安装多个不同版本的PHP,而且扩展比较齐全,对于单一的服务部署,推荐使用Webtatic源
##否则可以用Remi源,安装完成后会自动添加服务管理脚本 /lib/systemd/system/php**-php-fpm.service
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
## 安装完成后,会对应多个仓库
-rw-r--r-- 1 root root  456 3月  21 06:28 remi-php54.repo
-rw-r--r-- 1 root root 1.3K 3月  21 06:28 remi-php70.repo
-rw-r--r-- 1 root root 1.3K 3月  21 06:28 remi-php71.repo
-rw-r--r-- 1 root root 1.3K 3月  21 06:28 remi-php72.repo
-rw-r--r-- 1 root root 2.6K 3月  21 06:28 remi.repo
-rw-r--r-- 1 root root  750 3月  21 06:28 remi-safe.repo
如果希望把某个版本作为主版本(就是安装到/usr/bin等目录),可以使用yum --enablerepo=remi-php71 install ****, 否则将独立安装。

// PHP 7.1
yum --enablerepo=remi install php71-php php71-php-bcmath php71-php-cli php71-php-common php71-php-devel php71-php-fpm php71-php-gd php71-php-intl php71-php-json php71-php-mbstring php71-php-mcrypt php71-php-mysqlnd php71-php-opcache php71-php-pdo php71-php-pecl-apcu php71-php-pecl-apcu-devel php71-php-pecl-crypto php71-php-pecl-igbinary php71-php-pecl-igbinary-devel php71-php-pecl-imagick php71-php-pecl-imagick-devel php71-php-pecl-mongodb php71-php-pecl-uuid php71-php-pecl-zip php71-php-pgsql php71-php-process php71-php-recode php71-php-soap php71-php-tidy php71-php-xml php71-php-xmlrpc php71-php-pecl-amqp php71-php-pecl-redis4 php71-php-pecl-swoole2 php71-php-pecl-uploadprogress php71-php-phalcon3

// PHP 5.4
// php54-php-pecl-swoole2 php54-php-phalcon3无对应
yum --enablerepo=remi install php54-php php54-php-bcmath php54-php-cli php54-php-common php54-php-devel php54-php-fpm php54-php-gd php54-php-intl php54-php-json php54-php-mbstring php54-php-mcrypt php54-php-mysqlnd php54-php-opcache php54-php-pdo php54-php-pecl-apcu php54-php-pecl-apcu-devel php54-php-pecl-crypto php54-php-pecl-igbinary php54-php-pecl-igbinary-devel php54-php-pecl-imagick php54-php-pecl-imagick-devel php54-php-pecl-mongodb php54-php-pecl-uuid php54-php-pecl-zip php54-php-pgsql php54-php-process php54-php-recode php54-php-soap php54-php-tidy php54-php-xml php54-php-xmlrpc php54-php-pecl-amqp php54-php-pecl-redis4 php54-php-pecl-uploadprogress 

// Remi源安装的配置放入到/opt/remi/php**/root/, 配置安装到了/etc/opt/remi/php**/(注:PHP5.5以下版本,配置在安装目录)

// 添加服务启动脚本
cat php71-php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=notify
EnvironmentFile=/etc/opt/remi/php71/sysconfig/php-fpm
ExecStart=/opt/remi/php71/root/usr/sbin/php-fpm --nodaemonize
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

###### 
##为了避免意外更新,改为默认不启用
vi /etc/yum.repos.d/ius.repo	  #把ius的enable改为0
vi /etc/yum.repos.d/webtatic.repo #把webtatic的enable改为0
vi /etc/yum.repos.d/remi.repo	  #remi容器默认enable改为0

#######
##查看软件包的通用方法(先搜索,后安装)
yum repolist #查看启用仓库
yum --enablerepo=ius info php56u.x86_64 #查看某个源中的具体软件包信息
yum --disablerepo="*" --enablerepo="epel" list available | less #列出所有
yum --disablerepo="*" --enablerepo="ius" search php #源中搜索
yum install --enablerepo="ius" php56u.x86_64 #安装具体软件包

安装MySQL:(http://devdocs.magento.com/guides/v2.0/install-gde/prereq/mysql.html#instgde-prereq-mysql-centos)

#安装源
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 
rpm -ivh mysql-community-release-el7-5.noarch.rpm
#从源安装MySQL
yum -y install mysql-server
#MySQL初始化
mysql_secure_installation
#开启服务
systemctl start mysqld.service

————————————————————–
CentOS 7.X的如下变化最让人不习惯:
一、CentOS的Services使用了systemd来代替sysvinit管理

systemd的服务管理程序:
systemctl是主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。

直接运行systemctl可以列出正在运行的服务状态:

[root@vfeelit ~]# systemctl
UNIT                                         LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount            loaded active waiting   Arbitrary Executable File Formats File System
sys-devices-pl...serial8250-tty-ttyS0.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS0
sys-devices-pl...serial8250-tty-ttyS1.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-pl...serial8250-tty-ttyS2.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-pl...serial8250-tty-ttyS3.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-vb...728-block-xvdb-xvdb1.device loaded active plugged   /sys/devices/vbd-51728/block/xvdb/xvdb1
sys-devices-vbd\x2d51728-block-xvdb.device   loaded active plugged   /sys/devices/vbd-51728/block/xvdb
sys-devices-vb...768-block-xvda-xvda1.device loaded active plugged   /sys/devices/vbd-768/block/xvda/xvda1
sys-devices-vbd\x2d768-block-xvda.device     loaded active plugged   /sys/devices/vbd-768/block/xvda
sys-devices-vif\x2d0-net-eth0.device         loaded active plugged   /sys/devices/vif-0/net/eth0
sys-devices-vif\x2d1-net-eth1.device         loaded active plugged   /sys/devices/vif-1/net/eth1
sys-module-configfs.device                   loaded active plugged   /sys/module/configfs
sys-subsystem-net-devices-eth0.device        loaded active plugged   /sys/subsystem/net/devices/eth0
sys-subsystem-net-devices-eth1.device        loaded active plugged   /sys/subsystem/net/devices/eth1
-.mount                                      loaded active mounted   /

## systemd-cgls树形方式展示
[root@vfeelit ~]# systemd-cgls
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
├─user.slice
│ └─user-0.slice
│   └─session-5468.scope
│     ├─2837 sshd: root@pts/0    
│     ├─2845 -bash
│     ├─3003 systemd-cgls
│     └─3004 systemd-cgls
└─system.slice
  ├─php-fpm.service
  │ ├─ 2821 php-fpm: pool www              
  │ ├─ 2916 php-fpm: pool www              
  │ ├─ 2972 php-fpm: pool www              
  │ ├─32313 php-fpm: master process (/etc/php-fpm.conf
  │ ├─32316 php-fpm: pool www              
  │ ├─32317 php-fpm: pool www              
  │ ├─32318 php-fpm: pool www              
  │ ├─32319 php-fpm: pool www             
  │ ├─32320 php-fpm: pool www 

如何启动/关闭、启用/禁用服务
启动一个服务:systemctl start postfix.service
关闭一个服务:systemctl stop postfix.service
重启一个服务:systemctl restart postfix.service
显示一个服务的状态:systemctl status postfix.service
在开机时启用一个服务:systemctl enable postfix.service
在开机时禁用一个服务:systemctl disable postfix.service
查看服务是否开机启动:systemctl is-enabled postfix.service; echo $?
查看已启动的服务列表:systemctl list-unit-files | grep enabled

启用服务就是在当前“runlevel”的配置文件目录/etc/systemd/system/multi-user.target.wants/里,建立/usr/lib/systemd/system里面对应服务配置文件的软链接;禁用服务就是删除此软链接。(这种搞法非常常见)

[root@vfeelit multi-user.target.wants]# pwd
/etc/systemd/system/multi-user.target.wants
[root@vfeelit multi-user.target.wants]# ls -lah
crond.service -> /usr/lib/systemd/system/crond.service
nginx.service -> /usr/lib/systemd/system/nginx.service
nscd.service -> /usr/lib/systemd/system/nscd.service
ntpd.service -> /usr/lib/systemd/system/ntpd.service
php-fpm.service -> /usr/lib/systemd/system/php-fpm.service
rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
sshd.service -> /usr/lib/systemd/system/sshd.service
supervisord.service -> /usr/lib/systemd/system/supervisord.service
sysstat.service -> /usr/lib/systemd/system/sysstat.service

CentOS 6.x中也是如此,但是语法已经不一样了。

二、修改系统运行级别

切换到运行级别
systemd使用比sysvinit的运行级更为自由的target替代。第3运行级用multi-user.target替代。第5运行级用graphical.target替代。runlevel3.target和runlevel5.target分别是指向 multi-user.target和graphical.target的符号链接。

可以使用下面的命令切换到“运行级别3 ”:
systemctl isolate multi-user.target或systemctl isolate runlevel3.target
可以使用下面的命令切换到“运行级别5 ”:
systemctl isolate graphical.target或systemctl isolate runlevel5.target

改变默认运行级别
systemd使用链接来指向默认的运行级别。在创建新的链接前,可以通过下面命令删除存在的链接: rm /etc/systemd/system/default.target

默认启动运行级别3 :
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

默认启动运行级别5 :
ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

systemd不使用/etc/inittab文件。

查看当前运行级别
旧的runlevel命令在systemd下仍然可以使用。可以继续使用它,尽管systemd使用 ‘target’ 概念(多个的 ‘target’ 可以同时激活)替换了之前系统的runlevel。等价的systemd命令是systemctl list-units –type=target

其他配置工具:
1、setup和ntsysv工具还是保留了,但是功能已大大减弱,以前ntsysv工具可以控制所有系统服务的自启动,现在只能控制少部分服务。
2、/etc/resolv.conf这个DNS配置文件没变。
3、/etc/sysconfig/network-scripts/ifcfg-ens192网卡配置文件名字和一些选项有所变化。
4、引导方式改用grub2引导,grub2有如下特点:1、模块化设计;2、支持多体系硬件架构;3、支持国际化多语言;4、独立内存管理;5、支持脚本语言。

最后再稍作对比总结,三个基本任务,查看启动的服务,设置服务是否开机启动,当期关闭和启动服务

查看启动的服务
chkconfig –list -> systemctl list-unit-files|grep enabled(/etc/systemd/system/multi-user.target.wants)
设置服务是否开机启动
chkconfig –levels 35 xxxx off -> systemctl enable postfix.service
当期关闭和启动服务
service xxx stop -> systemctl start postfix.service

Linux下PPTPD VPN安装使用

Linux下常用的VPN服务有两个,一个是pptp,另一个则是openvpn。pptp更简单一些,但是只有独立服务器和XEN VPS可以搭建;openvpn则没有任何限制。pptp搭建出来的VPN,不需要特殊的VPN客户端,直接在Windows下创建VPN拨号连接即可;而openvpn需要安装一个客户端来进行拨号。

一共有5个软件包。这个pptp vpn解决方案,地址:http://poptop.sourceforge.net/yum/stable/packages/,这里能下载到你想要的所有东西。

1 首先安装一个叫dkms的软件包:

wget http://poptop.sourceforge.net/yum/stable/packages/dkms-2.0.17.5-1.noarch.rpm
然后:[有一个警告提示,忽略]
rpm -ivh dkms-2.0.17.5-1.noarch.rpm

2 然后安装所谓的MPPE

wget http://poptop.sourceforge.net/yum/stable/packages/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm

使用rpm -qa kernel_ppp_mppe查看 显示kernel_ppp_mppe-1.0.2-3dkms 确保已经正确安装了。

3 然后是安装PPP, ppp在yum源中,可以使用:
yum install ppp 安装,如果已经安装则会被忽略。
如果yum无法安装PPP,可以使用RPM方式安装:

wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-9.0.rhel5.i386.rpm
rpm -Uvh ppp-2.4.4-9.0.rhel5.i386.rpm

4 安装iptables
一般iptables都是默认有安装的,如果iptables没有安装可以使用 yum install iptables安装,否则需要下载rpm包安装。

5 PPTPD安装:

wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm

[CentOS6 64位版本:poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm]
以上两个RPM包的安装,必须要注意的是操作系统的位数,以上是32为的软件包安装,如果是64位的,必须使用64位的软件包。[可以参看软件包列表,查看操作系统位数可以使用getconf LONG_BIT]

这样,软件包安装就完毕了。接下来是配置:
配置pptp。要编辑/etc/pptpd.conf文件:
vi /etc/pptpd.conf
找到“locapip”和“remoteip”这两个配置项,将注释符去掉,更改为你期望的IP段值。localip表示服务器的IP,remoteip表示分配给客户端的IP地址,可以设置为区间。以下是pptp默认的配置:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

localip就是只服务器的IP地址,对于一台VPS,IP地址一定不是192.168.0.1,所以这里改为你机器的IP地址。remoteip是vpn接入后分配给客户机的ip地址。

接下来再编辑/etc/ppp/options.pptpd文件,为VPN添加Google DNS:

vi /etc/ppp/options.pptpd
#在末尾添加下面两行:
ms-dns 8.8.8.8
ms-dns 8.8.4.4

设置pptp VPN账号密码。需要编辑/etc/ppp/chap-secrets这个文件:
vi /etc/ppp/chap-secrets
在这个文件里面,按照“用户名 pptpd 密码 *”的形式编写,一行一个账号和密码。

修改内核设置,使其支持转发。编辑/etc/sysctl.conf文件:
vi /etc/sysctl.conf
将“net.ipv4.ip_forward”改为1,变成下面的形式:net.ipv4.ip_forward=1
保存退出,并执行下面的命令来生效它:sysctl -p

添加iptables NAT规则
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
这里的192.168.0.0/24是只一个网络,这个网络就是客户端IP地址所在的网络,把这个网络的数据转发给eth0接口,然后输入下面的指令让iptables保存我们刚才的转发规则,以便重启系统后不需要再次添加:

/etc/init.d/iptables save

重启iptables:

/etc/init.d/iptables restart

重启pptp服务。输入下面的指令重启pptp:

/etc/init.d/pptpd restart

设置开机自动运行服务:
最后一步是将pptp和iptables设置为开机自动运行,这样就不需要每次重启服务器后手动启动服务了

chkconfig pptpd on
chkconfig iptables on

插曲:
在CentOS6.x上安装时,通过yum安装了ppp,然后rpm安装了pptpd-1.3.4-2.rhel5.i386.rpm,最后发现pptpd起不来,最后安装了对应的pptpd-1.3.4-2.el6.i686.rpm解决(注意el6,yum安装ppp时安装了ppp-2.4.5-5.el6.i686)

如果服务器还启用了过滤规则,可能还需要添加如下规则,否则会导致连接不上:

-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT

在Windows7下安装Linux(CentOS 6.x)

在Linux下,貌似无法识别NTFS,但可以识别FAT32,但是FAT32有个致命问题,就是单个文件无法大于4G,然而下载的CentOS 6.5 DVD1大于4G,所以这个方法不做考虑。

反过来思考,可以分一个EXT3分区,然后把其挂在Windows7下,这个是可行的,所以本文使用这个方法。

我的电脑C盘是一个SSD硬盘,只分一个区,这里把C盘压榨6G出来,用来安装CentOS到机械硬盘的空闲地方。这里使用一个叫分区助手的工具完成这个操作(直接360安装卫士的软件中搜索可下载):

先拆分分区,然后接着格式化(具体过程略)。
格式化分区

然后寻找一个叫ext2fsd的软件,用它可以把Ext3挂在到Windows里(http://www.ext2fsd.com)
EXT分区挂载到Windows

这里把这个EXT3分区映射为Windows下的X盘,接下就是拷贝文件进去:

CentOS-6.5-x86_64-bin-DVD1.iso
CentOS-6.5-x86_64-bin-DVD2.iso
images
isolinux

isolinux 和 images是从CentOS-6.5-x86_64-bin-DVD1.iso文件中提取出来的。

接下来就是要从这个EXT3分区引导安装,这个时候还需要一个叫EasyBCD的工具:
Windows下添加引导
这里配置一个启动项,这个配置项是需要正确指定刚刚配置的EXT3的对应编号,比如hd0表示第一个硬盘,后面的1表示这个硬盘的第二分区。
引导Linux分区启动
重新启动后就可以看到这个启动项,选择进入开始引导,选择镜像位置后就和用光盘安装没有什么区别了,所以后面的过程就省略了。安装完成后这个EXT3分区可以删掉,也可以挂到Linux中,使用它在Linux和Windows中共享文件。

原创文章,装载务必保留出处。
永久链接: http://blog.ifeeline.com/1090.html

CentOS 6.X下添加新硬盘

在虚拟机下操作练习。添加一张新硬盘,然后启动系统。

#fdisk命令参数介绍
#     p、打印分区表。
#     n、新建一个新分区。
#     d、删除一个分区。
#     m、输出菜单
#     q、退出不保存。
#     w、把分区写进分区表,保存并退出。

#查看分区情况,应看到新添加的磁盘为sdb,未分区
fdisk -l 	
#然后开始分区,这里就分一个区
fdisk /dev/sdb
#建立分区,用p表示建立主分区,然后用n建立分区(指定开始与结束柱面)
fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):
#最后用w保存分区表信息

#再次查看分区信息
fdisk –l
.....
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x64627767

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1305    10482381   83  Linux

#接下来需要格式化
mkfs –t ext4 –c /dev/sdb1

#然后把其进行挂载
mount –t ext4 –o rw /www

这样就完成了新硬盘添加和分区格式化。

为了让其能开机自动加载,还需要编辑/etc/fstab实现自动挂载

UUID=144e7ab9-0a81-4139-9ca7-9e69435d6ec9	/	ext4 	noatime,nodiratime 	1 1
UUID=817c334e-721c-4296-9e8b-e588bac87d87	/boot	ext4    	defaults        		1 2
UUID=d77cd91c-8ec8-44af-a5c7-e9052371b46e 	swap	swap    defaults        		0 0

第一列是设备名称,第二列是挂载点,第三列是挂载的文件系统,第四轮是挂载选项(比如可以是rw),第五列表示分区是否备份(像swap分区是不需要备份的),第六列表示分区是否校验(根分区一般是1,其它一般是2)。这里显示的分区是使用UUID来指定的,实际也可以直接指定分区名称,比如/dev/sab1等。不过,如果知道分区对应的UUID呢?

#列出当前系统中所有已挂载文件系统的UUID
blkid -s UUID              #build id->blkid
#查看UUID
ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 Jun 19 23:31 144e7ab9-0a81-4139-9ca7-9e69435d6ec9 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jun 19 23:31 817c334e-721c-4296-9e8b-e588bac87d87 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jun 19 23:31 e70fa1c3-2542-49cd-adaf-7364fb263218 -> ../../sdb1

从这个结果可以看到,实际UUID就是一个实际分区的链接文件。

总结一下操作硬盘:

fdisk -l		显示硬盘和分区信息
fdisk /dev/sd*		管理硬盘,比如添加删除分区等
mkfs –t 类型 分区	格式化分区
df –h			查看已经挂载的文件系统
/etc/fstab		自动挂载设置文件

原创文章,转载务必保留出处。
永久链接: http://blog.ifeeline.com/1088.html

GDB在调试程序时候提示Missing separate debuginfos, use: debuginfo-install glibc…

使用GDB调试C程序时:

gdb sum
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/the_c/sum...done.
(gdb) run
Starting program: /root/the_c/sum 
The sum of 1+2+3+...is 4950
Program exited with code 033.
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64

提示使用debuginfo-install安装glibc。
在shell下运行:

debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64
-bash: debuginfo-install: command not found

提示debuginfo-install命令不存在,那么必须还要安装个软件包。实际debuginfo-install是yum-utils软件包的一个工具,所以:

yum install yum-utils
...
rpm -ql yum-utils | grep debuginfo-install
/usr/bin/debuginfo-install
/usr/share/man/man1/debuginfo-install.1.gz

然后再次运行:

debuginfo-install glibc-2.12-1.132.el6_5.1.x86_64

Dependencies Resolved

===================================================================================
 Package                             Arch     Version              Repository
                                                                              Size
===================================================================================
Installing:
 glibc-debuginfo                     x86_64   2.12-1.132.el6_5.1   debug     8.7 M
 nss-softokn-debuginfo               x86_64   3.14.3-9.el6         debug     1.7 M
 yum-plugin-auto-update-debug-info   noarch   1.1.30-17.el6_5      updates    22 k
Installing for dependencies:
 glibc-debuginfo-common              x86_64   2.12-1.132.el6_5.1   debug     8.3 M

至此,问题解决。

原创文章,转载务必保留出处。
永久链接:http://blog.ifeeline.com/1079.html

Linux 作业管理(job control)

当登录系统取得bash shell之后,在单一终端机下同时进行多个作业的行为管理。

在进行作业管理的行为中,其实每个作业都是目前bash的子进程,即彼此之间是有相关性的。登录一个终端出现提示符让你操作的环境成为前台 (foreground),至于其它作业就可以放入后台(background)去暂停或运行。注意:放入后台的作业必须不能与用户互动。

Bash的作业控制必须要注意到的限制是:
这些作业所触发的进程必须来自于你shell的子进程
前台:你可以控制于执行命令的这个环境成为前台的作业
后台:可以自行运行的作业,你无法使用[ctrl+c]终止它,可使用bg/fg调用该作业
后台中执行的进程不能等待terminal/shell的输入

1 Job control管理 [作业管理]
Bash下面的Job分前台与后台,然后再后台里面的作业状态又可分为暂停与运行中。

直接将命令丢到后台中执行的&
例子:

tar –zpcf /tmp/etc/targ.gz /etc &

后面加入上&表示在后台处理,回车后看到bash会给予这个命令一个作业号码(job number),就是那个[1]。但是这个标准输出和错误输出还是都屏幕上。所以应该使用重定向处理。

tar –zpcf /tmp/etc.tar.gz /etc/ > /tmp/log.txt 2>&1 &

将目前的作业丢到后台中暂停:ctrl-z
比如正在使用vi,却发现有个文件不知道放在哪里,需要到bash环境下进行查找,此时只要将vi丢到后台当中等待即可。
例子:

vi ~/.bashrc
# 在vi的一般模式下,按下[ctrl]-z这两个键
[1]+ Stopped
# 顺利取得前台控制权

按下[ctrl]-z这两个键,屏幕上出现[1],表示这是第一个作业,而那个+代表最近一个被丢进后台的作业,且目前在后台下默认会被取用的那个作业(与fg这个命令有关)。而那个stopped则代表目前这个作业的状态。默认,使用[ctrl-z]丢到后台当中的作业都是暂停状态。

查看目前的后台作业状态:jobs
用法:

jobs [-lrs]
参数:
-l 除了列出job number与命令串之外,同时列出PID的号码
-r 仅列出正在后台run的作业
-s 仅列出正在后台当中暂停(stop)的作业

一般,直接执行jobs即可。如果还想知道该Job number的PID号码,可以加上-l这个参数。在输出的信息中,那个+代表默认的取用作业。如果目前有两个作业在后台当中,两个作业都是暂停的,而如果仅输入fg时,那么那个标志了+的作业会被拿到前台当中来处理。其实+代表最近被放到后台的作业号码,-代表最近第二个被放置到后台当中的作业号码。而超过最后第三个以后的作业,就不会有+/-符号存在了。

将后台作业拿到前台来处理:fg

fg %jobnumber
参数:
%jobnumber: jobnumber为作业号码(数字)。注意:%可有可无
如果fg –则把标志了-的那个作业拿出来。


让作业在后台下的状态变成运行中:bg

由于按下ctrl-z后作业会放到后台停止,如果要让其继续在后台运行起来,需要使用bg,它和fg的用法一样。

管理后台当中的作业:kill
如果需要删除某个作业,需要使用kill。

用法:
kill –signal %jobnumber
参数:
-l 列出目前能够使用的信号(signal)有哪些
signal 代表给予后面接的那个作业什么样的指示。
-1 重新读取一次参数的配置文件
-2 代表与由键盘输入ctrl-c同样的操作
-9 立刻强制删除一个作业
-15 以正常的程序方式终止一项作业

注意:-9通常是在强制删除一个不正常的作业时所使用的,-15则是以正常步骤接受一项作业(15也是默认值)
另外,kill后面接的数字默认是PID,如果想要管理bash的作业控制,就得要加上%数字了。

永久链接:http://blog.ifeeline.com/1052.html

Linux 终端登录

[root@vfeelit ~]# pstree -an
init
  ├─sshd
  │   ├─sshd 
  │   │   └─bash
  │   └─sshd 
  │       └─bash
  │           └─pstree -an
  ├─login     
  │   └─bash
  ├─mingetty /dev/tty2
  ├─mingetty /dev/tty3
  ├─mingetty /dev/tty4
  ├─mingetty /dev/tty5
  └─mingetty /dev/tty6

默认启动了6个终端(tty)等待用户登录。6个终端命名分别是tty1-tty6,系统开机后默认进入tty1等待用户登录。可以通过使用ALT+F1-F6切换到不同的终端。登录后如果使用pstree查看可知对应的终端“名称”为login并在其下产生了一个bash子进程。实际这个login名称可以看做是对应tty的别名。

和由终端进入bash环境不同,如果通过sshd进入bash的话,首先由主sshd派生一个子进程,然后在这个子进程下再产生bash子进程。实际上,有主sshd派生的子sshd进程,它们是用pts/0-pts/n来做别名的。

永久链接: http://blog.ifeeline.com/1050.html