Linux服务器操作常用命令

原创 · 金汉江 · 2018-09-13

文件目录


/usr/local    |-apache
              |-mysql
              |-memcached
              |-php


/data1    |-software        下载软件放置目录
          |-scripts|-shell    脚本调试目录
          |-php

/data0    |-website  |-ip
          |          |-global
          |-mysql    |-data    数据存储目录
          |          |-log    数据库日志存储目录
      |
      |-apache|-apr        Apache安装扩展包文件放置目录
      |         |-apr-util
      |       |-openssl
      |-svn
      |-httpsqs

设置编码

vi /etc/profile
在最后添加

unset MAILCHECK

export LANG="zh_CN.UTF-8"
export LANGUAGE="zh_CN.UTF-8"

保存后执行:source /etc/profile 或 . /etc/profile便之生效

代码高亮显示

在工作目录下/root

vi .bashrc

alias vi='vim'

vi .vimrc

syntax on

set ai
set nohlsearch
set paste
set tabstop=4
set softtabstop=4
set shiftwidth=4
hi comment ctermfg=6

0 黑色 —默认VIM的背景就是黑色,不要选
1 红色
2 墨绿
3 黄色
4 难看刺眼的颜色,即默认的颜色 —不要选
5 类似粉色的
6 淡蓝色
7 白色 —不要选
高于7以上都是白色的了

其他修改,
修改字符串颜色,hi String ctermfg =darkred
修改类型颜色,hi Type ctermfg =yellow
修改数字颜色,hi Number ctermfg =darkblue
修改常量颜色,hi Constant ctermfg =blue
修改声明颜色,hi Statement ctermfg =darkyellow
设置关键字为蓝色非粗体 :hi Identifier ctermfg =blue cterm =none (bold就设置成粗体)

MySQL数据库安装

wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz
tar zxvf mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.15-linux-glibc2.5-x86_64 /usr/local/mysql

groupadd mysql
useradd -r -g mysql mysql
mkdir -p /data0/mysql/data
mkdir -p /data0/mysql/log
chown -R mysql:mysql /data0/mysql

mv /etc/my.cnf /etc/my.cnf.backup

cd /usr/local/mysql
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db --user=mysql --datadir=/data0/mysql/data
chown -R root .
chown -R mysql data

修改my.cnf内容ln -s /usr/local/mysql/my.cnf /etc/my.cnf
mv /usr/local/mysql/data/* /data0/mysql/data/

bin/mysqld_safe --user=mysql --datadir=/data0/mysql/data &
cp support-files/mysql.server /etc/init.d/mysql

chkconfig --add mysql

Apache安装

1、安装apr
tar -zvxf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=/data0/apache/apr
make
make install

2、安装 apr-util
tar -zvxf apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --prefix=/data0/apache/apr-util --with-apr=/data0/apache/apr
make
make install

3 安装pcre
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
tar zxvf pcre-8.32.tar.gz
cd pcre-8.32
./configure --prefix=/data0/apache/pcre 
make
make install

4 安装openssl
http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar zxvf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config -fPIC --prefix=/data0/apache/openssl enable-shared

yum install -y openssl openssl-devel
wget http://www.apache.org/dist/httpd/httpd-2.4.7.tar.gz

tar -zxvf httpd-2.4.7.tar.gz
cd httpd-2.4.7
cp -f ../apr-1.4.6.tar.gz ./srclib/
cp -f ../apr-util-1.5.1.tar.gz srclib/

cd srclib
tar zxvf apr-1.4.6.tar.gz
tar zxvf apr-util-1.5.1.tar.gz

mv apr-1.4.6 apr
mv apr-util-1.5.1 apr-util

cd ..
./configure --prefix=/usr/local/apache \
--with-apr=/data0/apache/apr \
--with-apr-util=/data0/apache/apr-util \
--with-pcre=/data0/apache/pcre \
--with-ssl=/data0/apache/openssl \
--enable-so \
--enable-dav \
--enable-dav-fs \
--enable-dav-lock \
--enable-mods-shared=most \
--enable-maintainer-mode \
--enable-rewrite \
--enable-headers \
--enable-ssl \
--with-included-apr \

make
make install

cp /usr/local/apache/bin/apachectl /etc/init.d/apache

vi /etc/init.d/apache
#!/bin/sh
# chkconfig: 2345 85 15
# description: Apache

chkconfig --list,#发现没有linux服务列表中httpd,
chkconfig --add apache

groupadd www
useradd -g www -s /bin/bash www

PHP安装

yum install -y libxml2-devel bzip2-devel libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel gmp-devel net-snmp-devel elfutils-devel re2c openssl openssl-devel

tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install

wget http://php.net/distributions/php-5.6.20.tar.gz
tar zxvf php-5.6.20.tar.gz
cd php-5.6.20
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mcrypt \
--with-zlib \
--with-gd \
--enable-gd-native-ttf \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-gettext \
--with-curl \
--with-iconv \
--with-bz2 \
--with-xmlrpc \
--enable-xml \
--enable-zip \
--enable-soap \
--enable-sockets \
--enable-mbstring \
--enable-session \
--enable-bcmath \
--enable-ftp \
--enable-fileinfo \
--with-openssl \
--enable-zip \
--enable-inline-optimization \
--without-pear \
--enable-pcntl \
--enable-maintainer-zts \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql=mysqlnd \


--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
#--enable-maintainer-zts线程安全,编译pthreads时需要开启

# 如果和Apache配合,则编译时带以下参数
--with-apxs2=/usr/local/apache/bin/apxs \

# 指定MySQL连接,则编译时带以下参数
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \

make
make install

wget http://pear.php.net/go-pear.phar
/usr/local/php/bin/php go-pear.phar


cp php.ini-production /usr/local/php/etc/php.ini
ln -s /usr/local/php/etc/php.ini /etc/php.ini



cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on


配置php-fpm
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

pid = run/php-fpm.pid
error = log/php-fpm.log

根据服务器内存磊小调整以下参数
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8


修改php.ini配置参数
short_open_tag = On
error_reporting = E_ALL & ~E_NOTICE
date.timezone = PRC

# 使用memcache保存session信息
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"

session.gc_maxlifetim = 14400    #session超时


# Apache结合PHP其他参数
在httpd.conf配置文件中添加::
AddType application/x-httpd-php .php
在DirectoryIndex 一行后添加 index.php

pache httpd 2.2的配置放到apache httpd 2.4下就出现了这个错误,出现错误行的内容为:
Options -Indexes FollowSymLinks
出错提示:
Either all Options must start with + or -, or no Option may.
解决方法:
Options -Indexes +FollowSymLinks

AllowOverride None
确定允许存在于.htaccess文件中的指令类型.
从安全性考虑,根目录的AllowOverride属性一般都配置成“None”不允许任何Override(优先级)

在httpd-vhhost.conf中配置虚拟站点
<Directory "/data0/website">
    Options -Indexes +FollowSymLinks
    AllowOverride all
    Require all granted
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:85>
    ServerName 173.252.196.89
    DocumentRoot "/data0/website/www"
</VirtualHost>



cd /usr/local/apache/htdocs
添加index.php
<?php
    phpinfo();
?>
在浏览器中查看
Configuration File (php.ini) Path    /usr/local/php/lib

cp <php_source_dir>/php.ini-development /usr/local/php/lib/php.ini

修改php.ini
date.timezone = PRC

修改expose_php = On为expose_php = Off隐藏php版本信息

添加PHP扩展

# memcache扩展
wget http://pecl.php.net/get/memcache-2.2.7.tgz
tar zxvf memcache-2.2.7.tgz
cd memcache-2.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

修改php.ini
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20131226/"
extension = memcache.so

# event扩展
http://pecl.php.net/get/libevent-0.1.0.tgz
tar zxvf libevent-0.1.0.tgz
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
extension = libevent.so

Nginx安装

mkdir -p /data0/nginx/modules

wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
tar zxvf ngx_cache_purge-2.1.tar.gz
mv ngx_cache_purge-2.1 /data0/nginx/modules/ngx_cache_purge

wget http://wiki.nginx.org/images/7/78/Ngx_http_log_request_speed.tar.gz
tar zxvf Ngx_http_log_request_speed.tar.gz 
mv ngx_http_log_request_speed /data0/nginx/modules/ngx_http_log_request_speed


安装pcre
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
tar zxvf pcre-8.32.tar.gz
cd pcre-8.32
./configure --prefix=/data0/local/pcre 
make
make install

yum install -y pcre-devel
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar zxvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-pcre \
--with-http_stub_status_module \
--with-http_realip_module \
--with-http_ssl_module \
--add-module=/data0/nginx/modules/ngx_cache_purge \
--add-module=/data0/nginx/modules/ngx_http_log_request_speed \

make
make install

安装Memcache

--安装memcache
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr
make
make install

然后看看我们的libevent是否安装成功:
ls -al /usr/lib | grep libevent

wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
tar zxvf memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure --prefix=/usr/local/memcached --with-libevent=/usr
make
make install

/usr/local/memcached/bin/memcached -d -m 128 -u www -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid

SVN安装

yum -y install subversion

Linux 添加磁盘

例:
fdisk /dev/vda
n
p
1
两次回车
w

mkfs.ext4 /dev/vdb1
mkdir -p /mnt/vda
mount /dev/vda1 /mnt/vda
vi /etc/fstab(在fstab中增加一条记录如下)
/dev/vda1  /mnt/vdb1  ext4  defaults  0 0

添加Swap分区

1.dd if=/dev/zero of=/data0/swap/swapfile bs=1M count=4000   (创建一个1G的文件作为交换分区使用), count修改为4000为4G
2.mkswap /data0/swap/swapfile   (格式化成swap分区)
3.swapon /data0/swap/swapfile   (打开swap分区)
4.vim /etc/fstab           (在fstab中增加一条记录如下)
/data0/swap/swapfile    swap   swap defaults 0 0
5.mount -a

关闭SELinux

查看SELinux状态:
1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态
SELinux status:                 enabled
2、getenforce                 ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0                  ##设置SELinux 成为permissive模式
                              ##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可

两台机器建立信息ssh,scp免输入密码

两台机器建立信任关系,从A机器拷贝东西到B,不需要录入访问密码
1、A机器生成SSH密匙 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:
06:57:a7:28:2c:2e:5c:d0:fc:7b:9a:06:32:c7:d0:26 root@asdsad

2、拷贝密匙到B机器相应用户下

scp .ssh/id_rsa.pub    <user>@<remote_host_id>:/home/<user>/.ssh/authorized_keys

3、从A机器拷贝东西到B机器,不再需要密码

同一台机器上面scp也需要设立信任关系

已经存在的key,直接cat .ssh/id_rsa.pub >>.ssh/authorized_keys ,就搞定啦~~~

设置主机iptables防火墙

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [44:4404]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 1122,80,81,1218,4730 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-P INPUT DROP
COMMIT

设置主机被ping

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all

iptables 设置
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

其他小方法

1 使用lsof 查看端口情况
lsof -i:3306
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
mysqld  8353 mysql   15u  IPv4 58958596      0t0  TCP *:mysql (LISTEN)

2 调整时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

crontab -e
0 0 * * * /usr/sbin/ntpdate ntp.api.bz > /dev/null 2>&1


3 w查看在线用户
pkill -kill -t  踢人命令
tty 所踢用户的TTY
如上踢出liu用户的命令为: pkill -kill -t pts/1
向终端发消息
echo "string" >> /dev/pts/1

4 删除文件名是乱码的文件
第一步查找i节点值:
ls -i  或者 ll -i
找着要删除的文件的i节点值

第二步根据i节点值删除文件(例如节点值为:345152):
find ./ -inum 345152 -print -exec rm {} -rf \;

5 使用pssh管理多台服务器
pssh -h server_list -l root -P "pwd"
pscp -h server_list /data0/software/php-5.3.27.tar.gz /data0/software/php-5.3.27.tar.gz
其中server_list文件中是服务器地址格式为:user@ip:端口

你可以使用一段PHP代码来生成htpasswd中的password:
$password = 'some password'; 
$password = crypt($password, base64_encode($password));

查看登录记录    
cat secure | grep 'Failed password' | cut -d " " -f 9,10,11 | sort | uniq

查找指定字符串在哪些文件中
find . -type f -name "*.conf" | xagrs grep "chain1.pem"

查找并替换文件中的字符串
find . -type f -name "*.conf" | xargs perl -pi -e 's|chain1.pem|chain.pem|g'

fonts 跨域

nginx
location ~* \.(eot|ttf|woff)$ {
    add_header Access-Control-Allow-Origin *;
}

apache 开启mod_headers.so
AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
<FilesMatch "\.(ttf|otf|eot)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>

关闭sendmail

echo “unset MAILCHECK” >> /etc/profile
source /etc/profile
chmod 0 /usr/sbin/sendmail

查看日志

journalctl
journalctl -b -0 显示本次启动的信息
journalctl -b -1 显示上次启动的信息
journalctl -b -2 显示上上次启动的信息 
journalctl --since="2012-10-30 18:17:16" 显示从2012-10-30 18:17:16到现在日志信息
journalctl --since "20 min ago" 显示近20分钟日志

查看网络信息

ip addr

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

#安装iptables
yum install iptables-services
systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动


yum install crontabs
systemctrl start crond.service #或service crond start
systemctrl enable crond.service #或chkconfig crond on

vsftpd配置

yum install -y vsftpd

vi /etc/vsftpd/vsftpd.conf

最后添加
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10010
local_max_rate=200000

修改
anonymous_enable=NO
xferlog_file=/var/log/vsftpd.log
#监听端口21修改为10021
listen_port=10021
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

创建用户
touch /etc/vsftpd/chroot_list
mkdir -p /data0/ftp/f0
useradd f0 -g ftp -d /data0/ftp/f0 -s /sbin/nologin
chown -R f0:ftp /data0/ftp/f0
passwd f0
echo 'f0' >> /etc/vsftpd/chroot_list

添加iptables配置
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000:10010 -j ACCEPT

vsftpd报503错误,
可能原因。用户设置/sbin/nologin, 在/etc/shells中未找到

DNS解析配置

http://down1.chinaunix.net/distfiles/bind-9.7.3-P1.tar.gz
tar zxvf bind-9.7.3-P1.tar.gz
cd bind-9.7.3-P1
./configure --prefix=/usr/local/named --disable-ipv6 --disable-openssl-version-check --enable-threads
make
make install

/usr/local/named/sbin/rndc-confgen > /usr/local/named/etc/rndc.conf
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf

Redis安装

wget http://download.redis.io/releases/redis-2.8.19.tar.gz
tar zxvf redis-2.8.19.tar.gz
mv redis-2.8.19 /usr/local/redis
cd /usr/local/redis
make

修改redis.conf
daemonize yes后台运行

Docker下导出导入mysql数据

# 导出数据(-d 只导表结构不导数据)
docker exec -it db mysqldump -hourmall.cba3ed3vciqz.us-west-2.rds.amazonaws.com -uroot -proot123 --opt -d product > product.sql

# 导入数据
docker exec -i db mysql -uroot -proot123 product < product.sql