首页 > 代码库 > Linux命令总结

Linux命令总结

    总结

1.权限管理-----------

   @1.用户权限管理

     chown : 设置用户属组属主

      chown   属主:属组

      chown   :属组   文件

     chgrp  :设置用户属组

     chgrp    属组   文件

   @2.文件权限管理

    chmod命令用来改变许可权限。读取、写入和执行是许可权限中的三个主要设置。

    chmod: 设置文件的读、写、执行

r—文件可以被读取 w—文件可以被写入 x—文件可以被执行,如果文件是程序的话

可以使用带有-l的ls命令来仔细查看一个文件的许多细节。

chmod命令用来设定文件的权限。标准用法:

chmod 文件的使用者(u,g,o,a)增减(+,-,=)权限名称(r,w,x) 文件

文件的使用者说明权限说明增减说明 u 拥有文件的用户r读取权+添加权限 g所有者所在的组群 w写入权 -删除权限 o其他人x执行权=是它称为唯一权限 a全部(u,g和o)

删除某一文件的所有权限,输入命令:

chmod a-rwx test.txt

为文件所有者添加权限,输入命令:

chmod u+rwx test

还可以用数字表示权限:4——读取,2——写入,1——执行。下面的两个命令等价:

chmod 751 filename chmod u+rwx,g=rx,0=x filename

   @3.防火墙:iptables

       防火墙策略 规则

你可以使用如下命令来查看 IPtables 防火墙策略FILTER 表:
iptables -L -n -v

如果你发布有某个 IP 向服务器导入攻击或非正常流量,可以使用如下规则屏蔽其 IP 地址: iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

注意需要将上述的 XXX 改成要屏蔽的实际 IP 地址,其中的 -A 参数表示在 INPUT 链的最后追加本条规则。(IPTables 中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)

如果你只想屏蔽 TCP 流量,可以使用 -p 参数的指定协议,例如: iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

解封某个IP地址

要解封对 IP 地址的屏蔽,可以使用如下命令进行删除: iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

其中 -D 参数表示从链中删除一条或多条规则。

使用IPtables关闭特定端口

很多时候,我们需要阻止某个特定端口的网络连接,可以使用 IPtables 关闭特定端口。

阻止特定的传出连接: iptables -A OUTPUT -p tcp --dport xxx -j DROP

阻止特定的传入连接: iptables -A INPUT -p tcp --dport xxx -j ACCEPT

使用Multiport控制多端口

使用 multiport 我们可以一次性在单条规则中写入多个端口,例如: iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

在规则中使用 IP 地址范围

在 IPtables 中 IP 地址范围是可以直接使用 CIDR 进行表示的,例如: iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

配置端口转发

有时我们需要将 Linux 服务器的某个服务流量转发到另一端口,此时可以使用如下命令: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

上述命令会将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口。

屏蔽HTTP服务Flood攻击

有时会有用户在某个服务,例如 HTTP 80 上发起大量连接请求,此时我们可以启用如下规则: iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

上述命令会将连接限制到每分钟 100 个,上限设定为 200。

禁止PING

对 Linux 禁 PING 可以使用如下规则屏蔽 ICMP 传入连接: iptables -A INPUT -p icmp -i eth0 -j DROP

允许访问回环网卡

环回访问(127.0.0.1)是比较重要的,建议大家都开放: iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

屏蔽指定MAC地址

使用如下规则可以屏蔽指定的 MAC 地址: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

限制并发连接数

如果你不希望来自特定端口的过多并发连接,可以使用如下规则: iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

   @4.setenforce  0服务都是以普通用户启动的

   @5.服务权限-----所有的

 

2. 网络管理

    @1.ip地址管理

         增删改查命令

  使用ifconfig命令配置并查看网络接口情况

        ifconfig:查看linux   ip地址

        ifconfig -a

    @2.路由管理

  使用route 命令配置路由

       增删改查

  表示例1:添加到主机路由# route add –host 192.168.4.2 dev eth0:1# route add –host 192.168.4.1 gw 192.168.4.250

2 ip address delete–删除一个协议地址. 缩写:delete、del、d# ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:Alias1

5.3 ip address show–显示协议地址. 缩写:show、list、lst、sh、ls、l# ip addr ls eth0

5.4.ip address flush–清除协议地址. 缩写:flush、f示例1 : 删除属于私网10.0.0.0/8的所有地址:# ip -s -s a f to 10/8示例2 : 取消所有以太网卡的IP地址# ip -4 addr flush label “eth0″—————————

    @3.NDS 查看验证域名是否解析成功

ping命令。第一行会返回域名及解析的ip

host命令。会返回域名has ip 地址。

nslookup命令。输入命令后回车,在命令提示符输入域名,回车,就会显示域名的ip地址。

dig命令。会显示a记录即域名的解析。

dig命令可以trace解析过程,先访问13台根域root(.)服务器,其中一台根域服务器返回一级域名服务器(本例是.com.)的ip地址,一级服务器再返回二级域名服务器ip地址(本例  .baidu.com.)...... dig命令的其他参数,可以查看help。

    @4.网卡管理

     ifup  ifdown

ifdown和ifup命令和运行ifconfig up,ifconfig down的功能一样。给定网络接口的名字可以只禁用或启用这一个接口。需要root权限,所以在Ubuntu上需要使用sudo来运行。

netstat -s则显示所有端口的详细统计信息。

3.管理本地资源命令

    @1.内存     查看命令

     2)硬盘

     3)cpu

     4)进程

     5)内核

top: 
主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出to
显示参数:
PID(Process ID):进程标示号。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME+:该进程启动后占用的总的CPU时间。
Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
free 
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。

2.格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]

3.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。

uptime 
18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21
现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
参数: -V 显示版本资讯。

vmstat 
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 24980 10792 8296 47316 5 19 205 52 1161 698 26 3 1 70
1 观察磁盘活动情况
磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需要进行性能调整了。 
2 观察cpu活动情况
vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy: 系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注 意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。

iostat 
用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量
参数:
-c 只显示CPU行
-d 显示磁盘行
-k 以千字节为单位显示磁盘输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标

avg-cpu: %user %nice %sys %iowait %idle
20.25 0.18 2.61 76.39 0.57
%iowait 等待本地I/O时CPU空闲时间的百分比
%idle 未等待本地I/O时CPU空闲时间的百分比

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 9.86 284.34 84.48 685407 2036
每秒传输数(tps)、每秒512字节块读取数(Blk_read/s)、每秒512字节块写入数(Blk_wrtn/s)和512字节块读取(Blk_read)和写入(Blk_wrtn)的总数量。

系统 
  # uname -a # 查看内核/操作系统/CPU信息
  # head -n 1 /etc/issue # 查看操作系统版本
  # cat /proc/cpuinfo # 查看CPU信息
  # hostname # 查看计算机名
  # lspci -tv # 列出所有PCI设备
  # lsusb -tv # 列出所有USB设备
  # lsmod # 列出加载的内核模块
  # env # 查看环境变量

资源
  # free -m # 查看内存使用量和交换区使用量
  # df -h # 查看各分区使用情况
  # du -sh # 查看指定目录的大小
  # grep MemTotal /proc/meminfo # 查看内存总量
  # grep MemFree /proc/meminfo # 查看空闲内存量
  # uptime # 查看系统运行时间、用户数、负载
  # cat /proc/loadavg # 查看系统负载
  磁盘和分区
  # mount | column -t # 查看挂接的分区状态
  # fdisk -l # 查看所有分区
  # swapon -s # 查看所有交换分区
  # hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
  # dmesg | grep IDE # 查看启动时IDE设备检

# ps -ef # 查看所有进程
  # top # 实时显示进程状态

服务 
  # chkconfig --list # 列出所有系统服务
  # chkconfig --list | grep on # 列出所有启动的系统服务

4.文件处理命令

     @1.编辑命令

如果没有文档而且你又想编辑就可以直接编辑vi aa【名字你可以随便命名】
也可以先建立一个文档touch aa 然后再编辑vi aa
编辑器有三种模式 1 命令行模式 2 末行模式 3 输入模式
按Esc 就可以进入命令行模式也是系统默认模式
输入模式可以按 o i a 都可以进入 退出可以进入末行和命令行模式
末行模式可以按ctrl+;它的主要功能是退出编辑器 也可以保存退出文档
q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】
在输入模式和命令行模式命令很多 如果你想具体知道哪些你可以在和我说
如复制(yy)粘贴(p) 删除(d)等等

     @2.增删改查

使用vi编辑该文件:

vi有两个模式:一个是编辑一个是命令。我们从命令进入编辑为:i,o,a。一般使用的是i:因为这个我是最熟悉的。退出点击esc键,就进入命令模式。

我们需要删除文件的当前行和后一行,命令为:2dd,一般我们使用的是单个字符的删除为:x。我们一般进入编辑模式,来进行添加,修改,删除。

但是当我们删除和修改的内容过多的时候,我们使用命令行模式,进行修改,这样方便,快捷,而命令行中,最常用到的是x,dd,u,p这四个命令:

x:删除当前字符:

dd:删除当前行:

u:恢复前一步操作:

p:复制之前删除的行:

rm -rf 删除文件

touch 、 vim、vi、echo、cp 创建新文件

mv 修改名字

5.磁盘分区命令

     @1.主分区

     @2.逻辑分区

     @3.扩展分区

分区工具fdisk用法介绍
   fdisk命令参数介绍
   p、打印分区表。
   n、新建一个新分区。
   d、删除一个分区。
   q、退出不保存。
   w、把分区写进分区表,保存并退出

6.软件管理命令(安装 、 卸载、更新、查看、查看)
    1)rpm
        rpm   ---   
        rpm -qf  
        rpm -ql
            RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”
rpm 执行安装包
二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。
常用命令组合:
-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl:列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
-e:删除包
rpm -q samba //查询程序是否安装
rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm    //指定安装目录
rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm    //用来检查依赖关系;并不是真正的安装;
rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本
rpm -qa | grep httpd      #[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd         #[搜索rpm包]--list所有文件安装目录
rpm -qpi Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install package信息
rpm -qpf Linux-1.4-6.i368.rpm #[查看rpm包]--file
rpm -qpR file.rpm       #[查看包]依赖关系
rpm2cpio file.rpm |cpio -div    #[抽出文件]
rpm -ivh file.rpm  #[安装新的rpm]--install--verbose--hash
rpm -ivh
http://mirrors.kernel.org/fedora/core/4/i386/os/Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm
rpm -Uvh file.rpm    #[升级一个rpm]--upgrade
rpm -e file.rpm      #[删除一个rpm包]--erase
    2)yum
        yum  -

 

1 安装 yum install 全部安装 yum install package1 安装指定的安装包package1 yum groupinsall group1 安装程序组group1

 

2 更新和升级 yum update 全部更新 yum update package1 更新指定程序包package1 yum check-update 检查可更新的程序 yum upgrade package1 升级指定程序包package1 yum groupupdate group1 升级程序组group1

 

3 查找和显示 yum info package1 显示安装包信息package1 yum list 显示所有已经安装和可以安装的程序包 yum list package1 显示指定程序包安装情况package1 yum groupinfo group1 显


    3)源码安装------二级制

wget 命令

wget http://xxx.xxx.xxx.xx/aaa/gcc.tar.gz   -c -O /tmp/gcc.tar.gz

 

     -c  断点下载

 

     -O   指定路径

 

 

 

wget 下载网站 

 

  wget  -m  http://xxx.com/xxx

 

wget -r -p -np -k http://xxx.com/xxx
-r,  --recursive(递归)          specify recursive download.(指定递归下载) -k,  --convert-links(转换链接)      make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接) -p,  --page-requisites(页面必需元素)    get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容) -np, --no-parent(不追溯至父级)          don‘t ascend to the parent directory.


    4)二进制------(绿色软件)
8、日常命令:
    ping 

命令格式:

ping [参数] [主机名或IP地址]

 

2.命令功能:

 

ping命令用于:确定网络和各外部主机的状态跟踪和隔离硬件和软件问题测试、评估和管理网络。如果主机正在运行并连在网上,它就对回送信号进行响应。每个回送信号请求包含一个网际协议(IP)和 ICMP 头,后面紧跟一个 tim 结构,以及来填写这个信息包的足够的字节。缺省情况是连续发送回送信号请求直到接收到中断信号(Ctrl-C)。

 

ping 命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。ping 命令计算信号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。ping 命令在程序超时或当接收到 SIGINT 信号时结束。Host 参数或者是一个有效的主机名或者是因特网地址。

 

3.命令参数:

 

-d 使用Socket的SO_DEBUG功能。

 

-f  极限检测。大量且快速地送网络封包给一台机器,看它的回应。

 

-n 只输出数值。

 

-q 不显示任何传送封包的信息,只显示最后的结果。

 

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。

 

-R 记录路由过程。

 

-v 详细显示指令的执行过程。

 

<p>-c 数目在发送指定数目的包后停止。

 

-i 秒数设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。

 

-I 网络界面使用指定的网络界面送出数据包。

 

-l 前置载入设置在送出要求信息之前,先行发出的数据包。

 

-p 范本样式设置填满数据包的范本样式。

 

-s 字节数指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

 

-t 存活数值设置存活数值TTL的大小。


    ssh

 

1、查看SSH客户端版本

有的时候需要确认一下SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本号。需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用OpenSSH:

$ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003

下面的例子表明该系统正在使用SSH2:

$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu

2、连接到远程主机:

命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机,server代表远程主机,name为登录远程主机的用户名。

3、连接到远程主机指定的端口:

命令格式: ssh name@remoteserver -p 2222 或者 ssh remoteserver -l name -p 2222 说明:p 参数指定端口号,通常在路由里做端口映射时,我们不会把22端口直接映射出去,而是转换成其他端口号,这时就需要使用-p端口号命令格式。

4、通过远程主机1跳到远程主机2:

命令格式: ssh -t remoteserver1 ssh remoteserver2 说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。

5、通过SSH运行远程shell命令:

命令格式: ssh -l name remoteserver ‘command’ 说明:连接到远程主机,并执行远程主机的command命令。例如:查看远程主机的内存使用情况。 $ ssh -l root 192.168.1.100 svmon -G

6、修改SSH监听端口:

默认情况下,SSH监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务,将SSH端口修改为大于1024的端口是一个明智的选择,因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。打开/etc/ssh/sshd_config文件并查找下面这样的行: Port  22 去掉该行前面的# 号,然后修改端口号并重新启动SSH服务: $ /etc/init.d/ssh restart

7、仅允许SSH协议版本2:

有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。编辑/etc/ssh/sshd_config文件并查找下面这样的行: # Protocol 2,1 修改为 Protocol 2

8、禁止root用户登录:

通常情况下,不采用直接用root用户登录到远程主机,由于root用户拥有超级权限,这样会带来安全隐患,所以,一般我们用普通用户登录,当需要管理远程主机时,再切换到root用户下。打开/etc/ssh/sshd_config文件并查找下面这样的行: #PermitRootLogin yes 将#号去掉,然后将yes修改成no,重启ssh服务,这样就可以禁止root用户登录。
将#号去掉,然后将bannertest.txt文件的全路径替换/some/path,然后保存,重启ssh服务。当客户端登录时,就会看到bannertest.txt文件中的提示信息。

9、进行端口映射:

假如公司内网有台web服务器,但是只对内不对外,这样,外网就无法访问,可以用ssh进行端口映射来实现外网访问内网的web服务器。假如web服务器名为webserver,webserver可以用ssh访问到远端主机remoteserver,登录到webserver,然后用下面命令进行映射 命令格式: ssh -R 3000:localhost:80 remoteserver 执行完成后,在remoteserver机器上,执行netstat -an | grep 3000,查看有没有开通3000端口。并执行以下命令观察是否可以打开webserver上的网页 $ w3m http://127.0.0.1:3000 如果能打开界面,说明映射成功.但是,这只限于本机访问web服务器,即只能remoteserver机器访问webserver。因为3000端口绑定的是remoteserver机器的127.0.0.1端口。可以编辑remoteserver机器上的/etc/ssh/sshd_config文件并添加如下内容: 添加 GatewayPorts yes  内容,把监听端口3000绑定到 0.0.0.0 地址上,这样外部的所有机器都能访问到这个监听端口,然后保存退出。并重启ssh服务。完成后其它机器就可以在浏览器中输入 http://remoteserver:3000来访问webserver了。

10、设置登录时提示信息

首先编辑一个文件,如bannertest.txt,文件内容自行定义。然后打开/etc/ssh/sshd_config文件并查找下面这样的行: #Banner /some/path


    telnet

 (1)用法:

    用法:  telnet [参数] [主机]

 

 

 

    (2)功能:

 

    功能:  telnet命令通常用来远程登录。

 

    原理: Telnet服务虽然也属于客户机/服务器模型的服务,但它更大的意义在于实现了基于Telnet协议的远程登录(远程交互式计算)。

 

    telnet实现的远程登录:

 

    分时系统允许多个用户同时使用一台计算机,为了保证系统的安全和记帐方便,系统要求每个用户有单独的帐号作为登录标识,系统还为每个用户指定了一个口令。用户在使用该系统之前要输入标识和口令,这个过程被称为‘登远程登陆是指用户使用Telnet命令,使自己的计算机暂时成为远程主机的一个仿真终端的过程。仿真终端等效于一个非智能的机器,它只负责把用户输入的每个字符传递给主机,再将主机输出的每个信息回显在屏幕上。

 

    telnet的简介:

 

    Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。

 

  Telnet是常用的远程控制Web服务器的方法。但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。

 

    telnet命令还可做别的用途,比如确定远程服务的状态,比如确定远程服务器的某个端口是否能访问。

 

 

 

    (3)选项参数:

 

  1) -8          允许使用8位字符资料,包括输入与输出。

 

     2) -a        尝试自动登入远端系统。

 

   3) -b<主机别名>   使用别名指定远端主机名称。

 

     4) -c          不读取用户专属目录里的.telnetrc文件。

 

     5) -d        启动排错模式。

 

     6) -e<脱离字符>   设置脱离字符。

 

     7) -E        滤除脱离字符。

 

     8) -f            此参数的效果和指定"-F"参数相同。

 

     9) -F        使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。

 

   10) -k<域名>     使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。

 

   11) -K           不自动登入远端主机。

 

   12) -l<用户名称>    指定要登入远端主机的用户名称。

 

   13) -L        允许输出8位字符资料。

 

   14) -n<记录文件>   指定文件记录相关信息。

 

   15) -r         使用类似rlogin指令的用户界面。

 

   16) -S<服务类型>   设置telnet连线所需的IP TOS信息。

 

   17) -x         假设主机有支持数据加密的功能,就使用它。

 

   18) -X<认证形态>   关闭指定的认证形态。

 

 

 

    (4)实例:

 

     1)[root@localhost xinetd.d]# telnet localhost 23      连接本地的主机,端口号为23


    ftp

 

一、ftpget命令和mget命令有何不同?

 

get一次只下载一个文件;mget一次可以下载多个文件,而且支持通配符,需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全部的文件,可以先用prompt命令关掉交互方式(关闭:prompt off;打开:prompt on)。

 

二、FTP使用什么命令来定位服务器与本地硬盘的路径?

 

ftp中用lcd切换本地路径,用cd切换远程服务器的路径。常用到的命令如下:

 

cd目录名(进入服务器目录)    lcd目录名(进入本机目录)

 

cd \(退到服务器根目录)      lcd \(退到本机根目录)

 

cd ..(退回到上一级目录)     lcd ..(退回到上一级目录)

 

三、!命令有何作用?

 

执行本地shell命令,如:!dir(显示本机当亲目录内容),如果不加!如:dir(显示服务器当前目录内容)

 

四、ftp命令支持“含有空格”的文件夹/文件名吗?

 

支持,只要在引用时加上双引号“”即可!

 

五、下面是命令行方式使用FTP的实战练习

 

假设有一ftp服务器:ftp.test.com,用户名:username,密码:user1234。在本地电脑D:盘创建一个文件夹“qint”。将要上传的文件复制到D:\qint里。通过FTP命令将文件从本地上传,从服务器下载的步骤如下:

 

1、“开始”→“运行”→输入“FTP

 

2、open ftp.test.com

 

注意:这一步可以与第一步合并,在“运行”里直接输入:ftp ftp.test.com。如果你的FTP服务器不是用的21默认端口,假如端口是2121,那么此步的命令应在后面空格加2121,即“open ftp.test.com

 

3、username 注意:提示你输入用户名

 

4、user1234 注意:提示你输入密码,密码不回显,打完密码后回车即可。如果你的密码输入错误,将不会提示你重新输入,这时你要键入“user”命令,将会出现第三步,你可以重新输入用户名和密码。

 

5、dir 注意:你成功登陆后就可以用dir查看命令查看FTP服务器中的文件及目录,用ls命令只可以查看文件。

 

6、mkdir qint 注意:在FTP服务器上根目录下建立qint目录

 

7、cd qint 注意:进入目录qint,用“cd 你的目录名”可以进入当前目录的下一级目录,这跟DOS一样。

 

8、bin

 

注意:采用二进制传输。如果你要上传下载,这一步很重要,不先执行这个命令,上传下载会很慢。大多数系统(包括UNIX系统)只有两种模式:文本模式和二进制模式。文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。一般来说,我们最好都用binary方式,这样可以保证不出错。

 

9、lcd d:\qint

 

注意:定位本地默认文件夹,在前面已事先在D:盘创建

 

10、!dir

 

注意:查看本地文件夹中的文件及目录

 

11、put i001.jpg 注意:将当前目录(d:\qint)中的文件i001.jpg上传到FTP服务器默认目录。可以用“mput *.*”将所有文件上传到FTP服务器上。

 

12、get d123.jpg 注意:将FTP服务器默认目录中的文件d123.jpg下载到当前目录下(d:\qint)。可以用“mget *.*”将所有文件下载到d:\qint

 

13、delete *.*

 

注意:删除服务器对应目录qint中的所有文件。

 

14、cd ..

 

注意:返回至上一级目录,即根目录。返回上一级目录用“cd ..”要注意,中间有空格。返回根目录用“cd \”。

 

15、mrdir qint

 

注意:删除目录qint。删除目录,在此目录下不能有文件及目录,不然将无法删除。

 

16、bye

 

注意:退出FTP服务器。

 

上传下载时特别要注意服务器及本地电脑的当前目录,文件是从哪里到哪里的问题。查看FTP服务器的当前目录命令为pwd,可以用cd命令定位服务器的目录。可以用lcd命令定位本地电脑的目录。

 

以上实例应用到了采用FTP命令行方式上传下载的最常用命令,你还可以用命令“?”查看更多的命令


9、服务命令:
        httpd

 

参数说明

 

  • -c<httpd指令>   在读取配置文件前,先执行选项中的指令。
  • -C<httpd指令>   在读取配置文件后,再执行选项中的指令。
  • -d<服务器根目录>   指定服务器的根目录。
  • -D<设定文件参数>   指定要传入配置文件的参数。
  • -f<设定文件>   指定配置文件。
  • -h   显示帮助。
  • -l   显示服务器编译时所包含的模块。
  • -L   显示httpd指令的说明。
  • -S   显示配置文件中的设定。
  • -t   测试配置文件的语法是否正确。
  • -v   显示版本信息。
  • -V   显示版本信息以及建立环境。
  • -X   以单一程序的方式来启动服务器。
            nginx
  • 1、查看nginx进程

    1

    ps -ef|grep nginx

    说明:nginx的进程由主进程和工作进程组成。

      www.2cto.com 

    2、启动nginx

     

    1

    nginx

    启动结果显示nginx的主线程和工作线程,工作线程的数量跟nginx.conf中的配置参数worker_processes有关。

     

    3、平滑启动nginx

    1

    kill -HUP `cat /var/run/nginx.pid`

    2

    或者

    3

    nginx -s reload

    其中进程文件路径在配置文件nginx.conf中可以找到。

     

    平滑启动的意思是在不停止nginx的情况下,重启nginx,重新加载配置文件,启动新的工作线程,完美停止旧的工作线程。

     

    4、完美停止nginx 
    1
    kill -QUIT `cat /var/run/nginx.pid`
     
    5、快速停止nginx 
    1
    kill -TERM `cat /var/run/nginx.pid`
    2
    或者
    3
    kill -INT `cat /var/run/nginx.pid`
     
    6、完美停止工作进程(主要用于平滑升级) 
    1
    kill -WINCH `cat /var/run/nginx.pid`
     
    7、强制停止nginx 
    1
    pkill -9 nginx
     
    8、检查对nginx.conf文件的修改是否正确 
    1
    nginx -t -c /etc/nginx/nginx.conf 或者 nginx -t
     
    9、停止nginx的命令 
    1
    nginx -s stop
    10、查看nginx的版本信息
     
    1
    nginx -v
     
    11、查看完整的nginx的配置信息 
     
    1
    nginx -V
            mysql
            mysql  -e
            mysql  -h  -p   -u
  • 一.linux下启动mysql的命令: 

               1. mysqladmin start 

             2. /ect/init.d/MySQL start (前面为mysql的安装路径) 

    二.linux下重启mysql的命令: 

    1.mysqladmin restart  2./ect/init.d/mysql restart (前面为mysql的安装路径) 

    三.linux下关闭mysql的命令: 

    1.mysqladmin shutdown  2./ect/init.d/mysql shutdown (前面为mysql的安装路径) 

    四.连接本机上的mysql: 

    1.进入目录mysql\bin,再键入命令mysql -uroot -p, 回车后提示输入密码。  2.退出mysql命令:exit(回车) 

    五.修改mysql密码: 

    1.mysqladmin -u用户名 -p旧密码 password 新密码  2.或进入mysql命令行SET PASSWORD FOR root=PASSWORD("root"); 

    六.增加新用户。(注意:mysql环境中的命令后面都带一个分号作为命令结束符) 

    1.grant select on 数据库.* to 用户名@登录主机 identified by "密码"  2.如增加一个用户test密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:  3.grant select,insert,update,delete on *.* to " Identified by "123"; 

    七、有关mysql数据库方面的操作 

    必须首先登录到mysql中,有关操作都是在mysql的提示符下进行,而且每个命令以分号结束  1、显示数据库列表。 
    show databases; 
    2、显示库中的数据表: 
    use mysql; //打开库 
    show tables; 
    3、显示数据表的结构: 
    describe 表名; 
    4、建库是设置好字符编码: 
    create database 库名 character set utf-8; 
    5、建表: 
    use 库名; 
    create table 表名(字段设定列表); 
    6、删库和删表: 
    drop database 库名; 
    drop table 表名; 
    7、将表中记录清空: 
    delete from 表名; 
    8、显示表中的记录: 
    select * from 表名; 
    9、编码的修改 
    如果要改变整个mysql的编码格式: 
    启动mysql的时候,mysqld_safe命令行加入 
    --default-character-set=gbk 
    如果要改变某个库的编码格式:在mysql提示符后输入命令 
    alter database db_name default character set gbk; 

    八、数据的导入导出 

    1、文本数据转到数据库中 
    文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例: name duty 2006-11-23 
              数据传入命令 load data local infile "文件名" into table 表名;  2、导出数据库和表 
    mysqldump --opt news > news.sql(将数据库news中的所有表备份到news.sql文件,news.sql是一个文本文件,文件名任取。) 
    mysqldump --opt news author article > author.article.sql(将数据库news中的author表和article表备份到author.article.sql文件, author.article.sql是一个文本文件,文件名任取。) 
    mysqldump --databases db1 db2 > news.sql(将数据库dbl和db2备份到news.sql文件,news.sql是一个文本文件,文件名任取。) 
    mysqldump -h host -u user -p pass --databases dbname > file.dump 
    就是把host上的以名字user,口令pass的数据库dbname导入到文件file.dump中 
    mysqldump --all-databases > all-databases.sql(将所有数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。) 
    3、导入数据 
    mysql < all-databases.sql(导入数据库) 
    mysql>source news.sql;(在mysql命令下执行,可导入表) 

    九、连接MySQL 

    一、格式: mysql -h主机地址 -u用户名 -p用户密码 

    1、例1:连接到本机上的MYSQL。 
    首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。 
    2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: 
    mysql -h110.110.110.110 -uroot -pabcd123 
    (注:u与root可以不用加空格,其它也一样) 
    3、退出MYSQL命令: exit (回车)。 

    二、修改密码 

    格式:mysqladmin -u用户名 -p旧密码 password 新密码 
    1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令: 
    mysqladmin -uroot -password ab12 
              注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。  2、例2:再将root的密码改为djg345。 
    mysqladmin -uroot -pab12 password djg345 

    三、增加新用户。(注意:和上面不同,下面的因为是MySQL环境中的命令,所以后面都带一个分号作为命令结束符) 

    格式:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\" 
    例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用 以root用户连入MySQL,然后键入以下命令: 
    grant select,insert,update, 
    delete on *.* to test1@\"%\" Identified by \"abc\"; 
    但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的MySQL数据库并对你的数据可以为所欲为了,解决办法见例2。 
    例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MySQL主机上的web页来访问。 
    grant select,insert,update, 
    delete on mydb.* to test2@localhost identified by \"abc\"; 
    如果你不想test2有密码,可以再打一个命令将密码消掉。 
    grant select,insert,update,delete on mydb 
    .* to test2@localhost identified by \"\"; 
    在上面讲了登录、增加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。 

    四、操作技巧 

    1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就完成。 
    2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MySQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。 

    五、显示命令 

    1、显示数据库列表: 
    show databases; 
    刚开始时才两个数据库:mysql和test。MySQL库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。 
    2、显示库中的数据表: 
    use mysql; //打开库,学过FOXBASE的一定不会陌生吧 
    show tables; 
    3、显示数据表的结构: 
    describe 表名; 
    4、建库: 
    create database 库名; 
    5、建表: 
    use 库名; 
    create table 表名 (字段设定列表); 
    6、删库和删表: 
    drop database 库名; 
    drop table 表名; 
    7、将表中记录清空: 
    delete from 表名; 
    8、显示表中的记录: 

    select * from 表名; 

    六、一个建库和建表以及插入数据的实例 

    drop database if exists school; //如果存在SCHOOL则删除  create database school; //建立库SCHOOL  use school; //打开库SCHOOL  create table teacher //建立表TEACHER  id int(3) auto_increment not null primary key,  name char(10) not null,  address varchar(50) default ’深圳’,  year date  ); //建表结束  //以下为插入字段  insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);  insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);  注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。  如果你在MySQL提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:  mysql -uroot -p密码 < c:\\school.sql  如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。 

    七、将文本数据转到数据库中 

    1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替。  例: 
    3 rose 深圳二中 1976-10-10 
    4 mike 深圳一中 1975-12-23 
    2、数据传入命令 load data local infile \"文件名\" into table 表名。 
    注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。 
    五、备份数据库: 
    1、mysqldump --opt school>school.bbb 
    mysqldump --opt school>school.bbb 
    (命令在DOS的\\mysql\\bin目录下执行) 
    注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。 
    后记:其实MySQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式,在查找函数命令的时候不太方便。 
    2、修改登录密码 
    1) mysqladmin -u用户名 -p旧密码 password 新密码: 
    例:mysqladmin -u root password 21century 
    注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 
    2)直接修改user表的root用户口令: 
    mysql> user mysql; 
    mysql> update user set pasword=password(‘21century‘) where user=‘root‘; 
    mysql> flush privileges; 
    注:flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令。 
    3、测试密码是否修改成功: 
    1)不用密码登录: 
    [root@test1 local]# mysql 
    ERROR 1045: Access denied for user: ‘root@localhost‘ (Using password: NO) 
    显示错误,说明密码已经修改。 
    2)用修改后的密码登录: 
    [root@test1 local]# mysql -u root -p 
    Enter password: (输入修改后的密码21century) 
    Welcome to the MySQL monitor. Commands end with ; or \g. 
    Your MySQL connection id is 177 to server version: 3.23.48 
    Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer. 
    mysql> 
    成功! 

    这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。 

     

    4、启动和停止: 
    启动:Mysql从3.23.15版本开始作了改动,默认安装后服务要用MySQL用户来启动,不允许root用户启动。 
    如果非要用root用户来启动,必须加上--user=root参数(./safe_mysqld --user=root &)停止:mysqladmin -u root -p shutdown。 
    5、导出meeting数据库: 
    mysqldump -uroot -p21century meeting > db_meeting.sql 
    导人dbname数据库: 
    mysqldump -uroot -p21century dbname < xxx.sql 
    导入数据库还可用类似于oracle中@my_script.sql的方式一次执行大量sql语句,这在使用mysqldump不起作用时非常有用。 
    例:#./mysql -uroot -p < /home/xuys/db_meeting_2003.sql 
    (注:create database、use databasename、create table和insert into语句都可写在上面的脚步文件中) 
    6、给表改名: 
    RENAME TABLE ztemp TO ztemp4; 
    7、修改字段属性: 
    ALTER TABLE bbabase CHANGE news_id id VARCHAR(5) NOT NULL; 
    8、在表中的content后增加一字段: 
    ALTER TABLE bbabase ADD leave_time DATETIME NOT NULL AFTER

    10、日志命令
                tail -f
  • linux查看日志文件内容命令tail、cat、tac、head、echo

    tail -f test.log 你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,

    --------------------------- linux 如何显示一个文件的某几行(中间几行)

    从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000

    显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000

    *注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n +1000:从1000行开始显示,显示1000行以后的 head -n 1000:显示前面1000行

    用sed命令 sed -n ‘5,10p‘ filename 这样你就可以只查看文件的第5行到第10行。

    例:cat mylog.log | tail -n 1000 #输出mylog.log 文件最后一千行

    --------------------------- cat主要有三大功能: 1.一次显示整个文件。$ cat filename 2.从键盘创建一个文件。$ cat > filename  只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件: $cat file1 file2 > file 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 --show-nonprinting 例: 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 cat -n textfile1 > textfile2

    把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。 cat -b textfile1 textfile2 >> textfile3
    把test.txt文件扔进垃圾箱,赋空值test.txt cat /dev/null > /etc/test.txt  注意:>意思是创建,>>是追加。千万不要弄混了。 ------------------------------------------ tac (反向列示) tac 是将 cat 反写过来,所以他的功能就跟 cat 相反, cat 是由第一行到最后一行连续显示在萤幕上, 而 tac 则是由最后一行到第一行反向在萤幕上显示出来!

    ------------------------------------------ 在Linux中echo命令用来在标准输出上显示一段字符,比如: echo "the echo command test!"

    这个就会输出“the echo command test!”这一行文字!

    echo "the echo command test!">a.sh 这个就会在a.sh文件中输出“the echo command test!”这一行文字! 该命令的一般格式为: echo [ -n ] 字符串其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。 用echo命令输出加引号的字符串时,将字符串原样输出; 用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。


    11 、数据库备份
            tar   fdisk
  • 1、利用Mysqldump+二进制日志实现备份 2、利用LVM快照+二进制日志实现备份 3、使用Xtrabackup备份

    一:实验环境介绍:

    系统介绍:CentOS6.4_X64 数据库版本:mysql-5.5.33

    二:基于Mysqldump命令实现备份恢复

    2.1、思路概念

    Mysqldump是一个逻辑备份命令;意思就是将数据库中的数据备份成一个文本文件;也可以说是将表的结构和数据存储在文本文件中。

    Mysqldump命令的工作原理很简单,它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换为一条INSTERT语句。这些CREATE语句和INSTERT语句都是还原时使用的。还原数据时就可以使用其中的CREATE语句来创建表。使用其中的INSERT语句来还原数据。它可以实现整个服务器备份,也可以实现单个或部分数据库、单个或部分表、表中的某些行、存储过程、存储函数、触发器的备份;并且能自动记录备份时刻的二进制日志文件及相应的位置。对于InnoDB存储引擎来讲支持基于单事务模式实现热备,对于MyISAM则最多支持温备。

    2.2、备份策略

    Mysqldump全备+二进制日志增备

    2.3、过程实现

    (1)Mysqldump全备 由于Mysql数据库默认的为MyISAM存储引擎所以只有使用温备(备份同时仅支持读请求)进行,所以我们要为所有数据库添加读锁

    ?
    1
    2
    [root@stu18 ~]
    #mysqldump -uroot -pmypass --lock-all-tables --master-data=http://www.mamicode.com/2 --events --routines--all-databases > /zhao/database_`date +%F`.sql

    解析:–lock-all-tables表示为所有表施加读锁;–master-data=http://www.mamicode.com/2表示在备份文件中记录当前二进制日志的位置;–events表示备份数据的同时备份时间调度器代码;–routines表示备份数据的同时备份存储过程和存储函数;–all-databases表示备份所有库。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@stu18 zhao]
    # less database_2013-08-13.sql
    --  
    #表示注释项
    -- Position to start replication or point-in-time recovery from
    --
    -- CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000001‘, MASTER_LOG_POS=14203;
    #这里表示当前处于mysql-bin.000001这个二进制日志中,事件为14203这是通过--master-data=http://www.mamicode.com/2产生的
    --
    -- Current Database: `hellodb`
    --
    CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;

    (2)二进制全备

    方法一: 导出二进制日志文件内容

    ?
    1
    2
    [root@stu18 data]
    # mysqlbinlog mysql-bin.000001 >/zhao/binlog_`date +%F`.sql

    方法二:滚动日志复制文件

    ?
    1
    2
    3
    4
    mysql> flush logs;
    #滚动日志
    [root@stu18 data]
    # cp mysql-bin.000001 /zhao/mysql-bin.000001 #复制导出二进制文件

    (3)二进制增备 首先添加数据信息

    ?
    1
    2
    mysql> use hellodb;
    mysql> INSERT INTO students(Name,Age,Gender,ClassID,TeacherID) values (‘Yang kang‘,22,‘M‘,3,3);

    然后二进制增备

    ?
    1
    2
    [root@stu18 data]
    # mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /zhao/binlog_`date +%F_%H`.sql

    解析:–start-position=14203是上次全备之后的二进制事件位置;–stop-position=14527最近一天的二进制事件位置。

    2.4、模拟数据库损坏,实现恢复工作

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    mysql> DROP DATABASE hellodb;   
    #删除数据库
    ############下面这些过程要在离线状态下执行############
    mysql> SET sql_log_bin=0;    
    #先关闭二进制日志
    mysql> flush logs;     
    #滚动日志
    [root@stu18 ~]
    # mysql -uroot -pmypass < /zhao/database_2013-08-13.sql #导入数据库备份文件
    [root@stu18 ~]
    # mysql -uroot -pmypass < /zhao/binlog_2013-08-13_19.sql #导入增量备份文件
    [root@stu18 ~]
    # mysql -uroot –pmypass #登录查看,恢复完成
    mysql> SET sql_log_bin=1;

    这种备份方式恢复简单,但是恢复还原之后索引会出现错误需要重建,而且备份结果会占据很大的空间,请酌情使用。

    PS:mysqldump常用命令小结 备份MySQL数据库的命令

    ?
    1
    mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql

    备份MySQL数据库为带删除表的格式

    备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

    ?
    1
    mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql

    直接将MySQL数据库压缩备份

    ?
    1
    mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz

    备份MySQL数据库某个(些)表

    ?
    1
    mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

    同时备份多个MySQL数据库

    ?
    1
    mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

    仅仅备份数据库结构

    ?
    1
    mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

    备份服务器上所有数据库

    ?
    1
    mysqldump –all-databases > allbackupfile.sql

    还原MySQL数据库的命令

    ?
    1
    mysql -hhostname -uusername -ppassword databasename < backupfile.sql

    还原压缩的MySQL数据库

    ?
    1
    gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

    将数据库转移到新服务器

    ?
    1
    mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename

    三、基于LVM快照实现备份恢复

    3.1、思路明细

    (1)LVM这种备份方式要求Mysql的数据保存在逻辑卷上 (2)需要给Mysql服务器施加读锁(mysql>FLUSH TABLES WITH READLOCK;),这里不可直接退出服务器 (3)另起终端为数据所在的卷创建快照(lvcreate),保证事务日志和数据文件必须在同一卷上(分别创建可能会导致数据文件和事务日志不一致,从而可能导致无法正常恢复)

    3.2、备份策略

    LVM快照全备+二进制日志增备(对于即时点恢复还要恢复至后续的二进制位置)

    3.3、前提条件

    (1)创建逻辑卷及挂载逻辑卷,此过程在此就不做演示了

    (2)初始化mysql将其数据目录指向/mydata/data

    ?
    1
    2
    3
    4
    [root@stu18 ~]
    # cd /usr/local/mysql/
    [root@stu18 mysql]
    # scripts/mysql_install_db --user=mysql --datadir=/mydata/data

    (3)编辑查看配置文件,重启服务

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    [root@stu18 mysql]
    # vim /etc/my.cnf
    datadir = /mydata/data
    #查看此项是否定义数据目录位置
    sync_binlog=1
    #添加此项,每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;
    [root@stu18 mysql]
    # service mysqld start

    3.4、过程展示

    (1)确保事务日志和数据文件必须在同一卷上

    ?
    1
    2
    3
    4
    5
    6
    [root@stu18 ~]
    # ls /mydata/data/
    hellodb  myclass   mysql-bin.000003 stu18.magedu.com.err
    ibdata1  mysql    mysql-bin.000004 stu18.magedu.com.pid
    ib_logfile0 mysql-bin.000001 mysql-bin.index  student
    ib_logfile1 mysql-bin.000002 performance_schema test

    解析:其中ib_logfile0与ib_logfile1是日志文件 (2)施加全局锁并滚动日志

    ?
    1
    2
    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> FLUSH LOGS;

    (3)查看并保存当前正在使用的二进制日志及当前执行二进制日志位置(非常重要)

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000004 |  187 |    |     |
    +------------------+----------+--------------+------------------+
    [root@stu18 zhao]
    # mysql -uroot -pmypass -e ‘SHOW MASTER STATUS;‘ >/zhao/lvmback-2013-08-14/binlog.txt

    (4)创建快照卷

    ?
    1
    2
    [root@stu18 zhao]
    # lvcreate -L 100M -s -p r -n mydata-lvm /dev/vg1/mydata

    (5)立即切换终端释放锁

    ?
    1
    mysql> UNLOCK TABLES;

    (6)备份数据

    ?
    1
    2
    [root@stu18 data]
    # cp -a * /zhao/lvmback-2013-08-14/

    (7)二进制实现增量备份

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mysql> use hellodb;  
    #指定默认数据库
    Database changed
    mysql> CREATE TABLE testtb (id int,name CHAR(10)); 
    #创建表
    Query OK, 0 rows affected (0.35 sec)
    mysql> INSERT INTO testtb VALUES (1,‘tom‘);  
    #添加数据
    Query OK, 1 row affected (0.09 sec)
    [root@stu18 data]
    # mysqlbinlog --start-position=187 mysql-bin.000004 > /zhao/lvmlogbin_2013-08-14/binlog.sql   #日志实现增量备份

    (8)模拟数据库崩溃

    ?
    1
    2
    3
    4
    5
    6
    [root@stu18 ~]
    # service mysqld stop
    [root@stu18 ~]
    # cd /mydata/data/
    [root@stu18 data]
    # rm -rf *

    (9)恢复数据

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@stu18 ~]
    # cp /zhao/lvmback-2013-08-14/* /mydata/data/ -a   #完全备份恢复
    [root@stu18 ~]
    # cd /mydata/data/    #查看恢复数据内容
    [root@stu18 data]
    # chown -R mysql.mysql * #更改属主属组
    [root@stu18 data]
    # service mysqld start  #启动服务
    [root@stu18 data]
    # mysql -uroot –pmypass #登录测试
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    mysql> SHOW DATABASES; 
    #查看数据完整性,无测试表testtd使用二进制恢复
    mysql> SET sql_log_bin=0
    #关闭二进制日志
    mysql> source /zhao/lvmlogbin_2013-08-14/binlog.sql;
    #二进制恢复
    mysql> SHOW TABLES;  
    #查看恢复结果
    +-------------------+
    | Tables_in_hellodb |
    +-------------------+
    | classes   |
    | coc    |
    | courses   |
    | scores   |
    | students   |
    | teachers   |
    | testtb   |
    | toc    |
    +-------------------+
    mysql> SET sql_log_bin=1;
    #开启二进制日志

    此工具是接近于热备的方式实现的,并且用此方法来备份恢复数据速度是非常快的。


    12 、远程  scp  远程安装

    将远程服务器上的文件复制到本机

    #scp remote@www.abc.com:/usr/local/sin.sh /home/administrator

    remote                       通过remote用户登录到远程服务器(也可以使用其他拥有同等权限的用户) www.abc.com              远程服务器的域名(当然也可以使用该服务器ip地址) /usr/local/sin.sh           欲复制到本机的位于远程服务器上的文件 /home/administrator  将远程文件复制到本地的绝对路径

    注意两点: 1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下: #scp -p 4588 remote@www.abc.com:/usr/local/sin.sh

    将本机文件复制到远程服务器上

    #scp /home/administrator/news.txt root@192.168.6.129:/etc/squid

    /home/administrator/      本地文件的绝对路径 news.txt                          要复制到服务器上的本地文件 root                                 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户) 192.168.6.129                远程服务器的ip地址(也可以使用域名或机器名) /etc/squid                       将本地文件复制到位于远程服务器上的路径


 

Linux命令总结