Linux命令
CMake
CMake是一个开源、跨平台的工具系列,是用来构建、测试和打包软件。
CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用项目文件,比如可以生成vs项目文件或者makefile。CMake工具套件由Kitware公司创建,以满足ITK和VTK等开源项目对跨平台构建环境的需求。Kitware是一家从事医疗计算,高性能的可视化和计算,数据和分析,计算机视觉的公司。该公司成立于1998年。
CMake编译原理
cmake编译(Linux系统构建示例)
-
安装cmake
-
源码准备:C++源码+cmake配置文件(CMakeLists.txt)
示例
CMakeLists.txt文件在根目录 ,c++源码first_cmake.cpp和其同一个目录。 -
Linux平台编译
安装g++ ,等依赖指令sudo apt update && sudo apt install -y cmake g++ wget unzip
- 创建build目录,并进入build目录;
- 生成makefile文件,通过
cmake ..
# ..指向了CMakeLists.txt所在的目录 - 编译项目,
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-release
或cat /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命令查找项目。不再手更。
- 补充
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使用的所有特殊字符都将丧失其特殊含义,从而背时为普通字符.$,,'除外。这意味着单词分割,路径名扩展,浪纹线扩展,花括号扩展全部失效,但是参数扩展,算术扩展,命令替换仍然有效。
单引号
单引号将禁止所有扩展
- kill 进程
kill -15 PID 优雅关闭进程
kill -9 PID 强制关闭进程
一些实例操作
更新Nvidia驱动
-
查看显卡型号
lspci | grep VGA # 查看集成显卡 lspci | grep NVIDIA # 查看NVIDIA显卡
-
查看显卡驱动信息
nvidia-smi
-
安装适配驱动
方式一:使用Ubuntu仓库进行自动安装#1.查看显卡型号及推荐的驱动版本 ubuntu-drivers devices #(截图在 4.2.1 中已经贴过,此处不赘述) #2.自动安装推荐的显卡驱动版本 sudo ubuntu-drivers autoinstall #3.查看驱动信息,确认安装成功 nvidia-smi
Ubuntu配置SSH进行远程连接
-
打开终端并安装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
-
修改SSH登录配置
sudo gedit /etc/ssh/sshd_config
-
将PermitRootLogin prohibit-password那一行修改为PermitRootLogin yes,去掉前面的#号
-
将port 22前面的#去掉
-
-
检查防火墙
Ubuntu随附了一个名为UFW的防火墙配置工具。如果在系统上启用了防火墙,请确保打开SSH端口:
sudo ufw allow ssh
为了确保配置生效,执行以下命令启用防火墙并重新加载防火墙配置:
sudo ufw enable && sudo ufw reload
现在,您可以从任何远程计算机通过SSH连接到Ubuntu系统。
-
使用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 回车继续下一步,如果不一致,那可千万要小心了,你可能已经遭到了中间人攻击。 -
重启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 | 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 后是修复合并出来的用于解压缩的压缩文件