Linux常用命令--下
Linux常用命令--下
Alanjournalctl命令
journalctl
命令是Systemd
日志系统的一个命令,主要用途是用来查看通过Systemd
日志系统记录的日志,在Systemd
出现之前,Linux
系统及各应用的日志都是分别管理的,Systemd
取代了initd
之后便开始统一管理了所有Unit
的启动日志,可以只用一个journalctl
命令,查看所有内核和应用的日志。
语法
1 | journalctl [OPTIONS...] [MATCHES...] |
参数
--no-full, --full, -l
: 当字段匹配可用列时将其省略,默认设置是显示完整字段,允许它们换行或被截断,旧的选项-l/--full
不再有用,除了撤销--no-full
。-a, --all
: 完整显示所有字段,即使它们包含不可打印字符或非常长。-f, --follow
: 仅显示最近的日志条目,并在新条目附加到日志时连续打印。-e, --pager-end
: 立即跳到日志的结尾内隐含的工具,这意味着-n 1000
可以保证分页器不会缓冲大小不受限制的日志,可以在命令行中使用显式的-n
和其他一些数值来覆盖它,注意,这个选项只支持less
页。-n, --lines=
: 显示最近的日志事件并限制显示的事件数,如果使用--follow
,则隐含此选项,参数为正整数,是可选的,默认为10
。--no-tail
: 显示所有存储的输出行,即使在follow
模式下也是如此,撤消--line=
的效果。-r, --reverse
: 反转输出,以便首先显示最新的条目。-o, --output=
: 控制所显示的日志条目的格式,采用以下选项之一:short
: 默认值,并生成与经典syslog
文件格式基本相同的输出,每个日志条目显示一行。short-iso
: 与short
非常相似,但显示ISO 8601 wallclock
时间戳。short-precise
: 与short
非常相似,但是以微秒的精度显示时间戳。short-monotonic
: 非常相似,但是显示的是monotonic
的时间戳,而不是wallclock
的时间戳。verbose
: 显示具有所有字段的完整结构条目。export
: 将日志序列化成适合备份和网络传输的二进制流,主要是基于文本的。json
: 将条目格式化为JSON
数据结构,每行一个。json-pretty
: 将条目格式化为JSON数据结构,但将它们格式化为多行,以使人们更容易阅读。json-sse
: 将条目格式化为JSON
数据结构,但将它们包装为适合服务器发送的Eventsm
的格式。cat
: 生成一个非常简洁的输出,只显示每个日志条目的实际消息,没有元数据,甚至没有时间戳。
-x, --catalog
: 用来自消息目录的解释文本扩充日志行,这将向输出中可用的日志消息中添加解释性帮助文本,这些简短的帮助文本将解释错误或日志事件的上下文、可能的解决方案,以及指向支持论坛、开发人员文档和任何其他相关手册的指针,注意,帮助文本不是对所有消息都可用,而是仅对选定的消息可用。此外,将journalctl
输出附加到错误报告时,请不要使用-x
。-q, --quiet
: 当以普通用户身份运行时,禁止显示有关不可访问的系统日志的任何警告消息。-m, --merge
: 显示所有可用的日志,包括远程日志的交叉条目。-b [ID][±offset], --boot=[ID][±offset]
: 显示来自特定启动的消息,这将为_BOOT_ID=
添加匹配项,参数可能为空,在这种情况下,将显示当前引导的日志,如果省略引导ID
,则正偏移量将查找从日志开始的引导,而等于或小于零的偏移量将查找从日志结束的引导,因此,1
表示按时间顺序在日志中找到的第一个引导,2
表示第二个引导,依此类推,而-0
表示最后一个引导,-1
表示最后一个引导之前的引导,依此类推,空偏移量等同于指定-0
,除非当前引导不是最后一次引导,例如因为指定--directory
查看来自不同计算机的日志。如果指定了32
个字符的ID
,则可以选择后跟偏移量,该偏移量标识相对于boot ID
给定的引导,负值表示较早的引导,正值表示较晚的引导,如果未指定offset
,则假定值为零,并显示ID
给定的引导日志。--list-boots
: 显示引导编号(相对于当前引导)、它们的id
以及与引导相关的第一条和最后一条消息的时间戳的列表。-k, --dmesg
: 只显示内核消息,这意味着-b
并添加匹配_TRANSPORT=kernel
。-u, --unit=UNIT|PATTERN
: 显示指定的systemd
单元单元的消息,或任何与PATTERN
匹配的单元的消息,如果指定了模式,日志中找到的单元名称列表将与指定的模式进行比较,并使用所有匹配的内容,对于每个单元名,将为来自该单元的消息添加一个匹配_SYSTEMD_UNIT= unit
,以及来自systemd
的消息和关于指定单元的coredumps
的消息的额外匹配,该参数可以指定多次。--user-unit=
: 显示指定用户会话单元的消息,这将为来自单元的消息_SYSTEMD_USER_UNIT=
和_UID=
添加匹配,并为来自会话systemd
的消息和关于指定单元的coredumps
的消息添加额外匹配,该参数可以指定多次。-p, --priority=
: 根据消息优先级或优先级范围筛选输出,接受单个数字或文本日志级别(即在0 emerg
和7 debug
之间),或以..
形式表示的numeric/text
日志级别范围,日志级别是syslog
中记录的通常的syslog
日志级别,即emerg 0
、alert 1
、crit 2
、err 3
、warning 4
、notice 5
、info 6
、debug 7
,如果指定一个日志级别,则显示该级别或更低(值更低优先级更高)日志级别的所有消息,如果指定了一个范围,则将显示该范围内的所有消息,包括该范围的开始值和结束值,这将为指定的优先级添加PRIORITY=
匹配项。-c, --cursor=
: 从传递的游标指定的日志位置开始显示条目。--after-cursor=
: 从该光标指定的位置之后的日志位置开始显示条目,使用--show-cursor
选项时将显示光标。--show-cursor
: 光标显示在最后一项的两个破折号后,类似于-- cursor: s=0639...
,光标的格式是私有的,可能会更改。--since=, --until=
: 分别在指定日期或更新日期,或在指定日期或更新日期开始显示条目,日期规范的格式应该是2012-10-30 18:17:16
,如果省略了时间部分,则假定为00:00:00
,如果只省略了seconds
组件,则假定为:00
,如果省略了date
部分,则假定为当前日期,或者理解字符串yesterday
、today
、tomorrow
,分别表示当前日期的前一天00:00:00
、当前日期的前一天00:00:00
、当前日期的后一天,now
指的是当前时间,最后,可以指定相对次数,以-
或+
作为前缀,分别表示当前时间之前或之后的次数。-F, --field=
: 在日志的所有条目中打印指定字段可以接受的所有可能数据值。--system, --user
: 显示来自系统服务和内核的消息(使用--system
),显示来自当前用户服务的消息(使用--user
),如果两者都未指定,则显示用户可以看到的所有消息。-M, --machine=
: 显示来自运行中的本地容器的消息,指定要连接的容器名称。-D DIR, --directory=DIR
: 以目录路径作为参数,如果指定,journalctl
将操作指定的日志目录DIR
,而不是默认的运行时和系统日志路径。--file=GLOB
: 以文件glob
作为参数,如果指定,journalctl
将操作与GLOB
匹配的指定日志文件,而不是默认的运行时和系统日志路径,可以指定多次,在这种情况下文件将被适当地交错。--root=ROOT
: 以目录路径作为参数,如果指定,journalctl
将对指定目录下的目录文件层次结构而不是根目录进行操作,例如--update catalog
将创建root/var/lib/systemd/catalog/database
。--new-id128
: 生成一个新的适合标识消息的128
位ID
,而不是显示日志内容,这是为那些需要为他们引入的新消息使用新标识符并希望使其可识别的开发人员准备的,这将以三种不同的格式打印新的ID
,这些格式可以复制到源代码或类似的文件中。--header
: 不是显示日志内容,而是显示所访问日志字段的内部头信息。--disk-usage
: 显示所有日志文件的当前磁盘使用情况。--list-catalog [128-bit-ID...]
: 以消息id
表的形式列出消息目录的内容,以及它们的简短描述字符串,如果指定了任何128
位id
,则只显示那些条目。--dump-catalog [128-bit-ID...]
: 显示消息目录的内容,条目由由两个破折号和ID
组成的行分隔,格式与.catalog
文件相同,如果指定了任何128
位id
,则只显示那些条目。--update-catalog
: 更新消息目录索引,每次安装、删除或更新新的编目文件以重新生成二进制编目索引时,都需要执行此命令。--setup-keys
: 生成一个用于前向安全密封FSS
的新密钥对,而不是显示日志内容,这将生成一个密封密钥和一个验证密钥,密封密钥存储在日志数据目录中,并保留在主机上,验证键应该存储在外部。--force
: 当传递了--setup keys
并且已经配置了前向安全密封FSS
时,重新创建FSS keys
。--interval=
: 指定使用--setup-keys
生成FSS
密钥对时密封密钥的更改间隔,较短的时间间隔会增加CPU
消耗,但会缩短无法检测到的日志更改的时间范围,默认为15
分钟。--verify
: 检查日志文件的内部一致性,如果文件是在启用FSS
的情况下生成的,并且FSS
验证密钥是用--verify key=
指定的,则会验证日志文件的真实性。--verify-key=
: 指定用于--verify
操作的FSS
验证密钥。--no-pager
: 不将程序的输出内容管道pipe
给分页程序。--vacuum-size=BYTES
: 将磁盘使用减少到指定大小以下。--vacuum-files=INT
: 仅保留指定数量的日记文件。--vacuum-time=TIME
: 任何早于指定时间点的条目都将被删除。--rotate
: 要求日志守护进程滚动日志文件,此命令会一直阻塞到滚动操作完成之后才会返回,日志滚动可以确保所有活动的日志文件都被关闭、并被重命名以完成归档,同时新的空白日志文件将被创建,并成为新的活动日志文件,通常可以与--vacuum-size=
、--vacuum-time=
、--vacuum-file=
一起使用, 以提高日志清理的效率。-h, --help
: 输出帮助信息。--version
: 输出版本信息。
示例
显示本次启动以来的全部日志。
1 | journalctl |
显示内核日志。
1 | journalctl -k |
使用-n
参数可以显示最后n
行日志,如果不指定行数,默认显示10
行。
1 | journalctl -n 20 |
查看指定进程的日志。
1 | journalctl _PID=1 |
显示最近30
分钟的日志。
1 | journalctl --since=-30m |
显示2021
年以来的日志。
1 | journalctl --since="2021-01-01" |
显示今天的日志。
1 | journalctl --since=today |
使用-f
参数可以实现类型tail -f
的功能,持续监控最新的日志。
1 | journalctl -f |
查看指定Unit
的日志。
1 | journalctl -u nginx.service |
查看日志占用的磁盘空间。
1 | journalctl --disk-usage |
要求日志守护进程滚动日志文件,日志滚动可以确保所有活动的日志文件都被关闭、并被重命名以完成归档,同时新的空白日志文件将被创建,并成为新的活动日志文件。
1 | journalctl --rotate |
清理一个周前的日志。
1 | journalctl --vacuum-time=1week |
将磁盘占用减少到指定大小以下。
1 | journalctl --vacuum-size=10M |
join命令
join
命令用于将两个文件中,指定栏位内容相同的行连接起来。其首先找出两个文件中指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
语法
1 | join [OPTION]... FILE1 FILE2 |
参数
-a FILENUM
: 从FILENUM
打印不成对的行,其中FILENUM
是1
或2
,对应于FILE1
或FILE2
。-e EMPTY
: 将缺少的输入字段替换为空。-i, --ignore-case
: 比较字段时忽略大小写的差异。-j FIELD
: 相当于-1 FIELD -2 FIELD
。-o FORMAT
: 构造输出线时遵守FORMAT
。-t CHAR
: 使用CHAR
作为输入和输出字段分隔符。-v FILENUM
: 类似于-a FILENUM
,但不连接输出行。-1 FIELD
: 加入文件1
的这个FIELD
。-2 FIELD
: 加入文件2
的这个FIELD
。--check-order
: 检查输入是否正确排序,即使所有输入行都可以配对。--nocheck-order
: 不要检查输入是否正确排序。--header
: 将每个文件的第一行视为字段标题,无需尝试将它们配对即可打印它们。--help
: 显示帮助信息。--version
: 显示版本信息。
示例
file1.txt
与file2.txt
文件内容如下:
1 | # file1.txt |
使用join
命令合并文件,为了合并两个文件,文件必须具有一些公共字段,此时两个文件中的公共字段均带有编号1、2...
。
1 | join file1.txt file2.txt |
使用-a
选项打印FILE1
中已成对的行并链接以及不成对的行。
1 | join file1.txt file2.txt -a 1 |
使用-v
选项打印FILE1
中不成对的行。
1 | join file1.txt file2.txt -v 1 |
join
会在第一个公共字段上组合文件行,该字段是默认值。但是这两个文件中的公共值不一定总是第一个列,所以join
可以使用-1, -2
指定公共值位置。-1
和-2
表示第一个和第二个文件,这些选项需要一个数字参数,该参数引用相应文件的连接字段。
1 | `file1.txt`与`file2.txt`文件内容如下: |
1 | join -1 2 -2 2 file1.txt file2.txt |
对于上面的示例,我们直接使用-j
参数也可以实现。
1 | join -j 2 file1.txt file2.txt |
ip命令
ip
命令与ifconfig
命令类似,但比ifconfig
命令更加强大,主要功能是用于显示或设置网络设备、路由和隧道的配置等,ip
命令是Linux
加强版的的网络配置工具,用于代替ifconfig
命令。
语法
1 | ip [ OPTIONS ] OBJECT { COMMAND | help } |
参数
OPTIONS
-b, -batch <FILENAME>
: 从提供的文件或标准输入读取命令并调用它们,第一次失败将导致ip
执行终止。-force
: 不要在批处理模式下因错误而终止ip
,如果在执行命令期间发生任何错误,则应用程序返回码将为非零。-s, -stats, -statistics
: 输出更多信息,如果该选项出现两次或更多次,则信息量会增加,通常,信息是统计信息或一些时间值。-l, -loops <COUNT>
: 指定ip addr flush
逻辑在放弃之前尝试的最大循环数,默认值为10
,0
表示循环直到删除所有地址。-f, -family <FAMILY>
: 指定使用的协议族,协议族标识符可以是inet
、inet6
、bridge
、ipx
、dnet
或link
中的一个,如果该选项不存在,则根据其他参数猜测协议族,如果命令行的其余部分没有提供足够的信息来猜测家族,ip
将退回到默认的ip
设置,通常是inet
或any
,link
是一种特殊的族标识符,不涉及任何网络协议。-4
:-family inet
的快捷方式。-6
:-family inet6
的快捷方式。-B
:-family bridge
的快捷方式。-D
:-family decnet
的快捷方式。-I
:-family ipx
的快捷方式。-0
:-family link
的快捷方式。-o, -oneline
: 将每条记录输出为一行,用\
字符替换换行符,当使用wc
计数记录或grep
输出时,这很方便。-r, -resolve
: 使用系统的名称解析程序打印DNS
名称而不是主机地址。-V, -Version
: 输出版本信息。
OBJECT
address
: 设备上的协议地址,IP
或IPv6
。addrlabel
: 用于协议地址选择的标签配置。l2tp
: IP隧道以太网L2TPv3
。link
: 网络设备。maddress
: 多播地址。monitor
: 监视netlink
消息。mroute
: 多播路由缓存项。mrule
: 多播路由策略数据库中的规则。neighbour
: 管理ARP
或NDISC
缓存项。netns
: 管理网络名称空间。ntable
: 管理邻居缓存的操作。route
: 路由表条目。rule
: 路由策略数据库中的规则。tcp_metrics/tcpmetrics
: 管理TCP
指标。tunnel
:IP
隧道。tuntap
: 管理TUN/TAP
设备。xfrm
: 管理IPSec
策略。
示例
查看网络接口信息,例如IP
地址,子网等。
1 | ip addr show |
要查看eth0
网卡信息。
1 | ip addr show eth0 |
启用网络接口。
1 | ip link set eth0 up |
关闭网络接口。
1 | ip link set eth0 down |
查看路由和默认网关信息。
1 | ip route show |
获取到特定ip
的路由信息。
1 | ip route get to 192.168.111.111 |
查看arp
条目。
1 | ip neigh |
查看网络统计。
1 | ip -s link |
查看详细帮助信息。
1 | man ip |
ifconfig命令
ifconfig
代表interface configuration
,其用于查看和更改系统上网络接口的配置。
语法
1 | ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>] |
参数
(none), -a
: 显示所有网络接口的信息,即使它们已关闭。-s
: 以与命令netstat -i
相同的格式显示简短列表。-v
: 详细模式,显示某些错误情况的详细信息。interface
: 接口名称,通常是驱动程序名称,后跟一个单元号,例如第一个以太网接口的eth0
,如果内核支持别名接口,则可以为eth0
的第一个别名使用eth0:0
指定它们,可以使用它们来分配第二个地址,要删除别名接口,可以使用ifconfig eth0:0 down
,注意如果删除第一个(主接口),则对于每个范围即具有地址/网络掩码组合的同一网络,所有别名都将被删除。up
: 该标志导致接口被激活,如果为接口分配了地址,则隐式指定。down
: 该标志导致该接口的驱动程序被关闭。[-]arp
: 在此接口上启用(指定了-
前缀则禁用)ARP
协议的使用。[-]promisc
: 启用(指定了-
前缀则禁用)接口的混杂模式,如果启用混杂模式,接口将接收网络上的所有数据包。[-]allmulti
: 启用(指定了-
前缀则禁用)全组播模式,启用组播模式后,该接口将接收网络上所有的组播报文。metric N
: 此参数设置接口度量,接口使用该度量做出路由决策,N
必须是介于0
和4294967295
之间的整数。mtu N
: 该参数用于设置接口的最大传输单元,该设置用于限制接口传输的最大数据包大小。dstaddr address
: 为点到点链路(如PPP
)设置远程IP
地址,此关键字现在已过时,请改用pointopoint
关键字。netmask address
: 设置接口的IP
网络掩码,该值默认为通常的A
、B
或C
类网络掩码(从接口IP
地址派生),但它可以设置为任何值。add address/prefixlen
: 在接口上添加IPv6
地址。del address/prefixlen
: 从接口移除IPv6
地址。tunnel aa.bb.cc.dd
: 创建一个新的SIT (IPv6-in-IPv4)
设备,通过隧道传送到给定的目的地。irq address
: 设置此设备使用的中断线,并非所有设备都可以动态更改其IRQ
设置。io_addr address
: 在此设备的I/O
空间中设置起始地址。mem_start address
: 设置此设备使用的共享内存的起始地址,仅少数设备需要此功能。media type
: 设置设备要使用的物理端口或介质类型,并非所有设备都可以更改此设置,并且某些设备可以更改其支持的值,类型的典型值是10base2
(细缆网)、10baseT
(双绞线10 Mbps
以太网)、AUI
外部收发器等,auto
的特殊介质类型告诉驱动程序自动感知介质,同样并非所有驱动程序都可以执行此操作。[-]broadcast [address]
: 如果指定了地址参数,则将为此接口设置协议广播地址,否则它将设置(指定了-
前缀则清除)接口的IFF_BROADCAST
标志。[-]pointopoint [address]
: 这个关键字启用了接口的点对点模式,这意味着它是两台机器之间的直接链接,没有其他人监听它,如果还提供了address
参数,请设置链接另一端的协议地址,就像过时的dstaddr
关键字一样,否则,设置或清除接口的IFF POINTOPOINT
标志。hw class address
: 如果设备驱动程序支持此操作,则设置此接口的硬件地址,关键字之后必须是硬件类的名称以及与硬件地址等效的可打印ASCII
。当前支持的硬件类别包括以太ether (Ethernet)
、ax25 (AMPR AX.25)
、ARCnet and netrom (AMPR NET/ROM)
。multicast
: 在接口上设置多播标志,由于驱动程序自己会正确设置该标志,因此通常不需要这样做。address
: 分配给该接口的IP
地址。txqueuelen length
: 设置设备发送队列的长度,对于具有较高延迟的较慢设备(例如通过调制解调器或ISDN
进行的连接)将其设置为较小的值非常有用,以防止快速的批量传输过多地干扰诸如telnet
之类的交互式通信。
硬体类型
loop (Local Loopback)
、slip (Serial Line IP)
、cslip (VJ Serial Line IP)
、slip6 (6-bit Serial Line IP)
、cslip6 (VJ 6-bit Serial Line IP)
、adaptive (Adaptive Serial Line IP)
、ash (Ash)
、ether (Ethernet)
、ax25 (AMPR AX.25)
、netrom (AMPR NET/ROM)
、rose (AMPR ROSE)
、tunnel (IPIP Tunnel)
、ppp (Point-to-Point Protocol)
、hdlc ((Cisco)-HDLC)
、lapb (LAPB)
、 arcnet (ARCnet)
、dlci (Frame Relay DLCI)
、frad (Frame Relay Access Device)
、sit (IPv6-in-IPv4)
、fddi (Fiber Distributed Data Interface)
、hippi (HIPPI)
、irda (IrLAP)
、ec (Econet)
、x25 (generic X.25)
、eui64 (Generic EUI-64)
地址族
unix (UNIX Domain)
、inet (DARPA Internet)
、inet6 (IPv6)
、ax25 (AMPR AX.25)
、netrom (AMPR NET/ROM)
、rose (AMPR ROSE)
、ipx (Novell IPX)
、ddp (Appletalk DDP)
、ec (Econet)
、ash (Ash)
、x25 (CCITT X.25)
示例
显示网络设备信息。
1 | ifconfig |
启动关闭指定网卡。
1 | ifconfig eth0 down |
为网卡配置和删除IPv6
地址。
1 | ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 |
修改MAC
地址,需要首先关闭网卡并修改MAC
地址,之后再开启网卡。
1 | ifconfig eth1 hw ether 00:1D:1C:1D:1E |
为网卡配置IP
地址,并加上子掩码以及广播地址。
1 | ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255 |
启用和关闭ARP
协议。
1 | ifconfig eth0 arp |
设置最大传输单元MTU
。
1 | ifconfig eth0 mtu 1500 |
grep命令
grep
命令用于查找文件里符合条件的字符串,如果发现某文件的内容符合所指定的模式,grep
命令会把含有模式的那一行显示出来。若不指定任何文件名称,或是所给予的文件名为-
,则grep
指令会从标准输入设备读取数据。
语法
1 | grep [OPTION]... PATTERN [FILE]... |
参数
-A NUM, --after-context=NUM
: 在匹配行之后打印尾部上下文的NUM
行,在相邻的匹配组之间放置包含--
的行。-a, --text
: 像处理文本一样处理二进制文件,这相当于--binary files=text
选项。-B NUM, --before-context=NUM
: 在匹配行之前打印前导上下文的NUM
行,在相邻的匹配组之间放置包含--
的行。-C NUM, --context=NUM
: 打印输出上下文的NUM
行,在相邻的匹配组之间放置包含--
的行。-b, --byte-offset
: 打印输入文件中每行输出之前的字节偏移量。--binary-files=TYPE
: 如果文件的前几个字节指示该文件包含二进制数据,则假定该文件为类型类型。默认情况下,TYPE
是binary
,grep
通常输出一行消息,说明二进制文件匹配,或者不输出消息(如果不匹配)。如果TYPE
不匹配,grep
假设二进制文件不匹配,这相当于-I
选项。如果TYPE
是text
,grep
会像处理文本一样处理二进制文件,这相当于-a
选项。此外grep--binary files=text
可能会输出二进制垃圾,如果输出是终端,并且终端驱动程序将其中的一些解释为命令,则会产生严重的副作用。--colour[=WHEN], --color[=WHEN]
: 在匹配字符串周围加上标记find in GREP_COLOR
环境变量,WHEN
可以是never
、always
、auto
。-c, --count
: 禁止正常输出,而是为每个输入文件打印匹配行的计数,使用-v,--invert match
选项,计算不匹配的行数。-D ACTION, --devices=ACTION
: 如果输入文件是设备、FIFO
或套接字,使用ACTION
来处理它。默认情况下,ACTION
是read
,这意味着设备的读取就像它们是普通文件一样,如果ACTION
为skip
,则设备将自动跳过。-d ACTION, --directories=ACTION
: 如果输入文件是目录,使用ACTION
来处理它。默认情况下,ACTION
是read
,这意味着目录的读取就像它们是普通文件一样,如果ACTION
是skip
,则目录将被自动跳过,如果ACTION
是递归的,grep
将递归地读取每个目录下的所有文件,这相当于-r
选项。-E, --extended-regexp
: 将模式解释为扩展的正则表达式。-e PATTERN, --regexp=PATTERN
: 使用PATTERN
作为模式,用于保护以-
开头的模式。-F, --fixed-strings
: 将PATTERN
解释为固定字符串的列表,用换行符分隔,这些字符串可以匹配。-P, --perl-regexp
: 将PATTERN
解释为Perl
正则表达式。-f FILE, --file=FILE
: 从FILE
获取模式,每行一个,空文件包含零个模式,因此不匹配。-G, --basic-regexp
: 将PATTERN
解释为基本正则表达式,这是默认值。-H, --with-filename
: 打印每个匹配项的文件名。-h, --no-filename
: 当搜索多个文件时,禁止在输出中使用文件名前缀。--help
: 显示帮助文件。-I
: 处理二进制文件,就像它不包含匹配数据一样,这相当于--binary-files=without-match
选项。-i, --ignore-case
: 忽略PATTERN
和输入文件中的大小写区别。-L, --files-without-match
: 禁止正常输出,而是打印通常不会从中打印输出的每个输入文件的名称,扫描将在第一个匹配时停止。-l, --files-with-matches
: 禁止正常输出,而是打印通常从中打印输出的每个输入文件的名称,扫描将在第一个匹配时停止。-m NUM, --max-count=NUM
: 在匹配行数之后停止读取文件。如果输入是来自常规文件的标准输入,并且输出NUM
个匹配行,grep
确保标准输入在退出之前定位到最后一个匹配行之后,而不管是否存在后续上下文行。这使调用进程能够继续(恢复)搜索,当grep
在NUM个匹配行之后停止时,它输出任何后面的上下文行。当-c
或--count
选项也被使用时,grep
不会输出大于NUM
的计数。当-v
或--invert match
选项也被使用时,grep
会在输出NUM
个不匹配的行之后停止。--mmap
: 如果可能,使用mmap
系统调用来读取输入,而不是默认的读取系统调用。在某些情况下,--mmap
可以产生更好的性能。但是,如果在grep
操作时输入文件收缩,或者发生I/O
错误,那么--mmap
可能会导致未定义的行为(包括核心转储)。-n, --line-number
: 在输出的每一行前面加上输入文件中的行号。-o, --only-matching
: 只显示匹配行中与模式匹配的部分。--label=LABEL
: 将实际来自标准输入的输入显示为来自文件LABEL
的输入。这对于zgrep
之类的工具尤其有用,例如gzip -cd foo.gz | grep -H --label = foo
。--line-buffered
: 使用行缓冲,这可能会导致性能损失。-q, --quiet, --silent
: 保持安静,不向标准输出写入任何内容。如果找到任何匹配项,即使检测到错误,也立即退出,状态为零。-R, -r, --recursive
: 递归地读取每个目录下的所有文件,这相当于-d recurse
选项。-s, --no-messages
: 禁止显示有关不存在或不可读文件的错误消息。-U, --binary
: 将文件视为二进制文件。默认情况下,在MS-DOS
和MS Windows
下,grep
通过查看从文件中读取的第一个32KB
的内容来猜测文件类型。如果grep
确定文件是文本文件,它将从原始文件内容中删除CR
字符(以使带有^
和$
的正则表达式正常工作)。指定-U
会推翻这种猜测,导致读取所有文件并逐字传递给匹配机制,如果文件是一个文本文件,每行末尾都有CR/LF
对,这将导致某些正则表达式失败。此选项对MS-DOS
和MS Windows
以外的平台无效。-u, --unix-byte-offsets
: 报告Unix
样式的字节偏移量,此开关使grep
报告字节偏移,就好像该文件是Unix
样式的文本文件一样,即去除了CR
字符。这将产生与在Unix
机器上运行grep
相同的结果,除非也使用-b
选项,否则该选项无效。它对除MS-DOS
和MS-Windows
以外的平台没有影响。-V, --version
: 输出版本信息。-v, --invert-match
: 反转匹配的意义,以选择不匹配的行。-w, --word-regexp
: 只选择与表单中包含的单词匹配的行。测试是匹配的子串必须在行的开头,或者前面有非单词组成字符,同样,它必须位于行的末尾,或者后跟非单词组成字符。单词组成字符是字母、数字和下划线。-x, --line-regexp
: 仅选择与整行完全匹配的那些匹配项。-Z, --null
: 输出零字节(ASCII NULL
字符),而不是通常在文件名后的字符。例如grep -lZ
在每个文件名之后输出一个零字节,而不是通常的换行符。即使存在包含不寻常字符(例如换行符)的文件名,此选项也可以使输出明确。此选项可与find -print0
、perl -0
、sort -z
和xargs -0
等命令一起使用,以处理任意文件名,即使是包含换行符的文件名。
示例
hello.c
文件内容如下:
1 |
|
匹配带有Hello
的行。
1 | grep Hello hello.c |
匹配带有Hello
行的数量。
1 | grep -c Hello hello.c |
反转匹配的意义,选择不匹配Hello
的行。
1 | grep -v Hello hello.c |
匹配带有i
的行并忽略大小写。
1 | grep -i I hello.c |
仅输出与文件整行匹配的行。
1 | grep -x " return 0;" hello.c |
匹配带有Hello
的行并输出行号。
1 | grep -n Hello hello.c |
递归匹配当前目录下所有文件中能够匹配h*
的文件,输出行号并忽略大小写,注意实际在终端中匹配成功的位置会使用红色字体标注。
1 | grep -rni "h*" ./ |
fold命令
fold
命令用于限制文件列宽,其会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为-
,则fold
命令会从标准输入设备读取数据。
语法
1 | fold [OPTION]... [FILE]... |
参数
-b, --bytes
: 计算字节数而不是列数。-s, --spaces
: 在空格处跳过。-w, --width=WIDTH
: 使用n
列,而不是默认值80
。--help
: 显示帮助信息。--version
: 显示版本信息。
示例
使用fold
命令进行分隔,每行最多包含默认值80
个字符。
1 | fold file.txt |
使用fold
命令进行分隔,指定每行最多包含默认值50
个字符。
1 | fold -w 50 file.txt |
使用fold
命令进行分隔,并使用-s
选项用于分隔空格上的行,以便不打断单词。
1 | fold -w 50 -s file.txt |
fmt命令
fmt
命令用于编排文本文件,其会从指定的文件里读取内容,将其依照指定格式重新编排后,输出到标准输出设备,若指定的文件名为-
,则fmt
指令会从标准输入设备读取数据。
语法
1 | fmt [-WIDTH] [OPTION]... [FILE]... |
参数
-c, --crown-margin
: 保留前两行的缩进。-p, --prefix=STRING
: 仅重新格式化以STRING
开头的行,并将前缀重新附加到格式化后的行上。-s, --split-only
: 拆分长行,但不再重新填充它们。-t, --tagged-paragraph
: 第一行的缩进不同于第二行。-u, --uniform-spacing
: 单词之间使用一个空格,句子后面使用两个空格。-w, --width=WIDTH
: 最大行宽(默认为75
列)。-g, --goal=WIDTH
: 目标宽度(默认为宽度的93%
)。--help
: 输出帮助信息。--version
: 输出版本信息。
示例
默认情况下,fmt
不使用任何选项,将给定文件中存在的所有单词格式化为一行,当然默认单行最大宽度75
。
1 | cat file.txt |
格式化文件,并使用-w
选项指定文件行最大宽度,添加单词超出长度则将单词换行。
1 | cat file.txt |
-s
选项分割了很长的行,但是不重新填充它们。
1 | cat file.txt |
find命令
find
命令用来在指定目录下查找文件,任何位于参数之前的字符串都将被视为要查找的目录名,如果使用该命令时,不设置任何参数,则find
命令将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
语法
1 | find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression] |
参数
-amin<minute>
: 查找在指定时间曾被存取过的文件或目录,单位以分钟计算。-anewer<file or folder>
: 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录。-atime<day>
: 查找在指定时间曾被存取过的文件或目录,单位以天计算。-cmin<minute>
: 查找在指定时间之时被更改过的文件或目录。-cnewer<file or folder>
查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。-ctime<day>
: 查找在指定时间之时被更改的文件或目录,单位以天计算。-daystart
: 从本日开始计算时间。-depth
: 从指定目录下最深层的子目录开始查找。-empty
: 寻找文件大小为0 Byte
的文件,或目录下没有任何子目录或文件的空目录。-exec<command>
: 假设find
指令的回传值为True
,就执行该指令。-false
: 将find
指令的回传值皆设为False
。-fls<file list>
: 此参数的效果和指定-ls
参数类似,但会把结果保存为指定的列表文件。-follow
: 排除符号连接。-fprint<file list>
: 此参数的效果和指定-print
参数类似,但会把结果保存成指定的列表文件。-fprint0<file list>
: 此参数的效果和指定-print0
参数类似,但会把结果保存成指定的列表文件。-fprintf<file list><output format>
: 此参数的效果和指定-printf
参数类似,但会把结果保存成指定的列表文件。-fstype<file system type>
: 只寻找该文件系统类型下的文件或目录。-gid<group id>
: 查找符合指定之群组识别码的文件或目录。-group<group name>
: 查找符合指定之群组名称的文件或目录。-help, --help
: 在线帮助。-ilname<template style>
: 此参数的效果和指定-lname
参数类似,但忽略字符大小写的差别。-iname<template style>
: 此参数的效果和指定-name
参数类似,但忽略字符大小写的差别。-inum<inode num>
: 查找符合指定的inode编号的文件或目录。-ipath<template style>
: 此参数的效果和指定-path
参数类似,但忽略字符大小写的差别。-iregex<template style>
: 此参数的效果和指定-regexe
参数类似,但忽略字符大小写的差别。-links<number of connections>
: 查找符合指定的硬连接数目的文件或目录。-iname<template style>
: 指定字符串作为寻找符号连接的范本样式。-ls
: 假设find
指令的回传值为Ture
,就将文件或目录名称列出到标准输出。-maxdepth<directory level>
: 设置最大目录层级。-mindepth<directory level>
: 设置最小目录层级。-mmin<minute>
: 查找在指定时间曾被更改过的文件或目录,单位以分钟计算。-mount
: 此参数的效果和指定-xdev
相同。-mtime<24 hour>
: 查找在指定时间曾被更改过的文件或目录,单位以24
小时计算。-name<template style>
: 指定字符串作为寻找文件或目录的范本样式。-newer<file or folder>
: 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。-nogroup
: 找出不属于本地主机群组识别码的文件或目录。-noleaf
: 不去考虑目录至少需拥有两个硬连接存在。-nouser
: 找出不属于本地主机用户识别码的文件或目录。-ok<command>
: 此参数的效果和指定-exec
类似,但在执行指令之前会先询问用户,若回答y
或Y
,则放弃执行命令。-path<template style>
: 指定字符串作为寻找目录的范本样式。-perm<permission value>
: 查找符合指定的权限数值的文件或目录。-print
: 假设find
指令的回传值为Ture
,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有./
字符串。-print0
: 假设find
指令的回传值为Ture
,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行。-printf<output format>
: 假设find
指令的回传值为Ture
,就将文件或目录名称列出到标准输出。格式可以自行指定。-prune
: 不寻找字符串作为寻找文件或目录的范本样式;-regex<template style>
: 指定字符串作为寻找文件或目录的范本样式。-size<file size>
: 查找符合指定的文件大小的文件。-true
: 将find指令的回传值皆设为True
。-type<file type>
: 只寻找符合指定的文件类型的文件。-uid<user id>
: 查找符合指定的用户识别码的文件或目录。-used<day>
: 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算。-user<owner name>
: 查找符和指定的拥有者名称的文件或目录。-version, --version
: 显示版本信息。-xdev
: 将范围局限在先行的文件系统中。-xtype<file type>
: 此参数的效果和指定-type
参数类似,差别在于它针对符号连接检查。
示例
查找/tmp/
目录及其子目录下所有拓展名为py
的文件。
1 | find /tmp/ -name *.py |
查找/tmp/
目录及其子目录下所有一般文件。
1 | find /tmp/ -type f |
查找/tmp/
目录及其子目录下所有最近1
天内更改过的文件,+1
则表示1
天前更改过文件。
1 | find /tmp/ -ctime -1 |
查找/tmp/
目录及其子目录下所有更改时间在7
日以前的普通文件,并在删除之前询问是否删除。
1 | find /tmp/ -type f -mtime +7 -ok rm {} \; |
查找/tmp/
目录及其子目录下所有文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件。
1 | find /tmp/ -type f -perm 644 -exec ls -l {} \; |
查找/tmp/
目录及其子目录下所有文件长度为0
的普通文件,并列出它们的完整路径。
1 | find /tmp/ -type f -size 0 -exec ls -l {} \; |
file命令
file
命令用来探测给定文件的类型,file
命令对文件的检查分为文件系统、魔法文件和语言检查3
个过程。
语法
1 | file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] [file or folder] ... |
参数
-b, --brief
: 简洁模式,列出辨识结果时,不显示文件名称。-c, --checking-printout
: 详细显示指令执行过程,便于排错或分析程序执行的情形。-C, --compile
: 编译一个magic.mgc
输出文件,其中包含文件的预解析版本。-f, --files-from <file>
: 指定名称文件,其内容有一个或多个文件名称时,让file
依序辨识这些文件,格式为每列一个文件名称。-F, --separator separator
: 使用指定的字符串作为文件名和返回的文件结果之间的分隔符,默认为:
。-i, --mime
: 使文件命令输出mime
类型。-L
: 直接显示符号连接所指向的文件的类别。-L, --dereference
: 跟随符号链接,如果设置了POSIXLY_CORRECT
,则为默认值。-m <file>
: 指定魔法文件,magic file
规则就是根据文件的特殊内容去判断一个文件的类型,例如tar
格式的标识信息,通常默认magic file
文件存在于/usr/share/file/
等目录下。-n, --no-buffer
: 检查每个文件后强制刷新标准输出,仅在检查文件列表时才有用,该选项供希望从管道输出文件类型的程序使用。-N, --no-pad
: 不要填充文件名,以使它们在输出中对齐。-r, --raw
: 不将无法打印的字符翻译为\ooo
,通常文件将不可打印的字符转换为八进制表示形式。-v
: 显示版本信息。-z
: 尝试去解读压缩文件的内容。file or folder
: 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell
通配符匹配多个文件。
示例
显示文件类型。
1 | file file.txt |
显示文件MIME
类型。
1 | file -i file.txt |
简洁模式,不显示文件名。
1 | file -b -i file.txt |
fgrep命令
当需要搜索包含很多正则表达式元字符的字符串时,例如$
、^
等,fgrep
很有用,其通过指定搜索字符串包含固定字符,从而无需对每个字符进行转义用反斜杠,如果搜索的字符串包含换行符,则每行将被视为要在搜索中匹配的单个固定字符字符串。也就是说fgrep
是用来搜索固定字符的,固定字符表示字符串是按字面意义解释的-元字符不存在,因此不能使用正则表达式,运行fgrep
与使用-F
选项运行grep
效果相同。
语法
1 | fgrep [-b] [-c] [-h] [-i] [-l] [-n] [-s] [-v] [-x] [ -e pattern_list] [-f pattern-file] [pattern] [file] |
参数
-b
: 在每一行前面加上找到该行所在的块号,这在根据上下文(第一个块为0
)定位块号时非常有用。-c
: 只打印包含模式的行数。-h
: 搜索多个文件时禁止打印文件。-i
: 在比较时忽略大小写的区别。-l
: 打印一次具有匹配行的文件名称,用换行分隔,当模式出现多次时,不会重复文件名。-n
: 在文件中,在每一行前面加上它的行号(第一行是1
)。-s
: 静默工作,也就是说只显示错误消息,这对于检查错误状态非常有用。-v
: 打印除包含模式的行以外的所有行。-x
: 仅打印完全匹配的行。-e pattern_list
: 在pattern list
中搜索字符串,当字符串以-
开头时很有用。-f pattern-file
: 从模式文件中获取模式列表。pattern
: 指定在搜索输入期间使用的模式。file
: 要搜索模式的文件的路径名,如果没有指定文件参数,将使用标准输入。
示例
hello.c
文件内容如下:
1 |
|
匹配带有Hello
的行。
1 | fgrep Hello hello.c |
匹配带有Hello
行的数量。
1 | fgrep -c Hello hello.c |
反转匹配的意义,选择不匹配Hello
的行。
1 | fgrep -v Hello hello.c |
匹配带有i
的行并忽略大小写。
1 | fgrep -i I hello.c |
仅输出与文件整行匹配的行。
1 | fgrep -x " return 0;" hello.c |
匹配带有Hello
的行并输出行号。
1 | fgrep -n Hello hello.c |
递归匹配当前目录下所有文件中能够匹配h*
的文件,请注意由于使用fgrep
,命令是不会匹配*
的模式,而是将其作为固定字符*
去匹配,所以此时是没有匹配的,如果使用grep
以及相同的参数,则能够输出行号并忽略大小写,注意实际在终端中匹配成功的位置会使用红色字体标注。
1 | fgrep -rni "h*" ./ |
ex命令
ex
命令用于在Ex
模式下启动vim
文本编辑器,ex
执行效果如同vi -e
,如要从Ex
模式回到普通模式,则在vim
中输入:vi
或:visual
指令即可,可以通过运行vi -e
来启动ex
,也可以通过运行ex -v
来启动vi
,ex
是vim
的基础,vim
是世界上最受欢迎的文本编辑器之一。ex
并不是另一个编辑器,应该说vi
是更一般更基本的ex
行编辑器的可视模式,所以ex
算是vi
的底层行编辑器。由于一些ex
命令可以节省大量的编辑时间,因此在使用vi
时它们是非常有用的,这些命令的大部分都可以在不离开vi
的情况下使用。
语法
1 | ex [ -| -s ] [ -l ] [ -L ] [ -R ] [ -r [ file ] ] [ -t tag ] [ -v ] [ -V ] |
参数
--
: 此后仅文件名。-v
: 在vi
模式下启动vim
。-e
: 在ex
模式下启动vim
。-E
: 以改进的ex
模式启动vim
。-s
: 沉默模式,仅当以Ex
开头或在-s
选项之前给出-e
选项时生效。-d
: 以diff
模式启动,应该有两个或三个文件名参数,vim
将打开所有文件并显示它们之间的差异,像vimdiff
一样工作。-y
: 以简单模式启动vim
,类似于evim
或eview
,使vim
的行为像单击并键入编辑器。-R
: 只读模式,将设置readonly
选项,此时仍然可以编辑缓冲区,但将防止意外覆盖文件。如果仍要覆盖文件,请在Ex
命令中使用w!
。-Z
: 限制模式,类似于rvim
。-m
: 禁止修改文件,重置写入选项,此时仍然可以修改缓冲区,但不可写入文件。-M
: 不允许修改,可修改和写入选项将被取消设置,因此不允许进行更改并且无法写入文件。请注意,可以设置这些选项以进行修改。-b
: 二进制模式,将设置一些选项,以便可以编辑二进制文件或可执行文件。-l
:Lisp
模式,将lisp
和showmatch
选项设置为开。-C
: 兼容的,设置兼容
选项,这将使vim
的行为与vi
类似,即使存在.vimrc
文件。-N
: 不兼容模式,重置兼容选项,即使.vimrc
文件不存在,这也会使vim
表现得更好,但与vi
的兼容性较差。-V[N][fname]
: 详细信息,提供有关哪些文件来源以及用于读取和写入viminfo
文件的消息,可选数字N
是详细的值,默认值是10
。-D
: 调试模式,从脚本执行第一个命令时转到调试模式。-n
: 不会使用交换文件,这样崩溃后的恢复将是不可能的。如果要在非常慢的介质例如软盘上编辑文件,此功能非常方便。-r
: 列出交换文件,以及有关使用它们进行恢复的信息。-r <file name>
: 恢复模式,交换文件用于恢复崩溃的编辑会话,交换文件与附加.swp
的文本文件具有相同的文件名。-L
: 与-r
相同。-A
: 如果vim
是在阿拉伯语支持下编译的,用于编辑从右向左的文件和阿拉伯语键盘映射,则此选项将以阿拉伯语模式启动vim
,即设置ARABIC
,否则将发出错误消息,vim
将中止。-H
: 以希伯来语模式启动。-F
: 以波斯语模式开始。-T <terminal>
: 告诉vim
正在使用的终端的名称,仅在自动方式无效时才需要,应该是vim
内置已知的终端,或在termcap
或terminfo
文件中定义的终端。--not-a-term
: 输入或输出不是终端时跳过警告。-u <vimrc>
: 使用文件.vimrc
中的命令进行初始化,将跳过所有其他初始化。使用此选项可编辑特殊类型的文件,也可以用来跳过所有的初始化,方法是给名称NONE
。 initialization”。--noplugin
: 跳过加载插件,由-u
表示无。-p[N]
: 打开N
个标签页,如果省略N
,则为每个文件打开一个标签页。-o[N]
: 打开堆叠的N
个窗口,当省略N
时,为每个文件打开一个窗口。-O[N]
: 并排打开N
个窗口,如果省略N
,则为每个文件打开一个窗口。+
: 从文件末尾开始。+<lnum>
: 对于第一个文件,光标将定位在num
行上。如果缺少num
,则光标将位于最后一行。--cmd <command>
: 在加载任何.vimrc
文件之前执行<command>
。-c <command>
: 加载第一个文件后执行<command>
。-S <session>
: 加载第一个文件后源文件的<session>
。-s <scriptin>
: 从文件<scriptin>
中读取普通模式命令。-w <scriptout>
: 将所有键入的命令附加到文件<scriptout>
。-W <scriptout>
: 将所有键入的命令写入文件<scriptout>
。-x
: 编辑加密文件。--startuptime <file>
: 将启动定时消息写入<file>
。-i <viminfo>
: 使用<viminfo>
而不是.viminfo
。-h or --help
: 输出帮助信息。--version
: 输出版本信息。
示例
对file.txt
启动ex
编辑模式。
1 | ex file.txt |
显示总行数、当前行号。
1 | = | .= |
打印文件前3
行内容。
1 | 1,3 p |
删除第1
到第2
行,切换回vi
模式查看效果。
1 | 1,2 d |
移动第1
、2
行到第3
行下边。
1 | 1,2 m 3 |
复制第1
、2
行到第3
行下边。
1 | 1,2 co 3 |
expr命令
expr
命令计算给定表达式并显示其相应的输出,其被使用用于:基本操作像加法、减法、乘法、除法和模等等整数,求值正则表达式,字符串操作,如子字符串,字符串长度等。
语法
1 | expr [EXPRESSION | OPTION] |
参数
--help
: 输出帮助信息。--version
: 输出版本信息。
表达式
ARG1 | ARG2
:ARG1
,如果它既不为null
也不为0
,否则为ARG2
。ARG1 & ARG2
: 如果两个参数都不为null
或0
,则为ARG1
,否则为0
。ARG1 < ARG2
:ARG1
小于ARG2
。ARG1 <= ARG2
:ARG1
小于等于ARG2
。ARG1 = ARG2
:ARG1
等于ARG2
。ARG1 != ARG2
:ARG1
与ARG2
不相等。ARG1 >= ARG2
:ARG1
大于或等于ARG2
。ARG1 > ARG2
:ARG1
大于ARG2
。ARG1 + ARG2
:ARG1
和ARG2
的算术和。ARG1 - ARG2
:ARG1
和ARG2
的算术差。ARG1 * ARG2
:ARG1
和ARG2
的算术乘积。ARG1 / ARG2
:ARG1
除以ARG2
的算术商。ARG1 % ARG2
:ARG1
除以ARG2
的算术余数。STRING : REGEXP
: 正则表达式REGEXP
在STRING
中的定位模式匹配。match STRING REGEXP
: 与STRING
相同REGEXP
。substr STRING POS LENGTH
:STR
的子字符串,POS
从1
开始计数。index STRING CHARS
: 找到任何CHARS
的STRING
中的索引,或者为0
。length STRING
: 字符串长度。+ TOKEN
: 将TOKEN
解释为字符串,即使它是像match
这样的关键字或像/
这样的操作符。( EXPRESSION )
:EXPRESSION
的值。
示例
计算12 + 9
。
1 | expr 12 + 9 |
计算12 * 2
。
1 | expr 12 \* 2 |
对shell
脚本中的变量执行操作,注意保存成.sh
文件并赋权限755
再执行。
1 | echo "Enter two numbers" |
egrep命令
egrep
命令用于模式搜索,属于grep
函数族,工作原理和grep -E
一样,其将模式视为扩展正则表达式,并打印出与模式匹配的行,如果有多个文件具有匹配的模式,其还能显示每行的文件名。
语法
1 | egrep [options] PATTERN [FILE...] |
参数
-A NUM, --after-context=NUM
: 在匹配行之后打印尾部上下文的NUM
行,在相邻的匹配组之间放置包含--
的行。-a, --text
: 像处理文本一样处理二进制文件,这相当于--binary files=text
选项。-B NUM, --before-context=NUM
: 在匹配行之前打印前导上下文的NUM
行,在相邻的匹配组之间放置包含--
的行。-C NUM, --context=NUM
: 打印输出上下文的NUM
行,在相邻的匹配组之间放置包含--
的行。-b, --byte-offset
: 打印输入文件中每行输出之前的字节偏移量。--binary-files=TYPE
: 如果文件的前几个字节指示该文件包含二进制数据,则假定该文件为类型类型。默认情况下,TYPE
是binary
,grep
通常输出一行消息,说明二进制文件匹配,或者不输出消息(如果不匹配)。如果TYPE
不匹配,grep
假设二进制文件不匹配,这相当于-I
选项。如果TYPE
是text
,grep
会像处理文本一样处理二进制文件,这相当于-a
选项。此外grep--binary files=text
可能会输出二进制垃圾,如果输出是终端,并且终端驱动程序将其中的一些解释为命令,则会产生严重的副作用。--colour[=WHEN], --color[=WHEN]
: 在匹配字符串周围加上标记find in GREP_COLOR
环境变量,WHEN
可以是never
、always
、auto
。-c, --count
: 禁止正常输出,而是为每个输入文件打印匹配行的计数,使用-v,--invert match
选项,计算不匹配的行数。-D ACTION, --devices=ACTION
: 如果输入文件是设备、FIFO
或套接字,使用ACTION
来处理它。默认情况下,ACTION
是read
,这意味着设备的读取就像它们是普通文件一样,如果ACTION
为skip
,则设备将自动跳过。-d ACTION, --directories=ACTION
: 如果输入文件是目录,使用ACTION
来处理它。默认情况下,ACTION
是read
,这意味着目录的读取就像它们是普通文件一样,如果ACTION
是skip
,则目录将被自动跳过,如果ACTION
是递归的,grep
将递归地读取每个目录下的所有文件,这相当于-r
选项。-e PATTERN, --regexp=PATTERN
: 使用PATTERN
作为模式,用于保护以-
开头的模式。-F, --fixed-strings
: 将PATTERN
解释为固定字符串的列表,用换行符分隔,这些字符串可以匹配。-P, --perl-regexp
: 将PATTERN
解释为Perl
正则表达式。-f FILE, --file=FILE
: 从FILE
获取模式,每行一个,空文件包含零个模式,因此不匹配。-G, --basic-regexp
: 将PATTERN
解释为基本正则表达式,这是默认值。-H, --with-filename
: 打印每个匹配项的文件名。-h, --no-filename
: 当搜索多个文件时,禁止在输出中使用文件名前缀。--help
: 显示帮助文件。-I
: 处理二进制文件,就像它不包含匹配数据一样,这相当于--binary-files=without-match
选项。-i, --ignore-case
: 忽略PATTERN
和输入文件中的大小写区别。-L, --files-without-match
: 禁止正常输出,而是打印通常不会从中打印输出的每个输入文件的名称,扫描将在第一个匹配时停止。-l, --files-with-matches
: 禁止正常输出,而是打印通常从中打印输出的每个输入文件的名称,扫描将在第一个匹配时停止。-m NUM, --max-count=NUM
: 在匹配行数之后停止读取文件。如果输入是来自常规文件的标准输入,并且输出NUM
个匹配行,grep
确保标准输入在退出之前定位到最后一个匹配行之后,而不管是否存在后续上下文行。这使调用进程能够继续(恢复)搜索,当grep
在NUM个匹配行之后停止时,它输出任何后面的上下文行。当-c
或--count
选项也被使用时,grep
不会输出大于NUM
的计数。当-v
或--invert match
选项也被使用时,grep
会在输出NUM
个不匹配的行之后停止。--mmap
: 如果可能,使用mmap
系统调用来读取输入,而不是默认的读取系统调用。在某些情况下,--mmap
可以产生更好的性能。但是,如果在grep
操作时输入文件收缩,或者发生I/O
错误,那么--mmap
可能会导致未定义的行为(包括核心转储)。-n, --line-number
: 在输出的每一行前面加上输入文件中的行号。-o, --only-matching
: 只显示匹配行中与模式匹配的部分。--label=LABEL
: 将实际来自标准输入的输入显示为来自文件LABEL
的输入。这对于zgrep
之类的工具尤其有用,例如gzip -cd foo.gz | grep -H --label = foo
。--line-buffered
: 使用行缓冲,这可能会导致性能损失。-q, --quiet, --silent
: 保持安静,不向标准输出写入任何内容。如果找到任何匹配项,即使检测到错误,也立即退出,状态为零。-R, -r, --recursive
: 递归地读取每个目录下的所有文件,这相当于-d recurse
选项。-s, --no-messages
: 禁止显示有关不存在或不可读文件的错误消息。-U, --binary
: 将文件视为二进制文件。默认情况下,在MS-DOS
和MS Windows
下,grep
通过查看从文件中读取的第一个32KB
的内容来猜测文件类型。如果grep
确定文件是文本文件,它将从原始文件内容中删除CR
字符(以使带有^
和$
的正则表达式正常工作)。指定-U
会推翻这种猜测,导致读取所有文件并逐字传递给匹配机制,如果文件是一个文本文件,每行末尾都有CR/LF
对,这将导致某些正则表达式失败。此选项对MS-DOS
和MS Windows
以外的平台无效。-u, --unix-byte-offsets
: 报告Unix
样式的字节偏移量,此开关使grep
报告字节偏移,就好像该文件是Unix
样式的文本文件一样,即去除了CR
字符。这将产生与在Unix
机器上运行grep
相同的结果,除非也使用-b
选项,否则该选项无效。它对除MS-DOS
和MS-Windows
以外的平台没有影响。-V, --version
: 输出版本信息。-v, --invert-match
: 反转匹配的意义,以选择不匹配的行。-w, --word-regexp
: 只选择与表单中包含的单词匹配的行。测试是匹配的子串必须在行的开头,或者前面有非单词组成字符,同样,它必须位于行的末尾,或者后跟非单词组成字符。单词组成字符是字母、数字和下划线。-x, --line-regexp
: 仅选择与整行完全匹配的那些匹配项。-Z, --null
: 输出零字节(ASCII NULL
字符),而不是通常在文件名后的字符。例如grep -lZ
在每个文件名之后输出一个零字节,而不是通常的换行符。即使存在包含不寻常字符(例如换行符)的文件名,此选项也可以使输出明确。此选项可与find -print0
、perl -0
、sort -z
和xargs -0
等命令一起使用,以处理任意文件名,即使是包含换行符的文件名。
示例
hello.c
文件内容如下:
1 |
|
匹配带有Hello
的行。
1 | egrep Hello hello.c |
匹配带有Hello
行的数量。
1 | egrep -c Hello hello.c |
反转匹配的意义,选择不匹配Hello
的行。
1 | egrep -v Hello hello.c |
匹配带有i
的行并忽略大小写。
1 | egrep -i I hello.c |
仅输出与文件整行匹配的行。
1 | egrep -x " return 0;" hello.c |
匹配带有Hello
的行并输出行号。
1 | egrep -n Hello hello.c |
递归匹配当前目录下所有文件中能够匹配h*
的文件,输出行号并忽略大小写,注意实际在终端中匹配成功的位置会使用红色字体标注。
1 | egrep -rni "h*" ./ |
ed命令
ed
命令是文本编辑器,用于文本编辑,ed
是Linux
中功能最简单的文本编辑程序,一次仅能编辑一行而非全屏幕方式的操作。ed
命令并不是一个常用的命令,一般使用比较多的是vi
指令,但ed
文本编辑器对于编辑大文件或对于在shell
脚本程序中进行文本编辑很有用。如果使用文件名参数调用ed
,则文件的副本将被读入编辑器的缓冲区,对该副本进行更改,而不是直接对文件本身进行更改。退出ed
后,任何未使用w
命令显式保存的更改都将丢失。编辑有两种不同的模式:命令和输入。第一次调用时,ed
处于命令模式,在这种模式下,命令从标准输入中读取并执行以操作编辑器缓冲区的内容。
语法
1 | ed [options] [file] |
参数
-G, --traditional
: 在兼容模式下运行。-l, --loose-exit-status
: 即使命令失败,也以零状态退出(正常终止)。例如如果将ed
设置为crontab
的编辑器,则此选项很有用。-p, --prompt=STRING
:ed
通常在空白行等待用户输入,此选项将使用字符串作为提示。-r, --restricted
: 在受限模式下运行。-s, --quiet, --silent
: 禁止诊断。-v, --verbose
: 详细操作。-h, --help
: 显示帮助信息。-V, --version
: 显示版本信息。
状态码
0
表示正常退出。1
表示环境问题,例如文件未找到、无效标志、I/O
错误等等。2
表示损坏或无效的输入文件。3
表示内部一致性错误(如软件bug
),导致ed
死机。
示例
比较完整的编辑示例。
1 | ed |
1 | ed # 激活 ed 命令 |
1 | cat readme.txt |
diff命令
diff
命令能够比较给定的两个文件的不同,如果使用-
代替文件参数,则要比较的内容将来自标准输入,diff
命令是以逐行的方式比较文本文件的异同处,如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
语法
1 | diff [-abBcdefHilnNpPqrstTuvwy][-<line>][-C <line>][-D <macro>][-I <string>][-S <file>][-W <width>][-x <file or folder>][-X <file>][--help][--left-column][--suppress-common-line][file or folder][file or folder] |
参数
-a
或--text
:diff
预设只会逐行比较文本文件。-b
或--ignore-space-change
: 不检查空格字符的不同。-B
或--ignore-blank-lines
: 不检查空白行。-c
: 显示全部内容,并标出不同之处。-C <line>
或--context <line>
: 与执行-c-<line>
指令相同。-d
或--minimal
: 使用不同的演算法,以小的单位来做比较。-D <macro>
或ifdef <macro>
: 此参数的输出格式可用于前置处理器巨集。-e
或--ed
: 此参数的输出格式可用于ed
的script
文件。-f
或-forward-ed
: 输出的格式类似ed
的script
文件,但按照原来文件的顺序来显示不同处。-H
或--speed-large-files
: 比较大文件时,可加快速度。-l<string>
或--ignore-matching-lines<string>
: 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。-i
或--ignore-case
: 不检查大小写的不同。-l
或--paginate
: 将结果交由pr
程序来分页。-n
或--rcs
: 将比较结果以RCS
的格式来显示。-N
或--new-file
: 在比较目录时,若文件A
仅出现在某个目录中,预设会显示Only in <folder>
,文件A
若使用-N
参数,则diff
会将文件A
与一个空白的文件比较。-p
: 若比较的文件为C
语言的程序码文件时,显示差异所在的函数名称。-P
或--unidirectional-new-file
: 与-N
类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。-q
或--brief
: 仅显示有无差异,不显示详细的信息。-r
或--recursive
: 比较子目录中的文件。-s
或--report-identical-files
: 若没有发现任何差异,仍然显示信息。-S <file>
或--starting-file <file>
: 在比较目录时,从指定的文件开始比较。-t
或--expand-tabs
: 在输出时,将tab
字符展开。-T
或--initial-tab
: 在每行前面加上tab
字符以便对齐。-u
,-U <columns>
或--unified=<columns>
: 以合并的方式来显示文件内容的不同。-v
或--version
: 显示版本信息。-w
或--ignore-all-space
: 忽略全部的空格字符。-W <width>
或--width <width>
: 在使用-y
参数时,指定栏宽。-x <file or folder>
或--exclude <file or folder>
: 不比较选项中所指定的文件或目录。-X<file>
或--exclude-from<file>
: 您可以将文件或目录类型存成文本文件,然后在<file>
中指定此文本文件。-y
或--side-by-side
: 以并列的方式显示文件的异同之处。--help
: 显示帮助。--left-column
: 在使用-y
参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。--suppress-common-lines
: 在使用-y
参数时,仅显示不同之处。
示例
比较file.txt
与file2.txt
文件的差异,仅输出不同之处。
1 | diff file.txt file2.txt |
比较file.txt
与file2.txt
文件的差异,并排输出全部内容,|
表示前后2
个文件内容有不同,<
表示后面文件比前面文件少了1
行内容,>
表示后面文件比前面文件多了1
行内容。
1 | diff -y file.txt file2.txt |
比较file.txt
与自定义输入内容的差异,输入内容后按Ctrl+D
输出EOF
标识后结束输入。
1 | diff -y file.txt - |
diffstat命令
diffstat
命令根据diff
的比较结果,统计各文件的插入、删除、修改等差异计量。
语法
1 | diffstat [options] [files] |
参数
-c
: 输出的每一行都以#
作为前缀,使其成为Shell
脚本的注释行。-C
: 添加SGR
颜色转义序列以突出显示直方图。-e
: 将标准错误重定向到file
。-f <num>
: 指定直方图的格式,0
仅显示插入+
,删除-
或修改!
的值和单个直方图代码,1
正常输出,2
用点填充直方图,4
用直方图打印每个值,任何非零值都会给出直方图,点和单个值可以组合。-H
: 打印使用情况消息并退出。-k
: 禁止合并报告中的文件名。-l
: 仅列出文件名,不生成直方图。-n <file length>
: 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。-o <file>
: 将标准输出重定向到file
。-p <file length>
: 与-n
参数相同,但此处的<file length>
包括了文件的路径。-r
: 提供对直方图所示数据的可选舍入,而不是通过误差调整来截断,0
是默认值,不进行舍入,但累积的错误将添加到以下列,1
舍入数据,2
对数据进行舍入并调整直方图,以确保即使有差异通常会四舍五入也存在差异。-t
: 覆盖直方图,生成逗号分隔值的输出。-u
: 禁止在报告中对文件名进行排序。-v
: 显示进度,例如如果将输出重定向到文件,则将进度消息写入标准错误。-w
: 指定输出时栏位的宽度。-V
: 显示版本信息。
示例
统计diff
的比较结果的差异信息。
1 | diff file.txt file2.txt | diffstat -v |
统计diff
的比较结果的差异信息,仅列出文件名,不生成直方图。
1 | diff file.txt file2.txt | diffstat -l |
统计diff
的比较结果的差异信息,指定直方图的最大宽度。
1 | diff file.txt file2.txt | diffstat -w 11 |
cut命令
cut
命令用来显示行中的指定部分,其从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出,如果不指定File
参数,cut
命令将读取标准输入,该命令常用的两项功能,一是用来显示文件的内容,它依次读取由参数file
所指明的文件,将它们的内容输出到标准输出上,其二是连接两个或多个文件,如cut f1 f2 > f3
将把文件f1
和几的内容合并起来,然后通过输出重定向符>
的作用,将它们放入文件f3
中,当文件较大时,文本在屏幕上迅速闪过,也就是滚屏现象,为了控制滚屏,可以执行Ctrl+S
按键停止滚屏,按Ctrl+Q
键可以恢复滚屏,按Ctrl+C
键终止该命令的执行等操作。
语法
1 | cut [OPTION]... [FILE]... |
参数
-b
: 仅显示行中指定直接范围的内容。-c
: 仅显示行中指定范围的字符。-d
: 指定字段的分隔符,默认的字段分隔符为TAB
。-f
: 显示指定字段的内容。-n
: 与-b
选项连用,不分割多字节字符。--complement
: 补足被选择的字节、字符或字段。--out-delimiter=<delimiter>
: 指定输出内容是的字段分割符。--help
: 显示指令的帮助信息。--version
: 显示指令的版本信息。
示例
截取/tmp/file.txt
文件每一行的第3
个字符。
1 | cat /tmp/file.txt | cut -c 3 |
截取/tmp/file.txt
文件每一行的第3-6
个字符。
1 | cat /tmp/file.txt | cut -c 3-6 |
截取/tmp/file.txt
文件每一行的第3
个字符到结尾字符。
1 | cat /tmp/file.txt | cut -c 3- |
curl命令
curl
是一个命令行工具,用于使用任何受支持的协议HTTP
、FTP
、IMAP
、POP3
、SCP
、SFTP
、SMTP
、TFTP
、TELNET
、LDAP
或FILE
向网络服务器传输数据或从网络服务器传输数据,其被设计成无需用户交互即可工作,因此非常适合在shell
脚本中使用,该软件提供代理支持、用户身份验证、FTP
上传、HTTP posting
、SSL
连接、cookie
、文件断点传输、metalink
等功能。
语法
1 | curl [options] [URL...] |
参数
-#, --progress-bar
: 让curl
将进度显示为一个简单的进度条,而不是标准的、更具信息性的计量器。-:, --next
: 告诉curl
对以下URL
和相关选项使用单独的操作,这允许您发送多个URL
请求,每个请求都有自己的特定选项,例如不同的用户名或自定义请求,在7.36.0
中添加`。-0, --http1.0
:HTTP
,告诉curl
使用HTTP 1.0
版本,而不是内部首选的HTTP 1.1
。--http1.1
:HTTP
,告诉curl
使用HTTP
版本1.1
,这是内部默认版本,在7.33.0
添加。--http2
:HTTP
,告诉curl
使用HTTP 2
发出请求,这需要构建底层libcurl
来支持它,在7.33.0
添加。--no-npn
: 禁用NPN TLS
扩展,如果libcurl
是使用支持NPN
的SSL
库构建的,则NPN
默认启用,支持HTTP 2
的libcurl
使用NPN
在https
会话期间与服务器协商对HTTP 2
的支持,在7.36.0
添加。--no-alpn
: 禁用ALPN TLS
扩展,如果libcurl
是用一个支持ALPN
的SSL
库构建的,那么ALPN
默认启用,支持HTTP 2
的libcurl
使用ALPN
在https
会话期间与服务器协商对HTTP 2
的支持,在7.36.0
添加。-1, --tlsv1
:SSL
,强制curl
在与远程TLS
服务器协商时使用tls1.x
版本,您可以使用选项--tlsv1.0
、--tlsv1.1
和--tlsv1.2
来更精确地控制TLS
版本。-2, --sslv2
:SSL
,当与远程SSL
服务器协商时,强制curl
使用SSL version 2
。-3, --sslv3
:SSL
,当与远程SSL
服务器协商时,强制curl
使用SSL version 3
。-4, --ipv4
: 如果curl
能够将一个地址解析为多个IP
版本(如果它支持IPv6
),则此选项告诉curl
仅将名称解析为IPv4
地址。-6, --ipv6
: 如果curl
能够将一个地址解析为多个IP
版本(如果它支持IPv6
),则此选项告诉curl
仅将名称解析为IPv6
地址。-a, --append
:FTP/SFTP
,当在FTP
上传中使用时,这将告诉curl
追加到目标文件,而不是覆盖它,如果文件不存在,就创建它,注意,这个选项会被一些SSH
服务器忽略,包括OpenSSH
。-A, --user-agent <agent string>
:HTTP
,指定要发送到HTTP
服务器的用户代理字符串,如果这个字段没有设置为Mozilla/4.0
,一些做得不好的cgi
就会失败,要对字符串中的空格进行编码,请用单引号将字符串括起来,当然,这也可以通过-H,-header
选项进行设置,如果多次使用此选项,将使用最后一个选项。--anyauth
:HTTP
,告诉curl
自己找出身份验证方法,并使用远程站点声称支持的最安全的方法,这是通过首先执行请求并检查响应头来完成的,因此可能会导致额外的网络往返,这是用来代替设置特定的身份验证方法的,您可以使用--basic
、--digest
、--ntlm
和--negotiate
来实现,请注意,如果从stdin
上传数据,则不建议使用--anyauth
,因为它可能需要发送两次数据,然后客户端必须能够倒带,如果从stdin
上传时需要,上传操作将失败。-b, --cookie <name=data>
:HTTP
,将数据作为cookie
传递到HTTP
服务器,它应该是以前在Set Cookie:
行中从服务器接收到的数据,数据格式应为NAME1=VALUE1; NAME2=VALUE2
,如果行中没有使用=
符号,则会将其视为用于读取以前存储的cookie
行的文件名,如果这些行匹配,则应在此会话中使用,使用这个方法还可以激活cookieparser
,它也会让curl
记录传入的cookie
,如果您将这个方法与-L,-location
选项结合使用,这可能会很方便,要从中读取cookie
的文件的文件格式应该是纯HTTP
头或Netscape/Mozilla cookie
文件格式,请注意,用-b, --cookie
指定的文件仅用作输入,文件中不会存储Cookie
,要存储cookie
,请使用-c, --cookiejar
选项,或者甚至可以使用-D, --dump-header
将HTTP
头保存到文件中,如果多次使用此选项,将使用最后一个选项。-B, --use-ascii
:FTP/LDAP
,启用ASCII
传输,对于FTP
,这也可以通过使用以type=A
结尾的URL
来实现,对于win32
系统,此选项使发送到标准输出的数据处于文本模式。--basic
:HTTP
,告诉curl
使用HTTP
基本身份验证,这是默认值,并且此选项通常是无意义的,除非您使用它来重写先前设置的选项,该选项设置了不同的身份验证方法,例如--ntlm
、--digest
或--negotiate
。-c, --cookie-jar <file name>
:HTTP
,指定在完成操作后要将所有cookie
写入哪个文件,curl
写入以前从指定文件读取的所有cookie
以及从远程服务器接收的所有cookie
,如果没有已知的cookies
,则不会写入任何文件,文件将使用Netscape cookie
文件格式写入,如果将文件名设置为单破折号-
,则cookie
将写入标准输出,此命令行选项将激活生成curl
记录并使用cookie
的cookie
引擎,另一种激活它的方法是使用-b, --cookie
选项,如果不能创建或写入cookiejar
,整个curl
操作不会失败,甚至不会清楚地报告错误,使用-v
会显示一个警告,但这是关于这种可能致命的情况的唯一可见反馈,如果多次使用此选项,将使用最后指定的文件名。-C, --continue-at <offset>
: 以给定的偏移量继续/
恢复以前的文件传输,给定的偏移量是将被跳过的确切字节数,从源文件的开头开始计算,然后再将其传输到目标,如果与上载一起使用,curl
将不使用FTP
服务器命令大小,使用-C -
告诉curl
自动找出在哪里/
如何继续传输,然后它使用给定的输出/
输入文件来解决这个问题,如果多次使用此选项,将使用最后一个选项。--ciphers <list of ciphers>
:SSL
,指定要在连接中使用的密码,密码列表必须指定有效的密码,此为的SSL
密码列表详细信息http://www.openssl.org/docs/apps/ciphers.html
,NSS
密码的实现方式与OpenSSL
和GnuTLS
不同,NSS
密码的完整列表位于以下URL
的NSSCipherSuite
条目中http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives
,如果多次使用此选项,将使用最后一个选项。--compressed
:HTTP
,使用curl
支持的算法之一请求压缩响应,并保存未压缩的文档,如果使用此选项并且服务器发送不受支持的编码,curl
将报告错误。--connect-timeout <seconds>
: 允许连接到服务器的最长时间(秒),这只会限制连接阶段,一旦curl
连接了,这个选项就不再有用了,自7.32.0
以来,此选项接受十进制值,但实际超时的精度将随着指定超时的十进制精度增加而降低,另请参见-m, -max time
选项,如果多次使用此选项,将使用最后一个选项。--create-dirs
: 当与-o
选项结合使用时,curl
将根据需要创建必要的本地目录层次结构,此选项创建与-o
选项一起提到的dir
,而不是其他选项,如果-o
文件名不使用dir
,或者它提到的dir
已经存在,则不会创建dir
,要在使用FTP
或SFTP
时创建远程目录,请尝试--FTP create dirs
。--crlf
:FTP
,上传时将LF
转换为CRLF
,适用于MVS (OS/390)
。--crlfile <file>
:HTTPS/FTPS
,提供一个使用PEM
格式的文件,其中包含一个证书吊销列表,该列表可以指定要被视为吊销的对等证书,如果多次使用此选项,将使用最后一个选项,在7.19.7
增加。-d, --data <data>
:HTTP
,将POST
请求中指定的数据发送到HTTP
服务器,就像用户填写HTML
表单并按下submit
按钮时浏览器所做的那样,这将导致curl
使用内容类型application/x-www-form-urlencoded
将数据传递给服务器,与-F, --form
比较,-d, --data
与--data ascii
相同,要发布纯二进制的数据,应该改用--data binary
选项,要对表单字段的值进行URL
编码,可以使用--data urlencode
,如果这些选项中的任何一个在同一命令行上被多次使用,则指定的数据段将与分隔的&
符号合并在一起,因此,使用-d name=daniel -d skill=lousy
将生成一个类似name=daniel&skill=lousy
的post
块,如果数据以@
开头,其余的应该是从中读取数据的文件名,如果要从stdin
读取数据,也可以指定多个文件,例如,从名为foobar
的文件发布数据将使用--data@foobar
完成,当--data
被告知从这样的文件中读取时,回车符和换行符将被去除。-D, --dump-header <file>
: 将协议头写入指定的文件,当您想存储HTTP
站点发送给您的头文件时,使用此选项非常方便,通过使用-b, -cookie
选项,可以在第二次curl
调用中读取来自头的cookie
,但是,-c,-cookie jar
选项是存储cookie
的更好方法,在FTP
中使用时,FTP
服务器响应行被认为是headers
,因此保存在那里,如果多次使用此选项,将使用最后一个选项。--data-ascii <data>
: 请参见-d, --data
。--data-binary <data>
:HTTP
,这将完全按照指定的方式发布数据,无需任何额外处理,如果数据以@
开头,其余的应该是文件名,数据的发布方式与--dataascii
类似,只是保留了换行符和回车符,并且从不进行转换,如果多次使用此选项,则第一个选项后面的选项将附加-d, -data
中所述的数据。--data-urlencode <data>
:HTTP
,这会发布数据,与其他--data
选项类似,但会执行URL
编码,在7.18.0
中添加,为了符合CGI
,<data>
部分应以名称开头,后跟分隔符和内容规范,可以使用以下语法之一将<data>
部分传递给curl
:content
: 这将使curl URL
编码内容并将其传递,请小心,使内容不包含任何=
或@
符号,因为这将使语法与以下其他情况之一匹配。=content
: 这将使curl URL-encode
编码内容并将其传递,前面的=
符号不包括在数据中。name=content
: 这将使curl URL
编码内容部分并将其继续传递,请注意,名称部分应该已经过URL
编码。@filename
: 这将使卷曲加载来自给定文件(包括任何换行符)的数据,对该数据进行URL
编码并在POST
中传递。name@filename
: 这将使curl
从给定的文件(包括任何换行符)加载数据,URL
对该数据进行编码并在POST
中传递,名称部分附加了一个等号,结果是name=urlencoded
文件内容,注意,名称应该已经是URL
编码的。
--delegation LEVEL
: 设置LEVEL
,告诉服务器在处理用户凭据时允许委托什么,通常与GSS/kerberos
一起使用。none
: 不允许任何授权。policy
: 委托当且仅当Kerberos
服务票证中设置了OK-AS-DELEGATE
标志时,这是领域策略的问题。always
: 无条件地允许服务器进行委托。
--digest
:HTTP
,启用HTTP
摘要身份验证,这是一种身份验证方案,可防止密码以明文形式通过有线发送,将此选项与正常的-u, -user
选项结合使用,以设置用户名和密码,如果多次使用此选项,则只使用第一个选项。--disable-eprt
:FTP
,告诉curl
在执行活动FTP
传输时禁用EPRT
和LPRT
命令,curl
通常会首先尝试使用EPRT
,然后在使用PORT
之前使用LPRT
,但是有了这个选项,它会立即使用PORT
,EPRT
和LPRT
是原始FTP
协议的扩展,可能无法在所有服务器上工作,但它们以比传统的PORT
命令更好的方式实现了更多功能,--eprt
可以用来再次显式地启用eprt
,并且--no eprt
是--disable eprt
的别名,禁用EPRT
只会更改活动行为,如果要切换到被动模式,则不需要使用-P, -ftp
端口或强制使用-ftp pasv
。--dns-interface <interface>
: 告诉curl
通过<interface>
发送传出的DNS
请求,此选项对应于--interface
(不影响DNS
),提供的字符串必须是接口名称(不是地址),此选项要求libcurl
是使用支持此操作的解析器后端构建的,c-ares
后端是唯一这样的,在7.33.0
中添加。--dns-ipv4-addr <ip-address>
: 告诉curl
在发出ipv4dns
请求时绑定到<ip address>
,以便DNS
请求源自此地址,参数应为单个IPv4
地址,此选项要求libcurl
是使用支持此操作的解析器后端构建的,c-ares
后端是唯一这样的,在7.33.0
中添加。--dns-ipv6-addr <ip-address>
: 在发出ipv6dns
请求时,告诉curl
绑定到<ip address>
,以便DNS
请求源自此地址,参数应为单个IPv6
地址,此选项要求libcurl
是使用支持此操作的解析器后端构建的,c-ares
后端是唯一这样的,在7.33.0
中添加。--dns-servers <ip-address,ip-address>
: 设置要使用的DNS
服务器列表,而不是系统默认值,IP
地址列表应以逗号分隔,端口号也可以选择在每个IP
地址后给出<Port number>
,此选项要求libcurl
是使用支持此操作的解析器后端构建的,c-ares
后端是唯一这样的,在7.33.0
中添加。-e, --referer <URL>
:HTTP
,将referer Page
信息发送到HTTP
服务器,当然,这也可以用-H, -header
标志来设置,当与-L, -location
一起使用时,您可以在--referer URL
后面附加; auto
,使curl
在location:header
后面自动设置上一个URL
,auto
字符串可以单独使用,即使您没有设置初始--referer
,如果多次使用此选项,将使用最后一个选项。-E, --cert <certificate[:password]>
:SSL
,告诉curl
在使用HTTPS
、FTPS
或其他基于SSL
的协议获取文件时使用指定的客户端证书文件,如果使用安全传输,证书必须为PKCS#12
格式,如果使用任何其他引擎,证书必须为PEM
格式,如果未指定可选密码,将在终端上查询该密码,注意,这个选项假设一个certificate
是私钥和私钥连接在一起的,请参见--cert
和--key
以独立地指定它们。--engine <name>
: 选择用于密码操作的OpenSSL
加密引擎,使用--engine list
打印构建时支持的引擎的列表,请注意,并非所有engine
在运行时都可用。--environment
:RISC OS ONLY
,使用-w
选项支持的名称设置一系列环境变量,以便在运行curl
之后更容易地提取有用的信息。--egd-file <file>
:SSL
,指定守护进程套接字的路径名,套接字用于为SSL
连接的随机引擎播种,另请参见--random file
选项。--cert-type <type>
:SSL
,告诉curl
提供的证书是什么类型的证书,PEM
、DER
和ENG
是公认的类型,如果未指定,则假定为PEM
,如果多次使用此选项,将使用最后一个选项。--cacert <CA certificate>
:SSL
,告诉curl
使用指定的证书文件来验证对等方,文件可能包含多个CA
证书,证书必须采用PEM
格式,通常情况下,curl
是使用默认文件构建的,因此此选项通常用于更改默认文件。--capath <CA certificate directory>
:SSL
,告诉curl
使用指定的证书目录来验证对等方,可以通过使用:
分隔多条路径,例如path1:path2:path3
,证书必须是PEM
格式的,如果curl
是基于OpenSSL
构建的,那么目录必须使用OpenSSL
提供的c_rehash
程序进行处理,如果--cacert
文件包含许多CA
证书,那么使用--capath
可以使OpenSSL
支持的curl
比使用--cacert
更有效地建立SSL
连接。如果设置了此选项,将忽略默认的capath
值,如果多次使用,将使用最后一个值。-f, --fail
:HTTP
,服务器错误时无提示失败,即完全没有输出,这样做主要是为了更好地使脚本等更好地处理失败的尝试,在正常情况下,当HTTP
服务器无法传递文档时,它会返回一个HTML
文档,通常会描述原因,此标志将阻止curl
输出该值并返回错误22
,这种方法不是故障安全的,有时会出现不成功的响应代码,特别是在涉及身份验证时,例如响应代码401
和407
。-F, --form <name=content>
:HTTP
,这使得curl
可以模拟用户按下submit
按钮的填充表单,curl
根据rfc2388
使用内容类型multipart/form
数据发布数据,这样就可以上传二进制文件等,若强制内容部分成为文件,在文件名前面加上@
符号,若要仅从文件中获取内容部分,请在文件名前面加上<
符号,@
和<
之间的区别是@
使一个文件作为文件上传附加到post
中,而<
使一个文本字段从一个文件中获取该文本字段的内容。--ftp-account [data]
:FTP
,当FTP
服务器在提供用户名和密码后请求account data
时,使用ACCT
命令发送该数据,在7.13.0
中添加,如果多次使用此选项,将使用最后一个选项。--ftp-alternative-to-user <command>
:FTP
,如果与用户的身份验证和PASS
命令失败,则发送此命令,当使用客户端证书通过FTPS
连接到Tumbleweed
的安全传输服务器时,使用SITE AUTH
将告诉服务器从证书中检索用户名,在7.15.5
增加。--ftp-create-dirs
:FTP/SFTP
,当FTP
或sftp url/
操作使用服务器上当前不存在的路径时,curl
的标准行为是失败,使用此选项,curl
将尝试创建丢失的目录。--ftp-method [method]
:FTP
,控制curl
应该使用什么方法访问FTP(S)
服务器上的文件,在7.15.1
添加,方法参数应该是以下选项之一:multicwd
:curl
对给定URL
中的每个路径部分执行一个CWD
操作,对于深层层次结构,这意味着有很多命令,RFC1738
就是这么说明的,这是默认但最慢的行为。nocwd
:curl
根本不做CWD
,curl
将执行SIZE
、RETR
、STOR
等操作,并为所有这些命令提供到服务器的完整路径,这是最快的行为。singlecwd
:curl
对完整的目标目录执行一个CWD
,然后正常地对文件进行操作,就像multicwd
一样,这比nocwd
更符合标准,但没有multicwd
的全部处理。
--ftp-pasv
:FTP
,数据连接使用被动模式,被动是内部默认行为,但使用此选项可用于覆盖以前的-P/-ftp
端口选项,在7.11.0
中添加,如果多次使用此选项,则只使用第一个选项,撤消强制的被动端口确实是不可行的,但是您必须再次强制执行正确的-P, --ftp
端口,被动模式意味着curl
将首先尝试EPSV
命令,然后再尝试PASV
,除非使用--disable EPSV
。--ftp-skip-pasv-ip
:FTP
,当curl
连接数据连接时,告诉curl
不要使用服务器在响应curl
的PASV
命令时建议的IP
地址,相反,curl
将重用它已经用于控制连接的相同IP
地址,在7.14.2
增加,如果使用PORT
、EPRT
或EPSV
代替PASV
,则此选项无效。--ftp-pret
:FTP
,告诉curl
在PASV
和EPSV
之前发送PRET
命令,某些FTP
服务器(主要是drftpd
)需要这个非标准的命令来显示目录列表,以及在PASV
模式下进行更新和下载,在7.20.x
中添加。--ftp-ssl-ccc
:FTP
,使用CCC
(清除命令通道)在验证后关闭SSL/TLS
层,控制信道通信的其余部分将是未加密的,这允许NAT
路由器跟踪FTP
事务,默认模式为被动模式,其他模式请参见--ftp ssl ccc mode
,在7.16.1
增加。--ftp-ssl-ccc-mode [active/passive]
:FTP
,使用CCC
(清除命令通道)设置CCC
模式,被动模式不会启动关闭,而是等待服务器执行,并且不会从服务器回复关闭,活动模式启动关机并等待服务器的回复,7.16.2
增加。--ftp-ssl-control
:FTP
,FTP
登录需要SSL/TLS
,清除以进行传输,允许安全的身份验证,但非加密的数据传输效率,如果服务器不支持SSL/TLS
,则传输失败,在7.16.0
中添加,目前仍然可以使用,但将在将来的版本中删除。--form-string <name=string>
:HTTP
,类似于--form
,只是命名参数的值字符串是按字面意思使用的,值中的前导@
和<
字符以及; type=
字符串没有特殊含义,如果字符串值可能意外触发--form
的’@
‘或’<
‘特性,请优先使用--form
。-g, --globoff
: 此选项关闭URL globbing
解析器,设置此选项时,可以指定包含字母{}[]
的URL
,而无需curl
本身对其进行解释,请注意,这些字母不是正常的合法URL
内容,但它们应该根据URI
标准进行编码。-G, --get
: 使用此选项时,将使用-d
、-data
、-data binary
或-data urlencode
指定的所有数据在HTTP GET
请求中使用,而不是在其他情况下使用的POST
请求,数据将附加到带有?
的URL
中分离器,如果与-I
结合使用,POST
数据将被附加到带有HEAD
请求的URL
中,如果多次使用此选项,则只使用第一个选项,这是因为撤消GET
没有意义,但是您应该执行您喜欢的替代方法。-H, --header <header>
:HTTP
,向服务器发送HTTP
时请求中包含的额外头,您可以指定任意数量的额外标头,请注意,如果您应该添加一个与curl
将使用的内部头具有相同名称的自定义头,那么将使用外部设置的头而不是内部头,这使得你可以做比curl
更复杂的东西,您不应该在不完全清楚自己在做什么的情况下替换内部设置的头文件,通过在冒号的右侧提供一个没有内容的替换来删除内部标题,如: -H Host:
,如果发送没有值的自定义标头,则其标头必须以分号结尾,例如-H X-custom-header;
以发送X-custom-header:
,curl
将确保您添加/
替换的每个标题都使用正确的行尾标记发送,因此您不应将其添加为标题内容的一部分:
不要添加换行符或回车符,它们只会为您带来麻烦,另请参见-A, --user-agent
和-e, --referer
选项。--hostpubmd5 <md5>
:SCP/SFTP
,传递包含32
个十六进制数字的字符串,字符串应该是远程主机公钥的128
位MD5
校验和,除非md5 sums
匹配,否则curl
将拒绝与主机的连接,在7.17.1
增加。--ignore-content-length
:HTTP
,忽略内容长度标题,这对于运行Apache1.x
的服务器尤其有用,后者将报告大于2G
的文件的不正确内容长度。-i, --include
:HTTP
,在输出中包括HTTP
头,HTTP
头包括服务器名称、文档日期、HTTP
版本等内容。-I, --head
:HTTP/FTP/FILE
,仅获取HTTP
头HTTP
服务器的特点是响应头,它只用来获取文档的头,当用于FTP
或文件时,curl
仅显示文件大小和上次修改时间。--interface <name>
: 使用指定的接口执行操作,您可以输入接口名、IP
地址或主机名,例如: curl
—接口eth0:1 http://www.netscape.com/
如果多次使用此选项,将使用最后一个选项。-j, --junk-session-cookies
:HTTP
,当curl
被告知从给定文件读取cookies
时,此选项将使其放弃所有会话cookies,
这将基本上具有与启动新会话相同的效果,典型的浏览器总是在关闭会话cookie
时丢弃它们。-J, --remote-header-name
:HTTP
,此选项告诉-O, -remote name
选项使用服务器指定的内容配置文件名,而不是从URL
提取文件名,在提供的文件名中还没有尝试解码%-
序列,因此此选项可能会为您提供意外的文件名。-k, --insecure
:SSL
,这个选项显式地允许curl
执行不安全的SSL
连接和传输,所有SSL
连接都试图通过使用默认安装的CA
证书捆绑包来确保安全,这使得所有被认为是不安全的连接失败,除非使用-k, -unsecure
。-K, --config <config file>
: 指定从哪个配置文件读取curl
参数,配置文件是一个文本文件,可以在其中写入命令行参数,然后使用这些参数,就像它们被写入实际的命令行一样,选项及其参数必须在同一配置文件行中指定,并用空格、冒号或等号分隔,可以选择在配置文件中给出长选项名,而不使用初始双破折号,如果是这样,冒号或等号字符可以用作分隔符,如果使用一个或两个破折号指定选项,则选项与其参数之间不能有冒号或等号字符,如果参数要包含空格,则参数必须用引号括起来,在双引号中,下列转义序列可用:\\
、\"
、\t
、\n
、\r
、\v
,任何其他字母前面的反斜杠将被忽略,如果配置行的第一列是#
字符,则该行的其余部分将被视为注释,在配置文件中,每个物理行只写一个选项,将文件名指定为-K, --config
为-,
使curl
从stdin
读取文件。--keepalive-time <seconds>
: 此选项设置在发送keepalive
探测之前连接需要保持空闲的时间以及各个keepalive
探测之间的时间,它目前在提供TCP_KEEPIDLE
和TCP_KEEPINTVL
套接字选项的操作系统上非常有效(指Linux
、最近的AIX
、HP-UX
等),如果使用--no keepalive,
则此选项无效,(在7.18.0
中添加)如果多次使用此选项,将使用最后一个选项,如果未指定,则该选项默认为60
秒。--key <key>
:SSL/SSH
,私钥文件名,允许您在此单独的文件中提供私钥,如果多次使用此选项,将使用最后一个选项。--key-type <type>
:SSL
,私钥文件类型,指定--key
提供的私钥是哪种类型,支持DER
、PEM
和ENG,
如果未指定,则假定为PEM
,如果多次使用此选项,将使用最后一个选项。--krb <level>
:FTP
,启用Kerberos
身份验证和使用,必须输入级别,并且级别应为clear
、safe
、secretary
或private
之一,如果您使用的级别不是这些级别之一,则将改用private
,此选项需要使用kerberos4
支持构建的库,这并不常见,使用-V, -version
查看卷曲是否支持它,如果多次使用此选项,将使用最后一个选项。-l, --list-only
:FTP
,列出FTP
目录时,此开关强制使用仅名称视图,如果用户希望机器解析FTP
目录的内容,这尤其有用,因为普通目录视图不使用标准的外观或格式,这样使用时,该选项将导致向服务器发送NLST
命令,而不是LIST
,注意: 一些FTP
服务器在响应NLST
时只列出文件,它们不包括子目录和符号链接,POP3
从POP3
检索特定电子邮件时,此开关强制执行LIST
命令而不是RETR
,如果用户希望查看服务器上是否存在特定的消息id
以及它的大小,那么这一点特别有用,注意: 当与-X, -request<command>
组合使用时,此选项可用于发送UIDL
命令,因此用户可以使用电子邮件的唯一标识符而不是其消息id
来发出请求,在7.21.5
增加。-L, --location
:HTTP/HTTPS
,如果服务器报告请求的页面已移动到其他位置(用location:header
和3XX
响应代码表示),此选项将使curl
在新位置上重做请求,如果与-i, --include
或-i, --head
一起使用,将显示所有请求页面的标题,使用身份验证时,curl
只将其凭据发送到初始主机,如果重定向将curl
带到另一个主机,它将无法截获用户+
密码,另请参见--location trusted
,了解如何更改此设置,您可以使用--max redirs
选项来限制要遵循的重定向数量,当curl
遵循重定向并且请求不是纯GET
(例如POST
或PUT
)时,如果HTTP
响应是301
、302
或303
,它将使用GET
执行以下请求,如果响应代码是任何其他3xx
代码,curl
将使用相同的未修改方法重新发送以下请求,您可以告诉curl
不要更改non-GET
请求方法,以便在30x
响应之后使用专用选项--post301
、-post302
和-post303
获取。--libcurl <file>
: 将此选项附加到任何普通的curl
命令行,您将获得一个libcurl
,它使用C
源代码编写到文件中,执行与命令行操作相同的操作!如果多次使用此选项,将使用最后给定的文件名,7.16.1
增加。--limit-rate <speed>
: 指定您希望curl
使用的最大传输速率-
用于下载和上载,如果您有一个有限的管道,并且希望您的传输不使用整个带宽,则此功能非常有用,使它比其他情况下慢,给定的速度以字节/
秒为单位,除非附加后缀,加上k
或k
将把数字计为千字节,m
或m
表示兆字节,而g
或g
表示千兆字节,例如: 200K
、3m
和1G
,给定的速率是整个传输过程中计算的平均速度,这意味着curl
可能在短脉冲中使用更高的传输速度,但随着时间的推移,它使用的传输速度不会超过给定的速率,如果您还使用-Y, -speed limit
选项,则该选项将优先,并可能略微削弱速率限制,以帮助保持速度限制逻辑正常工作,如果多次使用此选项,将使用最后一个选项。--local-port <num>[-num]
: 设置用于连接的本地端口号的首选数目或范围,请注意,端口号本质上是一种稀缺资源,有时会很忙,因此将此范围设置为太窄可能会导致不必要的连接设置失败,在7.15.2
增加。--location-trusted
:HTTP/HTTPS
,与-L, --location
类似,但允许向站点可能重定向到的所有主机发送名称+
密码,如果站点将您重定向到要向其发送身份验证信息的站点(在HTTP
基本身份验证的情况下是明文),则这可能会或可能不会导致安全漏洞。-m, --max-time <seconds>
: 允许整个操作所用的最长时间(秒),这有助于防止批处理作业因网络或链接运行缓慢而挂起数小时,自7.32.0
以来,此选项接受十进制值,但实际超时的精度将随着指定超时的十进制精度增加而降低,另请参见--connect timeout
选项,如果多次使用此选项,将使用最后一个选项。--login-options <options>
: 指定服务器身份验证期间要使用的登录选项,您可以使用登录选项指定身份验证期间可能使用的特定于协议的选项,目前只有IMAP
、POP3
和SMTP
支持登录选项,有关登录选项的更多信息,请参阅RFC 2384
、RFC 5092
和IETF
草稿draft-earhart-url-smtp-00.txt
(在7.34.0
中添加),如果多次使用此选项,将使用最后一个选项。--mail-auth <address>
:SMTP
,指定单个地址,这将用于指定正在中继到另一个服务器的已提交邮件的身份验证地址(标识),在7.25.0
中添加。--mail-from <address>
:SMTP
,指定发送给定邮件的单一地址,在7.20.0
中添加。--max-filesize <bytes>
: 指定要下载的文件的最大大小(以字节为单位),如果请求的文件大于这个值,传输将不会开始,curl
将返回退出代码63
,注意:
文件大小在下载之前并不总是已知的,对于这样的文件,即使文件传输最终超过这个给定的限制,这个选项也不起作用,这涉及到FTP
和HTTP
传输。--mail-rcpt <address>
: (SMTP
)指定单个地址、用户名或邮件列表名称,在执行邮件传输时,收件人应指定要将邮件发送到的有效电子邮件地址,(在7.20.0
中添加)执行地址验证(VRFY
命令)时,应将收件人指定为用户名或用户名和域(根据RFC5321
第3.5
节),(在7.34.0
中添加)在执行邮件列表扩展(EXPN
命令)时,应该使用邮件列表名称指定收件人,例如Friends
或London Office
,在7.34.0
中添加。--max-redirs <num>
: 设置允许的最大重定向次数,如果使用-L, --location
,这个选项可以用来防止curl
不断地遵循重定向,默认情况下,限制设置为50
个重定向,将此选项设置为-1
以使其无限,如果多次使用此选项,将使用最后一个选项。--metalink
: 此选项可以告诉curl
将给定的URI
作为Metalink
文件进行解析和处理(支持版本3
和版本4
(RFC 5854
)),并在出现错误(例如文件或服务器不可用)时使用中列出的镜像进行故障转移,它还将在下载完成后验证文件的哈希值,Metalink
文件本身在内存中下载和处理,而不是存储在本地文件系统中。-n, --netrc
: 使curl
扫描用户主目录中的.netrc
(netrc on Windows
)文件以获取登录名和密码,这通常用于UNIX
上的FTP
,如果与HTTP
一起使用,curl
将启用用户身份验证,有关文件格式的详细信息,请参阅netrc(4)
或ftp(1)
,如果文件没有正确的权限,curl
不会报错,环境变量HOME
用于查找主目录,一个快速且非常简单的示例,说明如何设置.netrc
以允许curl
通过FTP
传输到机器host.domain.com
网站用户名为myself
和密码为secret
的应类似于:
机器host.domain.com
网站登录密码密码。-N, --no-buffer
: 禁用输出流的缓冲,在正常的工作环境中,curl
将使用一个标准的缓冲输出流,它将以块的形式输出数据,而不一定是在数据到达时,使用此选项将禁用该缓冲,请注意,这是已记录的否定选项名称,因此,可以使用--buffer
来强制执行缓冲。--netrc-file
: 此选项类似于--netrc
,只是您提供了curl
应该使用的netrc
文件的路径(绝对或相对),每次调用只能指定一个netrc
文件,如果提供了多个--netrc
文件选项,则只使用最后一个选项,(7.21.5
增加)此选项会覆盖--netrc
的任何用法,因为它们是互斥的,如果指定,它还将遵循--netrc optional
。--netrc-optional
: 与--netrc
非常相似,但此选项使.netrc
的用法成为可选的,而不是像--netrc
选项那样是强制性的。--negotiate
:HTTP
,启用协商(SPNEGO
)身份验证,如果要为代理身份验证启用协商(SPNEGO
),请使用--proxy Negotiate
,此选项需要使用GSS-API
或SSPI
支持构建的库,使用-V, -version
查看curl
是否支持GSS-API/SSPI
和SPNEGO
,使用此选项时,还必须提供假-u, -user
选项以正确激活身份验证代码,发送-u
就足够了,因为实际上没有使用-u
选项中的用户名和密码,如果多次使用此选项,则只使用第一个选项。--no-keepalive
: 禁用在TCP
连接上使用keepalive
消息,因为默认情况下curl
会启用它们,请注意,这是已记录的否定选项名称,因此,可以使用--keepalive
来强制执行keepalive
。--no-sessionid
:SSL
,禁用curl
对SSL
会话ID
缓存的使用,默认情况下,所有传输都使用缓存完成,请注意,尽管尝试重用SSL
会话id
不会对任何事情造成伤害,但在野外似乎存在损坏的SSL
实现,可能需要您禁用它才能成功,(在7.16.0
中添加)请注意,这是已记录的否定选项名称,因此,您可以使用--sessionid
来强制执行会话ID
缓存。--noproxy <no-proxy-list>
: 不使用代理(如果指定了代理)的主机的逗号分隔列表,唯一的通配符是一个*
字符,它匹配所有主机,并有效地禁用代理,此列表中的每个名称都匹配为包含主机名的域或主机名本身,例如,本地网站将匹配本地网站,7.19.4
中增加。--ntlm
:HTTP
,启用NTLM
身份验证,NTLM
身份验证方法是由Microsoft
设计的,用于IIS web
服务器,它是一个专有的协议,由聪明的人逆向设计,并根据他们的努力在curl
中实现,这种行为不应该被认可,您应该鼓励每个使用NTLM
的人转而使用公共的和文档化的身份验证方法,比如Digest
,如果要为代理身份验证启用NTLM
,请使用--proxy NTLM
,此选项需要使用SSL
支持构建的库,使用-V, -version
查看curl
是否支持NTLM
,如果多次使用此选项,则只使用第一个选项。-o, --output <file>
: 将输出写入<file>
而不是标准输出,如果使用{}
或[]
获取多个文档,则可以在<file>
说明符中使用#
后跟数字,该变量将替换为正在获取的URL
的当前字符串。-O, --remote-name
: 将输出写入名为的本地文件,就像我们得到的远程文件一样,仅使用远程文件的文件部分,路径被切断,用于保存的远程文件名是从给定的URL
提取的,而不是从其他URL
提取的,因此,文件将保存在当前工作目录中,如果要将文件保存在其他目录中,请确保在使用-O, -remote name
标志调用curl
之前更改当前工作目录,没有对文件名执行URL
解码,如果名称中有%20
或其他URL
编码的部分,它们将以文件名的形式结束,您可以使用此选项的次数与您拥有的URL
数量相同。--oauth2-bearer
:IMAP、POP3、SMTP
,指定OAUTH 2.0
服务器身份验证的承载令牌,承载令牌与用户名一起使用,用户名可以指定为--url
或-u, -user
选项的一部分,承载令牌和用户名根据rfc6750
格式化,如果多次使用此选项,将使用最后一个选项。--proxy-header <header>
:HTTP
,向代理发送HTTP
时请求中包含的额外头,您可以指定任意数量的额外标头,这是与-H, -header
等效的选项,但仅适用于代理通信,就像在连接请求中一样,当您希望将单独的头发送到代理时,它将发送到实际的远程主机,curl
将确保您添加/
替换的每个标题都使用正确的行尾标记发送,因此您不应将其添加为标题内容的一部分:
不要添加换行符或回车符,它们只会为您带来麻烦,使用此选项指定的头不会包含在curl
知道不会发送到代理的请求中,此选项可多次用于添加/
替换/
删除多个标头,在7.37.0
中添加。-p, --proxytunnel
: 当使用HTTP
代理(-x, --proxy
)时,此选项将导致非HTTP
协议尝试通过代理进行隧道传输,而不是仅使用它来执行类似HTTP
的操作,隧道方法是通过HTTP
代理连接请求来实现的,并且要求代理允许直接连接到curl
希望通过隧道连接到的远程端口号。-P, --ftp-port <address>
:FTP
,在连接FTP
时反转默认的发起程序/
侦听程序角色,此开关使curl
使用活动模式,在实践中,curl
然后告诉服务器连接回客户机指定的地址和端口,而被动模式则要求服务器设置一个IP
地址和端口以供连接。--pass <phrase>
:SSL/SSH
,私钥的密码短语,如果多次使用此选项,将使用最后一个选项。--post301
:HTTP
,告诉curl
遵守rfc2616/10.3.2
,在执行301
重定向时不要将POST
请求转换为GET
请求,非RFC
行为在web
浏览器中无处不在,因此curl
默认情况下进行转换以保持一致性,然而,服务器可能需要在这样的重定向之后保持POST
,此选项仅在使用-L, -location
(在7.17.1
中添加)时才有意义。--post302
:HTTP
,告诉curl
遵守rfc2616/10.3.2
,在执行302
重定向时不要将POST
请求转换为GET
请求,非RFC
行为在web
浏览器中无处不在,因此curl
默认情况下进行转换以保持一致性,然而,服务器可能需要在这样的重定向之后保持POST
,此选项仅在使用-L, -location
(在7.19.1
中添加)时才有意义。--post303
:HTTP
,告诉curl
遵守rfc2616/10.3.2
,在执行303
重定向时不要将POST
请求转换为GET
请求,非RFC
行为在web
浏览器中无处不在,因此curl
默认情况下进行转换以保持一致性,然而,服务器可能需要在这样的重定向之后保持POST
,此选项仅在使用-L, -location
(在7.26.0
中添加)时才有意义。--proto <protocols>
: 告诉curl
使用列出的协议进行初始检索,协议从左到右求值,以逗号分隔,每个协议都是一个协议名或all
,可以选择以零个或多个修饰符作为前缀。--proto-redir <protocols>
: 告诉curl
在重定向后使用列出的协议,有关协议的表示方式,请参见--proto
,(7.20.2
增加)。--proxy-anyauth
: 告诉curl
在与给定代理通信时选择合适的身份验证方法,这可能会导致额外的请求/
响应往返,(7.13.2
增加)。--proxy-basic
: 告诉curl
在与给定代理通信时使用HTTP
基本身份验证,使用--basic
对远程主机启用HTTP basic
,Basic
是curl
用于代理的默认身份验证方法。--proxy-digest
: 告诉curl
在与给定代理通信时使用HTTP
摘要身份验证,使用--digest
对远程主机启用HTTP
摘要。--proxy-negotiate
: 告诉curl
在与给定代理通信时使用HTTP
协商(SPNEGO
)身份验证,使用--negotiate
启用与远程主机的HTTP
协商(SPNEGO
),7.17.1
增加。--proxy-ntlm
: 告诉curl
在与给定代理通信时使用httpntlm
身份验证,使用--ntlm
启用远程主机的ntlm
。--proxy1.0 <proxyhost[:port]>
: 使用指定的HTTP 1.0
代理,如果未指定端口号,则假定在端口1080
处,此选项与HTTP proxy
选项-x, --proxy
之间的唯一区别是,尝试通过代理使用CONNECT
将指定HTTP 1.0
协议,而不是默认的HTTP 1.1
。--pubkey <key>
:SSH
,公钥文件名,允许您在此单独的文件中提供公钥,如果多次使用此选项,将使用最后一个选项。-q
: 如果用作命令行上的第一个参数,则不会读取和使用curlrc config
文件,有关默认配置文件搜索路径的详细信息,请参见-K, --config
。-Q, --quote <command>
:FTP/SFTP
,向远程FTP
或SFTP
服务器发送任意命令,Quote
命令在传输发生之前发送(确切地说,是在FTP
传输中的初始PWD
命令之后),若要使命令在成功传输后执行,请在其前面加一个短划线-
,要使命令在curl
更改工作目录后发送,就在传输命令之前,在命令前面加上+
(这仅适用于FTP
),您可以指定任意数量的命令,如果服务器返回其中一个命令失败,则整个操作将中止,必须按照RFC 959
的定义将语法正确的FTP
命令发送到FTP
服务器,或将下面列出的命令之一发送到SFTP
服务器,此选项可以多次使用,在与FTP
服务器通信时,在命令前面加一个星号*
,使curl
即使失败也能继续,因为默认情况下,curl
会在第一次失败时停止,SFTP
是一种二进制协议,与FTP
不同,curl
在将SFTP quote
命令发送到服务器之前会自己解释它们,文件名可以用shell
样式引用以嵌入空格或特殊字符。-r, --range <range>
:HTTP/FTP/SFTP/FILE
,从HTTP/1.1
、FTP
或SFTP
服务器或本地文件检索字节范围(即部分文档),可以通过多种方式指定范围。-R, --remote-time
: 使用时,这将使curl
尝试找出远程文件的时间戳,如果该时间戳可用,则使本地文件获得相同的时间戳。--random-file <file>
:SSL
,指定包含随机数据的文件的路径名,数据用于为SSL
连接的随机引擎播种,另请参见--egd
文件选项。--raw
:HTTP
,使用时,它会禁用所有内容或传输编码的内部HTTP
解码,而是让它们原封不动地传递,7.16.2
增加。--remote-name-all
: 此选项将更改所有给定URL
的默认操作,使其处理方式与每个URL
使用-O
、-remote name
一样,因此,如果要在使用--remote name all
之后对特定URL
禁用该选项,则必须使用-o-
或--no remote name
,在7.19.0
中添加。--resolve <host:port:address>
: 为特定主机和端口对提供自定义地址,使用此方法,可以使curl
请求使用指定的地址,并防止使用通常解析的地址,将其视为命令行上提供的一种/etc/hosts
替代方案,端口号应该是用于主机将用于的特定协议的编号,这意味着,如果要为同一主机提供不同端口的地址,则需要多个条目,可以多次使用此选项添加许多要解析的主机名,在7.21.3
增加。--retry <num>
: 如果curl
尝试执行传输时返回暂时性错误,它将在放弃之前重试此次数,将数字设置为0
将使curl
不重试(这是默认值),瞬时错误表示:
超时、ftp4xx
响应代码或http5xx
响应代码,当curl
将要重试传输时,它将首先等待一秒钟,然后对于所有即将进行的重试,它将加倍等待时间,直到达到10
分钟,这将是其余重试之间的延迟,通过使用--retry delay
可以禁用这个指数退避算法,另请参见--retry max time
以限制允许重试的总时间,(7.12.3
增加)如果多次使用此选项,将使用最后一个选项。--retry-delay <seconds>
: 当传输因暂时性错误而失败时,在每次重试之前使curl
休眠此时间量(它会更改重试之间的默认退避时间算法),只有同时使用--retry
时,此选项才有意义,将此延迟设置为零将使curl
使用默认回退时间,(7.12.3
增加)如果多次使用此选项,将使用最后一个选项。--retry-max-time <seconds>
: 重试计时器在第一次传输尝试之前重置,只要计时器没有达到这个给定的限制,重试就会照常进行(请参阅--retry
),请注意,如果计时器尚未达到限制,则会发出请求,并且在执行时,可能需要比给定的时间段更长的时间,要限制单个请求的最长时间,请使用-m, -max time
,将此选项设置为零以不超时重试,(7.12.3
增加)如果多次使用此选项,将使用最后一个选项。-s, --silent
: 安静或安静模式,不显示进度表或错误消息,使卷发静音,它仍然会输出您请求的数据,甚至可能输出到终端/stdout
,除非您重定向它。--sasl-ir
: 在SASL
身份验证中启用初始响应,在7.31.0
增加。-S, --show-error
: 当与-s
一起使用时,如果curl
失败,它将显示一条错误消息。--ssl
:FTP, POP3, IMAP, SMTP
,尝试使用SSL/TLS
进行连接,如果服务器不支持SSL/TLS
,则还原为非安全连接,另请参见--ftp ssl control
和--ssl reqd
以了解所需的不同加密级别,(在7.20.0
中添加)此选项以前称为--ftp ssl
(在7.11.0
中添加),该选项名称仍可以使用,但将在将来的版本中删除。--ssl-reqd
:FTP, POP3, IMAP, SMTP
,连接需要SSL/TLS
,如果服务器不支持SSL/TLS
,则终止连接,(在7.20.0
中添加)此选项以前称为--ftp ssl reqd
(在7.15.5
中添加),该选项名称仍可以使用,但将在将来的版本中删除。--ssl-allow-beast
:SSL
,此选项告诉curl
不要绕过SSL3
和TLS1.0
协议中称为BEAST
的安全缺陷,如果不使用此选项,SSL
层可能会使用已知的解决方法来解决某些较旧的SSL
实现的互操作性问题,警告:
此选项会降低SSL
安全性,通过使用此标志,您会要求完全相同的安全性,在7.25.0
中添加。--socks4 <host[:port]>
: 使用指定的SOCKS4
代理,如果未指定端口号,则假定在端口1080
处,(7.15.2
增加)此选项将覆盖以前使用的任何-x, --proxy
,因为它们是互斥的,从7.21.7
开始,此选项是多余的,因为您可以使用socks4://
协议前缀指定具有-x, --proxy
的socks4
代理,如果多次使用此选项,将使用最后一个选项。--socks4a <host[:port]>
: 使用指定的SOCKS4a
代理,如果未指定端口号,则假定在端口1080
处,(在7.18.0
中添加)此选项将覆盖以前使用的任何-x, --proxy
,因为它们是互斥的,从7.21.7
开始,此选项是多余的,因为您可以使用socks4a://
协议前缀指定具有-x, -proxy
的socks4a
代理,如果多次使用此选项,将使用最后一个选项。--socks5-hostname <host[:port]>
: 使用指定的SOCKS5
代理(并让代理解析主机名),如果未指定端口号,则假定在端口1080
处,(在7.18.0
中添加)此选项将覆盖以前使用的任何-x, --proxy
,因为它们是互斥的,从7.21.7
开始,此选项是多余的,因为您可以使用socks5h://
协议前缀指定带有-x, -proxy
的socks5
主机名代理,如果多次使用此选项,将使用最后一个选项,(此选项以前被错误地记录并用作--socks
,但没有附加数字)。--socks5 <host[:port]>
: 使用指定的SOCKS5
代理-
但在本地解析主机名,如果未指定端口号,则假定在端口1080
处,此选项将覆盖以前使用的任何-x, --proxy
,因为它们是互斥的,从7.21.7
开始,此选项是多余的,因为您可以使用socks5://
协议前缀指定带有-x, -proxy
的socks5
代理,如果多次使用此选项,将使用最后一个选项,(此选项以前被错误地记录并用作--socks
,但没有附加数字),此选项(以及--socks4
)不适用于IPV6
、FTPS
或LDAP
。--socks5-gssapi-service <servicename>
:socks
服务器的默认服务名称是rcmd/server fqdn
,此选项允许您更改它,示例: ---socks5 proxy name--socks5 gssapi service sockd
将使用sockd/proxy name--socks5 proxy name--socks5 gssapi service sockd/real name
将在代理名称与主体名称不匹配的情况下使用sockd/real name
,在7.19.4
中增加。--socks5-gssapi-nec
: 作为GSS-API
协商的一部分,将协商保护模式,RFC1961
在第4.3/4.4
节中说它应该受到保护,但NEC
参考实施没有,选项--socks5 gssapi nec
允许保护模式协商的无保护交换,在7.19.4
中增加。--stderr <file>
: 将对stderr
的所有写入重定向到指定的文件,如果文件名是一个普通的-
,则改为写入标准输出,如果多次使用此选项,将使用最后一个选项。-t, --telnet-option <OPT=val>
: 将选项传递给telnet
协议,支持的选项包括: TTYPE=<term>
设置终端类型,XDISPLOC=<X display>
设置X
显示位置,NEW_ENV=<var, val>
设置环境变量。-T, --upload-file <file>
: 这会将指定的本地文件传输到远程URL
,如果指定的URL
中没有文件部分,curl
将附加本地文件名,请注意,您必须在最后一个目录上使用尾随/
来真正证明curl
没有文件名,否则curl
会认为您的最后一个目录名是要使用的远程文件名,这很可能会导致上载操作失败,如果在HTTP
(S
)服务器上使用,则将使用PUT
命令,使用文件名-
来使用stdin
而不是给定的文件,或者,可以指定文件名.
(单个句点)而不是-
,以便在非阻塞模式下使用stdin
,以便在上载stdin
时读取服务器输出。--tcp-nodelay
: 打开TCP_NODELAY
选项,有关此选项的详细信息,请参阅curl_easy_setopt
手册页,在7.11.2
增加。--tftp-blksize <value>
:TFTP
,设置TFTP BLKSIZE
选项(必须大于512
),这是curl
在向TFTP
服务器传输数据或从TFTP
服务器传输数据时尝试使用的块大小,默认情况下,将使用512
字节,如果多次使用此选项,将使用最后一个选项,在7.20.0
中添加。--tlsauthtype <authtype>
: 设置TLS
身份验证类型,目前,TLS-SRP
(RFC 5054
)唯一支持的选项是SRP
,如果指定了--tlsuser
和--tlspassword
,但未指定--tlsauthtype
,则此选项默认为SRP
,在7.21.4
增加。--tlspassword <password>
: 设置密码以用于用--tlsauthtype
指定的TLS
身份验证方法,要求同时设置--tlsuser
,在7.21.4
增加。--tlsuser <user>
: 设置用户名以便与用--tlsauthtype
指定的TLS
身份验证方法一起使用,要求同时设置--tlspassword
,在7.21.4
增加。--tlsv1.0
:SSL
,强制curl
在与远程TLS
服务器协商时使用TLS
版本1.0
,在7.34.0
中添加。--tlsv1.1
:SSL
,强制curl
在与远程TLS
服务器协商时使用TLS
版本1.1
,在7.34.0
中添加。--tlsv1.2
:SSL
,强制curl
在与远程TLS
服务器协商时使用TLS
版本1.2
,在7.34.0
中添加。--tr-encoding
:HTTP
,使用curl
支持的算法之一请求压缩传输编码响应,并在接收数据时解压缩数据,在7.21.6
增加。--trace <file>
: 启用所有传入和传出数据(包括描述性信息)到给定输出文件的完整跟踪转储,使用-
作为文件名将输出发送到stdout
,此选项覆盖以前使用的-v, -verbose
或-trace ascii
,如果多次使用此选项,将使用最后一个选项。--trace-ascii <file>
: 启用所有传入和传出数据(包括描述性信息)到给定输出文件的完整跟踪转储,使用-
作为文件名将输出发送到stdout
,这与--trace
非常相似,但是省略了十六进制部分,只显示转储的ASCII
部分,它使较小的输出,可能更容易阅读未经训练的人,此选项覆盖以前使用的-v
、-verbose
或-trace
,如果多次使用此选项,将使用最后一个选项。--trace-time
: 为curl
显示的每个跟踪或详细行预先准备一个时间戳,在7.14.0
中添加。-u, --user <user:password>
: 指定用于服务器身份验证的用户名和密码,重写-n
、-netrc
和--netrc
可选,如果只指定用户名,curl
将提示输入密码,用户名和密码在第一个冒号上分开,这样就不可能在用户名中使用带有此选项的冒号,密码仍然可以,将Kerberos V5
与基于Windows
的服务器一起使用时,应在用户名中包含Windows
域名,以便服务器成功获取Kerberos
票证,如果不这样做,那么初始身份验证握手可能会失败,当使用NTLM
时,可以简单地将用户名指定为用户名,而不指定域。-U, --proxy-user <user:password>
: 指定用于代理身份验证的用户名和密码,如果您使用启用了Windows SSPI
的curl
二进制文件并进行协商或NTLM
身份验证,那么您可以通过指定一个冒号来告诉curl
从您的环境中选择用户名和密码,该冒号带有以下选项:-U
,如果多次使用此选项,将使用最后一个选项。--url <URL>
: 指定要获取的URL
,当您要在配置文件中指定URL
时,此选项非常方便,此选项可以使用任意次数,要控制此URL
的写入位置,请使用-o, --output
或-o, --remote name
选项。-v, --verbose
: 输出详细信息,主要用于调试,以>
开头的行表示curl
发送的头数据,<
表示curl
接收的在正常情况下隐藏的头数据,以*开头的行表示curl
提供的附加信息,请注意,如果您只希望在输出中使用HTTP
头,那么您可能需要-i, -include
选项,如果您认为此选项仍然不能提供足够的详细信息,请考虑改用--trace
或--trace ascii
,此选项覆盖以前使用的--trace ascii
或--trace
,使用-s, --silent
使curl
安静。-w, --write-out <format>
: 定义操作完成并成功后在标准输出上显示的内容,格式是一个字符串,可以包含纯文本和任意数量的变量,字符串可以指定为string
,要从特定文件中读取,您可以将其指定为@filename
,并告诉curl
从stdin
中读取格式,您可以编写@-
,输出格式中的变量将被curl
认为合适的值或文本替换,如下所述,所有变量都指定为%{variable_name}
,要输出一个普通的%只需将它们写为%%,您可以使用\n
、带\r
的回车符和带\t
的制表符来输出换行符,可能的值为content_type
、filename_effective
、ftp_entry_path
、http_code
、http_connect
、local_ip
、local_port
、num_connects
、num_redirects
、redirect_url
、remote_ip
、remote_port
、size_download
、size_header
、size_request
、size_upload
、speed_download
、speed_upload
、ssl_verify_result
、time_appconnect
、time_connect
、time_namelookup
、time_pretransfer
、time_redirect
、time_starttransfer
、time_total
、url_effective
。-x, --proxy <[protocol://][user:password@]proxyhost[:port]>
: 使用指定的代理,可以使用protocol://
前缀指定代理字符串,以指定备用代理协议,使用socks4://
、socks4a://
、socks5://
或socks5h://
请求要使用的特定SOCKS
版本,没有指定协议,http://
和所有其他协议都将被视为http
代理,(在curl7.21.7
中添加了协议支持)如果代理字符串中未指定端口号,则假定端口号为1080
,此选项将覆盖将代理设置为使用的现有环境变量,如果有环境变量设置代理,则可以将代理设置为以覆盖它,通过HTTP
代理执行的所有操作都将透明地转换为HTTP
,这意味着某些特定于协议的操作可能不可用,如果您可以通过代理进行隧道传输(如使用-p
、-proxytunnel
选项时),则情况并非如此,代理字符串中可能提供的用户和密码由curl
进行URL
解码,这允许您通过使用%40
传入特殊字符,如@
,或用%3a
传入冒号,可以使用与代理环境变量完全相同的方式指定代理主机,包括协议前缀(http://
)和嵌入的用户+
密码,如果多次使用此选项,将使用最后一个选项。-X, --request <command>
:HTTP
,指定与HTTP
服务器通信时要使用的自定义请求方法,将使用指定的请求,而不是使用其他方法(默认为GET
),有关详细信息和解释,请阅读HTTP1.1
规范,常见的附加HTTP
请求包括PUT
和DELETE
,但WebDAV
等相关技术提供了PROPFIND
、COPY
、MOVE
等功能,通常你不需要这个选项,各种GET
、HEAD
、POST
和PUT
请求都是通过使用专用的命令行选项来调用的,此选项仅更改HTTP
请求中使用的实际单词,不改变curl
的行为方式,因此,例如,如果您想要发出一个正确的HEAD
请求,那么使用-X HEAD
将是不够的,你需要使用-I, -head
选项。--xattr
: 将输出保存到文件时,此选项告诉curl
将某些文件元数据存储在扩展文件属性中,当前,URL
存储在xdg.origin.url
属性,对于HTTP
,内容类型存储在mime
类型属性中,如果文件系统不支持扩展属性,将发出警告。-y, --speed-time <time>
: 如果在某个速度时间段内下载速度低于每秒的速度限制字节数,则下载将被中止,如果使用速度时间,则默认速度限制将为1
,除非使用-Y
设置,此选项控制传输,因此不会影响慢速连接等,如果您担心此问题,请尝试--connect timeout
选项,如果多次使用此选项,将使用最后一个选项。-Y, --speed-limit <speed>
: 如果下载速度低于此给定速度(以字节/
秒为单位)达数秒,则会中止下载,速度时间设置为-y
,如果未设置,则为30
,如果多次使用此选项,将使用最后一个选项。-z, --time-cond <date expression>|<file>
: (HTTP/FTP
)请求在给定的时间和日期之后修改的文件,或在该时间之前修改的文件,<date expression>
可以是各种日期字符串,或者如果它与任何内部字符串都不匹配,则将其作为文件名并尝试从<file>
获取修改日期mtime
,有关日期表达式的详细信息,请参阅getdate
手册页,以破折号-
开始日期表达式,使其请求比给定日期/
时间早的文档,默认值是比指定日期/
时间新的文档,如果多次使用此选项,将使用最后一个选项。-h, --help
: 输出帮助信息。-M, --manual
: 手动模式,显示详细的帮助文本。-V, --version
: 输出版本信息。
环境变量
使用环境变量设置代理与使用--proxy
选项具有相同的效果。
http_proxy [protocol://]<host>[:port]
: 设置用于HTTP
的代理服务器。HTTPS_PROXY [protocol://]<host>[:port]
: 设置用于HTTPS
的代理服务器。[url-protocol]_PROXY [protocol://]<host>[:port]
: 设置要用于[url protocol]
的代理服务器,其中协议是curl
支持的协议,并在url
中指定,FTP
、FTPS
、POP3
、IMAP
、SMTP
、LDAP
等。ALL_PROXY [protocol://]<host>[:port]
: 如果未设置协议特定的代理,则设置要使用的代理服务器。NO_PROXY <comma-separated list of hosts>
: 不应通过任何代理的主机名列表,如果仅设置为星号*
,则与所有主机匹配。
代理协议前缀
socks4://
: 使其等效于--socks4
。socks4a://
: 使其相当于--socks4a
。socks5://
: 使其相当于--socks5
。socks5h://
: 使其相当于--socks5-hostname
。
退出代码
1
: 不支持的协议,curl
的这个版本不支持这个协议。2
: 初始化失败。3
:URL
格式不正确,语法不正确。4
: 执行所需请求所需的功能或选项在生成时未启用或显式禁用,要使curl
能够做到这一点,您可能需要另一个libcurl
构建。5
: 无法解析代理,无法解析给定的代理主机。6
: 无法解析主机,未解析给定的远程主机。7
: 无法连接到主机。8
:FTP
服务器回复,服务器发送的数据无法解析。9
:FTP
访问被拒绝,服务器拒绝登录或拒绝访问您要访问的特定资源或目录,通常,您试图更改到服务器上不存在的目录。11
: 通过回复,curl
无法分析发送给PASS
请求的回复。13
:FTP
奇怪的PASV
回复,curl
无法解析发送到PASV
请求的回复。14
:FTP-227
格式,curl
无法解析服务器发送的227
行。15
:FTP
无法获取主机,无法解析227
行中的主机IP
。17
:FTP
无法设置二进制文件,无法将传输方法更改为二进制。18
: 部分文件,只传输了文件的一部分。19
:FTP
无法下载/
访问给定文件,RETR
(或类似)命令失败。21
:FTP
报价错误,quote
命令从服务器返回错误。22
: 未检索到HTTP
页,找不到请求的url
或返回另一个错误,HTTP
错误代码为400
或更高,此返回代码仅在使用-f, -fail
时出现。23
: 写入错误,curl
无法将数据写入本地文件系统或类似文件系统。25
:FTP
无法保存文件,服务器拒绝了用于FTP
上载的STOR
操作。26
: 读取错误,各种各样的阅读问题。27
: 内存不足,内存分配请求失败。28
: 操作超时,已根据条件达到指定的超时期限。30
:FTP
端口失败,端口命令失败,并非所有FTP
服务器都支持PORT
命令,请尝试使用PASV
进行传输。31
:FTP
无法使用REST
,REST
命令失败,此命令用于恢复FTP
传输。33
:HTTP
范围错误,范围命令不起作用。34
:HTTP post
错误,内部post
请求生成错误。35
:SSL
连接错误,SSL
握手失败。36
:FTP
错误下载恢复,无法继续先前中止的下载。37
:FILE
无法读取文件,无法打开文件,可能是权限问题。38
:LDAP
无法绑定,LDAP
绑定操作失败。39
:LDAP
搜索失败。41
: 未找到函数,找不到所需的LDAP
函数。42
: 被回调中止,一个应用程序告诉curl
中止操作。43
: 内部错误,使用错误的参数调用了函数。45
: 接口错误,无法使用指定的传出接口。47
: 重定向过多,跟随重定向时,curl
达到最大数量。48
: 为libcurl
指定了未知选项,这表示您向curl
传递了一个奇怪的选项,该选项被传递给libcurl
并被拒绝,仔细阅读手册。49
:telnet
选项格式错误。51
: 对等方的SSL
证书或SSH MD5
指纹不正常。52
: 服务器没有回复任何内容,这被认为是一个错误。53
: 找不到SSL
加密引擎。54
: 无法将SSL
加密引擎设置为默认值。55
: 发送网络数据失败。56
: 接收网络数据失败。58
: 本地证书有问题。59
: 无法使用指定的SSL
密码。60
: 对等证书不能用已知的CA
证书进行身份验证。61
: 无法识别的传输编码。62
:LDAP URL
无效。63
: 超过最大文件大小。64
: 请求的FTP SSL
级别失败。65
: 发送数据需要倒带失败。66
: 无法初始化SSL
引擎。67
: 用户名、密码或类似内容未被接受,curl
无法登录。68
: 在TFTP
服务器上找不到文件。69
:TFTP
服务器上的权限问题。70
:TFTP
服务器上的磁盘空间不足。71
:TFTP
操作非法。72
: 未知的TFTP
传输ID
。73
: 文件已存在TFTP
。74
: 没有这样的用户TFTP
。75
: 字符转换失败。76
: 需要字符转换函数。77
: 读取SSL CA
证书(路径)时出现问题,可能是访问权限问题。78
:URL
中引用的资源不存在。79
:SSH
会话期间发生未指定的错误。80
: 无法关闭SSL
连接。82
: 无法加载CRL
文件,缺少或格式错误,在7.19.0
中添加。83
: 发卡机构检查失败,在7.19.0
中添加。84
:FTP PRET
命令失败。85
:RTSP:CSeq
编号不匹配。86
:RTSP
会话标识符不匹配。87
: 无法解析FTP
文件列表。88
:FTP
区块回调报告错误。89
: 没有可用的连接,会话将排队。XX
: 更多的错误代码将出现在这里,在未来的版本,现有的是永远不会改变的。
示例
对网站发起一个HTTP
请求。
1 | curl www.baidu.com |
使curl
显示进度表,以指示传输速率、传输的数据量、剩余时间等。
1 | curl -# -o ftp://ftp.example.com/file.zip |
指定请求的网络接口。
1 | curl --interface ppp0 192.168.113.131 |
将文件下载到本地并命名为1.zip
。
1 | curl -o 1.zip ftp://ftp.example.com/file.zip |
让curl
使用地址重定向。
1 | curl -L http://www.google.com |
此选项限制数据传输速率的上限,并将其保持在以字节为单位的给定值附近。
1 | curl --limit-rate 1000K -O ftp://speedtest.tele2.net/1MB.zip |
curl
还提供了从用户认证的FTP
服务器下载文件的选项。
1 | curl -u username:password -O ftp://test.rebex.net/readme.txt |
显示详细信息,例如连接的ip
地址、请求头与响应头等。
1 | curl -v www.baidu.com |
设置请求头信息,此处由于响应信息过多将其存储在baidu.html
。
1 | curl -v \ |
csplit命令
csplit
命令将用PATTERN
分隔的FILE
文件输出到文件xx00
、xx01
、...
,并将每个文件的字节数输出到标准输出。
语法
1 | csplit [OPTION]... FILE PATTERN... |
参数
-b, --suffix-format=FORMAT
: 使用sprintf FORMAT
格式而不是%02d
。-f, --prefix=PREFIX
: 使用PREFIX
代替xx
。-k, --keep-files
: 出错时不要删除输出文件。-m, --suppress-matched
: 取消匹配PATTERN
的行。-n, --digits=DIGITS
: 使用指定的数字位数,而不是2
。-s, --quiet, --silent
: 不要打印输出文件大小的计数。-z, --elide-empty-files
: 删除空输出文件。--help
: 输出帮助信息。--version
: 输出版本信息。
模式
如果文件被指定为破折号-
,csplit
将读取标准输入,每种模式可能是:
INTEGER
: 复制到指定行号,但不包括指定行号。/REGEXP/[OFFSET]
: 复制到但不包括匹配行。%REGEXP%[OFFSET]
: 跳至但不包括匹配行。{INTEGER}
: 重复上一个模式指定的次数。{*}
: 尽可能多次重复前面的模式。
示例
list.txt
文件内容如下:
1 | 1. Apples |
使用csplit
命令将此文件分为两部分,第二部分从第三行开始。
1 | csplit list.txt 3 |
使用csplit
命令将此文件分为三部分。
1 | csplit list.txt 2 3 |
使用自定义的分割前缀aa
代替xx
分割前缀。
1 | csplit list.txt -f aa 3 |
使用三位数字代替默认的两位数字。
1 | csplit list.txt -n 3 3 |
使用模式定义分割规则,重复上一个模式指定的次数。
1 | csplit list.txt 2 {1} |
cp命令
cp
命令主要用于复制文件或目录。
语法
1 | cp [OPTION]... [-T] SOURCE DEST |
参数
-a, --archive
: 与-dR --preserve = ALL
相同,执行复制时,尝试保留尽可能多的原始文件结构,属性和关联的元数据。--attributes-only
: 不复制文件数据,仅创建具有相同属性的文件,如果目标文件已经存在,不更改其内容,并且可以使用--preserve
选项精确控制要复制的属性。--backup[=CONTROL]
: 对每个现有目标文件进行备份,否则将被覆盖或删除,该控制参数CONTROL
指定了版本控制的方法来使用:none, off
,不进行备份;numbered, t
,进行编号备份;existing, nil
,简单的说明编号是否存在编号备份;simple, never
, 始终进行简单的备份。有一种特殊情况,当source
和dest
是相同的常规文件时,cp --force --backup
将对源进行备份。-b
: 类似于--backup
,但不接受控制参数,始终使用默认的控制方法。--copy-contents
: 递归操作时,复制特殊文件的内容,例如FIFO
和/dev
中的设备,通常适用于专业用途。-d
: 复制符号链接本身而不是它们引用的文件,并保留副本中源文件之间的硬链接,与--no-dereference --preserve = links
相同。-f, --force
: 如果无法打开现有的目标文件,将其删除,然后重试。如果使用n / --no-clobber
选项,则此选项无效,但是其独立于-i / --interactive
来应用,这两个选项都不能消除另一个的影响。-i, --interactive
: 覆盖前提示,覆盖先前的-n
选项。-H
: 遵循命令行上指定的符号链接,但保留发现的链接。如果命令行上的参数之一是符号链接,请复制引用的文件,而不是链接本身。但是如果在递归遍历过程中发现了符号链接,它将被复制为符号链接,而不是常规文件。-l, --link
: 创建指向文件的硬链接,而不是复制它们。-L, --dereference
: 始终遵循源文件中的符号链接,如果source
是符号链接,请复制链接到的文件,而不是符号链接本身,指定此选项后,cp
无法在目标副本中创建符号链接。-n, --no-clobber
: 不要覆盖现有文件。如果先前指定了-i / --interactive
,则此选项将覆盖它,不能使用-b / --backup
来指定此选项,因为仅在文件将被覆盖时才创建备份。-P, --no-dereference
: 不遵循源代码中的符号链接,将符号链接复制为符号链接,但是仍然可以遵循目标中遇到的现有符号链接。-p
: 与--preserve=mode,ownership,timestamps
相同。--preserve[=ATTR_LIST]
: 保留指定的属性,以逗号分隔。属性是:mode
,保留文件模式位(由chmod
设置)和任何ACL
;ownership
,保留所有者和组(按chown
设置),保留这些属性的能力与使用chown
相同;timestamps
,如果可能的话,保留最后一次文件访问和修改的时间(atime
和mtime
,由touch
设置);links
,在目标文件中保留源文件之间的所有链接,使用-L
或-H
时,此选项可能会将符号链接复制为硬链接;context
,保留源文件的SELinux
安全上下文,否则将由于详细的诊断而失败;xattr
,保留源文件的扩展属性,否则将因详细诊断而失败;all
,保留以上所有内容,与单独指定上述所有属性相同,不同之处在于无法复制context
或xattr
不会给出失败的退出状态。如果未指定,则attr_list
的默认值为mode
,ownership
,timestamps
。-c
: 已弃用,与--preserve=context
相同。--no-preserve=ATTR_LIST
: 不要保留指定的属性。--parents
: 在目录下使用完整的源文件名,即在复制到目标目录时,根据source
中指定的路径名,在目标中创建丢失的父目录。-R, -r, --recursive
: 递归复制目录。--reflink[=WHEN]
: 如果目标文件系统支持,请执行优化的CoW
(写时复制)克隆,生成的副本将在磁盘上与原始文件共享相同的字节,直到修改副本为止,请注意这意味着如果源字节已损坏,则目标将共享损坏的数据。--remove-destination
: 尝试打开每个目标文件之前,先删除它,与--force
选项相反,该选项仅在尝试打开失败后才删除目标文件。--sparse=WHEN
: 控制稀疏文件的创建。稀疏文件包含空洞,其中空洞是零字节序列,不占用物理磁盘空间,读取文件时,孔将读取为零。由于许多文件包含长的零序列,因此可以节省磁盘空间,默认情况下,cp
检测稀疏文件并创建稀疏目标文件。在当参数定义了cp
当检测到源文件是稀疏的行为:auto
,如果源稀疏,尝试使目标稀疏,如果目标存在并且是非常规文件,请不要尝试使其稀疏,这是默认值;always
,对于源中每个零字节的足够长的序列,即使输入文件不是稀疏的,也要尝试在目标中打稀疏,如果源文件系统不支持稀疏文件,这将可以在目标文件系统上适当地创建一个稀疏文件;never
,不使输出文件稀疏,某些特殊文件(例如交换文件)绝对不能稀疏。--strip-trailing-slashes
: 删除每个源参数中的所有尾部斜杠。-s, --symbolic-link
: 进行符号链接,而不是复制文件本身。除非目标文件位于当前目录中,否则所有源文件都必须是以斜杠开头的绝对路径名。-S, --suffix=SUFFIX
: 覆盖通常的备份后缀。-t, --target-directory=DIRECTORY
: 将所有源参数复制到目录中。-T, --no-target-directory
: 将目的地视为普通文件。-u, --update
: 仅在源文件比目标文件新或缺少目标文件时复制。-v, --verbose
: 详细模式,解释正在做什么。-x, --one-file-system
: 仅在执行命令的文件系统上操作,如果cp
试图越过边界到另一个文件系统,则这些文件将被跳过。这包括网络驱动器,驻留在具有不同安装点的文件系统上的任何文件。代表安装点本身的目录将被复制,但不会被遍历。如果指定了-v
,则将确切显示已跳过的文件。-Z, --context[=CTX]
: 设置目标的SELinux
安全上下文,文件为默认类型,或CTX
(如果指定)。--help
: 显示帮助信息。--version
: 显示版本信息。
示例
将文件file.txt
复制为file2.txt
。
1 | cp file.txt file2.txt |
递归复制文件夹,将tmp
文件夹内容全部复制。
1 | cp -R ./tmp ./tmp2 |
创建对file.txt
的符号链接而不是复制文件,当然使用ln
命令是专门为文件创建符号链接的,cp
同样是创建符号链接的好方法,注意要在另一个目录中创建符号链接,cp
需要在源文件名中指定完整路径名,包括完整目录名,相对路径将不起作用。
1 | cp -s file.txt file-link1 |
comm命令
comm
命令用于比较两个已排过序的文件,该命令会一列列地比较两个已排序文件的差异,并将其结果显示出来,如果没有指定任何参数,则会把结果分成3
列显示:第1
列仅是在第1
个文件中出现过的列,第2
列是仅在第2
个文件中出现过的列,第3
列则是在第1
与第2
个文件里都出现过的列,若给予的文件名称为-
,则comm
命令会从标准输入设备读取数据。
语法
1 | comm [OPTION]... FILE1 FILE2 |
参数
-1
: 禁止列1
(FILE1
唯一的行)。-2
: 禁止列2
(FILE2
唯一的行)。-3
: 禁止列3(出现在两个文件中的行)。--check-order
: 检查输入是否正确排序,即使所有输入行都是可配对的。--nocheck-order
: 不检查输入是否正确排序。--output-delimiter=STR
: 用字符串STR
分隔列。-z, --zero-terminated
: 指定行分隔符是NUL
,不是换行符。--help
: 显示帮助消息。--version
: 输出版本信息。
示例
recipe.txt
文件与shopping-list.txt
文件内容,这两个文件不同,但许多行是相同的,并非所有的配方成分都在购物清单上,也不是购物清单上的所有成分都是食谱的一部分。
1 | # recipe.txt |
使用comm
命令,其将读取这两个文件并给我们三列输出,在这里,每行输出的开头都有0
、1
或2
个制表符,将输出分成三列:
- 第一列
zero tabs
是只出现在第一个文件中的行。 - 第二列
one tabs
是只出现在第二个文件中的行。 - 第三列
two tabs
是出现在两个文件中的行。
1 | comm recipe.txt shopping-list.txt |
比较recipe.txt
文件与shopping-list.txt
文件,并禁用第1
与第2
列的输出。
1 | comm -12 recipe.txt shopping-list.txt |
col命令
在很多UNIX
说明文件里,都有RLF
控制字符,当我们把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col
命令则能有效滤除这些控制字符。
语法
1 | col [options] |
参数
-b, --no-backspaces
: 过滤掉所有的控制字符,包括RLF
和HRLF
。-f, --fine
: 允许前半行换行,通常在半行边界上打印的字符会在下一行上打印,滤除RLF
字符,但允许将HRLF
字符呈现出来。-p, --pass
: 传递未知控制序列,通常col
将从输入中过滤出除自身识别和解释的以外的任何控制序列。-h, --tabs
: 将空格转换为制表符,这是默认设置。-x, --spaces
: 将制表符转换为空格。-l, --lines NUM
: 在内存中至少缓冲num
行,默认情况下缓存128
行。-V, --version
: 输出版本信息。-H, --help
: 输出帮助信息。
示例
将col
的帮助文档过滤掉反向换行符RLF
后保存到col.txt
。
1 | col --help | col > col.txt |
将col
的帮助文档过滤掉控制字符后保存到col.txt
。
1 | col --help | col -b > col.txt |
将col
的帮助文档的制表符转换为空格后保存到col.txt
。
1 | col --help | col -x > col.txt |
colrm命令
colrm
命令用于编辑源代码文件,脚本文件或常规文本文件中的文本,此命令从文件中删除选定的列,列定义为一行中的单个字符。索引总是从1
开始,而不是0
。如果同时指定了开始和结束,则它们之间的列包括开始和结束将被删除。如果只需要删除一列,则开始和结束必须相同。colrm
也可以从stdin
接受输入。如果不加任何参数,则该指令不会过滤任何一行。
语法
1 | colrm [start] [stop] |
参数
start
: 指定要删除的列的起始编号。stop
: 指定要删除的列的结束编号,省略则删除从start
开始的所有列。-V, --version
: 输出版本信息。-h, --help
: 输出帮助信息。
示例
从标准输入中获取输入,删除start
和stop
之间的所有字符,包括start
和stop
。
1 | colrm 3 6 |
从标准输入中获取输入,删除start
之后所有的字符。
1 | colrm 3 |
读file.txt
文件中的内容,并将删除后的内容写入file2.txt
中。
1 | cat file.txt | colrm 3 6 > file2.txt |
cmp命令
cmp
命令用来比较两个文件是否有差异,当相互比较的两个文件完全一样时,则该指令不会输出任何信息,若发现有差异,预设会标示出第一个不同之处的字符和列数编号,若不指定任何文件名称或是所给予的文件名为-
,则cmp
指令会从标准输入设备读取数据。
语法
1 | cmp [-clsv][-i <number of characters>][--help][file][file] |
参数
-c
或--print-chars
: 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。-i <number of characters>
或--ignore-initial=<number of characters>
: 指定跳过的数目。-l
或--verbose
: 标示出所有不一样的地方。-s
或--quiet
或--silent
: 不显示错误信息。-v
或--version
: 显示版本信息。--help
: 在线帮助。
示例
比较file.txt
与file2.txt
文件的差异,如果文件相同,则不显示消息,如果文件不同,则显示第一个不同的位置。
1 | cmp file.txt file2.txt |
比较file.txt
与file2.txt
文件的差异,标出所有不同之处。
1 | cmp -l file.txt file2.txt |
比较file.txt
与自定义输入内容的差异,输入内容后按Ctrl+D
输出EOF
标识后结束输入。
1 | cmp file.txt - |
chown命令
chown
命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组,用户可以是用户或者是用户D
,用户组可以是组名或组id
,文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。一般来说,这个指令只有是由系统管理者root
所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己的文件拥有者改设为别人,只有系统管理者root
才有这样的权限。
语法
1 | chown [-cfhvR] [--help] [--version] user[:group] file |
参数
user
: 新的文件拥有者的使用者。group
: 新的文件拥有者的使用者组。--help
: 在线帮助。--version
: 显示版本信息。-c
或--changes
: 效果类似-v
参数,但仅回报更改的部分。-f
或--quite
或--silent
: 不显示错误信息。-h
或--no-dereference
: 只对符号连接的文件作修改,而不更改其他任何相关文件。-R
或--recursive
: 递归处理,将指定目录下的所有文件及子目录一并处理。-v
或--version
: 显示指令执行过程。--dereference
: 效果和-h
参数相同。--reference=<file or folder>
: 把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同。
示例
将file.txt
文件拥有者设置为www
,所属群组设置为web
。
1 | chown www:web file.txt |
将file.txt
文件的所属群组设置为web
。
1 | chown :web file.txt |
将example
文件夹下所有文件文件与目录的拥有者设置为www
。
1 | chown -R www example |
chmod命令
chmod
命令用来变更文件或目录的权限,文件或目录权限的控制分别以读取、写入、执行3
种一般权限来区分,另有3
种特殊权限可供运用。用户可以使用chmod
指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可,此外符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
语法
1 | chmod [option] [ugoa...][[+-=][rwxX]...][,...] file |
参数
u
: 表示该文件的拥有者。g
: 表示与该文件的拥有者属于同组group
的用户。o
: 表示其他以外的人。a
: 表示这三者皆是。+
: 表示增加权限。-
: 表示取消权限。=
: 表示唯一设定权限。r
: 表示可读取。w
: 表示可写入。x
: 表示可执行。X
: 表示可执行当且仅当这个文件是个目录或者已经被设定过为可执行。-c
或--changes
: 效果类似-v
参数,但仅回报更改的部分。-f
或--quiet
或--silent
: 不显示错误信息。-R
或--recursive
: 递归处理,将指令目录下的所有文件及子目录一并处理。-v
或--verbose
: 显示指令执行过程。--reference=<folder/file>
:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
权限
使用ll
命令查看文件与文件夹相关信息,对于其权限信息:
1 | -rw-r--r-- |
首符号为-
代表该文件为普通文件,为d
则代表目录,紧接着三个字符rw-
代表用户u
权限属性,接下来三个字符r--
代表用户组g
权限属性,最后三个字符r--
代表其他人o
权限属性。
r
: 读取属性,值为4
。w
: 写入属性,值为2
。x
: 执行属性,值为1
。
示例
将文件file.txt
设为所有人可读取。
1 | chmod ugo+r file.txt |
1 | chmod a+r file.txt |
撤销组用户的对于file.txt
的写入权限。
1 | chmod g-w file.txt |
将文件夹下所有目录与文件设为所有人可读取。
1 | chmod -R a+r * |
将文件file.txt
设为拥有者有写权限,其他用户只有读权限。
1 | chmod u=rw,go=r file.txt |
将文件file.py
设为拥有者有执行权限。
1 | chmod u+x file.py |
将文件file.py
设为拥有者拥有所有权限,其他用户无任何权限。
1 | chmod 700 file.py |
1 | chmod u=rwx,go= file.py |
chattr命令
chattr
命令可改变存放在ext2
文件系统上的文件或目录属性。
语法
1 | chattr [-vRV] [mode] [files] |
参数
-R
: 递归处理,将指定目录下的所有文件及子目录一并处理。-v <version num>
: 设置文件或目录版本。-V
: 显示指令执行过程。+ <attribute>
: 开启文件或目录的该项属性。- <attribute>
: 关闭文件或目录的该项属性。= <attribute>
: 指定文件或目录的该项属性。
文件属性
a
: 使文件或目录仅供附加用途。b
: 不更新文件或目录的最后存取时间。c
: 将文件或目录压缩后存放。d
: 将文件或目录排除在倾倒操作之外。i
: 不得任意更动文件或目录。s
: 保密性删除文件或目录。S
: 即时更新文件或目录。u
: 预防意外删除。
示例
防止file.txt
文件被修改。
1 | chattr +i file.txt |
同时对file.txt
文件增加两种属性。
1 | chattr +ac file.txt |
指定file.txt
文件的属性。
1 | chattr =i file.txt |
cat命令
cat
命令属于文件管理,用于连接文件并打印到标准输出设备上,cat
经常用来显示文件的内容,注意,当文件较大时,文本在屏幕上迅速闪过,会出现滚屏现象,此时往往看不清所显示的内容,为了控制滚屏,可以按Ctrl+S
键停止滚屏,按Ctrl+Q
键可以恢复滚屏,此外可以用more
等命令进行读文件并分页显示。
语法
1 | cat [-AbeEnstTuv] [--help] [--version] fileName |
参数
-n
或--number
: 由1
开始对所有输出的行数编号。-b
或--number-nonblank
: 和-n
相似,只不过对于空白行不编号。-s
或--squeeze-blank
: 当遇到有连续两行以上的空白行,就代换为一行的空白行。-v
或--show-nonprinting
: 使用^
和M-
符号,除了LFD
和TAB
之外。-E
或--show-ends
: 在每行结束处显示$
。-T
或--show-tabs
: 将TAB
字符显示为^I
。-A
或--show-all
: 等价于-vET
。-e
: 等价于-vE
选项。-t
: 等价于-vT
选项。
示例
使用cat
命令创建一个文件,输入文件信息后按Ctrl+D
输出EOF
标识后结束输入。
1 | cat > file.txt |
输出file.txt
文件中的内容。
1 | cat file.txt |
同时输出file.txt
与file2.txt
文件中的内容。
1 | cat file.txt file2.txt |
把file.txt
文件的内容加上行号后追加到file2.txt
文件中。
1 | cat -n file.txt >> file2.txt |
清空file2.txt
文件,/dev/null
称为空设备,是一个特殊的设备文件,其会丢弃一切写入其中的数据,但报告写入操作成功,读取它则会立即得到一个EOF
。
1 | cat /dev/null > file2.txt |
将file.txt
与file2.txt
文件内容合并输出到file3.txt
。
1 | cat file.txt file2.txt > file3.txt |
awk命令
Awk
是一种用于高级文本处理的通用脚本语言,其主要用作报告和分析工具,与大多数其他程序性编程语言不同,Awk
是数据驱动的,也就是说需要定义一组针对输入文本要执行的操作,然后其获取输入数据,对其进行转换,然后将结果发送到标准输出。
语法
1 | awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ... ] |
参数
-F fs
: 将输入字段分隔符设置为正则表达式fs
。-v var=value
: 在执行awk
程序之前,将值赋值给变量var
。'prog'
:awk
程序。-f progfile
: 指定文件progfile
,其中包含要执行的awk
程序。file ...
: 由指定的awk
程序处理的文件。
示例
示例文件example.txt
文件内容如下:
1 | Bucks Milwaukee 60 22 0.732 |
输出example.txt
的第3
个字段。
1 | awk '{ print $3 }' example.txt |
使用正则表达式匹配出以R
开头的组。
1 | awk '/^R/ { print $1,$2,$3,$4 }' example.txt |
使用BEGIN
以及END
输出在处理记录之前与之后执行的操作,处理过程为输出第二个字段包含Tor
的组。
1 | awk 'BEGIN { print "Start Processing" }; $2 ~ /Tor/ {print $1,$2,$3,$4 }; END { print "End Processing" }' example.txt |
aspell命令
aspell
命令是一个交互式拼写检查器,其会扫描指定的文件或任何标准输入的文件,检查拼写错误,并允许交互式地纠正单词。
语法
1 | aspell [options] command |
参数
usage, -?
: 显示常用拼写检查命令和选项的简短摘要。help
: 输出帮助信息。version, -v
: 输出版本信息。check file, -c file
: 拼写检查单个文件。list
: 产生标准输入中拼写错误的单词的列表。[dump] config
: 将所有当前配置选项转储到标准输出。config key
: 将键的当前值发送到标准输出。soundslike
: 输出输入的每个单词的等效声音。munch
: 从单词输入列表中生成可能的词根和词缀。expand [1-4]
: 扩展输入的每个词缀压缩词的词缀标志。clean [strict]
: 清除输入单词列表,以便每一行都是有效单词。munch-list [simple] [single|multi] [keep]
: 通过词缀压缩减小单词列表的大小。conv from to [norm-form]
: 从一种编码转换为另一种编码。norm (norm-map|from norm-map to) [norm-form]
: 执行Unicode
规范化。[dump] dicts|filters|modes
: 列出可用的字典,过滤器或模式。dump|create|merge master|personal|repl wordlist
: 转储,创建或合并主,个人或替换单词列表。-mode=mode
: 检查文件时使用的模式,可用的模式有none
、url
、email
、sgml
、tex
、texinfo
、nroff
和系统上可用的任何其他模式。-dont-backup
: 不要创建备份文件,通常如果有任何更正,则aspell
程序会将.bak
附加到现有文件名后,然后创建一个新的带有更正的文件,该文件是在拼写检查期间进行的。--backup, -b, -x
:aspell
程序通过复制并在文件名后附加.bak
来创建备份文件,仅当命令是检查文件并且仅在进行任何拼写修改时才创建备份文件时,这才适用。--sug-mode=mode
: 建议模式=ultra|fast|normal|bad-spellers
。-encoding=name
: 预期将对文档进行编码,默认值取决于当前的语言环境。--master=name, -d name
: 要使用的词典的基本名称,如果指定了此选项,则aspell
将使用此词典或退出。--keymapping=aspell, --keymapping=ispell
: 要使用的键映射,默认设置为aspell
或ispell
使用与Ispell
程序相同的映射。--lang=string, -l string
: 要使用的语言,它遵循大多数系统上LANG
环境变量的相同格式,由两个字母的ISO639
语言代码和短划线或下划线后的可选两个字母的ISO3166
国家代码组成,默认值基于LC\u MESSAGES
区域设置的值。--dict-dir=directory
: 主词典单词列表的位置。--size=string
: 字典单词列表的首选大小,它由两个字符的数字代码组成,用于描述列表的大小,典型值为:10=tiny
、20=really small
、30=small
、40=somewhat small
、50=med
、60=kinda large
、70=large
、80=huge
、90=enormous
。--variety=string
: 任何额外的信息,以区分这种类型的字典与其他可能具有相同的数量和大小的字典。--jargon=string
: 请使用多样性选项,因为它取代术语作为一个更好的选择,这些术语将来会被删除。--word-list-path=list of directories
: 单词列表信息文件的搜索路径。--personal=file, -p file
: 要使用的个人单词列表的文件名。--repl=file
: 替换列表文件名。--extra-dicts=list
: 使用额外的字典。--ignore=integer, -W integer
: 忽略长度大于或等于整数字符的单词。--ignore-case, --dont-ignore-case
: 检查单词时忽略大小写。--ignore-repl, --dont-ignore-repl
: 忽略存储替换对的命令。--save-repl, --dont-save-repl
: 在全部保存中保存替换单词列表。--conf=filename
: 主配置文件,此文件覆盖aspell
的全局默认值。--conf-dir=directory
: 主配置文件的位置。--data-dir=directory
: 语言数据文件的位置。--keyboard=keyboard
: 使用此键盘布局建议可能的单词,如果用户不小心按了所需正确键旁边的键,就会发生这些拼写错误。--local-data-dir=directory
: 语言数据文件的替代位置,在数据目录之前搜索此目录。--home-dir=directory
: 个人单词表文件的目录位置。--per-conf=filename
: 个人配置文件,此文件覆盖全局配置文件中的选项。--byte-offsets, --dont-byte-offsets
: 使用字节偏移量而不是字符偏移量。--guess, --dont-guess, -m, -P
: 在管道模式下,创建不在字典中的缺少的词根/词缀组合。--reverse, --dont-reverse
: 在管道模式下,反转建议列表的顺序。--suggest, --dont-suggest
: 建议在管道模式下进行可能的替换,如果为假,则aspell
将报告拼写错误,并且不尝试任何建议或可能的更正。--time, --dont-time
: 给加载时间计时,并建议在管道模式下的时间。
示例
example.txt
文件内容如下:
1 | The quick brown fox jumped over the extraordinarily lazy dog. |
检查文件example.txt
是否存在拼写错误,如果有拼写错误则出现选择式交互选项,如果没有拼写错误则不会出现交互式选项。
1 | aspell -c sample.txt |
使用aspell
大量检查单词。运行时将等待用户输入,添加任意数量的单词,完成后按Ctrl + D
完成输入,然后即可看到aspell
将在输入的下方显示拼写错误的单词。
1 | aspell list |
- 0鼓励
- 0菜狗
- 0正确
- 0错误
- 0思考
- 0无聊