L o a d i n g . . .
SHIWIVI-文章

//sunny forever
while(life<end){
love++;
beAwesome :)}

    <
  • 主题:
  • + -
  • 清除背景
  • 禁用背景

Linux常用工具命令

字数:6733 写于:2021-12-29
最新更新:2024-08-01 阅读本文预计花费您20分钟

curl

curl介绍

curl(client url)是一个强大且开源的数据传输工具,它支持通过URL上传或下载数据,适合用来执行上传或下载文件、执行API请求、提交表单数据等任务,curl支持以下协议:DICT、FILE、FTP、FTPS、GOPHER、GOPHERS、HTTP、HTTPS、IMAP、IMAPS、LDAPS、MQTT、POP3、POP3S、RTMP、RTMPS、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET、TFTP、WS、WSS。

curl命令

curl [选项] URL1 URL2 ...
  • 默认情况下,curl会将接收到的数据(如:html文件、json文件)写到stdout,即直接打印在屏幕上

  • 如果curl接收到的数据被-o选项或重定向符输出到stdout以外的地方,则curl默认会显示一个进度表,进度表会显示传输数据量、传输速度和估计剩余时间

  • -#或-‌-progress-bar 显示一个进度条,使用进度条替换进度表

  • -s 静默模式(silent),不显示进度和错误信息,但仍会显示HTTP响应的内容,如返回的html、json等数据

  • -q 完全安静模式(quiet),完全阻止所有输出,包括进度信息、错误信息、返回的响应信息

  • -‌-retry 值:设置重试次数,该值默认为0,curl默认只会在响应超时、FTP返回4xx或HTTP返回408、429、500、502、503或504时进行重试,该选项可以搭配以下选项:

    • -‌-retry-all -errors:出现任何错误时均重试,包括HTTP 404等情况
    • -‌-retry-delay 值:每一次重试前的延迟时间,单位为秒
    • -‌-retry-max-time 值:最大总重试时间,单位为秒,到达该时间后,即使还有剩余重试次数,也停止重试
  • 如果URL中不指定协议,curl会尝试解析主机名,如果主机名不包含任何协议,则默认使用http

  • -o /路径/文件名:将接收到的数据以新文件名保存到指定位置,文件不存在则会新建,文件存在则会覆盖

  • -O 将接收到的数据在当前路径下以原文件名保存(不会保存路径),文件不存在则会新建,文件存在则会覆盖

  • -‌-no-clobber (7.83.0版本以上支持)使用-o等选项将传输的数据保存到本地时,如果文件已经存在原文件会被覆盖。该选项可以避免覆盖已经存在的文件,如果文件已经存在,curl会在新保存的文件名后加上一个点和一个数字(如:test.1)来生成不同的文件名,这只支持生成到test.100,之后curl将不创建任何文件

  • -k 默认情况下,curl 建立的连接都会进行验证(如验证TLS 证书),此选项会让curl跳过验证步骤,这可能引发安全问题

  • -f 当请求的URL返回4xx响应码时,http服务一般会返回一个404页面文本,该选项可以禁止curl输出该数据,而是提前返回http错误码22,这在脚本中比较有用,脚本获取一个404相关的页面数据也没什么用,可以提前抛弃掉

  • -‌-fail-early 在指定多个URL时,curl会依次执行这些传输任务,默认情况下,curl命令的执行结果只取决于最后一个URL是否成功传输,如果中间的某个URL返回错误代码也会被覆盖。该选项会让curl在遇到第一次传输失败时就返回一个错误,方便捕捉错误

  • -:或-‌-next:用来重置所有本地选项,指定多个URL时如果要为不同的URL指定不同的选项,可以使用该选项重置之前指定的选项,该选项不会重置全局选项

  • -I 只获取响应头

  • -L 跟随重定向,当curl遇到服务器返回3XX响应码时,会前往重定向的新位置重做请求

  • -x [请求方法] 指定HTTP请求方法(GET、POST、PUT、DELETE 等)

  • -T [文件] 上传文件到指定URL

1. 默认情况下,curl会将下载的数据打印到屏幕 curl test.shiwivi.com/mobileTest.html 打印的html文件: <!DOCTYPE html> <html><head>meta http-equiv=X-UA-Compatible content=IE=Edge><title>shiwivi</title></head><body> ... </body></html> 2. curl命令自带下载进度表,用来显示传输的数据量、传输速度和估计剩余时间等,并且会默认打印到stdout,但如果下载的数据也被输出到stdout,curl会自行禁用进度表,以免进度数据和下载数据都打印到stdout造成混乱。如果使用-o选项或重定向符将数据输出到了stdout以外的位置,stdout将显示进度表 curl -o index.html test.shiwivi.com/mobileTest.html 进度表的显示参数: % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 184 0 184 0 0 351 0 --:--:-- --:--:-- --:--:-- 352

url通配

curl支持允许使用大括号{}中括号[]来指定一个URL地址范围,此时需要使用双引号””来包裹URL地址,避免shell等程序解析这些字符

1.支持使用{ }指定多个地址 curl "http://test.{one,two,three}.com" 2.支持使用[ ]来指定一个域名或文件名范围 "http://test.example.com/file[1-100].txt" "http://test.example.com/file[a-z].txt" 可以为这个范围指定步进值 "http://test.example.com/file[1-100:10].txt" "http://test.example.com/file[a-z:2].txt" 3.括号不能嵌套,但能并列使用多次 "http://{css,js,img}.example.com/file[1-20:2].txt" { }适合用来指定多个没有任何联系的离散独立值,[ ]适合用来指定一个范围值 4.如果需要为每个下载的文件都另存并指定文件名,可以使用#加数字的形式来引用正在获取的URL字符串 curl "http://{css,js,img}.example.com/file[1-20:2].txt" -o "file_#1_#2" 也可以依次指定-o选项 curl -o a.txt example1.com -o b.txt example2.com

wget

介绍

wget(World Wide Web Get)是一个功能强大的命令行工具,用于从网络上下载文件和数据。它可以处理HTTP、HTTPS、FTP等协议,支持断点续传、递归下载、限速等功能,相较于curl,wget更像是一种专门用来下载文件的软件

命令

wget [选项] URL

  • 默认情况下,wget命令会将文件保存到当前目录。下载时,wget命令会打印文件总大小、下载速度、下载进度等信息到stdout,且wget命令会默认自动处理HTTP重定向
  • -q 静默模式,不输出任何信息
  • -o 文件名 将下载的文件以新文件名保存到指定位置
  • -O 文件名 将wget命令输出的下载信息日志保存到指定文件,而不再打印到屏幕
  • -p 目录名将文件下载到指定目录
  • -c 启用断点续传,继续下载暂停或中断的文件
  • -r 递归下载网站或目录中的所有文件
  • -l 值设置递归下载的深度,通常和-r选项搭配使用,如:-r -l 1表示只下载当前目录的文件
  • -N 仅下载比本地文件新的文件(根据时间戳判断),适合用来同步文件
  • -nd 不创建目录结构,将所有下载的文件都保存到当前目录
  • -i 文件名从文件中读取URL,并依次下载
  • -‌-wait=值设置文件下载的时间间隔,避免对服务器造成过大负载
  • -‌-random-wait 设置随机等待时间,模拟更自然的用户行为
  • –tries=值 设置下载失败后的重试次数,默认为20次
1. 正常下载文件 wget http://example.com/file.zip 默认情况下,wget命令会打印以下信息: --2021-08-31 00:12:34-- http://shiwivi.com/ Resolving shiwivi.com (shiwivi.com)... 170.196.108.153 Connecting to shiwivi.com (shiwivi.com)|170.196.108.153|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3355 (3.3K) [text/html] Saving to: ‘index.html.1’ 100%[===================>] 3,355 --.-K/s in 0.1s 2021-08-31 00:12:37 (23.3 KB/s) - ‘index.html.1’ saved [3355/3355] 2. 静默模式 wget -q http://example.com/file.zip

mkpasswd密码生成

mkpasswd有两个同名软件,一个用来生成随机密码,一个用来加密用户密码

生成随机密码

expect 包中mkpasswd 用来生成指定长度的随机密码,可以指定密码中数字、大小写英文字母和特殊字符的个数

安装

mkpasswd 是 expect 包中的一个脚本,使用前需要安装expect包

  • Red Hat系列操作系统
    sudo yum install expect
  • Debian系列操作系统
    sudo apt-get install expect
命令

mkpasswd [选项]

  • -l 值:指定生成的密码长度,默认值为9
  • -d 值:指定数字个数,默认值为2
  • -c 值:指定小写字母的个数,默认值为2
  • -C 值:指定大写字母的个数,默认值为2
  • -s 值:指定特殊字符的个数,默认值为1
1. 随机生成一个20位的密码 mkpassed -l 20 2. 随机生成一个20位的密码,包含4位数字 mkpasswd -l 20 -d 4

加密用户密码

whois 包中的 mkpasswd 是一个在 Linux 和 Unix 系统中生成加密密码的工具。它常用于加密用户密码,特别是在涉及到 /etc/shadow 文件或其他需要加密密码的场景下。mkpasswd 工具可以生成各种哈希算法加密的密码,如 MD5、SHA-256、SHA-512 等。

安装

在一些 Linux 发行版中,mkpasswd 是 whois 包的一部分。如果系统上没有 mkpasswd,可以通过包管理器安装 whois 包:

  • 基于 Red Hat 的系统(如 CentOS、Fedora)

    sudo yum install whois
    
  • 基于 Debian 的系统(如 Ubuntu)

    sudo apt-get install whois
命令

mkpasswd [选项] [密码] [盐值]

  • 可以输入一个需要加密的明文密码
  • 盐值可选,可以添加到密码中以增强哈希的安全性
  • 默认使用MD5算法
  • -m 算法:指定一个加密算法,如:sha-512,sha-256,md5等
1. 使用 SHA-512 生成加密密码 mkpasswd -m sha-512 mypassword 2. 生成一个使用 SHA-512 加密的密码,并指定一个盐值 mkpasswd -m sha-512 "password123" "randomsalt"

time

linux中的time命令通常提供了两个,一个是bash内置的time命令,用来查看目录所消耗的时间。还有一个为外部工具,命令路径为/usr/bin/time,功能更为强大,可以查看命令所消耗的资源,包括内存使用情况

通过type命令可以看到两个命令的来源

[root@Linux ~]# type -a time time is a shell keyword time is /usr/bin/time

bash内建的time

time [选项] 命令

  • -o 文件名:将输出写入指定文件,如果已有该文件则覆盖
  • -a 配合-o使用,将命令输出追加到文件末尾,而不是覆盖
  • -p 以POSIX标准格式输出时间信息
查看ls命令所消耗的时间 time ls 输出值为: real 0m0.002s #真实时间 user 0m0.002s #用户时间 sys 0m0.000s #系统时间

外部time工具

/usr/bin/time [选项] 命令

  • -o 文件名:将输出写入指定文件,如果已有该文件则覆盖
  • -a 配合-o使用,将命令输出追加到文件末尾,而不是覆盖
  • -p 以POSIX标准格式输出时间信息
  • -v 详细输出命令所消耗的时间、内存等信息
查看命令所消耗时间的输出信息与bash内置的time命令一样,但bin目录下的time工具额外提供了-v选项用来详细输出系统资源消耗 /usr/bin/time ls 输出值通常包括时间、最大内存使用、进程数量、页面错误、退出状态码等 Command being timed: "ls" User time (seconds): 0.00 System time (seconds): 0.00 Percent of CPU this job got: 100% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 1116 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 336 Voluntary context switches: 1 Involuntary context switches: 1 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
上一篇:Shell介绍与使用
下一篇:sed与awk
z z z z z