文件查找及文件的上传和下载
一、命令所属文件查找
[root@sholdboy ~]# which ip
/usr/sbin/ip
[root@sholdboy ~]# which mysql
/usr/local/mysql/bin/mysql
[root@sholdboy ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#一些命令的路径都配置到了环境变量PATH里面
二、查找目录下的文件find
1、语法格式
find [-h][-l][-p][-D debugopts][-Olevel] [pathname] [expression]
find 如何处理符号的连接 需要查找的路径 操作语句(参数(options) 限定的条件(tests) 执行的动作(actions))
2、pathname模块
命令查找的目录路径,“.”代表当前目录。“/”表示当前路径
3、options参数模块
-maxdepth levels 查找的最大目录级数,levels为自然数
4、tests限定条件模块
-type查找某一类型的模块
b #块设备文件
c #字符设备文件
d #目录
p #管道文件
i #符号链接文件
f #普通文件
s #socket文件
D #door
5、actions执行动作模块
-print #找到后输出
-ls #找到后列出来
-delete #找到后删除
-exec #对配置的文件直接执行改参数所给出的shell命令
-ok #和exec作用相同,但执行命令之前都会让用户确定是否先执行
-! #取反
-a #取交集and
-o #取并集or
6、分类
1.按照文件名查找
find /etc (路径) -name "文件名" #找具体的文件
find /etc (路径) -iname "文件名" #i 不区分大小写
find /etc (路径) -iname "文件前缀*" #* 例如:ifcfg* :查找以ifcfg开头的文件
2.按照文件大小
find /etc (路径) -size +3M #大于3m的文件
find /etc (路径) -size 3M #等于于3m的文件
find /etc (路径) -size -3M #小于3m的文件
find /etc (路径) -size +3M -ls(动作) #找到大于3m的文件并ls
3.指定查找文件深度
#-maxdepth #查找的最大目录级数find / -maxdepthfind / -maxdepth 5 -a -name "ifcfg-eth0" # -a并且,-o或者
4.按照文件属主、属组找
find /home(路径) -user www(属主) #找属主是www的文件find /home(路径) -group it(属组) #找属组是it的文件find /home(路径) -user www(属主) -group it(属组) #找属主是www且属组是it的文件find /home(路径) -user www -a -group it #同上find /home(路径) -user www -o -group it #找属主是www或属组是it的文件find /home(路径) -nouser #查找没有有效属主的文件,即该文件的属主在/etc/passwd中不存在find /home(路径) -nogroup #查找没有有效属组的文件,即该文件的属组在/etc/group中不存在find /home(路径) -nouser -o -nogroup #查找没有有效属主或属主的文件,即该文件的属组在/etc/passwd或/etc/group中不存在中不存在
5.按照文件类型查找
find /dev(路径) -type f #f 普通文件find /dev(路径) -type d #d 目录find /dev(路径) -type l #l 链接find /dev(路径) -type b #b 快设备find /dev(路径) -type c #c 字符设备find /dev(路径) -type s #s 套接字find /dev(路径) -type p #p 管道文件
6.根据Inode号查找
[root@xiaowu ~]# find / -inum 1811/sys/devices/LNXSYSTM:00/device:00/PNP0A03:00/device:02/PNP0C0F:01/power/runtime_suspended_time
7、Xargs
1.介绍
xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:
find /sbin -perm +700 |ls -l #这个命令是错误的find /sbin -perm +700 |xargs ls -l #这样才是正确的
2.命令格式
somecommand |xargs -item command
3.参数选项
-a file 从文件中读入作为 stdin-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。-p 当每次执行一个argument的时候询问一次用户。-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。-t 表示先打印命令,然后再执行。-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。-L num 从标准输入一次读取 num 行送给 command 命令。-l 同 -L。-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。-x exit的意思,主要是配合-s使用。。-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。
4.实例
1)将文件多行转化为单行输出
[root@xiaowu ~]# cat test.txta b c d e f gh i j k l m no p qr s tu v w x y z[root@xiaowu ~]# cat test.txt |xargsa b c d e f g h i j k l m n o p q r s t u v w x y z
2)指定每行有多少数据(指定有多少列)
[root@xiaowu ~]# cat test.txt |xargs -n3a b cd e fg h ij k lm n op q rs t uv w xy z[root@xiaowu ~]# cat test.txt |xargs -n4a b c de f g hi j k lm n o pq r s tu v w xy z
3)-d:指定处理间隔符
[root@xiaowu ~]# echo "xiaowuxiaowuxiaowu"|xargs -dx iaowu iaowu iaowu[root@xiaowu ~]# echo "xiaowuxiaowuxiaowu"|xargs -dx -n2 iaowuiaowu iaowu
4)复制txt文件到/tmp目录下
[root@xiaowu ~]# ls *.txt|xargs -n1 -I {} cp {} /tmp[root@xiaowu ~]# ll /tmptotal 20-rw-r--r-- 1 root root 0 Aug 17 15:49 1.txt-rw-r--r-- 1 root root 0 Aug 17 15:49 2.txt-rw-r--r-- 1 root root 0 Aug 17 15:49 3.txt-rw-r--r-- 1 root root 52 Aug 17 15:49 test.txt
5.find结合xargs使用
1)根据条件找到并删除
[root@xiaowu ~]# lltotal 4-rw-------. 1 root root 1703 Mar 25 08:58 anaconda-ks.cfgdrwxr-xr-x 2 root root 6 Aug 17 15:28 xiaowu.txt[root@xiaowu ~]# find . -name "xiao*.txt" |xargs rm -rf[root@xiaowu ~]# lltotal 4-rw-------. 1 root root 1703 Mar 25 08:58 anaconda-ks.cfg
2)复制网卡配置文件到家目录下
[root@xiaowu ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /root[root@xiaowu ~]# lltotal 12-rw-r--r-- 1 root root 0 Aug 17 15:34 1.txt-rw-r--r-- 1 root root 0 Aug 17 15:34 2.txt-rw-r--r-- 1 root root 0 Aug 17 15:34 3.txt-rw-------. 1 root root 1703 Mar 25 08:58 anaconda-ks.cfg-rw-r--r-- 1 root root 262 Aug 17 15:52 ifcfg-eth0-rw-r--r-- 1 root root 52 Aug 17 15:42 test.txt
3)将家目录网卡配置文件权限改为666
[root@xiaowu ~]# find /root -name "ifc*"|xargs -I {} chmod 666 {}[root@xiaowu ~]# lltotal 12-rw-r--r-- 1 root root 0 Aug 17 15:34 1.txt-rw-r--r-- 1 root root 0 Aug 17 15:34 2.txt-rw-r--r-- 1 root root 0 Aug 17 15:34 3.txt-rw-------. 1 root root 1703 Mar 25 08:58 anaconda-ks.cfg-rw-rw-rw- 1 root root 262 Aug 17 15:52 ifcfg-eth0-rw-r--r-- 1 root root 52 Aug 17 15:42 test.txt
三、上传与下载
1、下载
1.wget命令
1)安装
[root@xiaowu ~]# yum install -y wget
2)语法
wget [选项]... [URL]...
3)参数选项
①启动参数
-V, --version 显示 Wget 的版本信息并退出。-h, --help 打印此帮助。-b, --background 启动后转入后台。-e, --execute=COMMAND 运行一个“.wgetrc”风格的命令。
②日志和输入文件
-o, --output-file=FILE 将日志信息写入 FILE。-a, --append-output=FILE 将信息添加至 FILE。-d, --debug 打印大量调试信息。-q, --quiet 安静模式 (无信息输出)。-v, --verbose 详尽的输出 (此为默认值)。-nv, --no-verbose 关闭详尽输出,但不进入安静模式。 --report-speed=TYPE Output bandwidth as TYPE. TYPE can be bits.-i, --input-file=FILE 下载本地或外部 FILE 中的 URLs。-F, --force-html 把输入文件当成 HTML 文件。-B, --base=URL 解析与 URL 相关的 HTML 输入文件 (由 -i -F 选项指定)。 --config=FILE Specify config file to use.
③下载
-t, --tries=NUMBER 设置重试次数为 NUMBER (0 代表无限制)。 --retry-connrefused 即使拒绝连接也是重试。-O, --output-document=FILE 将文档写入 FILE。-nc, --no-clobber skip downloads that would download to existing files (overwriting them).-c, --continue 断点续传下载文件。 --progress=TYPE 选择进度条类型。-N, --timestamping 只获取比本地文件新的文件。--no-use-server-timestamps 不用服务器上的时间戳来设置本地文件。-S, --server-response 打印服务器响应。 --spider 不下载任何文件。-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒。 --dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒。 --connect-timeout=SECS 设置连接超时为 SECS 秒。 --read-timeout=SECS 设置读取超时为 SECS 秒。-w, --wait=SECONDS 等待间隔为 SECONDS 秒。 --waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒。 --random-wait 获取多个文件时,每次随机等待间隔 0.5*WAIT...1.5*WAIT 秒。 --no-proxy 禁止使用代理。-Q, --quota=NUMBER 设置获取配额为 NUMBER 字节。 --bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)。 --limit-rate=RATE 限制下载速率为 RATE。 --no-dns-cache 关闭 DNS 查寻缓存。 --restrict-file-names=OS 限定文件名中的字符为 OS 允许的字符。 --ignore-case 匹配文件/目录时忽略大小写。-4, --inet4-only 仅连接至 IPv4 地址。-6, --inet6-only 仅连接至 IPv6 地址。 --prefer-family=FAMILY 首先连接至指定协议的地址 FAMILY 为 IPv6,IPv4 或是 none。 --user=USER 将 ftp 和 http 的用户名均设置为 USER。 --password=PASS 将 ftp 和 http 的密码均设置为 PASS。 --ask-password 提示输入密码。 --no-iri 关闭 IRI 支持。 --local-encoding=ENC IRI (国际化资源标识符) 使用 ENC 作为本地编码。 --remote-encoding=ENC 使用 ENC 作为默认远程编码。 --unlink remove file before clobber.
④目录
-nd, --no-directories 不创建目录。-x, --force-directories 强制创建目录。-nH, --no-host-directories 不要创建主目录。 --protocol-directories 在目录中使用协议名称。-P, --directory-prefix=PREFIX 以 PREFIX/... 保存文件 --cut-dirs=NUMBER 忽略远程目录中 NUMBER 个目录层。
⑤Http选项
--http-user=USER 设置 http 用户名为 USER。 --http-password=PASS 设置 http 密码为 PASS。 --no-cache 不在服务器上缓存数据。 --default-page=NAME 改变默认页 (默认页通常是“index.html”)。-E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档。 --ignore-length 忽略头部的‘Content-Length’区域。 --header=STRING 在头部插入 STRING。 --max-redirect 每页所允许的最大重定向。 --proxy-user=USER 使用 USER 作为代理用户名。 --proxy-password=PASS 使用 PASS 作为代理密码。 --referer=URL 在 HTTP 请求头包含‘Referer: URL’。 --save-headers 将 HTTP 头保存至文件。-U, --user-agent=AGENT 标识为 AGENT 而不是 Wget/VERSION。 --no-http-keep-alive 禁用 HTTP keep-alive (永久连接)。 --no-cookies 不使用 cookies。 --load-cookies=FILE 会话开始前从 FILE 中载入 cookies。 --save-cookies=FILE 会话结束后保存 cookies 至 FILE。 --keep-session-cookies 载入并保存会话 (非永久) cookies。 --post-data=STRING 使用 POST 方式;把 STRING 作为数据发送。 --post-file=FILE 使用 POST 方式;发送 FILE 内容。 --content-disposition 当选中本地文件名时 允许 Content-Disposition 头部 (尚在实验)。 --content-on-error output the received content on server errors. --auth-no-challenge 发送不含服务器询问的首次等待 的基本 HTTP 验证信息。
⑥HTTPS (SSL/TLS) 选项:
--secure-protocol=PR choose secure protocol, one of auto, SSLv2, SSLv3, TLSv1, TLSv1_1 and TLSv1_2.--no-check-certificate 不要验证服务器的证书。--certificate=FILE 客户端证书文件。--certificate-type=TYPE 客户端证书类型,PEM 或 DER。--private-key=FILE 私钥文件。--private-key-type=TYPE 私钥文件类型,PEM 或 DER。--ca-certificate=FILE 带有一组 CA 认证的文件。--ca-directory=DIR 保存 CA 认证的哈希列表的目录。--random-file=FILE 带有生成 SSL PRNG 的随机数据的文件。--egd-file=FILE 用于命名带有随机数据的 EGD 套接字的文件。
⑦FTP 选项:
--ftp-user=USER 设置 ftp 用户名为 USER。--ftp-password=PASS 设置 ftp 密码为 PASS。--no-remove-listing 不要删除‘.listing’文件。--no-glob 不在 FTP 文件名中使用通配符展开。--no-passive-ftp 禁用“passive”传输模式。--preserve-permissions 保留远程文件的权限。--retr-symlinks 递归目录时,获取链接的文件 (而非目录)。
⑧递归下载
-r, --recursive 指定递归下载。-l, --level=NUMBER 最大递归深度 (inf 或 0 代表无限制,即全部下载)。 --delete-after 下载完成后删除本地文件。-k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件。--backups=N before writing file X, rotate up to N backup files.-K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。-m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。-p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。 --strict-comments 用严格方式 (SGML) 处理 HTML 注释。
⑨递归接受/拒绝
-A, --accept=LIST 逗号分隔的可接受的扩展名列表。-R, --reject=LIST 逗号分隔的要拒绝的扩展名列表。 --accept-regex=REGEX regex matching accepted URLs. --reject-regex=REGEX regex matching rejected URLs. --regex-type=TYPE regex type (posix|pcre).-D, --domains=LIST 逗号分隔的可接受的域列表。 --exclude-domains=LIST 逗号分隔的要拒绝的域列表。 --follow-ftp 跟踪 HTML 文档中的 FTP 链接。 --follow-tags=LIST 逗号分隔的跟踪的 HTML 标识列表。 --ignore-tags=LIST 逗号分隔的忽略的 HTML 标识列表。-H, --span-hosts 递归时转向外部主机。-L, --relative 只跟踪有关系的链接。-I, --include-directories=LIST 允许目录的列表。--trust-server-names use the name specified by the redirection url last component.-X, --exclude-directories=LIST 排除目录的列表。-np, --no-parent 不追溯至父目录。
4)实例
①下载单个文件
wget http://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
②-O参数,指定文件名称
wget -O wordpress.tar.gz http://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
③-c参数,断点续传
wget -c https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
④-b参数,后台下载
wget -b https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz