blogs

Description

MyBlogs

Software Architecture

这是我的博客汇总

Linux 命令学习(2)-网络命令

@(笔记-初稿)[Linux]

[TOC]

记录我对于Linux的学习,网络相关的命令:

ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

ping

ping 用于检测主机。ping 使用 ICMP 协议规定的 ECHO_REQUEST 数据报引发一个来自主机或网管的 ICMP ECHO_RESPONSE 回应。 ECHO_REQUEST 数据报(“ping”信
息)有一个 IP 和 ICMP 头部, 其后跟随了一个结构,包含一个时间相关的值以及一个任意的“pad” 字节的随机数用以填充数据包。
格式:ping [选项] 目标主机
常用选项:

  1. -c<完成次数> 设置完成要求回应的次数。
  2. -i<间隔秒数> 指定收发信息的间隔时间。
  3. -R 记录路由过程。
  4. -s<数据包大小> 设置数据包的大小。
  5. -t<存活数值> 设置存活数值TTL的大小。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ping www.baidu.com #需要手动ctrl+c
PING www.a.shifen.com (61.135.169.121) 56(84) 比特的数据。
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=57 时间=5.32 毫秒
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=57 时间=9.83 毫秒
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=57 时间=12.5 毫秒
64 比特,来自 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=57 时间=7.99 毫秒
^C
--- www.a.shifen.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 5.319/8.908/12.494/2.618 ms

ping -c 4 www.baidu.com #四次响应结束
PING www.a.shifen.com (61.135.185.32) 56(84) 比特的数据。
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=1 ttl=57 时间=4.45 毫秒
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=2 ttl=57 时间=11.0 毫秒
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=3 ttl=57 时间=16.4 毫秒
64 比特,来自 61.135.185.32 (61.135.185.32): icmp_seq=4 ttl=57 时间=18.1 毫秒

--- www.a.shifen.com ping 统计 ---
已发送 4 个包, 已接收 4 个包, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 4.453/12.486/18.106/5.331 ms

ifconfig

ifconfig 配置网络接口
格式:ifconfig [接口]
ifconfig 接口 [aftype] options | address …
常用选项:

  1. 接口 接口名称
  2. up 启动指定的网络设备
  3. down 关闭指定的网络设备。
  4. add<地址> 设置网络设备IPv6的IP地址。
  5. del<地址> 删除网络设备IPv6的IP地址。
  6. mtu<字节> 设置网络设备的MTU。
  7. netmask<子网掩码> 设置网络设备的子网掩码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ifconfig #查看当前系统有几个网卡信息
eth0 ...
lo ...

ifconfig eth0 up # 启动网卡eth0
ifconfig eth0 down # 关闭网卡eth0
ifconfig eth0 reload # 重启

ifconfig eth0 add 1030::C9B4:FF12:48AA:1A2B/64 # 为网卡eth0配置IPv6地址
ifconfig eth0 del 1030::C9B4:FF12:48AA:1A2B/64 # 为网卡eth0删除IPv6地址

ifconfig eth0 192.168.1.166 netmask 255.255.255.0 up #配置IPv4地址和子网掩码,临时生效

ifconfig eth0 mtu 1500 #设置最大传输单元

netstat命令

netstat 显示网络状态包括网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。
格式: netstat [DESCRIPTION] [OPTIONS]
DESCRIPTION netstat 程序显示Linux网络子系统的信息。 输出信息的类型是由第一个参数控制的

  1. (none) 无选项时, netstat 显示打开的套接字. 如果不指定任何地址族,那么打印出所有已配置地址族的有效套接字。
  2. -r 显示内核路由表
  3. -g 显示IPv4 和 IPv6的IGMP组播组成员关系信息
  4. -i 显示所有网络接口列表或者是指定的 iface 。
  5. -M 显示一份所有经伪装的会话列表
  6. -s 显示每种协议的统计信息

选项

  1. -a (all)显示所有选项,默认不显示LISTEN相关
  2. -c 每隔一个固定时间,执行该netstat命令。
  3. -e 显示扩展信息,例如uid等
  4. -t (tcp)仅显示tcp相关选项
  5. -u (udp)仅显示udp相关选项
  6. -n 拒绝显示别名,能显示数字的全部转化成数字。
  7. -l 仅列出有在 Listen (监听) 的服務状态
  8. -p 显示建立相关链接的程序名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
netstat -a  #列出所有端口 会显示很多信息
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:mxi *:* LISTEN
...

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 7 [ ] DGRAM 8277 /dev/log
unix 2 [ ACC ] STREAM LISTENING 6712 @/com/ubuntu/upstart

netstat -at # 列出所有 tcp 端口
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:mxi *:* LISTEN
...

Linux 命令学习(2)-文件管理相关命令

@(笔记-初稿)[Linux]

[TOC]

记录我对于Linux的学习,系统相关的命令:

ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

uptime

uptime 打印系统总共运行了多长时间和系统的平均负载
用法: uptime [选项]
选项:

  1. -p, --pretty show uptime in pretty format
  2. -h, --help 显示此帮助然后离开
  3. -s, --since system up since
  4. -V, --version 显示程序版本然后离开
1
2
#uptime
22:15:57 up 3 days, 7:34, 2 users, load average: 1.39, 1.73, 1.72
1
2
3
4
22:15:57            //系统当前时间
up 3 days, 7:34 //主机已运行时间
2 user //用户连接数,是总连接数而不是用户数
load average: 1.39, 1.73, 1.72 // 系统平均负载,统计最近1,5,15分钟的系统平均负载

ps:系统平均负载是指运行时间内系统处于可运行与不可中断状态(比如等待disk IO)的平均进程数。

free

free 用于显示内存状态,包括物理内存、交换内存(swap)和内核缓冲区内存
用法: free [选项]
选项:

  1. -b  以Byte为单位显示内存使用情况。
  2. -k  以KB为单位显示内存使用情况。
  3. -m  以MB为单位显示内存使用情况。
  4. -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。
  5. o  不显示缓冲区调节列。
  6. -s<间隔秒数>  持续观察内存使用状况。
  7. -t  显示内存总和列。
  8. -V  显示版本信息。
1
2
3
4
5
6
7
8
9
10
11
#free
total used free shared buffers cached
Mem: 2054216 1917316 136900 260 40320 125036
-/+ buffers/cache: 1751960 302256
Swap: 0 0 0
#free -h #用合适的单位显示使用情况
total used free shared buffers cached
Mem: 2.0G 1.8G 133M 260K 39M 122M
-/+ buffers/cache: 1.7G 295M
Swap: 0B 0B 0B

1
2
3
4
5
6
7
8
9
10
11
12
Mem 一行指的是内存的使用情况
-/+ buffers/cache
-/buffers/cache 的内存数,相当于第一行的 used-buffers-cached
+/buffers/cache 的内存数,相当于第一行的 free+buffers+cached
Swap 行是交换空间的使用情况

total 总内存数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总数
buffers 缓冲内存数
cached 缓存内存数

不过在新的内核中,free命令的输出发生了变化,比如:

1
2
3
4
#free
total used free shared buff/cache available
Mem: 1016060 542592 102148 29912 371320 240232
Swap: 0 0 0
1
2
3
4
5
6
7
8
9
10
没有了-/+ buffers/cache,并且buff/cache列合并了
Mem 一行指的是内存的使用情况
Swap 行是交换空间的使用情况

total 总内存数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总数
buff/cache 缓冲内存数
available 还可以被应用程序使用的物理内存大小

vmstat

vmstat 显示虚拟内存状态(“Virtual Memory Statistics”)的统计信息,但是它可以报告关于进程、内存、I/O等系统整体运行状态
用法: vmstat [选项]

  1. -a 显示活动内页;
  2. -f 显示启动后创建的进程总数;
  3. -m 显示slab信息;
  4. -n 头信息仅显示一次;
  5. -s 以表格方式显示事件计数器和内存状态;
  6. -d 报告磁盘状态;
  7. -p 显示指定的硬盘分区状态;
  8. -S 输出信息的单位。
  9. -t 在每行增加时间辍
  10. -w 宽频显示
1
2
3
4
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 71536 12192 229944 0 0 5 3 6 7 0 0 99 0 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在vm模式中
procss
r: 运行队列中进程数量
b: 处于不可中断等待(等待IO)的进程数量
memory
swpd: 使用虚拟内存大小
free: 空闲物理内存大小
buff: 缓冲的内存大小
cache: 用作缓存的内存大小
swap
si: 即sAmount of memory swapped in from disk (/s),每秒从交换区写到内存的大小,由磁盘调入内存
so: 即Amount of memory swapped to disk (/s),每秒写入交换区的内存大小,由内存调入磁盘
io
si: Blocks received from a block device (blocks/s).每秒读取的块数
so: Blocks sent to a block device (blocks/s). 每秒写入的块数
system
in: 每秒中断数,包括时钟中断
cs: 每秒上下文切换数
cpu
us: 用户进程执行时间百分比(user time)
sy: 内核系统进程执行时间百分比(system time)
id: 空闲时间百分比
wa: IO等待时间百分比
st: Time stolen from a virtual machine

pidstat

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标,还可以看线程的信息。
用法: pidstat [选项]
常用选项:

  1. -d 展示磁盘 I/O 统计数据
  2. -R 报告实时优先级和调度策略信息
  3. -r 显示内存使用情况
  4. -s 显示栈相关信息
  5. -t 查看线程相关的信息,默认是进程的;与其他命令结合可以查看线程相关的信息
  6. -u 各个进程的cpu使用统计 默认参数
  7. -w 表示查看上下文切换情况
  8. -p 指定进程id

cpu 统计信息

1
2
3
4
pidstat -p 1 #显示进程1的 cpu 统计信息
22:55:16 UID PID %usr %system %guest %wait %CPU CPU Command
22:55:16 0 1 0.00 0.00 0.00 0.00 0.00 0 systemd

  1. %usr 用户空间的cpu使用率
  2. system 内核空间的cpu使用率
  3. %guest 进程在虚拟机占用cpu的百分比
  4. %wait 等待上下文切换的cpu使用率
  5. %CPU 总的cpu使用率
  6. CPU 处理进程的cpu编号
  7. Command 当前进程对应的命令

磁盘 I/O 统计数据

1
2
3
4
pidstat -d -p 1
22:56:16 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
22:56:16 0 1 -1.00 -1.00 -1.00 1307 systemd

  1. kB_rd/s 每秒从磁盘读取的KB
  2. kB_wr/s 每秒写入磁盘KB
  3. kB_ccwr/s 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生
  4. iodelay 表示 I/O 的延迟(单位是时钟周期)
  5. Command 当前进程对应的命令

cpu 上下文切换

vmstat只能查看总的cpu上下文切换,pidstat可以查看每个进程的上下文切换

1
2
3
4
pidstat -w -p 1
22:06:16 UID PID cswch/s nvcswch/s Command
22:06:16 0 1 0.29 0.00 systemd

  1. cswch/s 每秒自愿上下文切换(voluntary context switches)的次数
  2. nvcswch/s 每秒非自愿上下文切换(non voluntary context switches)的次数

ps:

  1. 自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换
  2. 非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换

内存信息

1
2
3
4
5
pidstat -r -p 1

22:16:16 UID PID minflt/s majflt/s VSZ RSS %MEM Command
22:16:16 0 1 0.06 0.00 176644 8540 0.02 systemd

  1. minflt/s 任务每秒发生的次要错误,不需要从磁盘中加载页
  2. majflt/s 务每秒发生的主要错误,需要从磁盘中加载页
  3. VSZ 虚拟地址大小,虚拟内存的使用KB
  4. RSS 常驻集合大小,非交换区五里内存使用KB
  5. %MEM 使用的物理内存占比

查看线程相关信息

以查看 cpu 上下文切换为例,查看线程相关信息

1
2
3
4
5
6
7
8
9
10
pidstat -wt -p 541859

22:20:16 UID TGID TID cswch/s nvcswch/s Command
22:20:16 1000 541859 - 0.09 0.01 kate
22:20:16 1000 - 541859 0.09 0.01 |__kate
22:20:16 1000 - 541861 0.09 0.00 |__QXcbEventQueue
22:20:16 1000 - 541862 0.00 0.00 |__gmain
22:20:16 1000 - 541863 0.00 0.00 |__dconf worker
22:20:16 1000 - 541864 0.00 0.00 |__gdbus
22:20:16 1000 - 541865 0.00 0.00 |__QDBusConnection
  1. TGID 线程组ID,也就是线程组leader的进程ID,等于pid
  2. TID 线程ID

ps: pidstat 只能看到进程(也就是主线程)的信息,如果要仔细分析,还需要查看线程的相关信息。

top

top 用来监控Linux系统状况,比如cpu、内存的使用等
用法: top [选项]
常用选项:
选项:

  1. -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  2. -b 使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  3. -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  4. -p 进程PID:仅查看指定 ID 的进程;
  5. -s 使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  6. -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

  1. ? 或 h:显示交互模式的帮助;
  2. P:按照 CPU 的使用率排序,默认就是此选项;
  3. M:按照内存的使用率排序;
  4. N:按照 PID 排序;
  5. T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  6. k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  7. r:按照 PID 给某个进程重设优先级(Nice)值;
  8. q:退出 top 命令;

以下时top命令的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
top - 20:42:01 up 4 days,  3:52,  3 users,  load average: 0.93, 1.26, 1.45
任务: 315 total, 1 running, 312 sleeping, 0 stopped, 2 zombie
%Cpu(s): 19.0 us, 5.6 sy, 0.0 ni, 72.8 id, 1.5 wa, 0.9 hi, 0.2 si, 0.0 st
MiB Mem : 48128.1 total, 27592.0 free, 15048.8 used, 5487.2 buff/cache
MiB Swap: 32768.0 total, 30745.9 free, 2022.1 used. 31456.8 avail Mem

进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
1127 shaozuo 20 0 4827944 443792 76156 S 39.2 0.9 475:58.44 gnome-shell
143752 shaozuo 20 0 9.8g 1.0g 267732 S 12.3 2.2 274:39.21 chromium
493576 root 20 0 0 0 0 D 10.6 0.0 2:45.31 kworker/u8:3+events_unbound
342062 shaozuo 20 0 688556 98992 50172 S 5.0 0.2 52:39.91 chromium
1008 shaozuo 20 0 747660 148920 99328 S 4.0 0.3 135:37.79 Xorg
1427 shaozuo 20 0 1797292 132428 27772 S 3.0 0.3 17:03.96 variety
207946 shaozuo 20 0 962768 50996 29456 S 3.0 0.1 0:22.57 konsole
143603 shaozuo 20 0 3336320 807332 99196 S 2.3 1.6 209:43.42 chromium
2158 shaozuo 20 0 880248 257032 122552 S 2.0 0.5 119:11.19 chrome
2238 shaozuo 20 0 4606540 69296 40880 S 1.7 0.1 56:23.75 chrome
9637 shaozuo 20 0 4022072 360788 120844 S 1.7 0.7 86:25.07 firefox
143671 shaozuo 20 0 4732044 68084 40912 S 1.7 0.1 44:32.86 chromium
1021 shaozuo 20 0 480672 35192 4304 S 1.3 0.1 6:02.04 ibus-daemon
407636 shaozuo 20 0 105.6g 4.0g 113604 S 1.3 8.6 34:00.23 java
449984 shaozuo 20 0 4843976 618216 36124 S 1.0 1.3 1:39.73 java
84939 shaozuo 20 0 3060240 147000 113136 S 0.7 0.3 3:44.31 wpsoffice
336077 shaozuo 20 0 1199716 388972 107140 S 0.7 0.8 58:05.96 electron
490714 shaozuo 20 0 81.9g 88344 71776 S 0.7 0.2 0:04.66 WebKitWebProces

1~5行显示的系统整体信息:

  1. 第一行显示内容与uptime一样
  2. 第二行为进程信息
    1. 任务: 315 total 系统中的进程总数
    2. 1 running 正在运行的进程数
    3. 312 sleeping 睡眠的进程数
    4. 0 stopped 正在停止的进程数
    5. 2 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程
  3. 第三行为 CPU 信息 19.0 us, 5.6 sy, 0.0 ni, 72.8 id, 1.5 wa, 0.9 hi, 0.2 si, 0.0 st
    1. %Cpu(s): 19.0 us 用户模式占用的 CPU 百分比
    2. 5.6 sy 系统模式占用的 CPU 百分比
    3. 0.0 ni 改变过优先级的用户进程占用的 CPU 百分比
    4. 72.8 id 空闲 CPU 占用的 CPU 百分比
    5. 1.5 wa 等待输入/输出的进程占用的 CPU 百分比
    6. 0.9 hi 硬中断请求服务占用的 CPU 百分比
    7. 0.2 si 软中断请求服务占用的 CPU 百分比
    8. 0.0 st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
  4. 第四行为物理内存信息 单位 MiB
    1. 48128.1 total 物理内存的总量
    2. 27592.0 free 空闲的物理内存数量
    3. 15048.8 used 已使用的物理内存数量
    4. 5487.2 buff/cache 作为缓冲的内存数量
  5. 第五行为交换分区(swap)信息 单位 MiB
    1. 32768.0 total 交换分区的总大小
    2. 30745.9 free 空闲交换分区的大小
    3. 2022.1 used. 已经使用的交换分区的大小
    4. 31456.8 avail Mem 可使用的交换分区大小

从第6行开始,显示的是系统中进程的信息:

  1. PID 进程的 ID。
  2. USER 该进程所属的用户。
  3. PR 优先级,数值越小优先级越高。
  4. NI 优先级,数值越小、优先级越高。
  5. VIRT 该进程使用的虚拟内存的大小,单位为 KB。
  6. RES 该进程使用的物理内存的大小,单位为 KB。
  7. SHR 共享内存大小,单位为 KB。
  8. S 进程状态。
  9. %CPU 该进程占用 CPU 的百分比。
  10. %MEM 该进程占用内存的百分比。
  11. TIME+ 该进程共占用的 CPU 时间。
  12. COMMAND 进程的命令名。

这只是默认显示的信息,top可显示的信息还有很多,可以使用快捷键切换。
还可以使用htop,可以说是top的增强版本。

ps

ps 显示了每个进程的资源使用情况
用法: ps [options]
不过因为历史原因,在不同的Linux系统还有Unix系统上,ps的命令语法各不相同,所以目前的ps命令融合了不同派系的使用方法,ps命令支持三种使用的语法格式

  1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符
  2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符
  3. GNU 风格的长选项,选项前有两个“-”连字符

一般情况下可以混用,但是可能会有冲突
常用选项:

  1. -a 显示所有当前进程
  2. -e 显示系统所有进程
  3. -u 后接euid或name 显示指定用户的进程
  4. -l:长格式显示更加详细的信息
  5. -f 格式化信息列表
  6. a 在BSD风格下,显示自己的进程
  7. x 在BSD风格下,显示没有控制终端的进程
  8. u 显示进程的归属用户及内存的使用情

从上面的描述我们能看到 aux-aux 这两种参数组合的意义完全不同,在man文档中有如下描述:

1
2
3
4
Note that “ps -aux” is distinct from “ps aux”. The POSIX and UNIX standards require that “ps -aux” print all processes owned by a user named “x”, as well as printing all processes that would be selected by the -a option. If the user named “x” does not exist, this ps may interpret the command as “ps aux” instead and print a warning.
This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon.
大致意思是:
请注意"ps -aux"不同于"ps aux"。POSIX和UNIX的标准要求"ps -aux"打印用户名为"x"的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为"x"不存在,ps的将会解释为"ps aux",而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。
1
2
3
4
5
ps #默认情况
PID TTY TIME CMD
1216874 pts/0 00:00:01 zsh
1280028 pts/0 00:00:00 ps

结果默认会显示4列信息。

PID: 运行着的命令(CMD)的进程编号
TTY: 命令所运行的位置(终端)
TIME: 运行着的该命令所占用的CPU处理时间
CMD: 该进程所运行的命令

1
2
3
4
5
6
7
8
9
10
#显示用户进程 标准风格:
ps -e
ps -ef
ps -eF
ps -ely

#显示用户进程 BSD 风格:
ps ax
ps axu

Linux 命令学习-备份压缩相关命令

@(笔记-初稿)[Linux]

[TOC]

记录我对于Linux的学习,备份相关的命令:

ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

备份命令

tar 命令用于备份文件,本身不做压缩
格式:tar <操作参数> [选项] 文件或者目录
操作参数是指要做的动作,必选至少有一个,有:

  1. [-]A --catenate --concatenate 将一存档与已有的存档合并
  2. [-]c --create 创建一个新的存档
  3. 1.[-]d --diff --compare 比较存档与相应的未存档文件的不同之处
  4. [-]r --append 将文件附加到存档结尾
  5. [-]t --list 列出存档中文件的目录
  6. [-]u --update 仅将较新的文件附加到存档中
  7. [-]x --extract --get 从存档提取文件
  8. –delete 把指定文件从存档中删除(不要用于磁带!)

常用选项:

  1. -t 显示压缩文件的内容
  2. -z 支持gzip解压文件
  3. -j 支持bzip2解压文件
  4. -Z 支持compress解压文件
  5. -v 显示操作过程
  6. -l 文件系统边界设置
  7. -k 保留原有文件不覆盖
  8. -m 保留文件不被覆盖
  9. -W 确认压缩文件的正确性
  10. -f 指定压缩文件
1
2
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName

zip与unzip

zip 用于压缩文件。在window平台中rar是常用的压缩文件格式,但是在linux平台中zip是个使用广泛的压缩文件格式。
格式:zip [参数] [打包后的文件名] [打包的目录路径]
常用参数:

  1. -a 将文件转成ASCII模式
  2. -b<工作目录> 指定暂时存放文件的目录。
  3. -c 替每个被压缩的文件加上注释。
  4. -d 从压缩文件内删除指定的文件。
  5. -D 压缩文件内不建立目录名称。
  6. -F 尝试修复损坏的压缩文件
  7. -h 显示帮助界面
  8. -m 将文件压缩之后,删除源文件
  9. -n 特定字符串 不压缩具有特定字尾字符串的文件
  10. -o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
  11. -q 安静模式,在压缩的时候不显示指令的执行过程
  12. -r 将指定的目录下的所有子目录以及文件一起处理
  13. -S 包含系统文件和隐含文件(S是大写)
1
2
#将 /var/www/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
zip -q -r html.zip /var/www/html/

unzip 用于解压缩zip文件
格式:unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) …] [-x xfile(s) …] [-d exdir]
常用参数:

  1. -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
  2. -l 显示压缩文件内所包含的文件。
  3. -n 解压缩时不要覆盖原有的文件;
  4. -o 不必先询问用户,unzip执行后覆盖原有的文件;
  5. -P [密码] 使用zip的密码选项;
  6. -q 执行时不显示任何信息;
  7. -d<目录> 指定文件解压缩后所要存储的目录。
  8. -x<文件> 指定不要处理.zip压缩文件中的哪些文件。
  9. -Z unzip -Z等于执行zipinfo指令。
1
2
3
4
#将压缩文件html.zip在当前目录下解压缩。
unzip html.zip
#将压缩文件html.zip在目录/var/www/html/下解压缩。
unzip html.zip -d /var/www/html/

gzip

gzip 用于压缩或解压缩文件,用它压缩文件后,其名称后面会多出".gz"的扩展名
格式:gzip [OPTION]… [FILE]…
常用选项:

  1. -c或–stdout或–to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。
  2. -d或–decompress或----uncompress  解开压缩文件。
  3. -f或–force  强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
  4. -l或–list  列出压缩文件的相关信息。
  5. -n或–no-name  压缩文件时,不保存原来的文件名称及时间戳记。
  6. -N或–name  压缩文件时,保存原来的文件名称及时间戳记。
  7. -q或–quiet  不显示警告信息。
  8. -r或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
  9. -S<压缩字尾字符串>或----suffix<压缩字尾字符串>  更改压缩字尾字符串。
  10. -t或–test  测试压缩文件是否正确无误。
  11. -v或–verbose  显示指令执行过程。
  12. -<压缩效率>  压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
  13. –best  此参数的效果和指定"-9"参数相同。
  14. –fast  此参数的效果和指定"-1"参数相同。
1
2
3
4
5
6
7
8
9
10
11
12
13
ls *
a.txt b.txt c.txt #有三个文件
gzip * #压缩,不保留原文件
ls *
a.txt.gz b.txt.gz c.txt.gz


gzip -dv * //解压文件,并列出详细信息
a.txt.gz: 27.8% -- replaced with a.txt
b.txt.gz: 8.0% -- replaced with b.txt
c.txt.gz: 25.9% -- replaced with c.txt

gzip -c 待压缩文件 > 带压缩文件.gz #压缩文件并保留源文件

bzip2 系列

bzip2 是.bz2文件的压缩程序。
bunzip2 bzip2 bzcat是同一个程序,bunzip2 == bzip2 -d
格式:

  1. -c或–stdout  将压缩与解压缩的结果送到标准输出。
  2. -d或–decompress  执行解压缩。
  3. -f或–force  bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数。
  4. -h或–help  显示帮助。
  5. -k或–keep  bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
  6. -s或–small  降低程序执行时内存的使用量。
  7. -t或–test  测试.bz2压缩文件的完整性。
  8. -v或–verbose  压缩或解压缩文件时,显示详细的信息。
  9. -z或–compress  强制执行压缩。
  10. -L,–license,
  11. -V或–version  显示版本信息。
  12. –repetitive-best  若文件中有重复出现的资料时,可利用此参数提高压缩效果。
  13. –repetitive-fast  若文件中有重复出现的资料时,可利用此参数加快执行速度。
  14. -压缩等级  压缩时的区块大小

ps:
bunzip2 (以及 bzip2 -d) 对所有指定的文件进行解压缩处理。不是由 bzip2 产生的文件将被忽略,同时发出一个警告信息。 bzip2 按下
列方式由压缩文件名确定解压后的文件名:

          filename.bz2    解压成   filename
          filename.bz     解压成   filename
          filename.tbz2   解压成   filename.tar
          filename.tbz    解压成   filename.tar
          anyothername    解压成   anyothername.out

   如果文件名的后缀不是下列之一: .bz2, .bz, .tbz2 或 .tbz, .bzip2 将抱怨无法确定原始文件名,并采用原文件名加 .out 作为解压缩
   文件名。
1
2
bzip2 add.c add.s # 将原文件删除并压缩,后缀名为.bz2
bzip2 -d *.bz2 # 解压缩

bzip2recover - 恢复损坏的 bzip2 文件
格式:bzip2recover filename

Linux 命令学习-文件管理相关命令

@(笔记-初稿)[Linux]

[TOC]

记录我对于Linux的学习,文件相关的命令:

ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

创建文件的相关命令

touch 常用于将每个文件的访问和修改时间更新为当前时间,不过当直接跟一个不存在的文件名时,会创建一个空文件,大小为0

1
2
3
4
touch tody.txt
#通过ll tody.txt查看
ll tody.txt
-rw-r--r-- 1 test test 0 7月 11 10:59 dody.txt

> 通常用于重定向一个命令的输出到一个新文件中,如果之前没有命令,则会创建一个新文件,大小为0,比如可以用echo,print等命令结合>将输出重定向到一个新文件

1
2
3
4
5
6
ll dody.txt
-rw-r--r-- 1 test test 19 7月 11 11:06 dody.txt
> tody.txt
echo 'This is a new file' > ne.txt
➜ ll ne.txt
-rw-r--r-- 1 test test 19 7月 11 11:11 ne.txt

ps:如果你不是想创建新的,而是想追加内容到已有的文件,那么可以使用>>

vi/vim Vi是Unix及Linux系统下标准的编辑器,Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。可以使用vi/vim创建新文件。

1
2
#以下命令打开一个文件,需要保存,否则修改不生效
vi asbt.txt

查看文件内容的相关命令

cat 最常用的方式是将文件一次性全部输出到标准输出,或者将几个文件合并为一个文件
cat [-AbeEnstTuv] [–help] [–version] fileName

1
2
cat b.txt
cat a.txt b.txt > c.txt

more 与cat类似,不过是以分页的形式输出,按空格可以向前,按b可以退后,
格式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
常用参数:
-num 一次显示的行数
+num 从第 num 行开始显示
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行

1
2
more b.txt
more +20 b.txt

less 与 more 类似,但使用 less 可以随意浏览文件,可以使用方向键控制方向,而且 less 在查看之前不会加载整个文件。
格式:less [options] filename
常用参数:
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-i 忽略搜索时的大小写
-m 显示类似 more 命令的百分比
-N 显示每行的行号
-s 显示连续空行为一行

1
2
3
4
#显示行号
less -N b.txt
## 分页显示进程信息
ps -aux | less

ps: more 与less的不同

  1. less提供了更丰富的控制方式,比如可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
  2. less不必读整个文件,加载速度会比more更快
  3. less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容

head 查看文件的开头部分的内容
格式:head [options] filename
常用参数:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数,默认为 10,即显示 10 行的内容

1
head b.txt

tail 查看文件的最后的内容,常用于查阅正在改变的日志文件
格式:tail [options] filename
-f 循环读取 常用于查阅正在改变的日志文件
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容

1
tail -f xxx.log

删除移动复制文件等相关命令

rm 用于删除一个文件或者目录
格式:rm [options] name…
常用参数:

  1. -i 删除前逐一询问确认。
  2. -f 强制删除即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  3. -r 递归地移除目录及它们的内容
  4. -d 删除空目录
1
2
3
4
5
6
7
8
9
10
11
rm tody.txt
rm:是否删除普通空文件 'tody.txt'?n

# 不加r参数无法删除目录
mkdir md
rm md
rm: 无法删除 'md': 是一个目录

rm -r md
rm:是否删除目录 'md'?y

mv 可以将文件或目录改名、或将文件或目录移入其它位置
格式:
mv [选项]… 源文件 目标文件
mv [选项]… 源文件… 目录
常用命令:

  1. -i 覆盖前提示
  2. -f 覆盖前永不提示
1
2
3
4
5
# 重命名
mv tody.txt todx.txt

# 移动文件到目录中
mv todx.txt subdir/

ps: mv 源目录名 目标目录名 目标目录已存在,将源目录移动到目标目录;目标目录不存在则将源目录改名

cp 主要用于复制文件或目录
格式:
cp [选项]… 源文件 目标文件
cp [选项]… 源文件… 目录
常用命令:

  1. -i 覆盖前提示
  2. -f 覆盖前永不提示
  3. -r 若给出的源文件是一个目录文件,此时递归复制目录及它们的内容
  4. a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合
  5. -d 复制时保留链接
  6. -p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
1
cp -r test/ newtest

file 用于辨识文件类型
格式:file [ -bcnsvzL ] [ -f 命名文件 ] [ -m 幻数文件 ] file …
常用命令:

  1. -b  列出辨识结果时,不显示文件名称。
  2. -c   检查时打印输出幻数文件的解析结果.常与 -m 一起使用,用来在安装幻数文件之前调试它
  3. -f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
  4. -L  直接显示符号连接所指向的文件的类别。
  5. -m<幻数文件>  指定魔法数字文件。
  6. -v  显示版本信息。
  7. -z  尝试去解读压缩文件的内容。
  8. [文件或目录…] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
1
2
3
4
5
6
7
8
9
file add.c
add.c: C source, ASCII text

file -b add.c
C source, ASCII text

file add.o
add.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

修改文件属性等命令

touch 于修改文件或者目录的时间属性。比如访问时间、修改时间。
格式:touch [选项]… 文件列表…

  1. -a 仅更改文件访问时间
  2. -c,–no-create 假如目的档案不存在,不会建立新的档案
  3. -d, --date=字符串 使用指定字符串所表示的时间而非当前时间
  4. -f (被忽略的选项)
  5. -h, --no-dereference 影响所有符号链接而非被引用的文件(仅在能够更改符号链接的时间戳的系统上有用)
  6. -m 改变档案的修改时间记录。
  7. r–reference=文件 使用指定文件的时间记录
  8. -t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 代替当前时间
  9. –time=关键字 改变文件的指定时间:若关键字是 access,atime 或 use,则等同于 -a;若关键字是modify 或 mtime,则等同于 -m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# ls -l 查看最后时间
ls -l touchTestFile
-rw-r--r-- 1 shaozuo shaozuo 0 8月 2 10:09 touchTestFile

# 修改文件时间属性为当前系统时间
touch touchTestFile
ls -l touchTestFile #查看文件的时间属性
-rw-r--r-- 1 shaozuo shaozuo 0 8月 2 10:13 touchTestFile
# 也可以使用stat查看时间
stat touchTestFile
文件:touchTestFile
大小:0 块:0 IO 块:4096 普通空文件
设备:30h/48d Inode:344 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ shaozuo) Gid:( 1000/ shaozuo)
最近访问:2020-08-02 10:13:07.864729079 +0800
最近更改:2020-08-02 10:13:07.864729079 +0800
最近改动:2020-08-02 10:13:07.864729079 +0800
创建时间:-

chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。
ps:这个命令只有root才能执行。
格式:chown [选项]… [所有者][:[组]] 文件…
chown [选项]… --reference=参考文件 文件…

  1. -c, --changes 显示更改的部分的信息
  2. -f, --silent, --quiet 忽略错误信息
  3. –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
  5. –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
  6. –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
  7. -R : 处理指定目录以及其子目录下的所有文件
    1. -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历
    2. -L 遍历每一个遇到的指向目录的符号链接
    3. -P 不遍历任何符号链接(默认)

ps:如果没有指定所有者,则不会更改所有者信息。若所属组若没有指定也不会对其更改,但当加上’:’ 时 GROUP 会更改为指定所有者的主要组。所有者和所属组可以是数字或名称。

1
2
3
# 递归修改文件夹的组和所有者
chown -R shaozuo:devel fun
chown shaozuo tstfile

chgrp 与chown命令类似,不过只用于变更文件或目录的所属群组。
格式: chgrp [选项列表]… 组 文件…
chgrp [选项列表]… --reference=参考文件 文件…

  1. -c, --changes 显示更改的部分的信息
  2. -f, --silent, --quiet 忽略错误信息
  3. –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
  5. –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
  6. –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
  7. -R : 处理指定目录以及其子目录下的所有文件
    1. -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历
    2. -L 遍历每一个遇到的指向目录的符号链接
    3. -P 不遍历任何符号链接(默认)
1
2
3
4
# 递归修改文件夹的组
chgrp -R devel fun
# 修改文件夹的组
chgrp devel tstdir

chmod
格式:chmod [选项]… 模式[,模式]… 文件列表…
chmod [选项]… 八进制模式字符串 文件列表…
chmod [选项]… --reference=参考文件 文件列表…

  1. -c, --changes 显示更改的部分的信息
  2. -f, --silent, --quiet 忽略错误信息
  3. –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
  5. –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
  6. –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
  7. -R : 处理指定目录以及其子目录下的所有文件

其中模式(mode)的格式如下:
[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
其中:

  1. u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  2. r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
  3. 数字也可以表示权限,r=4,w=2,x=1。所以可读可写是rw=4+2=6
1
2
3
4
# 设置一个文件的权限有多种写法,比如将file.txt设置为自己可读可写,组可读可写,其他人可读可写
chmod ugo+rw file.txt
chmod a+aw file.txt
chmod 666 file.txt

ps: chown、chgrp与chmod都是由同样的程序员编写的,所以它们的参数与使用方式都很类似

查找文件

find 用来在指定目录下查找文件
格式:find [path…] [expression]

  1. path find之后直接是要查找的路径,如果path是空的,则搜索当前路径和其子目录。
  2. expression 第一个 - ( ) , ! 之后的是 expression,如果expression 是空字串则使用 -print 为预设 expression,表达式有三部分
    1. 选项
    2. 测试
    3. 动作

常用的expression:

  1. 选项:
    1. -daystart 从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime,-cmin, -ctime, -mmin, and -mtime)
    2. -depth 先处理目录的内容再处理目录本身
    3. -maxdepth levels 进入命令行参数指定的目录下层目录时,最深不超过levels
    4. -mindepth levels 不在levels(一个非负整数)层之内执行任何测试和动作
    5. -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
  2. 测试:
    1. +n,-n, n 比n大,比n小,正好是n
    2. -amin n : 在过去 n 分钟内被读取过
    3. -anewer file : 比文件 file 更晚被读取过的文件
    4. -atime n : 在过去n天内被读取过的文件
    5. -cmin n : 在过去 n 分钟内被修改过
    6. -cnewer file :比文件 file 更新的文件
    7. -ctime n : 在过去n天内被修改过的文件
    8. -empty : 空的文件
    9. -name pattern 基本的文件名(将路径去掉了前面的目录)与shell模式pattern相匹配
    10. -path pattern 文件名与shell模式pattern相匹配
    11. -type c c代表类型,d : 目录,f: 一般文件,l: 符号连结,等等。
  3. 动作:
    1. -exec command ;执行 command;如果命令返回状态值0,那么 exec 返回true。所有 find其余的命令行参数将作为提供给命令的参数,直到遇到一个由 ;' 组成的参数为止。命令的参数中,字符串{}’ 将以正在处理的文件名替换。所有的{}'都会被替换,不仅是在单独的一个参数中.有些版本的 find不是这样做的。 这些参数可能需要用' 来escape 或者用括号括住,防止它们被shell展开。命令是从起始目录执行的
    2. -ok command ; 类似 -exec 但是会先向用户询问 (在标准输入); 如果回应不是以 y' 或Y’ 起始则不会运行 command 而是返回false。
1
2
3
4
5
6
7
8
9
10
# 查找当前目录及子目录下以.s结尾的文件
find -name "*.s"
./d_add.s
./add.s

# 将目前目录及子目录下中所有一般文件列出
find -type f

# 查找当前目录及子目录下以.out结尾的文件,删除,删除之前询问一下
find -name "*.out" -ok rm {} \;

对比文件

diff 以逐行的方式,比较文本文件的异同处
格式: diff [选项] 源文件 目标文件
diff选项有很多,可以访问如下路径查看diff中文文档
有两个文件,a.txt如下

1
2
3
4
5
6
7
8
9
a
b
c
d

d
c
b
a

b.txt如下:

1
2
3
4
5
6
7
8
9
10
a
d
c
b

d
f
f
b
a

当使用diff a.txt b.txt时,输出如下结果:

1
2
3
4
5
6
7
8
9
10
11
2,3d1
< b
< c
4a3,4
> c
> b
7c7,8
< c
---
> f
> f

现在让我们来解释一下该输出的结果
首先介绍一些概念:

  1. 变动位置 由三部分组成:行号[adc]行号
    1. 变动方式 adc 分别表示“增加”,“删除”,“内容改变”
    2. 在adc之前的数字表示源文件中的行,
    3. 之后的数字表示目标文件中的行
  2. < > 分别表示源文件和目标文件
  3. — 用来分割两个文件

所以

1
2
3
4
5
6
7
8
9
10
11
2,3d1 #源文件中删除第2,3行
< b
< c
4a3,4 #将以下行增加到目标文件中的第3,4行
> c
> b
7c7,8 #件源文件中的第7行删除,---下表示增加将以下行增加到目标文件中的第7,8行
< c
---
> f
> f

cmp 按字节比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号
格式: cmp [选项]… 文件1 文件2

  1. -c或–print-chars  除了标明差异处的十进制字码之外,一并显示该字符所对应字符。
  2. -i<字符数目>或–ignore-initial=<字符数目>  指定一个数目。
  3. -l或–verbose  标示出所有不一样的地方。
  4. -s或–quiet或–silent  不显示错误信息。
  5. -v或–version  显示版本信息。
  6. –help  在线帮助。
1
2
cmp aa.txt bb.txt
aa.txt bb.txt 不同:第 3 字节,第 2 行

分割文件

split 用于将一个文件分割成数个。
格式:split [OPTION] [INPUT [PREFIX]]
参数

  1. -<行数> 或 -l num : 指定每多少行切成一个小文件
  2. -b<字节> : 指定每多少字节切成一个小文件,可以使用后缀:b=512字节,k=1K,m=1 Meg
  3. -C<字节> : 与参数"-b"相似,但是在切割时将尽量维持每行的完整性

[PREFIX] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
ps: 该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
如果没有设置[PREFIX]则默认以"x"开头,
如果没有指定INPUT,或INPUT是-,就从标准输入读取数据.

1
2
3
4
split -6 a.c
$ ls #执行ls指令
#获得当前目录结构
a.c xaa xab

csplit 用于将文件依照指定的范本样式分割
格式:csplit [OPTION]… FILE PATTERN…
选项:

  1. -b<输出格式>或–suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
  2. -f<输出字首字符串>或–prefix=<输出字首字符串>:预设的输出字首字符串其文件名为xx00,xx01等,如果制定输出字首字符串为“hello”,则输出的文件名称会变成hello00,hello、01…
  3. -k或–keep-files:保留文件,就算发生错误或中断执行,与不能删除已经输出保存的文件;
  4. -n<输出文件名位数>或–digits=<输出文件名位数>:预设的输出文件名位数其文件名称为xx00,xx01…如果用户指定输出文件名位数为“3”,则输出的文件名称会变成xx000,xx001等;
  5. -q或-s或–quiet或——silent:不显示指令执行过程;
  6. -z或–elide-empty-files:删除长度为0 Byte文件。

格式:

  1. /[正则表达式]/ 创建从当前行开始直到(但不包含)包含指定模式的那一行的段的文件。
  2. INTEGER 创建从当前行开始直到(但不包含)指定行
  3. {*} 表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
  4. %[正则表达式]% 使包含指定模式的行成为当前行,但不为段创建一个文件。
1
2
3
4
5
6
7
8
9
10
11

csplit file1 3 #会将文件file1切分为两个文件,一个包含1-2,另一个包含3-end

csplit file1 11 22 33 44 #会将文件file1切分5为个文件,一个包含1-10,11-21,22-32,33-43,44-

csplit file1 100 {*} #会将文件file1按照100行切分,直到末尾

csplit -n 3 file1 120 # 将文本文件file1以120行为分界点切割成2份,并指定输出文件名的位数为3

csplit file1 /"Chapter X"/ # 文件以字符串”Chapter X”为分界符,分成两部分

统计文件中信息

wc 用于计算字数,如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
格式: wc [选项]… [文件列表]
选项:

  1. -c, --bytes 输出字节统计数
  2. -m, --chars 输出字符统计数
  3. -l, --lines 输出换行符统计数
  4. -w, --words 输出单词统计数
1
2
3
4
5
6
7
8
9

wc add.c
11 23 149 add.c # 行数为11、单词数23、字节数149

wc add.c add.s
11 23 149 add.c
56 122 895 add.s
67 145 1044 总用量

文本排序

sort 用于将文本文件内容加以排序。它以行为单位来排序。
格式:[OPTION]… [FILE]…
常用选项:

  1. -b 忽略每行前面开始出的空格字符。
  2. -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  3. -f 排序时,将小写字母视为大写字母。
  4. -g 按照通常的数值进行比较,,暗含-b
  5. -i 排序时,只考虑[\040-\0176]字符。
  6. -m 将几个排序好的文件进行合并。
  7. -M 将前面3个字母依照月份的缩写进行排序。
  8. -n 依照字符串的数值的大小排序,暗含-b
  9. -u 意味着是唯一的(unique),输出的结果是去完重了的。
  10. -o<输出文件> 将排序后的结果存入指定的文件。
  11. -r 以相反的顺序来排序。
  12. -t<分隔字符> 指定排序时所用的栏位分隔字符。
  13. -k POS1[,POS2] 从关键字POS1开始,POS2结束. 字段数和字符偏移量都从1开始计数(与+POS1选项比较)
  14. +POS1 [-POS2] 从关键字POS1开始,到POS2之前结束(快过时了) 字段数和字符偏移量都从零开始计数(与-k选项比较)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat testsort.txt
Math 95
English 85
Physics 30
Chemistry 70

sort testsort.txt
Chemistry 70
English 85
Math 95
Physics 30

sort -r testsort.txt # 相反顺序排序
Physics 30
Math 95
English 85
Chemistry 70

uniq 用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
选项:uniq [选项]… [输入 [输出]]
常用选项:

  1. -c或–count 在每列旁边显示该行重复出现的次数。
  2. -d或–repeated 仅显示重复出现的行列。
  3. -D 显示所有重复的行
  4. -f, --skip-fields=N 比较时跳过前 N 个域、
  5. –group[=METHOD] 显示所有行,用一个空行分隔每一组 METHOD={separate(default),prepend, append, both}
  6. -i, --ignore-case 比较时忽略大小写
  7. -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
  8. -u或–unique 只显示不重复的行。
  9. -w, --check-chars=N 对每行第 N 个字符以后的内容不作比较
  10. [输入] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
  11. [输出] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

域指一个由空字符(通常是空格和/或制表符)和紧随的非空字符组成的序列。同时使用跳过域和跳过字符选项时,先跳过域再跳过字符。

ps:uniq只对相邻的重复行进行处理,所以需要提前使用sort进行排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cat testuniq.txt
Math 95
Math 95
Math 95
English 85
English 85
English 85
English 85
Physics 30
Physics 30
Chemistry 70
Chemistry 70
Chemistry 70
Chemistry 70

uniq testuniq.txt
Math 95
English 85
Physics 30
Chemistry 70

uniq -c testuniq.txt
3 Math 95
4 English 85
2 Physics 30
4 Chemistry 70

文件内容查找

grep 命令用于查找文件里符合条件的字符串,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
grep 有两个变种变种,egrep 和 fgrep 。 Egrep 与 grep -E 相同。 Fgrep 与 grep -F 相同。

格式:grep [options] PATTERN [FILE…]
常用选项:

  1. -a 或 --text : 不要忽略二进制的数据。
  2. -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  3. -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  4. -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  5. -c 或 --count : 计算符合样式的列数。
  6. -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
  7. -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  8. -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  9. -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  10. -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  11. -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  12. -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  13. -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  14. -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  15. -i 或 --ignore-case : 忽略字符大小写的差别。
  16. -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
  17. -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  18. -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
  19. -o 或 --only-matching : 只显示匹配PATTERN 部分。
  20. -q 或 --quiet或–silent : 不显示任何信息。
  21. -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  22. -s 或 --no-messages : 不显示错误信息。
  23. -v 或 --revert-match : 显示不包含匹配文本的所有行。
  24. -V 或 --version : 显示版本信息。
  25. -w 或 --word-regexp : 只显示全字符合的列。
  26. -x --line-regexp : 只显示全列符合的列。
  27. -y : 此参数的效果和指定"-i"参数相同。
1
2
3
4
5
grep match_pattern file_name # 在文件中搜索一个单词
grep "match_pattern" file_1 file_2 file_3 #在多个文件中查找
grep -v "match_pattern" file_name #输出除之外的所有行

grep –e "正则表达式" 文件名 #使用正则表达式
0%