Linux 按文件列表拷贝文件到指定目录并保持原有的目录结构

当需要拷贝多个文件并且需要保留源文件的目录树结构时, 如果源目录的文件比较纯净,没有其他相关的文件或目录时, 我们只需要执行

~$ #cp -r <源目录> <新目录>
~$ cp -r workspace/project workspace/Cpp
12

但是, 如果我们需要拷贝的文件所在的目录里包含了其他项目或程序的文件或目录, 那我们就不能这么干

比如,

  • 在 /etc或者/usr/local/bin下面有很多我们自己项目的相关配置文件和程序文件, 并且我们知道这些文件路径

  • 包含指定字符串的文件名, 比如 *.log

  • 我们自己制作或者我们比较感兴趣的其他厂商的 *.deb程序包(Ubuntu使用软件包)

针对自己的项目配置文件

我们可以新建一个文本文档, 里面把我们所关心的文件列出来

list.txt

/etc/app/app.cnf
/etc/app/conf.d/a.cnf
/etc/app/conf.d/b.cnf
/etc/app/conf.d/c.cnf
/etc/app/conf.d/d.cnf
12345

这样我们就可以通过使用 cat list.txt 获取到我们的文件路径列表

此时我们只需要使用

~$ cp --parent $(cat list.txt) .
1

就可以将列表里面的所有文件按照原有的目录树结构拷贝到当前目录(或者使用其他目录)

针对包含指定字符串的文件名我们可以用 find 命令获取到文件列表

~$ find /opt/ros/ -name *.a
/opt/ros/kinetic/lib/liboctomath.a
/opt/ros/kinetic/lib/libcsm-static.a
/opt/ros/kinetic/lib/liboptions.a
/opt/ros/kinetic/lib/libegsl.a
/opt/ros/kinetic/lib/liboctomap.a
~$
1234567

然后, 嘿嘿

~$ cp --parent $(find /opt/ros -name *.a) .
1

这不就都按照源目录结构拷贝到当前目录了嘛

针对.deb包的文件列表, 我们也有命令可以获取到路径列表

~$ dpkg -L mysql-server-5.7 
/etc
/etc/mysql
/etc/mysql/mysql.conf.d
/etc/mysql/mysql.conf.d/mysqld_safe_syslog.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/debian-start
/etc/mysql/mysql.cnf
/etc/apparmor.d
/etc/apparmor.d/usr.sbin.mysqld
/etc/logrotate.d
/etc/logrotate.d/mysql-server
/etc/init.d
/etc/init.d/mysql
/etc/logcheck
/etc/logcheck/ignore.d.server
/etc/logcheck/ignore.d.server/mysql-server-5_7
/etc/logcheck/ignore.d.workstation
/etc/logcheck/ignore.d.workstation/mysql-server-5_7
/etc/logcheck/ignore.d.paranoid
/etc/logcheck/ignore.d.paranoid/mysql-server-5_7
/etc/init
/etc/init/mysql.conf
~$ 
123456789101112131415161718192021222324

linux复制指定目录下的全部文件到另一个目录中
复制指定目录下的全部文件到另一个目录中
文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。
假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了
如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求。
ps:dir1、dir2改成对应的目录路径即可。

cp -r /home/www/xxx/statics/. /home/www/statics
如果存在文件需要先删除
rm -rf /home/www/statics/*
否则会一个个文件提示你确认,使用cp -rf 也一样提示

————————————–

linux下cp整个文件夹的文件到另一个文件夹
cp -ri A/B/* A1/B1/ 回车
若复制过程中询问是否覆盖,输入y按回车,若不想看到提示直接覆盖使用-rf
另外若A A1不在同一目录下,最好填绝对路径,就是/xxx/xxx/A/B/* /xxx/A1/B1/

实例:

cp -ri /home/server/tomcat/* /home/server/test/

cp: target `/home/server/test/’ is not a directory
需要先创建目标文件夹
mkdir /home/server/test

————————————–
copy命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大。
语法: cp [选项] 源文件或目录 目标文件或目录
说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。
该命令的各选项含义如下:
– a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
– d 拷贝时保留链接。
– f 删除已经存在的目标文件而不提示。
– i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
– p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
– r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
– l 不作拷贝,只是链接文件。

需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名已存在,用cp命令拷贝文件后,这个文件就会被新源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。
例1
复制指定目录下的全部文件到另一个目录中
文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。
假设复制源目录 为 dir1 ,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了
如果dir2目录不存在,则可以直接使用
cp -r dir1 dir2
即可。
如果dir2目录已存在,则需要使用
cp -r dir1/. dir2
如果这时使用cp -r dir1 dir2,则也会将dir1目录复制到dir2中,明显不符合要求。
ps:dir1、dir2改成对应的目录路径即可。
例2
复制指定文件到指定文件夹
首先建立一个用于测试的目录,用’tree’命令查看
可见,目录中主要包含用于测试的*.txt文件和用于充当炮灰的*。tes文件
目标是保持当前的目录结构,只把txt文件复制出来

方法一:当不需要的文件类型较为单一时,可以通过完全复制然后删除指定类型的文件完成
Step1 使用命令 cp -r test/ test2 将测试目录test下所有内容完全复制到test2

Step2 组合使用find及xargs,将*.tes文件删除
xargs是给命令传递参数的一个过滤器,可以将前一个命令产生的输出作为后一个命令的参数
命令find test2/ -name ‘*.tes’ |xargs rm -rf, 即将find产生的输出(test2目录下的所有tes文件),作为rm的参数,从而完全删除
适用场景举例:把项目文件备份,要去除其中的.svn文件,可以采用这种方式

方法二:需要的文件为单一类型,带目录结构复制
这种情况下可以使用tar命令将指定类型的文件打包,然后解包,同样需要组合使用find和xargs

Step1 建立目录test3
mkdir test3

Step2 将指定类型文件带目录结构打包
find test/ -name ‘*.txt’ |xargs tar czf test3.tgz

Step3 解包到目录test3
tar zxvf test3.tgz -C test3

适用场景:较为普遍,例如可以复制某个Web项目的所有html/jsp/php文件;或复制其他项目中特定类型的源文件

一、方法
列表:frp.txt
目录: /home/dir

在文件前加入cp
sed “s/^/cp /g” frp.txt >frp2.txt
在文件后加入 /home/dir
sed ‘s/$/& \/home\/dir/g’ frp2.txt> frp3.txt

以上全并成一个:
sed ‘/./{s/^/cp /;s/$/& \/home\/dir/}’ frp.txt > frp4.txt

二、方法
cp $(cat frp.txt) /home/dir
OR
cp `cat frp.txt` /home/dir

find / -name ‘frp*’ |xargs tar czf frp-dir.tgz

cp –parent $(cat list.txt) .

linux中scp命令使用技巧详解(传输速度)

linux中scp命令使用技巧详解(传输速度)

解,希望此方法对大家会帮助。

scp 命令

scp 可以在 2个 linux 主机间复制文件;

命令基本格式:
scp [可选参数] file_source file_target

======
从 本地 复制到 远程
======
* 复制文件:
* 命令格式:
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

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例子:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3

* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例子:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

最简单的应用如下 :

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

加速scp传输速度

结论
声明:这里给出的测试数据不具有一般性,仅供参考。测试与数据本身特性有很大关系,本文使用InnoDB的redo log作为测试数据。

* 改变ssh加密算法,可以让速度更快;通常,越弱的加密算法,速度越快

* 通常压缩会降低scp速度,但这与数据类型有很大关系,对压缩率非常高的数据启用压缩,可以加速

* 压缩级别对传输效率影响很小

* 用于完整性校验的不同MAC( message authentication code)算法,对性能约有10%-20%的影响。

所以,简单尝试如下,让你的SCP速度double一下:

scp -r -c arcfour128 …
scp -r -c aes192-cbc …
scp -r -c arcfour128 -o “MACs umac-64@openssh.com” … 注:启用压缩使用参数: -o “Compression yes”

2. 测试数据:加密算法和压缩的影响
这里对比了12种ssh中实现的加密算法和是否使用压缩的传输效率,测试文件使用的是InnoDB的1GB*4的日志文件(注意:不同类型的文件测试结果会很不同),这里纵坐标单位为MB/s,数据分为压缩传输和不压缩传输两组:

screen-scp-compare-cipher-compression

原始数据:scp_speed.txt

可以看到,不同加密算法传输速度相差很大;使用了压缩之后,速度下降很多,也看到不同加密算法加密后区别并不大。

3. 关于是否启用压缩
* 压缩只有在网络传输速度非常慢,以致于压缩后节省的传输时间大于压缩本身的时间,这时才有效果,所以是否启用压缩,需要实际测试

* 压缩比很低的数据,不要再启用压缩(例如已经压缩过的数据、视频等)

* 通常建议,传输前先压缩,而不是使用ssh的压缩;建议使用pigz/lbizp2等并行压缩工具

* 数据中大量重复、空洞,这类适合压缩的数据,可以尝试压缩选项,例如如下是一组,大量”空洞”数据的测试:

chart_1

看到,压缩大大提高了传输效率

4. “压缩级别”对传输速度影响不大
最后一组对比是,将压缩级别从1改到9,对比传输速度,纵坐标单位MB/s,对12种加密算法分别使用了测试9个压缩级别,数据如下:

screen-scp-compare-compression-level

大图链接 原始数据:scp-compression-level.txt

可以看到,压缩级别对传输影响较小。ssh使用的默认压缩级别是6。

5. 测试数据:完整性校验算法MACs选择
通过选项Macs可以设置对应的哈希算法,man ssh_config可以看到支持哪些哈希算法。这里对了比了12中加密算法下使用不用的完整性校验算法的性能情况:

screen-scp-compare-macs-all

看到,绝大数情况下”umac-64@openssh.com”(关于此哈希)性能都更好,所以建议尝试使用此哈希算法做验证,看看你的场景下速度是否与提升。也可以看到,默认的hmac-md5哈希在默认的加密aes128-ctr下表现比较好;

scp命令详解(全)

 更新时间:2015年08月11日 11:28:56   作者:wtx
这篇文章主要介绍了scp命令,scp如何做远程拷贝,下面小编帮助大家解决有关scp命令相关知识,需要的朋友可以参考下

svn 删除所有的 .svn文件

复制代码代码如下:
find . -name .svn -type d -exec rm -fr {} \;

linux之cp/scp命令+scp命令详解

名称:cp

使用权限:所有使用者

使用方式:

1
2
3
cp [options] source dest
cp [options] source... directory

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

把计

-a 尽可能将档案状态、权限等资料都照原状予以复制。

-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。

-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。

范例:

将档案 aaa 复制(已存在),并命名为 bbb :

cp aaa bbb

将所有的C语言程式拷贝至 Finished 子目录中 :

cp *.c Finished

命令:scp

不同的Linux之间copy文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。

第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。

第三种就是利用scp命令来进行文件复制。

scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了。

如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。

linux之cp/scp命令+scp命令详解(转) – linmaogan – 独木★不成林scp root@/full.tar.gz 172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz

linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录;

==================
scp 命令
==================
scp 可以在 2个 linux 主机间复制文件;

命令基本格式:
scp [可选参数] file_source file_target

======
从 本地 复制到 远程
======
* 复制文件:
* 命令格式:
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

第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 例子:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3

* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1个指定了用户名,命令执行后需要再输入密码;

第2个没有指定用户名,命令执行后需要输入用户名和密码;

* 例子:

scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

例如:

scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

最简单的应用如下 :

scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

可能有用的几个参数 :

-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

-C 使能压缩选项 .

-P 选择端口 . 注意 -p 已经被 rcp 使用 .

-4 强行使用 IPV4 地址 .

-6 强行使用 IPV6 地址 .

注意两点:

1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:

#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator

2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

scp远程拷贝

SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件,但是还是提供了一个”scp”命令。假定你想把本地计算机当前目录下的一个名为”dumb”的文件拷贝到远程服务器www.foobar.com上你的家目录下。而且你在远程服务器上的帐号名为”bilbo”。可以用这个命令:
scp dumb bilbo@www.foobar.com:.
把文件拷贝回来用这个命令:
scp bilbo@www.foobar.com:dumb .

scp命令是SSH中最方便有用的命令了,试想,在两台服务器之间直接传送文件,仅仅用scp一个命令就完全解决了。

你可以在一台服务器上以root身份运行#scp servername:/home/ftp/pub/file1 . 这样就把另一台服务器上的文件/home/ftp/pub/file1直接传到本机器的当前目录下,当然你也可以用#scp /tmp/file2 servername:/boot 把本机上的文件
/tmp/file2送到另一台机器的/boot目录下。

而且整个传送过程仍然是用SSH加密的。

1:拷贝本地文件到远程机器上:

scp 本地文件名 账号@192.168.80.80:远程机器目录

例:scp /home/test root@192.168.80.80:/home/testdir/

2:拷贝远程机器上的文件到本地:

scp 账号@192.168.80.80:文件全路径 本地目录

例:scp root@192.168.80.80:/home/testdir/test /home/testdir/

scp root@10.5.0.1:/root/firewall.tar.gz ./
scp /home/cheney/full.tar.gz root@10.5.0.1:/home/root/
scp -r root@10.5.0.1:/mail/* ./ (拷贝整个目录下的所有文件)

需要输入相应的用户名和密码

scp是有Security的文件拷贝,基于ssh登录。

不同的Linux之间拷贝文件常用有3种方法:

第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的拷贝。
第二种方法就是采用samba服务,类似Windows文件复制的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件拷贝。

以上内容是本文关于scp命令详解全部内容,希望对大家有所帮助。

解决debian 10 中文安装后出现乱码的问题

由于安装debian选择语言时选择了简体中文安装,但内核没有中文字库,导致某些字符显示为乱码(菱形,方块)。

解决办法:运行下面两行的命令

apt-get install locales
dpkg-reconfigure locales

进入语言设置界面:

其中,空格键为选取/取消,Tab键为切换到确认选择。

通过方向键与空格键选择en_us.UF-8,其余全部取消,然后按Tab选择<Aceptar>,回车进入下一个界面:

选择es_US.UTF-8,回车。然后用locale命令查看一下情况:

这样乱码的错误就解决了。

实例操作:

aptitude install locales
dpkg-reconfigure locales

界面下使用方向键左右翻页,空格键选中(选中en_us.utf8、zh_CN GB2312、zh_CN.GBK GBK、zh_CN.UTF-8 UTF-8)
使用tab键切换ok 和 cancel,回车确认
然后第二个界面设置本地语言为zh_CN.UTF-8

1
export LANG=zh_CN.UTF-8

终端记得相关选项调整为utf 8

DEBIAN下中文显示

一.首先检查LOCALE情况

说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在。

1.挂载ISO文件包,前8个ISO包就可以(这里不在讲述)。

2.启动终端

#apt-get install locales

3.重新配置LOCALE

#dpkg-reconfigure locales

在所有的语言包选择en_US.ISO-8859-1和zh_CN.GBK。其他en_US和zh_CN打头的也选上。然后选择zh_CN.GBK为默认的LOCALE,则系统为中文界面(这里也可以选en_US.ISO,使系统为英文界面)。

3.运行LOCALE命令检查当前的LOCALE环境

#locale

正确配置下会显式

LANG =zh_CN.GBK

……………………以下显示略过

 

 

============================================================================

Debian 6解决中文乱码

 

解决办法:打开终端,切换至root帐号。

执行以下命令:

apt-get install ttf-wqy-zenhei(安装字体)
apt-get install ibus ibus-gtk ibus-pinyin(安装输入法)

————————-

设置本地化 Locale
如果我们在安装 Debian
系统时,语言选择了英语呢?进入系统后看到全是英文,是不是有点郁闷。那么我们怎样设置成简体中文呢?
#如果你安装系统时选择的就是简体中文,可以跳过这段,只安装中文字体就行了。当然你也可以修改成其他的语言。

打开终端,执行命令:
dpkg-reconfigure locales

把 带 zh_CN 字样的全部选上,然后选择 OK 确定,在弹出的对话框中,选择系统的 locale ,选择zh_CN.UTF-8。

安装时选择的是英语,会缺少中文字体,用以下命令安装字体:
apt-get install xfonts-intl-chinese wqy*

下次重起机器,在GNOME登录介面下方的Language,登录语言选择:汉语(中国)

设置字体
对着桌面猛击右键 ===> 更改桌面背景 ===> 字体
#
选择自己喜欢的字体,比如:文泉驿点阵正黑或文泉驿微米黑

输入法
选择喜欢的输入法,比如: ibus scim
# 注:fcitx 输入法在debian unstable
软件源里才有,如果需要的话,只能自行下载安装了。或者添加 Debian unstable 的软件源。
apt-get install
ibus-pinyin ibus-table-wubi #安装IBUS五笔和拼音

设置输入法
系统 ===> 首选项 ===> IBus 设置
#设置快捷键和添加输入法到列表。

浏览器
Iceweasel浏览器简体中文组件 # Iceweasel是Debian中Mozilla
Firefox浏览器的一个再发布版
#英语很菜,所以浏览器菜单也要是中文的
apt-get install
iceweasel-l10n-zh-cn

运行浏览器,然后点击
浏览器菜单 ===> 编辑 ===> 首选项 ===> 内容
# 设置浏览器字体

谷歌开源浏览器Chromium
# 不喜欢用这个的,也可以安装 Chrome 浏览器
apt-get install
chromium-browser chromium-browser-l10n

Flash插件
执行命令:
apt-get install flashplugin-nonfree
#嫌手动安装官方Flash插件麻烦的,直接安装这个吧

手动安装官方Flash插件
# 注意如果你已经用上面的命令安装了flashplugin-nonfree,最好先卸载掉。
#
可能是为了避免冲突吧,不然浏览器不知道用哪个插件,我不清楚原因。

源里的flash插件和官方的正式版的flash插件,在我这里播放在线视频时,全屏会卡。我安装的是测试版的flash插件

先下载两个软件包,不然装好了Flash插件也用不了。装源里的 flashplugin-nonfree 会自动安装这两个文件。
apt-get
install ca-certificates libcurl3-gnutls

到下面网址下载 Flash Player 的压缩包
http://labs.adobe.com/downloads/flashplayer10.html

Download plug-in for 32-bit Linux (TAR.GZ, 4.7 MB) ← 下载这个

然后解压下载下来的压缩文件,解压出来
libflashplayer.so

切换到普通用户创建存放 Flash 插件的目录
mkdir -pv ~/.mozilla/plugins

进入存放 libflashplayer.so 的目录
cp -v libflashplayer.so ~/.mozilla/plugins

Chromium安装Flash插件
su
cp -v libflashplayer.so
/usr/lib/chromium-browser/plugins

影音播放器
#Mplayer和播放前端SMplayer
apt-get install mplayer smplayer

设置QT程序字体
# 在Debian GNOME桌面中QT程序的字体不清析,所以要设置一下

先备份 /etc/fonts/conf.d/49-sansserif.conf
cp -v
/etc/fonts/conf.d/49-sansserif.conf{,.backup}

修改 /etc/fonts/conf.d/49-sansserif.conf

把文件倒数第4行中:
sans-serif
↓↓
文泉驿微米黑

# 把sans-serif替换成文泉驿微米黑,前提你得先安装文泉驿字库

PDF阅读器
Foxit # 如果觉得系统自带的不好用,就下载这个吧
http://www.foxitsoftware.com/downloads/index.php
#找到
Foxit Reader 1.1 Build 20090810 for Desktop Linux(bz2),下载后解压运行目录下的foxit就可以用。

CHM阅读器
如果有Windows下的CHM文档资料要看,那么就安装chmsee吧
apt-get install
chmsee

星际译王
# 星际译王是 GNOME 中的国际化的词典软件
# 本人英文单词不会几个的,所以是必配的词典软件
apt-get
install stardict

#词典下载,下载地址如下,下载tarball包,解压后,复制到 /usr/share/stardict/dict/
目录下,
#最好在这个目录下新建文件夹来分类存放词典。
http://stardict.sourceforge.net/Dictionaries_zh_CN.php

截图工具shutter
#默认情况下,Debian没有安装gnome-screenshot,可以下载功能更强大的shutter
apt-get
install shutter
apt-get install libgoo-canvas-perl # 编辑功能插件

解压缩软件
apt-get install unrar
apt-get install unzip
apt-get install
p7zip-full

安装基本编译环境
# 有时可能自己想编译软件
apt-get install gcc
apt-get install
linux-headers-`uname -r`
apt-get install make
apt-get install automake

虚拟机VirtualBox-OSE
# 使用 Linux 或多或少都要用虚拟机吧,如果不喜欢OSE版,可以到官方去下载。
apt-get
install virtualbox-ose

VirtualBox 官方主页:
http://www.virtualbox.org/

FTP上传下载工具
# gFTP是X Window下的一个用Gtk开发的多线程FTP客户端工具
apt-get install
gftp

LINUX下的“电驴”
# aMule 是基于eMule的“全平台”P2P客户端
apt-get install amule

BT下载工具
Transmission是一种BitTorrent客户端
apt-get install
transmission

Debian 9 忘记 root 密码怎么办

介绍

有客户有时候会忘记 debian 的 root 密码,结果怎么也登不进去。

那么这次来教教大家如何重设 debian 的 root 密码吧。

环境

Debian 9.11

步骤

重启系统,在开机蓝屏那个界面按 E 进去编辑 grub

进来以后界面如下所示:

我们找到 linux 开头的那一行,把 ro 替换为 rw,并在最后添加 init=/bin/sh

修改后如下所示:

按 ctrl + x 保存,进来后看到 # 说明已经是 root 权限了。

我们输入 passwd root,重复输入两次密码后密码就修改成功了。

然后硬重启系统,密码就改过来了!

以上行不通再试:

进入shell后,根分区的挂载模式默认是只读,我们要将其改为可写,否则不能更改root密码:
mount -no remount,rw /
passwd root
sync
mount -no remount,ro /
reboot
这样即可成功更改debian的root用户的密码。

以下清空密码操作:

Step3:按 “Ctrl+x ” 启动系统,进入 root@(none): 命令行模式
Step4:使用命令使系统可读写   # mount -no remount, rw /
Step5:此时 passwd、vi、vim 等都提示Command not found。
使用Debian自带默认文本编辑器 nano 编辑 /etc/shadow 的第一行( root 行),注意之前先备份shadow
# cd /etc
# cp shadow shadow.bak
# nano shadow
修改 shadow 的第一行为:   root::15198:0:99999:7:::    (即清空root密码)
继而 Ctrl+x 选择 yes 保存
Step6:重新使系统变为只读  # mount -no remount, ro /
Step7:重启用一般用户登录   # su 直接进入root用户(不需要密码)
Step8:最后使用 # passwd 重新设置root密码即可

windows 远程桌面连接 kali linux

 2017-07-09 17:06:30  6369  收藏 4

这篇文章成功解决了windows下远程连接 kali 的一些问题,免去了网上一些教程中提到的卸载桌面再安装桌面的步骤。
本篇教程的系统环境为:
windows 7 专业版
kali linux 2016-2


Step 1:安装xrdp

# apt-get install xrdp
  • 1

Step 2:安装vnc4server

# apt-get install vnc4server
  • 1

Step 3:编辑xrdp配置文件

# nano /etc/xrdp/xrdp.ini
  • 1

为了防止出现诸如以下错误,需对该配置文件进行修改。
这里写图片描述

将原来max_bpp=32改成max_bpp=16,以防止远程连接时闪退。
这里写图片描述

Step 4:开启xrdp服务

# service xrdp start
# service xrdp-sesman start
  • 1
  • 2

Step 5:开启VNC服务

# cnvserver
  • 1

输入连接密码
这里写图片描述

Step 6:在windows下运行mstsc
这里写图片描述

这里写图片描述

因为远程服务器将颜色调成了32位,所以我们需要在本地上调整颜色深度。
这里写图片描述

这里选择Xvnc,然后输入用户、密码。
这里写图片描述

可以看到成功连接到kali。
这里写图片描述

Kali Linux 下java环境(jdk)的安装

Kali Linux 下java环境(jdk)的安装_OverJerry

下载jdk

先到jdk官方下载地址下载 .gz 格式的安装包,下载前要接受协议
在这里插入图片描述
进入下载目录,对文件进行解压

cd ~/下载
tar -xzvf jdk-11.0.1_linux-x64_bin.tar.gz
#记住11.0.1,在后面很重要
  • 1
  • 2
  • 3

在这里插入图片描述
移动解压的文件

mv jdk-11.0.1 /opt
//jdk-后的东西由前面记着的版本来定
cd /opt/jdk-11.0.1
  • 1
  • 2
  • 3

设置环境变量

gedit ~/.bashrc
  • 1

在底部添加

#install JAVA JDK
export JAVA_HOME=/opt/jdk-11.0.1
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
保存后执行使设置生效

source ~/.bashrc
  • 1

安装

执行

update-alternatives --install /usr/bin/java java /opt/jdk-11.0.1/bin/java 1
update-alternatives --install /usr/bin/javac javac /opt/jdk-11.0.1/bin/javac 1
update-alternatives --set java /opt/jdk-11.0.1/bin/java
update-alternatives --set javac /opt/jdk-11.0.1/bin/javac
  • 1
  • 2
  • 3
  • 4

测试

输入java在这里插入图片描述
成功!
end~

Linux下查找JDK默认安装路径

 2020-02-06 11:23:41  1388  收藏 2

一、查找效果图

 

 

二、查找步骤

1、首先确认是否已按照JDK
java -version

[root@iZ2ze3zda3caeyx6pn7c5zZ base-eureka]# java -version
openjdk version “1.8.0_212”
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

2、然后查找java命令的位置

which java

[root@iZ2ze3zda3caeyx6pn7c5zZ base-eureka]# which java
/usr/bin/java

3、查找java命令的位置所对于的软链地址

ls -l /usr/bin/java

[root@iZ2ze3zda3caeyx6pn7c5zZ base-eureka]# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Jun 18 15:45 /usr/bin/java -> /etc/alternatives/java

4.最后通过软链地址查找JDK的安装目录

ls -l /etc/alternatives/java

[root@iZ2ze3zda3caeyx6pn7c5zZ base-eureka]# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Jun 18 15:45 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/bin/java

Linux下nl命令的用法详解

   nl命令和cat命令很像,不过nl命令会打上行号,属于比较不常用的命令,下面随小编一起来了解下这个鲜为人知的nl命令吧。

 Linux下nl命令的用法详解

nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

  1.命令格式:

nl [选项]。。。 [文件]。。。

  2.命令参数:

-b :指定行号指定的方式,主要有两种:

-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);

-b t :如果有空行,空的那一行不要列出行号(默认值);

-n :列出行号表示的方法,主要有三种:

-n ln :行号在萤幕的最左方显示;

-n rn :行号在自己栏位的最右方显示,且不加 0 ;

-n rz :行号在自己栏位的最右方显示,且加 0 ;

-w :行号栏位的占用的位数。

-p 在逻辑定界符处不重新开始计算。

  3.命令功能:

nl 命令读取 File 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。 在输出中,nl 命令根据您在命令行中指定的标志来计算左边的行。 输入文本必须写在逻辑页中。每个逻辑页有头、主体和页脚节(可以有空节)。 除非使用 -p 标志,nl 命令在每个逻辑页开始的地方重新设置行号。 可以单独为头、主体和页脚节设置行计算标志(例如,头和页脚行可以被计算然而文本行不能)。

  4.使用实例:

  实例一:用 nl 列出 log2012.log 的内容

命令:

nl log2012.log

输出:

[root@localhost test]# nl log2012.log

1 2012-01

2 2012-02

3 ======[root@localhost test]#

说明:

文件中的空白行,nl 不会加上行号

  实例二:用 nl 列出 log2012.log 的内容,空本行也加上行号

命令:

nl -b a log2012.log

输出:

[root@localhost test]# nl -b a log2012.log

1 2012-01

2 2012-02

3

4

5 ======[root@localhost test]#

  实例3:让行号前面自动补上0,统一输出格式

命令:

输出:

[root@localhost test]# nl -b a -n rz log2014.log

000001 2014-01

000002 2014-02

000003 2014-03

000004 2014-04

000005 2014-05

000006 2014-06

000007 2014-07

000008 2014-08

000009 2014-09

000010 2014-10

000011 2014-11

000012 2014-12

000013 =======

[root@localhost test]# nl -b a -n rz -w 3 log2014.log

001 2014-01

002 2014-02

003 2014-03

004 2014-04

005 2014-05

006 2014-06

007 2014-07

008 2014-08

009 2014-09

010 2014-10

011 2014-11

012 2014-12

013 =======

说明:

nl -b a -n rz 命令行号默认为六位,要调整位数可以加上参数 -w 3 调整为3位。

Linux 按文件列表拷贝文件到指定目录并保持原有的目录结构

需求说明

当需要拷贝多个文件并且需要保留源文件的目录树结构时, 如果源目录的文件比较纯净,没有其他相关的文件或目录时, 我们只需要执行

~$ #cp -r <源目录> <新目录>
~$ cp -r workspace/project workspace/Cpp
  • 1
  • 2

但是, 如果我们需要拷贝的文件所在的目录里包含了其他项目或程序的文件或目录, 那我们就不能这么干

比如,

  • 在 /etc或者/usr/local/bin下面有很多我们自己项目的相关配置文件和程序文件, 并且我们知道这些文件路径
  • 包含指定字符串的文件名, 比如 *.log
  • 我们自己制作或者我们比较感兴趣的其他厂商的 *.deb程序包(Ubuntu使用软件包)

针对自己的项目配置文件

我们可以新建一个文本文档, 里面把我们所关心的文件列出来

list.txt

/etc/app/app.cnf
/etc/app/conf.d/a.cnf
/etc/app/conf.d/b.cnf
/etc/app/conf.d/c.cnf
/etc/app/conf.d/d.cnf
  • 1
  • 2
  • 3
  • 4
  • 5

这样我们就可以通过使用 cat list.txt 获取到我们的文件路径列表

此时我们只需要使用

~$ cp --parent $(cat list.txt) .
  • 1

就可以将列表里面的所有文件按照原有的目录树结构拷贝到当前目录(或者使用其他目录)

针对包含指定字符串的文件名我们可以用 find 命令获取到文件列表

~$ find /opt/ros/ -name *.a
/opt/ros/kinetic/lib/liboctomath.a
/opt/ros/kinetic/lib/libcsm-static.a
/opt/ros/kinetic/lib/liboptions.a
/opt/ros/kinetic/lib/libegsl.a
/opt/ros/kinetic/lib/liboctomap.a
~$
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后, 嘿嘿

~$ cp --parent $(find /opt/ros -name *.a) .
  • 1

这不就都按照源目录结构拷贝到当前目录了嘛

针对.deb包的文件列表, 我们也有命令可以获取到路径列表

~$ dpkg -L mysql-server-5.7 
/etc
/etc/mysql
/etc/mysql/mysql.conf.d
/etc/mysql/mysql.conf.d/mysqld_safe_syslog.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
/etc/mysql/debian-start
/etc/mysql/mysql.cnf
/etc/apparmor.d
/etc/apparmor.d/usr.sbin.mysqld
/etc/logrotate.d
/etc/logrotate.d/mysql-server
/etc/init.d
/etc/init.d/mysql
/etc/logcheck
/etc/logcheck/ignore.d.server
/etc/logcheck/ignore.d.server/mysql-server-5_7
/etc/logcheck/ignore.d.workstation
/etc/logcheck/ignore.d.workstation/mysql-server-5_7
/etc/logcheck/ignore.d.paranoid
/etc/logcheck/ignore.d.paranoid/mysql-server-5_7
/etc/init
/etc/init/mysql.conf
~$ 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

这个时候我们就可以… -_- 嘿嘿嘿 , 你懂的

Linux curl与wget 命令的区别和联系

       虽然它们有一些相似的特征,但它们并不是完全一样。这两个程序适用与不同的场合,在特定场合下,都拥有各自的特性。

curl与wget相似之处:

wget 和 cURL 都可以下载内容。它们的核心就是这么设计的。它们都可以向互联网发送请求并返回请求项。这可以是文件、图片或者是其他诸如网站的原始 HTML 之类。

这两个程序都可以进行 HTTP POST 请求。这意味着它们都可以向网站发送数据,比如说填充表单什么的。

由于这两者都是命令行工具,它们都被设计成可脚本化。wget 和 cURL 都可以写进你的 Bash 脚本 ,自动与新内容交互,下载所需内容。

curl的优势:

 

cURL是一个多功能工具。当然,它可以下载网络内容,但同时它也能做更多别的事情。

cURL 技术支持库是:libcurl。这就意味着你可以基于 cURL 编写整个程序,允许你基于 libcurl 库中编写图形环境的下载程序,访问它所有的功能。

cURL 宽泛的网络协议支持可能是其最大的卖点。cURL 支持访问 HTTP 和 HTTPS 协议,能够处理 FTP 传输。它支持 LDAP 协议,甚至支持 Samba 分享。实际上,你还可以用 cURL 收发邮件。

cURL 也有一些简洁的安全特性。cURL 支持安装许多 SSL/TLS 库,也支持通过网络代理访问,包括 SOCKS。这意味着,你可以越过 Tor 来使用cURL。

cURL 同样支持让数据发送变得更容易的 gzip 压缩技术。

wget的优势:

 

wget 简单直接。这意味着你能享受它超凡的下载速度。wget 是一个独立的程序,无需额外的资源库,更不会做其范畴之外的事情。

wget 是专业的直接下载程序,支持递归下载。同时,它也允许你下载网页中或是 FTP 目录中的任何内容。

wget 拥有智能的默认设置。它规定了很多在常规浏览器里的事物处理方式,比如 cookies 和重定向,这都不需要额外的配置。可以说,wget 简直就是无需说明,开罐即食!

总结:

那你应该使用 cURL 还是使用 wget?这个比较得看实际用途。如果你想快速下载并且没有担心参数标识的需求,那你应该使用轻便有效的 wget。如果你想做一些更复杂的使用,直觉告诉你,你应该选择 cRUL。

cURL 支持你做很多事情。你可以把 cURL 想象成一个精简的命令行网页浏览器。它支持几乎你能想到的所有协议,可以交互访问几乎所有在线内容。唯一和浏览器不同的是,cURL 不会渲染接收到的相应信息。

两者对比Curl更具有编程性,更适合开发用,而Wget的下载功能更强。近年来,致力于用Wget2替换wget。具有相似功能集的其他两个功能强大的工具还包括aria2和axel(已经好久未更新项目),更详细的功能对比,可参考Curl官方的功能对比。

非要说区别的话,curl由于可自定义各种请求参数所以在模拟web请求方面更擅长;wget由于支持ftp和Recursive所以在下载文件方面更擅长。类比的话curl是浏览器,而wget是迅雷9。

 

1. 下载文件

curl -O http://man.linuxde.net/text.iso                    #O大写,不用O只是打印内容不会下载
wget http://www.linuxde.net/text.iso                       #不用参数,直接下载文件

 

2. 下载文件并重命名

curl -o rename.iso http://man.linuxde.net/text.iso         #o小写
wget -O rename.zip http://www.linuxde.net/text.iso         #O大写

 

3. 断点续传

curl -O -C - http://man.linuxde.net/text.iso               #O大写,C大写
wget -c http://www.linuxde.net/text.iso                    #c小写

 

4. 限速下载

curl --limit-rate 50k -O http://man.linuxde.net/text.iso
wget --limit-rate=50k http://www.linuxde.net/text.iso

 

5. 显示响应头部信息

curl -I http://man.linuxde.net/text.iso
wget --server-response http://www.linuxde.net/test.iso

 

6. 同时打印请求头和响应头

curl -v http://man.linuxde.net/text.iso
curl http://man.linuxde.net/text.iso --trace-ascii /dev/stdout
wget -d http://www.linuxde.net/test.iso

 

7. wget利器–打包下载网站

wget --mirror -p --convert-links -P /var/www/html http://man.linuxde.net/

————————————————————分界线——————————————————

wget是个专职的下载利器,简单,专一,极致;而curl可以下载,但是长项不在于下载,而在于模拟提交web数据,POST/GET请求,调试网页,等等。

在下载上,也各有所长,wget可以递归,支持断点;而curl支持URL中加入变量,因此可以批量下载。

curl(文件传输工具)

常用参数如下:

-c,–cookie-jar:将cookie写入到文件

-b,–cookie:从文件中读取cookie

-C,–continue-at:断点续传

-d,–data:http post方式传送数据

-D,–dump-header:把header信息写入到文件

-F,–from:模拟http表达提交数据

-s,–slient:减少输出信息

-o,–output:将信息输出到文件

-O,–remote-name:按照服务器上的文件名,存在本地

–l,–head:仅返回头部信息

-u,–user[user:pass]:设置http认证用户和密码

-T,–upload-file:上传文件

-e,–referer:指定引用地址

-x,–proxy:指定代理服务器地址和端口

-w,–write-out:输出指定格式内容

–retry:重试次数

–connect-timeout:指定尝试连接的最大时间/s

wget(文件下载工具)

常用参数如下:

1、 启动参数

-V,–version:显示版本号

-h,–help:查看帮助

-b,–background:启动后转入后台执行

2、 日志记录和输入文件参数

-o,–output-file=file:把记录写到file文件中

-a,–append-output=file:把记录追加到file文件中

-i,–input-file=file:从file读取url来下载

3、 下载参数

-bind-address=address:指定本地使用地址

-t,-tries=number:设置最大尝试连接次数

-c,-continue:接着下载没有下载完的文件

-O,-output-document=file:将下载内容写入到file文件中

-spider:不下载文件

-T,-timeout=sec:设置响应超时时间

-w,-wait=sec:两次尝试之间间隔时间

–limit-rate=rate:限制下载速率

-progress=type:设置进度条

4、目录参数

-P,-directory-prefix=prefix:将文件保存到指定目录

5、 HTTP参数

-http-user=user:设置http用户名

-http-passwd=pass:设置http密码

-U,–user-agent=agent:伪装代理

-no-http-keep-alive:关闭http活动链接,变成永久链接

-cookies=off:不使用cookies

-load-cookies=file:在开始会话前从file文件加载cookies

-save-cookies=file:在会话结束将cookies保存到file文件

6、 FTP参数

-passive-ftp:默认值,使用被动模式

-active-ftp:使用主动模式

7、 递归下载排除参数

-A,–accept=list:分号分割被下载扩展名的列表

-R,–reject=list:分号分割不被下载扩展名的列表

-D,–domains=list:分号分割被下载域的列表

–exclude-domains=list:分号分割不被下载域的列表

CURL命令
1、列出ftp服务器上的目录列表:
curl ftp://www.xxx.com/ –user name:passwd
curl ftp://www.xxx.com/ –u name:passwd #简洁写法
curl ftp://name:passwd@www.xxx.com #简洁写法2

2、只列出目录,不显示进度条
curl ftp://www.xxx.com –u name:passwd -s

3、下载一个文件:
curl ftp://www.xxx.com/size.zip –u name:passwd -o size.zip

4、上载一个文件:
curl –u name:passwd -T size.mp3 ftp://www.xxx.com/mp3/

5、从服务器上删除文件(使用curl传递ftp协议的DELE命令):
curl –u name:passwd ftp://www.xxx.com/ -X ‘DELE mp3/size.mp3’

6、另外curl不支持递归下载,不过可以用数组方式下载文件,比如我们要下载1-10.gif连续命名的文件:
curl –u name:passwd ftp://www.xxx.com/img/[1-10].gif –O #O字母大写

7、要连续下载多个文件:

————————————————
版权声明:本文为CSDN博主「panamera12」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wteruiycbqqvwt/article/details/108406168

=================实例:====================

命令:

1
wget -k -p -nH -N http://www.baidu.com

2、wget -r -p -np -k https://openwrt.proxy.ustclug.org/snapshots/packages/i386_pentium4/

-k 把已下载文件中的所有链接都转换为本地引用,不在依赖原始或在线内容

-p  下载所有必要文件,确保离线可用,包括图片和样式表

-nH 禁止把文件下载到以主机名为前缀的文件夹中。

-N 启用文件的时间戳,以匹配来源的时间戳.

-r –recursive(递归) specify recursive download.(指定递归下载)
-k –convert-links(转换链接) make links in downloaded HTML point to local files.(将下载的HTML页面中的链接转换为相对链接即本地链接)
-p –page-requisites(页面必需元素) get all images, etc. needed to display HTML page.(下载所有的图片等页面显示所需的内容)
-np –no-parent(不追溯至父级) don’t ascend to the parent directory.

这里写代码片额外参数:

-nc 断点续传
-o 生成日志文件

示例一:对方网站使用referer防盗链的情况,需要伪造来路来破解防盗链,然后下载目标文件(下面是抓取某个站2015文件夹下所有图片)

1
wget -E –referer http://example.com/ -r -m -k http://img.example.com/2015/

参数:
-r 递归:对于HTTP主机,wget首先下载URL指定的文件,然后(如果该文件是一个HTML文档的话)递归下载该文件所引用(超级连接)的所有文件(递归深度由参数-l指定);对FTP主机,该参数意味着要下载URL指定的目录中的所有文件,递归方法与HTTP主机类似
-m 镜像:相当于同时使用-r和-N参数
-k 连接转换为本地相对链接
-N 时间戳:该参数指定wget只下载更新的文件,也就是说,与本地目录中的对应文件的长度和最后修改日期一样的文件将不被下载
简单来说基本的用法如下,根据需求添加参数

1
wget -E –referer http://伪造来路网址/ http://目标网址/要下载的东西

防盗链做法:referer防盗链太简单,只能防君子,如何反制?采用token方式防盗链,对下载链接、图片链接加参数引用,需要改程序来支持。

示例二:无防盗链的情况

1
wget -r -p -np -k http://xxx.com/xxx/

参数:
-r 递归
-p –page-requisites(页面必需元素)
-np –no-parent(不追溯至父级)
-k 连接转换为本地相对链接

示例三:

1
wget -r -np -nd http://example.com/packages/

这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件
参数:
-np 的作用是不遍历父目录
-nd 表示不在本机重新创建目录结构

再添加排除某些文件或指定下载的文件类型的参数后是这样的

1
wget -r -np -nd –accept=iso http://example.com/centos-5/i386/

与上一条命令相似,但多加了一个 –accept=iso 选项,这指示 wget 仅下载 i386
目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可
参数:
–accept=LIST 可以接受的文件类型
–reject=LIST 拒绝接受的文件类型

示例四:直接

1
wget -m -k (-H) http://www.example.com/

该命令可用来镜像一个网站,wget 将对链接进行转换。
如果网站中的图像是放在另外的站点,那么可以使用
参数:
-m 镜像:相当于同时使用-r和-N参数
-k 连接转换为本地相对链接
-H 可以目标站主机以外的主机内容,图片单独存放在一个主机上的情况

1、使用wget下载单个文件

以下的例子是从网络下载一个文件并保存在当前目录

wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

2、使用wget -O下载并以不同的文件名保存

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

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

wget http://www.centos.bz/download?id=1

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

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

wget -O wordpress.zip http://www.centos.bz/download.php?id=1080

3、使用wget –limit -rate限速下载

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

wget –limit-rate=300k http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

4、使用wget -c断点续传

使用wget -c重新启动下载中断的文件:

wget -c http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

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

5、使用wget -b后台下载

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

wget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip

Continuing in background, pid 1840.

Output will be written to `wget-log’.

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

tail -f wget-log

6、伪装代理名称下载

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

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″ 下载链接

7、使用wget –spider测试下载链接

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

wget –spider URL

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

wget –spider URL

Spider mode enabled. Check if remote file exists.

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参数:

定时下载之前进行检查

间隔检测网站是否可用

检查网站页面的死链接

8、使用wget –tries增加重试次数

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

wget –tries=40 URL

9、使用wget -i下载多个文件

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

cat > filelist.txt

url1

url2

url3

url4

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

wget -i filelist.txt

10、使用wget –mirror镜像网站

下面的例子是下载整个网站到本地。

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

–miror:开户镜像下载

-p:下载所有为了html页面显示正常的文件

–convert-links:下载后,转换成本地的链接

-P ./LOCAL:保存所有文件和目录到本地指定目录

11、使用wget –reject过滤指定格式下载

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

wget –reject=gif url

12、使用wget -o把下载信息存入日志文件

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

wget -o download.log URL

13、使用wget -Q限制总下载文件大小

当你想要下载的文件超过5M而退出下载,你可以使用以下命令:

wget -Q5m -i filelist.txt

注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。

14、使用wget -r -A下载指定格式文件

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

下载一个网站的所有图片

下载一个网站的所有视频

下载一个网站的所有PDF文件

wget -r -A.pdf url

15、使用wget FTP下载

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

使用wget匿名ftp下载

wget ftp-url

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

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