真是“世界真奇妙”,保持一颗好奇的心。
ppt.cc/fVjECx ppt.cc/fEnHsx ppt.cc/fRZTnx ppt.cc/fSZ3cx ppt.cc/fLOuCx ppt.cc/fE9Nux ppt.cc/fL5Kyx ppt.cc/fIr1ax ppt.cc/f71Yqx tecmint.com linuxcool.com linux.die.net linux.it.net.cn ostechnix.com unix.com ubuntugeek.com runoob.com man.linuxde.net v.gd/4A2G5b v.gd/VBg0IE v.gd/kVkm7n v.gd/jCKP1G linuxprobe.com linuxtechi.com howtoforge.com linuxstory.org systutorials.com ghacks.net linuxopsys.com v.gd/2P9wTx v.gd/FtfpqE v.gd/eMfHsm v.gd/Ub7mqv v.gd/RReVk0 v.gd/vS3uTI v.gd/4Zxmba v.gd/1BnFph
Total Pageviews
Friday, 29 March 2019
Thursday, 28 March 2019
cURL 的十种常见用法
1. 获取页面内容
当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出。
curl http://www.mydomain.com
2. 显示 HTTP 头
如果我们只想要显示 HTTP 头,而不显示文件内容,可以使用
-I
选项:curl -I http://www.
mydomain.com
输出为:
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 11 May 2017 08:24:45 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24206
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ"
Vary: Accept-Encoding
也可以同时显示 HTTP 头和文件内容,使用
-i
选项:curl -i http://www.
mydomain.com
输出为:
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Thu, 11 May 2017 08:25:46 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 24206
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"5e8e-Yw5ZdnVVly9/aEnMX7fVXQ"
Vary: Accept-Encoding
<!DOCTYPE html>
<html lang="en">
......
</html>
3. 将链接保存到文件
我们可以使用
>
符号将输出重定向到本地文件中。curl http://www.
mydomain.com > index.html
也可以通过 curl 自带的
-o/-O
选项将内容保存到文件中。- -o(小写的 o):结果会被保存到命令行中提供的文件名
- -O(大写的 O):URL 中的文件名会被用作保存输出的文件名
curl -o index.html http://www.
mydomain.com
curl -O http://www.
mydomain.com/page/2/
注意:使用
-O
选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o
选项手动指定文件名,或使用重定向符号。4. 同时下载多个文件
我们可以使用
-o
或 -O
选项来同时指定多个链接,按照以下格式编写命令:curl -O http://www.
mydomain.com/page/2/ -O http://www.mydomain.com/page/3/
或者:
curl -o page1.html http://www.
mydomain.com/page/1/ -o page2.html http://www.mydomain.com/page/2/
5. 使用 -L 跟随链接重定向
如果直接使用 curl 打开某些被重定向后的链接,这种情况下就无法获取我们想要的网页内容。例如:
curl http://
mydomain.com
会得到如下提示:
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
而当我们通过浏览器打开该链接时,会自动跳转到
http://www.mydomain.com
。此时我们想要 curl 做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。我们可以在命令中添加 -L
选项来跟随链接重定向:curl -L http://
mydomain.com
这样我们就能获取到经过重定向后的网页内容了。
6. 使用 -A 自定义 User-Agent
我们可以使用 -A 来自定义用户代理,例如下面的命令将伪装成安卓火狐浏览器对网页进行请求:
curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com
下面我们会使用 -H 来实现同样的目的。
7. 使用 -H 自定义 header
当我们需要传递特定的 header 的时候,可以仿照以下命令来写:
curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com
可以看到,当我们使用
-H
来自定义 User-Agent 时,需要使用 "User-Agent: xxx" 的格式。
我们能够直接在 header 中传递 Cookie,格式与上面的例子一样:
curl -H "Cookie: JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com
另一种方式会在下面介绍。
8. 使用 -c 保存 Cookie
当我们使用 cURL 访问页面的时候,默认是不会保存 Cookie 的。有些情况下我们希望保存 Cookie 以便下次访问时使用。例如登陆了某个网站,我们希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的 Cookie 保存起来,下次访问时再读取。
-c 后面跟上要保存的文件名。
curl -c "cookie-example" http://www.example.com
9. 使用 -b 读取 Cookie
前面讲到了使用 -H 来发送 Cookie 的方法,这种方式是直接将 Cookie 字符串写在命令中。如果使用 -b 来自定义 Cookie,命令如下:
curl -b "JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com
如果要从文件中读取 Cookie,-H 就无能为力了,此时可以使用 -b 来达到这一目的:
curl -b "cookie-example" http://www.example.com
即 -b 后面既可以是 Cookie 字符串,也可以是保存了 Cookie 的文件名。
10. 使用 -d 发送 POST 请求
我们以登陆网页为例来进行说明使用 cURL 发送 POST 请求的方法。假设有一个登录页面 www.example.com/login,只需要提交用户名和密码便可登录。我们可以使用 cURL 来完成这一 POST 请求,-d 用于指定发送的数据,-X 用于指定发送数据的方式:
curl -d "userName=tom&passwd=123456" -X POST http://www.example.com/login
在使用 -d 的情况下,如果省略 -X,则默认为 POST 方式:
curl -d "userName=tom&passwd=123456" http://www.example.com/login
强制使用 GET 方式
发送数据时,不仅可以使用 POST 方式,也可以使用 GET 方式,例如:
curl -d "somedata" -X GET http://www.example.com/api
或者使用 -G 选项:
curl -d "somedata" -G http://www.example.com/api
从文件中读取 data
curl -d "@data.txt" http://www.example.com/login
带 Cookie 登录
当然,如果我们再次访问该网站,仍然会变成未登录的状态。我们可以用之前提到的方法保存 Cookie,在每次访问网站时都带上该 Cookie 以保持登录状态。
curl -c "cookie-login" -d "userName=tom&passwd=123456" http://www.example.com/login
再次访问该网站时,使用以下命令:
curl -b "cookie-login" http://www.example.com/login
这样,就能保持访问的是登录后的页面了。
Linux的find命令的用法示例
考虑到原文有个别错误,以及为便于读者理解,故采用意译的方式。
Linux系统中的
find
命令在查找文件时非常有用而且方便。它可以根据不同的条件来查找文件,例如权限、拥有者、修改日期/时间、文件大小等等。在这篇文章中,我们将学习如何使用 find
命令以及它所提供的选项来查找文件。
在绝大多数Linux发行版中,你都可以直接使用
find
命令而无需进行任何安装操作。如果你想在linux系统的命令行中变得特别高效,那么 find
是你必须掌握的命令之一。find
命令的基本语法如下:$ find [path] [option] [expression]
一、基本用法
1. 列出当前目录和子目录下的所有文件
这个命令会列出当前目录以及子目录下的所有文件。
$ find
.
./abc.txt
./subdir
./subdir/how.php
./cool.php
该命令与以下命令效果相同
$ find .
$ find . -print
2. 查找特殊的目录或路径
下面的命令会查找当前目录下
test
文件夹中的文件,默认列出所有文件。$ find ./test
./test
./test/abc.txt
./test/subdir
./test/subdir/how.php
./test/cool.php
下面的命令用于查找指定名称的文件。
$ find ./test -name "abc.txt"
./test/abc.txt
也可以使用通配符
$ find ./test -name "*.php"
./test/subdir/how.php
./test/cool.php
请注意,所有的文件夹都会被递归地查找。所以,这是用于查找指定扩展名文件的一种非常强大的方式。
如果我们尝试搜索
/
文件夹,也就是根目录,就会搜索整个文件系统,包括挂载的设备以及网络存储设备。所以请小心使用。当然,你随时可以通过按 Ctrl + C
来终止命令。
注意:当指定文件夹的时候(例如示例中的"./test"文件夹),忽略末尾的斜杠是没有问题的。但是,如果文件夹是一个指向其它位置的链接(symlink)时,你必须在末尾写上斜杠才能使find命令正常工作(find ./test/)。
忽略大小写
在查找文件名时,忽略大小写往往非常有用。要忽略大小写,只需要使用
iname
选项,而不是 name
选项。$ find ./test -iname "*.Php"
./test/subdir/how.php
./test/cool.php
总是用双引号或单引号来包围匹配模式(文件名参数),这非常有用。不这样做的话有时也能正常工作,有时也可能会产生奇怪的结果。
3. 限制目录查找的深度
find
命令默认会递归查找整个目录树,而这非常消耗时间和资源。好在目录查找的深度可以手动指定。例如我们只想查找一到两层以内的子目录,可以通过 maxdepth
选项来指定。$ find ./test -maxdepth 2 -name "*.php"
./test/subdir/how.php
./test/cool.php
$ find ./test -maxdepth 1 -name *.php
./test/cool.php
第二个示例中指定了
maxdepth
为1,表明最多只查找一层内的子目录,也就是只查找当前文件夹。
当我们只想在当前目录下查找,而不是查找整个目录树的时候,这个选项会特别有用。
与
maxdepth
选项相似,还有一个选项叫做 mindepth
,正如名字所表示的那样,它会至少到达第 N 层子目录后才开始查找文件。4. 反向查找
除了查找满足条件的文件之外,我们还可以查找不满足条件的所有文件。当我们知道要在查找中排除哪些文件时,这个选项就能发挥作用了。
$ find ./test -not -name "*.php"
./test
./test/abc.txt
./test/subdir
在上面的示例中我们找到了所有扩展名不是
php
的文件和文件夹。我们也可以使用感叹号 !
来代替 -not
。find ./test ! -name "*.php"
5. 结合多个查找条件
我们可以同时使用多个查找条件来指定文件名并排除某些文件。
$ find ./test -name 'abc*' ! -name '*.php'
./test/abc.txt
./test/abc
上面的命令查找所有以
abc
开头并且不含 .php
扩展名的文件。这个示例展现了 find
命令自带的查找表达式是多么的强大。
OR 操作符
当我们使用多个查找条件时,
find
命令会将它们通过 AND
操作符结合起来,也就是说,只有满足所有条件的文件才会被列出。不过,如果我们需要进行基于 OR
运算的查找时,可以加上 -o
开关。$ find -name '*.php' -o -name '*.txt'
./abc.txt
./subdir/how.php
./abc.php
./cool.php
上面的命令查找所有以
.php
结尾或者以 .txt
结尾的文件。6. 只查找文件或目录
有时我们只想通过某个名字查找对应的文件或对应的目录,我们可以很容易实现这个要求。
$ find ./test -name abc*
./test/abc.txt
./test/abc
只查找文件
$ find ./test -type f -name "abc*"
./test/abc.txt
只查找目录
$ find ./test -type d -name "abc*"
./test/abc
非常有用而且方便!
7. 同时在多个目录下查找
如果你想要在两个不同的目录内进行查找,命令非常简单。
$ find ./test ./dir2 -type f -name "abc*"
./test/abc.txt
./dir2/abcdefg.txt
检查一下,它确实列出了来自给定的两个目录的文件。
8. 查找隐藏文件
在Linux系统中,隐藏文件的名字以英文的句号开头,即
.
。所以要列出隐藏文件,只需加上简单的文件名过滤条件就行了。$ find ~ -type f -name ".*"
二、基于文件权限和属性的查找
9. 查找指定权限的文件
通过指定
perm
选项,我们可以查找具有特定权限的文件。下面的示例中查找了所有具有 0664
权限的文件。$ find . -type f -perm 0664
./abc.txt
./subdir/how.php
./abc.php
./cool.php
我们可以用这个命令来查找带有错误权限的文件,这些文件可能会产生安全问题。
可以结合
反向查找
来进行权限检查。$ find . -type f ! -perm 0777
./abc.txt
./subdir/how.php
./abc.php
./cool.php
10. 查找具有 SGID/SUID 属性的文件
下面的命令查找所有具有
644
权限和 SGID
属性的文件。# find / -perm 2644
我们同样可以使用
1664
来查找设置了 粘滞位
(sticky bit)的文件。# find / -perm 1644
perm
选项除了接受数值型参数外,同样接受 chmod
命令中的模式串。在下面的查找中,我们用另一种语法来代替数字。$ find / -maxdepth 2 -perm /u=s 2>/dev/null
/bin/mount
/bin/su
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private
注意:由于权限不足,某些目录会拒接访问。命令中的
2>/dev/null
正是用于清除输出中的错误访问结果。11. 查找只读文件
$ find /etc -maxdepth 1 -perm /u=r
/etc
/etc/thunderbird
/etc/brltty
/etc/dkms
/etc/phpmyadmin
... output truncated ...
12. 查找可执行文件
$ find /bin -maxdepth 2 -perm /a=x
/bin
/bin/preseed_command
/bin/mount
/bin/zfgrep
/bin/tempfile
... output truncated ...
三、基于文件拥有者和用户组的查找
13. 查找属于特定用户的文件
查找当前目录下,属于
bob
的文件。$ find . -user bob
.
./abc.txt
./abc
./subdir
./subdir/how.php
./abc.php
在指定所属用户的同时,我们同样可以指定文件名。
$ find . -user bob -name '*.php'
很容易看出,我们可以通过增加过滤条件来缩小查找文件的范围。
14. 查找属于特定用户组的文件
# find /var/www -group developer
四、基于日期和时间的查找
除了上面介绍的查找条件外,另外一个非常棒的查找条件就是文件的修改和访问时间(日期)。当我们想要找出哪些文件在某段时间内被修改的时候,这个查找条件将会非常方便。我们来看几个例子。
15. 查找过去的第 N 天被修改过的文件
# find / -mtime 50
16. 查找过去的 N 天内被访问过的文件
# find / -atime -50
17. 查找某段时间范围内被修改过内容的文件
# find / -mtime +50 -mtime -100
18. 查找过去的 N 分钟内状态发生改变的文件
$ find /home/bob -cmin -60
19. 查找过去的 1 小时内被修改过内容的文件
# find / -mmin -60
20. 查找过去的 1 小时内被访问过的文件
# find / -amin -60
五、基于文件大小的查找
21. 查找指定大小的文件
$ find / -size 50M
22. 查找大小在一定范围内的文件
$ find / -size +50M -size -100M
23. 查找最大和最小的文件
我们可以将
find
命令与 ls
和 sort
命令结合,从而找出最大或最小的文件。
下面的命令使用了
sort
命令的 -r
选项,也就是从大到小降序排列。经过 head
命令的过滤之后,会显示当前目录和子目录下最大的5个文件。命令的执行过程需要一段时间,查找的速度取决于文件的总数。$ find . -type f -exec ls -s {} \; | sort -n -r | head 5
同样,我们可以去掉
sort
命令的 -r
选项来进行升序排列,从而显示出最小的5个文件。$ find . -type f -exec ls -s {} \; | sort -n | head 5
24. 查找空文件和空目录
查找空文件:
# find /tmp -type f -empty
查找空目录:
$ find ~/ -type d -empty
非常简单!
六、高级操作
find
命令不仅可以通过特定条件来查找文件,还可以对查找到的文件使用任意linux命令进行操作。下面给出两个例子。25. 使用 ls 命令列出文件信息
我们使用
find
命令找到文件后,只能看到文件路径。如果想进一步查看文件信息,可以结合 ls
命令来实现。$ find . -exec ls -ld {} \;
drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php
-rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php
26. 删除找到的文件
下面的命令会删除
tmp
目录下扩展名为 .txt
的文件。$ find /tmp -type f -name "*.txt" -exec rm -f {} \;
我们同样可以删除目录,只要把
-type
后面的 f
改为 d
,并且在 rm
命令后面加上 -r
即可。$ find /tmp -type d -name "dirToRemove" -exec rm -r -f {} \;
Subscribe to:
Posts (Atom)