Linux命令

CMake

CMake是一个开源、跨平台的工具系列,是用来构建、测试和打包软件。
CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用项目文件,比如可以生成vs项目文件或者makefile。CMake工具套件由Kitware公司创建,以满足ITK和VTK等开源项目对跨平台构建环境的需求。Kitware是一家从事医疗计算,高性能的可视化和计算,数据和分析,计算机视觉的公司。该公司成立于1998年。

CMake编译原理

cmake编译(Linux系统构建示例)

  1. 安装cmake

  2. 源码准备:C++源码+cmake配置文件(CMakeLists.txt)
    示例
    CMakeLists.txt文件在根目录 ,c++源码first_cmake.cpp和其同一个目录。

  3. Linux平台编译
    安装g++ ,等依赖指令sudo apt update && sudo apt install -y cmake g++ wget unzip

    1. 创建build目录,并进入build目录;
    2. 生成makefile文件,通过cmake .. # ..指向了CMakeLists.txt所在的目录
    3. 编译项目,cmake --build . #.指build目录,该命令表示编译项目在build目录下。

通过cmake ./cmake .. 命令创建Makefile文件后,一般使用make命令编译文件。这里的cmake --build .就与make一样的效果

.sh文件

什么是.sh 文件?

扩展名为 .sh 的文件是脚本语言命令文件,其中包含要由 Unix shell 运行的计算机程序。它可以包含一系列顺序运行的命令,以执行诸如文件处理、程序执行和其他此类任务之类的操作。这些由用户或批量从命令行界面执行,以同时执行多个操作。脚本文件可以在文本编辑器中打开,例如 Notepad、Notepad++、Vim、Apple Terminal 和 Windows、MacOS 和 Linux OS 上的其他类似应用程序。

SH 文件格式

SH 文件按照定义的语法以纯文本形式编写。这些脚本文件支持:

  • Comments - 注释以 # 开头,并被 shell 忽略。
  • Shortcuts - 这些可用于重命名命令以实现简短且易于执行。
  • Batch Jobs - 几个命令可以自动执行,否则需要手动输入。这消除了等待用户触发序列的每个阶段的需要。
  • Generalization - 使用简单的循环,可以实现更多的泛化操作,例如从一个图像到另一个图像的转换。

SH 文件示例

$ echo '#!/bin/sh' > my-script.sh
$ echo 'echo Hello World' >> my-script.sh
$ cat my-script.sh
#!/bin/sh
echo Hello World
$ chmod 755 my-script.sh
$ ./my-script.sh
Hello World

如何运行 SH 文件?

SH 文件通常在 Linux 上运行,即使在 Windows 中,您也需要使用 Putty 等软件连接 Linux 终端来运行 sh 文件。以下是在 Linux 终端上运行 SH 文件的步骤。

1、打开Linux终端,进入SH文件所在目录。 2. 通过使用chmod命令,设置脚本的执行权限(如果尚未设置)。 3. 使用以下方法之一运行脚本 1../filename.sh 2.sh 文件名.sh 3. bash script-name-here.sh

编写shell脚本

1. 创建shell脚本 2. 设置路径 3. 赋予脚本权限 4. 执行脚本

首先,创建shell脚本

#!/bin/bash

# 注释

脚本

#!/bin/bash:#!是一个特殊构件用于告知内核使用哪个解释器执行接下来的脚本

其次,要让脚本放在shell能够找到的地方
手动添加路径:

export PATH=~/bin:"$PATH"
. .bashrc

点号命令式source命令的同义词。

建议路径:
shell查找的目录可通过:echo $PATH 显示,路径之间用冒号:分隔。
用户自己的程序,存放在/home/user_name/bin目录下,~/bin
系统所有用户都可以使用的脚本,存放在/usr/local/bin目录下
超级用户使用的脚本,存放在/usr/local/sbin目录下。

最后,设置脚本的权限,注意脚本必须具有读取权限才能执行。
权限设置:755(赋予所有用户可执行权限),700(赋予属主可执行权限)

chmod 755|700 shell_file

执行脚本:./file_name 或者file_name

Ubuntu信息查询

查询CPU的核心数

# 1. 查看物理CPU个数
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l

# 2. 查看每个物理CPU的核数
cat /proc/cpuinfo | grep "core id" | sort -u | wc -l

# 3. 使用lscpu命令,lscpu命令可以提供关于CPU架构的详细信息,包括总的CPU核数和可用的CPU核数
lscpu | grep "CPU(s):"

# 4. nproc命令会输出系统中可用的CPU核数,这对于查看逻辑CPU数很有帮助
nproc

# 5. 查看/proc/cpuinfo文件:直接查看/proc/cpuinfo文件也可以获得CPU的详细信息,包括型号、频率、核心数等

cat /proc/cpuinfo

综上所述,通过组合这些方法,您可以得到CPU的总核心数,即物理CPU个数乘以每个物理CPU的核数,如果考虑超线程技术,还需要考虑每个物理CPU支持的超线程数。例如,如果您的系统有2个物理CPU,每个CPU有10个核心,并且使用了超线程技术,那么总的逻辑CPU数将是2乘以10再乘以超线程数(通常为2),即40个逻辑CPU核心。

操作系统版本号

# 查看Linux(Ubuntu)系统的版本号
  lsb_release -a
# 这个命令将会显示包括版本号在内的Ubuntu发行版信息。输出将类似于:
  No LSB modules are available.
  Distributor ID: Ubuntu
  Description:    Ubuntu 20.04.2 LTS
  Release:        20.04
  Codename:       focal

此外,还有其他几种方法可以查看Ubuntu版本信息:

  • 在终端中输入 cat /proc/version,查看Linux内核版本和GCC版本。
  • 在终端中输入 uname -a,查看Linux内核版本和系统位数。
  • 在终端中输入 hostnamectl,查看系统的主机名和操作系统信息。
  • 在终端中输入 cat /etc/lsb-releasecat /etc/os-release,查看发行版的基本信息。
  • 在终端中输入 cat /etc/issue,查看发行版的简单信息。
  • GNOME 设置:如果您使用的是带有图形用户界面的Ubuntu,可以在设置中找到版本信息。通常,您可以在“设置”>“关于”中找到系统版本信息。

操作系统架构

uname -m #直接显示linux系统架构
uname -a #Linxu系统架构+附加信息

dpkg --print-architecture #查看Debian/Ubuntu系统是32/64位

getconf #显示系统变量配置

arch #显示操作系统架构类型

file 配合/sbin/init或者/bin/bash来查看系统架构类型
  file /sbin/init
  file /bin/bash

Linux系统中的目录

其中:
/home:每个用户在/home中都有各自的目录。普通用户仅对自己的主目录中的文件有写权限。
/usr: 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

/usr/x11r6 存放x window的目录
/usr/bin 众多的应用程序  
/usr/sbin 超级用户的一些管理程序  
/usr/doc linux文档  
/usr/include linux下开发和编译应用程序所需要的头文件  
/usr/lib 常用的动态链接库和软件包的配置文件  
/usr/man 帮助文档  
/usr/src 源代码,linux内核的源代码就放在
/usr/src/linux里  
/usr/local/bin 本地增加的命令  
/usr/local/lib 本地增加的库

/dev:包含设备节点的特殊目录,Linux内核在其中维护着能够识别的全部设备

常见的linux操作命令

注意:
\:代表用户主目录
.:当前工作目录
..:当前工作目录的父目录

cd

cd             :将当前工作目录更改为用户主目录
cd -           :将当前工作目录切换回前一个工作目录
cd ~user_name  : 将当前工作目录更改为用户user_name的主目录
cd ~           : 切换到当前用户的主目录

自己常用的命令
1. 创建对数据集的软连接
ln命令 用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项。

注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。

语法
ln [选项]... [-T] 目标 链接名	(第一种格式)
或:ln [选项]... 目标		(第二种格式)
 或:ln [选项]... 目标... 目录	(第三种格式)
 或:ln [选项]... -t 目录 目标...	(第四种格式)

选项
-s, --symbolic              # 对源文件建立符号链接,而非硬链`
参数
 源文件:指定链接的源文件。如果使用-s选项创建符号链接,则“源文件”可以是文件或者目录。创建硬链接时,则“源文件”参数只能是文件。
 目标文件:指定源文件的目标链接文件。

示例:

# 在目录/usr/liu下建立一个符号链接文件abc,使它指向目录/usr/mengqc/mub1
ln -s /usr/mengqc/mub1 /usr/liu/abc

执行该命令后,/usr/mengqc/mub1代表的路径将存放在名为/usr/liu/abc的文件中。

有趣的Linux命令查找项目。不再手更。

Linux命令搜索

  1. 补充

alias:别名

语法:alias name='string' (除了第一个空白字符,之后不允许出现空白字符)

删除别名:unalias name

>和>>
> :标准输出重定向到文件
>>:标准输出追加到文件尾部
文件流:标准输入,标准输出,标准错误用文件描述符0,1,2 引用。

shell提供文件描述符来重定向文件的用法
联合重定向:使用&>|&>> 将标准输出和标准错误重定向或追加到文件。

位桶:/dev/null的特殊文件,能够接受输入结果单不做任何处理。

算术运算
算术扩展形式:$((expression)) # + - * / % ** 由于仅支持整数算术运算,除法的结果也是整数

花括号扩展:创建文件,目录
花括号表达式支持逗号分割的字符串列表,整数区间或单个字符

  • 字符串列表:

  • 整数区间:{1..5},{01..15},

  • 单个字符:{A..Z},

  • 嵌套:{A{1,2},B{3,4}}

参数扩展
变量格式:$var

查看变量:printenv|less

输出变量:echo $var

命令替换:命令替换允许我们使用命令的输出结果作为扩展结果。

格式:$(命令)|'命令'

输出ls命令的结果:echo $(ls)

双引号

文本放在双引号中,那么shell使用的所有特殊字符都将丧失其特殊含义,从而背时为普通字符.$,,'除外。这意味着单词分割,路径名扩展,浪纹线扩展,花括号扩展全部失效,但是参数扩展,算术扩展,命令替换仍然有效。

单引号

单引号将禁止所有扩展

  1. kill 进程

kill -15 PID 优雅关闭进程

kill -9 PID 强制关闭进程


一些实例操作

更新Nvidia驱动

  1. 查看显卡型号

     lspci | grep VGA     # 查看集成显卡
     lspci | grep NVIDIA  # 查看NVIDIA显卡
    
  2. 查看显卡驱动信息

     nvidia-smi
    
  3. 安装适配驱动
    方式一:使用Ubuntu仓库进行自动安装

     #1.查看显卡型号及推荐的驱动版本
     ubuntu-drivers devices   #(截图在 4.2.1 中已经贴过,此处不赘述)
     #2.自动安装推荐的显卡驱动版本
     sudo ubuntu-drivers autoinstall
     #3.查看驱动信息,确认安装成功
     nvidia-smi 
    

Ubuntu配置SSH进行远程连接

  1. 打开终端并安装openssh-server软件包

    sudo apt update
    sudo apt install openssh-server [-y]
    

    参数 -y 对所有的提示自动回答 yes ,如果出现危险操作,apt 命令会自动终止。

    安装完成后,SSH服务将自动启动,通过下列命令可以验证SSH是否在运行

    sudo systemctl status ssh
    # 显示:
    ● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-06-01 12:34:00 CEST; 9h ago
    

    按q返回到命令行提示符。

    如果运行状态不为active(running),需要手动开启,命令为:

    /etc/init.d/ssh start
    
  2. 修改SSH登录配置

    sudo gedit /etc/ssh/sshd_config
    
    • 将PermitRootLogin prohibit-password那一行修改为PermitRootLogin yes,去掉前面的#号

    • 将port 22前面的#去掉

    然后重启SSH服务。
  3. 检查防火墙

    Ubuntu随附了一个名为UFW的防火墙配置工具。如果在系统上启用了防火墙,请确保打开SSH端口:

    sudo ufw allow ssh
    

    为了确保配置生效,执行以下命令启用防火墙并重新加载防火墙配置:

    sudo ufw enable && sudo ufw reload
    

    现在,您可以从任何远程计算机通过SSH连接到Ubuntu系统。

  4. 使用SSH登录远程计算机
    PowerShell 中尝试以下命令,如果你的操作系统是 Linux ,以下命令也是相同的。其中 @ 字符的左侧是 Linux 用户名,右侧是 IP 地址/计算机名称/域名。

    ssh user@ip
    

    第一次登录远程,会出现

    The authenticity of host 'dev (fe80::786d:71b9:c4bb:5c45%25)' can't be         established.
    ED25519 key fingerprint is     SHA256:EsPTqYB662R7j4XvEzuhd9Zk1utAJBNzK6NajCr8QzQ.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    

    这是要求验证远程计算机的真实性,可以防止中间人攻击。通过在远程计算机上运行以下命令获得 ED25519 密钥指纹:
    ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub
    如果通过比对一致,可以输入 yes 回车继续下一步,如果不一致,那可千万要小心了,你可能已经遭到了中间人攻击。

  5. 重启SSH服务的方法

    # 要在您的Ubuntu系统上禁用SSH服务器,只需运行以下命令即可停止SSH服务:
    sudo systemctl disable --now ssh
    
    # 稍后,要重新启用它,请输入:
    sudo systemctl enable --now ssh
    
    # 如果想设置开机自动启动SSH服务
    chkconfig sshd on
    

概念性问题

软件包管理

软件包管理是安装和维护系统内软件的一种方法

不同的Linux发行版本有不同的打包系统

打包系统 Linux发行版本
Debian(.deb) Debian、Ubuntu、Linux Mint、Raspbian
Red Hat(.rpm) Fedora、CentOS、Red HatEnterprise Linux

打包系统

打包系统通常由两种工具组成。

  • 处理软包文件的安装和删除等任务的底层工具
  • 执行元数据搜索和解决依赖性问题的高层工具
Linux发行版本 底层工具 高层工具
Debian类 dpkg apt-get、apt、aptitude
Red Hat类 RPM YUM、DNF

apt-get

Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。

语法:
apt-get [OPTION] PACKAGE

选项:
apt-get install  # 安装新包
apt-get remove   # 卸载已安装的包(保留配置文件)
apt-get purge    # 卸载已安装的包(删除配置文件)
apt-get update   # 更新软件包列表
apt-get upgrade  # 更新所有已安装的包
apt-get autoremove   # 卸载已不需要的包依赖
apt-get dist-upgrade # 自动处理依赖包升级
apt-get autoclean    # 将已经删除了的软件包的.deb安装文件从硬盘中删除掉
apt-get clean        # 删除软件包的安装包

-c:指定配置文件。

Debian的软件库也就是所有Debian软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get就能搜索到我们想要的软件。/etc/apt/sources.list是存放这些地址列表的配置文件

dpkg

dpkg命令 是Debian Linux系统用来安装、创建和管理软件包的实用工具。

语法

dpkg(选项)(参数)

选项

-i:安装软件包;
-r:删除软件包;
-P:删除软件包的同时删除其配置文件;
-L:显示于软件包关联的文件;
-l:显示已安装软件包列表;
--unpack:解开软件包;
-c:显示软件包内文件列表;
--confiugre:配置软件包。

参数

Deb软件包:指定要操作的.deb软件包。
实例

dpkg -i package.deb     # 安装包
dpkg -r package         # 删除包
dpkg -P package         # 删除包(包括配置文件)
dpkg -L package         # 列出与该包关联的文件
dpkg -l package         # 显示该包的版本
dpkg --unpack package.deb  # 解开deb包的内容
dpkg -S keyword            # 搜索所属的包内容
dpkg -l                    # 列出当前已安装的包
dpkg -c package.deb        # 列出deb包的内容
dpkg --configure package   # 配置包

RPM

rpm命令 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

语法

rpm(选项)(参数)

选项

-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
-d:只列出文本文件,本参数需配合"-l"参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--hash:套件安装时列出标记;
-i:显示套件的相关信息;
-i<套件档>或--install<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合"-l"参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-v:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错。

参数

软件包:指定要操纵的rpm软件包。

Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装!
我们都知道源码包安装分为这么几个阶段,
1、 tar:解压这个源码软件包。
2、 cd:进入到这个源码包。
3、 ./configure:“configure”会在你的系统上测试存在的特性(或者bug!)然后来建立Makefile文件来完成make!
4、 Make:编译程序。
5、 Make install:安装文件!

yum

um命令 是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

语法

yum(选项)(参数)

选项

-h:显示帮助信息;
-y:对所有的提问都回答“yes”;
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。

参数

install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系;
provides:查询某个程序所在安装包。
实例

部分常用的命令包括:

    自动搜索最快镜像插件:yum install yum-fastestmirror
    安装yum图形窗口插件:yum install yumex
    查看可能批量安装的列表:yum grouplist
安装

yum install              #全部安装
yum install package1     #安装指定的安装包package1
yum groupinsall group1   #安装程序组group1
更新和升级

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

# 检查 MySQL 是否已安装
yum list installed | grep mysql
yum list installed mysql*

yum info package1      #显示安装包信息package1
yum list               #显示所有已经安装和可以安装的程序包
yum list package1      #显示指定程序包安装情况package1
yum groupinfo group1   #显示程序组group1信息yum search string 根据关键字string查找安装包
删除程序

yum remove &#124; erase package1   #删除程序包package1
yum groupremove group1             #删除程序组group1
yum deplist package1               #查看程序package1依赖情况
清除缓存

yum clean packages       # 清除缓存目录下的软件包
yum clean headers        # 清除缓存目录下的 headers
yum clean oldheaders     # 清除缓存目录下旧的 headers
更多实例

# yum
/etc/yum.repos.d/       # yum 源配置文件
vi /etc/yum.repos.d/nginx.repo # 举个栗子: nginx yum源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

# yum mirror
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget https://mirror.tuna.tsinghua.edu.cn/help/centos/
yum makecache
# 添加中文语言支持
LANG=C # 原始语言
LANG=zh_CN.utf8 # 切换到中文
yum groupinstall "Chinese Support" # 添加中文语言支持

下载工具

wget命令 用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

语法
wget [参数] [URL地址]
选项

启动参数:

-V, –-version 显示wget的版本后退出
-h, –-help 打印语法帮助
-b, –-background 启动后转入后台执行
-e, –-execute=COMMAND 执行 .wgetrc 格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件参数:

-o, –-output-file=FILE 把记录写到FILE文件中
-a, –-append-output=FILE 把记录追加到FILE文件中
-d, –-debug 打印调试输出
-q, –-quiet 安静模式(没有输出)
-v, –-verbose 冗长模式(这是缺省设置)
-nv, –-non-verbose 关掉冗长模式,但不是安静模式
-i, –-input-file=FILE 下载在FILE文件中出现的URLs
-F, –-force-html 把输入文件当作HTML格式文件对待
-B, –-base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–-sslcertfile=FILE 可选客户端证书
–-sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–-egd-file=FILE 指定EGD socket的文件名
下载参数:

–-bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –-tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –-output-document=FILE 把文档写到FILE文件中
-nc, –-no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –-continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –-timestamping 不要重新下载文件除非比本地文件新
-S, –-server-response 打印服务器的回应
–-spider 不下载任何东西
-T, –-timeout=SECONDS 设定响应超时的秒数
-w, –-wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –-proxy=on/off 打开或关闭代理
-Q, –-quota=NUMBER 设置下载的容量限制
-–limit-rate=RATE 限定下载输率
目录参数:

-nd –-no-directories 不创建目录
-x, –-force-directories 强制创建目录
-nH, –-no-host-directories 不创建主机目录
-P, –-directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
HTTP 选项参数:

-–http-user=USER 设定HTTP用户名为 USER.
-–http-passwd=PASS 设定http密码为 PASS
-C, –-cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E, –-html-extension 将所有text/html文档以.html扩展名保存
-–ignore-length 忽略 Content-Length 头域
-–header=STRING 在headers中插入字符串 STRING
-–proxy-user=USER 设定代理的用户名为 USER
-–proxy-passwd=PASS 设定代理的密码为 PASS
-–referer=URL 在HTTP请求中包含  Referer: URL 头
-s, –-save-headers 保存HTTP头到文件
-U, –-user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION
-–no-http-keep-alive 关闭 HTTP活动链接 (永远链接)
–-cookies=off 不使用 cookies
–-load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
-–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
FTP 选项参数:

-nr, -–dont-remove-listing 不移走 .listing 文件
-g, -–glob=on/off 打开或关闭文件名的 globbing机制
-–passive-ftp 使用被动传输模式 (缺省值).
-–active-ftp 使用主动传输模式
-–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
递归下载参数:

-r, -–recursive 递归下载--慎用!
-l, -–level=NUMBER 最大递归深度 (inf 或 0 代表无穷)
–-delete-after 在现在完毕后局部删除文件
-k, –-convert-links 转换非相对链接为相对链接
-K, –-backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –-mirror 等价于 -r -N -l inf -nr
-p, –-page-requisites 下载显示HTML文件的所有图片

递归下载中的包含和不包含(accept/reject):

-A, –-accept=LIST 分号分隔的被接受扩展名的列表
-R, –-reject=LIST 分号分隔的不被接受的扩展名的列表
-D, –-domains=LIST 分号分隔的被接受域的列表
–-exclude-domains=LIST 分号分隔的不被接受的域的列表
–-follow-ftp 跟踪HTML文档中的FTP链接
–-follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –-ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –-span-hosts 当递归时转到外部主机
-L, –-relative 仅仅跟踪相对链接
-I, –-include-directories=LIST 允许目录的列表
-X, –-exclude-directories=LIST 不被包含目录的列表
-np, –-no-parent 不要追溯到父目录
wget -S –-spider url 不下载只显示过程
参数
URL:下载指定的URL地址。

实例

使用wget下载单个文件

wget http://www.jsdig.com/testfile.zip

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

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

wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080

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

错误:下面的例子会下载一个文件并以名称download.aspx?id=1080保存:

wget http://www.jsdig.com/download?id=1

即使下载的文件是zip格式,它仍然以download.php?id=1080命名。

正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:

wget -O wordpress.zip http://www.jsdig.com/download.aspx?id=1080

wget限速下载

wget --limit-rate=300k http://www.jsdig.com/testfile.zip

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

使用wget断点续传

wget -c http://www.jsdig.com/testfile.zip

使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。

使用wget后台下载

wget -b http://www.jsdig.com/testfile.zip

Continuing in background, pid 1840.
Output will be written to 'wget-log'.

对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载,你可以使用以下命令来察看下载进度:

tail -f wget-log

伪装代理名称下载

wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.jsdig.com/testfile.zip

有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过--user-agent参数伪装。

测试下载链接

当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加--spider参数进行检查。

wget --spider URL

如果下载链接正确,将会显示:

HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误:

wget --spider url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!

你可以在以下几种情况下使用--spider参数:

  • 定时下载之前进行检查
  • 间隔检测网站是否可用
  • 检查网站页面的死链接

增加重试次数

wget --tries=40 URL

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

下载多个文件

wget -i filelist.txt

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

cat > filelist.txt
url1
url2
url3
url4

接着使用这个文件和参数-i下载。

镜像网站

wget --mirror -p --convert-links -P ./LOCAL URL

下载整个网站到本地。

  • --miror开户镜像下载。
  • -p下载所有为了html页面显示正常的文件。
  • --convert-links下载后,转换成本地的链接。
  • -P ./LOCAL保存所有文件和目录到本地指定目录。

过滤指定格式下载

wget --reject=gif ur

下载一个网站,但你不希望下载图片,可以使用这条命令。

把下载信息存入日志文件

wget -o download.log URL

不希望下载信息直接显示在终端而是在一个日志文件,可以使用。

限制总下载文件大小

wget -Q5m -i filelist.txt
当你想要下载的文件超过5M而退出下载,你可以使用。注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。

下载指定格式文件
wget -r -A.pdf url

可以在以下情况使用该功能:

  • 下载一个网站的所有图片。
  • 下载一个网站的所有视频。
  • 下载一个网站的所有PDF文件。

FTP下载

wget ftp-url
wget --ftp-user=USERNAME --ftp-password=PASSWORD url

可以使用wget来完成ftp链接的下载。

使用wget匿名ftp下载:

wget ftp-url

使用wget用户名和密码认证的ftp下载:

wget --ftp-user=USERNAME --ftp-password=PASSWORD url

归档与备份

压缩文件

文件归档

7z压缩

7z是一种解压缩软件,因为大多数的linux系统都自带7z或者我们可以sudo 命令快速的安装,因此我们常用7z对linux系统中的文件进行解压缩

Linux安装7z的命令: sudo apt install p7zip-full

注:
p7zip、p7zip-full和p7zip-rar三个版本的区别:
p7zip和p7zip-full之间的区别在于p7zip是较轻的版本,仅支持.7z,而完整版本支持更多7z压缩算法(用于音频文件等)。
p7zip-rar软件包提供对7z的RAR文件的支持,在大多数情况下,安装p7zip-full应该足够了。

 - 支持格式:
     - 压缩 / 解压缩:7z、XZ、BZIP2、GZIP、TAR、ZIP、WIM
     - 仅解压缩:AR、ARJ、CAB、CHM、CPIO、CramFS、DMG、EXT、FAT、GPT、HFS、
               IHEX、ISO、LZH、LZMA、MBR、MSI、NSIS、NTFS、QCOW2、RAR、
               RPM、SquashFS、UDF、UEFI、VDI、VHD、VMDK、WIM、XAR 以及 Z。

command(命令)

command 说明
a 添加文件的压缩包,或者创建新的压缩包。
d 从压缩包中删除文件。
e 从压缩包中提取。
t 测试压缩包的是否出错。
u 更新压缩包中的文件。
x 解压缩

switch(命令对应的参数)
由于command很多,而其对应的switch也不尽相同。
常用的switch
名称 说明 简单例子(只展示参数部分)
-m 压缩方法,有:Zip、GZip、BZip2、7z、XZ..很多 -mx5 见补充
-t 压缩包格式,压缩时可以指定分卷压缩, 有, #(单独打开一个分卷), 7z, xz, split, zip, gzip, bzip2, tar, .... -t7z
-p 设置密码 -p123456
-r 递归子目录,有-r、-r-、-r0 -r src
.cpp src*.h只压缩cpp和h格式的文件

一、压缩命令:

普通压缩    7z a archive1.zip subdir                //把subdir文件夹或者是文件进行压缩,生成文件archive1.zip

同时压缩多个目录
7z a archive.zip subdirav subdirab      //同时subdirav、subdirab两个文件夹或是文件压缩到archive.zip下

筛选压缩
7z a file.7z subdir*.py                //使用的是简单的*作为通配符。此时file.7z里只有subdir和subdir内的test.py

指定密码压缩
7z a file.7z subdir* -p123456          //压缩subdir内的所有文件,并指定密码为123456.但是没有隐藏内部的文件名(7z是可以隐藏压缩文件内部的文件名的)

指定密码压缩--隐藏文件名版
7z a file.7z subdir* -p123456 -mhe     //和上一个版本的唯一区别是隐藏了压缩文件内部的文件名。

分卷压缩
7z a file.7z subdir* -v1K              //指定分卷大小为1K,还可以指定其他单位(M、G...)。大小写不敏感。

其他
如分卷压缩+指定密码等组合性的指令不做演示。可以根据参数的使用方法自由组合

二、解压命令:

普通解压
7z x file.7z                          //解压到当前目录

带路径的解压缩命令(最常用)
7z x asdf.7z                          //x的意思是执行带绝对路径解压动作,这会在当前文件夹下创建一个文件夹asdf,把压缩包里的文件、文件夹不改动结构释放到文件asdf里面,就像我们在
                                      // 图形界面下看到的常经典解压操作一样
解压到指定目录
7z x file.7z -o file/                  //将file.7z解压到当前目录的file文件夹下(不存在是会自动创建)使用-o解压到指定目录

解压特定文件
7z x file.7z -o file/ *.py -r         //解压以.py结尾的文件到file文件夹下,注意加上-r。

解压分卷
前提:分卷是完整的
7z x file.7z.001
注意:
分卷在同一目录下(使用这个命令是这样的,其他的不知道)
解压的是第一个分卷即xxx.001

解压带密码的压缩包
7z x file.7z -p123456                //解压file.7z,密码为123456

跳过确认输入的参数
-y:所有确认选项都默认为是(即不出现确认提示),重复文件时会覆盖
-aos:跳过已存在的文件

三、删除

7z d file.7z *.py -r                //删除file.7z内以.py结尾的文件,注意不要忘了 -r
7z d file.7z *.py -r -p123456       //带密码版

四、更新

7z u file.7z *.py                  //添加.py结尾的文件到file.7z内
7z u file.7z *.py -p123456         //带密码版

tar.gz文件

tar.gz是什么?

以·tar.gz为后缀的文件是一种压缩文件,在Linux和macOS下常见,Linux和macOS都可以直接解压使用这种压缩文件。
解压命令

tar -zxvf data.tar.gz

运行命令后会将data.tar.gz解压到当前目录下

压缩命令

tar -zcvf data.tar.gz data

运行后会将指定文件或者文件夹data,压缩后保存成data.tar.gz

-z: 使用gzip

-c: 压缩

-x: 解压

-v: 显示解压压缩的文件列表

-f: 指定文件

rar文件解压

步骤1:安装unrar工具

sudo apt update # 更新apt
sudo apt install unrar # 安装unrar

步骤2:解压rar文件

unrar x <rar文件名>.rar [解压路径/]

如果unrar不可用,可以尝试安装unrar-free
sudo apt install unrar-free
unrar-free --extract 文件名.rar

Linux zip 分卷压缩与解压

解决传输文件过大的问题

分卷压缩

方式一:直接分卷压缩
    zip -r -s 1m log.zip log/

-r 代表递归子目录(如果没有加压缩出来只包含一个空目录)
-s 1m代表分卷大小(这里我进行测试所以设置的比较小,正式使用一般设置为1g)
log.zip为压缩包名
log/为待压缩的目录

方式二:先压缩后分卷
    zip -r log.zip log/
    zip -s 1g log.zip --out new.zip

解压缩

方式一:先合并再解压
    zip -s 0 log.zip --out new_log.zip
    unzip new_log.zip
方式二:先修复分卷,合成一个正确的压缩文件再进行解压
    zip -F log.zip --out new_log.zip
    unzip new_log.zip

-F 后是要修复的压缩文件
–out 后是修复合并出来的用于解压缩的压缩文件

posted @ 2024-04-19 10:15  AlexanderOscar  阅读(14)  评论(0编辑  收藏  举报