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

news2024/11/18 19:57:16

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 root@xx.xx.xxx.xx

命令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 root@xx.xx.xxx.xx

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

ssh -p3600 root@xx.xx.xxx.xx

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 remote@www.runoob.com:/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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言选择排序和快速排序(图解过程)+思路清晰

选择排序和快排选择排序时间复杂度和空间复杂度快排(三种方式)1.hoar时间复杂度和空间复杂度优化--三数取中优化--小区间优化2.挖坑法3.双指针(推荐)选择排序 本篇文章的重点在快排。因为选择排序无论是在思想上面还是&#xff0…

提供数百万岗位和丰厚利润,苹果却转移产业链,中国制造怎么办?

新年刚过,就传出消息指苹果直接代中国供应链企业向印度提出建厂申请,其中有14家获得了许可,而3家被否决,这凸显出苹果坚定向印度转移生产线,如此做对中国制造将产生深远影响。一、苹果对中国制造的影响巨大苹果为中国提…

新的一年,这份高级测试人的职业素养请收好~

软件测试工程师需要的专业技能计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者持久竞争力的测试工程师,则计算机专业技能是必不…

5G R16+C-V2X赋能下一代智能T-Box,助力智能驾驶时代加速到来

█ 5G技术助力C-V2X持续进化,智能网联新生态逐步建立 汽车行业正面临百年未有之变局,智能汽车已经成为全球汽车产业发展的战略方向。发改委、工信部、交通部等11部委联合印发的《智能汽车创新发展战略》中指出:汽车产业与相关产业全面融合&a…

(二十四)深入理解蓝牙BLE之“H5协议”

前言:蓝牙产品在实际落地中,很多时候采用hostcontroller的通信模型,其中host负责实现协议栈profile是运行在主控cpu上的。controller为另外一颗单独的蓝牙芯片,负责蓝牙link layer的处理,两个芯片通过hci消息来交互数据…

SD卡提示格式化后怎么办?可尝试这种数据恢复方法快速找回!

生活中,虽然我们更习惯用手机、U盘来存储数据,但是对于摄影爱好者,SD卡还是非常刚需。 在使用SD卡存储文件时,经常遇到SD卡无法读取,要求我们格式化后才可以使用。此时,该如何备份里面的数据,或…

IB课程为何号称全球最难国际课程?

在读国际学校的同学们,一定对大名鼎鼎的IB课程不陌生,可是他为什么被称作是它号称最难的国际课程呢?今天就来给大家全面解析一下IB课程~ IB课程最开始是IBO为外交官子女开设全球统一标准的课程。IB课程为全球学生开设从幼儿园到大…

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割 【论文原文】:FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 获取地址:https://ieeexplore.ieee.org/stamp/stamp.js…

这款小巧精致的 Keychron K7 满足了我对键盘的所有想象

🔽 前言 博主是一个“练习”时长两年半的前端码农,在练习期间打交道最多的就是键盘,敲得多了懂得也就多了对键盘的要求也变多了。 之前认为,不就一块键盘嘛,能打字就行。 现在认为,键盘必须要有好的手感&a…

Vue前端基于模板实现word导出功能

目录一、依赖二、模板三、代码一、依赖 // 核心依赖 cnpm i docxtemplater3.32.5 cnpm i file-saver2.0.5 cnpm i jszip-utils0.1.0 cnpm i pizzip3.1.3// ui cnpm i element-ui2.15.8二、模板 public 下新建 test.docx 三、代码 <template><div><el-form …

Maven依赖冲突

An attempt was made to call a method that does not exist 依赖冲突完整报错如下 Description:An attempt was made to call a method that does not exist. The attempt was made from the following location:com.baomidou.mybatisplus.extension.plugins.inner.Paginati…

Springboot抑郁症测试系统的设计与实现

在各大医院的教学过程中&#xff0c;用户的抑郁症测试是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及&#xff0c;“基于网络的学习模式”正悄无声息的改变着传统的抑郁症测试系统&#xff0c;“在线视频、案例展示”的研究和设计也成为教育技术领域的热点课题…

Spring-IOC相关内容

Spring-IOC相关内容 4&#xff0c;IOC相关内容 4.1 bean基础配置 对于bean的配置中&#xff0c;主要会讲解bean基础配置,bean的别名配置,bean的作用范围配置(重点),这三部分内容&#xff1a; 4.1.1 bean基础配置(id与class) 对于bean的基础配置&#xff0c;在前面的案例中…

Chapter2:ROS基础

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

Magisk内部实现原理

Android10以后&#xff0c;Android系统限制了System分区的修改&#xff0c;结果就是&#xff0c;即使你i是自己编译的Android系统&#xff0c;即使是有做高的root权限&#xff0c;你依然无法挂载System分区并对其内容进行修改,尽管网上有各种帖子说可以使用mount -o rw,remount…

SpringBoot+Vue项目企业客户管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

Linux(centos7)基本操作---文件管理和用户管理

文件管理 文件的目录结构 文件的目录结构从根&#xff08;/&#xff09;目录开始&#xff0c;主要由一下几个目录组成&#xff0c;之间的作用也是不同的&#xff0c;具体作用如下&#xff1a; bin目录&#xff1a;主要存放系统中的一些基本的有执行权限&#xff08;x&#…

动态AOP 自动以标签 源码解析

Spring AOP 是一个简化版的AOP 实现&#xff0c;并没有提供完整的AOP功能&#xff0c;通常情况下&#xff0c;Spring AOP 是能够满足我们日常开发过程中的大多数场景的&#xff0c;但在某些情况下&#xff0c; 我们可能需要使用Spring AOP 范围外的某些AOP 功能。 AspectJ是一…

【JAVA程序设计】(C00101)基于Servlet的在线鞋店销售管理系统

基于Servlet的在线鞋店销售管理系统项目简介项目获取开发环境项目技术运行截图项目简介 本项目是基于J2EE的servlet的在线鞋店销售管理系统&#xff0c;网上鞋店&#xff0c;球鞋&#xff0c;篮球鞋&#xff0c;跑步鞋&#xff0c;本项目有三种权限&#xff1a;游客、用户、管…

LeetCode 1480. 一维数组的动态和

有人相爱 有人深夜看海 有人LeetCode第一题都做不出来 小趴菜就是我 女神镇楼压压惊 文章目录LeetCode 1480. 一维数组的动态和题目描述&#xff1a;示例1&#xff1a;示例2&#xff1a;示例3&#xff1a;提示&#xff1a;解题思路题解结果展示大神题解执行消耗内存为 0 kb&am…