Linux命令:wget(下载文件)、ssh(登录及免密登录)、scp(远程文件传输)、sh(脚本)

wget

概述

wget是一个下载文件的工具,用在命令行下下载一些软件或从远程服务器恢复备份到本地服务器

wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理

支持自动下载

  • wget可以在用户退出系统的之后在后台执行。
  • 意味着你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,优点便比较明显

非常稳定

  • 在带宽很窄的情况下和不稳定网络中有很强的适应性
  • 如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕
  • 如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载

使用

命令格式:

wget [参数] [URL地址]

从网络上下载资源,没有指定目录,下载资源回默认为当前目录

下载单个文件

从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip

限速下载

执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了

wget --limit-rate=300k http://www.minjieren.com/wordpress-3.1-zh_CN.zip

后台下载

对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载

wget -b http://www.minjieren.com/wordpress-3.1-zh_CN.zip

使用以下命令来察看下载进度

tail -f wget-log

下载文件增加重试次数

如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。

wget --tries=40 URL

下载多个文件

首先,保存一份下载链接的文件

cat  filelist.txt
url1
url2
url3
url4

然后使用下面的命令

wget -i filelist.txt

把下载信息存入日志文件

wget -o download.log URL

下载并以不同的文件名保存

wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确

  • 如果直接下载,如下,会保存为:download.aspx?id=1080
    wget http://www.minjieren.com/download.aspx?id=1080
    

下载并以wordpress.zip名称保存

wget -O wordpress.zip URL

ssh

概述

ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。

ssh服务端由2部分组成:

  1. openssh(提供ssh服务)
  2. openssl(提供加密的程序)

命令格式

ssh [OPTIONS] [-p PORT] [USER@]HOSTNAME [COMMAND]

工作机制

流程:

  1. 服务器启动的时候自己产生一个密钥(768bit公钥),
  2. 本地的ssh客户端发送连接请求到ssh服务器,
  3. 服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,
  4. 此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。
    在这里插入图片描述
    图解:
  5. 远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
  6. Client使用这个公钥,将密码进行加密。
  7. Client将加密的密码发送给Server端。
  8. 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
  9. 若验证结果,给Client相应的响应

使用

指定用户名和端口登录远程主机

ssh -p3600 [email protected]

命令enter后,再输入用户登录密码后完成登录

ssh 实现免密登录

流程

登录流程如下
在这里插入图片描述
流程:

  1. 在客户端使用 ssh-keygen 生成一对密钥:公钥+私钥;
  2. 将客户端公钥追加到服务端的 authorized_key 文件中,完成公钥认证操作;
  3. 认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端;
  4. 服务端检索 authorized_key 文件,确认该公钥是否存在。如果存在该公钥,则生成随机数 R,并用公钥进行加密,生成公钥加密字符串 pubKey®;
  5. 将公钥加密字符串传递给客户端;
  6. 客户端使用私钥解密公钥加密字符串,得到 R;
  7. 服务端和客户端通信时会产生一个会话 ID(sessionKey),用 MD5 对 R 和 SessionKey 进行加密,生成摘要;
  8. 客户端将生成的 MD5 加密字符串传给服务端;
  9. 服务端同样生成 MD5(R,SessionKey) 加密字符串;
  10. 如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功。此时不用输入密码,即完成建连,可以开始远程执行 Shell 命令了。
实现

第一步:使用 ssh-keygen 命令在客户端生成 RSA 公钥和私钥,一直回车确认。公钥和私钥默认名称为 id_rsa.pub(公钥)和私钥(id_rsa),默认保存在 ~/.ssh 目录下

ssh-keygen -t rsa

第二步:将客户端公钥追加至服务端 ~/.ssh/authorized_keys 文件中,authorized_keys 是用来存放客户端公钥的文件。有三种方法

  1. 通过 ssh-copy-id 命令
  2. 通过 scp 命令
  3. 手动复制

使用 ssh-copy-id 命令实现如下

ssh-copy-id -i ~/.ssh/id_rsa.pub -p 3600 [email protected]

第三步:使用 ssh 进行免密登录

ssh -p3600 [email protected]

scp

概述

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令

  1. 类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器
  2. scp传输是加密
  3. scp还非常不占资源,不会提高多少系统负荷,基本不影响系统正常使用。

命令格式:

scp [参数] [原路径] [目标路径]

使用

从本地服务器复制到远程服务器

复制文件
# 指定了用户名,命令执行后需要输入用户密码
# 仅指定了远程的目录,文件名字不变
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 
复制目录
# 指定了用户名,命令执行后需要输入用户密码
scp -r local_folder remote_username@remote_ip:remote_folder  
# 没有指定用户名,命令执行后需要输入用户名和密码
scp -r local_folder remote_ip:remote_folder  

从远程服务器复制到本地服务器

从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。

注意

如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:

#scp 命令使用端口号 4588
scp -P 4588 [email protected]:/usr/local/sin.sh /home/administrator

使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

sh

概述

sh命令 是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取

语法格式:

sh [参数] 脚本

常用参数
在这里插入图片描述

使用

执行指定的脚本文件

[root@xx~]# sh xx.sh 
/root
 21:33:45 up 42 min,  1 user,  load average: 0.06, 0.01, 0.00

执行指定的脚本文件,并逐条命令进行追踪

[root@xx ~]# sh -x xx.sh 
+ pwd
/root
+ uptime
 21:33:50 up 42 min,  1 user,  load average: 0.05, 0.01, 0.00

实例:jar包在linux系统上的shell运行脚本

启动: ./xxx.sh start
停止: ./xxx.sh stop
重启: ./xxx.sh restart


#!/bin/bash

###############################  参数区start  ########################################
source ./00-set-vars.sh
#指定jdk1.8路径 /home/devSoft/jdk1.8.0_77/bin/java  ||   java
JDK_HOME=$JAVA_HOME
#指定注册中心,多个注册中心,使用逗号分隔
EUREKA_SERVER=$EUREKA_CENTER
#指定jar包名称
JAR_NAME=jar包名称.jar
#指定程序端口号
SERVER_PORT=26069
OTHER_PARAM="指定参数,以--开头,多个参数中间空格,参考: --zuul.routes.web-crud-demo.path=/web-crud-demo/** --zuul.routes.web-crud-demo.url=http://1localhost:8080 --zuul.routes.web-crud-demo.stripPrefix=false --zuul.routes.web-crud-demo.custom-sensitive-headers=true"
###############################  参数区end  ##########################################

#使用说明,用来提示输入参数
usage() {
    
    
 echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
 exit 1
}

#检查程序是否在运行
is_exist(){
    
    
 pid=`ps -ef|grep $SERVER_PORT-$JAR_NAME|grep -v grep|awk '{print $2}' `
 #如果不存在返回1,存在返回0 
 if [ -z "${pid}" ]; then
 return 1
 else
 return 0
 fi
}


#启动方法
start(){
    
    
 is_exist
 if [ $? -eq "0" ]; then
 echo "${SERVER_PORT}-${JAR_NAME} is already running. pid=${pid} ."
 else
 nohup $JDK_HOME -Xms64m -Xmx512m -D$SERVER_PORT-$JAR_NAME -jar $JAR_NAME --server.port=$SERVER_PORT $OTHER_PARAM --eureka.client.serviceUrl.defaultZone=$EUREKA_SERVER >/dev/null 2>&1 &
 echo "nohup ${JDK_HOME} -D${SERVER_PORT}-${JAR_NAME} -jar ${JAR_NAME} --server.port=${SERVER_PORT} ${OTHER_PARAM} --eureka.client.serviceUrl.defaultZone=$EUREKA_SERVER >/dev/null 2>&1 & ."
 echo "${SERVER_PORT}-${JAR_NAME} start success"
 fi
}

#停止方法
stop(){
    
    
 is_exist
 if [ $? -eq "0" ]; then
 kill -9 $pid
 else
 echo "${SERVER_PORT}-${JAR_NAME} is not running"
 fi
}
  
#输出运行状态
status(){
    
    
 is_exist
 if [ $? -eq "0" ]; then
 echo "${SERVER_PORT}-${JAR_NAME} is running. Pid is ${pid}"
 else
 echo "${SERVER_PORT}-${JAR_NAME} is NOT running."
 fi
}

#重启
restart(){
    
    
 stop
 start
}
  
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
 "start")
 start
 ;;
 "stop")
 stop
 ;;
 "status")
 status
 ;;
 "restart")
 restart
 ;;
 *)
 usage
 ;;
esac

猜你喜欢

转载自blog.csdn.net/yyuggjggg/article/details/128585566