Vmware 平台虚拟机导入到PVE平台上

 

PVE(Proxmox VE)是新的开源虚拟化平台,具有较多优点,如群集功能、容器等,但是实际操作中也有不少bug或不如意的地方。

现有一台vmware虚拟化平台的windows 2012R2 虚拟机,为了不重新安装操作系统和应用,因此希望通过直接转化的方法导入到PVE主机内。

检查pve资料,pve说可以通过两种方式导入,一种是通用ovf格式,另一种是直接加载vmdk磁盘。后来确认两种方式结果是几乎一样的。

我总结的导入过程如下:

1、将vmware下的windows2012R2虚拟机导出为OVF (略),但是要注意,不能导出成单个的ova文件,因为PVE中不认识达成包的OVA文件。但是导出ovf会生产三个文件,都需要拷贝出来。

2、将生成的三个ovf文件导入到pve的local存储上。正常可以使用local存储上“上传”的方法,选择*.*文件格式。也可以使用ssh工具,通过SFTP协议将文件上传只PVE 的ISO目录,该目录位于PVE机器的/var/lib/vz/template/iso   。

(注意:ssh secure shell client 3.2.9版本不行哦,我是用secure CRT 中SFTP上传的)

 

3、上传后就用PVE介绍的方式来导入虚拟机,说一种简单一点的方法,执行以下命令:

qm importovf 999  WindowsServer2012.ovf  local-lvm

其中999是导入虚拟机的ID,WindowsServer2012.ovf是虚拟机导入文件,local-lvm是放置虚拟机的磁盘卷。导入成功后,最后有100%的提示。

 

4、启动虚拟机,发现能看到windows 2012窗口,提示修复,反复重启,无法进入最后的操作系统界面,按照提示操作也几乎无法进行下去。

检查PVE文档,官网这样说:“除了格式问题之外,如果模拟的硬件从一个虚拟机监控程序到另一个虚拟机监控程序的变化太大,则从其他虚拟机监控程序导入磁盘映像可能会失败。Windows VM对此特别关注,因为OS对硬件的任何更改都很挑剔。可以通过在导出之前安装Internet上可用的MergeIDE.zip实用程序来解决此问题,并在引导导入的Windows VM之前选择IDE的硬盘类型。”

5、文档提示用IDE硬盘,就把硬盘类型从scsi改成IDE。

把原有硬盘从scsi上卸除。把硬盘挂载到ide0的总线上了,命令如下:

qm set 999 –ide0 local-lvm:vm-999-disk-0

 

6、可以挂PE,可对认到的IDE硬盘进行CHKDSK 的磁盘扫描,去除坏块等。方法如下:

chkdsk  /f:   e:   , 修正了一些小故障,重启还是不行,继续找问题。

 

7、突然想到应该要进安全模式,去除不合理的驱动,这样系统应该就能起来了。但是win2012启动时候缺省不响应F8,无法进入安全模式。

8、等待启动进入到了高级模式,找到命令行,在命令式模式下键入:bcdedit /set {default} bootmenupolicy legacy    这条命令是允许在win2012菜单出来之前可以按F8进入安全模式。

 

9、重启,在菜单出来之前按键F8进入安全模式。

10、可以进入到windows的安全模式,问题初步解决。找到“计算机管理”中的“设备管理器”,把里面没有用的驱动全部删除掉,特别是有vmware和HyperV字样的驱动,直至没有黄色的感叹号出现。

11、退出安全模式,再重新启动,终于出现了久违的Windows 2012 R2的画面。
————————————————
linux 迁移

VMware完美迁移PVE方法(两条命令解决)

未来村长 2021-05-05 15:07:40 20 收藏
分类专栏: 虚拟化 文章标签: 虚拟机 vmware pve
版权
一、为什么要迁移
因为VMware是收费的,PVE是免费的,就是这么简单粗暴,没有太多理由。
Proxmox优势:
Proxmox的主要特性,去中心化、超融合、高可用、开源低成本、易于实施管理,前面几个特性都和open stack一样,但是最后一点易于实施管理,open stack却做得不是特别好,对于易于实施管理这一点,主要有以下几个方面(引述):
1、proxmox以iso文件提供下载,刻录到u盘,安装方便高效。
2、创建集群,只需登陆每个系统执行一条指令,马上就能看到效果。
3、支持分布式存储,创建ceph存储池,也是寥寥几步就可完成,并很快可以在管理界面看到效果。
4、轻松实现高可用,web界面组成对象高可用(ha),也是易如反掌。
5、方便扩容,重复执行相同创建扩容命令即可完成。
6、统一界面。一个web入口,管理节点、存储、网络、虚拟机等所有资源,完成绝大部分用户操纵,无需要安装客户端。

1.迁移方法
(1)首先,把镜像从VMware虚拟机导出OVF格式
我用的是浏览器,客户端方法一样

(2)镜像已经导出成功,然后把导出来的镜像上传到PVE的镜像存储里面,上传的话,可以用FTP等,我用的是finalshell直接拉进去,保存路径是/var/lib/vz/template/iso/,后面根据自己实际保存路径来分。

 

(3)然后打开PVE,新建一个空白虚拟机,配置根据实际需要来配就行。

 

 

 

 

 

(4)然后用命令登录到PVE的节点node,用命令把镜像导入到刚才新建的虚拟机121里面,知道100%完成。
qm importdisk 121 /var/lib/vz/template/iso/test.vmdk local-zfs
qm set 121 –ide0 local-zfs:vm-121-disk-0
1
2
这里类型根据你虚拟机硬盘类型来选ide0还是scsi0,我就在这里翻车了,排查了很久才找到原因,所以,这里要注意。

 

(5)然后修改下刚才新建虚拟机的引导,放到第一个,不然的话,开机会找不到引导,一直重启。

 

(6)然后再开机,刚才导入进来的镜像已经可以开机运行了。

————————————————

Ubuntu安装Nginx和正确卸载Nginx Nginx相关

1.Ubuntu下安装Nginx比较简单

敲入下列命令即可:

    sudo apt-get update
    sudo apt-get install nginx

 

 

2.Ubuntu下卸载,稍不注意就会入坑

 

复制代码
    sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。

    sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。

    sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。

    sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

  sudo service nginx restart  #重启nginx
复制代码

 

上面的命令基本上都能解决你在Ubuntu下安装卸载Nginx的问题。

 

 

3.查看nginx进程

复制代码
ps aux|grep nginx

在虚拟环境下安装uwsgi
pip install uwsgi

######启动Nginx服务
[root@typecodes ~]# service nginx start
######停止Nginx服务
[root@typecodes ~]# service nginx stop
######重启Nginx服务
[root@typecodes ~]# service nginx restart
######Nginx服务的状态
[root@typecodes ~]# service nginx status
######在Nginx服务启动的状态下,重新加载nginx.conf这个配置文件
[root@typecodes ~]# service nginx reload



复制代码

 

 

 

 

 

 

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。

Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。

 

一、安装Nginx                                                                        

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx同样为当前非常流行的web服务器。利用其部署Django,我们在此也做简单的介绍。

Nginx官网:http://nginx.org/

打开ubuntu控制台(ctrl+alt+t)利用Ubuntu的仓库安装。

fnngj@ubuntu:~$ sudo apt-get install nginx  #安装

启动Nginx:

fnngj@ubuntu:~$ /etc/init.d/nginx start  #启动
fnngj@ubuntu:~$ /etc/init.d/nginx stop  #关闭
fnngj@ubuntu:~$ /etc/init.d/nginx restart  #重启

 

修改Nginx默认端口号,打开/etc/nginx/nginx.conf 文件,修改端口号。

复制代码
复制代码
 server {
    listen       8088;    # 修改端口号
    server_name  localhost;

    #charset koi8-r; 

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }
复制代码
复制代码

大概在文件36行的位置,将默认的80端口号改成其它端口号,如 8088。因为默认的80端口号很容易被其它应用程序占用。

然后,通过上面命令重启nginx。访问:http://127.0.0.1:8088/

如果出现如上图,说明Nginx启动成功。

 

二、安装uwsgi

通过pip安装uwsgi。

root@ubuntu:/etc# python3 -m pip install uwsgi

 

测试uwsgi,创建test.py文件:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

 

通过uwsgi运行该文件。

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-file test.py

 

接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/home/fnngj/pydj/myweb

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --chdir /home/fnngj/pydj/myweb/ --wsgi-file myweb/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

 

常用选项:

http : 协议类型和端口号

processes : 开启的进程数量

workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)

chdir : 指定运行目录(chdir to specified directory before apps loading)

wsgi-file : 载入wsgi-file(load .wsgi file)

stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)

threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)

master : 允许主进程存在(enable master process)

daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

pidfile : 指定pid文件的位置,记录主进程的pid号。

vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

 

三、Nginx+uwsgi+Django                                         

接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:

myweb/

├── manage.py

├── myweb/

│   ├── __init__.py

│   ├── settings.py

│   ├── urls.py

│   └── wsgi.py

└── myweb_uwsgi.ini

在我们通过Django创建myweb项目时,在子目录myweb下已经帮我们生成的 wsgi.py文件。所以,我们只需要再创建myweb_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。

复制代码
复制代码
# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8000

# the base directory (full path)
chdir           = /home/fnngj/pydj/myweb

# Django s wsgi file
module          = myweb.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
复制代码
复制代码

这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。

socket  指定项目执行的端口号。

chdir   指定项目的目录。

module  myweb.wsgi ,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。

其它几个参数,可以参考上一小节中参数的介绍。

 

接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。

复制代码
复制代码
fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb/
fnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini 
[uWSGI] getting INI configuration from myweb_uwsgi.ini
*** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2016] ***
compiled with version: 4.8.4 on 26 January 2016 06:14:41
os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.4.3 (default, Oct 14 2015, 20:37:06)  [GCC 4.8.4]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
复制代码
复制代码

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

 

再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。

复制代码
复制代码
……
server {
    listen         8099; 
    server_name    127.0.0.1 
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
    }   
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/fnngj/pydj/myweb/static/;
     }
 }
……
复制代码
复制代码

listen 指定的是nginx代理uwsgi对外的端口号。

server_name  网上大多资料都是设置的一个网址(例,www.example.com),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。

在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。

include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

include 必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口与myweb_uwsgi.ini配置文件中的必须一直。

 

现在重新启动nginx,翻看上面重启动nginx的命令。然后,访问:http://127.0.0.1:8099/

通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

 

=============

ps: 这个过程本应不算复杂,之前花两天时间没搞定,索性放到了一边,这次又花了两天时间才算搞定。网上搜到的文章比较乱,有些太简单的看不懂,有些又太啰嗦的不知道核心的几步是什么,希望本文能帮到你。

 

Linux中apt与apt-get命令的区别与解释apt方式卸载软件

apt方式卸载删除命令

apt-get –purge remove
删除已安装包(不保留配置文件)。
如软件包a,依赖软件包b,则执行该命令会删除a,而且不保留配置文件

apt-get autoremove
删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包)。
如软件包a,依赖软件包b,则执行该命令会同时删除软件包a,b

apt-get remove
删除已安装的软件包(保留配置文件)。
如软件包a,依赖软件包b,则执行该命令会删除a,且保留配置文件

apt-get autoclean
APT的底层包是dpkg, 而dpkg 安装Package时, 会将 *.deb 放在 /var/cache/apt/archives/中.
apt-get autoclean 只会删除 /var/cache/apt/archives/ 已经过期的deb.

apt-get clean
使用 apt-get clean 会将 /var/cache/apt/archives/ 的 所有 deb 删掉.
类似于 rm /var/cache/apt/archives/*.deb

linux卸载apache安装nginx部署

 

劲枫 2018-12-18 19:59:54 1577 收藏
分类专栏: 笔记
版权
sudo service apache2 stop

update-rc.d -f apache2 remove

sudo apt-get remove apache2

sudo apt-get update

sudo apt-get install nginx

nginx流量拆分、端口映射、静态资源代理
————————————————
版权声明:本文为CSDN博主「劲枫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/TCF_JingFeng/article/details/85063297

linux系统部署Nginx

linux系统部署Nginx

一、linux系统部署Nginx

1、准备工作
Nginx的安装依赖于以下三个包,意思就是在安装Nginx之前首先必须安装一下的三个包,注意安装顺序如下:
1 SSL功能需要openssl库,直接通过yum安装:
 yum install openssl
2 gzip模块需要zlib库,直接通过yum安装:
 yum install zlib
3 rewrite模块需要pcre库,直接通过yum安装:
 yum install pcre
2、安装Nginx依赖项和Nginx
1 
使用yum安装nginx需要包括Nginx的库,安装Nginx的库
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2 
使用下面命令安装nginx
yum install nginx
3 
启动Nginx
service nginx start
nginx -s reload  :修改配置后重新加载生效
3、直接浏览器访问localhost就会出现Nginx的欢迎界面表示你安装成功了,否则就是安装失败了
4、配置Nginx
CentOS安装Nginx后,安装在了
/etc/nginx/目录下,你可以打开/etc/nginx/conf.d/default/conf查看里面的配置,包括监听端口,域名和nginx访问的根目录

二、linux下配置nginx使用service nginx start 服务

1:接下来我们简单的为它提供一个服务脚本吧!
# vim  /etc/init.d/nginx

2:新建文件/etc/rc.d/init.d/nginx,内容如下:

#!/bin/bash
# chkconfig:235 85 15
# description: Nginx is an HTTP server

. /etc/rc.d/init.d/functions

start() {

        echo "Start..."

        /usr/local/nginx/sbin/nginx &> /dev/null

        if [ $? -eq 0 ];then

                echo "Start successful!"

        else

                echo "Start failed!"

        fi

}

 

stop() {

        if killproc nginx -QUIT ;then

                echo "Stopping..."

        fi

}

 

restart() {

        stop

        sleep 1

        start

}

 

reload() {

        killproc nginx -HUP

        echo "Reloading..."

}

 

configtest() {

        /usr/local/nginx/sbin/nginx -t

}

 

case $1 in

start)

        start ;;

stop)

        stop ;;

restart)

        restart ;;

reload)

        reload ;;

configtest)

        configtest ;;

*)

        echo "Usage: nginx {start|stop|restart|reload|configtest}"

        ;;

esac

之后给这个文件可执行权限:

chmod  +x  /etc/init.d/nginx

现在可以使用 start,stop 这些参数控制Nginx服务了

Nginx编译安装时常见错误分析

Nginx编译安装时常见错误分析 – a2796749的专栏 – CSDN博客​blog.csdn.net

linux如何查看nginx是否启动

第一种方法:查看进程列表并过滤

 ps -ef | grep nginx 

第二种方法:使用netstat命令

netstat -anp | grep :80

nginx卸载

    yum remove nginx 

linux系统上nginx安装及简单的反向代理配置

1. 更改配置文件

其配置文件位置: /application/nginx/conf/nginx.conf

2.重启nginx

先 ps -ef | grep nginx ,会出现5个关于nginx的进程,如果5个进程的id分别为 100、101、102、103、104
杀掉所有nginx进程 kill -9 101 102 103 104 
进入目录 cd /usr/sbin
重启   nginx -c /etc/nginx/nginx.conf

至于 nginx -s  reload 不建议使用,本人亲试,有时候无效

启动nginx的时候也可以 cd  /usr/sbin,然后直接 nginx , (-c 配置文件,表示根据指定文件启动,如果该配
置文件和安装的nginx命令不是一个版本,会报错) 启动后,nginx -t  可以查看是根据那个配置文件启动的,
所以建议linux系统里只保留一个nginx.conf文件, 以免出现冲突,一般nginx.conf在两个位置,
分别是/usr/local/nginx/conf/nginx.conf和/etc/nginx/nginx.conf

nginx.conf 配置如下:

http{
        .........
    server{
        listen      80;
        server_name    192.16.10.10;
        location / {
            proxy_pass http://localhost:8081
        }
      }

      server{
            listen      80;
            server_name      www.acdf.com;
            location / {
                    proxy_pass http://localhost:8082
        }
     }
}                                            

疑问:

1.需要两个tomcat实例共用 80 端口,是不是 监听  listen  都为 80 ?
2.nginx 是怎样根据请求地址 来正则匹配 到不同的 虚拟主机的?我的理解是申请两个域名都绑定到我
映射的同一 ip,然后在不同的 server{} 中的 server_name 填入两个域名,通过域名匹配再转到本地的
http://localhost:8081 
3.就是 server_name  ,这个到底是什么意思,该怎么填写?网上有说填 localhost 的,也有 像我第一种
配置直接写ip:port   192.16.10.10:8081 的。如果是这种ip:port 方式的话,我的前端请求地址该如何写
,是直接写我映射的地址  http://192.16.10.10   还是  http://192.16.10.10:8081  ? 但是这样写的话
,我监听的 80 端口还有作用吗? 我的 server_name 又该怎样写?
server下的节点:
server_name :基于域名的虚拟主机,转发到哪个地址
listen:监听80端口
proxy_pass:代理到哪个地址

nginx 启动错误”nginx: [emerg] host not found in upstream “解决方案

利用nginx进行反向代理的时候,我们会配置proxy_pass。在启动nginx的时候,会报
nginx: [emerg] host not found in upstream "yq.object.com" in 
/usr/local/nginx/conf/vhost/yq.nginx.com.conf:19 这个错误。
其实nginx配置语法上没有错误的,只是系统无法解析这个域名,所以报错.
解决办法就是添加dns到/etc/resolv.conf 或者是/etc/hosts,让其能够解析到IP。具体步骤如下:
vim /etc/hosts
修改hosts文件,在hosts文件里面加上一句
127.0.0.1       localhost.localdomain   yq.object.com

linux shell 命令获取字符串/文件的MD5值

字符串“hello”的MD5:

$ echo -n 'hello'|md5sum|cut -d ' ' -f1
  • 1

得到的MD5值:

5d41402abc4b2a76b9719d911017c592
  • echo -n 'admin'|md5sum|cut -d ' ' -f1
  • echo -n 'qss20180219'|md5sum|cut -d ' ' -f1

命令解释:
md5sum: 显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为”-“,则从标准输入读取。
echo -n : 不打印换行符。
cut: cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
-d 指定与空格和tab键不同的域分隔符。-f1 表示第一个域。参考这里。

获取文件的MD5值:

$ md5sum linuxmint-12-gnome-dvd-32bit.iso|cut -d ' ' -f1
  • 1

得到的MD5值:
ee3d6e2ca498bc7685b7f17cdb5f2eea

使用MD5校验iso文件:

$ md5sum linuxmint-12-gnome-dvd-32bit.iso >linuxmint-12-gnome-dvd-32bit.md5
  • 1

注意linuxmint-12-gnome-dvd-32bit.md5的内容是:

ef3d6e2ca498bc7685b7f17cdb5f2eea linuxmint-12-gnome-dvd-32bit.iso
  • 1

把linuxmint-12-gnome-dvd-32bit和其验证文件
linuxmint-12-gnome-dvd-32bit.md5放到同一目录下用下面的命令:

$ md5sum -c linuxmint-12-gnome-dvd-32bit.md5
  • 1

如果校验正确则输出:

linuxmint-12-gnome-dvd-32bit.iso: 确定
  • 1

如果校验错误则输出:

linuxmint-12-gnome-dvd-32bit.iso: 失败
md5sum: 警告:1/1 生成的校验和不匹配
  • 1
  • 2

命令解释:
md5 -c: 从文件中读取MD5 的校验值并予以检查

Message Digest Algorithm MD5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)
keywords:Hash,SHA,Ronald L. Rivest,MD5,IETF(Internet Engineering Task Force)

Linux awk 命令

Linux 命令大全 Linux 命令大全

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法

awk [选项参数] 'script' var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

选项参数说明:

  • -F fs or –field-separator fs
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
  • -v var=value or –asign var=value
    赋值一个用户定义变量。
  • -f scripfile or –file scriptfile
    从脚本文件中读取awk命令。
  • -mf nnn and -mr nnn
    对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
  • -W compact or –compat, -W traditional or –traditional
    在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
  • -W copyleft or –copyleft, -W copyright or –copyright
    打印简短的版权信息。
  • -W help or –help, -W usage or –usage
    打印全部awk选项和每个选项的简短说明。
  • -W lint or –lint
    打印不能向传统unix平台移植的结构的警告。
  • -W lint-old or –lint-old
    打印关于不能向传统unix平台移植的结构的警告。
  • -W posix
    打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
  • -W re-interval or –re-inerval
    允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
  • -W source program-text or –source program-text
    使用program-text作为源代码,可与-f命令混用。
  • -W version or –version
    打印bug报告信息的版本。

基本用法

log.txt文本内容如下:

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

用法一:

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

实例:

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo
 # 格式化输出
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
 ---------------------------------------------
 2        a
 3        like
 This's
 10       orange,apple,mongo
 

用法二:

awk -F  #-F相当于内置变量FS, 指定分割字符

实例:

# 使用","分割
 $  awk -F, '{print $1,$2}'   log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 # 或者使用内建变量
 $ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
 # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
 ---------------------------------------------
 2 this test
 3 Are awk
 This's a
 10 There apple

用法三:

awk -v  # 设置变量

实例:

 $ awk -va=1 '{print $1,$1+a}' log.txt
 ---------------------------------------------
 2 3
 3 4
 This's 1
 10 11
 $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
 ---------------------------------------------
 2 3 2s
 3 4 3s
 This's 1 This'ss
 10 11 10s

用法四:

awk -f {awk脚本} {文件名}

实例:

 $ awk -f cal.awk log.txt

运算符

运算符 描述
= += -= *= /= %= ^= **= 赋值
?: C条件表达式
|| 逻辑或
&& 逻辑与
~ 和 !~ 匹配正则表达式和不匹配正则表达式
< <= > >= != == 关系运算符
空格 连接
+ – 加,减
* / % 乘,除与求余
+ – ! 一元加,减和逻辑非
^ *** 求幂
++ — 增加或减少,作为前缀或后缀
$ 字段引用
in 数组成员

过滤第一列大于2的行

$ awk '$1>2' log.txt    #命令
#输出
3 Are you like awk
This's a test
10 There are orange,apple,mongo

过滤第一列等于2的行

$ awk '$1==2 {print $1,$3}' log.txt    #命令
#输出
2 is

过滤第一列大于2并且第二列等于’Are’的行

$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令
#输出
3 Are you

内建变量

变量 描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 各文件分别计数的行号
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)
$ awk 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
---------------------------------------------
log.txt    2    1         5    1
log.txt    2    2         5    2
log.txt    2    3         3    3
log.txt    2    4         4    4
$ awk -F\' 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}'  log.txt
FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS
---------------------------------------------
log.txt    2    1    '    1    1
log.txt    2    2    '    1    2
log.txt    2    3    '    2    3
log.txt    2    4    '    1    4
# 输出顺序号 NR, 匹配文本行号
$ awk '{print NR,FNR,$1,$2,$3}' log.txt
---------------------------------------------
1 1 2 this is
2 2 3 Are you
3 3 This's a test
4 4 10 There are
# 指定输出分割符
$  awk '{print $1,$2,$5}' OFS=" $ "  log.txt
---------------------------------------------
2 $ this $ test
3 $ Are $ awk
This's $ a $
10 $ There $

使用正则,字符串匹配

# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a

~ 表示模式开始。// 中是模式。

# 输出包含 "re" 的行
$ awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo

忽略大小写

$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
---------------------------------------------
2 this is a test
This's a test

模式取反

$ awk '$2 !~ /th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
$ awk '!/th/ {print $2,$4}' log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo

awk脚本

关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。

  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}

假设有这么一个文件(学生成绩表):

$ cat score.txt
Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62

我们的 awk 脚本如下:

$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
    math = 0
    english = 0
    computer = 0
 
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
}
#运行中
{
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
    printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}

我们来看一下执行结果:

$ awk -f cal.awk score.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350
AVERAGE:     63.80    78.60    70.00

另外一些实例

AWK 的 hello world 程序为:

BEGIN { print "Hello, world!" }

计算文件大小

$ ls -l *.txt | awk '{sum+=$5} END {print sum}'
--------------------------------------------------
666581

从文件中找出长度大于 80 的行:

awk 'length>80' log.txt

打印九九乘法表

seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

更多内容:

Linux 命令大全 Linux 命令大全

1 篇笔记 写笔记

  1.    z977690557

      977***557@qq.com

    102

    awk、sed、grep更适合的方向:

    •  grep 更适合单纯的查找或匹配文本
    •  sed 更适合编辑匹配到的文本
    •  awk 更适合格式化文本,对文本进行较复杂格式处理

    关于awk内建变量个人见解,简单易懂

    解释一下变量:

    变量:分为内置变量和自定义变量;输入分隔符FS和输出分隔符OFS都属于内置变量。

    内置变量就是awk预定义好的、内置在awk内部的变量,而自定义变量就是用户定义的变量。

    •  FS(Field Separator):输入字段分隔符, 默认为空白字符
    •  OFS(Out of Field Separator):输出字段分隔符, 默认为空白字符
    •  RS(Record Separator):输入记录分隔符(输入换行符), 指定输入时的换行符
    •  ORS(Output Record Separate):输出记录分隔符(输出换行符),输出时用指定符号代替换行符
    •  NF(Number for Field):当前行的字段的个数(即当前行被分割成了几列)
    •  NR(Number of Record):行号,当前处理的文本行的行号。
    •  FNR:各文件分别计数的行号
    •  ARGC:命令行参数的个数
    •  ARGV:数组,保存的是命令行所给定的各参数

    自定义变量的方法

    •  方法一:-v varname=value ,变量名区分字符大小写。
    •  方法二:在program中直接定义。

Linux 按文件列表拷贝文件到指定目录并保持原有的目录结构

当需要拷贝多个文件并且需要保留源文件的目录树结构时, 如果源目录的文件比较纯净,没有其他相关的文件或目录时, 我们只需要执行

~$ #cp -r <源目录> <新目录>
~$ cp -r workspace/project workspace/Cpp
12

但是, 如果我们需要拷贝的文件所在的目录里包含了其他项目或程序的文件或目录, 那我们就不能这么干

比如,

  • 在 /etc或者/usr/local/bin下面有很多我们自己项目的相关配置文件和程序文件, 并且我们知道这些文件路径

  • 包含指定字符串的文件名, 比如 *.log

  • 我们自己制作或者我们比较感兴趣的其他厂商的 *.deb程序包(Ubuntu使用软件包)

针对自己的项目配置文件

我们可以新建一个文本文档, 里面把我们所关心的文件列出来

list.txt

/etc/app/app.cnf
/etc/app/conf.d/a.cnf
/etc/app/conf.d/b.cnf
/etc/app/conf.d/c.cnf
/etc/app/conf.d/d.cnf
12345

这样我们就可以通过使用 cat list.txt 获取到我们的文件路径列表

此时我们只需要使用

~$ cp --parent $(cat list.txt) .
1

就可以将列表里面的所有文件按照原有的目录树结构拷贝到当前目录(或者使用其他目录)

针对包含指定字符串的文件名我们可以用 find 命令获取到文件列表

~$ find /opt/ros/ -name *.a
/opt/ros/kinetic/lib/liboctomath.a
/opt/ros/kinetic/lib/libcsm-static.a
/opt/ros/kinetic/lib/liboptions.a
/opt/ros/kinetic/lib/libegsl.a
/opt/ros/kinetic/lib/liboctomap.a
~$
1234567

然后, 嘿嘿

~$ cp --parent $(find /opt/ros -name *.a) .
1

这不就都按照源目录结构拷贝到当前目录了嘛

针对.deb包的文件列表, 我们也有命令可以获取到路径列表

~$ dpkg -L mysql-server-5.7 
/etc
/etc/mysql
/etc/mysql/mysql.conf.d
/etc/mysql/mysql.conf.d/mysqld_safe_syslog.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/debian-start
/etc/mysql/mysql.cnf
/etc/apparmor.d
/etc/apparmor.d/usr.sbin.mysqld
/etc/logrotate.d
/etc/logrotate.d/mysql-server
/etc/init.d
/etc/init.d/mysql
/etc/logcheck
/etc/logcheck/ignore.d.server
/etc/logcheck/ignore.d.server/mysql-server-5_7
/etc/logcheck/ignore.d.workstation
/etc/logcheck/ignore.d.workstation/mysql-server-5_7
/etc/logcheck/ignore.d.paranoid
/etc/logcheck/ignore.d.paranoid/mysql-server-5_7
/etc/init
/etc/init/mysql.conf
~$ 
123456789101112131415161718192021222324

linux复制指定目录下的全部文件到另一个目录中
复制指定目录下的全部文件到另一个目录中
文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。
假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了
如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求。
ps:dir1、dir2改成对应的目录路径即可。

cp -r /home/www/xxx/statics/. /home/www/statics
如果存在文件需要先删除
rm -rf /home/www/statics/*
否则会一个个文件提示你确认,使用cp -rf 也一样提示

————————————–

linux下cp整个文件夹的文件到另一个文件夹
cp -ri A/B/* A1/B1/ 回车
若复制过程中询问是否覆盖,输入y按回车,若不想看到提示直接覆盖使用-rf
另外若A A1不在同一目录下,最好填绝对路径,就是/xxx/xxx/A/B/* /xxx/A1/B1/

实例:

cp -ri /home/server/tomcat/* /home/server/test/

cp: target `/home/server/test/’ is not a directory
需要先创建目标文件夹
mkdir /home/server/test

————————————–
copy命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。
语法: cp [选项] 源文件或目录 目标文件或目录
说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。
该命令的各选项含义如下:
– a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
– d 拷贝时保留链接。
– f 删除已经存在的目标文件而不提示。
– i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
– p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
– r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
– l 不作拷贝,只是链接文件。

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。
例1
复制指定目录下的全部文件到另一个目录中
文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。
假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了
如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求。
ps:dir1、dir2改成对应的目录路径即可。
例2
复制指定文件到指定文件夹
首先建立一个用于测试的目录,用’tree’命令查看
可见,目录中主要包含用于测试的*.txt文件和用于充当炮灰的*。tes文件
目标是保持当前的目录结构,只把txt文件复制出来

方法一:当不需要的文件类型较为单一时,可以通过完全复制然后删除指定类型的文件完成
Step1 使用命令 cp -r test/ test2 将测试目录test下所有内容完全复制到test2

Step2 组合使用find及xargs,将*.tes文件删除
xargs是给命令传递参数的一个过滤器,可以将前一个命令产生的输出作为后一个命令的参数
命令find test2/ -name ‘*.tes’ |xargs rm -rf, 即将find产生的输出(test2目录下的所有tes文件),作为rm的参数,从而完全删除
适用场景举例:把项目文件备份,要去除其中的.svn文件,可以采用这种方式

方法二:需要的文件为单一类型,带目录结构复制
这种情况下可以使用tar命令将指定类型的文件打包,然后解包,同样需要组合使用find和xargs

Step1 建立目录test3
mkdir test3

Step2 将指定类型文件带目录结构打包
find test/ -name ‘*.txt’ |xargs tar czf test3.tgz

Step3 解包到目录test3
tar zxvf test3.tgz -C test3

适用场景:较为普遍,例如可以复制某个Web项目的所有html/jsp/php文件;或复制其他项目中特定类型的源文件

一、方法
列表:frp.txt
目录: /home/dir

在文件前加入cp
sed “s/^/cp /g” frp.txt >frp2.txt
在文件后加入 /home/dir
sed ‘s/$/& \/home\/dir/g’ frp2.txt> frp3.txt

以上全并成一个:
sed ‘/./{s/^/cp /;s/$/& \/home\/dir/}’ frp.txt > frp4.txt

二、方法
cp $(cat frp.txt) /home/dir
OR
cp `cat frp.txt` /home/dir

find / -name ‘frp*’ |xargs tar czf frp-dir.tgz

cp –parent $(cat list.txt) .

linux中scp命令使用技巧详解(传输速度)

linux中scp命令使用技巧详解(传输速度)

解,希望此方法对大家会帮助。

scp 命令

scp 可以在 2个 linux 主机间复制文件;

命令基本格式:
scp [可选参数] file_source file_target

======
从 本地 复制到 远程
======
* 复制文件:
* 命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例子:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3

* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例子:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

最简单的应用如下 :

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

加速scp传输速度

结论
声明:这里给出的测试数据不具有一般性,仅供参考。测试与数据本身特性有很大关系,本文使用InnoDB的redo log作为测试数据。

* 改变ssh加密算法,可以让速度更快;通常,越弱的加密算法,速度越快

* 通常压缩会降低scp速度,但这与数据类型有很大关系,对压缩率非常高的数据启用压缩,可以加速

* 压缩级别对传输效率影响很小

* 用于完整性校验的不同MAC( message authentication code)算法,对性能约有10%-20%的影响。

所以,简单尝试如下,让你的SCP速度double一下:

scp -r -c arcfour128 …
scp -r -c aes192-cbc …
scp -r -c arcfour128 -o “MACs umac-64@openssh.com” … 注:启用压缩使用参数: -o “Compression yes”

2. 测试数据:加密算法和压缩的影响
这里对比了12种ssh中实现的加密算法和是否使用压缩的传输效率,测试文件使用的是InnoDB的1GB*4的日志文件(注意:不同类型的文件测试结果会很不同),这里纵坐标单位为MB/s,数据分为压缩传输和不压缩传输两组:

screen-scp-compare-cipher-compression

原始数据:scp_speed.txt

可以看到,不同加密算法传输速度相差很大;使用了压缩之后,速度下降很多,也看到不同加密算法加密后区别并不大。

3. 关于是否启用压缩
* 压缩只有在网络传输速度非常慢,以致于压缩后节省的传输时间大于压缩本身的时间,这时才有效果,所以是否启用压缩,需要实际测试

* 压缩比很低的数据,不要再启用压缩(例如已经压缩过的数据、视频等)

* 通常建议,传输前先压缩,而不是使用ssh的压缩;建议使用pigz/lbizp2等并行压缩工具

* 数据中大量重复、空洞,这类适合压缩的数据,可以尝试压缩选项,例如如下是一组,大量”空洞”数据的测试:

chart_1

看到,压缩大大提高了传输效率

4. “压缩级别”对传输速度影响不大
最后一组对比是,将压缩级别从1改到9,对比传输速度,纵坐标单位MB/s,对12种加密算法分别使用了测试9个压缩级别,数据如下:

screen-scp-compare-compression-level

大图链接 原始数据:scp-compression-level.txt

可以看到,压缩级别对传输影响较小。ssh使用的默认压缩级别是6。

5. 测试数据:完整性校验算法MACs选择
通过选项Macs可以设置对应的哈希算法,man ssh_config可以看到支持哪些哈希算法。这里对了比了12中加密算法下使用不用的完整性校验算法的性能情况:

screen-scp-compare-macs-all

看到,绝大数情况下”umac-64@openssh.com”(关于此哈希)性能都更好,所以建议尝试使用此哈希算法做验证,看看你的场景下速度是否与提升。也可以看到,默认的hmac-md5哈希在默认的加密aes128-ctr下表现比较好;

scp命令详解(全)

 更新时间:2015年08月11日 11:28:56   作者:wtx
这篇文章主要介绍了scp命令,scp如何做远程拷贝,下面小编帮助大家解决有关scp命令相关知识,需要的朋友可以参考下

svn 删除所有的 .svn文件

复制代码代码如下:
find . -name .svn -type d -exec rm -fr {} \;

linux之cp/scp命令+scp命令详解

名称:cp

使用权限:所有使用者

使用方式:

1
2
3
cp [options] source dest
cp [options] source... directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

把计

-a 尽可能将档案状态、权限等资料都照原状予以复制。

-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。

-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。

范例:

将档案 aaa 复制(已存在),并命名为 bbb :

cp aaa bbb

将所有的C语言程式拷贝至 Finished 子目录中 :

cp *.c Finished

命令:scp

不同的Linux之间copy文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。

第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。

scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了。

如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。

linux之cp/scp命令+scp命令详解(转) – linmaogan – 独木★不成林scp root@/full.tar.gz 172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz

linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录;

==================
scp 命令
==================
scp 可以在 2个 linux 主机间复制文件;

命令基本格式:
scp [可选参数] file_source file_target

======
从 本地 复制到 远程
======
* 复制文件:
* 命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例子:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3

* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;

第2个没有指定用户名,命令执行后需要输入用户名和密码;

* 例子:

scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

例如:

scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

最简单的应用如下 :

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .

注意两点:

1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:

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

2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

scp远程拷贝

SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件,但是还是提供了一个”scp”命令。假定你想把本地计算机当前目录下的一个名为”dumb”的文件拷贝到远程服务器www.foobar.com上你的家目录下。而且你在远程服务器上的帐号名为”bilbo”。可以用这个命令:
scp dumb bilbo@www.foobar.com:.
把文件拷贝回来用这个命令:
scp bilbo@www.foobar.com:dumb .

scp命令是SSH中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用scp一个命令就完全解决了。

你可以在一台服务器上以root身份运行#scp servername:/home/ftp/pub/file1 . 这样就把另一台服务器上的文件/home/ftp/pub/file1直接传到本机器的当前目录下,当然你也可以用#scp /tmp/file2 servername:/boot 把本机上的文件
/tmp/file2送到另一台机器的/boot目录下。

而且整个传送过程仍然是用SSH加密的。

1:拷贝本地文件到远程机器上:

scp 本地文件名 账号@192.168.80.80:远程机器目录

例:scp /home/test root@192.168.80.80:/home/testdir/

2:拷贝远程机器上的文件到本地:

scp 账号@192.168.80.80:文件全路径 本地目录

例:scp root@192.168.80.80:/home/testdir/test /home/testdir/

scp root@10.5.0.1:/root/firewall.tar.gz ./
scp /home/cheney/full.tar.gz root@10.5.0.1:/home/root/
scp -r root@10.5.0.1:/mail/* ./ (拷贝整个目录下的所有文件)

需要输入相应的用户名和密码

scp是有Security的文件拷贝,基于ssh登录。

不同的Linux之间拷贝文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的拷贝。
第二种方法就是采用samba服务,类似Windows文件复制的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件拷贝。

以上内容是本文关于scp命令详解全部内容,希望对大家有所帮助。

解决debian 10 中文安装后出现乱码的问题

由于安装debian选择语言时选择了简体中文安装,但内核没有中文字库,导致某些字符显示为乱码(菱形,方块)。

解决办法:运行下面两行的命令

apt-get install locales
dpkg-reconfigure locales

进入语言设置界面:

其中,空格键为选取/取消,Tab键为切换到确认选择。

通过方向键与空格键选择en_us.UF-8,其余全部取消,然后按Tab选择<Aceptar>,回车进入下一个界面:

选择es_US.UTF-8,回车。然后用locale命令查看一下情况:

这样乱码的错误就解决了。

实例操作:

aptitude install locales
dpkg-reconfigure locales

界面下使用方向键左右翻页,空格键选中(选中en_us.utf8、zh_CN GB2312、zh_CN.GBK GBK、zh_CN.UTF-8 UTF-8)
使用tab键切换ok 和 cancel,回车确认
然后第二个界面设置本地语言为zh_CN.UTF-8

1
export LANG=zh_CN.UTF-8

终端记得相关选项调整为utf 8

DEBIAN下中文显示

一.首先检查LOCALE情况

说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在。

1.挂载ISO文件包,前8个ISO包就可以(这里不在讲述)。

2.启动终端

#apt-get install locales

3.重新配置LOCALE

#dpkg-reconfigure locales

在所有的语言包选择en_US.ISO-8859-1和zh_CN.GBK。其他en_US和zh_CN打头的也选上。然后选择zh_CN.GBK为默认的LOCALE,则系统为中文界面(这里也可以选en_US.ISO,使系统为英文界面)。

3.运行LOCALE命令检查当前的LOCALE环境

#locale

正确配置下会显式

LANG =zh_CN.GBK

……………………以下显示略过

 

 

============================================================================

Debian 6解决中文乱码

 

解决办法:打开终端,切换至root帐号。

执行以下命令:

apt-get install ttf-wqy-zenhei(安装字体)
apt-get install ibus ibus-gtk ibus-pinyin(安装输入法)

————————-

设置本地化 Locale
如果我们在安装 Debian
系统时,语言选择了英语呢?进入系统后看到全是英文,是不是有点郁闷。那么我们怎样设置成简体中文呢?
#如果你安装系统时选择的就是简体中文,可以跳过这段,只安装中文字体就行了。当然你也可以修改成其他的语言。

打开终端,执行命令:
dpkg-reconfigure locales

把 带 zh_CN 字样的全部选上,然后选择 OK 确定,在弹出的对话框中,选择系统的 locale ,选择zh_CN.UTF-8。

安装时选择的是英语,会缺少中文字体,用以下命令安装字体:
apt-get install xfonts-intl-chinese wqy*

下次重起机器,在GNOME登录介面下方的Language,登录语言选择:汉语(中国)

设置字体
对着桌面猛击右键 ===> 更改桌面背景 ===> 字体
#
选择自己喜欢的字体,比如:文泉驿点阵正黑或文泉驿微米黑

输入法
选择喜欢的输入法,比如: ibus scim
# 注:fcitx 输入法在debian unstable
软件源里才有,如果需要的话,只能自行下载安装了。或者添加 Debian unstable 的软件源。
apt-get install
ibus-pinyin ibus-table-wubi #安装IBUS五笔和拼音

设置输入法
系统 ===> 首选项 ===> IBus 设置
#设置快捷键和添加输入法到列表。

浏览器
Iceweasel浏览器简体中文组件 # Iceweasel是Debian中Mozilla
Firefox浏览器的一个再发布版
#英语很菜,所以浏览器菜单也要是中文的
apt-get install
iceweasel-l10n-zh-cn

运行浏览器,然后点击
浏览器菜单 ===> 编辑 ===> 首选项 ===> 内容
# 设置浏览器字体

谷歌开源浏览器Chromium
# 不喜欢用这个的,也可以安装 Chrome 浏览器
apt-get install
chromium-browser chromium-browser-l10n

Flash插件
执行命令:
apt-get install flashplugin-nonfree
#嫌手动安装官方Flash插件麻烦的,直接安装这个吧

手动安装官方Flash插件
# 注意如果你已经用上面的命令安装了flashplugin-nonfree,最好先卸载掉。
#
可能是为了避免冲突吧,不然浏览器不知道用哪个插件,我不清楚原因。

源里的flash插件和官方的正式版的flash插件,在我这里播放在线视频时,全屏会卡。我安装的是测试版的flash插件

先下载两个软件包,不然装好了Flash插件也用不了。装源里的 flashplugin-nonfree 会自动安装这两个文件。
apt-get
install ca-certificates libcurl3-gnutls

到下面网址下载 Flash Player 的压缩包
http://labs.adobe.com/downloads/flashplayer10.html

Download plug-in for 32-bit Linux (TAR.GZ, 4.7 MB) ← 下载这个

然后解压下载下来的压缩文件,解压出来
libflashplayer.so

切换到普通用户创建存放 Flash 插件的目录
mkdir -pv ~/.mozilla/plugins

进入存放 libflashplayer.so 的目录
cp -v libflashplayer.so ~/.mozilla/plugins

Chromium安装Flash插件
su
cp -v libflashplayer.so
/usr/lib/chromium-browser/plugins

影音播放器
#Mplayer和播放前端SMplayer
apt-get install mplayer smplayer

设置QT程序字体
# 在Debian GNOME桌面中QT程序的字体不清析,所以要设置一下

先备份 /etc/fonts/conf.d/49-sansserif.conf
cp -v
/etc/fonts/conf.d/49-sansserif.conf{,.backup}

修改 /etc/fonts/conf.d/49-sansserif.conf

把文件倒数第4行中:
sans-serif
↓↓
文泉驿微米黑

# 把sans-serif替换成文泉驿微米黑,前提你得先安装文泉驿字库

PDF阅读器
Foxit # 如果觉得系统自带的不好用,就下载这个吧
http://www.foxitsoftware.com/downloads/index.php
#找到
Foxit Reader 1.1 Build 20090810 for Desktop Linux(bz2),下载后解压运行目录下的foxit就可以用。

CHM阅读器
如果有Windows下的CHM文档资料要看,那么就安装chmsee吧
apt-get install
chmsee

星际译王
# 星际译王是 GNOME 中的国际化的词典软件
# 本人英文单词不会几个的,所以是必配的词典软件
apt-get
install stardict

#词典下载,下载地址如下,下载tarball包,解压后,复制到 /usr/share/stardict/dict/
目录下,
#最好在这个目录下新建文件夹来分类存放词典。
http://stardict.sourceforge.net/Dictionaries_zh_CN.php

截图工具shutter
#默认情况下,Debian没有安装gnome-screenshot,可以下载功能更强大的shutter
apt-get
install shutter
apt-get install libgoo-canvas-perl # 编辑功能插件

解压缩软件
apt-get install unrar
apt-get install unzip
apt-get install
p7zip-full

安装基本编译环境
# 有时可能自己想编译软件
apt-get install gcc
apt-get install
linux-headers-`uname -r`
apt-get install make
apt-get install automake

虚拟机VirtualBox-OSE
# 使用 Linux 或多或少都要用虚拟机吧,如果不喜欢OSE版,可以到官方去下载。
apt-get
install virtualbox-ose

VirtualBox 官方主页:
http://www.virtualbox.org/

FTP上传下载工具
# gFTP是X Window下的一个用Gtk开发的多线程FTP客户端工具
apt-get install
gftp

LINUX下的“电驴”
# aMule 是基于eMule的“全平台”P2P客户端
apt-get install amule

BT下载工具
Transmission是一种BitTorrent客户端
apt-get install
transmission

Debian 9 忘记 root 密码怎么办

介绍

有客户有时候会忘记 debian 的 root 密码,结果怎么也登不进去。

那么这次来教教大家如何重设 debian 的 root 密码吧。

环境

Debian 9.11

步骤

重启系统,在开机蓝屏那个界面按 E 进去编辑 grub

进来以后界面如下所示:

我们找到 linux 开头的那一行,把 ro 替换为 rw,并在最后添加 init=/bin/sh

修改后如下所示:

按 ctrl + x 保存,进来后看到 # 说明已经是 root 权限了。

我们输入 passwd root,重复输入两次密码后密码就修改成功了。

然后硬重启系统,密码就改过来了!

以上行不通再试:

进入shell后,根分区的挂载模式默认是只读,我们要将其改为可写,否则不能更改root密码:
mount -no remount,rw /
passwd root
sync
mount -no remount,ro /
reboot
这样即可成功更改debian的root用户的密码。

以下清空密码操作:

Step3:按 “Ctrl+x ” 启动系统,进入 root@(none): 命令行模式
Step4:使用命令使系统可读写   # mount -no remount, rw /
Step5:此时 passwd、vi、vim 等都提示Command not found。
使用Debian自带默认文本编辑器 nano 编辑 /etc/shadow 的第一行( root 行),注意之前先备份shadow
# cd /etc
# cp shadow shadow.bak
# nano shadow
修改 shadow 的第一行为:   root::15198:0:99999:7:::    (即清空root密码)
继而 Ctrl+x 选择 yes 保存
Step6:重新使系统变为只读  # mount -no remount, ro /
Step7:重启用一般用户登录   # su 直接进入root用户(不需要密码)
Step8:最后使用 # passwd 重新设置root密码即可